linux-mmc.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Kevin Hilman <khilman@ti.com>
To: "S, Venkatraman" <svenkatr@ti.com>
Cc: Chris Ball <cjb@laptop.org>,
	linux-omap@vger.kernel.org, Balaji T K <balajitk@ti.com>,
	Rajendra Nayak <rnayak@ti.com>,
	Adrian Hunter <adrian.hunter@intel.com>,
	"open list:MULTIMEDIA CARD (...),
	linux-kernel@vger.kernel.org (open list)"
	<linux-mmc@vger.kernel.org>
Subject: Re: [PATCH] mmc: omap_hsmmc: fix runtime suspend crash: add host checks in callbacks
Date: Tue, 10 Jul 2012 07:17:11 -0700	[thread overview]
Message-ID: <871ukjvgyg.fsf@ti.com> (raw)
In-Reply-To: <CANfBPZ-ucJkgJLt4eXRvfGTCJnWTxHUuL9Cnp9GoaQq7keHGqg@mail.gmail.com> (Venkatraman S.'s message of "Tue, 10 Jul 2012 09:55:47 +0530")

"S, Venkatraman" <svenkatr@ti.com> writes:

> On Sat, Jul 7, 2012 at 5:56 AM, Kevin Hilman <khilman@ti.com> wrote:
>> Due to the way the driver core takes runtime PM references during
>> probe, a driver's runtime PM callbacks may not be called until probe
>> returns.  During probe, drvdata is set to the 'host' pointer but if
>> probe fails, drvdata is set to NULL.
>>
>> The runtime PM callbacks currently blindly dereference this host
>> pointer, but if probe fails, and the runtime PM callbacks are called
>> after probe returns, a NULL pointer dereference will result.
>>
> Pardon my ignorance, but why would runtime suspend be called for a
> device whose probe has failed ? AFAIK, MMC stack wouldn't make the
> _enable()/disable() calls, which call runtime PM APIs, unless the
> probe is successful.  Is there a stacktrace for the offending caller ?

First thing to note: there are several error conditions *after*
pm_runtime_enable() and the first _get_sync() are called.

So here's what can happen:

The driver core does a _get_noresume() before calling the driver's
probe, so the runtime PM usecount is already 1 when the driver is
called.  The _get_sync() in _probe enables the device and increases the
usecount to 2.  The _put_sync() at the end of ->probe() will decrease
the usecount to 1, but since the usecount is still non-zero, the
driver's callbacks are still not called.  It's not until the driver core
does its _put_sync (to balance the _get_noresume() that the usecount
goes to zero and the driver's callbacks are called.

When probe succeeds, this all works fine.  However, if probe fails the
host pointer is set to NULL, but the runtime PM callbacks are still
called and attempt to dereference a NULL pointer.

>> Fix this by simply checking to be sure the host pointer is non-NULL.
>>
>> Signed-off-by: Kevin Hilman <khilman@ti.com>
>> ---
>> Applies to v3.5-rc5.  Fix is needed for v3.5-rc.
>>
> Can you please let me know which commit introduced this problem
> in the first place ? There were not many changes in MMC PM code
> in this merge window.

I guess this problem is probably not a regression and has been around
for some time.  It has not been seen because probe has not failed.

In using recent l-o master though, with Russell's dmaengine changes
merged, probe is failing for me becasue it can't allocate a DMA channel,
and then I'm seeing this problem.

Kevin

  reply	other threads:[~2012-07-10 14:17 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <1341620786-13598-1-git-send-email-khilman@ti.com>
2012-07-10  4:25 ` [PATCH] mmc: omap_hsmmc: fix runtime suspend crash: add host checks in callbacks S, Venkatraman
2012-07-10 14:17   ` Kevin Hilman [this message]
2012-07-10 14:47     ` S, Venkatraman
2012-07-10 22:57       ` Kevin Hilman

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=871ukjvgyg.fsf@ti.com \
    --to=khilman@ti.com \
    --cc=adrian.hunter@intel.com \
    --cc=balajitk@ti.com \
    --cc=cjb@laptop.org \
    --cc=linux-mmc@vger.kernel.org \
    --cc=linux-omap@vger.kernel.org \
    --cc=rnayak@ti.com \
    --cc=svenkatr@ti.com \
    /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).