From patchwork Wed Sep 15 06:46:55 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Herbert Xu X-Patchwork-Id: 64792 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 097E3B6F0D for ; Wed, 15 Sep 2010 16:47:22 +1000 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751555Ab0IOGrI (ORCPT ); Wed, 15 Sep 2010 02:47:08 -0400 Received: from helcar.apana.org.au ([209.40.204.226]:33405 "EHLO fornost.hengli.com.au" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751153Ab0IOGrH (ORCPT ); Wed, 15 Sep 2010 02:47:07 -0400 Received: from gondolin.me.apana.org.au ([192.168.0.6]) by fornost.hengli.com.au with esmtp (Exim 4.69 #1 (Debian)) id 1Ovllh-0000Z8-SM; Wed, 15 Sep 2010 16:46:57 +1000 Received: from herbert by gondolin.me.apana.org.au with local (Exim 4.69) (envelope-from ) id 1Ovllf-0005Tc-D2; Wed, 15 Sep 2010 14:46:55 +0800 Date: Wed, 15 Sep 2010 14:46:55 +0800 From: Herbert Xu To: David Miller Cc: akpm@linux-foundation.org, hramrach@centrum.cz, netdev@vger.kernel.org, bugzilla-daemon@bugzilla.kernel.org, bugme-daemon@bugzilla.kernel.org Subject: Re: [Bugme-new] [Bug 18492] New: kernel softirq warning on boot Message-ID: <20100915064655.GA21021@gondor.apana.org.au> References: <20100914120738.6a658f69.akpm@linux-foundation.org> <20100914135730.8af6bc76.akpm@linux-foundation.org> <20100914.141103.123996613.davem@davemloft.net> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20100914.141103.123996613.davem@davemloft.net> User-Agent: Mutt/1.5.18 (2008-05-17) Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org On Tue, Sep 14, 2010 at 02:11:03PM -0700, David Miller wrote: > > I'll take a closer look at this if Herbert doesn't beat me to it. I thought we were going to use this patch until Paul's BH warning removal made it into mainline? netpoll: Disable IRQ around RCU dereference in netpoll_rx We cannot use rcu_dereference_bh safely in netpoll_rx as we may be called with IRQs disabled. We could however simply disable IRQs as that too causes BH to be disabled and is safe in either case. Thanks to John Linville for discovering this bug and providing a patch. Signed-off-by: Herbert Xu Thanks, diff --git a/include/linux/netpoll.h b/include/linux/netpoll.h index 413742c..54f286b 100644 --- a/include/linux/netpoll.h +++ b/include/linux/netpoll.h @@ -63,20 +63,20 @@ static inline bool netpoll_rx(struct sk_buff *skb) unsigned long flags; bool ret = false; - rcu_read_lock_bh(); + local_irq_save(flags); npinfo = rcu_dereference_bh(skb->dev->npinfo); if (!npinfo || (list_empty(&npinfo->rx_np) && !npinfo->rx_flags)) goto out; - spin_lock_irqsave(&npinfo->rx_lock, flags); + spin_lock(&npinfo->rx_lock); /* check rx_flags again with the lock held */ if (npinfo->rx_flags && __netpoll_rx(skb)) ret = true; - spin_unlock_irqrestore(&npinfo->rx_lock, flags); + spin_unlock(&npinfo->rx_lock); out: - rcu_read_unlock_bh(); + local_irq_restore(flags); return ret; }