[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v3 1/4] xen/libxc: Allow changes to hypervisor CPUID leaf from config file
>>> On 14.03.14 at 16:41, Boris Ostrovsky <boris.ostrovsky@xxxxxxxxxx> wrote: > On 03/14/2014 04:09 AM, Jan Beulich wrote: >>>>> On 13.03.14 at 19:08, Boris Ostrovsky <boris.ostrovsky@xxxxxxxxxx> wrote: >>> @@ -43,22 +45,29 @@ static int hypervisor_is_64bit(xc_interface *xch) >>> static void cpuid(const unsigned int *input, unsigned int *regs) >>> { >>> unsigned int count = (input[1] == XEN_CPUID_INPUT_UNUSED) ? 0 : > input[1]; >>> + uint8_t is_hyp = IS_HYPERVISOR_LEAF(input[0]); >>> #ifdef __i386__ >>> /* Use the stack to avoid reg constraint failures with some gcc flags > */ >>> asm ( >>> "push %%ebx; push %%edx\n\t" >>> - "cpuid\n\t" >>> + "testb $0xff,%5\n\t" >>> + "jz 1f\n\t" >>> + XEN_EMULATE_PREFIX >>> + "1: cpuid\n\t" >>> "mov %%ebx,4(%4)\n\t" >>> "mov %%edx,12(%4)\n\t" >>> "pop %%edx; pop %%ebx\n\t" >>> : "=a" (regs[0]), "=c" (regs[2]) >>> - : "0" (input[0]), "1" (count), "S" (regs) >>> + : "0" (input[0]), "1" (count), "S" (regs), "m" (is_hyp) >> All inputs must be in registers here, since memory references might >> use %esp and hence be off by 2 stack slots due to the pushes/pops >> surrounding the actual operation. Since you evaluate the flag prior >> to the CPUID, using "db" as constraint would seem possible here. > > gcc for some reason rejects "b" as inconsistent (but "d" works fine). And I guess "q" or "Q" could be it, then. Jan _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |