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:
Wei Liu authored and Wei Liu committed 2020-05-06 10:40:42 +01:00
1 parent 779efdbb50
commit b58dc6dbfa
4 files changed
+7 -2

No files matched your search

+4
View File
@@ -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;
}
+1
View File
@@ -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)
{
+1 -1
View File
@@ -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;
+1 -1
View File
@@ -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 )
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.