From patchwork Thu Sep 23 11:50:54 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Karl Hiramoto X-Patchwork-Id: 65529 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 0508CB70E2 for ; Thu, 23 Sep 2010 21:51:49 +1000 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754838Ab0IWLvi (ORCPT ); Thu, 23 Sep 2010 07:51:38 -0400 Received: from hapkido.dreamhost.com ([66.33.216.122]:41706 "EHLO hapkido.dreamhost.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754667Ab0IWLvi (ORCPT ); Thu, 23 Sep 2010 07:51:38 -0400 Received: from homiemail-a28.g.dreamhost.com (caiajhbdccac.dreamhost.com [208.97.132.202]) by hapkido.dreamhost.com (Postfix) with ESMTP id C69D917AA73 for ; Thu, 23 Sep 2010 04:51:37 -0700 (PDT) Received: from homiemail-a28.g.dreamhost.com (localhost [127.0.0.1]) by homiemail-a28.g.dreamhost.com (Postfix) with ESMTP id 28A2F1B406F; Thu, 23 Sep 2010 04:50:58 -0700 (PDT) DomainKey-Signature: a=rsa-sha1; c=nofws; d=hiramoto.org; h=from:to:cc :subject:date:message-id:in-reply-to:references; q=dns; s= hiramoto.org; b=H2PslCnkIh3XP7DVySPEHEKR9ATFfaEMR6+6rX//nf5iaOz+ FSFOLHdIEOXwofzu1QbujuqJlxUMzjBBeT4fwVgt+3NwjOJ3gm+Lo91n3q0giYeN 2pYlrEB6b36ijptvRtxlUZqMZeADLLdUT3/Kqd8lLRH2gkE2XzuMBIecKec= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=hiramoto.org; h=from:to:cc :subject:date:message-id:in-reply-to:references; s=hiramoto.org; bh=SwJgZxqk0+yDUi4vwnVSsBt0KCY=; b=za2MySnnNe3DqCEfaDlawBvxoZZY XUXfsz/Nze/pzZeJu0ArQxpEWEBVj11BEezDsUNXU7HTw8CgWo68xgA1TK8n9KS7 oFBNc03dJyvPDU/BmSHY6g4xmZdIUI6p8n91XI/yXjqTizePJ6VVxW26LlJjIsje ImUpxwVni/Busus= Received: from localhost.localdomain (unknown [83.40.11.62]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) (Authenticated sender: karl@hiramoto.org) by homiemail-a28.g.dreamhost.com (Postfix) with ESMTPSA id 551EF1B406B; Thu, 23 Sep 2010 04:50:56 -0700 (PDT) From: Karl Hiramoto To: netdev@vger.kernel.org, mmvinni@yahoo.com Cc: davem@davemloft.net, chas@cmf.nrl.navy.mil, Karl Hiramoto Subject: [PATCH] br2684: fix scheduling while atomic Date: Thu, 23 Sep 2010 13:50:54 +0200 Message-Id: <1285242654-9891-1-git-send-email-karl@hiramoto.org> X-Mailer: git-send-email 1.7.2.2 In-Reply-To: <20100922144329.0cb3cf86@thirdoffive.cmf.nrl.navy.mil> References: <20100922144329.0cb3cf86@thirdoffive.cmf.nrl.navy.mil> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org You can't call atomic_notifier_chain_unregister() while in atomic context. Fix, call un/register_atmdevice_notifier in module __init and __exit. Bug report: http://comments.gmane.org/gmane.linux.network/172603 Signed-off-by: Karl Hiramoto --- net/atm/br2684.c | 12 ++---------- 1 files changed, 2 insertions(+), 10 deletions(-) diff --git a/net/atm/br2684.c b/net/atm/br2684.c index 651babd..ad2b232 100644 --- a/net/atm/br2684.c +++ b/net/atm/br2684.c @@ -399,12 +399,6 @@ static void br2684_push(struct atm_vcc *atmvcc, struct sk_buff *skb) unregister_netdev(net_dev); free_netdev(net_dev); } - read_lock_irq(&devs_lock); - if (list_empty(&br2684_devs)) { - /* last br2684 device */ - unregister_atmdevice_notifier(&atm_dev_notifier); - } - read_unlock_irq(&devs_lock); return; } @@ -675,7 +669,6 @@ static int br2684_create(void __user *arg) if (list_empty(&br2684_devs)) { /* 1st br2684 device */ - register_atmdevice_notifier(&atm_dev_notifier); brdev->number = 1; } else brdev->number = BRPRIV(list_entry_brdev(br2684_devs.prev))->number + 1; @@ -815,6 +808,7 @@ static int __init br2684_init(void) return -ENOMEM; #endif register_atm_ioctl(&br2684_ioctl_ops); + register_atmdevice_notifier(&atm_dev_notifier); return 0; } @@ -830,9 +824,7 @@ static void __exit br2684_exit(void) #endif - /* if not already empty */ - if (!list_empty(&br2684_devs)) - unregister_atmdevice_notifier(&atm_dev_notifier); + unregister_atmdevice_notifier(&atm_dev_notifier); while (!list_empty(&br2684_devs)) { net_dev = list_entry_brdev(br2684_devs.next);