svn commit: r428081 - in head/sysutils/cfengine39: . files

Steven Kreuzer skreuzer at FreeBSD.org
Wed Dec 7 19:31:29 UTC 2016


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)


More information about the svn-ports-head mailing list