From: Benjamin Poirier <bpoirier@suse.de>
To: Prashant Sreedharan <prashant@broadcom.com>
Cc: Michael Chan <mchan@broadcom.com>,
netdev@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v2 3/3] tg3: Fix tx_pending checks for tg3_tso_bug
Date: Tue, 26 Aug 2014 12:25:21 -0700 [thread overview]
Message-ID: <20140826192521.GA4745@f1.synalogic.ca> (raw)
In-Reply-To: <1408749447.8268.53.camel@prashant>
On 2014/08/22 16:17, Prashant Sreedharan wrote:
> Benjamin, thanks for the patch. Broadcom QA will be testing the changes.
> Couple of comments below.
> > segs = skb_gso_segment(skb, tp->dev->features &
> > ~(NETIF_F_TSO | NETIF_F_TSO6));
> > - if (IS_ERR(segs) || !segs)
> > + if (IS_ERR_OR_NULL(segs))
> > goto tg3_tso_bug_end;
> >
> > do {
> > + unsigned int desc_cnt = skb_shinfo(segs)->nr_frags + 1;
> > +
> > nskb = segs;
> > segs = segs->next;
> > nskb->next = NULL;
> > - tg3_start_xmit(nskb, tp->dev);
> > +
> > + if (tg3_tx_avail(tnapi) <= segs_remaining - 1 + desc_cnt &&
> > + skb_linearize(nskb)) {
> > + nskb->next = segs;
> > + segs = nskb;
> > + do {
> > + nskb = segs->next;
> > +
> > + dev_kfree_skb_any(segs);
> > + segs = nskb;
> > + } while (segs);
>
> If skb_linearize() fails need to increment the tp->tx_dropped count
Sorry for the delay, while testing this error path I noticed a potential
problem. There should be an additional check here to stop the queue with
the default threshold. Otherwise, the netdev_err message at the start of
__tg3_start_xmit() could be triggered when the next frame is
transmitted. That is because the previous calls to __tg3_start_xmit() in
tg3_tso_bug() may have been using a stop_thresh=segs_remaining that is <
MAX_SKB_FRAGS + 1.
>
> > + goto tg3_tso_bug_end;
> > + }
> > + segs_remaining--;
> > + if (segs_remaining)
> > + __tg3_start_xmit(nskb, tp->dev, segs_remaining);
>
> To clarify passing segs_remaining will make sure the queue is never
> stopped correct ?
It makes sure the queue is not stopped before we are finished submitting
all gso segments.
This is what's alluded to in this part of the commit message:
This puts us in the exceptional situation that a single skb that
triggers tg3_tso_bug() may require the entire tx ring. [...]
Likewise, usually the tx queue is stopped as soon as an skb with
max frags may overrun it. Since the skbs submitted from
tg3_tso_bug() use a controlled number of descriptors, the tx
queue stop threshold may be lowered.
>
> > + else
> > + tg3_start_xmit(nskb, tp->dev);
> > } while (segs);
> >
>
>
prev parent reply other threads:[~2014-08-26 19:25 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-08-21 21:57 [PATCH v2 1/3] tg3: Limit minimum tx queue wakeup threshold Benjamin Poirier
2014-08-21 21:57 ` [PATCH v2 2/3] tg3: Fix tx_pending check for MAX_SKB_FRAGS Benjamin Poirier
2014-08-21 21:57 ` [PATCH v2 3/3] tg3: Fix tx_pending checks for tg3_tso_bug Benjamin Poirier
2014-08-22 4:31 ` Prashant Sreedharan
2014-08-22 23:17 ` Prashant Sreedharan
2014-08-26 19:25 ` Benjamin Poirier [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20140826192521.GA4745@f1.synalogic.ca \
--to=bpoirier@suse.de \
--cc=linux-kernel@vger.kernel.org \
--cc=mchan@broadcom.com \
--cc=netdev@vger.kernel.org \
--cc=prashant@broadcom.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.