[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH biosdevname]: handle dom0 on AMD systems
Hello, and ping. Olaf On Wed, Aug 17, Olaf Hering wrote: > 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 |