On Thursday, 28 of July 2005 23:36, Pavel Machek wrote:
> Hi!
>
> > >>If I don't eject the pcmcia card (usually a prism54 wireless card),
> > >>swsusp begins the process of hibernation, but never gets to the
> > >>writing pages part.
> >
> > > Well, it really may be the firmware loading. Add some printks to
> > > confirm it, then fix it.
> >
> > I did more tests, this time with 2.6.13-rc3-mm2 (machine is a TP 600X),
> > and I don't think the problem is related to firmware loading. If I
> > first physically eject the card (an Intersil wireless card), swsusp
> > prints
> >
> ..
> >
> > then it writes pages to swap and all is well. Well, almost 100%; the
> > one glitch is that sometimes X comes back blank and I have to
> > ctrl-alt-F7 to bring back the display; or X comes back with the keyboard
> > acting strange (<ENTER> shifts the display left by a few hundred
> > pixels), and again ctrl-alt-F7 fixes it. This is with XFree86
> > 4.3.0.dfsg.1-14, and maybe after I upgrade (?) to the xorg server, that
> > glitch will go away. Anyway, it's easy to work around.
>
> So, in short, problem is that if you leave prism54 card in, even with
> module removed, swsusp hangs, right?
>
> Okay then, start looking into pcmcia layer ;-).
Perhaps the patch from Daniel Ritz to free the yenta IRQ on suspend (attached)
will help?
Rafael
--
- 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"
--- linux-2.6.13-rc3-git5/drivers/pcmcia/yenta_socket.c 2005-07-23 19:26:30.000000000 +0200
+++ patched/drivers/pcmcia/yenta_socket.c 2005-07-24 11:44:04.000000000 +0200
@@ -1107,6 +1107,8 @@ static int yenta_dev_suspend (struct pci
pci_read_config_dword(dev, 17*4, &socket->saved_state[1]);
pci_disable_device(dev);
+ free_irq(dev->irq, socket);
+
/*
* Some laptops (IBM T22) do not like us putting the Cardbus
* bridge into D3. At a guess, some other laptop will
@@ -1132,6 +1134,13 @@ static int yenta_dev_resume (struct pci_
pci_enable_device(dev);
pci_set_master(dev);
+ if (socket->cb_irq)
+ if (request_irq(socket->cb_irq, yenta_interrupt,
+ SA_SHIRQ, "yenta", socket)) {
+ printk(KERN_WARNING "Yenta: request_irq() failed on resume!\n");
+ socket->cb_irq = 0;
+ }
+
if (socket->type && socket->type->restore_state)
socket->type->restore_state(socket);
}
[Index of Archives]
[Kernel Newbies]
[Netfilter]
[Bugtraq]
[Photo]
[Gimp]
[Yosemite News]
[MIPS Linux]
[ARM Linux]
[Linux Security]
[Linux RAID]
[Video 4 Linux]
[Linux for the blind]
|
|