Skip to content

Commit

Permalink
x86: add new Xen cpuid node for max address width info
Browse files Browse the repository at this point in the history
On very large hosts a pv-guest needs to know whether it will have to
handle frame numbers larger than 32 bits in order to select the
appropriate grant interface version.

Add a new Xen specific CPUID node to contain the maximum machine address
width similar to the x86 CPUID node 0x80000008 containing the maximum
physical address width. The maximum frame width needs to take memory
hotplug into account.

Signed-off-by: Juergen Gross <[email protected]>
Reviewed-by: Jan Beulich <[email protected]>
  • Loading branch information
jgross1 authored and jbeulich committed Sep 28, 2017
1 parent 0c1ffc6 commit c3d74ac
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 1 deletion.
7 changes: 7 additions & 0 deletions xen/arch/x86/traps.c
Original file line number Diff line number Diff line change
Expand Up @@ -930,6 +930,13 @@ void cpuid_hypervisor_leaves(const struct vcpu *v, uint32_t leaf,
res->b = v->vcpu_id;
break;

case 5: /* PV-specific parameters */
if ( is_hvm_domain(d) || subleaf != 0 )
break;

res->b = flsl(get_upper_mfn_bound()) + PAGE_SHIFT;
break;

default:
ASSERT_UNREACHABLE();
}
Expand Down
12 changes: 11 additions & 1 deletion xen/include/public/arch-x86/cpuid.h
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,16 @@
#define XEN_HVM_CPUID_IOMMU_MAPPINGS (1u << 2)
#define XEN_HVM_CPUID_VCPU_ID_PRESENT (1u << 3) /* vcpu id is present in EBX */

#define XEN_CPUID_MAX_NUM_LEAVES 4
/*
* Leaf 6 (0x40000x05)
* PV-specific parameters
* Sub-leaf 0: EAX: max available sub-leaf
* Sub-leaf 0: EBX: bits 0-7: max machine address width
*/

/* Max. address width in bits taking memory hotplug into account. */
#define XEN_CPUID_MACHINE_ADDRESS_WIDTH_MASK (0xffu << 0)

#define XEN_CPUID_MAX_NUM_LEAVES 5

#endif /* __XEN_PUBLIC_ARCH_X86_CPUID_H__ */

0 comments on commit c3d74ac

Please sign in to comment.