[BUG] powerpc does not save msi state [was Re: [PATCH 5/7] pci: Export the pci_restore_msi_state() function
Linas Vepstas
linas at austin.ibm.com
Sat Oct 20 10:46:10 EST 2007
Hi,
On Fri, Oct 19, 2007 at 05:27:06PM -0700, David Miller wrote:
> From: linas at austin.ibm.com (Linas Vepstas)
> Date: Fri, 19 Oct 2007 19:04:21 -0500
>
> > I'm working in linux-2.6.23-rc8-mm1 at the moment, and I don't see
> > that happening. viz. read_msi_msg() is not called anywhere, and I need
> > to have valid msg->address_lo and msg->address_hi and msg->data
> > in order to be able to restore.
>
> See the pci_restore_msi_state() call done from pci_restore_state()
> in drivers/pci/pci.c, that pci_restore_msi_state() code in
> drivers/pci/msi.c very much relies upon the entry->msg values
> being uptodate and valid.
>
> The MSI arch layer code is supposed to fill the entry->msg values in
> via arch_setup_msi_irq(). Perhaps the pseries code is forgetting to
> do that.
Yep. Thank you for confirming the correct location for the fix.
FWIW, it looks like not all that many arches do this; the output
for grep -r address_hi * is pretty thin. Then, looking at
i386/kernel/io_apic.c as an example, one can see that the
msi state save happens "by accident" if CONFIG_SMP is enabled;
and so its surely broekn on uniprocesor machines.
I'm cc'ing the powerpc mailing list to point this out:
it looks like only cell/axon_msi.c and mpic_u3msi.c
bother do do anything. I guess that there aren't any old
macintosh laptops that have msi on them? Because without
this, suspend and resume breaks.
Paul,
On the off chance your reading this, I'll send a pseries
patch on Monday, with luck (and some other patches too).
I'm not touching any of the other plaforms, you and benh
would know those better.
--linas
More information about the Linuxppc-dev
mailing list