x86/hyper-v: move struct hv_flush_pcpu{,ex} definitions to common header
Hyper-V TLB flush hypercalls definitions will be required for KVM so move them hyperv-tlfs.h. Structures also need to be renamed as '_pcpu' suffix is irrelevant for a general-purpose definition. Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com> Signed-off-by: Radim Krčmář <rkrcmar@redhat.com>
This commit is contained in:
Родитель
f33ecec9bb
Коммит
c9c92bee53
|
@ -13,22 +13,6 @@
|
||||||
#define CREATE_TRACE_POINTS
|
#define CREATE_TRACE_POINTS
|
||||||
#include <asm/trace/hyperv.h>
|
#include <asm/trace/hyperv.h>
|
||||||
|
|
||||||
/* HvFlushVirtualAddressSpace, HvFlushVirtualAddressList hypercalls */
|
|
||||||
struct hv_flush_pcpu {
|
|
||||||
u64 address_space;
|
|
||||||
u64 flags;
|
|
||||||
u64 processor_mask;
|
|
||||||
u64 gva_list[];
|
|
||||||
};
|
|
||||||
|
|
||||||
/* HvFlushVirtualAddressSpaceEx, HvFlushVirtualAddressListEx hypercalls */
|
|
||||||
struct hv_flush_pcpu_ex {
|
|
||||||
u64 address_space;
|
|
||||||
u64 flags;
|
|
||||||
struct hv_vpset hv_vp_set;
|
|
||||||
u64 gva_list[];
|
|
||||||
};
|
|
||||||
|
|
||||||
/* Each gva in gva_list encodes up to 4096 pages to flush */
|
/* Each gva in gva_list encodes up to 4096 pages to flush */
|
||||||
#define HV_TLB_FLUSH_UNIT (4096 * PAGE_SIZE)
|
#define HV_TLB_FLUSH_UNIT (4096 * PAGE_SIZE)
|
||||||
|
|
||||||
|
@ -67,8 +51,8 @@ static void hyperv_flush_tlb_others(const struct cpumask *cpus,
|
||||||
const struct flush_tlb_info *info)
|
const struct flush_tlb_info *info)
|
||||||
{
|
{
|
||||||
int cpu, vcpu, gva_n, max_gvas;
|
int cpu, vcpu, gva_n, max_gvas;
|
||||||
struct hv_flush_pcpu **flush_pcpu;
|
struct hv_tlb_flush **flush_pcpu;
|
||||||
struct hv_flush_pcpu *flush;
|
struct hv_tlb_flush *flush;
|
||||||
u64 status = U64_MAX;
|
u64 status = U64_MAX;
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
|
||||||
|
@ -82,7 +66,7 @@ static void hyperv_flush_tlb_others(const struct cpumask *cpus,
|
||||||
|
|
||||||
local_irq_save(flags);
|
local_irq_save(flags);
|
||||||
|
|
||||||
flush_pcpu = (struct hv_flush_pcpu **)
|
flush_pcpu = (struct hv_tlb_flush **)
|
||||||
this_cpu_ptr(hyperv_pcpu_input_arg);
|
this_cpu_ptr(hyperv_pcpu_input_arg);
|
||||||
|
|
||||||
flush = *flush_pcpu;
|
flush = *flush_pcpu;
|
||||||
|
@ -152,8 +136,8 @@ static void hyperv_flush_tlb_others_ex(const struct cpumask *cpus,
|
||||||
const struct flush_tlb_info *info)
|
const struct flush_tlb_info *info)
|
||||||
{
|
{
|
||||||
int nr_bank = 0, max_gvas, gva_n;
|
int nr_bank = 0, max_gvas, gva_n;
|
||||||
struct hv_flush_pcpu_ex **flush_pcpu;
|
struct hv_tlb_flush_ex **flush_pcpu;
|
||||||
struct hv_flush_pcpu_ex *flush;
|
struct hv_tlb_flush_ex *flush;
|
||||||
u64 status = U64_MAX;
|
u64 status = U64_MAX;
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
|
||||||
|
@ -167,7 +151,7 @@ static void hyperv_flush_tlb_others_ex(const struct cpumask *cpus,
|
||||||
|
|
||||||
local_irq_save(flags);
|
local_irq_save(flags);
|
||||||
|
|
||||||
flush_pcpu = (struct hv_flush_pcpu_ex **)
|
flush_pcpu = (struct hv_tlb_flush_ex **)
|
||||||
this_cpu_ptr(hyperv_pcpu_input_arg);
|
this_cpu_ptr(hyperv_pcpu_input_arg);
|
||||||
|
|
||||||
flush = *flush_pcpu;
|
flush = *flush_pcpu;
|
||||||
|
|
|
@ -741,4 +741,20 @@ struct ipi_arg_ex {
|
||||||
struct hv_vpset vp_set;
|
struct hv_vpset vp_set;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* HvFlushVirtualAddressSpace, HvFlushVirtualAddressList hypercalls */
|
||||||
|
struct hv_tlb_flush {
|
||||||
|
u64 address_space;
|
||||||
|
u64 flags;
|
||||||
|
u64 processor_mask;
|
||||||
|
u64 gva_list[];
|
||||||
|
};
|
||||||
|
|
||||||
|
/* HvFlushVirtualAddressSpaceEx, HvFlushVirtualAddressListEx hypercalls */
|
||||||
|
struct hv_tlb_flush_ex {
|
||||||
|
u64 address_space;
|
||||||
|
u64 flags;
|
||||||
|
struct hv_vpset hv_vp_set;
|
||||||
|
u64 gva_list[];
|
||||||
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -269,7 +269,7 @@ static inline int cpumask_to_vpset(struct hv_vpset *vpset,
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Clear all banks up to the maximum possible bank as hv_flush_pcpu_ex
|
* Clear all banks up to the maximum possible bank as hv_tlb_flush_ex
|
||||||
* structs are not cleared between calls, we risk flushing unneeded
|
* structs are not cleared between calls, we risk flushing unneeded
|
||||||
* vCPUs otherwise.
|
* vCPUs otherwise.
|
||||||
*/
|
*/
|
||||||
|
|
Загрузка…
Ссылка в новой задаче