On Sat, Feb 12, 2011 at 03:33:35AM +0200, Paul Irofti wrote: > Please everyone test the following diff even if video reposting *works* > for you at the moment. And everyone with a non-working video reposting > card that *isn't* nvidia contact me! > > AGAIN! If suspend/resume doesn't work for you and its not NVIDIA, contact me!
New diff including the amd64 bits which I missed in the former mail. Also remove wbinvd() call and comment what this is trying to accomplish. Test on all machines, working or not! Nvidia is a don't care case. Index: arch/i386/i386/acpi_machdep.c =================================================================== RCS file: /cvs/src/sys/arch/i386/i386/acpi_machdep.c,v retrieving revision 1.41 diff -u -p -r1.41 acpi_machdep.c --- arch/i386/i386/acpi_machdep.c 6 Oct 2010 18:21:09 -0000 1.41 +++ arch/i386/i386/acpi_machdep.c 12 Feb 2011 02:07:30 -0000 @@ -251,6 +251,13 @@ acpi_sleep_machdep(struct acpi_softc *sc if (sc->sc_facs->length > 32 && sc->sc_facs->version >= 1) sc->sc_facs->x_wakeup_vector = 0; + /* + * Synchronize the trampoline since we may have changed some + * variables in it from the vga_pci quirks table. + */ + bcopy(acpi_real_mode_resume, (caddr_t)ACPI_TRAMPOLINE, + acpi_resume_end - acpi_real_mode_resume); + /* Copy the current cpu registers into a safe place for resume. * acpi_savecpu actually returns twice - once in the suspend * path and once in the resume path (see setjmp(3)). Index: arch/amd64/amd64/acpi_machdep.c =================================================================== RCS file: /cvs/src/sys/arch/amd64/amd64/acpi_machdep.c,v retrieving revision 1.47 diff -u -p -r1.47 acpi_machdep.c --- arch/amd64/amd64/acpi_machdep.c 13 Nov 2010 04:16:42 -0000 1.47 +++ arch/amd64/amd64/acpi_machdep.c 12 Feb 2011 02:07:30 -0000 @@ -225,6 +225,13 @@ acpi_sleep_machdep(struct acpi_softc *sc if (sc->sc_facs->length > 32 && sc->sc_facs->version >= 1) sc->sc_facs->x_wakeup_vector = 0; + /* + * Synchronize the trampoline since we may have changed some + * variables in it from the vga_pci quirks table. + */ + bcopy(acpi_real_mode_resume, (caddr_t)ACPI_TRAMPOLINE, + acpi_resume_end - acpi_real_mode_resume); + /* Copy the current cpu registers into a safe place for resume. * acpi_savecpu actually returns twice - once in the suspend * path and once in the resume path (see setjmp(3)).