From owner-svn-src-head@FreeBSD.ORG Sat Sep 18 07:18:31 2010 Return-Path: Delivered-To: svn-src-head@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 055231065672; Sat, 18 Sep 2010 07:18:31 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id E91F88FC08; Sat, 18 Sep 2010 07:18:30 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id o8I7IUSZ055574; Sat, 18 Sep 2010 07:18:30 GMT (envelope-from mav@svn.freebsd.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o8I7IUlt055572; Sat, 18 Sep 2010 07:18:30 GMT (envelope-from mav@svn.freebsd.org) Message-Id: <201009180718.o8I7IUlt055572@svn.freebsd.org> From: Alexander Motin Date: Sat, 18 Sep 2010 07:18:30 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r212811 - head/sys/kern X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 18 Sep 2010 07:18:31 -0000 Author: mav Date: Sat Sep 18 07:18:30 2010 New Revision: 212811 URL: http://svn.freebsd.org/changeset/base/212811 Log: When global timer used at SMP system, update nextevent field on BSP before sending IPI to other CPUs. Otherwise, other CPUs will try to honor stale value, programming timer for zero interval. If timer is fast enough, it caused extra interrupt before timer correctly reprogrammed by BSP. Modified: head/sys/kern/kern_clocksource.c Modified: head/sys/kern/kern_clocksource.c ============================================================================== --- head/sys/kern/kern_clocksource.c Sat Sep 18 07:16:38 2010 (r212810) +++ head/sys/kern/kern_clocksource.c Sat Sep 18 07:18:30 2010 (r212811) @@ -335,15 +335,15 @@ timercb(struct eventtimer *et, void *arg bcast = 0; if ((et->et_flags & ET_FLAGS_PERCPU) == 0 && smp_started) { CPU_FOREACH(cpu) { - if (curcpu == cpu) - continue; state = DPCPU_ID_PTR(cpu, timerstate); ET_HW_LOCK(state); state->now = now; if (bintime_cmp(&now, &state->nextevent, >=)) { state->nextevent.sec++; - state->ipi = 1; - bcast = 1; + if (curcpu != cpu) { + state->ipi = 1; + bcast = 1; + } } ET_HW_UNLOCK(state); }