From: "Rafael J. Wysocki" <rjw@sisk.pl>
To: linux-kernel@vger.kernel.org
Cc: Linus Torvalds <torvalds@osdl.org>,
Russell King <rmk+lkml@arm.linux.org.uk>,
Hugh Dickins <hugh@veritas.com>, Andrew Morton <akpm@osdl.org>,
Dominik Brodowski <linux@dominikbrodowski.net>,
Daniel Ritz <daniel.ritz@gmx.ch>, Len Brown <len.brown@intel.com>
Subject: Re: revert yenta free_irq on suspend
Date: Sun, 31 Jul 2005 00:28:19 +0200 [thread overview]
Message-ID: <200507310028.20699.rjw@sisk.pl> (raw)
In-Reply-To: <Pine.LNX.4.58.0507301404240.29650@g5.osdl.org>
On Saturday, 30 of July 2005 23:10, Linus Torvalds wrote:
>
> On Sat, 30 Jul 2005, Russell King wrote:
> >
> > I don't think so - I believe one of the problem cases is where you
> > have a screaming interrupt caused by an improperly setup device.
>
> Not a problem.
>
> The thing is, this is trivially solved by
> - disable irq controller last on shutdown
> - re-enable irq controller last on resume
>
> Think about it. Even if you have screaming irq's (and thus we'll shut
> things down somewhere during the resume), when we then get to re-enable
> the irq controller thing, we'll have them all back again at that point.
> Problem solved.
>
> You can have variations on this, of course - you can enable the irq
> controller early _and_ late in the resume process. Ie do a minimal "get
> the basics working" early - you might want to make sure that timers etc
> work early on, for example, and then a "fix up the details" thing late.
>
> An interrupt controller is clearly a special case, so it's worth spending
> some effort on handling it.
>
> In contrast, what is _not_ worth doing is screweing over every single
> driver we have.
Well, they have _already_ been screwed by the following patch that went
to your tree with the ACPI update. If you drop it, all problems related to
freeing/requesting IRQs on suspend/resume will be gone.
Please note, however, that what it does is to get rid of unconditional setting
ACPI PCI links on resume in hope that someone will take care of them later,
which is not quite right, so to speak.
In my opinion the time for introducing this change is not the best, to put it
lightly, but it looks like it will have to be made at some point. Still I'm not
an ACPI expert, so Len could you please advise?
Greets,
Rafael
diff -Naru a/drivers/acpi/pci_link.c b/drivers/acpi/pci_link.c
--- a/drivers/acpi/pci_link.c 2005-03-24 04:57:27 -08:00
+++ b/drivers/acpi/pci_link.c 2005-03-24 04:57:27 -08:00
@@ -72,10 +72,12 @@
u8 active; /* Current IRQ */
u8 edge_level; /* All IRQs */
u8 active_high_low; /* All IRQs */
- u8 initialized;
u8 resource_type;
u8 possible_count;
u8 possible[ACPI_PCI_LINK_MAX_POSSIBLE];
+ u8 initialized:1;
+ u8 suspend_resume:1;
+ u8 reserved:6;
};
struct acpi_pci_link {
@@ -530,6 +532,10 @@
ACPI_FUNCTION_TRACE("acpi_pci_link_allocate");
+ if (link->irq.suspend_resume) {
+ acpi_pci_link_set(link, link->irq.active);
+ link->irq.suspend_resume = 0;
+ }
if (link->irq.initialized)
return_VALUE(0);
@@ -713,38 +719,24 @@
return_VALUE(result);
}
-
-static int
-acpi_pci_link_resume (
- struct acpi_pci_link *link)
-{
- ACPI_FUNCTION_TRACE("acpi_pci_link_resume");
-
- if (link->irq.active && link->irq.initialized)
- return_VALUE(acpi_pci_link_set(link, link->irq.active));
- else
- return_VALUE(0);
-}
-
-
static int
-irqrouter_resume(
- struct sys_device *dev)
+irqrouter_suspend(
+ struct sys_device *dev,
+ u32 state)
{
struct list_head *node = NULL;
struct acpi_pci_link *link = NULL;
- ACPI_FUNCTION_TRACE("irqrouter_resume");
+ ACPI_FUNCTION_TRACE("irqrouter_suspend");
list_for_each(node, &acpi_link.entries) {
-
link = list_entry(node, struct acpi_pci_link, node);
if (!link) {
ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Invalid link context\n"));
continue;
}
-
- acpi_pci_link_resume(link);
+ if (link->irq.active && link->irq.initialized)
+ link->irq.suspend_resume = 1;
}
return_VALUE(0);
}
@@ -856,7 +848,7 @@
static struct sysdev_class irqrouter_sysdev_class = {
set_kset_name("irqrouter"),
- .resume = irqrouter_resume,
+ .suspend = irqrouter_suspend,
};
--
- Would you tell me, please, which way I ought to go from here?
- That depends a good deal on where you want to get to.
-- Lewis Carroll "Alice's Adventures in Wonderland"
next prev parent reply other threads:[~2005-07-30 22:24 UTC|newest]
Thread overview: 58+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-07-30 19:10 revert yenta free_irq on suspend Hugh Dickins
2005-07-30 20:03 ` Russell King
2005-07-30 20:36 ` Linus Torvalds
2005-07-30 20:54 ` Russell King
2005-07-30 21:10 ` Linus Torvalds
2005-07-30 21:30 ` Russell King
2005-07-30 22:28 ` Rafael J. Wysocki [this message]
2005-07-31 4:49 ` Linus Torvalds
2005-08-01 9:06 ` Benjamin Herrenschmidt
2005-07-30 21:20 ` Rafael J. Wysocki
2005-07-30 20:34 ` Linus Torvalds
2005-07-31 13:29 ` Pavel Machek
2005-07-31 15:53 ` Linus Torvalds
2005-07-31 17:09 ` Linus Torvalds
2005-07-30 20:49 ` Rafael J. Wysocki
2005-07-30 21:08 ` Daniel Ritz
2005-07-30 21:32 ` Hugh Dickins
2005-07-30 22:00 ` Rafael J. Wysocki
2005-07-30 22:24 ` Hugh Dickins
2005-07-30 23:09 ` Rafael J. Wysocki
2005-07-31 20:15 ` Rafael J. Wysocki
2005-08-01 20:34 ` Hugh Dickins
2005-08-01 21:54 ` Rafael J. Wysocki
-- strict thread matches above, loose matches on Subject: below --
2005-07-31 5:03 Brown, Len
2005-07-31 5:31 ` Linus Torvalds
2005-07-31 9:49 ` Rafael J. Wysocki
2005-07-31 22:27 ` Dave Jones
2005-08-01 0:00 ` Andreas Steinmetz
2005-08-01 0:06 ` Dave Jones
2005-08-01 0:09 ` Andreas Steinmetz
2005-08-03 9:23 ` Pavel Machek
2005-08-01 8:51 ` Matthew Garrett
2005-07-31 20:34 ambx1
2005-07-31 21:20 ` Pavel Machek
2005-08-01 8:56 ` Benjamin Herrenschmidt
2005-07-31 22:55 ` Linus Torvalds
2005-07-31 23:05 ` Pavel Machek
2005-07-31 23:24 ` Linus Torvalds
2005-07-31 23:27 ` Pavel Machek
2005-07-31 23:44 ` Linus Torvalds
2005-07-31 23:59 ` Dave Airlie
2005-08-01 0:19 ` Linus Torvalds
2005-08-01 0:44 ` Dave Airlie
2005-08-01 1:07 ` Linus Torvalds
2005-08-01 7:15 ` Pavel Machek
2005-08-01 7:01 ` Sanjoy Mahajan
2005-08-01 7:25 ` Pavel Machek
2005-07-31 23:10 ` Dave Airlie
2005-08-01 1:59 ` Shaohua Li
2005-08-01 2:06 ` Andrew Morton
2005-08-01 2:22 ` Shaohua Li
2005-08-01 7:19 ` Pavel Machek
2005-08-01 21:38 ` Rafael J. Wysocki
2005-08-01 3:03 ambx1
2005-08-01 4:53 ` Linus Torvalds
2005-08-01 8:49 ` Benjamin Herrenschmidt
2005-08-02 10:56 ` Pavel Machek
2005-08-03 11:42 ` Benjamin Herrenschmidt
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=200507310028.20699.rjw@sisk.pl \
--to=rjw@sisk.pl \
--cc=akpm@osdl.org \
--cc=daniel.ritz@gmx.ch \
--cc=hugh@veritas.com \
--cc=len.brown@intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux@dominikbrodowski.net \
--cc=rmk+lkml@arm.linux.org.uk \
--cc=torvalds@osdl.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