public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Jeff Dike <jdike@addtoit.com>
To: "Paolo 'Blaisorblade' Giarrusso" <blaisorblade@yahoo.it>
Cc: Andrew Morton <akpm@osdl.org>,
	user-mode-linux-devel@lists.sourceforge.net,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH 2/3] uml: fix proc-vs-interrupt context spinlock deadlock
Date: Mon, 7 Aug 2006 18:14:00 -0400	[thread overview]
Message-ID: <20060807221400.GC5890@ccure.user-mode-linux.org> (raw)
In-Reply-To: <20060806154703.536.80128.stgit@memento.home.lan>

On Sun, Aug 06, 2006 at 05:47:03PM +0200, Paolo 'Blaisorblade' Giarrusso wrote:
> From: Paolo 'Blaisorblade' Giarrusso <blaisorblade@yahoo.it>
> 
> This spinlock can be taken on interrupt too, so spin_lock_irq[save] must be used.
> 
> However, Documentation/networking/netdevices.txt explains we are called with
> rtnl_lock() held - so we don't need to care about other concurrent opens.
> Verified also in LDD3 and by direct checking. Also verified that the network
> layer (through a state machine) guarantees us that nobody will close the
> interface while it's being used. Please correct me if I'm wrong.
> 
> Also, we must check we don't sleep with irqs disabled!!! But anyway, this is not
> news - we already can't sleep while holding a spinlock. Who says this is
> guaranted really by the present code?

This patch looks fairly scary.  It's protecting the device private
data, you're removing the locking from some accesses and leaving it
(albeit with irqs off now) on others.  It seems to me that can't be
right.  It's either always there, or always not.

You observe that open and close are protected by rtnl_lock.  I observe
that uml_net_change_mtu and uml_net_set_mac are as well, in dev_ioctl.

The spinlock protecting this has to be _irqsave because the interrupt
routine takes it, to protect against receiving packets on an interface
that's being closed.  If that's impossible, we should prove that, and
remove the locking from uml_net_interrupt.

I can't decide about uml_net_start_xmit - there's some RCU stuff
around one call that leads to it, but I don't see any sign of
rtnl_lock.

So, I'd say there are some changes needed here, but they're not
entirely the ones in this patch.

				Jeff

  reply	other threads:[~2006-08-07 22:14 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-08-06 15:47 [PATCH 1/3] uml: use -mcmodel=kernel for x86_64 Paolo 'Blaisorblade' Giarrusso
2006-08-06 15:47 ` [PATCH 2/3] uml: fix proc-vs-interrupt context spinlock deadlock Paolo 'Blaisorblade' Giarrusso
2006-08-07 22:14   ` Jeff Dike [this message]
2006-08-08 10:59     ` Paolo Giarrusso
2006-08-08 20:02       ` Jeff Dike
2006-08-09 14:44         ` Paolo Giarrusso
2006-08-06 15:47 ` [PATCH 3/3] uml: clean our set_ether_mac Paolo 'Blaisorblade' Giarrusso
2006-08-07 22:17   ` Jeff Dike
2006-08-07 21:18 ` [PATCH 1/3] uml: use -mcmodel=kernel for x86_64 Jeff Dike
2006-08-08 10:46   ` Paolo Giarrusso
2006-08-08 11:22 ` Andi Kleen
2006-08-08 14:03   ` Paolo Giarrusso
2006-08-08 14:14     ` Andi Kleen
2006-08-08 14:47     ` [uml-devel] " Daniel Gryniewicz

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=20060807221400.GC5890@ccure.user-mode-linux.org \
    --to=jdike@addtoit.com \
    --cc=akpm@osdl.org \
    --cc=blaisorblade@yahoo.it \
    --cc=linux-kernel@vger.kernel.org \
    --cc=user-mode-linux-devel@lists.sourceforge.net \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox