From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Morton Subject: Re: s2ram: warn when interrupts should be disabled but are not Date: Mon, 14 Apr 2008 23:48:40 -0700 Message-ID: <20080414234840.917594ea.akpm@linux-foundation.org> References: <20080412095311.GA1729@elf.ucw.cz> Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <20080412095311.GA1729@elf.ucw.cz> Sender: linux-kernel-owner@vger.kernel.org To: Pavel Machek Cc: kernel list , Linux-pm mailing list , "Rafael J. Wysocki" List-Id: linux-pm@vger.kernel.org On Sat, 12 Apr 2008 11:53:11 +0200 Pavel Machek wrote: > > sysdevs should be suspended/resumed with IRQs disabled; if something > reenables them by mistake, we want to know early. > > Signed-off-by: Pavel Machek > > --- > commit fc3bccaf69e6c05464e7154369639bd5c96ccdc1 > tree bf960093ddb840242a00b4ec456ec79472b1c2ad > parent 308e9d5309f378209e931f63f729806ec0a4d9f1 > author Pavel Sat, 12 Apr 2008 11:52:05 +0200 > committer Pavel Sat, 12 Apr 2008 11:52:05 +0200 > > drivers/ata/ahci.c | 2 +- > drivers/base/sys.c | 3 +++ > 2 files changed, 4 insertions(+), 1 deletions(-) > > diff --git a/drivers/base/sys.c b/drivers/base/sys.c > index 8e13fd9..e214467 100644 > --- a/drivers/base/sys.c > +++ b/drivers/base/sys.c > @@ -22,6 +22,7 @@ #include > #include > #include > #include > +#include > > #include "base.h" > > @@ -367,6 +368,7 @@ int sysdev_suspend(pm_message_t state) > /* Call auxillary drivers first */ > list_for_each_entry(drv, &cls->drivers, entry) { > if (drv->suspend) { > + WARN_ON(!irqs_disabled()); > ret = drv->suspend(sysdev, state); > if (ret) > goto aux_driver; Is this warning ever triggers I expect we'll really really wish that we'd done the check _after_ calling drv->suspend, and that we had also done a print_symbol(drv->suspend). No? > @@ -442,6 +444,7 @@ int sysdev_resume(void) > list_for_each_entry(sysdev, &cls->kset.list, kobj.entry) { > pr_debug(" %s\n", kobject_name(&sysdev->kobj)); > > + WARN_ON(!irqs_disabled()); > __sysdev_resume(sysdev); > } > } Perhaps here too.