From owner-freebsd-current@FreeBSD.ORG Mon Jun 28 13:54:23 2004 Return-Path: Delivered-To: freebsd-current@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 283CD16A4D2; Mon, 28 Jun 2004 13:54:23 +0000 (GMT) Received: from mail.sandvine.com (sandvine.com [199.243.201.138]) by mx1.FreeBSD.org (Postfix) with ESMTP id 33D2F43D1F; Mon, 28 Jun 2004 13:54:22 +0000 (GMT) (envelope-from gnagelhout@sandvine.com) Received: by mail.sandvine.com with Internet Mail Service (5.5.2657.72) id ; Mon, 28 Jun 2004 09:53:58 -0400 Message-ID: From: Gerrit Nagelhout To: 'John Baldwin' Date: Mon, 28 Jun 2004 09:53:51 -0400 MIME-Version: 1.0 X-Mailer: Internet Mail Service (5.5.2657.72) Content-Type: text/plain; charset="iso-8859-1" cc: kris@FreeBSD.org cc: freebsd-current@FreeBSD.org cc: Julian Elischer Subject: RE: STI, HLT in acpi_cpu_idle_c1 X-BeenThere: freebsd-current@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: Discussions about the use of FreeBSD-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 28 Jun 2004 13:54:23 -0000 John Baldwin wrote: > Hmm, it appears it is consistently CPU1 that thinks that > IPI_HARDCLOCK is not > being EOI'd. Can you try swapping the CPUs and see if the > lockup moves from > CPU1 to CPU3? > > -- I added the following *HACK* to the idle code, and let it run over the weekend (with halt on idle disabled). It hit the function isr_problem 9 times, but did not lockup anymore. The problem is that I don't know if the EOI just got lost, or whether the interrupt was not handled at all. I couldn't find any ill effects from this code ... yet. extern volatile lapic_t *lapic; void isr_problem(void); int isrProblem=0; void isr_problem() { isrProblem++; lapic->eoi = 0; } int mp_grab_cpu_hlt(void) { u_int mask = PCPU_GET(cpumask); int retval; if(lapic->isr7 != 0) { isr_problem(); } retval = mask & hlt_cpus_mask; while (mask & hlt_cpus_mask) __asm __volatile("sti; hlt" : : : "memory"); return (retval); }