On 22/07/2016 16:14, Radim Krčmář wrote: > 2016-07-22 13:46+0000, Eric Auger: >> Up to now, only irqchip routing entries could be set. This patch >> adds the capability to insert MSI routing entries. >> >> For ARM64, let's also increase KVM_MAX_IRQ_ROUTES to 4096: this >> include SPI irqchip routes plus MSI routes. In the future this >> might be extended. >> >> Signed-off-by: Eric Auger <eric.auger@xxxxxxxxxx> >> Reviewed-by: Andre Przywara <andre.przywara@xxxxxxx> >> >> --- >> v7 -> v8: >> - adapt to changes in kvm_kernel_irq_routing_entry and check the >> user entry flags according to the user entry type >> >> v6 -> v7: >> - added Andre's R-b >> >> v2 -> v3: >> - remove any reference to KVM_IRQ_ROUTING_EXTENDED_MSI type >> - unconditionnaly uapi flags and devid downto the kernel >> routing entry struct >> - handle KVM_MSI_VALID_DEVID flag in kvm_set_irq_routing >> - note about KVM_CAP_MSI_DEVID moved in the first patch file >> of the series >> >> v1 -> v2: >> - adapt to new routing entry types >> >> RFC -> PATCH: >> - move api MSI routing updates into that patch file >> - use new devid field of user api struct >> --- >> diff --git a/virt/kvm/irqchip.c b/virt/kvm/irqchip.c >> @@ -201,23 +202,25 @@ int kvm_set_irq_routing(struct kvm *kvm, >> new->chip[i][j] = -1; >> >> for (i = 0; i < nr; ++i) { >> - struct kvm_kernel_irq_routing_entry *e; >> - >> r = -ENOMEM; >> e = kzalloc(sizeof(*e), GFP_KERNEL); >> if (!e) >> goto out; >> >> r = -EINVAL; >> - if (ue->flags) { >> - kfree(e); >> - goto out; >> + switch (ue->type) { >> + case KVM_IRQ_ROUTING_IRQCHIP: >> + if (ue->flags) >> + goto free_entry; >> + break; >> + case KVM_IRQ_ROUTING_MSI: >> + if (ue->flags & ~KVM_MSI_VALID_DEVID) >> + goto free_entry; >> + break; > > The function is common for all arches and there are currently two other > routing types (S390_ADAPTER and HV_SINT) that ought to be checked as > well, so "default" instead of "KVM_IRQ_ROUTING_IRQCHIP" would be better. Sure Thanks Eric > >> } >> r = setup_routing_entry(new, e, ue); >> - if (r) { >> - kfree(e); >> - goto out; >> - } >> + if (r) >> + goto free_entry; >> ++ue; >> } >> -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html