[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH] xen-pciback: Consider MSI-X enabled only when MASKALL bit is cleared
Linux enables MSI-X before disabling INTx, but keeps MSI-X masked until the table is filled. Then it disables INTx just before clearing MASKALL bit. Currently this approach is rejected by xen-pciback. Allow setting PCI_MSIX_FLAGS_ENABLE while INTx is still enabled as long as PCI_MSIX_FLAGS_MASKALL is set too. Fixes: 5e29500eba2a ("xen-pciback: Allow setting PCI_MSIX_FLAGS_MASKALL too") Signed-off-by: Marek Marczykowski-Górecki <marmarek@xxxxxxxxxxxxxxxxxxxxxx> --- drivers/xen/xen-pciback/conf_space.c | 2 +- drivers/xen/xen-pciback/conf_space_capability.c | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/drivers/xen/xen-pciback/conf_space.c b/drivers/xen/xen-pciback/conf_space.c index 059de92aea7d..e8923bffc175 100644 --- a/drivers/xen/xen-pciback/conf_space.c +++ b/drivers/xen/xen-pciback/conf_space.c @@ -313,7 +313,7 @@ int xen_pcibk_get_interrupt_type(struct pci_dev *dev) &val); if (err) return err; - if (val & PCI_MSIX_FLAGS_ENABLE) + if (val & PCI_MSIX_FLAGS_ENABLE && !(val & PCI_MSIX_FLAGS_MASKALL)) ret |= INTERRUPT_TYPE_MSIX; } return ret ?: INTERRUPT_TYPE_NONE; diff --git a/drivers/xen/xen-pciback/conf_space_capability.c b/drivers/xen/xen-pciback/conf_space_capability.c index 097316a74126..5c851f916ebc 100644 --- a/drivers/xen/xen-pciback/conf_space_capability.c +++ b/drivers/xen/xen-pciback/conf_space_capability.c @@ -242,6 +242,10 @@ static int msi_msix_flags_write(struct pci_dev *dev, int offset, u16 new_value, if (int_type == INTERRUPT_TYPE_NONE || int_type == field_config->int_type) goto write; + if (int_type == INTERRUPT_TYPE_INTX && + field_config->int_type == INTERRUPT_TYPE_MSIX && + (new_value & PCI_MSIX_FLAGS_MASKALL)) + goto write; return PCIBIOS_SET_FAILED; } -- 2.37.3
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |