Message ID | 20231010160300.1136799-2-vkuznets@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | KVM: x86: Make Hyper-V emulation optional (AKA introduce CONFIG_KVM_HYPERV) | expand |
У вт, 2023-10-10 у 18:02 +0200, Vitaly Kuznetsov пише: > Saving a few bytes of memory per KVM VM is certainly great but what's more > important is the ability to see where the code accesses Xen emulation > context while CONFIG_KVM_XEN is not enabled. Currently, kvm_cpu_get_extint() > is the only such place and it is harmless: kvm_xen_has_interrupt() always > returns '0' when !CONFIG_KVM_XEN. > > No functional change intended. > > Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com> > --- > arch/x86/include/asm/kvm_host.h | 5 +++++ > arch/x86/kvm/irq.c | 2 ++ > 2 files changed, 7 insertions(+) > > diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h > index 17715cb8731d..e5d4b8a44630 100644 > --- a/arch/x86/include/asm/kvm_host.h > +++ b/arch/x86/include/asm/kvm_host.h > @@ -1126,6 +1126,7 @@ struct msr_bitmap_range { > unsigned long *bitmap; > }; > > +#ifdef CONFIG_KVM_XEN > /* Xen emulation context */ > struct kvm_xen { > struct mutex xen_lock; > @@ -1137,6 +1138,7 @@ struct kvm_xen { > struct idr evtchn_ports; > unsigned long poll_mask[BITS_TO_LONGS(KVM_MAX_VCPUS)]; > }; > +#endif > > enum kvm_irqchip_mode { > KVM_IRQCHIP_NONE, > @@ -1338,7 +1340,10 @@ struct kvm_arch { > struct hlist_head mask_notifier_list; > > struct kvm_hv hyperv; > + > +#ifdef CONFIG_KVM_XEN > struct kvm_xen xen; > +#endif > > bool backwards_tsc_observed; > bool boot_vcpu_runs_old_kvmclock; > diff --git a/arch/x86/kvm/irq.c b/arch/x86/kvm/irq.c > index b2c397dd2bc6..ad9ca8a60144 100644 > --- a/arch/x86/kvm/irq.c > +++ b/arch/x86/kvm/irq.c > @@ -118,8 +118,10 @@ static int kvm_cpu_get_extint(struct kvm_vcpu *v) > if (!lapic_in_kernel(v)) > return v->arch.interrupt.nr; > > +#ifdef CONFIG_KVM_XEN > if (kvm_xen_has_interrupt(v)) > return v->kvm->arch.xen.upcall_vector; > +#endif > > if (irqchip_split(v->kvm)) { > int vector = v->arch.pending_external_vector; Reviewed-by: Maxim Levitsky <mlevitsk@redhat.com> Best regards, Maxim Levitsky
diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h index 17715cb8731d..e5d4b8a44630 100644 --- a/arch/x86/include/asm/kvm_host.h +++ b/arch/x86/include/asm/kvm_host.h @@ -1126,6 +1126,7 @@ struct msr_bitmap_range { unsigned long *bitmap; }; +#ifdef CONFIG_KVM_XEN /* Xen emulation context */ struct kvm_xen { struct mutex xen_lock; @@ -1137,6 +1138,7 @@ struct kvm_xen { struct idr evtchn_ports; unsigned long poll_mask[BITS_TO_LONGS(KVM_MAX_VCPUS)]; }; +#endif enum kvm_irqchip_mode { KVM_IRQCHIP_NONE, @@ -1338,7 +1340,10 @@ struct kvm_arch { struct hlist_head mask_notifier_list; struct kvm_hv hyperv; + +#ifdef CONFIG_KVM_XEN struct kvm_xen xen; +#endif bool backwards_tsc_observed; bool boot_vcpu_runs_old_kvmclock; diff --git a/arch/x86/kvm/irq.c b/arch/x86/kvm/irq.c index b2c397dd2bc6..ad9ca8a60144 100644 --- a/arch/x86/kvm/irq.c +++ b/arch/x86/kvm/irq.c @@ -118,8 +118,10 @@ static int kvm_cpu_get_extint(struct kvm_vcpu *v) if (!lapic_in_kernel(v)) return v->arch.interrupt.nr; +#ifdef CONFIG_KVM_XEN if (kvm_xen_has_interrupt(v)) return v->kvm->arch.xen.upcall_vector; +#endif if (irqchip_split(v->kvm)) { int vector = v->arch.pending_external_vector;
Saving a few bytes of memory per KVM VM is certainly great but what's more important is the ability to see where the code accesses Xen emulation context while CONFIG_KVM_XEN is not enabled. Currently, kvm_cpu_get_extint() is the only such place and it is harmless: kvm_xen_has_interrupt() always returns '0' when !CONFIG_KVM_XEN. No functional change intended. Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com> --- arch/x86/include/asm/kvm_host.h | 5 +++++ arch/x86/kvm/irq.c | 2 ++ 2 files changed, 7 insertions(+)