[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH biosdevname]: handle dom0 on AMD systems
Starting with xen-4.7 cpuid() will return with the hypervisor bit set in a dom0 when running on an AMD system. As a result biosdevname thinks it runs in a guest and does nothing. Detect a dom0 by looking into xenfs. This works with classic xenlinux based kernels and with pvops based kernels. Signed-off-by: Olaf Hering <olaf@xxxxxxxxx> --- src/bios_dev_name.c | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) --- a/src/bios_dev_name.c +++ b/src/bios_dev_name.c @@ -133,6 +133,31 @@ cpuid (u_int32_t eax, u_int32_t ecx) } /* + Starting with xen-4.7 cpuid will return with the hypervisor bit set + on AMD systems. This breaks biosdevname and network interface names. + Instead of relying on cpuid check for dom0 in xenfs. +*/ +static int +running_in_dom0(void) +{ + size_t len = 0; + char buf[16]; + FILE *f = fopen("/proc/xen/capabilities", "r"); + + if (!f) + return 0; + memset(buf, 0, sizeof(buf)); + len = fread(&buf, 1, sizeof(buf) - 1, f); + fclose(f); + while(len && --len && len < sizeof(buf)) { + if (buf[len] == '\n') + buf[len] = '\0'; + } + len = !strcmp("control_d", buf); + return len; +} + +/* Algorithm suggested by: http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=1009458 */ @@ -144,7 +171,11 @@ running_in_virtual_machine (void) ecx = cpuid (eax, ecx); if (ecx & 0x80000000U) + { + if (running_in_dom0()) + return 0; return 1; + } return 0; } Attachment:
signature.asc _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |