All of lore.kernel.org
 help / color / mirror / Atom feed
From: Matt Mackall <mpm@selenic.com>
To: Jeff Moyer <jmoyer@redhat.com>
Cc: linux-kernel@vger.kernel.org
Subject: Re: netconsole hangs w/ alt-sysrq-t
Date: Mon, 28 Jun 2004 10:19:55 -0500	[thread overview]
Message-ID: <20040628151954.GH25826@waste.org> (raw)
In-Reply-To: <16608.12233.39964.940020@segfault.boston.redhat.com>

On Mon, Jun 28, 2004 at 10:48:41AM -0400, Jeff Moyer wrote:
> ==> Regarding Re: netconsole hangs w/ alt-sysrq-t; Matt Mackall <mpm@selenic.com> adds:
> 
> [snip]
> 
> mpm> Huh. I'm not sure if that covers everything.
> 
> mpm> We want to:
> 
> mpm> a) push stuff through netpoll_rx() iff rx is enabled b) drop packets
> mpm> when netpoll_rx() says to c) drop packets when we're trapped for
> mpm> debugging/netdump d) drop packets when we manually call dev->poll e)
> mpm> keep as little overhead as possible
> 
> mpm> The above breaks (a) when we're not trapped (consider breaking in with
> mpm> debugger) and (b) in any case.
> 
> mpm> My current thought is we want to get this down to a single test in the
> mpm> fastpath by replacing netpoll_rx in skb->dev with a flag that is equal
> mpm> to netpoll_trapped() | dev->netpoll_rx, which we manipulate when call
> dev-> poll within netpoll.
> 
> mpm> How's that sound?
> 
> That sounds fine.  So, in the netif_receive_skb function, we'd now have
> something like:
> 
> 	if (skb->dev->netpoll_rx && netpoll_rx(skb)) {
> 		kfree_skb(skb);
> 		return NET_RX_DROP;
> 	}
> 
> I removed the test for skb->dev->poll, since this is the NAPI code path, I
> think it should always be present, right?

No, I think we get to this on the non-NAPI route as well. The ->poll
check keeps us from filtering twice.

> And then at the top of the netpoll_rx routine:
> 
> 	if (!(skb->dev->netpoll_rx & NETPOLL_RX_ENABLED))
> 		goto out;

Let's explicitly return 1.
 
> The routine, as before, returns the value of trapped.  And now,
> netpoll_poll would do this:
> 
> 	if(np->dev->poll && test_bit(__LINK_STATE_RX_SCHED, &np->dev->state)) {
> 		np->dev->netpoll_rx |= NETPOLL_RX_TRAPPED;
> 		if (trapped)
> 			np->dev->poll(np->dev, &budget);
> 		else {
> 			trapped = 1;
> 			np->dev->poll(np->dev, &budget);
> 			trapped = 0;
> 		}
> 		np->dev->netpoll_rx &= ~NETPOLL_RX_TRAPPED;
> 	}
> 
> Is this more in line with what you had in mind? 

Yes. Let's make that NETPOLL_RX_DROP to disambiguate the
trapped/dropped-for-polling. And we can do a simple
increment/decrement on trapped itself - but do we still need it here
now that we've shorted out the NAPI path with RX_DROP?

There might be some new atomicity or memory barrier issues here, be
mindful.

> One thing I would consider changing, here, is having
> netpoll_set_trap take a struct netpoll argument. That way, we could
> have netpoll_set_trap manipulate the NETPOLL_RX_TRAPPED bit. This
> would make the trap specific to each interface, but I think that may
> be desirable.

It doesn't really make sense for trapped to be non-global - it means
the machine is in polling-only mode, eg debugger or the like. It's
rather misusing it to kill the NAPI receive side for netpoll_poll.

-- 
Mathematics is the supreme nostalgia of our time.

  reply	other threads:[~2004-06-28 15:20 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-04-22 15:29 netconsole hangs w/ alt-sysrq-t Jeff Moyer
2004-04-25 19:15 ` Matt Mackall
2004-04-28 12:44   ` Jeff Moyer
2004-04-28 14:03     ` Matt Mackall
2004-04-28 14:07       ` Jeff Moyer
2004-04-28 14:27         ` Matt Mackall
2004-04-28 18:23           ` Jeff Moyer
2004-05-20  2:20             ` klogd, netconsole without /dev/console? Tom Oehser
2004-06-25 15:50             ` netconsole hangs w/ alt-sysrq-t Jeff Moyer
2004-06-25 23:27               ` Matt Mackall
2004-06-28 14:48                 ` Jeff Moyer
2004-06-28 15:19                   ` Matt Mackall [this message]
2004-06-28 16:58                     ` Jeff Moyer
2004-06-29 12:36                       ` Jeff Moyer
2004-07-01 16:52                       ` Matt Mackall
2004-07-01 16:54                         ` Jeff Moyer
2004-07-01 17:05                           ` Matt Mackall
2004-07-01 17:53                             ` Jeff Moyer

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=20040628151954.GH25826@waste.org \
    --to=mpm@selenic.com \
    --cc=jmoyer@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    /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.