Message ID | 20240121111730.262429-2-foxywang@tencent.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | KVM: irqchip: synchronize srcu only if needed | expand |
On Sun, Jan 21, 2024 at 07:17:27PM +0800, Yi Wang wrote: > Add a new function to setup empty irq routing in kvm path, which > can be invoded in non-architecture-specific functions. The difference > compared to the kvm_setup_empty_irq_routing() is this function just > alloc the empty irq routing and does not need synchronize srcu, as > we will call it in kvm_create_vm(). > > This patch is a preparatory step for an upcoming patch to avoid > delay in KVM_CAP_SPLIT_IRQCHIP ioctl. Adding a function in a separate patch from its callsites is never useful. Please squash this into the second patch.
On Wed, Jan 24, 2024 at 2:47 AM Oliver Upton <oliver.upton@linux.dev> wrote: > > On Sun, Jan 21, 2024 at 07:17:27PM +0800, Yi Wang wrote: > > Add a new function to setup empty irq routing in kvm path, which > > can be invoded in non-architecture-specific functions. The difference > > compared to the kvm_setup_empty_irq_routing() is this function just > > alloc the empty irq routing and does not need synchronize srcu, as > > we will call it in kvm_create_vm(). > > > > This patch is a preparatory step for an upcoming patch to avoid > > delay in KVM_CAP_SPLIT_IRQCHIP ioctl. > > Adding a function in a separate patch from its callsites is never > useful. Please squash this into the second patch. Thanks for your review and suggestion. I will update this patch ASAP. > > -- > Thanks, > Oliver
diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h index 4944136efaa2..e91525c0a4ea 100644 --- a/include/linux/kvm_host.h +++ b/include/linux/kvm_host.h @@ -2000,6 +2000,7 @@ int kvm_set_irq_routing(struct kvm *kvm, const struct kvm_irq_routing_entry *entries, unsigned nr, unsigned flags); +int kvm_setup_empty_irq_routing_lockless(struct kvm *kvm); int kvm_set_routing_entry(struct kvm *kvm, struct kvm_kernel_irq_routing_entry *e, const struct kvm_irq_routing_entry *ue); diff --git a/virt/kvm/irqchip.c b/virt/kvm/irqchip.c index 1e567d1f6d3d..90fc43bd0fe4 100644 --- a/virt/kvm/irqchip.c +++ b/virt/kvm/irqchip.c @@ -237,3 +237,22 @@ int kvm_set_irq_routing(struct kvm *kvm, return r; } + +int kvm_setup_empty_irq_routing_lockless(struct kvm *kvm) +{ + struct kvm_irq_routing_table *new; + u32 i, j; + + new = kzalloc(struct_size(new, map, 1), GFP_KERNEL_ACCOUNT); + if (!new) + return -ENOMEM; + + new->nr_rt_entries = 1; + for (i = 0; i < KVM_NR_IRQCHIPS; i++) + for (j = 0; j < KVM_IRQCHIP_NUM_PINS; j++) + new->chip[i][j] = -1; + + RCU_INIT_POINTER(kvm->irq_routing, new); + + return 0; +}
Add a new function to setup empty irq routing in kvm path, which can be invoded in non-architecture-specific functions. The difference compared to the kvm_setup_empty_irq_routing() is this function just alloc the empty irq routing and does not need synchronize srcu, as we will call it in kvm_create_vm(). This patch is a preparatory step for an upcoming patch to avoid delay in KVM_CAP_SPLIT_IRQCHIP ioctl. Signed-off-by: Yi Wang <foxywang@tencent.com> --- include/linux/kvm_host.h | 1 + virt/kvm/irqchip.c | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+)