amd64/174409: stopping during resume caused by io_apic.c change(r243764)

Andriy Gapon avg at FreeBSD.org
Mon Dec 17 22:40:01 UTC 2012


The following reply was made to PR amd64/174409; it has been noted by GNATS.

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

 on 17/12/2012 13:59 Kaho Toshikazu said the following:
 > Hello, and sorry for delay reply.
 
 No problem and thank you for the data.
 Could you please try the following patch?
 I suspect that it might not be sufficient, I am working on some additional changes.
 
 --- a/sys/x86/x86/intr_machdep.c
 +++ b/sys/x86/x86/intr_machdep.c
 @@ -287,6 +287,7 @@ 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);
 diff --git a/sys/x86/x86/local_apic.c b/sys/x86/x86/local_apic.c
 index 9b1e259..0df973a 100644
 --- a/sys/x86/x86/local_apic.c
 +++ b/sys/x86/x86/local_apic.c
 @@ -160,7 +160,6 @@ static u_long lapic_timer_divisor;
  static struct eventtimer lapic_et;
 
  static void	lapic_enable(void);
 -static void	lapic_resume(struct pic *pic);
  static void	lapic_timer_oneshot(struct lapic *,
  		    u_int count, int enable_int);
  static void	lapic_timer_periodic(struct lapic *,
 @@ -172,8 +171,6 @@ static int	lapic_et_start(struct eventtimer *et,
      struct bintime *first, struct bintime *period);
  static int	lapic_et_stop(struct eventtimer *et);
 
 -struct pic lapic_pic = { .pic_resume = lapic_resume };
 -
  static uint32_t
  lvt_mode(struct lapic *la, u_int pin, uint32_t value)
  {
 @@ -573,14 +570,6 @@ lapic_enable(void)
  	lapic->svr = value;
  }
 
 -/* Reset the local APIC on the BSP during resume. */
 -static void
 -lapic_resume(struct pic *pic)
 -{
 -
 -	lapic_setup(0);
 -}
 -
  int
  lapic_id(void)
  {
 @@ -1409,7 +1398,6 @@ apic_setup_io(void *dummy __unused)
  	 * properly program the LINT pins.
  	 */
  	lapic_setup(1);
 -	intr_register_pic(&lapic_pic);
  	if (bootverbose)
  		lapic_dump("BSP");
 
 
 
 -- 
 Andriy Gapon


More information about the freebsd-amd64 mailing list