[SRU X] [PATCH 1/1] UBUNTU: SAUCE: bnxt_en_bpo: Fix TX timeout during netpoll
Stefan Bader
stefan.bader at canonical.com
Fri Mar 1 08:48:41 UTC 2019
On 01.03.19 09:06, Juerg Haefliger wrote:
> On Thu, 28 Feb 2019 20:33:06 -0500
> Khaled Elmously <khalid.elmously at canonical.com> wrote:
>
>> Nivedita, I'm having trouble working with this patch from my inbox.
>> Could you please use git-send-email instead of Thunderbird to re-send it? (or just send a pull-request)
>
> Same here, something's funny about this email:
>
> Applying: UBUNTU: SAUCE: bnxt_en_bpo: Fix TX timeout during netpoll
> error: corrupt patch at line 6
>
> How did you generate these emails? Also, the patch mails are usually
> in-reply to the cover letter (patch 0/x) so that it's all contained within a
> thread.
Were told (maybe you were not close by at that point) that git send-email was
not set up on laptop. So used ...<something else> and not only messed up the
patch but also had the cover totally separated from the actual patch.
We might have better chances re-constructing this by taking the upstream patch
and modify the file paths. Given where we are in time...
-Stefan
>
> More comments below.
>
>
>> Thanks
>>
>> On 2019-02-22 11:20:29 , Nivedita Singhvi wrote:
>>> From: Michael Chan <michael.chan at broadcom.com>
>>>
>>> BugLink: http://bugs.launchpad.net/bugs/1814095
>>>
>>> The current netpoll implementation in the bnxt_en driver has problems
>>> that may miss TX completion events. bnxt_poll_work() in effect is
>>> only handling at most 1 TX packet before exiting. In addition, there
>>> may be in flight TX completions that ->poll() may miss even after we
>>> fix bnxt_poll_work() to handle all visible TX completions. netpoll
>>> may not call ->poll() again and HW may not generate IRQ because the
>>> driver does not ARM the IRQ when the budget (0 for netpoll) is reached.
>>> We fix it by handling all TX completions and to always ARM the IRQ
>>> when we exit ->poll() with 0 budget. Also, the logic to ACK the
>>> completion ring in case it is almost filled with TX completions need
>>> to be adjusted to take care of the 0 budget case, as discussed with
>>> Eric Dumazet <edumazet at google.com>
>>>
>>> Reported-by: Song Liu <songliubraving at fb.com>
>>> Reviewed-by: Song Liu <songliubraving at fb.com>
>>> Tested-by: Song Liu <songliubraving at fb.com>
>>> Signed-off-by: Michael Chan <michael.chan at broadcom.com>
>>> Signed-off-by: David S. Miller <davem at davemloft.net>
>>> (backported from commit 73f21c653f930f438d53eed29b5e4c65c8a0f906
>>> upstream)
>
> No newline please. That just makes parsing harder. And there is no need for
> 'upstream' if the commit is from Linus' tree. We only add a reference here if
> the commit comes from a different tree, like linux-next or linux-stable.
> And (not strictly mandatory) a quick note why this needed backporting and
> doesn't cherry-pick cleanly would help. In the form of:
> [<your nick>: <your comment>]
>
> So something like:
> (backported from commit 73f21c653f930f438d53eed29b5e4c65c8a0f906)
> [niv: Patch is for ubuntu/bnxt driver, adjusted file paths accordingly.]
> Signed-off-by: Nivedita Singhvi <nivedita.singhvi at canonical.com>
>
> Thanks
> ...Juerg
>
>
>>> Signed-off-by: Nivedita Singhvi <nivedita.singhvi at canonical.com>
>>>
>>>
>>> diff --git a/ubuntu/bnxt/bnxt.c b/ubuntu/bnxt/bnxt.c
>>> index f04db69..9b51120 100644
>>> --- a/ubuntu/bnxt/bnxt.c
>>> +++ b/ubuntu/bnxt/bnxt.c
>>> @@ -2006,8 +2006,11 @@ static int bnxt_poll_work(struct bnxt *bp, struct
>>> bnxt_napi *bnapi, int budget)
>>> if (TX_CMP_TYPE(txcmp) == CMP_TYPE_TX_L2_CMP) {
>>> tx_pkts++;
>>> /* return full budget so NAPI will complete. */
>>> - if (unlikely(tx_pkts > bp->tx_wake_thresh))
>>> + if (unlikely(tx_pkts > bp->tx_wake_thresh)) {
>>> rx_pkts = budget;
>>> + raw_cons = NEXT_RAW_CMP(raw_cons);
>>> + break;
>>> + }
>>> } else if ((TX_CMP_TYPE(txcmp) & 0x30) == 0x10) {
>>> if (likely(budget))
>>> rc = bnxt_rx_pkt(bp, bnapi, &raw_cons, &event);
>>> @@ -2028,7 +2031,7 @@ static int bnxt_poll_work(struct bnxt *bp, struct
>>> bnxt_napi *bnapi, int budget)
>>> }
>>> raw_cons = NEXT_RAW_CMP(raw_cons);
>>>
>>> - if (rx_pkts == budget)
>>> + if (rx_pkts && rx_pkts == budget)
>>> break;
>>> }
>>>
>>> @@ -2156,8 +2159,12 @@ static int bnxt_poll(struct napi_struct *napi, int budget)
>>> while (1) {
>>> work_done += bnxt_poll_work(bp, bnapi, budget - work_done);
>>>
>>> - if (work_done >= budget)
>>> + if (work_done >= budget) {
>>> + if (!budget)
>>> + BNXT_CP_DB_REARM(cpr->cp_doorbell,
>>> + cpr->cp_raw_cons);
>>> break;
>>> + }
>>>
>>> if (!bnxt_has_work(bp, cpr)) {
>>> #ifdef HAVE_NEW_NAPI_COMPLETE_DONE
>>>
>>> --
>>> kernel-team mailing list
>>> kernel-team at lists.ubuntu.com
>>> https://lists.ubuntu.com/mailman/listinfo/kernel-team
>>
>
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: OpenPGP digital signature
URL: <https://lists.ubuntu.com/archives/kernel-team/attachments/20190301/afd316ce/attachment.sig>
More information about the kernel-team
mailing list