Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 10 Dec 2008 21:19:58 -0500
From:      Jung-uk Kim <jkim@FreeBSD.org>
To:        freebsd-acpi@FreeBSD.org
Cc:        Alexander Motin <mav@freebsd.org>, peter@freebsd.org, freebsd-amd64@freebsd.org
Subject:   Re: Semi-working patch for amd64 suspend/resume
Message-ID:  <200812102120.03788.jkim@FreeBSD.org>
In-Reply-To: <49358684.7010508@FreeBSD.org>
References:  <1224616985.00027652.1224606603@10.7.7.3> <200812021243.08513.jkim@FreeBSD.org> <49358684.7010508@FreeBSD.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Tuesday 02 December 2008 02:03 pm, Alexander Motin wrote:
> Hi.
>
> Jung-uk Kim wrote:
> >> Here is problems I still have now:
> >>   - SMP kernel resume is not working, system reboots while doing
> >> acpi_wakeup_cpus();
> >
> > My dual-core CPU seems to resume okay but quite unstable.  Can
> > you try something like the following in amd64/mp_machdep.c and
> > tell me if it helps?
> >
> > ------------
> > @@ -57,6 +57,7 @@
> >  #include <vm/vm_extern.h>
> >
> >  #include <machine/apicreg.h>
> > +#include <machine/cpufunc.h>
> >  #include <machine/md_var.h>
> >  #include <machine/mp_watchdog.h>
> >  #include <machine/pcb.h>
> > @@ -1121,6 +1121,8 @@
> > 	int cpumask = PCPU_GET(cpumask);
> >
> > 	if (savectx2(&stopxpcbs[cpu])) {
> > +		/* Flush CPU cache. */
> > +		wbinvd();
> > 		/* Indicate that we are suspended. */
> > 		atomic_set_int(&stopped_cpus, cpumask);
> > 	} else {
> > ------------
>
> Wow, it works!
>
> I am writing this letter just after suspending/resuming my
> dual-core C2D system 4 times straight. Music plays, USB, SATA, all
> other hardware works fine. What kind of instability do you have?
>
> The only strange effect I have noticed was incorrect CPU time some
> processes got:
> %ps ax
>    PID  TT  STAT      TIME COMMAND
>     12  ??  WL   280503:38,05 [intr]
>   1430  ??  Ss   280503:38,34 icewm
>
> But I think it is more timer driver related then resume itself.
>
> > Thanks for the feedback!
>
> Many thanks to you! I hope this long-waited feature will be
> finished!

FYI, I uploaded a new patch with some fixes (against today's CURRENT):

http://people.freebsd.org/~jkim/amd64_suspend.diff

This patch should be feature complete but I'd say it is still 
considered experimental as it is not properly reviewed.

Now, some useful tips of the day for starters:

Tip #1: Try 'sysctl debug.acpi.suspend_bounce=1" first.  If it hangs, 
this patch won't do any good for you.

Tip #2: Suspend/resume several times in single user mode first to be 
safe.  I am sure you don't want to lose your data. ;-)

Tip #3: If keyboard LEDs blink (keyboard reset) but nothing is 
displayed on screen, try 'sysctl hw.acpi.reset_video=1' next time.

Tip #4: If #3 does not work for you, try 'vbetool post' (available 
from ports/sysutils/vbetool) next.  It works better in some cases.

Tip #5: With Xorg, it is always safe to suspend in console unless you 
have a hook in suspend script to do some magic.  When you switch to 
console by pressing Ctrl+Alt+F[1-8], Xorg driver will save GPU 
states.  After resume is complete, you can return to Xorg screen by 
pressing Alt-F9 later.  Then, Xorg driver should restore GPU states 
and screen.

Tip #6: If your mouse pointer does not move any more, try restarting 
moused by '/etc/rc.d/moused restart'.

Cheers,

Jung-uk Kim



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