Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 24 Jan 2000 01:29:03 +0100 (MET)
From:      "Jose M. Alcaide" <jose@we.lc.ehu.es>
To:        freebsd-mobile@FreeBSD.ORG
Subject:   Re: suspend problems with Dell Inspiron 3700
Message-ID:  <200001240029.BAA04930@polaris.we.lc.ehu.es>

next in thread | raw e-mail | index | archive | help
The saga of the APM suspend problems with my Inspiron 3700 continues...

I found a pattern! However, it is astonishing. Too astonishing to be true.  I
will try to explain what I discovered. It is difficult to explain, especially
in English :-). Sorry.

First, I found a strange thing that I thought it was unrelated to the suspend
problem. But, somehow, it _is_ related. This strange thing is that, under some
circumstances, the RTC does not generate interrupts (IRQ 8).  These
circumstances are:

  1. The system is connected to AC-line, and it is rebooted, or powered down
     and turned on again. However, if I disconnect the power cable for a
     couple of seconds while the system is off, reconnect, and then I turn it
     on again, the RTC generates IRQ8s.

  2. The system is battery powered, and it is rebooted. However, if it is
     powered down and turned on again, the RTC generates IRQ8s.

I use "vmstat -i" to see when the RTC is generating interrupts. Maybe the RTC
is working but the interrupts are not being accounted by the kernel...

How are related the RTC and the APM suspend problems? Well, there is a
reproducible (and astonishing) fact: 

  When the RTC is generating IRQ8s, APM suspend does _not_ work.
  
Moreover, if I reboot the system (so the RTC is not working), I suspend it
(this now works), wait a few seconds, and I resume it, then, after resuming,
"vmstat -i" shows that the RTC is now generating interrupts; after that I
cannot suspend the system again.

I inserted a ``printf("apm_int(%lx,%lx,%lx,%lx)\n", eax, ebx, ecx, edx)'' in
sys/i386/apm/apm.c, in the function apm_suspend_system(), just before the call
to apm_int(). I wanted to see whether this call is actually done, or it is
not. And it is: whenever I try to suspend the machine, I see this message:

  apm_int(5307,1,2,0)

and nothing more. After 50-52 seconds, this message appears on the console:

  resumed from suspended mode (slept 00:00:50)

The conclusion is that the BIOS suspend call is being activated, but for some
reason the system is not suspended. And the suspend fails when the RTC is
generating IRQ8s (as it should do!). About 50 seconds after the false suspend,
a resume event comes from the BIOS (why?).

From all these symptoms we could infer that the APM BIOS is not working
correctly, but... what happens with the RTC interrupts? And remember that
Windows does not present any problems suspending the same machine (this is
really disgusting :-) ).

I would really appreciate any theory about this problem from you APM gurus :-)

Thanks in advance, and my apologies for this long message written in poor
English.


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-mobile" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200001240029.BAA04930>