public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Greg KH <gregkh@suse.de>
To: Stefan Richter <stefanr@s5r6.in-berlin.de>
Cc: Kay Sievers <kay.sievers@vrfy.org>,
	linux-kernel@vger.kernel.org, Jay Fenlason <fenlason@redhat.com>
Subject: Re: post 2.6.28 regression: device_initialize() now sleeps, and may fail without recovery strategy
Date: Fri, 9 Jan 2009 13:30:30 -0800	[thread overview]
Message-ID: <20090109213030.GA20553@suse.de> (raw)
In-Reply-To: <4967BE13.6070003@s5r6.in-berlin.de>

On Fri, Jan 09, 2009 at 10:13:55PM +0100, Stefan Richter wrote:
> Greg KH wrote:
> > On Fri, Jan 09, 2009 at 07:35:42PM +0100, Stefan Richter wrote:
> >> We can fix the bug by changing firewire-core, but
> >>   a) it'd be more than a one-liner,
> >>   b) who knows which other subsystems are affected.
> > 
> > I agree.
> > 
> > I originally looked at changing this to be at device_add time, but I
> > think there are some code paths that do device_initialize and then do
> > some operations on the device before calling device_add.
> 
> get_device() and put_device() seem to be about the only things that are
> interesting before device_add().
> 
> Don't know if a final put_device() in this situation

Hm, that could be pretty simple to handle.  I'd really like to force the
kobject itself to be dynamic, and inside the private portion of the
device structure.  If I do that, then get_ and put_ would need to
allocate the object if it wasn't present.  But that would mean that
get_device could sleep, which isn't the case today (put_device() can
always sleep, that's not an issue.)

> > But I could be
> > wrong, let me do some testing first before forcing you to make that big
> > change to the firewire core.
> 
> It isn't actually that big.  And the added complication could hopefully
> be covered by comments about the caveats.
> 
> Actually, maybe it would be better for the firewire stack to move the
> concerned stuff into a non-atomic context.  There are other things we do
> in there and atomic context isn't very comfortable for all this.  But
> that would be a much bigger change.

Well, I'd always recommend doing things in non-atomic context wherever
possible, so I'll not object that hard to your patch either way :)

> >> Next, the above code is bogus.  In 2.6.28, device_initialize() could
> >> never fail and was thus safe to use as a void-valued function.
> >>
> >> How does driver core handle dev->p == NULL in subsequent usages of dev now?
> > 
> > It dies a flaming horrible death, pretty much like the whole rest of the
> > system if allocating such a small ammount of memory is causing failures
> > :)
> 
> Well, at least code which allocates struct device can check for failure
> and handle it, while the allocator of dev->p can't even check.  Unless
> you change device_initialize() to return error status and add error
> handling all over the place...

yeah, that would be a much bigger task than I'm really pondering,
although it probably is the correct thing to do...

thanks,

greg k-h

  parent reply	other threads:[~2009-01-09 21:31 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-01-09 18:35 post 2.6.28 regression: device_initialize() now sleeps, and may fail without recovery strategy Stefan Richter
2009-01-09 19:49 ` [PATCH post 2.6.28] firewire: core: fix sleep in atomic context due to driver core change Stefan Richter
2009-01-09 21:17   ` Alan Cox
2009-01-09 21:54     ` Greg KH
2009-01-09 22:28       ` [git pull] FireWire fix Stefan Richter
2009-01-09 20:56 ` post 2.6.28 regression: device_initialize() now sleeps, and may fail without recovery strategy Greg KH
2009-01-09 21:13   ` Stefan Richter
2009-01-09 21:20     ` Stefan Richter
2009-01-09 21:34       ` Greg KH
2009-01-09 21:30     ` Greg KH [this message]
2009-01-09 21:40       ` Stefan Richter
2009-01-09 21:24   ` Alan Cox

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=20090109213030.GA20553@suse.de \
    --to=gregkh@suse.de \
    --cc=fenlason@redhat.com \
    --cc=kay.sievers@vrfy.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=stefanr@s5r6.in-berlin.de \
    /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