forked from Minki/linux
KVM: PPC: Book3S HV: Tunable to disable KVM IRQ bypass
Add a module parameter kvm_irq_bypass for kvm_hv.ko to disable IRQ bypass for passthrough interrupts. The default value of this tunable is 1 - that is enable the feature. Since the tunable is used by built-in kernel code, we use the module_param_cb macro to achieve this. Signed-off-by: Suresh Warrier <warrier@linux.vnet.ibm.com> Signed-off-by: Paul Mackerras <paulus@ozlabs.org>
This commit is contained in:
parent
af893c7dc9
commit
644abbb254
@ -227,6 +227,7 @@ extern void kvmppc_copy_to_svcpu(struct kvmppc_book3s_shadow_vcpu *svcpu,
|
||||
struct kvm_vcpu *vcpu);
|
||||
extern void kvmppc_copy_from_svcpu(struct kvm_vcpu *vcpu,
|
||||
struct kvmppc_book3s_shadow_vcpu *svcpu);
|
||||
extern int kvm_irq_bypass;
|
||||
|
||||
static inline struct kvmppc_vcpu_book3s *to_book3s(struct kvm_vcpu *vcpu)
|
||||
{
|
||||
|
@ -461,7 +461,7 @@ static inline int kvmppc_xics_enabled(struct kvm_vcpu *vcpu)
|
||||
static inline struct kvmppc_passthru_irqmap *kvmppc_get_passthru_irqmap(
|
||||
struct kvm *kvm)
|
||||
{
|
||||
if (kvm)
|
||||
if (kvm && kvm_irq_bypass)
|
||||
return kvm->arch.pimap;
|
||||
return NULL;
|
||||
}
|
||||
|
@ -95,6 +95,10 @@ static struct kernel_param_ops module_param_ops = {
|
||||
.get = param_get_int,
|
||||
};
|
||||
|
||||
module_param_cb(kvm_irq_bypass, &module_param_ops, &kvm_irq_bypass,
|
||||
S_IRUGO | S_IWUSR);
|
||||
MODULE_PARM_DESC(kvm_irq_bypass, "Bypass passthrough interrupt optimization");
|
||||
|
||||
module_param_cb(h_ipi_redirect, &module_param_ops, &h_ipi_redirect,
|
||||
S_IRUGO | S_IWUSR);
|
||||
MODULE_PARM_DESC(h_ipi_redirect, "Redirect H_IPI wakeup to a free host core");
|
||||
@ -3443,6 +3447,9 @@ static int kvmppc_set_passthru_irq(struct kvm *kvm, int host_irq, int guest_gsi)
|
||||
struct irq_chip *chip;
|
||||
int i;
|
||||
|
||||
if (!kvm_irq_bypass)
|
||||
return 1;
|
||||
|
||||
desc = irq_to_desc(host_irq);
|
||||
if (!desc)
|
||||
return -EIO;
|
||||
@ -3519,6 +3526,9 @@ static int kvmppc_clr_passthru_irq(struct kvm *kvm, int host_irq, int guest_gsi)
|
||||
struct kvmppc_passthru_irqmap *pimap;
|
||||
int i;
|
||||
|
||||
if (!kvm_irq_bypass)
|
||||
return 0;
|
||||
|
||||
desc = irq_to_desc(host_irq);
|
||||
if (!desc)
|
||||
return -EIO;
|
||||
|
@ -27,6 +27,8 @@
|
||||
|
||||
int h_ipi_redirect = 1;
|
||||
EXPORT_SYMBOL(h_ipi_redirect);
|
||||
int kvm_irq_bypass = 1;
|
||||
EXPORT_SYMBOL(kvm_irq_bypass);
|
||||
|
||||
static void icp_rm_deliver_irq(struct kvmppc_xics *xics, struct kvmppc_icp *icp,
|
||||
u32 new_irq);
|
||||
|
Loading…
Reference in New Issue
Block a user