| From foo@baz Fri Jan 22 01:21:57 PM CET 2021 |
| From: Manish Chopra <manishc@marvell.com> |
| Date: Thu, 7 Jan 2021 02:15:20 -0800 |
| Subject: netxen_nic: fix MSI/MSI-x interrupts |
| |
| From: Manish Chopra <manishc@marvell.com> |
| |
| [ Upstream commit a2bc221b972db91e4be1970e776e98f16aa87904 ] |
| |
| For all PCI functions on the netxen_nic adapter, interrupt |
| mode (INTx or MSI) configuration is dependent on what has |
| been configured by the PCI function zero in the shared |
| interrupt register, as these adapters do not support mixed |
| mode interrupts among the functions of a given adapter. |
| |
| Logic for setting MSI/MSI-x interrupt mode in the shared interrupt |
| register based on PCI function id zero check is not appropriate for |
| all family of netxen adapters, as for some of the netxen family |
| adapters PCI function zero is not really meant to be probed/loaded |
| in the host but rather just act as a management function on the device, |
| which caused all the other PCI functions on the adapter to always use |
| legacy interrupt (INTx) mode instead of choosing MSI/MSI-x interrupt mode. |
| |
| This patch replaces that check with port number so that for all |
| type of adapters driver attempts for MSI/MSI-x interrupt modes. |
| |
| Fixes: b37eb210c076 ("netxen_nic: Avoid mixed mode interrupts") |
| Signed-off-by: Manish Chopra <manishc@marvell.com> |
| Signed-off-by: Igor Russkikh <irusskikh@marvell.com> |
| Link: https://lore.kernel.org/r/20210107101520.6735-1-manishc@marvell.com |
| Signed-off-by: Jakub Kicinski <kuba@kernel.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c | 7 +------ |
| 1 file changed, 1 insertion(+), 6 deletions(-) |
| |
| --- a/drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c |
| +++ b/drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c |
| @@ -580,11 +580,6 @@ static const struct net_device_ops netxe |
| .ndo_set_features = netxen_set_features, |
| }; |
| |
| -static inline bool netxen_function_zero(struct pci_dev *pdev) |
| -{ |
| - return (PCI_FUNC(pdev->devfn) == 0) ? true : false; |
| -} |
| - |
| static inline void netxen_set_interrupt_mode(struct netxen_adapter *adapter, |
| u32 mode) |
| { |
| @@ -680,7 +675,7 @@ static int netxen_setup_intr(struct netx |
| netxen_initialize_interrupt_registers(adapter); |
| netxen_set_msix_bit(pdev, 0); |
| |
| - if (netxen_function_zero(pdev)) { |
| + if (adapter->portnum == 0) { |
| if (!netxen_setup_msi_interrupts(adapter, num_msix)) |
| netxen_set_interrupt_mode(adapter, NETXEN_MSI_MODE); |
| else |