From owner-p4-projects@FreeBSD.ORG Mon Apr 17 04:41:45 2006 Return-Path: X-Original-To: p4-projects@freebsd.org Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 2069A16A405; Mon, 17 Apr 2006 04:41:45 +0000 (UTC) X-Original-To: perforce@freebsd.org Delivered-To: perforce@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id F022616A402 for ; Mon, 17 Apr 2006 04:41:44 +0000 (UTC) (envelope-from kmacy@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id A083643D46 for ; Mon, 17 Apr 2006 04:41:44 +0000 (GMT) (envelope-from kmacy@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.13.1/8.13.1) with ESMTP id k3H4fixd083533 for ; Mon, 17 Apr 2006 04:41:44 GMT (envelope-from kmacy@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.13.1/8.13.1/Submit) id k3H4fir9083525 for perforce@freebsd.org; Mon, 17 Apr 2006 04:41:44 GMT (envelope-from kmacy@freebsd.org) Date: Mon, 17 Apr 2006 04:41:44 GMT Message-Id: <200604170441.k3H4fir9083525@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to kmacy@freebsd.org using -f From: Kip Macy To: Perforce Change Reviews Cc: Subject: PERFORCE change 95413 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 17 Apr 2006 04:41:45 -0000 http://perforce.freebsd.org/chv.cgi?CH=95413 Change 95413 by kmacy@kmacy_storage:sun4v_rwbuf on 2006/04/17 04:40:43 use intr_{disable,restore} functions add cpu_yield Affected files ... .. //depot/projects/kmacy_sun4v/src/sys/sun4v/sun4v/machdep.c#20 edit Differences ... ==== //depot/projects/kmacy_sun4v/src/sys/sun4v/sun4v/machdep.c#20 (text+ko) ==== @@ -122,6 +122,7 @@ int cold = 1; long Maxmem; long realmem; +cpumask_t ipi_ready_mask; char pcpu0[PCPU_PAGES * PAGE_SIZE]; struct trapframe frame0; @@ -245,8 +246,7 @@ td = curthread; if (td->td_md.md_spinlock_count == 0) { - pil = rdpr(pil); - wrpr(pil, 0, PIL_TICK); + pil = intr_disable(); td->td_md.md_saved_pil = pil; } td->td_md.md_spinlock_count++; @@ -261,8 +261,9 @@ td = curthread; critical_exit(); td->td_md.md_spinlock_count--; - if (td->td_md.md_spinlock_count == 0) - wrpr(pil, td->td_md.md_saved_pil, 0); + if (td->td_md.md_spinlock_count == 0) { + intr_restore(td->td_md.md_saved_pil); + } } unsigned @@ -319,9 +320,6 @@ OF_getprop(child, "clock-frequency", &clock, sizeof(clock)); - - - /* * Initialize the console before printing anything. */ @@ -354,7 +352,6 @@ mp_tramp = mp_tramp_alloc(); #endif - env = getenv("kernelname"); if (env != NULL) { strlcpy(kernelname, env, sizeof(kernelname)); @@ -364,6 +361,7 @@ /* * Initialize proc0 stuff (p_contested needs to be done early). */ + proc_linkup(&proc0, &ksegrp0, &thread0); proc0.p_md.md_sigtramp = NULL; proc0.p_md.md_utrap = NULL; @@ -396,7 +394,8 @@ */ pmap_bootstrap(end); - thread0.td_kstack = kstack0; + thread0.td_kstack = kstack0; + thread0.td_md.md_saved_pil = 0; thread0.td_pcb = (struct pcb *) (thread0.td_kstack + KSTACK_PAGES * PAGE_SIZE) - 1; thread0.td_pcb->pcb_kstack = (uint64_t)(((char *)thread0.td_pcb) - (CCFSZ + SPOFF)); @@ -735,11 +734,14 @@ void cpu_idle(void) { - /* shouldn't be needed - but.. */ - wrpr(pil, 0, 0); -#ifdef SMP - hv_cpu_yield(); -#endif + + if (rdpr(pil) != 0) + panic("pil in cpu_idle not 0 - %ld", rdpr(pil)); + if (rdpr(pstate) != 0x16) + panic("interrupts disabled in cpu_idle %ld", rdpr(pstate)); + /* XXX heinous hack begin*/ + + cpu_yield(); } int @@ -844,6 +846,7 @@ pcb = td->td_pcb; tf = td->td_frame; + tf->tf_fprs = ~FPRS_FEF; bcopy(pcb->pcb_ufp, fpregs->fr_regs, sizeof(fpregs->fr_regs)); fpregs->fr_fsr = tf->tf_fsr; fpregs->fr_gsr = tf->tf_gsr; @@ -901,3 +904,10 @@ mtx_pool_unlock(mtxpool_sleep, ut); return (ut); } + +void +cpu_yield(void) +{ + if (rdpr(pil) < PIL_TICK) + hv_cpu_yield(); +}