/* Most of Power/RAS hidden from guests. */
p->extd.raw[0x7].a = p->extd.raw[0x7].b = p->extd.raw[0x7].c = 0;
+ p->extd.raw[0x8].d = 0;
+
switch ( p->x86_vendor )
{
case X86_VENDOR_INTEL:
p->extd.raw[0x5] = EMPTY_LEAF;
p->extd.raw[0x6].a = p->extd.raw[0x6].b = p->extd.raw[0x6].d = 0;
+
+ p->extd.raw[0x8].a &= 0x0000ffff;
+ p->extd.raw[0x8].c = 0;
break;
case X86_VENDOR_AMD:
p->extd.raw_fms = p->basic.raw_fms;
p->extd.raw[0x1].b &= 0xff00ffff;
p->extd.e1d |= p->basic._1d & CPUID_COMMON_1D_FEATURES;
+
+ p->extd.raw[0x8].a &= 0x0000ffff; /* GuestMaxPhysAddr hidden. */
+ p->extd.raw[0x8].c &= 0x0003f0ff;
break;
}
}
special_features[FEATURESET_7b0]);
cpuid_featureset_to_policy(fs, p);
+
+ p->extd.maxphysaddr = min(p->extd.maxphysaddr, max->extd.maxphysaddr);
+ p->extd.maxphysaddr = min_t(uint8_t, p->extd.maxphysaddr,
+ d->arch.paging.gfn_bits + PAGE_SHIFT);
+ p->extd.maxphysaddr = max_t(uint8_t, p->extd.maxphysaddr,
+ (p->basic.pae || p->basic.pse36) ? 36 : 32);
+
+ p->extd.maxlinaddr = p->extd.lm ? 48 : 32;
+
recalculate_xstate(p);
recalculate_misc(p);
}
res->a = (res->a & ~0xff) | 3;
break;
- case 0x80000008:
- res->a = paddr_bits | (vaddr_bits << 8);
- res->b = p->extd.e8b;
- break;
-
case 0x00000005: /* MONITOR/MWAIT */
case 0x0000000b: /* Extended Topology Enumeration */
case 0x8000000a: /* SVM revision and features */
case 0x2 ... 0x3:
case 0x7 ... 0x9:
case 0xc ... XSTATE_CPUID:
- case 0x80000000 ... 0x80000007:
+ case 0x80000000 ... 0x80000008:
ASSERT_UNREACHABLE();
/* Now handled in guest_cpuid(). */
}
switch ( leaf )
{
- unsigned int tmp;
-
case 0x1:
/* Fix up VLAPIC details. */
res->b &= 0x00FFFFFFu;
res->a = (res->a & ~0xff) | 3;
break;
- case 0x80000008:
- res->a &= 0xff;
- tmp = d->arch.paging.gfn_bits + PAGE_SHIFT;
- if ( res->a > tmp )
- res->a = tmp;
-
- tmp = (p->basic.pae || p->basic.pse36) ? 36 : 32;
- if ( res->a < tmp )
- res->a = tmp;
-
- res->a |= (p->extd.lm ? vaddr_bits : 32) << 8;
-
- res->b = p->extd.e8b;
- break;
-
case 0x8000001c:
if ( !cpu_has_svm )
{
case 0x2 ... 0x3:
case 0x7 ... 0x9:
case 0xc ... XSTATE_CPUID:
- case 0x80000000 ... 0x80000007:
+ case 0x80000000 ... 0x80000008:
ASSERT_UNREACHABLE();
/* Now handled in guest_cpuid(). */
}
default:
goto legacy;
- case 0x80000000 ... 0x80000007:
+ case 0x80000000 ... 0x80000008:
*res = p->extd.raw[leaf & 0xffff];
break;
}