Message ID | 20240731131542.3359733-5-dw@davidwei.uk (mailing list archive) |
---|---|
State | Superseded |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | fix bnxt_en queue reset when queue is active | expand |
On Wed, Jul 31, 2024 at 6:15 AM David Wei <dw@davidwei.uk> wrote: > > The queue API calls bnxt_hwrm_vnic_update() to stop/start the flow of > packets. It can only be called if BNXT_SUPPORTS_NTUPLE_VNIC(), so key > support for it by only setting queue_mgmt_ops if this is true. > > Signed-off-by: David Wei <dw@davidwei.uk> > --- > drivers/net/ethernet/broadcom/bnxt/bnxt.c | 5 +++-- > 1 file changed, 3 insertions(+), 2 deletions(-) > > diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c > index ce60c9322fe6..2801ae94d87b 100644 > --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c > +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c > @@ -15713,7 +15713,6 @@ static int bnxt_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) > dev->stat_ops = &bnxt_stat_ops; > dev->watchdog_timeo = BNXT_TX_TIMEOUT; > dev->ethtool_ops = &bnxt_ethtool_ops; > - dev->queue_mgmt_ops = &bnxt_queue_mgmt_ops; > pci_set_drvdata(pdev, dev); > > rc = bnxt_alloc_hwrm_resources(bp); > @@ -15892,8 +15891,10 @@ static int bnxt_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) > > INIT_LIST_HEAD(&bp->usr_fltr_list); > > - if (BNXT_SUPPORTS_NTUPLE_VNIC(bp)) > + if (BNXT_SUPPORTS_NTUPLE_VNIC(bp)) { Thanks for the patch. We found out during internal testing that an additional FW fix is required to make the ring restart 100% reliable with traffic. FW needs to add one more step to flush the RX pipeline during HWRM_VNIC_UPDATE. Once we determine which FW versions will have the fix, we can add the conditional check here to make this patch more complete. I think we just need about a week to determine that. Please hold off on this patchset. Thanks.
On 2024-08-01 02:33, Michael Chan wrote: > On Wed, Jul 31, 2024 at 6:15 AM David Wei <dw@davidwei.uk> wrote: >> >> The queue API calls bnxt_hwrm_vnic_update() to stop/start the flow of >> packets. It can only be called if BNXT_SUPPORTS_NTUPLE_VNIC(), so key >> support for it by only setting queue_mgmt_ops if this is true. >> >> Signed-off-by: David Wei <dw@davidwei.uk> >> --- >> drivers/net/ethernet/broadcom/bnxt/bnxt.c | 5 +++-- >> 1 file changed, 3 insertions(+), 2 deletions(-) >> >> diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c >> index ce60c9322fe6..2801ae94d87b 100644 >> --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c >> +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c >> @@ -15713,7 +15713,6 @@ static int bnxt_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) >> dev->stat_ops = &bnxt_stat_ops; >> dev->watchdog_timeo = BNXT_TX_TIMEOUT; >> dev->ethtool_ops = &bnxt_ethtool_ops; >> - dev->queue_mgmt_ops = &bnxt_queue_mgmt_ops; >> pci_set_drvdata(pdev, dev); >> >> rc = bnxt_alloc_hwrm_resources(bp); >> @@ -15892,8 +15891,10 @@ static int bnxt_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) >> >> INIT_LIST_HEAD(&bp->usr_fltr_list); >> >> - if (BNXT_SUPPORTS_NTUPLE_VNIC(bp)) >> + if (BNXT_SUPPORTS_NTUPLE_VNIC(bp)) { > > Thanks for the patch. We found out during internal testing that an > additional FW fix is required to make the ring restart 100% reliable > with traffic. FW needs to add one more step to flush the RX pipeline > during HWRM_VNIC_UPDATE. Once we determine which FW versions will > have the fix, we can add the conditional check here to make this patch > more complete. I think we just need about a week to determine that. > Please hold off on this patchset. Thanks. Got it, no problem. Let me know the FW version and I'll gate the ops behind it. Thanks.
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c index ce60c9322fe6..2801ae94d87b 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c @@ -15713,7 +15713,6 @@ static int bnxt_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) dev->stat_ops = &bnxt_stat_ops; dev->watchdog_timeo = BNXT_TX_TIMEOUT; dev->ethtool_ops = &bnxt_ethtool_ops; - dev->queue_mgmt_ops = &bnxt_queue_mgmt_ops; pci_set_drvdata(pdev, dev); rc = bnxt_alloc_hwrm_resources(bp); @@ -15892,8 +15891,10 @@ static int bnxt_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) INIT_LIST_HEAD(&bp->usr_fltr_list); - if (BNXT_SUPPORTS_NTUPLE_VNIC(bp)) + if (BNXT_SUPPORTS_NTUPLE_VNIC(bp)) { bp->rss_cap |= BNXT_RSS_CAP_MULTI_RSS_CTX; + dev->queue_mgmt_ops = &bnxt_queue_mgmt_ops; + } rc = register_netdev(dev); if (rc)
The queue API calls bnxt_hwrm_vnic_update() to stop/start the flow of packets. It can only be called if BNXT_SUPPORTS_NTUPLE_VNIC(), so key support for it by only setting queue_mgmt_ops if this is true. Signed-off-by: David Wei <dw@davidwei.uk> --- drivers/net/ethernet/broadcom/bnxt/bnxt.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)