PCI: endpoint: Align pci_epc_get_msix(), pci_epc_ops::get_msix() return value encoding
authorNiklas Cassel <cassel@kernel.org>
Wed, 14 May 2025 07:43:17 +0000 (09:43 +0200)
committerBjorn Helgaas <bhelgaas@google.com>
Wed, 28 May 2025 21:47:56 +0000 (16:47 -0500)
The kdoc for pci_epc_get_msix() says:
"Invoke to get the number of MSI-X interrupts allocated by the RC"

The kdoc for the callback pci_epc_ops->get_msix() says:
"ops to get the number of MSI-X interrupts allocated by the RC from the
MSI-X capability register"

pci_epc_ops::get_msix() does however return the number of interrupts in the
encoding as defined by the Table Size field. Nowhere in the kdoc does it
say that the returned number of interrupts is in Table Size encoding.

It is very confusing that the API pci_epc_get_msix() and the callback
function pci_epc_ops::get_msix() don't return the same value.

Clean up the API and the callback function to have the same semantics,
i.e. return the number of interrupts, regardless of the internal encoding
of that value.

[bhelgaas: more specific subject]

Signed-off-by: Niklas Cassel <cassel@kernel.org>
Signed-off-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Reviewed-by: Damien Le Moal <dlemoal@kernel.org>
Cc: stable+noautosel@kernel.org # this is simply a cleanup
Link: https://patch.msgid.link/20250514074313.283156-12-cassel@kernel.org
drivers/pci/controller/cadence/pcie-cadence-ep.c
drivers/pci/controller/dwc/pcie-designware-ep.c
drivers/pci/endpoint/pci-epc-core.c

index 78b4d009cd04808e8e74a4ba916cc5c4271eef8b..569cb7481d450f5a83839a83df6e4649adeb73e5 100644 (file)
@@ -281,7 +281,7 @@ static int cdns_pcie_ep_get_msix(struct pci_epc *epc, u8 func_no, u8 vfunc_no)
 
        val &= PCI_MSIX_FLAGS_QSIZE;
 
-       return val;
+       return val + 1;
 }
 
 static int cdns_pcie_ep_set_msix(struct pci_epc *epc, u8 fn, u8 vfn,
index 03597551f4cda611cea11428bd0d81a891bc35b3..307c862588a441444f9a33d8c6cdd31dde7ff7a0 100644 (file)
@@ -575,7 +575,7 @@ static int dw_pcie_ep_get_msix(struct pci_epc *epc, u8 func_no, u8 vfunc_no)
 
        val &= PCI_MSIX_FLAGS_QSIZE;
 
-       return val;
+       return val + 1;
 }
 
 static int dw_pcie_ep_set_msix(struct pci_epc *epc, u8 func_no, u8 vfunc_no,
index cc1456bd188e340c96a4b7f85cad2785c1c73d43..092b14918b4606c271f225d3f1e8798c0fb9b41d 100644 (file)
@@ -355,7 +355,7 @@ int pci_epc_get_msix(struct pci_epc *epc, u8 func_no, u8 vfunc_no)
        if (interrupt < 0)
                return 0;
 
-       return interrupt + 1;
+       return interrupt;
 }
 EXPORT_SYMBOL_GPL(pci_epc_get_msix);