All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andrew Morton <akpm@linux-foundation.org>
To: Jarek Poplawski <jarkao2@gmail.com>
Cc: netdev@vger.kernel.org, Ingo Molnar <mingo@elte.hu>,
	linux-kernel@vger.kernel.org,
	Stephen Hemminger <shemminger@linux-foundation.org>,
	"Rafael J. Wysocki" <rjw@sisk.pl>
Subject: Re: locking api self-test hanging
Date: Tue, 4 Mar 2008 01:10:50 -0800	[thread overview]
Message-ID: <20080304011050.74f30dd3.akpm@linux-foundation.org> (raw)
In-Reply-To: <20080304084024.GA3980@ff.dom.local>

On Tue, 4 Mar 2008 08:40:24 +0000 Jarek Poplawski <jarkao2@gmail.com> wrote:

> On 04-03-2008 06:05, Andrew Morton wrote:
> ...
> >>>> And I've fully bisected this hang twice and both times came up with
> >>>>
> >>>> commit 33f807ba0d9259e7c75c7a2ce8bd2787e5b540c7
> >>>> Author: Stephen Hemminger <shemminger@linux-foundation.org>
> >>>> Date:   Mon Nov 19 19:24:52 2007 -0800
> >>>>
> >>>>     [NETPOLL]: Kill NETPOLL_RX_DROP, set but never tested.
> >>>>
> >>>> which is stupid because that patch doesn't do anything.
> 
> ...or maybe apparently doesn't do anything?
> 
> @@ -128,13 +127,11 @@ static int poll_one_napi(struct netpoll_info *npinfo,
>         if (!test_bit(NAPI_STATE_SCHED, &napi->state))
>                 return budget;
>  
> -       npinfo->rx_flags |= NETPOLL_RX_DROP;
> 
> 
> But in a next patch we can see:
> 
> @@ -51,12 +50,12 @@ static inline int netpoll_rx(struct sk_buff *skb)
>         unsigned long flags;
>         int ret = 0;
>  
> -       if (!npinfo || (!npinfo->rx_np && !npinfo->rx_flags))
> +       if (!npinfo || !npinfo->rx_np)
> 
> So, it seems rx_flags could have been tested here for NETPOLL_RX_DROP
> yet?
> 

Oh damn.  I bisected this three times and the second two times both landed on
this:


commit 33f807ba0d9259e7c75c7a2ce8bd2787e5b540c7
Author: Stephen Hemminger <shemminger@linux-foundation.org>
Date:   Mon Nov 19 19:24:52 2007 -0800

    [NETPOLL]: Kill NETPOLL_RX_DROP, set but never tested.
    
    Signed-off-by: Stephen Hemminger <shemminger@linux-foundation.org>
    Signed-off-by: David S. Miller <davem@davemloft.net>

diff --git a/net/core/netpoll.c b/net/core/netpoll.c
index cf6acd3..9e3aea0 100644
--- a/net/core/netpoll.c
+++ b/net/core/netpoll.c
@@ -40,7 +40,6 @@ static atomic_t trapped;
 
 #define USEC_PER_POLL	50
 #define NETPOLL_RX_ENABLED  1
-#define NETPOLL_RX_DROP     2
 
 #define MAX_SKB_SIZE \
 		(MAX_UDP_CHUNK + sizeof(struct udphdr) + \
@@ -128,13 +127,11 @@ static int poll_one_napi(struct netpoll_info *npinfo,
 	if (!test_bit(NAPI_STATE_SCHED, &napi->state))
 		return budget;
 
-	npinfo->rx_flags |= NETPOLL_RX_DROP;
 	atomic_inc(&trapped);
 
 	work = napi->poll(napi, budget);
 
 	atomic_dec(&trapped);
-	npinfo->rx_flags &= ~NETPOLL_RX_DROP;
 
 	return budget - work;
 }
@@ -475,7 +472,7 @@ int __netpoll_rx(struct sk_buff *skb)
 	if (skb->dev->type != ARPHRD_ETHER)
 		goto out;
 
-	/* check if netpoll clients need ARP */
+	/* if receive ARP during middle of NAPI poll, then queue */
 	if (skb->protocol == htons(ETH_P_ARP) &&
 	    atomic_read(&trapped)) {
 		skb_queue_tail(&npi->arp_tx, skb);
@@ -537,6 +534,9 @@ int __netpoll_rx(struct sk_buff *skb)
 	return 1;
 
 out:
+	/* If packet received while already in poll then just
+	 * silently drop.
+	 */
 	if (atomic_read(&trapped)) {
 		kfree_skb(skb);
 		return 1;

and I stupidly assumed that it couldn't be this commit because it was a
no-op.  I didn't think to look for an _impicit_ test of NETPOLL_RX_DROP
such as the one above.  That's pretty poor style IMO :(


That bisecting took me several hours and at the time I hoped that it would
receive a more-than-zero response.  btw.


  reply	other threads:[~2008-03-04  9:11 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-02-03 23:02 locking api self-test hanging Andrew Morton
2008-02-03 23:07 ` Andrew Morton
2008-02-04 12:43   ` Andrew Morton
2008-02-04 13:04     ` Andrew Morton
2008-02-04 13:14       ` Peter Zijlstra
2008-02-05 13:23       ` Bernhard Walle
2008-02-04 13:18     ` Andrew Morton
2008-02-06  8:34     ` Andrew Morton
2008-02-06  9:16       ` Andrew Morton
2008-03-04  5:05         ` Andrew Morton
2008-03-04  8:06           ` [patch] mark netconsole broken Ingo Molnar
2008-03-04 16:19             ` Randy Dunlap
2008-03-04 20:30             ` David Miller
2008-03-04 20:52               ` Ingo Molnar
2008-03-04  8:40           ` locking api self-test hanging Jarek Poplawski
2008-03-04  9:10             ` Andrew Morton [this message]
2008-03-04 15:51               ` Stephen Hemminger
2008-03-04 20:30                 ` David Miller
2008-03-05  8:23                   ` Andrew Morton
2008-03-05  8:27                     ` David Miller
2008-03-04 19:04           ` Marcin Slusarz

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=20080304011050.74f30dd3.akpm@linux-foundation.org \
    --to=akpm@linux-foundation.org \
    --cc=jarkao2@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    --cc=netdev@vger.kernel.org \
    --cc=rjw@sisk.pl \
    --cc=shemminger@linux-foundation.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.