[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH v10 10/11] xen: add new Xen cpuid node for max address width info



On 25/09/17 13:55, Andrew Cooper wrote:
> On 25/09/17 11:00, Juergen Gross wrote:
>> 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 <jgross@xxxxxxxx>
>> ---
>> V10:
>> - correct comment in cpuid.h (Jan Beulich)
>>
>> V9:
>> - make leaf pv-only (Jan Beulich)
>> - use hex value for mask (Jan Beulich)
>> - guest address width -> machine address width (Jan Beulich)
>> ---
>>  xen/arch/x86/traps.c                |  7 +++++++
>>  xen/include/public/arch-x86/cpuid.h | 11 ++++++++++-
>>  2 files changed, 17 insertions(+), 1 deletion(-)
>>
>> diff --git a/xen/arch/x86/traps.c b/xen/arch/x86/traps.c
>> index d8feef2942..2b464d02ef 100644
>> --- a/xen/arch/x86/traps.c
>> +++ b/xen/arch/x86/traps.c
>> @@ -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;
> 
> Leaves 3 and 4 are currently broken in terms of their subleaf handling,
> and can't easily be fixed (as the ABI is set in stone).  However, please
> lets not propagate the brokenness into new leaves.
> 
> 5/0 should report max_subleaf in res->a, in the same way as other
> subleafs get handled.

Aah, okay. So it should be okay to move the data below to res->b of
sub-leaf 0 then, I guess?


Juergen

> 
> ~Andrew
> 
>> +
>> +        res->a = generic_flsl(get_upper_mfn_bound()) + PAGE_SHIFT;
>> +        break;
>> +
>>      default:
>>          ASSERT_UNREACHABLE();
>>      }
>> diff --git a/xen/include/public/arch-x86/cpuid.h 
>> b/xen/include/public/arch-x86/cpuid.h
>> index d709340f18..2bc11bf6ef 100644
>> --- a/xen/include/public/arch-x86/cpuid.h
>> +++ b/xen/include/public/arch-x86/cpuid.h
>> @@ -85,6 +85,15 @@
>>  #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: 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__ */
> 
> 


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.