Date: Wed, 7 Dec 2016 19:31:27 +0000 (UTC) From: Steven Kreuzer <skreuzer@FreeBSD.org> To: ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org Subject: svn commit: r428081 - in head/sysutils/cfengine39: . files Message-ID: <201612071931.uB7JVR6u028321@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: skreuzer Date: Wed Dec 7 19:31:27 2016 New Revision: 428081 URL: https://svnweb.freebsd.org/changeset/ports/428081 Log: Add support for detecting when cfengine is running under Xen. Reviewed by: cy, gjb Approved by: cy Differential Revision: D8607 Added: head/sysutils/cfengine39/files/patch-configure.ac (contents, props changed) head/sysutils/cfengine39/files/patch-libenv_sysinfo.c (contents, props changed) Modified: head/sysutils/cfengine39/Makefile Modified: head/sysutils/cfengine39/Makefile ============================================================================== --- head/sysutils/cfengine39/Makefile Wed Dec 7 17:59:39 2016 (r428080) +++ head/sysutils/cfengine39/Makefile Wed Dec 7 19:31:27 2016 (r428081) @@ -3,7 +3,7 @@ PORTNAME= cfengine PORTVERSION= 3.9.1 -PORTREVISION= 4 +PORTREVISION= 5 # XXX Remember to update files/patch-configure.am with any new version number. CATEGORIES= sysutils MASTER_SITES= https://s3.amazonaws.com/cfengine-package-repos/tarballs/ Added: head/sysutils/cfengine39/files/patch-configure.ac ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/sysutils/cfengine39/files/patch-configure.ac Wed Dec 7 19:31:27 2016 (r428081) @@ -0,0 +1,11 @@ +--- configure.ac.orig 2016-07-28 21:25:32 UTC ++++ configure.ac +@@ -1438,7 +1438,7 @@ dnl #################################### + AC_MSG_CHECKING(for Xen cpuid-based HVM detection) + if test x"$GCC" = "xyes"; then + case $host_cpu in +- i[[3456]]86*|x86_64*) ++ i[[3456]]86*|x86_64*|amd64) + AC_DEFINE(XEN_CPUID_SUPPORT, 1, [Define if XEN cpuid-based HVM detection is available.]) + AC_MSG_RESULT(yes) + ;; Added: head/sysutils/cfengine39/files/patch-libenv_sysinfo.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/sysutils/cfengine39/files/patch-libenv_sysinfo.c Wed Dec 7 19:31:27 2016 (r428081) @@ -0,0 +1,153 @@ +--- libenv/sysinfo.c.orig 2016-07-28 21:25:33 UTC ++++ libenv/sysinfo.c +@@ -168,15 +168,16 @@ static int MiscOS(EvalContext *ctx); + static void OpenVZ_Detect(EvalContext *ctx); + + +-#ifdef XEN_CPUID_SUPPORT +-static void Xen_Cpuid(uint32_t idx, uint32_t *eax, uint32_t *ebx, uint32_t *ecx, uint32_t *edx); +-static int Xen_Hv_Check(void); +-#endif + + static bool ReadLine(const char *filename, char *buf, int bufsize); + static FILE *ReadFirstLine(const char *filename, char *buf, int bufsize); + #endif + ++#ifdef XEN_CPUID_SUPPORT ++static void Xen_Cpuid(uint32_t idx, uint32_t *eax, uint32_t *ebx, uint32_t *ecx, uint32_t *edx); ++static bool Xen_Hv_Check(void); ++#endif ++ + static void GetCPUInfo(EvalContext *ctx); + + static const char *const CLASSATTRIBUTES[][3] = +@@ -1146,14 +1147,6 @@ static void OSClasses(EvalContext *ctx) + OpenVZ_Detect(ctx); + } + +-#ifdef XEN_CPUID_SUPPORT +- else if (Xen_Hv_Check()) +- { +- Log(LOG_LEVEL_VERBOSE, "This appears to be a xen hv system."); +- EvalContextClassPutHard(ctx, "xen", "inventory,attribute_name=Virtual host,source=agent"); +- EvalContextClassPutHard(ctx, "xen_domu_hv", "source=agent"); +- } +-#endif + + #else + +@@ -1195,6 +1188,15 @@ static void OSClasses(EvalContext *ctx) + + #endif + ++#ifdef XEN_CPUID_SUPPORT ++ if (Xen_Hv_Check()) ++ { ++ Log(LOG_LEVEL_VERBOSE, "This appears to be a xen hv system."); ++ EvalContextClassPutHard(ctx, "xen", "inventory,attribute_name=Virtual host,source=agent"); ++ EvalContextClassPutHard(ctx, "xen_domu_hv", "source=agent"); ++ } ++#endif ++ + GetCPUInfo(ctx); + + #ifdef __CYGWIN__ +@@ -2518,49 +2520,6 @@ static void OpenVZ_Detect(EvalContext *c + + /******************************************************************/ + +-#ifdef XEN_CPUID_SUPPORT +- +-/* borrowed from Xen source/tools/libxc/xc_cpuid_x86.c */ +- +-static void Xen_Cpuid(uint32_t idx, uint32_t *eax, uint32_t *ebx, uint32_t *ecx, uint32_t *edx) +-{ +- asm( +- /* %ebx register need to be saved before usage and restored thereafter +- * for PIC-compliant code on i386 */ +-# ifdef __i386__ +- "push %%ebx; cpuid; mov %%ebx,%1; pop %%ebx" +-# else +- "push %%rbx; cpuid; mov %%ebx,%1; pop %%rbx" +-# endif +- : "=a"(*eax), "=r"(*ebx), "=c"(*ecx), "=d"(*edx):"0"(idx), "2"(0)); +-} +- +-/******************************************************************/ +- +-static int Xen_Hv_Check(void) +-{ +- uint32_t eax; +- union +- { +- uint32_t u[3]; +- char s[13]; +- } sig = {{0}}; +- +- Xen_Cpuid(0x40000000, &eax, &sig.u[0], &sig.u[1], &sig.u[2]); +- +- if (strcmp("XenVMMXenVMM", sig.s) || (eax < 0x40000002)) +- { +- return 0; +- } +- +- Xen_Cpuid(0x40000001, &eax, &sig.u[0], &sig.u[1], &sig.u[2]); +- return 1; +-} +- +-#endif +- +-/******************************************************************/ +- + static bool ReadLine(const char *filename, char *buf, int bufsize) + { + FILE *fp = ReadFirstLine(filename, buf, bufsize); +@@ -2597,6 +2556,48 @@ static FILE *ReadFirstLine(const char *f + } + #endif /* __linux__ */ + ++/******************************************************************/ ++ ++#ifdef XEN_CPUID_SUPPORT ++ ++/* borrowed from Xen source/tools/libxc/xc_cpuid_x86.c */ ++ ++static void Xen_Cpuid(uint32_t idx, uint32_t *eax, uint32_t *ebx, uint32_t *ecx, uint32_t *edx) ++{ ++ asm( ++ /* %ebx register need to be saved before usage and restored thereafter ++ * for PIC-compliant code on i386 */ ++# ifdef __i386__ ++ "push %%ebx; cpuid; mov %%ebx,%1; pop %%ebx" ++# else ++ "push %%rbx; cpuid; mov %%ebx,%1; pop %%rbx" ++# endif ++ : "=a"(*eax), "=r"(*ebx), "=c"(*ecx), "=d"(*edx):"0"(idx), "2"(0)); ++} ++ ++/******************************************************************/ ++ ++static bool Xen_Hv_Check(void) ++{ ++ uint32_t eax, base; ++ union ++ { ++ uint32_t u[3]; ++ char s[13]; ++ } sig = {{0}}; ++ ++ for (base = 0x40000000; base < 0x40010000; base += 0x100) ++ { ++ Xen_Cpuid(base, &eax, &sig.u[0], &sig.u[1], &sig.u[2]); ++ if (strcmp("XenVMMXenVMM", sig.s) == 0 && eax >= (base + 2)) ++ return true; ++ } ++ ++ return false; ++} ++#endif /* XEN_CPUID_SUPPORT */ ++ ++ + static void GetCPUInfo(EvalContext *ctx) + { + #if defined(MINGW) || defined(NT)
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201612071931.uB7JVR6u028321>