Re: 2.6.0-test6: APM unable to suspend (the 2.6.0-test2 saga continues)

From: Russell King
Date: Tue Dec 30 2003 - 11:54:55 EST


On Tue, Dec 30, 2003 at 11:43:24AM +0000, Russell King wrote:
> On Sun, Dec 28, 2003 at 12:49:21PM -0800, Linus Torvalds wrote:
> > On Sun, 28 Dec 2003, Russell King wrote:
> > >
> > > Would it be possible to switch LDT/GDT to whatever the APM BIOS expects
> > > just before calling the APM BIOS to suspend/hibernate, and restore them
> > > to whatever Linux requires after the APM BIOS returns from resume?
> >
> > Possible, yes. But it would help a lot to know what's wrong with the
> > current segments - we did leave most of them with exactly the same layout
> > as before, and I thought we explicitly left the ones that APM cares about
> > that way..
>
> With thanks to Arjan, I think we've proven that this is not the change
> which is causing the problem by testing various Red Hat and Fedora 2.4
> kernels on the machine (which have various 2.6 NPTL backports.)
>
> I'm now back to being completely out of my depth on this issue; a 2.4
> kernel booted through to init=/bin/bash suspends, but a 2.6 kernel
> with the same hardware support booted to the same point refuses to
> suspend via APM.
>
> I think I'm going to have to resort to a binary search of the 2.5
> kernel series to find out exactly what broke and when.

Ok, the binary search led me to a changeset between 2.5.25 and 2.5.26
kernels. Further investigation led me to i8042.c, specifically this:

static void __init i8042_start_polling(void)
{
i8042_ctr &= ~I8042_CTR_KBDDIS;
if (i8042_aux_values.exists)
i8042_ctr &= ~I8042_CTR_AUXDIS;

if (i8042_command(&i8042_ctr, I8042_CMD_CTL_WCTR)) {
printk(KERN_WARNING "i8042.c: Can't write CTR while starting polling.\n");
return;
}

// i8042_timer.function = i8042_timer_func;
// mod_timer(&i8042_timer, jiffies + I8042_POLL_PERIOD);
}

With the function as above, the observed behaviour is as follows:

- don't call i8042_start_polling at all - suspend works
- call i8042_start_polling - suspend fails

It seems that my BIOS is taking exception to CTR value we're writing.

My next step will be to try this with 2.6.0 and see whether this is the
only issue affecting APM suspend. In the mean time, does Vojtech have
any hints?

--
Russell King
Linux kernel 2.6 ARM Linux - http://www.arm.linux.org.uk/
maintainer of: 2.6 PCMCIA - http://pcmcia.arm.linux.org.uk/
2.6 Serial core
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/