From owner-freebsd-hackers Fri Aug 31 0:50:37 2001 Delivered-To: freebsd-hackers@freebsd.org Received: from midten.fast.no (midten.fast.no [213.188.8.11]) by hub.freebsd.org (Postfix) with ESMTP id 29ACF37B406; Fri, 31 Aug 2001 00:50:27 -0700 (PDT) (envelope-from Tor.Egge@fast.no) Received: from fast.no (IDENT:tegge@midten.fast.no [213.188.8.11]) by midten.fast.no (8.9.3/8.9.3) with ESMTP id DAA80823; Fri, 31 Aug 2001 03:48:13 +0200 (CEST) Message-Id: <200108310148.DAA80823@midten.fast.no> To: mb@imp.ch Cc: bde@zeta.org.au, bkarp@icsi.berkeley.edu, kpielorz@tdx.co.uk, sthaug@nethelp.no, atrn@zeta.org.au, roberto@eurocontrol.fr, drussell@saturn-tech.com, phk@FreeBSD.ORG, Patrick.Guelat@imp.ch, freebsd-hackers@FreeBSD.ORG, freebsd-smp@FreeBSD.ORG Subject: Re: Clock speedup on 4.X FreeBSD SMP and serverworks chipset From: Tor.Egge@fast.no In-Reply-To: Your message of "Fri, 31 Aug 2001 00:54:21 +0200" References: <200108302254.AAA75808@midten.fast.no> X-Mailer: Mew version 1.70 on Emacs 19.34.1 Mime-Version: 1.0 Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit Date: Fri, 31 Aug 2001 03:48:13 +0200 Sender: owner-freebsd-hackers@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.ORG I wrote: > The problem here is that CPU#1 fails to hold clock_lock while setting > clkintr_pending, causing i8254_offset to be stepped twice, first due > to clkintr_pending, then due to i8254_lastcount being larger than count. With this patch applied to RELENG_4, the clock speedup seems to disappear. --- apic_vector.s.old Fri Mar 2 13:47:31 2001 +++ apic_vector.s Fri Aug 31 01:07:53 2001 @@ -707,7 +707,12 @@ FAST_INTR(21,fastintr21) FAST_INTR(22,fastintr22) FAST_INTR(23,fastintr23) -#define CLKINTR_PENDING movl $1,CNAME(clkintr_pending) +#define CLKINTR_PENDING pushl $clock_lock; \ + call s_lock; \ + movl $1,CNAME(clkintr_pending); \ + call s_unlock; \ + addl $4, %esp + INTR(0,intr0, CLKINTR_PENDING) INTR(1,intr1,) INTR(2,intr2,) The corresponding patch for -current is Index: apic_vector.s =================================================================== RCS file: /home/ncvs/src/sys/i386/isa/apic_vector.s,v retrieving revision 1.71 diff -u -r1.71 apic_vector.s --- apic_vector.s 27 Apr 2001 19:28:21 -0000 1.71 +++ apic_vector.s 31 Aug 2001 01:35:05 -0000 @@ -7,6 +7,8 @@ #include #include +#include + #include "i386/isa/intr_machdep.h" /* convert an absolute IRQ# into a bitmask */ @@ -384,7 +425,11 @@ FAST_INTR(29,fastintr29) FAST_INTR(30,fastintr30) FAST_INTR(31,fastintr31) -#define CLKINTR_PENDING movl $1,CNAME(clkintr_pending) +#define CLKINTR_PENDING MTX_LOCK_SPIN(clock_lock, 0); \ + movl $1,CNAME(clkintr_pending); \ + MTX_UNLOCK_SPIN(clock_lock) + + /* Threaded interrupts */ INTR(0,intr0, CLKINTR_PENDING) INTR(1,intr1,) - Tor Egge To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-hackers" in the body of the message