Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 18 Dec 2012 10:00:01 GMT
From:      Andriy Gapon <avg@FreeBSD.org>
To:        freebsd-amd64@FreeBSD.org
Subject:   Re: amd64/174409: stopping during resume caused by io_apic.c change(r243764)
Message-ID:  <201212181000.qBIA010e005186@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help
The following reply was made to PR amd64/174409; it has been noted by GNATS.

From: Andriy Gapon <avg@FreeBSD.org>
To: KAHO Toshikazu <kaho@elam.kais.kyoto-u.ac.jp>
Cc: bug-followup@FreeBSD.org
Subject: Re: amd64/174409: stopping during resume caused by io_apic.c change(r243764)
Date: Tue, 18 Dec 2012 11:55:09 +0200

 on 18/12/2012 03:54 KAHO Toshikazu said the following:
 >   Hello, and thanks for your work.
 > 
 >> Could you please try the following patch?
 >> I suspect that it might not be sufficient, I am working on some
 >> additional changes.
 > 
 >   The patched kernel dosen't solve the problem. On waking up,
 > the machine hangs with LCD backlight on, but it shows nothing.
 > Power off is all that I can do. Each revision (r243764 or r227309)
 > of io_apic.c with the patch makes the machine hangs. The machine 
 > can wake up with io_apic.c reverted to r227309 and without the patch.
 > 
 
 I understand.
 Could you please try the following patch on top of the previous one (without
 reverting r227309, of course) ?
 
 --- a/sys/x86/acpica/acpi_wakeup.c
 +++ b/sys/x86/acpica/acpi_wakeup.c
 @@ -261,12 +261,17 @@ acpi_wakeup_machdep(struct acpi_softc *sc, int state, int
 sleep_result,
  #endif
  		}
 
 +		/*
 +		 * Re-program IO-APIC pins to their correct states before
 +		 * enabling Local APICs (which is done when CPUs are restarted).
 +		 */
 +		intr_resume();
 +
  #ifdef SMP
  		if (!CPU_EMPTY(&suspcpus))
  			restart_cpus(suspcpus);
  #endif
  		mca_resume();
 -		intr_resume();
 
  		AcpiSetFirmwareWakingVector(0);
  	} else {
 --- a/sys/x86/x86/intr_machdep.c
 +++ b/sys/x86/x86/intr_machdep.c
 @@ -287,11 +287,11 @@ intr_resume(void)
  	atpic_reset();
  #endif
  	mtx_lock(&intr_table_lock);
 -	lapic_setup(0);
  	STAILQ_FOREACH(pic, &pics, pics) {
  		if (pic->pic_resume != NULL)
  			pic->pic_resume(pic);
  	}
 +	lapic_setup(0);
  	mtx_unlock(&intr_table_lock);
  }
 
 
 I've put the combined patch here:
 http://people.freebsd.org/~avg/apic-resume.diff
 
 -- 
 Andriy Gapon



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