Re: [PATCH RFC] net/sched: use real_num_tx_queues in dev_watchdog()

From: Eric Dumazet
Date: Tue Mar 21 2023 - 07:09:36 EST


On Tue, Mar 21, 2023 at 3:05 AM Praveen Kannoju
<praveen.kannoju@xxxxxxxxxx> wrote:
>
> Ping.
>

I do not think dev_watchdog() needs to be efficient ?

In any case, reading dev->real_num_tx_queues from a timer handler
could be racy vs RTNL.

While reading dev->num_tx_queues is not racy.

I think you should describe what problem you are trying to solve.

> > -----Original Message-----
> > From: Praveen Kumar Kannoju <praveen.kannoju@xxxxxxxxxx>
> > Sent: 16 March 2023 12:04 AM
> > To: jhs@xxxxxxxxxxxx; xiyou.wangcong@xxxxxxxxx; jiri@xxxxxxxxxxx; davem@xxxxxxxxxxxxx; edumazet@xxxxxxxxxx;
> > kuba@xxxxxxxxxx; pabeni@xxxxxxxxxx; netdev@xxxxxxxxxxxxxxx; linux-kernel@xxxxxxxxxxxxxxx
> > Cc: Rajesh Sivaramasubramaniom <rajesh.sivaramasubramaniom@xxxxxxxxxx>; Rama Nichanamatlu
> > <rama.nichanamatlu@xxxxxxxxxx>; Manjunath Patil <manjunath.b.patil@xxxxxxxxxx>; Praveen Kannoju
> > <praveen.kannoju@xxxxxxxxxx>
> > Subject: [PATCH RFC] net/sched: use real_num_tx_queues in dev_watchdog()
> >
> > Currently dev_watchdog() loops through num_tx_queues[Number of TX queues allocated at alloc_netdev_mq() time] instead of
> > real_num_tx_queues [Number of TX queues currently active in device] to detect transmit queue time out. Make this efficient by
> > using real_num_tx_queues.
> >
> > Signed-off-by: Praveen Kumar Kannoju <praveen.kannoju@xxxxxxxxxx>
> > ---
> > PS: Please let me know if I am missing something obvious here.
> > net/sched/sch_generic.c | 2 +-
> > 1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/net/sched/sch_generic.c b/net/sched/sch_generic.c index a9aadc4e6858..e7d41a25f0e8 100644
> > --- a/net/sched/sch_generic.c
> > +++ b/net/sched/sch_generic.c
> > @@ -506,7 +506,7 @@ static void dev_watchdog(struct timer_list *t)
> > unsigned int i;
> > unsigned long trans_start;
> >
> > - for (i = 0; i < dev->num_tx_queues; i++) {
> > + for (i = 0; i < dev->real_num_tx_queues; i++) {
> > struct netdev_queue *txq;
> >
> > txq = netdev_get_tx_queue(dev, i);
> > --
> > 2.31.1
>