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