On Thu, Apr 06 2023 at 09:33, Stanislav Kinsburskii wrote: > This patch moves https://www.kernel.org/doc/html/latest/process/submitting-patches.html#submittingpatches https://www.kernel.org/doc/html/latest/process/maintainer-tip.html#changelog > a part of currently internal logic into the new > hv_map_msi_interrupt function and makes it globally available helper, > which will be used to map PCI interrupts in case of root partition. > -static int hv_map_msi_interrupt(struct pci_dev *dev, int cpu, int vector, > - struct hv_interrupt_entry *entry) > +/** > + * hv_map_msi_interrupt() - "Map" the MSI IRQ in the hypervisor. So if you need to put "" on Map then maybe your function is misnomed. Either it maps or it does not, right? > + * @data: Describes the IRQ > + * @out_entry: Hypervisor (MSI) interrupt entry (can be NULL) > + * > + * Map the IRQ in the hypervisor by issuing a MAP_DEVICE_INTERRUPT hypercall. > + */ > +int hv_map_msi_interrupt(struct irq_data *data, > + struct hv_interrupt_entry *out_entry) > { > - union hv_device_id device_id = hv_build_pci_dev_id(dev); > + struct msi_desc *msidesc; > + struct pci_dev *dev; > + union hv_device_id device_id; > + struct hv_interrupt_entry dummy, *entry; > + struct irq_cfg *cfg = irqd_cfg(data); > + const cpumask_t *affinity; > + int cpu, vector; > + > + msidesc = irq_data_get_msi_desc(data); > + dev = msi_desc_to_pci_dev(msidesc); > + device_id = hv_build_pci_dev_id(dev); > + affinity = irq_data_get_effective_affinity_mask(data); > + cpu = cpumask_first_and(affinity, cpu_online_mask); The effective affinity mask of MSI interrupts consists only of online CPUs, to be accurate: it has exactly one online CPU set. But even if it would have only offline CPUs then the result would be: cpu = nr_cpu_ids which is definitely invalid. While a disabled vector targeted to an offline CPU is not necessarily invalid. Thanks, tglx