Subject: Re: Call for testing: ACPI standby/suspend support
To: Steven M. Bellovin <smb@cs.columbia.edu>
From: Alexander Yurchenko <grange@rt.mipt.ru>
List: tech-kern
Date: 03/09/2006 21:28:43
On Thu, Mar 09, 2006 at 01:20:23PM -0500, Steven M. Bellovin wrote:
> On Thu, 9 Mar 2006 14:15:04 -0400 (AST)
> "Jared D. McNeill" <jmcneill@invisible.ca> wrote:
> 
> > On Thu, 9 Mar 2006, Steven M. Bellovin wrote:
> > >> One other oddity: when I *resume* from suspending, the laptop starts
> > >> blinking a suspend indicator (a small moon-shaped LED), and when I
> > >> suspend again, it turns off. This seems slightly backwards, but I
> > >> don't know what layer is responsible for it.
> > >
> > > I wonder if that's related to the mutex.  A blinking crescent is supposed to indicate that it's in the process of suspending.  At a wild guess, there was some code that should have been entered that would turn it on *and* grab the mutex.
> > 
> > FWIW, this mutex message is new. When I was working on this many blinking 
> > crescents ago, I never saw the message. Perhaps it's a bug in the current 
> > Intel acpica code (it's been known to happen).
> > 
> Hmm -- no clue; that code is all a mystery to me.
> 
> Btw -- is there any way to work around the buggy firmware?  Thinkpads
> are among the most common laptops.

the easiest way is to add smth like this to
acpi_ec.c:acpiec_early_attach()

	char ec_id[64];

	/* XXX: workaround broken EC ID on IBM Thinkpad */
	if (ep->EcId[0] == '\\' && ep->EcId[1] == 'S') {
		snprintf(ec_id, sizeof(ec_id), "\\_%s", &ep->EcId[1]);
		printf("%s: using corrected EC ID %s\n",
		    parent->dv_xname, ec_id);
	} else {
		snprintf(ec_id, sizeof(ec_id), "%s", ep->EcId);
	}

	rv = AcpiGetHandle(ACPI_ROOT_OBJECT, ec_id, &handle);

(they missed leading _ in the ec id).

> 
> 
> 		--Steven M. Bellovin, http://www.cs.columbia.edu/~smb

-- 
   Alexander Yurchenko