From: "Rafael J. Wysocki" <rjw@sisk.pl>
To: Hans de Goede <hdegoede@redhat.com>
Cc: Miklos Szeredi <miklos@szeredi.hu>,
"Greg Kroah-Hartman" <gregkh@linuxfoundation.org>,
Tejun Heo <tj@kernel.org>,
linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org
Subject: Re: [REGRESION] Suspend hangs with 3.6-rc1 on Lenovo T60 notebook
Date: Wed, 15 Aug 2012 21:59:51 +0200 [thread overview]
Message-ID: <201208152159.51385.rjw@sisk.pl> (raw)
In-Reply-To: <502B448D.7050602@redhat.com>
On Wednesday, August 15, 2012, Hans de Goede wrote:
> Hi,
>
> On 08/15/2012 07:13 AM, Miklos Szeredi wrote:
> > Suspend oopses in generic_ide_suspend() because dev_get_drvdata()
> > returns NULL (dev->p->driver_data == NULL) and this function is not
> > prepared for this.
> >
> > I bisected it to 0998d063 (device-core: Ensure drvdata = NULL when no
> > driver is bound). Reverting it fixes suspend.
> >
>
> First of all, thanks for reporting and bisecting this. With that said,
> I must say that this is very weird. The patch in question:
> http://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=commitdiff;h=0998d063
>
> Only makes dev-drvdata NULL in 2 cases:
> 1) The probe method of the driver fails
> 2) The driver has been detached from the device by calling one of:
> device_release_driver() or driver_detach()
>
> Note that in both code paths dev->driver also gets set to NULL, and
> other generic ide driver callbacks very much depend on that not being
> NULL, ie:
>
> static int generic_ide_remove(struct device *dev)
> {
> ide_drive_t *drive = to_ide_device(dev);
> struct ide_driver *drv = to_ide_driver(dev->driver);
>
> if (drv->remove)
> drv->remove(drive);
>
> return 0;
> }
>
> Also how can a drivers suspend callback get called if dev->driver is NULL,
> since that callback would normally be "reached" through dev->driver, so
> something weird is going on here ...
No, it wouldn't, because it is a bus type callback and it is invoked for
all devices whose bus type is ide_bus_type, regardless of whether or not
their driver field is NULL.
It clearly should check if drive is not NULL before using that pointer.
Thanks,
Rafael
next prev parent reply other threads:[~2012-08-15 19:53 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <87a9xwivqb.fsf@tucsk.pomaz.szeredi.hu>
2012-08-15 6:41 ` [REGRESION] Suspend hangs with 3.6-rc1 on Lenovo T60 notebook Hans de Goede
2012-08-15 19:59 ` Rafael J. Wysocki [this message]
2012-08-16 11:34 ` Hans de Goede
2012-08-16 15:13 ` Alan Stern
2012-08-16 16:29 ` Miklos Szeredi
2012-08-16 16:32 ` Alan Stern
2012-08-16 20:02 ` Rafael J. Wysocki
2012-08-17 9:23 ` Hans de Goede
2012-08-17 14:22 ` Alan Stern
2012-08-17 14:27 ` Alan Stern
2012-08-17 15:32 ` Hans de Goede
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=201208152159.51385.rjw@sisk.pl \
--to=rjw@sisk.pl \
--cc=gregkh@linuxfoundation.org \
--cc=hdegoede@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=miklos@szeredi.hu \
--cc=tj@kernel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).