net: Use pci_enable_msix_range()
Subsystems (22)
cover net: Use pci_enable_msix_range()
As result of deprecation of MSI-X/MSI enablement functions pci_enable_msix() and pci_enable_msi_block() all drivers using these two interfaces need to be updated to use the new pci_enable_msi_range() and pci_enable_msix_range() interfaces.
Alexander Gordeev (34):
bnx2: Use pci_enable_msix_range()
bnx2x: Use pci_enable_msix_range()
tg3: Use pci_enable_msix_range()
bna: Use pci_enable_msix_range()
cxgb3: Remove superfluous call to pci_disable_msix()
cxgb3: Use pci_enable_msix_range()
cxgb4: Use pci_enable_msix_range()
cxgb4vf: Remove superfluous call to pci_disable_msix()
cxgb4vf: Use pci_enable_msix_range()
enic: Use pci_enable_msix_range()
benet: Use pci_enable_msix_range()
e1000e: Use pci_enable_msix_range()
i40e: Use pci_enable_msix_range()
igb: Use pci_enable_msix_range()
igbvf: Use pci_enable_msix_range()
ixgbe: Use pci_enable_msix_range()
ixgbevf: Use pci_enable_msix_range()
mlx4: Use pci_enable_msix_range()
mlx5: Use pci_enable_msix_range()
myri10ge: Use pci_enable_msix_range()
s2io: Use pci_enable_msix_range()
vxge: Use pci_enable_msix_range()
forcedeth: Fix invalid errno reporting in nv_request_irq()
forcedeth: Cleanup MSI-X to MSI to INTx fallback code
forcedeth: Use pci_enable_msix_range()
netxen: Use pci_enable_msix_range()
qlcnic: Cleanup qlcnic_enable_msix() return values
qlcnic: Use pci_enable_msix_range()
qlge: Get rid of an redundant assignment
qlge: Use pci_enable_msix_range()
efx: Use pci_enable_msix_range()
niu: Use pci_enable_msix_range()
vmxnet3: Fix MSI-X/MSI enablement code
vmxnet3: Use pci_enable_msix_range()
drivers/net/ethernet/broadcom/bnx2.c | 15 +-- drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c | 48 ++++----- drivers/net/ethernet/broadcom/tg3.c | 6 +- drivers/net/ethernet/brocade/bna/bnad.c | 23 ++--- drivers/net/ethernet/chelsio/cxgb3/cxgb3_main.c | 26 ++--- drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c | 50 +++++----- .../net/ethernet/chelsio/cxgb4vf/cxgb4vf_main.c | 35 +++---- drivers/net/ethernet/cisco/enic/enic_main.c | 6 +- drivers/net/ethernet/emulex/benet/be_main.c | 31 +++--- drivers/net/ethernet/intel/e1000e/netdev.c | 9 +- drivers/net/ethernet/intel/i40e/i40e_main.c | 33 +----- drivers/net/ethernet/intel/igb/igb_main.c | 9 +- drivers/net/ethernet/intel/igbvf/netdev.c | 6 +- drivers/net/ethernet/intel/ixgbe/ixgbe_lib.c | 16 +-- drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c | 33 ++---- drivers/net/ethernet/mellanox/mlx4/main.c | 19 +--- drivers/net/ethernet/mellanox/mlx5/core/main.c | 16 +-- drivers/net/ethernet/myricom/myri10ge/myri10ge.c | 32 +++--- drivers/net/ethernet/neterion/s2io.c | 5 +- drivers/net/ethernet/neterion/vxge/vxge-main.c | 15 ++- drivers/net/ethernet/nvidia/forcedeth.c | 41 +++++--- .../net/ethernet/qlogic/netxen/netxen_nic_main.c | 5 +- drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c | 18 ++-- drivers/net/ethernet/qlogic/qlge/qlge_main.c | 16 +-- drivers/net/ethernet/sfc/efx.c | 20 ++-- drivers/net/ethernet/sun/niu.c | 11 +-- drivers/net/vmxnet3/vmxnet3_drv.c | 110 ++++++++----------- 27 files changed, 274 insertions(+), 380 deletions(-)
Signature · 14 lines
1.7.7.6 ------------------------------------------------------------------------------ WatchGuard Dimension instantly turns raw network data into actionable security intelligence. It gives you real-time visual feedback on key security issues and trends. Skip the complicated setup - simply import a virtual appliance and go from zero to informed in seconds. http://pubads.g.doubleclick.net/gampad/clk?id=123612991&iu=/4140/ostg.clktrk _______________________________________________ E1000-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/e1000-devel To learn more about Intel® Ethernet, visit http://communities.intel.com/community/wired
PATCH 1/34 bnx2: Use pci_enable_msix_range()
As result of deprecation of MSI-X/MSI enablement functions pci_enable_msix() and pci_enable_msi_block() all drivers using these two interfaces need to be updated to use the new pci_enable_msi_range() and pci_enable_msix_range() interfaces.
--- drivers/net/ethernet/broadcom/bnx2.c | 15 ++++----------- 1 files changed, 4 insertions(+), 11 deletions(-)
drivers/net/ethernet/broadcom/bnx2.c +4 -11
@@ -6206,7 +6206,7 @@ bnx2_free_irq(struct bnx2 *bp)static void bnx2_enable_msix (struct bnx2 *bp,int msix_vecs) { -int i, total_vecs, rc; +int i, total_vecs;struct msix_entry msix_ent[BNX2_MAX_MSIX_VEC ];struct net_device *dev = bp->dev;const int len =sizeof (bp->irq_tbl[0 ].name);
@@ -6229,16 +6229,9 @@ bnx2_enable_msix(struct bnx2 *bp, int msix_vecs)#ifdef BCM_CNIC total_vecs++;#endif - rc = -ENOSPC ; -while (total_vecs >=BNX2_MIN_MSIX_VEC ) { - rc =pci_enable_msix (bp->pdev, msix_ent, total_vecs); -if (rc <=0 ) -break ; -if (rc >0 ) - total_vecs = rc; - } - -if (rc !=0 ) + total_vecs =pci_enable_msix_range (bp->pdev, msix_ent, +BNX2_MIN_MSIX_VEC , total_vecs); +if (total_vecs <0 )return ; msix_vecs = total_vecs;
Signature · 1 line
1.7.7.6
David Miller
maintainerRe: [PATCH 01/34] bnx2: Use pci_enable_msix_range()
Please submit this patch series when the net-next tree opens back up, I'm only accepting bug fixes at this time.
Also, please always provide a proper "00/NN" openning posting for a patch series, that gives background and high level information about what your patch series is trying to achieve and how it achieves it.
That way people reviewing the patches know what to expect, and why, and I have exactly one posting to reply to if I apply the whole series.
Thank you.
Bjorn Helgaas
maintainerRe: [PATCH 01/34] bnx2: Use pci_enable_msix_range()
Quoted 11 lines · David Miller
Please submit this patch series when the net-next tree opens back up, I'm only accepting bug fixes at this time.
Also, please always provide a proper "00/NN" openning posting for a patch series, that gives background and high level information about what your patch series is trying to achieve and how it achieves it.
That way people reviewing the patches know what to expect, and why, and I have exactly one posting to reply to if I apply the whole series.
I *think* this whole series applies to drivers/net (the usual patch sending tools like "stg mail" insert the diffstat automatically in the 00/nn message), and it sounds like David is willing to apply them via his tree, so I'm ignoring these for now. Let me know if you need me to do anything.
Bjorn
Bjorn Helgaas
maintainerRe: [PATCH 01/34] bnx2: Use pci_enable_msix_range()
Quoted 9 lines · Bjorn Helgaas
Quoted 8 lines · David Miller
Please submit this patch series when the net-next tree opens back up, I'm only accepting bug fixes at this time.
Also, please always provide a proper "00/NN" openning posting for a patch series, that gives background and high level information about what your patch series is trying to achieve and how it achieves it.
Quoted 8 lines
Quoted 3 lines
That way people reviewing the patches know what to expect, and why, and I have exactly one posting to reply to if I apply the whole series.
I *think* this whole series applies to
drivers/net(the usual patch sending tools like "stg mail" insert the diffstat automatically in the 00/nn message), and it sounds like David is willing to apply them via his tree, so I'm ignoring these for now. Let me know if you need me to do anything.
I skimmed these and the scsi patches, and I think you were right in proposing an MSI-X enable function that takes a single "number of vectors" argument, in addition to pci_enable_msix_range(), which takes a minimum and a maximum. Obviously the pci_enable_msix_fixed() or whatever could be a simple #define wrapper or something.
Of the fifty-some net and scsi patches, I counted 23 that use the min == max pattern, and it seems a shame to have to repeat that expression.
BTW, I noticed that Documentation/PCI/MSI-HOWTO.txt uses pci_enable_msi_range() in some of the examples that are really talking about pci_enable_msix_range() (4.3.1.1 and 4.3.1.2, at least).
Bjorn
Re: [PATCH 01/34] bnx2: Use pci_enable_msix_range()
Quoted 8 lines · Bjorn Helgaas
I skimmed these and the scsi patches, and I think you were right in proposing an MSI-X enable function that takes a single "number of vectors" argument, in addition to
pci_enable_msix_range(), which takes a minimum and a maximum. Obviously thepci_enable_msix_fixed()or whatever could be a simple #define wrapper or something.Of the fifty-some net and scsi patches, I counted 23 that use the min == max pattern, and it seems a shame to have to repeat that expression.
(un-CCing [email protected])
Hi Bjorn,
I propose pci_enable_msix_exact(pdev, entries, nvec) rather than pci_enable_msix_fixed().
Do you prefer this one to return 0/-errno or nvec/-errno?
Do you want pci_enable_msi_exact() in addition to pci_enable_msix_exact()?
Thanks!
Quoted 1 line
Bjorn
Signature · 3 lines
Regards, Alexander Gordeev [email protected]
Bjorn Helgaas
maintainerRe: [PATCH 01/34] bnx2: Use pci_enable_msix_range()
Quoted 10 lines · Alexander Gordeev
Quoted 8 lines · Bjorn Helgaas
I skimmed these and the scsi patches, and I think you were right in proposing an MSI-X enable function that takes a single "number of vectors" argument, in addition to
pci_enable_msix_range(), which takes a minimum and a maximum. Obviously thepci_enable_msix_fixed()or whatever could be a simple #define wrapper or something.Of the fifty-some net and scsi patches, I counted 23 that use the min == max pattern, and it seems a shame to have to repeat that expression.
Quoted 6 lines
(un-CCing [email protected])
Hi Bjorn,
I propose
pci_enable_msix_exact(pdev, entries, nvec)rather thanpci_enable_msix_fixed().
OK, that sounds fine.
Quoted 1 line
Do you prefer this one to return 0/-errno or nvec/-errno?
0/-errno seems right to me. We are asking for a very specific thing, and returning nvec doesn't give the caller any additional information (since the caller supplied nvec in the first place), so simple success/failure is what I would expect.
Quoted 1 line
Do you want
pci_enable_msi_exact()in addition topci_enable_msix_exact()?
If there are cases where pci_enable_msi_exact() would be used, I guess the same arguments would apply, so yes. I haven't looked at the archives, but I have this nagging feeling that this is exactly what you proposed initially, and I had some objection. If so, I'm sorry about changing my mind :)
Bjorn
Re: [PATCH 01/34] bnx2: Use pci_enable_msix_range()
Quoted 4 lines · Bjorn Helgaas
Quoted 1 line
Do you want
pci_enable_msi_exact()in addition topci_enable_msix_exact()?If there are cases where
pci_enable_msi_exact()would be used, I guess the same arguments would apply, so yes. I haven't looked at the
Just a handful of cases in the tree where it could be used for MSI right now, but still - they do exist.
Quoted 3 lines
archives, but I have this nagging feeling that this is exactly what you proposed initially, and I had some objection. If so, I'm sorry about changing my mind :)
You are on PCI guard, no worries ;)
Quoted 1 line
Bjorn
Signature · 3 lines
Regards, Alexander Gordeev [email protected]
Re: [PATCH 01/34] bnx2: Use pci_enable_msix_range()
In reply to Bjorn HelgaasQuoted 4 lines · Bjorn Helgaas
I *think* this whole series applies to
drivers/net(the usual patch sending tools like "stg mail" insert the diffstat automatically in the 00/nn message), and it sounds like David is willing to apply them via his tree, so I'm ignoring these for now. Let me know if you need me to do anything.
Hi Bjorn,
Unlike just a handful of patches concerning pci_enable_msi_range(), some few dozens of pci_enable_msix_range() updates would be difficult to route thru your tree. So for net and scsi (and block is pending) I am putting linux-pci on CC just to let you know what is happening.
Quoted 1 line
Bjorn
Signature · 3 lines
Regards, Alexander Gordeev [email protected]
PATCH 2/34 bnx2x: Use pci_enable_msix_range()
In reply to Alexander GordeevAs result of deprecation of MSI-X/MSI enablement functions pci_enable_msix() and pci_enable_msi_block() all drivers using these two interfaces need to be updated to use the new pci_enable_msi_range() and pci_enable_msix_range() interfaces.
--- drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c | 48 ++++++++++------------- 1 files changed, 21 insertions(+), 27 deletions(-)
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c +21 -27
@@ -1638,24 +1638,36 @@ int bnx2x_enable_msix(struct bnx2x *bp)DP (BNX2X_MSG_SP ,"about to request enable msix with %d vectors\n" , msix_vec); - rc =pci_enable_msix (bp->pdev, &bp->msix_table[0 ], msix_vec); - + rc =pci_enable_msix_range (bp->pdev, &bp->msix_table[0 ], +BNX2X_MIN_MSIX_VEC_CNT (bp), msix_vec);/* * reconfigure number of tx/rx queues according to available * MSI-X vectors */ -if (rc >=BNX2X_MIN_MSIX_VEC_CNT (bp)) { +if (rc <0 ) { +BNX2X_DEV_INFO ("MSI-X is not attainable rc %d\n" , rc); + goto no_msix; + }else if (rc == -ENOSPC ) { +/* Get by with single vector */ + rc =pci_enable_msix_range (bp->pdev, &bp->msix_table[0 ],1 ,1 ); +if (rc <0 ) { +BNX2X_DEV_INFO ("Single MSI-X is not attainable rc %d\n" , + rc); + goto no_msix; + } + +BNX2X_DEV_INFO ("Using single MSI-X vector\n" ); + bp->flags |=USING_SINGLE_MSIX_FLAG ; + +BNX2X_DEV_INFO ("set number of queues to 1\n" ); + bp->num_ethernet_queues =1 ; + bp->num_queues = bp->num_ethernet_queues + bp->num_cnic_queues; + }else if (rc < msix_vec) {/* how less vectors we will have? */ int diff = msix_vec - rc;BNX2X_DEV_INFO ("Trying to use less MSI-X vectors: %d\n" , rc); - rc =pci_enable_msix (bp->pdev, &bp->msix_table[0 ], rc); - -if (rc) { -BNX2X_DEV_INFO ("MSI-X is not attainable rc %d\n" , rc); - goto no_msix; - }/* * decrease number of queues by number of unallocated entries */
@@ -1664,24 +1676,6 @@ int bnx2x_enable_msix(struct bnx2x *bp)BNX2X_DEV_INFO ("New queue configuration set: %d\n" , bp->num_queues); - }else if (rc >0 ) { -/* Get by with single vector */ - rc =pci_enable_msix (bp->pdev, &bp->msix_table[0 ],1 ); -if (rc) { -BNX2X_DEV_INFO ("Single MSI-X is not attainable rc %d\n" , - rc); - goto no_msix; - } - -BNX2X_DEV_INFO ("Using single MSI-X vector\n" ); - bp->flags |=USING_SINGLE_MSIX_FLAG ; - -BNX2X_DEV_INFO ("set number of queues to 1\n" ); - bp->num_ethernet_queues =1 ; - bp->num_queues = bp->num_ethernet_queues + bp->num_cnic_queues; - }else if (rc <0 ) { -BNX2X_DEV_INFO ("MSI-X is not attainable rc %d\n" , rc); - goto no_msix; } bp->flags |=USING_MSIX_FLAG ;
Signature · 1 line
1.7.7.6
Re: [PATCH 02/34] bnx2x: Use pci_enable_msix_range()
Hello.
Quoted 22 lines · Alexander Gordeev
As result of deprecation of MSI-X/MSI enablement functions
pci_enable_msix()andpci_enable_msi_block()all drivers using these two interfaces need to be updated to use the newpci_enable_msi_range()andpci_enable_msix_range()interfaces.Signed-off-by Alexander Gordeev <[email protected]>--- drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c | 48 ++++++++++------------- 1 files changed, 21 insertions(+), 27 deletions(-)drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c +1
-2@@ -1638,24 +1638,36 @@ int bnx2x_enable_msix(struct bnx2x *bp)DP (BNX2X_MSG_SP ,"about to request enable msix with %d vectors\n" , msix_vec); - rc =pci_enable_msix (bp->pdev, &bp->msix_table[0 ], msix_vec); - + rc = pci_enable_msix_range(bp->pdev, &bp->msix_table[0],
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c int bnx2x_enable_msix(struct bnx2x *bp) · line 1650
Quoted 10 lines
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c +5
-1+ BNX2X_MIN_MSIX_VEC_CNT(bp), msix_vec);/* * reconfigure number of tx/rx queues according to available * MSI-X vectors */ -if (rc >=BNX2X_MIN_MSIX_VEC_CNT (bp)) { +if (rc <0 ) { +BNX2X_DEV_INFO ("MSI-X is not attainable rc %d\n" , rc); + goto no_msix; + }else if (rc == -ENOSPC ) {
This branch is unreachable now. You should have put this check first.
Quoted 5 lines
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c +5
-0+/* Get by with single vector */ + rc =pci_enable_msix_range (bp->pdev, &bp->msix_table[0 ],1 ,1 ); +if (rc <0 ) { +BNX2X_DEV_INFO ("Single MSI-X is not attainable rc %d\n" , + rc);
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c int bnx2x_enable_msix(struct bnx2x *bp) · line 1665
Quoted 10 lines
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c +10
-0+ goto no_msix; + } + +BNX2X_DEV_INFO ("Using single MSI-X vector\n" ); + bp->flags |=USING_SINGLE_MSIX_FLAG ; + +BNX2X_DEV_INFO ("set number of queues to 1\n" ); + bp->num_ethernet_queues =1 ; + bp->num_queues = bp->num_ethernet_queues + bp->num_cnic_queues; + }else if (rc < msix_vec) {
WBR, Sergei
PATCH 3/34 tg3: Use pci_enable_msix_range()
In reply to Alexander GordeevAs result of deprecation of MSI-X/MSI enablement functions pci_enable_msix() and pci_enable_msi_block() all drivers using these two interfaces need to be updated to use the new pci_enable_msi_range() and pci_enable_msix_range() interfaces.
--- drivers/net/ethernet/broadcom/tg3.c | 6 ++---- 1 files changed, 2 insertions(+), 4 deletions(-)
drivers/net/ethernet/broadcom/tg3.c +2 -4
@@ -11361,12 +11361,10 @@ static bool tg3_enable_msix(struct tg3 *tp) msix_ent[i].vector =0 ; } - rc =pci_enable_msix (tp->pdev, msix_ent, tp->irq_cnt); + rc =pci_enable_msix_range (tp->pdev, msix_ent,1 , tp->irq_cnt);if (rc <0 ) {return false; - }else if (rc !=0 ) { -if (pci_enable_msix (tp->pdev, msix_ent, rc)) -return false; + }else if (rc < tp->irq_cnt) {netdev_notice (tp->dev,"Requested %d MSI-X vectors, received %d\n" , tp->irq_cnt, rc); tp->irq_cnt = rc;
Signature · 1 line
1.7.7.6
PATCH 4/34 bna: Use pci_enable_msix_range()
In reply to Alexander GordeevAs result of deprecation of MSI-X/MSI enablement functions pci_enable_msix() and pci_enable_msi_block() all drivers using these two interfaces need to be updated to use the new pci_enable_msi_range() and pci_enable_msix_range() interfaces.
--- drivers/net/ethernet/brocade/bna/bnad.c | 23 +++++++++-------------- 1 files changed, 9 insertions(+), 14 deletions(-)
drivers/net/ethernet/brocade/bna/bnad.c +9 -14
@@ -2666,9 +2666,11 @@ bnad_enable_msix(struct bnad *bnad)for (i =0 ; i < bnad->msix_num; i++) bnad->msix_table[i].entry = i; - ret =pci_enable_msix (bnad->pcidev, bnad->msix_table, bnad->msix_num); -if (ret >0 ) { -/* Not enough MSI-X vectors. */ + ret =pci_enable_msix_range (bnad->pcidev, bnad->msix_table, +1 , bnad->msix_num); +if (ret <0 ) { + goto intx_mode; + }else if (ret < bnad->msix_num) {pr_warn ("BNA: %d MSI-X vectors allocated < %d requested\n" , ret, bnad->msix_num);
@@ -2681,18 +2683,11 @@ bnad_enable_msix(struct bnad *bnad) bnad->msix_num =BNAD_NUM_TXQ +BNAD_NUM_RXP +BNAD_MAILBOX_MSIX_VECTORS ; -if (bnad->msix_num > ret) - goto intx_mode; - -/* Try once more with adjusted numbers */ -/* If this fails, fall back to INTx */ - ret =pci_enable_msix (bnad->pcidev, bnad->msix_table, - bnad->msix_num); -if (ret) +if (bnad->msix_num > ret) { +pci_disable_msix (bnad->pcidev); goto intx_mode; - - }else if (ret <0 ) - goto intx_mode; + } + }pci_intx (bnad->pcidev,0 );
Signature · 1 line
1.7.7.6
PATCH 5/34 cxgb3: Remove superfluous call to pci_disable_msix()
In reply to Alexander GordeevThere is no need to call pci_disable_msix() in case the previous call to pci_enable_msix() failed
--- drivers/net/ethernet/chelsio/cxgb3/cxgb3_main.c | 3 --- 1 files changed, 0 insertions(+), 3 deletions(-)
drivers/net/ethernet/chelsio/cxgb3/cxgb3_main.c +0 -3
@@ -3097,9 +3097,6 @@ static int cxgb_enable_msix(struct adapter *adap)while ((err =pci_enable_msix (adap->pdev, entries, vectors)) >0 ) vectors = err; -if (err <0 ) -pci_disable_msix (adap->pdev); -if (!err && vectors < (adap->params.nports +1 )) {pci_disable_msix (adap->pdev); err =-1 ;
Signature · 1 line
1.7.7.6
PATCH 6/34 cxgb3: Use pci_enable_msix_range()
In reply to Alexander GordeevAs result of deprecation of MSI-X/MSI enablement functions pci_enable_msix() and pci_enable_msi_block() all drivers using these two interfaces need to be updated to use the new pci_enable_msi_range() and pci_enable_msix_range() interfaces.
--- drivers/net/ethernet/chelsio/cxgb3/cxgb3_main.c | 23 +++++++++-------------- 1 files changed, 9 insertions(+), 14 deletions(-)
drivers/net/ethernet/chelsio/cxgb3/cxgb3_main.c +9 -14
@@ -3088,27 +3088,22 @@ static int cxgb_enable_msix(struct adapter *adap) {struct msix_entry entries[SGE_QSETS +1 ];int vectors; -int i, err; +int i; vectors =ARRAY_SIZE (entries);for (i =0 ; i < vectors; ++i) entries[i].entry = i; -while ((err =pci_enable_msix (adap->pdev, entries, vectors)) >0 ) - vectors = err; - -if (!err && vectors < (adap->params.nports +1 )) { -pci_disable_msix (adap->pdev); - err =-1 ; - } + vectors =pci_enable_msix_range (adap->pdev, entries, + adap->params.nports +1 , vectors); +if (vectors <0 ) +return vectors; -if (!err) { -for (i =0 ; i < vectors; ++i) - adap->msix_info[i].vec = entries[i].vector; - adap->msix_nvectors = vectors; - } +for (i =0 ; i < vectors; ++i) + adap->msix_info[i].vec = entries[i].vector; + adap->msix_nvectors = vectors; -return err; +return 0 ; }static void print_port_info (struct adapter *adap,const struct adapter_info *ai)
Signature · 1 line
1.7.7.6
PATCH 7/34 cxgb4: Use pci_enable_msix_range()
In reply to Alexander GordeevAs result of deprecation of MSI-X/MSI enablement functions pci_enable_msix() and pci_enable_msi_block() all drivers using these two interfaces need to be updated to use the new pci_enable_msi_range() and pci_enable_msix_range() interfaces.
--- drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c | 50 +++++++++++------------ 1 files changed, 24 insertions(+), 26 deletions(-)
drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c +24 -26
@@ -5737,7 +5737,7 @@ static void reduce_ethqs(struct adapter *adap, int n)static int enable_msix (struct adapter *adap) {int ofld_need =0 ; -int i, err, want, need; +int i, want, need;struct sge *s = &adap->sge;unsigned int nchan = adap->params.nports;struct msix_entry entries[MAX_INGQ +1 ];
@@ -5753,32 +5753,30 @@ static int enable_msix(struct adapter *adap) } need = adap->params.nports +EXTRA_VECS + ofld_need; -while ((err =pci_enable_msix (adap->pdev, entries, want)) >= need) - want = err; + want =pci_enable_msix_range (adap->pdev, entries, need, want); +if (want <0 ) +return want; -if (!err) { -/* -* Distribute available vectors to the various queue groups. -* Every group gets its minimum requirement and NIC gets top -* priority for leftovers. -*/ - i = want -EXTRA_VECS - ofld_need; -if (i < s->max_ethqsets) { - s->max_ethqsets = i; -if (i < s->ethqsets) -reduce_ethqs (adap, i); - } -if (is_offload (adap)) { - i = want -EXTRA_VECS - s->max_ethqsets; - i -= ofld_need - nchan; - s->ofldqsets = (i / nchan) * nchan;/* round down */ - } -for (i =0 ; i < want; ++i) - adap->msix_info[i].vec = entries[i].vector; - }else if (err >0 ) -dev_info (adap->pdev_dev, -"only %d MSI-X vectors left, not using MSI-X\n" , err); -return err; +/* +* Distribute available vectors to the various queue groups. +* Every group gets its minimum requirement and NIC gets top +* priority for leftovers. +*/ + i = want -EXTRA_VECS - ofld_need; +if (i < s->max_ethqsets) { + s->max_ethqsets = i; +if (i < s->ethqsets) +reduce_ethqs (adap, i); + } +if (is_offload (adap)) { + i = want -EXTRA_VECS - s->max_ethqsets; + i -= ofld_need - nchan; + s->ofldqsets = (i / nchan) * nchan;/* round down */ + } +for (i =0 ; i < want; ++i) + adap->msix_info[i].vec = entries[i].vector; + +return 0 ; }#undef EXTRA_VECS
Signature · 1 line
1.7.7.6
PATCH 8/34 cxgb4vf: Remove superfluous call to pci_disable_msix()
In reply to Alexander GordeevThere is no need to call pci_disable_msix() in case the previous call to pci_enable_msix() failed
--- .../net/ethernet/chelsio/cxgb4vf/cxgb4vf_main.c | 1 - 1 files changed, 0 insertions(+), 1 deletions(-)
drivers/net/ethernet/chelsio/cxgb4vf/cxgb4vf_main.c +0 -1
@@ -2475,7 +2475,6 @@ static int enable_msix(struct adapter *adapter)for (i =0 ; i < want; ++i) adapter->msix_info[i].vec = entries[i].vector; }else if (err >0 ) { -pci_disable_msix (adapter->pdev);dev_info (adapter->pdev_dev,"only %d MSI-X vectors left," " not using MSI-X\n" , err); }
Signature · 1 line
1.7.7.6
PATCH 9/34 cxgb4vf: Use pci_enable_msix_range()
In reply to Alexander GordeevAs result of deprecation of MSI-X/MSI enablement functions pci_enable_msix() and pci_enable_msi_block() all drivers using these two interfaces need to be updated to use the new pci_enable_msi_range() and pci_enable_msix_range() interfaces.
--- .../net/ethernet/chelsio/cxgb4vf/cxgb4vf_main.c | 34 +++++++++---------- 1 files changed, 16 insertions(+), 18 deletions(-)
drivers/net/ethernet/chelsio/cxgb4vf/cxgb4vf_main.c +16 -18
@@ -2444,7 +2444,7 @@ static void reduce_ethqs(struct adapter *adapter, int n)*/ static int enable_msix (struct adapter *adapter) { -int i, err, want, need; +int i, want, need, nqsets;struct msix_entry entries[MSIX_ENTRIES ];struct sge *s = &adapter->sge;
@@ -2460,25 +2460,23 @@ static int enable_msix(struct adapter *adapter)*/ want = s->max_ethqsets +MSIX_EXTRAS ; need = adapter->params.nports +MSIX_EXTRAS ; -while ((err =pci_enable_msix (adapter->pdev, entries, want)) >= need) - want = err; -if (err ==0 ) { -int nqsets = want -MSIX_EXTRAS ; -if (nqsets < s->max_ethqsets) { -dev_warn (adapter->pdev_dev,"only enough MSI-X vectors" -" for %d Queue Sets\n" , nqsets); - s->max_ethqsets = nqsets; -if (nqsets < s->ethqsets) -reduce_ethqs (adapter, nqsets); - } -for (i =0 ; i < want; ++i) - adapter->msix_info[i].vec = entries[i].vector; - }else if (err >0 ) { -dev_info (adapter->pdev_dev,"only %d MSI-X vectors left," -" not using MSI-X\n" , err); + want =pci_enable_msix_range (adapter->pdev, entries, need, want); +if (want <0 ) +return want; + + nqsets = want -MSIX_EXTRAS ; +if (nqsets < s->max_ethqsets) { +dev_warn (adapter->pdev_dev,"only enough MSI-X vectors" +" for %d Queue Sets\n" , nqsets); + s->max_ethqsets = nqsets; +if (nqsets < s->ethqsets) +reduce_ethqs (adapter, nqsets); } -return err; +for (i =0 ; i < want; ++i) + adapter->msix_info[i].vec = entries[i].vector; + +return 0 ; }static const struct net_device_ops cxgb4vf_netdev_ops = {
Signature · 1 line
1.7.7.6
PATCH 10/34 enic: Use pci_enable_msix_range()
In reply to Alexander GordeevAs result of deprecation of MSI-X/MSI enablement functions pci_enable_msix() and pci_enable_msi_block() all drivers using these two interfaces need to be updated to use the new pci_enable_msi_range() and pci_enable_msix_range() interfaces.
--- drivers/net/ethernet/cisco/enic/enic_main.c | 6 ++++-- 1 files changed, 4 insertions(+), 2 deletions(-)
drivers/net/ethernet/cisco/enic/enic_main.c +4 -2
@@ -1796,7 +1796,8 @@ static int enic_set_intr_mode(struct enic *enic) enic->cq_count >= n + m && enic->intr_count >= n + m + 2) { -if (!pci_enable_msix (enic->pdev, enic->msix_entry, n + m +2 )) { +if (pci_enable_msix_range (enic->pdev, enic->msix_entry, + n + m +2 , n + m +2 ) >0 ) { enic->rq_count = n; enic->wq_count = m;
@@ -1815,7 +1816,8 @@ static int enic_set_intr_mode(struct enic *enic) enic->wq_count >= m && enic->cq_count >= 1 + m && enic->intr_count >= 1 + m + 2) { -if (!pci_enable_msix (enic->pdev, enic->msix_entry,1 + m +2 )) { +if (pci_enable_msix_range (enic->pdev, enic->msix_entry, +1 + m +2 ,1 + m +2 ) >0 ) { enic->rq_count =1 ; enic->wq_count = m;
Signature · 1 line
1.7.7.6
PATCH 11/34 benet: Use pci_enable_msix_range()
In reply to Alexander GordeevAs result of deprecation of MSI-X/MSI enablement functions pci_enable_msix() and pci_enable_msi_block() all drivers using these two interfaces need to be updated to use the new pci_enable_msi_range() and pci_enable_msix_range() interfaces.
--- drivers/net/ethernet/emulex/benet/be_main.c | 31 +++++++++++--------------- 1 files changed, 13 insertions(+), 18 deletions(-)
drivers/net/ethernet/emulex/benet/be_main.c +13 -18
@@ -2505,7 +2505,7 @@ static void be_msix_disable(struct be_adapter *adapter)static int be_msix_enable (struct be_adapter *adapter) { -int i, status, num_vec; +int i, num_vec;struct device *dev = &adapter->pdev->dev;/* If RoCE is supported, program the max number of NIC vectors that
@@ -2521,24 +2521,11 @@ static int be_msix_enable(struct be_adapter *adapter)for (i =0 ; i < num_vec; i++) adapter->msix_entries[i].entry = i; - status =pci_enable_msix (adapter->pdev, adapter->msix_entries, num_vec); -if (status ==0 ) { - goto done; - }else if (status >=MIN_MSIX_VECTORS ) { - num_vec = status; - status =pci_enable_msix (adapter->pdev, adapter->msix_entries, - num_vec); -if (!status) - goto done; - } + num_vec =pci_enable_msix_range (adapter->pdev, adapter->msix_entries, +MIN_MSIX_VECTORS , num_vec); +if (num_vec <0 ) + goto fail; -dev_warn (dev,"MSIx enable failed\n" ); - -/* INTx is not supported in VFs, so fail probe if enable_msix fails */ -if (!be_physfn (adapter)) -return status; -return 0 ; -done:if (be_roce_supported (adapter) && num_vec >MIN_MSIX_VECTORS ) { adapter->num_msix_roce_vec = num_vec /2 ; dev_info(dev, "enabled %d MSI-x vector(s) for RoCE\n",
@@ -2550,6 +2537,14 @@ done:dev_info (dev,"enabled %d MSI-x vector(s) for NIC\n" , adapter->num_msix_vec);return 0 ; + +fail: +dev_warn (dev,"MSIx enable failed\n" ); + +/* INTx is not supported in VFs, so fail probe if enable_msix fails */ +if (!be_physfn (adapter)) +return num_vec; +return 0 ; } static inline int be_msix_vec_get(struct be_adapter *adapter,
Signature · 1 line
1.7.7.6
RE: [PATCH 11/34] benet: Use pci_enable_msix_range()
Quoted 11 lines
-----Original Message-----
From: [email protected] [mailto:[email protected]] On Behalf Of Alexander GordeevAs result of deprecation of MSI-X/MSI enablement functions
pci_enable_msix()andpci_enable_msi_block()all drivers using these two interfaces need to be updated to use the newpci_enable_msi_range()andpci_enable_msix_range()interfaces.Signed-off-by Alexander Gordeev <[email protected]>
Quoted 69 lines
--- drivers/net/ethernet/emulex/benet/be_main.c | 31 +++++++++++--------------- 1 files changed, 13 insertions(+), 18 deletions(-)drivers/net/ethernet/emulex/benet/be_main.c +13
-19@@ -2505,7 +2505,7 @@ static void be_msix_disable(struct be_adapter *adapter)static int be_msix_enable (struct be_adapter *adapter) { -int i, status, num_vec; +int i, num_vec;struct device *dev = &adapter->pdev->dev;/* If RoCE is supported, program the max number of NIC vectors that @@ -2521,24 +2521,11 @@ static int be_msix_enable(struct be_adapter *adapter)for (i =0 ; i < num_vec; i++) adapter->msix_entries[i].entry = i; - status =pci_enable_msix (adapter->pdev, adapter->msix_entries, num_vec); -if (status ==0 ) { - goto done; - }else if (status >=MIN_MSIX_VECTORS ) { - num_vec = status; - status =pci_enable_msix (adapter->pdev, adapter->msix_entries, - num_vec); -if (!status) - goto done; - } + num_vec =pci_enable_msix_range (adapter->pdev, adapter->msix_entries, +MIN_MSIX_VECTORS , num_vec); +if (num_vec <0 ) + goto fail; -dev_warn (dev,"MSIx enable failed\n" ); - -/* INTx is not supported in VFs, so fail probe if enable_msix fails */ -if (!be_physfn (adapter)) -return status; -return 0 ; -done:if (be_roce_supported (adapter) && num_vec >MIN_MSIX_VECTORS ) { adapter->num_msix_roce_vec = num_vec /2 ; dev_info(dev, "enabled %d MSI-x vector(s) for RoCE\n",@@ -2550,6 +2537,14 @@ done:dev_info (dev,"enabled %d MSI-x vector(s) for NIC\n" , adapter->num_msix_vec);return 0 ; + +fail: +dev_warn (dev,"MSIx enable failed\n" ); + +/* INTx is not supported in VFs, so fail probe if enable_msix fails */ +if (!be_physfn (adapter)) +return num_vec; +return 0 ; } static inline int be_msix_vec_get(struct be_adapter *adapter, --1.7.7.6
--
To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
PATCH 12/34 e1000e: Use pci_enable_msix_range()
In reply to Alexander GordeevAs result of deprecation of MSI-X/MSI enablement functions pci_enable_msix() and pci_enable_msi_block() all drivers using these two interfaces need to be updated to use the new pci_enable_msi_range() and pci_enable_msix_range() interfaces.
--- drivers/net/ethernet/intel/e1000e/netdev.c | 9 +++++---- 1 files changed, 5 insertions(+), 4 deletions(-)
drivers/net/ethernet/intel/e1000e/netdev.c +5 -4
@@ -2041,10 +2041,11 @@ void e1000e_set_interrupt_capability(struct e1000_adapter *adapter)for (i =0 ; i < adapter->num_vectors; i++) adapter->msix_entries[i].entry = i; - err =pci_enable_msix (adapter->pdev, - adapter->msix_entries, - adapter->num_vectors); -if (err ==0 ) + err =pci_enable_msix_range (adapter->pdev, + adapter->msix_entries, + adapter->num_vectors, + adapter->num_vectors); +if (err >0 )return ; }/* MSI-X failed, so fall through and try MSI */
Signature · 1 line
1.7.7.6
Re: [PATCH 12/34] e1000e: Use pci_enable_msix_range()
Hello.
Quoted 17 lines · Alexander Gordeev
As result of deprecation of MSI-X/MSI enablement functions
pci_enable_msix()andpci_enable_msi_block()all drivers using these two interfaces need to be updated to use the newpci_enable_msi_range()andpci_enable_msix_range()interfaces.Signed-off-by Alexander Gordeev <[email protected]>--- drivers/net/ethernet/intel/e1000e/netdev.c | 9 +++++---- 1 files changed, 5 insertions(+), 4 deletions(-)drivers/net/ethernet/intel/e1000e/netdev.c +0
-0@@ -2041,10 +2041,11 @@ void e1000e_set_interrupt_capability(struct e1000_adapter *adapter)for (i =0 ; i < adapter->num_vectors; i++)
drivers/net/ethernet/intel/e1000e/netdev.c void e1000e_set_interrupt_capability(struct e1000_adapter *adapter) · line 2047
Quoted 10 lines
drivers/net/ethernet/intel/e1000e/netdev.c +4
-4adapter->msix_entries[i].entry = i; - err =pci_enable_msix (adapter->pdev, - adapter->msix_entries, - adapter->num_vectors); -if (err ==0 ) + err =pci_enable_msix_range (adapter->pdev, + adapter->msix_entries, + adapter->num_vectors, + adapter->num_vectors);
You should align all 'adapter' references under each other, according to
networking coding rules.
WBR, Sergei
PATCH 13/34 i40e: Use pci_enable_msix_range()
In reply to Alexander GordeevAs result of deprecation of MSI-X/MSI enablement functions pci_enable_msix() and pci_enable_msi_block() all drivers using these two interfaces need to be updated to use the new pci_enable_msi_range() and pci_enable_msix_range() interfaces.
--- drivers/net/ethernet/intel/i40e/i40e_main.c | 33 +++++---------------------- 1 files changed, 6 insertions(+), 27 deletions(-)
drivers/net/ethernet/intel/i40e/i40e_main.c +6 -27
@@ -5849,37 +5849,16 @@ err_out:**/ static int i40e_reserve_msix_vectors (struct i40e_pf *pf,int vectors) { -int err =0 ; - - pf->num_msix_entries =0 ; -while (vectors >=I40E_MIN_MSIX ) { - err =pci_enable_msix (pf->pdev, pf->msix_entries, vectors); -if (err ==0 ) { -/* good to go */ - pf->num_msix_entries = vectors; -break ; - }else if (err <0 ) { -/* total failure */ -dev_info (&pf->pdev->dev, -"MSI-X vector reservation failed: %d\n" , err); - vectors =0 ; -break ; - }else { -/* err > 0 is the hint for retry */ -dev_info (&pf->pdev->dev, -"MSI-X vectors wanted %d, retrying with %d\n" , - vectors, err); - vectors = err; - } - } - -if (vectors >0 && vectors <I40E_MIN_MSIX ) { + vectors =pci_enable_msix_range (pf->pdev, pf->msix_entries, +I40E_MIN_MSIX , vectors); +if (vectors <0 ) {dev_info (&pf->pdev->dev, -"Couldn't get enough vectors, only %d available\n" , - vectors); +"MSI-X vector reservation failed: %d\n" , vectors); vectors =0 ; } + pf->num_msix_entries = vectors; +return vectors; }
Signature · 1 line
1.7.7.6
PATCH 14/34 igb: Use pci_enable_msix_range()
In reply to Alexander GordeevAs result of deprecation of MSI-X/MSI enablement functions pci_enable_msix() and pci_enable_msi_block() all drivers using these two interfaces need to be updated to use the new pci_enable_msi_range() and pci_enable_msix_range() interfaces.
--- drivers/net/ethernet/intel/igb/igb_main.c | 9 +++++---- 1 files changed, 5 insertions(+), 4 deletions(-)
drivers/net/ethernet/intel/igb/igb_main.c +5 -4
@@ -1111,10 +1111,11 @@ static void igb_set_interrupt_capability(struct igb_adapter *adapter, bool msix)for (i =0 ; i < numvecs; i++) adapter->msix_entries[i].entry = i; - err =pci_enable_msix (adapter->pdev, - adapter->msix_entries, - numvecs); -if (err ==0 ) + err =pci_enable_msix_range (adapter->pdev, + adapter->msix_entries, + numvecs, + numvecs); +if (err >0 )return ;igb_reset_interrupt_capability (adapter);
Signature · 1 line
1.7.7.6
PATCH 15/34 igbvf: Use pci_enable_msix_range()
In reply to Alexander GordeevAs result of deprecation of MSI-X/MSI enablement functions pci_enable_msix() and pci_enable_msi_block() all drivers using these two interfaces need to be updated to use the new pci_enable_msi_range() and pci_enable_msix_range() interfaces.
--- drivers/net/ethernet/intel/igbvf/netdev.c | 6 +++--- 1 files changed, 3 insertions(+), 3 deletions(-)
drivers/net/ethernet/intel/igbvf/netdev.c +3 -3
@@ -1043,11 +1043,11 @@ static void igbvf_set_interrupt_capability(struct igbvf_adapter *adapter)for (i =0 ; i <3 ; i++) adapter->msix_entries[i].entry = i; - err =pci_enable_msix (adapter->pdev, - adapter->msix_entries,3 ); + err =pci_enable_msix_range (adapter->pdev, + adapter->msix_entries,3 ,3 ); } -if (err) { +if (err <0 ) {/* MSI-X failed */ dev_err (&adapter->pdev->dev,"Failed to initialize MSI-X interrupts.\n" );
Signature · 1 line
1.7.7.6
PATCH 16/34 ixgbe: Use pci_enable_msix_range()
In reply to Alexander GordeevAs result of deprecation of MSI-X/MSI enablement functions pci_enable_msix() and pci_enable_msi_block() all drivers using these two interfaces need to be updated to use the new pci_enable_msi_range() and pci_enable_msix_range() interfaces.
--- drivers/net/ethernet/intel/ixgbe/ixgbe_lib.c | 16 ++++------------ 1 files changed, 4 insertions(+), 12 deletions(-)
drivers/net/ethernet/intel/ixgbe/ixgbe_lib.c +4 -12
@@ -698,7 +698,7 @@ static void ixgbe_set_num_queues(struct ixgbe_adapter *adapter)static void ixgbe_acquire_msix_vectors (struct ixgbe_adapter *adapter,int vectors) { -int err, vector_threshold; +int vector_threshold;/* We'll want at least 2 (vector_threshold): * 1) TxQ[0] + RxQ[0] handler
@@ -712,18 +712,10 @@ static void ixgbe_acquire_msix_vectors(struct ixgbe_adapter *adapter,* Right now, we simply care about how many we'll get; we'll * set them up later while requesting irq's. */ -while (vectors >= vector_threshold) { - err =pci_enable_msix (adapter->pdev, adapter->msix_entries, - vectors); -if (!err)/* Success in acquiring all requested vectors. */ -break ; -else if (err <0 ) - vectors =0 ;/* Nasty failure, quit now */ -else /* err == number of vectors we should try again with */ - vectors = err; - } + vectors =pci_enable_msix_range (adapter->pdev, adapter->msix_entries, + vector_threshold, vectors); -if (vectors < vector_threshold) { +if (vectors <0 ) {/* Can't allocate enough MSI-X interrupts? Oh well. * This just means we'll go with either a single MSI * vector or fall back to legacy interrupts.
Signature · 1 line
1.7.7.6
PATCH 17/34 ixgbevf: Use pci_enable_msix_range()
In reply to Alexander GordeevAs result of deprecation of MSI-X/MSI enablement functions pci_enable_msix() and pci_enable_msi_block() all drivers using these two interfaces need to be updated to use the new pci_enable_msi_range() and pci_enable_msix_range() interfaces.
--- drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c | 33 +++++++------------- 1 files changed, 12 insertions(+), 21 deletions(-)
drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c +12 -21
@@ -1817,7 +1817,6 @@ void ixgbevf_reset(struct ixgbevf_adapter *adapter)static int ixgbevf_acquire_msix_vectors (struct ixgbevf_adapter *adapter,int vectors) { -int err =0 ;int vector_threshold;/* We'll want at least 2 (vector_threshold):
@@ -1831,33 +1830,25 @@ static int ixgbevf_acquire_msix_vectors(struct ixgbevf_adapter *adapter,* Right now, we simply care about how many we'll get; we'll * set them up later while requesting irq's. */ -while (vectors >= vector_threshold) { - err =pci_enable_msix (adapter->pdev, adapter->msix_entries, - vectors); -if (!err || err <0 )/* Success or a nasty failure. */ -break ; -else /* err == number of vectors we should try again with */ - vectors = err; - } + vectors =pci_enable_msix_range (adapter->pdev, adapter->msix_entries, + vector_threshold, vectors); -if (vectors < vector_threshold) - err = -ENOMEM ; - -if (err) { +if (vectors <0 ) {dev_err (&adapter->pdev->dev,"Unable to allocate MSI-X interrupts\n" );kfree (adapter->msix_entries); adapter->msix_entries =NULL ; - }else { -/* -* Adjust for only the vectors we'll use, which is minimum -* of max_msix_q_vectors + NON_Q_VECTORS, or the number of -* vectors we were allocated. -*/ - adapter->num_msix_vectors = vectors; +return vectors; } -return err; +/* +* Adjust for only the vectors we'll use, which is minimum +* of max_msix_q_vectors + NON_Q_VECTORS, or the number of +* vectors we were allocated. +*/ + adapter->num_msix_vectors = vectors; + +return 0 ; }/**
Signature · 1 line
1.7.7.6
Re: [PATCH 17/34] ixgbevf: Use pci_enable_msix_range()
Quoted 46 lines · Alexander Gordeev
As result of deprecation of MSI-X/MSI enablement functions
pci_enable_msix()andpci_enable_msi_block()all drivers using these two interfaces need to be updated to use the newpci_enable_msi_range()andpci_enable_msix_range()interfaces.Signed-off-by Alexander Gordeev <[email protected]>--- drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c | 33 +++++++------------- 1 files changed, 12 insertions(+), 21 deletions(-)drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c +3
-18@@ -1831,33 +1830,25 @@ static int ixgbevf_acquire_msix_vectors(struct ixgbevf_adapter *adapter,* Right now, we simply care about how many we'll get; we'll * set them up later while requesting irq's. */ -while (vectors >= vector_threshold) { - err =pci_enable_msix (adapter->pdev, adapter->msix_entries, - vectors); -if (!err || err <0 )/* Success or a nasty failure. */ -break ; -else /* err == number of vectors we should try again with */ - vectors = err; - } + vectors =pci_enable_msix_range (adapter->pdev, adapter->msix_entries, + vector_threshold, vectors); -if (vectors < vector_threshold) - err = -ENOMEM ; - -if (err) { +if (vectors <0 ) {dev_err (&adapter->pdev->dev,"Unable to allocate MSI-X interrupts\n" );kfree (adapter->msix_entries); adapter->msix_entries =NULL ; - }else { -/* -* Adjust for only the vectors we'll use, which is minimum -* of max_msix_q_vectors + NON_Q_VECTORS, or the number of -* vectors we were allocated. -*/
drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c static int ixgbevf_acquire_msix_vectors(struct ixgbevf_adapter *adapter, · line 1848
Quoted 10 lines
drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c +6
-2- adapter->num_msix_vectors = vectors; +return vectors; } -return err; +/* +* Adjust for only the vectors we'll use, which is minimum +* of max_msix_q_vectors + NON_Q_VECTORS, or the number of +* vectors we were allocated. +*/
Networking code formats multi-line comments slightly differently to the
rest of the kernel:
/* bla
* bla
*/
Although, you're only moving what was there before you, maybe it's a good
time to get this right.
WBR, Sergei
PATCH 18/34 mlx4: Use pci_enable_msix_range()
In reply to Alexander GordeevAs result of deprecation of MSI-X/MSI enablement functions pci_enable_msix() and pci_enable_msi_block() all drivers using these two interfaces need to be updated to use the new pci_enable_msi_range() and pci_enable_msix_range() interfaces.
--- drivers/net/ethernet/mellanox/mlx4/main.c | 19 ++++--------------- 1 files changed, 4 insertions(+), 15 deletions(-)
drivers/net/ethernet/mellanox/mlx4/main.c +4 -15
@@ -1976,7 +1976,6 @@ static void mlx4_enable_msi_x(struct mlx4_dev *dev)int nreq =min_t (int, dev->caps.num_ports *min_t (int,netif_get_num_default_rss_queues () +1 ,MAX_MSIX_P_PORT ) +MSIX_LEGACY_SZ ,MAX_MSIX ); -int err;int i;if (msi_x) {
@@ -1990,22 +1989,12 @@ static void mlx4_enable_msi_x(struct mlx4_dev *dev)for (i =0 ; i < nreq; ++i) entries[i].entry = i; - retry: - err =pci_enable_msix (dev->pdev, entries, nreq); -if (err) { -/* Try again if at least 2 vectors are available */ -if (err >1 ) { -mlx4_info (dev,"Requested %d vectors, " -"but only %d MSI-X vectors available, " -"trying again\n" , nreq, err); - nreq = err; - goto retry; - } + nreq =pci_enable_msix_range (dev->pdev, entries,2 , nreq); + +if (nreq <0 ) {kfree (entries); goto no_msi; - } - -if (nreq < + }else if (nreq <MSIX_LEGACY_SZ + dev->caps.num_ports *MIN_MSIX_P_PORT ) {/*Working in legacy mode , all EQ's shared*/ dev->caps.comp_pool =0 ;
Signature · 1 line
1.7.7.6
Re: [PATCH 18/34] mlx4: Use pci_enable_msix_range()
Hello.
Quoted 15 lines · Alexander Gordeev
As result of deprecation of MSI-X/MSI enablement functions
pci_enable_msix()andpci_enable_msi_block()all drivers using these two interfaces need to be updated to use the newpci_enable_msi_range()andpci_enable_msix_range()interfaces.Signed-off-by Alexander Gordeev <[email protected]>--- drivers/net/ethernet/mellanox/mlx4/main.c | 19 ++++--------------- 1 files changed, 4 insertions(+), 15 deletions(-)drivers/net/ethernet/mellanox/mlx4/main.c +0
-0
[...]
Quoted 1 line
drivers/net/ethernet/mellanox/mlx4/main.c +0
-0@@ -1990,22 +1989,12 @@ static void mlx4_enable_msi_x(struct mlx4_dev *dev)
[...]
drivers/net/ethernet/mellanox/mlx4/main.c static void mlx4_enable_msi_x(struct mlx4_dev *dev) · line 1998
Quoted 10 lines
drivers/net/ethernet/mellanox/mlx4/main.c +4
-3+ nreq =pci_enable_msix_range (dev->pdev, entries,2 , nreq); + +if (nreq <0 ) {kfree (entries); goto no_msi; - } - -if (nreq < + }else if (nreq <MSIX_LEGACY_SZ + dev->caps.num_ports *MIN_MSIX_P_PORT ) {
Please realign this line to start right under 'nreq'.
WBR, Sergei
Re: mlx4: Use pci_enable_msix_range()
In reply to Alexander GordeevQuoted 11 lines · Alexander Gordeev
As result of deprecation of MSI-X/MSI enablement functions
pci_enable_msix()andpci_enable_msi_block()all drivers using these two interfaces need to be updated to use the newpci_enable_msi_range()andpci_enable_msix_range()interfaces.Signed-off-by Alexander Gordeev <[email protected]>--- drivers/net/ethernet/mellanox/mlx4/main.c | 19 ++++--------------- 1 files changed, 4 insertions(+), 15 deletions(-)
Acked By: Amir Vadai <[email protected]>
PATCH 19/34 mlx5: Use pci_enable_msix_range()
In reply to Alexander GordeevAs result of deprecation of MSI-X/MSI enablement functions pci_enable_msix() and pci_enable_msi_block() all drivers using these two interfaces need to be updated to use the new pci_enable_msi_range() and pci_enable_msix_range() interfaces.
--- drivers/net/ethernet/mellanox/mlx5/core/main.c | 16 +++++----------- 1 files changed, 5 insertions(+), 11 deletions(-)
drivers/net/ethernet/mellanox/mlx5/core/main.c +5 -11
@@ -116,7 +116,6 @@ static int mlx5_enable_msix(struct mlx5_core_dev *dev)struct mlx5_eq_table *table = &dev->priv.eq_table;int num_eqs =1 << dev->caps.log_max_eq;int nvec; -int err;int i; nvec = dev->caps.num_ports *num_online_cpus () +MLX5_EQ_VEC_COMP_BASE ;
@@ -131,17 +130,12 @@ static int mlx5_enable_msix(struct mlx5_core_dev *dev)for (i =0 ; i < nvec; i++) table->msix_arr[i].entry = i; -retry: - table->num_comp_vectors = nvec -MLX5_EQ_VEC_COMP_BASE ; - err =pci_enable_msix (dev->pdev, table->msix_arr, nvec); -if (err <=0 ) { -return err; - }else if (err >2 ) { - nvec = err; - goto retry; - } + nvec =pci_enable_msix_range (dev->pdev, table->msix_arr, +MLX5_EQ_VEC_COMP_BASE , nvec); +if (nvec <0 ) +return nvec; -mlx5_core_dbg (dev,"received %d MSI vectors out of %d requested\n" , err, nvec); + table->num_comp_vectors = nvec -MLX5_EQ_VEC_COMP_BASE ;return 0 ; }
Signature · 1 line
1.7.7.6
PATCH 20/34 myri10ge: Use pci_enable_msix_range()
In reply to Alexander GordeevAs result of deprecation of MSI-X/MSI enablement functions pci_enable_msix() and pci_enable_msi_block() all drivers using these two interfaces need to be updated to use the new pci_enable_msi_range() and pci_enable_msix_range() interfaces.
--- drivers/net/ethernet/myricom/myri10ge/myri10ge.c | 32 ++++++++++----------- 1 files changed, 15 insertions(+), 17 deletions(-)
drivers/net/ethernet/myricom/myri10ge/myri10ge.c +15 -17
@@ -2329,16 +2329,14 @@ static int myri10ge_request_irq(struct myri10ge_priv *mgp) status =0 ;if (myri10ge_msi) {if (mgp->num_slices >1 ) { - status = -pci_enable_msix (pdev, mgp->msix_vectors, - mgp->num_slices); -if (status ==0 ) { - mgp->msix_enabled =1 ; - }else { + status =pci_enable_msix_range (pdev, mgp->msix_vectors, + mgp->num_slices, mgp->num_slices); +if (status <0 ) {dev_err (&pdev->dev,"Error %d setting up MSI-X\n" , status);return status; } + mgp->msix_enabled =1 ; }if (mgp->msix_enabled ==0 ) { status =pci_enable_msi (pdev);
@@ -3901,23 +3899,23 @@ static void myri10ge_probe_slices(struct myri10ge_priv *mgp) }while (mgp->num_slices >1 ) { -/* make sure it is a power of two */ -while (!is_power_of_2 (mgp->num_slices)) - mgp->num_slices--; + mgp->num_slices =rounddown_pow_of_two (mgp->num_slices);if (mgp->num_slices ==1 ) goto disable_msix; - status =pci_enable_msix (pdev, mgp->msix_vectors, - mgp->num_slices); -if (status ==0 ) { -pci_disable_msix (pdev); + status =pci_enable_msix_range (pdev, mgp->msix_vectors, + mgp->num_slices, mgp->num_slices); +if (status <0 ) + goto disable_msix; + +pci_disable_msix (pdev); + +if (status == mgp->num_slices) {if (old_allocated)kfree (old_fw);return ; - } -if (status >0 ) + }else { mgp->num_slices = status; -else - goto disable_msix; + } } disable_msix:
Signature · 1 line
1.7.7.6
Re: [PATCH 20/34] myri10ge: Use pci_enable_msix_range()
Hello.
Quoted 42 lines · Alexander Gordeev
As result of deprecation of MSI-X/MSI enablement functions
pci_enable_msix()andpci_enable_msi_block()all drivers using these two interfaces need to be updated to use the newpci_enable_msi_range()andpci_enable_msix_range()interfaces.Signed-off-by Alexander Gordeev <[email protected]>--- drivers/net/ethernet/myricom/myri10ge/myri10ge.c | 32 ++++++++++----------- 1 files changed, 15 insertions(+), 17 deletions(-)drivers/net/ethernet/myricom/myri10ge/myri10ge.c +4
-8@@ -2329,16 +2329,14 @@ static int myri10ge_request_irq(struct myri10ge_priv *mgp) status =0 ;if (myri10ge_msi) {if (mgp->num_slices >1 ) { - status = -pci_enable_msix (pdev, mgp->msix_vectors, - mgp->num_slices); -if (status ==0 ) { - mgp->msix_enabled =1 ; - }else { + status =pci_enable_msix_range (pdev, mgp->msix_vectors, + mgp->num_slices, mgp->num_slices); +if (status <0 ) {dev_err (&pdev->dev,"Error %d setting up MSI-X\n" , status);return status; } + mgp->msix_enabled =1 ; }if (mgp->msix_enabled ==0 ) { status =pci_enable_msi (pdev);@@ -3901,23 +3899,23 @@ static void myri10ge_probe_slices(struct myri10ge_priv *mgp) }while (mgp->num_slices >1 ) { -/* make sure it is a power of two */ -while (!is_power_of_2 (mgp->num_slices))
drivers/net/ethernet/myricom/myri10ge/myri10ge.c static void myri10ge_probe_slices(struct myri10ge_priv *mgp) · line 3906
Quoted 10 lines
drivers/net/ethernet/myricom/myri10ge/myri10ge.c +3
-5- mgp->num_slices--; + mgp->num_slices =rounddown_pow_of_two (mgp->num_slices);if (mgp->num_slices ==1 ) goto disable_msix; - status =pci_enable_msix (pdev, mgp->msix_vectors, - mgp->num_slices); -if (status ==0 ) { -pci_disable_msix (pdev); + status =pci_enable_msix_range (pdev, mgp->msix_vectors, + mgp->num_slices, mgp->num_slices);
The continuation line(s) should be aligned to start right under 'pdev',
according to the networking coding rules.
drivers/net/ethernet/myricom/myri10ge/myri10ge.c static void myri10ge_probe_slices(struct myri10ge_priv *mgp) · line 3908
Quoted 2 lines
drivers/net/ethernet/myricom/myri10ge/myri10ge.c +2
-0+if (status <0 ) + goto disable_msix;
Hm, if enabling MSI failed, we don't need to disable it, right? So,
perhaps the label should be renamed?
Quoted 7 lines
drivers/net/ethernet/myricom/myri10ge/myri10ge.c +4
-0+ +pci_disable_msix (pdev); + +if (status == mgp->num_slices) {if (old_allocated)kfree (old_fw);return ;
drivers/net/ethernet/myricom/myri10ge/myri10ge.c static void myri10ge_probe_slices(struct myri10ge_priv *mgp) · line 3921
Quoted 10 lines
drivers/net/ethernet/myricom/myri10ge/myri10ge.c +2
-4- } -if (status >0 ) + }else { mgp->num_slices = status; -else - goto disable_msix; + } } disable_msix:
WBR, Sergei
Re: [PATCH 20/34] myri10ge: Use pci_enable_msix_range()
Quoted 4 lines · Sergei Shtylyov
Hello.
On 01/31/2014 06:08 PM, Alexander Gordeev wrote:
[...]
Quoted 6 lines
drivers/net/ethernet/myricom/myri10ge/myri10ge.c static void myri10ge_probe_slices(struct myri10ge_priv *mgp) · line 3908
Quoted 2 lines
drivers/net/ethernet/myricom/myri10ge/myri10ge.c +2
-0+if (status <0 ) + goto disable_msix;Hm, if enabling MSI failed, we don't need to disable it, right? So,
perhaps the label should be renamed?
The code following disable_msix does not call pci_disable_msix(). It frees the allocated vector buffer and loads the firmware that uses a single interrupt vector. So, it is "disable" in the sense that the driver is not going to use MSI-X vectors. I agree that naming could be better.
disable_msix:
if (mgp->msix_vectors != NULL) {
kfree(mgp->msix_vectors);
mgp->msix_vectors = NULL;
}abort_with_fw:
mgp->num_slices = 1;
set_fw_name(mgp, old_fw, old_allocated);
myri10ge_load_firmware(mgp, 0);PATCH 21/34 s2io: Use pci_enable_msix_range()
In reply to Alexander GordeevAs result of deprecation of MSI-X/MSI enablement functions pci_enable_msix() and pci_enable_msi_block() all drivers using these two interfaces need to be updated to use the new pci_enable_msi_range() and pci_enable_msix_range() interfaces.
--- drivers/net/ethernet/neterion/s2io.c | 5 +++-- 1 files changed, 3 insertions(+), 2 deletions(-)
drivers/net/ethernet/neterion/s2io.c +3 -2
@@ -3792,9 +3792,10 @@ static int s2io_enable_msi_x(struct s2io_nic *nic)writeq (rx_mat, &bar0->rx_mat);readq (&bar0->rx_mat); - ret =pci_enable_msix (nic->pdev, nic->entries, nic->num_entries); + ret =pci_enable_msix_range (nic->pdev, nic->entries, + nic->num_entries, nic->num_entries);/* We fail init if error or we get less vectors than min required */ -if (ret) { +if (ret <0 ) {DBG_PRINT (ERR_DBG ,"Enabling MSI-X failed\n" );kfree (nic->entries); swstats->mem_freed += nic->num_entries *
Signature · 1 line
1.7.7.6
PATCH 22/34 vxge: Use pci_enable_msix_range()
In reply to Alexander GordeevAs result of deprecation of MSI-X/MSI enablement functions pci_enable_msix() and pci_enable_msi_block() all drivers using these two interfaces need to be updated to use the new pci_enable_msi_range() and pci_enable_msix_range() interfaces.
--- drivers/net/ethernet/neterion/vxge/vxge-main.c | 15 +++++++++------ 1 files changed, 9 insertions(+), 6 deletions(-)
drivers/net/ethernet/neterion/vxge/vxge-main.c +9 -6
@@ -2352,12 +2352,18 @@ start: vdev->vxge_entries[j].entry =VXGE_ALARM_MSIX_ID ; vdev->vxge_entries[j].in_use =0 ; - ret =pci_enable_msix (vdev->pdev, vdev->entries, vdev->intr_cnt); -if (ret >0 ) { + ret =pci_enable_msix_range (vdev->pdev, + vdev->entries,3 , vdev->intr_cnt); +if (ret <0 ) { + ret = -ENODEV ; + goto enable_msix_failed; + }else if (ret < vdev->intr_cnt) { +pci_disable_msix (vdev->pdev); +vxge_debug_init (VXGE_ERR ,"%s: MSI-X enable failed for %d vectors, ret: %d" ,VXGE_DRIVER_NAME , vdev->intr_cnt, ret); -if ((max_config_vpath !=VXGE_USE_DEFAULT ) || (ret <3 )) { +if (max_config_vpath !=VXGE_USE_DEFAULT ) { ret = -ENODEV ; goto enable_msix_failed; }
@@ -2371,9 +2377,6 @@ start:vxge_close_vpaths (vdev, temp); vdev->no_of_vpath = temp; goto start; - }else if (ret <0 ) { - ret = -ENODEV ; - goto enable_msix_failed; }return 0 ;
Signature · 1 line
1.7.7.6
PATCH 23/34 forcedeth: Fix invalid errno reporting in nv_request_irq()
In reply to Alexander Gordeev--- drivers/net/ethernet/nvidia/forcedeth.c | 22 ++++++++++++++-------- 1 files changed, 14 insertions(+), 8 deletions(-)
drivers/net/ethernet/nvidia/forcedeth.c +14 -8
@@ -3952,8 +3952,9 @@ static int nv_request_irq(struct net_device *dev, int intr_test)if (optimization_mode ==NV_OPTIMIZATION_MODE_THROUGHPUT && !intr_test) {/* Request irq for rx handling */ sprintf (np->name_rx,"%s-rx" , dev->name); -if (request_irq (np->msi_x_entry[NV_MSI_X_VECTOR_RX ].vector, - nv_nic_irq_rx,IRQF_SHARED , np->name_rx, dev) !=0 ) { + ret =request_irq (np->msi_x_entry[NV_MSI_X_VECTOR_RX ].vector, + nv_nic_irq_rx,IRQF_SHARED , np->name_rx, dev); +if (ret) {netdev_info (dev,"request_irq failed for rx %d\n" , ret);
@@ -3963,8 +3964,9 @@ static int nv_request_irq(struct net_device *dev, int intr_test) }/* Request irq for tx handling */ sprintf (np->name_tx,"%s-tx" , dev->name); -if (request_irq (np->msi_x_entry[NV_MSI_X_VECTOR_TX ].vector, - nv_nic_irq_tx,IRQF_SHARED , np->name_tx, dev) !=0 ) { + ret =request_irq (np->msi_x_entry[NV_MSI_X_VECTOR_TX ].vector, + nv_nic_irq_tx,IRQF_SHARED , np->name_tx, dev); +if (ret) {netdev_info (dev,"request_irq failed for tx %d\n" , ret);
@@ -3974,8 +3976,9 @@ static int nv_request_irq(struct net_device *dev, int intr_test) }/* Request irq for link and timer handling */ sprintf (np->name_other,"%s-other" , dev->name); -if (request_irq (np->msi_x_entry[NV_MSI_X_VECTOR_OTHER ].vector, - nv_nic_irq_other,IRQF_SHARED , np->name_other, dev) !=0 ) { + ret =request_irq (np->msi_x_entry[NV_MSI_X_VECTOR_OTHER ].vector, + nv_nic_irq_other,IRQF_SHARED , np->name_other, dev); +if (ret) {netdev_info (dev,"request_irq failed for link %d\n" , ret);
@@ -3991,7 +3994,9 @@ static int nv_request_irq(struct net_device *dev, int intr_test)set_msix_vector_map (dev,NV_MSI_X_VECTOR_OTHER ,NVREG_IRQ_OTHER ); }else {/* Request irq for all interrupts */ -if (request_irq (np->msi_x_entry[NV_MSI_X_VECTOR_ALL ].vector, handler,IRQF_SHARED , dev->name, dev) !=0 ) { + ret =request_irq (np->msi_x_entry[NV_MSI_X_VECTOR_ALL ].vector, + handler,IRQF_SHARED , dev->name, dev); +if (ret) {netdev_info (dev,"request_irq failed %d\n" , ret);
@@ -4011,7 +4016,8 @@ static int nv_request_irq(struct net_device *dev, int intr_test) ret =pci_enable_msi (np->pci_dev);if (ret ==0 ) { np->msi_flags |=NV_MSI_ENABLED ; -if (request_irq (np->pci_dev->irq, handler,IRQF_SHARED , dev->name, dev) !=0 ) { + ret =request_irq (np->pci_dev->irq, handler,IRQF_SHARED , dev->name, dev); +if (ret) {netdev_info (dev,"request_irq failed %d\n" , ret);pci_disable_msi (np->pci_dev);
Signature · 1 line
1.7.7.6
PATCH 24/34 forcedeth: Cleanup MSI-X to MSI to INTx fallback code
In reply to Alexander Gordeev--- drivers/net/ethernet/nvidia/forcedeth.c | 12 ++++++------ 1 files changed, 6 insertions(+), 6 deletions(-)
drivers/net/ethernet/nvidia/forcedeth.c +6 -6
@@ -3930,7 +3930,7 @@ static int nv_request_irq(struct net_device *dev, int intr_test) {struct fe_priv *np =get_nvpriv (dev);u8 __iomem *base =get_hwbase (dev); -int ret =1 ; +int ret;int i;irqreturn_t (*handler)(int foo,void *data);
@@ -4010,9 +4010,10 @@ static int nv_request_irq(struct net_device *dev, int intr_test)writel (0 , base + NvRegMSIXMap1); }netdev_info (dev,"MSI-X enabled\n" ); +return 0 ; } } -if (ret !=0 && np->msi_flags &NV_MSI_CAPABLE ) { +if (np->msi_flags &NV_MSI_CAPABLE ) { ret =pci_enable_msi (np->pci_dev);if (ret ==0 ) { np->msi_flags |=NV_MSI_ENABLED ;
@@ -4031,13 +4032,12 @@ static int nv_request_irq(struct net_device *dev, int intr_test)/* enable msi vector 0 */ writel (NVREG_MSI_VECTOR_0_ENABLED , base + NvRegMSIIrqMask);netdev_info (dev,"MSI enabled\n" ); +return 0 ; } } -if (ret !=0 ) { -if (request_irq (np->pci_dev->irq, handler,IRQF_SHARED , dev->name, dev) !=0 ) - goto out_err; - } +if (request_irq (np->pci_dev->irq, handler,IRQF_SHARED , dev->name, dev) !=0 ) + goto out_err;return 0 ; out_free_tx:
Signature · 1 line
1.7.7.6
PATCH 25/34 forcedeth: Use pci_enable_msix_range()
In reply to Alexander GordeevAs result of deprecation of MSI-X/MSI enablement functions pci_enable_msix() and pci_enable_msi_block() all drivers using these two interfaces need to be updated to use the new pci_enable_msi_range() and pci_enable_msix_range() interfaces.
--- drivers/net/ethernet/nvidia/forcedeth.c | 7 +++++-- 1 files changed, 5 insertions(+), 2 deletions(-)
drivers/net/ethernet/nvidia/forcedeth.c +5 -2
@@ -3946,8 +3946,11 @@ static int nv_request_irq(struct net_device *dev, int intr_test)if (np->msi_flags &NV_MSI_X_CAPABLE ) {for (i =0 ; i < (np->msi_flags &NV_MSI_X_VECTORS_MASK ); i++) np->msi_x_entry[i].entry = i; - ret =pci_enable_msix (np->pci_dev, np->msi_x_entry, (np->msi_flags &NV_MSI_X_VECTORS_MASK )); -if (ret ==0 ) { + ret =pci_enable_msix_range (np->pci_dev, + np->msi_x_entry, + np->msi_flags &NV_MSI_X_VECTORS_MASK , + np->msi_flags &NV_MSI_X_VECTORS_MASK ); +if (ret >0 ) { np->msi_flags |=NV_MSI_X_ENABLED ;if (optimization_mode ==NV_OPTIMIZATION_MODE_THROUGHPUT && !intr_test) {/* Request irq for rx handling */
Signature · 1 line
1.7.7.6
PATCH 26/34 netxen: Use pci_enable_msix_range()
In reply to Alexander GordeevAs result of deprecation of MSI-X/MSI enablement functions pci_enable_msix() and pci_enable_msi_block() all drivers using these two interfaces need to be updated to use the new pci_enable_msi_range() and pci_enable_msix_range() interfaces.
--- .../net/ethernet/qlogic/netxen/netxen_nic_main.c | 5 +++-- 1 files changed, 3 insertions(+), 2 deletions(-)
drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c +3 -2
@@ -643,8 +643,9 @@ static int netxen_setup_msi_interrupts(struct netxen_adapter *adapter,if (adapter->msix_supported) {netxen_init_msix_entries (adapter, num_msix); - err =pci_enable_msix (pdev, adapter->msix_entries, num_msix); -if (err ==0 ) { + err =pci_enable_msix_range (pdev, adapter->msix_entries, + num_msix, num_msix); +if (err >0 ) { adapter->flags |=NETXEN_NIC_MSIX_ENABLED ;netxen_set_msix_bit (pdev,1 );
Signature · 1 line
1.7.7.6
PATCH 27/34 qlcnic: Cleanup qlcnic_enable_msix() return values
In reply to Alexander Gordeev--- drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c | 10 +++++----- 1 files changed, 5 insertions(+), 5 deletions(-)
drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c +5 -5
@@ -684,7 +684,7 @@ restore:int qlcnic_enable_msix (struct qlcnic_adapter *adapter,u32 num_msix) {struct pci_dev *pdev = adapter->pdev; -int err =-1 , vector; +int err, vector;if (!adapter->msix_entries) { adapter->msix_entries = kcalloc(num_msix,
@@ -706,7 +706,7 @@ enable_msix: adapter->flags |=QLCNIC_MSIX_ENABLED ; adapter->ahw->num_msix = num_msix;dev_info (&pdev->dev,"using msi-x interrupts\n" ); -return err; +return 0 ; }else if (err >0 ) { dev_info(&pdev->dev, "Unable to allocate %d MSI-X vectors, Available vectors %d\n",
@@ -715,12 +715,12 @@ enable_msix:if (qlcnic_82xx_check (adapter)) { num_msix =rounddown_pow_of_two (err);if (err <QLCNIC_82XX_MINIMUM_VECTOR ) -return -EIO ; +return -ENOSPC ; }else { num_msix =rounddown_pow_of_two (err -1 ); num_msix +=1 ;if (err <QLCNIC_83XX_MINIMUM_VECTOR ) -return -EIO ; +return -ENOSPC ; } if (qlcnic_82xx_check(adapter) &&
@@ -747,7 +747,7 @@ enable_msix: } } -return err; +return -EIO ; }static int qlcnic_82xx_calculate_msix_vector (struct qlcnic_adapter *adapter)
Signature · 1 line
1.7.7.6
PATCH 28/34 qlcnic: Use pci_enable_msix_range()
In reply to Alexander GordeevAs result of deprecation of MSI-X/MSI enablement functions pci_enable_msix() and pci_enable_msi_block() all drivers using these two interfaces need to be updated to use the new pci_enable_msi_range() and pci_enable_msix_range() interfaces.
--- drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c | 8 ++++++-- 1 files changed, 6 insertions(+), 2 deletions(-)
drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c +6 -2
@@ -701,13 +701,17 @@ enable_msix:for (vector =0 ; vector < num_msix; vector++) adapter->msix_entries[vector].entry = vector; - err =pci_enable_msix (pdev, adapter->msix_entries, num_msix); -if (err ==0 ) { + err =pci_enable_msix_range (pdev, + adapter->msix_entries,1 , num_msix); + +if (err == num_msix) { adapter->flags |=QLCNIC_MSIX_ENABLED ; adapter->ahw->num_msix = num_msix;dev_info (&pdev->dev,"using msi-x interrupts\n" );return 0 ; }else if (err >0 ) { +pci_disable_msix (pdev); +dev_info (&pdev->dev,"Unable to allocate %d MSI-X vectors, Available vectors %d\n" , num_msix, err);
Signature · 1 line
1.7.7.6
PATCH 29/34 qlge: Get rid of an redundant assignment
In reply to Alexander Gordeev--- drivers/net/ethernet/qlogic/qlge/qlge_main.c | 1 - 1 files changed, 0 insertions(+), 1 deletions(-)
drivers/net/ethernet/qlogic/qlge/qlge_main.c +0 -1
@@ -3346,7 +3346,6 @@ static void ql_enable_msix(struct ql_adapter *qdev) qdev->msi_x_entry =NULL ;netif_warn (qdev, ifup, qdev->ndev,"MSI-X Enable failed, trying MSI.\n" ); - qdev->intr_count =1 ; qlge_irq_type =MSI_IRQ ; }else if (err ==0 ) {set_bit (QL_MSIX_ENABLED , &qdev->flags);
Signature · 1 line
1.7.7.6
PATCH 30/34 qlge: Use pci_enable_msix_range()
In reply to Alexander GordeevAs result of deprecation of MSI-X/MSI enablement functions pci_enable_msix() and pci_enable_msi_block() all drivers using these two interfaces need to be updated to use the new pci_enable_msi_range() and pci_enable_msix_range() interfaces.
--- drivers/net/ethernet/qlogic/qlge/qlge_main.c | 15 ++++----------- 1 files changed, 4 insertions(+), 11 deletions(-)
drivers/net/ethernet/qlogic/qlge/qlge_main.c +4 -11
@@ -3331,23 +3331,16 @@ static void ql_enable_msix(struct ql_adapter *qdev)for (i =0 ; i < qdev->intr_count; i++) qdev->msi_x_entry[i].entry = i; -/* Loop to get our vectors. We start with -* what we want and settle for what we get. -*/ -do { - err =pci_enable_msix (qdev->pdev, - qdev->msi_x_entry, qdev->intr_count); -if (err >0 ) - qdev->intr_count = err; - }while (err >0 ); - + err =pci_enable_msix_range (qdev->pdev, qdev->msi_x_entry, +1 , qdev->intr_count);if (err <0 ) {kfree (qdev->msi_x_entry); qdev->msi_x_entry =NULL ;netif_warn (qdev, ifup, qdev->ndev,"MSI-X Enable failed, trying MSI.\n" ); qlge_irq_type =MSI_IRQ ; - }else if (err ==0 ) { + }else { + qdev->intr_count = err;set_bit (QL_MSIX_ENABLED , &qdev->flags); netif_info(qdev, ifup, qdev->ndev, "MSI-X Enabled, got %d vectors.\n",
Signature · 1 line
1.7.7.6
PATCH 31/34 efx: Use pci_enable_msix_range()
In reply to Alexander GordeevAs result of deprecation of MSI-X/MSI enablement functions pci_enable_msix() and pci_enable_msi_block() all drivers using these two interfaces need to be updated to use the new pci_enable_msi_range() and pci_enable_msix_range() interfaces.
--- drivers/net/ethernet/sfc/efx.c | 20 +++++++++----------- 1 files changed, 9 insertions(+), 11 deletions(-)
drivers/net/ethernet/sfc/efx.c +9 -11
@@ -1346,20 +1346,23 @@ static int efx_probe_interrupts(struct efx_nic *efx)for (i =0 ; i < n_channels; i++) xentries[i].entry = i; - rc =pci_enable_msix (efx->pci_dev, xentries, n_channels); -if (rc >0 ) { + rc =pci_enable_msix_range (efx->pci_dev, + xentries,1 , n_channels); +if (rc <0 ) { +/* Fall back to single channel MSI */ + efx->interrupt_mode =EFX_INT_MODE_MSI ; +netif_err (efx, drv, efx->net_dev, +"could not enable MSI-X\n" ); + }else if (rc < n_channels) {netif_err (efx, drv, efx->net_dev,"WARNING: Insufficient MSI-X vectors" " available (%d < %u).\n" , rc, n_channels);netif_err (efx, drv, efx->net_dev,"WARNING: Performance may be reduced.\n" ); -EFX_BUG_ON_PARANOID (rc >= n_channels); n_channels = rc; - rc =pci_enable_msix (efx->pci_dev, xentries, - n_channels); } -if (rc ==0 ) { +if (rc >0 ) { efx->n_channels = n_channels;if (n_channels > extra_channels) n_channels -= extra_channels;
@@ -1375,11 +1378,6 @@ static int efx_probe_interrupts(struct efx_nic *efx)for (i =0 ; i < efx->n_channels; i++)efx_get_channel (efx, i)->irq = xentries[i].vector; - }else { -/* Fall back to single channel MSI */ - efx->interrupt_mode =EFX_INT_MODE_MSI ; -netif_err (efx, drv, efx->net_dev, -"could not enable MSI-X\n" ); } }
Signature · 1 line
1.7.7.6
Re: [PATCH 31/34] efx: Use pci_enable_msix_range()
Quoted 7 lines · Alexander Gordeev
As result of deprecation of MSI-X/MSI enablement functions
pci_enable_msix()andpci_enable_msi_block()all drivers using these two interfaces need to be updated to use the newpci_enable_msi_range()andpci_enable_msix_range()interfaces.Signed-off-by Alexander Gordeev <[email protected]>
Quoted 51 lines
--- drivers/net/ethernet/sfc/efx.c | 20 +++++++++----------- 1 files changed, 9 insertions(+), 11 deletions(-)drivers/net/ethernet/sfc/efx.c +9
-11@@ -1346,20 +1346,23 @@ static int efx_probe_interrupts(struct efx_nic *efx)for (i =0 ; i < n_channels; i++) xentries[i].entry = i; - rc =pci_enable_msix (efx->pci_dev, xentries, n_channels); -if (rc >0 ) { + rc =pci_enable_msix_range (efx->pci_dev, + xentries,1 , n_channels); +if (rc <0 ) { +/* Fall back to single channel MSI */ + efx->interrupt_mode =EFX_INT_MODE_MSI ; +netif_err (efx, drv, efx->net_dev, +"could not enable MSI-X\n" ); + }else if (rc < n_channels) {netif_err (efx, drv, efx->net_dev,"WARNING: Insufficient MSI-X vectors" " available (%d < %u).\n" , rc, n_channels);netif_err (efx, drv, efx->net_dev,"WARNING: Performance may be reduced.\n" ); -EFX_BUG_ON_PARANOID (rc >= n_channels); n_channels = rc; - rc =pci_enable_msix (efx->pci_dev, xentries, - n_channels); } -if (rc ==0 ) { +if (rc >0 ) { efx->n_channels = n_channels;if (n_channels > extra_channels) n_channels -= extra_channels;@@ -1375,11 +1378,6 @@ static int efx_probe_interrupts(struct efx_nic *efx)for (i =0 ; i < efx->n_channels; i++)efx_get_channel (efx, i)->irq = xentries[i].vector; - }else { -/* Fall back to single channel MSI */ - efx->interrupt_mode =EFX_INT_MODE_MSI ; -netif_err (efx, drv, efx->net_dev, -"could not enable MSI-X\n" ); } }
PATCH 32/34 niu: Use pci_enable_msix_range()
In reply to Alexander GordeevAs result of deprecation of MSI-X/MSI enablement functions pci_enable_msix() and pci_enable_msi_block() all drivers using these two interfaces need to be updated to use the new pci_enable_msi_range() and pci_enable_msix_range() interfaces.
--- drivers/net/ethernet/sun/niu.c | 11 +++-------- 1 files changed, 3 insertions(+), 8 deletions(-)
drivers/net/ethernet/sun/niu.c +3 -8
@@ -9041,7 +9041,7 @@ static void niu_try_msix(struct niu *np, u8 *ldg_num_map)struct msix_entry msi_vec[NIU_NUM_LDG ];struct niu_parent *parent = np->parent;struct pci_dev *pdev = np->pdev; -int i, num_irqs, err; +int i, num_irqs;u8 first_ldg; first_ldg = (NIU_NUM_LDG / parent->num_ports) * np->port;
@@ -9053,21 +9053,16 @@ static void niu_try_msix(struct niu *np, u8 *ldg_num_map) (np->port == 0 ? 3 : 1));BUG_ON (num_irqs > (NIU_NUM_LDG / parent->num_ports)); -retry:for (i =0 ; i < num_irqs; i++) { msi_vec[i].vector =0 ; msi_vec[i].entry = i; } - err =pci_enable_msix (pdev, msi_vec, num_irqs); -if (err <0 ) { + num_irqs =pci_enable_msix_range (pdev, msi_vec,1 , num_irqs); +if (num_irqs <0 ) { np->flags &= ~NIU_FLAGS_MSIX ;return ; } -if (err >0 ) { - num_irqs = err; - goto retry; - } np->flags |=NIU_FLAGS_MSIX ;for (i =0 ; i < num_irqs; i++)
Signature · 1 line
1.7.7.6
PATCH 33/34 vmxnet3: Fix MSI-X/MSI enablement code
In reply to Alexander GordeevThis update cleans up the MSI-X/MSI enablement code, fixes vmxnet3_acquire_msix_vectors() invalid return values and enables a dead code in case VMXNET3_LINUX_MIN_MSIX_VECT MSI-X vectors were allocated.
--- drivers/net/vmxnet3/vmxnet3_drv.c | 101 +++++++++++++++++-------------------- 1 files changed, 46 insertions(+), 55 deletions(-)
drivers/net/vmxnet3/vmxnet3_drv.c +46 -55
@@ -2729,47 +2729,44 @@ vmxnet3_read_mac_addr(struct vmxnet3_adapter *adapter, u8 *mac)/* * Enable MSIx vectors. * Returns : -* 0 on successful enabling of required vectors, * VMXNET3_LINUX_MIN_MSIX_VECT when only minimum number of vectors required -* could be enabled. -* number of vectors which can be enabled otherwise (this number is smaller +* were enabled. +* number of vectors which were enabled otherwise (this number is greater * than VMXNET3_LINUX_MIN_MSIX_VECT) */ static int -vmxnet3_acquire_msix_vectors (struct vmxnet3_adapter *adapter, -int vectors) +vmxnet3_acquire_msix_vectors (struct vmxnet3_adapter *adapter,int nvec) { -int err =0 , vector_threshold; - vector_threshold =VMXNET3_LINUX_MIN_MSIX_VECT ; - -while (vectors >= vector_threshold) { - err =pci_enable_msix (adapter->pdev, adapter->intr.msix_entries, - vectors); +do { +int err =pci_enable_msix (adapter->pdev, + adapter->intr.msix_entries, nvec);if (!err) { - adapter->intr.num_intrs = vectors; -return 0 ; +return nvec; }else if (err <0 ) {dev_err (&adapter->netdev->dev, -"Failed to enable MSI-X, error: %d\n" , err); - vectors =0 ; - }else if (err < vector_threshold) { -break ; +"Failed to enable MSI-X, error: %d\n" , err); +return err; + }else if (err <VMXNET3_LINUX_MIN_MSIX_VECT ) { +dev_info (&adapter->pdev->dev, +"Number of MSI-X which can be allocated " +"is lower than min threshold required.\n" ); +return -ENOSPC ; }else {/* If fails to enable required number of MSI-x vectors * try enabling minimum number of vectors required. */ dev_err (&adapter->netdev->dev, -"Failed to enable %d MSI-X, trying %d instead\n" , - vectors, vector_threshold); - vectors = vector_threshold; +"Failed to enable %d MSI-X, trying %d\n" , + nvec,VMXNET3_LINUX_MIN_MSIX_VECT ); + nvec =VMXNET3_LINUX_MIN_MSIX_VECT ; } - } + }while (nvec >=VMXNET3_LINUX_MIN_MSIX_VECT ); -dev_info (&adapter->pdev->dev, -"Number of MSI-X interrupts which can be allocated " -"is lower than min threshold required.\n" ); -return err; +/* +* Should never get here +*/ +return -ENOSPC ; }
@@ -2796,56 +2793,50 @@ vmxnet3_alloc_intr_resources(struct vmxnet3_adapter *adapter)#ifdef CONFIG_PCI_MSI if (adapter->intr.type ==VMXNET3_IT_MSIX ) { -int vector, err =0 ; - - adapter->intr.num_intrs = (adapter->share_intr == -VMXNET3_INTR_TXSHARE ) ?1 : - adapter->num_tx_queues; - adapter->intr.num_intrs += (adapter->share_intr == -VMXNET3_INTR_BUDDYSHARE ) ?0 : - adapter->num_rx_queues; - adapter->intr.num_intrs +=1 ;/* for link event */ - - adapter->intr.num_intrs = (adapter->intr.num_intrs > -VMXNET3_LINUX_MIN_MSIX_VECT - ? adapter->intr.num_intrs : -VMXNET3_LINUX_MIN_MSIX_VECT ); - -for (vector =0 ; vector < adapter->intr.num_intrs; vector++) - adapter->intr.msix_entries[vector].entry = vector; - - err =vmxnet3_acquire_msix_vectors (adapter, - adapter->intr.num_intrs); +int i, nvec; + + nvec = adapter->share_intr ==VMXNET3_INTR_TXSHARE ? +1 : adapter->num_tx_queues; + nvec += adapter->share_intr ==VMXNET3_INTR_BUDDYSHARE ? +0 : adapter->num_rx_queues; + nvec +=1 ;/* for link event */ + nvec = nvec >VMXNET3_LINUX_MIN_MSIX_VECT ? + nvec :VMXNET3_LINUX_MIN_MSIX_VECT ; + +for (i =0 ; i < nvec; i++) + adapter->intr.msix_entries[i].entry = i; + + nvec =vmxnet3_acquire_msix_vectors (adapter, nvec); +if (nvec <0 ) + goto msix_err; +/* If we cannot allocate one MSIx vector per queue * then limit the number of rx queues to 1 */ -if (err ==VMXNET3_LINUX_MIN_MSIX_VECT ) { +if (nvec ==VMXNET3_LINUX_MIN_MSIX_VECT ) {if (adapter->share_intr !=VMXNET3_INTR_BUDDYSHARE || adapter->num_rx_queues !=1 ) { adapter->share_intr =VMXNET3_INTR_TXSHARE ;netdev_err (adapter->netdev,"Number of rx queues : 1\n" ); adapter->num_rx_queues =1 ; - adapter->intr.num_intrs = -VMXNET3_LINUX_MIN_MSIX_VECT ; } -return ; } -if (!err) -return ; + adapter->intr.num_intrs = nvec; +return ; + +msix_err:/* If we cannot allocate MSIx vectors use only one rx queue */ dev_info (&adapter->pdev->dev,"Failed to enable MSI-X, error %d. " -"Limiting #rx queues to 1, try MSI.\n" , err); +"Limiting #rx queues to 1, try MSI.\n" , nvec); adapter->intr.type =VMXNET3_IT_MSI ; }if (adapter->intr.type ==VMXNET3_IT_MSI ) { -int err; - err =pci_enable_msi (adapter->pdev); -if (!err) { +if (!pci_enable_msi (adapter->pdev)) { adapter->num_rx_queues =1 ; adapter->intr.num_intrs =1 ;return ;
Signature · 1 line
1.7.7.6
PATCH 34/34 vmxnet3: Use pci_enable_msix_range()
In reply to Alexander GordeevAs result of deprecation of MSI-X/MSI enablement functions pci_enable_msix() and pci_enable_msi_block() all drivers using these two interfaces need to be updated to use the new pci_enable_msi_range() and pci_enable_msix_range() interfaces.
--- drivers/net/vmxnet3/vmxnet3_drv.c | 47 +++++++++++++++---------------------- 1 files changed, 19 insertions(+), 28 deletions(-)
drivers/net/vmxnet3/vmxnet3_drv.c +19 -28
@@ -2738,35 +2738,26 @@ vmxnet3_read_mac_addr(struct vmxnet3_adapter *adapter, u8 *mac)static int vmxnet3_acquire_msix_vectors (struct vmxnet3_adapter *adapter,int nvec) { -do { -int err =pci_enable_msix (adapter->pdev, - adapter->intr.msix_entries, nvec); -if (!err) { -return nvec; - }else if (err <0 ) { -dev_err (&adapter->netdev->dev, -"Failed to enable MSI-X, error: %d\n" , err); -return err; - }else if (err <VMXNET3_LINUX_MIN_MSIX_VECT ) { -dev_info (&adapter->pdev->dev, -"Number of MSI-X which can be allocated " -"is lower than min threshold required.\n" ); -return -ENOSPC ; - }else { -/* If fails to enable required number of MSI-x vectors -* try enabling minimum number of vectors required. -*/ -dev_err (&adapter->netdev->dev, -"Failed to enable %d MSI-X, trying %d\n" , - nvec,VMXNET3_LINUX_MIN_MSIX_VECT ); - nvec =VMXNET3_LINUX_MIN_MSIX_VECT ; - } - }while (nvec >=VMXNET3_LINUX_MIN_MSIX_VECT ); +int ret =pci_enable_msix_range (adapter->pdev, + adapter->intr.msix_entries, nvec, nvec); -/* -* Should never get here -*/ -return -ENOSPC ; +if (ret == -ENOSPC && nvec >VMXNET3_LINUX_MIN_MSIX_VECT ) { +dev_err (&adapter->netdev->dev, +"Failed to enable %d MSI-X, trying %d\n" , + nvec,VMXNET3_LINUX_MIN_MSIX_VECT ); + + ret =pci_enable_msix_range (adapter->pdev, + adapter->intr.msix_entries, +VMXNET3_LINUX_MIN_MSIX_VECT , +VMXNET3_LINUX_MIN_MSIX_VECT ); + } + +if (ret <0 ) { +dev_err (&adapter->netdev->dev, +"Failed to enable MSI-X, error: %d\n" , ret); + } + +return ret; }
Signature · 1 line
1.7.7.6