Skip to content

Commit 800b8f0

Browse files
kattisrinivasanKAGA-KOKO
authored andcommitted
X86/Hyper-V: Consolidate code for converting cpumask to vpset
Consolidate code for converting cpumask to vpset. Signed-off-by: K. Y. Srinivasan <[email protected]> Signed-off-by: Thomas Gleixner <[email protected]> Reviewed-by: Michael Kelley <[email protected]> Cc: [email protected] Cc: [email protected] Cc: [email protected] Cc: [email protected] Cc: [email protected] Cc: [email protected] Cc: [email protected] Cc: [email protected] Cc: [email protected] Link: https://lkml.kernel.org/r/[email protected]
1 parent 366f03b commit 800b8f0

File tree

1 file changed

+2
-41
lines changed

1 file changed

+2
-41
lines changed

arch/x86/hyperv/mmu.c

Lines changed: 2 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,7 @@ struct hv_flush_pcpu {
2525
struct hv_flush_pcpu_ex {
2626
u64 address_space;
2727
u64 flags;
28-
struct {
29-
u64 format;
30-
u64 valid_bank_mask;
31-
u64 bank_contents[];
32-
} hv_vp_set;
28+
struct hv_vpset hv_vp_set;
3329
u64 gva_list[];
3430
};
3531

@@ -70,41 +66,6 @@ static inline int fill_gva_list(u64 gva_list[], int offset,
7066
return gva_n - offset;
7167
}
7268

73-
/* Return the number of banks in the resulting vp_set */
74-
static inline int cpumask_to_vp_set(struct hv_flush_pcpu_ex *flush,
75-
const struct cpumask *cpus)
76-
{
77-
int cpu, vcpu, vcpu_bank, vcpu_offset, nr_bank = 1;
78-
79-
/* valid_bank_mask can represent up to 64 banks */
80-
if (hv_max_vp_index / 64 >= 64)
81-
return 0;
82-
83-
/*
84-
* Clear all banks up to the maximum possible bank as hv_flush_pcpu_ex
85-
* structs are not cleared between calls, we risk flushing unneeded
86-
* vCPUs otherwise.
87-
*/
88-
for (vcpu_bank = 0; vcpu_bank <= hv_max_vp_index / 64; vcpu_bank++)
89-
flush->hv_vp_set.bank_contents[vcpu_bank] = 0;
90-
91-
/*
92-
* Some banks may end up being empty but this is acceptable.
93-
*/
94-
for_each_cpu(cpu, cpus) {
95-
vcpu = hv_cpu_number_to_vp_number(cpu);
96-
vcpu_bank = vcpu / 64;
97-
vcpu_offset = vcpu % 64;
98-
__set_bit(vcpu_offset, (unsigned long *)
99-
&flush->hv_vp_set.bank_contents[vcpu_bank]);
100-
if (vcpu_bank >= nr_bank)
101-
nr_bank = vcpu_bank + 1;
102-
}
103-
flush->hv_vp_set.valid_bank_mask = GENMASK_ULL(nr_bank - 1, 0);
104-
105-
return nr_bank;
106-
}
107-
10869
static void hyperv_flush_tlb_others(const struct cpumask *cpus,
10970
const struct flush_tlb_info *info)
11071
{
@@ -240,7 +201,7 @@ static void hyperv_flush_tlb_others_ex(const struct cpumask *cpus,
240201

241202
if (!cpumask_equal(cpus, cpu_present_mask)) {
242203
flush->hv_vp_set.format = HV_GENERIC_SET_SPARSE_4K;
243-
nr_bank = cpumask_to_vp_set(flush, cpus);
204+
nr_bank = cpumask_to_vpset(&(flush->hv_vp_set), cpus);
244205
}
245206

246207
if (!nr_bank) {

0 commit comments

Comments
 (0)