mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
x86/hyperv: stash and use the configured max VP index
The value returned from CPUID is the maximum number for virtual processors supported by Hyper-V. It could be larger than the maximum number of virtual processors configured. Stash the configured number into a variable and use it in calculations. Signed-off-by: Wei Liu <liuwe@microsoft.com> Reviewed-by: Roger Pau Monné <roger.pau@citrix.com>
This commit is contained in:
1 parent
779efdbb50
commit
b58dc6dbfa
4 files changed
+7
-2
No files matched your search
@@ -33,6 +33,7 @@ DEFINE_PER_CPU_READ_MOSTLY(void *, hv_input_page);
|
||||
DEFINE_PER_CPU_READ_MOSTLY(void *, hv_vp_assist);
|
||||
DEFINE_PER_CPU_READ_MOSTLY(unsigned int, hv_vp_index);
|
||||
|
||||
unsigned int __read_mostly hv_max_vp_index;
|
||||
static bool __read_mostly hcall_page_ready;
|
||||
|
||||
static uint64_t generate_guest_id(void)
|
||||
@@ -143,6 +144,9 @@ static int setup_hypercall_pcpu_arg(void)
|
||||
rdmsrl(HV_X64_MSR_VP_INDEX, vp_index_msr);
|
||||
this_cpu(hv_vp_index) = vp_index_msr;
|
||||
|
||||
if ( vp_index_msr > hv_max_vp_index )
|
||||
hv_max_vp_index = vp_index_msr;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -28,6 +28,7 @@
|
||||
DECLARE_PER_CPU(void *, hv_input_page);
|
||||
DECLARE_PER_CPU(void *, hv_vp_assist);
|
||||
DECLARE_PER_CPU(unsigned int, hv_vp_index);
|
||||
extern unsigned int hv_max_vp_index;
|
||||
|
||||
static inline unsigned int hv_vp_index(unsigned int cpu)
|
||||
{
|
||||
|
||||
@@ -166,7 +166,7 @@ int hyperv_flush_tlb(const cpumask_t *mask, const void *va,
|
||||
{
|
||||
unsigned int vpid = hv_vp_index(cpu);
|
||||
|
||||
if ( vpid >= ms_hyperv.max_vp_index )
|
||||
if ( vpid > hv_max_vp_index )
|
||||
{
|
||||
local_irq_restore(irq_flags);
|
||||
return -ENXIO;
|
||||
|
||||
@@ -33,7 +33,7 @@ int cpumask_to_vpset(struct hv_vpset *vpset,
|
||||
{
|
||||
int nr = 1;
|
||||
unsigned int cpu, vcpu_bank, vcpu_offset;
|
||||
unsigned int max_banks = ms_hyperv.max_vp_index / 64;
|
||||
unsigned int max_banks = hv_max_vp_index / 64;
|
||||
|
||||
/* Up to 64 banks can be represented by valid_bank_mask */
|
||||
if ( max_banks > 64 )
|
||||
|
||||