From owner-svn-src-all@FreeBSD.ORG Fri Oct 23 21:36:33 2009 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id CF1FF1065670; Fri, 23 Oct 2009 21:36:33 +0000 (UTC) (envelope-from nwhitehorn@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id BE9C68FC1E; Fri, 23 Oct 2009 21:36:33 +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 n9NLaXU9072822; Fri, 23 Oct 2009 21:36:33 GMT (envelope-from nwhitehorn@svn.freebsd.org) Received: (from nwhitehorn@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n9NLaXjS072818; Fri, 23 Oct 2009 21:36:33 GMT (envelope-from nwhitehorn@svn.freebsd.org) Message-Id: <200910232136.n9NLaXjS072818@svn.freebsd.org> From: Nathan Whitehorn Date: Fri, 23 Oct 2009 21:36:33 +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: r198427 - head/sys/powerpc/aim X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 23 Oct 2009 21:36:33 -0000 Author: nwhitehorn Date: Fri Oct 23 21:36:33 2009 New Revision: 198427 URL: http://svn.freebsd.org/changeset/base/198427 Log: Add some more paranoia to setting HID registers, and update the AIM clock routines to work better with SMP. This makes SMP work fully and stably on an Xserve G5. Obtained from: Book-E (clock bits) Modified: head/sys/powerpc/aim/clock.c head/sys/powerpc/aim/machdep.c head/sys/powerpc/aim/mp_cpudep.c Modified: head/sys/powerpc/aim/clock.c ============================================================================== --- head/sys/powerpc/aim/clock.c Fri Oct 23 21:33:26 2009 (r198426) +++ head/sys/powerpc/aim/clock.c Fri Oct 23 21:36:33 2009 (r198427) @@ -95,8 +95,7 @@ static struct timecounter decr_timecount void decr_intr(struct trapframe *frame) { - long tick; - int nticks; + int32_t tick, nticks; /* * Check whether we are initialized. @@ -112,13 +111,17 @@ decr_intr(struct trapframe *frame) for (nticks = 0; tick < 0; nticks++) tick += ticks_per_intr; mtdec(tick); +if (nticks > 5) printf("BIG NTICKS on CPU %d: %x\n",PCPU_GET(cpuid),nticks); - if (PCPU_GET(cpuid) == 0) { - while (nticks-- > 0) + while (nticks-- > 0) { + if (PCPU_GET(cpuid) == 0) hardclock(TRAPF_USERMODE(frame), TRAPF_PC(frame)); - } else { - while (nticks-- > 0) + else hardclock_cpu(TRAPF_USERMODE(frame)); + + statclock(TRAPF_USERMODE(frame)); + if (profprocs != 0) + profclock(TRAPF_USERMODE(frame), TRAPF_PC(frame)); } } @@ -145,6 +148,8 @@ decr_init(void) ticks_per_intr = ticks_per_sec / hz; mtdec(ticks_per_intr); + set_cputicker(mftb, ticks_per_sec, 0); + mtmsr(msr); } Modified: head/sys/powerpc/aim/machdep.c ============================================================================== --- head/sys/powerpc/aim/machdep.c Fri Oct 23 21:33:26 2009 (r198426) +++ head/sys/powerpc/aim/machdep.c Fri Oct 23 21:36:33 2009 (r198427) @@ -885,6 +885,8 @@ cpu_initclocks(void) { decr_tc_init(); + stathz = hz; + profhz = hz; } /* Modified: head/sys/powerpc/aim/mp_cpudep.c ============================================================================== --- head/sys/powerpc/aim/mp_cpudep.c Fri Oct 23 21:33:26 2009 (r198426) +++ head/sys/powerpc/aim/mp_cpudep.c Fri Oct 23 21:36:33 2009 (r198427) @@ -50,7 +50,7 @@ __FBSDID("$FreeBSD$"); void *ap_pcpu; -static register_t bsp_state[8]; +static register_t bsp_state[8] __aligned(8); static void cpudep_save_config(void *dummy); SYSINIT(cpu_save_config, SI_SUB_CPU, SI_ORDER_ANY, cpudep_save_config, NULL); @@ -184,6 +184,8 @@ cpudep_save_config(void *dummy) __asm __volatile ("mfspr %0,%2; mr %1,%0; srdi %0,%0,32" : "=r" (bsp_state[6]),"=r" (bsp_state[7]) : "K" (SPR_HID5)); + powerpc_sync(); + break; case MPC7450: case MPC7455: @@ -224,17 +226,23 @@ cpudep_ap_setup() * See Table 2-3, 970MP manual */ + __asm __volatile("mtasr %0; sync" :: "r"(0)); __asm __volatile(" \ ld %0,0(%2); \ + sync; isync; \ mtspr %1, %0; \ mfspr %0, %1; mfspr %0, %1; mfspr %0, %1; \ - mfspr %0, %1; mfspr %0, %1; mfspr %0, %1;" + mfspr %0, %1; mfspr %0, %1; mfspr %0, %1; \ + sync; isync" : "=r"(reg) : "K"(SPR_HID0), "r"(bsp_state)); - __asm __volatile("ld %0, 8(%2); mtspr %1, %0; mtspr %1, %0; \ - isync" : "=r"(reg) : "K"(SPR_HID1), "r"(bsp_state)); - __asm __volatile("ld %0, 16(%2); sync; mtspr %1, %0; isync;" + __asm __volatile("ld %0, 8(%2); sync; isync; \ + mtspr %1, %0; mtspr %1, %0; sync; isync" + : "=r"(reg) : "K"(SPR_HID1), "r"(bsp_state)); + __asm __volatile("ld %0, 16(%2); sync; isync; \ + mtspr %1, %0; sync; isync;" : "=r"(reg) : "K"(SPR_HID4), "r"(bsp_state)); - __asm __volatile("ld %0, 24(%2); sync; mtspr %1, %0; isync;" + __asm __volatile("ld %0, 24(%2); sync; isync; \ + mtspr %1, %0; sync; isync;" : "=r"(reg) : "K"(SPR_HID5), "r"(bsp_state)); powerpc_sync();