From: Russell King - ARM Linux <linux@arm.linux.org.uk>
To: "Philip, Avinash" <avinashphilip@ti.com>
Cc: "Hilman, Kevin" <khilman@ti.com>,
"Mohammed, Afzal" <afzal@ti.com>,
"tony@atomide.com" <tony@atomide.com>,
"artem.bityutskiy@linux.intel.com"
<artem.bityutskiy@linux.intel.com>,
"Nori, Sekhar" <nsekhar@ti.com>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"Hiremath, Vaibhav" <hvaibhav@ti.com>,
"Hebbar, Gururaja" <gururaja.hebbar@ti.com>,
"linux-mtd@lists.infradead.org" <linux-mtd@lists.infradead.org>,
"linux-omap@vger.kernel.org" <linux-omap@vger.kernel.org>,
"dwmw2@infradead.org" <dwmw2@infradead.org>,
"linux-arm-kernel@lists.infradead.org"
<linux-arm-kernel@lists.infradead.org>
Subject: Re: [PATCH v2 3/4] mtd: devices: elm: Low power transition support
Date: Wed, 13 Feb 2013 12:43:03 +0000 [thread overview]
Message-ID: <20130213124303.GM17852@n2100.arm.linux.org.uk> (raw)
In-Reply-To: <518397C60809E147AF5323E0420B992E3EA7491C@DBDE01.ent.ti.com>
On Wed, Feb 13, 2013 at 11:42:01AM +0000, Philip, Avinash wrote:
> On Sat, Feb 09, 2013 at 15:52:44, Russell King - ARM Linux wrote:
> > On Thu, Feb 07, 2013 at 06:06:57PM +0530, Philip Avinash wrote:
> > > +static int elm_suspend(struct device *dev)
> > > +{
> > > + struct elm_info *info = dev_get_drvdata(dev);
> > > + wait_queue_head_t wq;
> > > + DECLARE_WAITQUEUE(wait, current);
> > > +
> > > + init_waitqueue_head(&wq);
> > > + while (1) {
> > > + /* Make sure that ELM not running */
> > > + if (info->idle) {
> > > + add_wait_queue(&wq, &wait);
> > > + schedule();
> > > + remove_wait_queue(&wq, &wait);
> > > + } else {
> > > + break;
> > > + }
> > > + }
> >
> > The above code looks really wrong - it will just spin endlessly with the
> > waitqueues doing nothing useful. What are you trying to do here?
>
> The intention of waitqeue is to make the suspend process really wait till
> the ELM module finishes current activity. Although this type of protection
> already achieved in mtd layer using nand_suspend(), this one is particularly
> required for ELM module to really make sure that *any pending* corrections to
> finish really before gone to suspend.
I don't think you understand what's going on with the above, and why the
above is completely ineffective.
1. Your wait queue head is declared on stack, and there's no references
to it outside of this function. So _nothing_ can activate the wait
queue.
2. You're not changing the current thread's status away from TASK_RUNNING,
so schedule() will either return immediately or it will schedule another
task if it's time for this one to be preempted.
In other words, the above can be rewritten as:
while (info->idle)
schedule();
and it will still have the same effect.
Now, if you want to be kinder to the system, then you should use a
wait queue properly. Put the waitqueue head in struct elm_info. Use
wait_event() here. And call wake_up() where you set info->idle to
false.
next prev parent reply other threads:[~2013-02-13 12:48 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-02-07 12:36 [PATCH v2 0/4] suspend/resume support for OMAP nand driver Philip Avinash
2013-02-07 12:36 ` [PATCH v2 1/4] arm: gpmc: Converts GPMC driver to pm_runtime capable Philip Avinash
2013-02-07 12:36 ` [PATCH v2 2/4] arm: gpmc: Low power transition support Philip Avinash
2013-02-07 12:36 ` [PATCH v2 3/4] mtd: devices: elm: " Philip Avinash
2013-02-09 10:22 ` Russell King - ARM Linux
2013-02-13 11:42 ` Philip, Avinash
2013-02-13 12:43 ` Russell King - ARM Linux [this message]
2013-02-19 12:48 ` Philip, Avinash
2013-02-07 12:36 ` [PATCH v2 4/4] mtd: nand: omap2: " Philip Avinash
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=20130213124303.GM17852@n2100.arm.linux.org.uk \
--to=linux@arm.linux.org.uk \
--cc=afzal@ti.com \
--cc=artem.bityutskiy@linux.intel.com \
--cc=avinashphilip@ti.com \
--cc=dwmw2@infradead.org \
--cc=gururaja.hebbar@ti.com \
--cc=hvaibhav@ti.com \
--cc=khilman@ti.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mtd@lists.infradead.org \
--cc=linux-omap@vger.kernel.org \
--cc=nsekhar@ti.com \
--cc=tony@atomide.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