From owner-p4-projects@FreeBSD.ORG Thu Apr 17 00:20:59 2003 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 6C83637B405; Thu, 17 Apr 2003 00:20:59 -0700 (PDT) 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 15A7837B401 for ; Thu, 17 Apr 2003 00:20:59 -0700 (PDT) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id 26C8943FA3 for ; Thu, 17 Apr 2003 00:20:58 -0700 (PDT) (envelope-from marcel@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.12.6/8.12.6) with ESMTP id h3H7Kv0U073022 for ; Thu, 17 Apr 2003 00:20:57 -0700 (PDT) (envelope-from marcel@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.12.6/8.12.6/Submit) id h3H7KvF2073016 for perforce@freebsd.org; Thu, 17 Apr 2003 00:20:57 -0700 (PDT) Date: Thu, 17 Apr 2003 00:20:57 -0700 (PDT) Message-Id: <200304170720.h3H7KvF2073016@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to marcel@freebsd.org using -f From: Marcel Moolenaar To: Perforce Change Reviews Subject: PERFORCE change 29107 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 17 Apr 2003 07:21:00 -0000 http://perforce.freebsd.org/chv.cgi?CH=29107 Change 29107 by marcel@marcel_nfs on 2003/04/17 00:20:18 Fix breakage I introduced by the previous commit to mp_machdep.c and move some code from locore.s to mp_machdep.c. The previous commit to mp_machdep.c was lacking the declaration of M_PMAP. We now initialize the pcpup pointer (and ar.k4) from C code. This makes it more visible than having it in locore.s. While here, remove the volatile modifiers from ap_stack and ap_pcpu. It's causing compile warnings without actually being required. While in locore.s, add explicit bundling and reschedule the instructions to get better packing. Also: don't define ar.k4 when we enter user space. It's an CPU invariant. Affected files ... .. //depot/projects/ia64_epc/sys/ia64/ia64/locore.s#10 edit .. //depot/projects/ia64_epc/sys/ia64/ia64/mp_machdep.c#6 edit Differences ... ==== //depot/projects/ia64_epc/sys/ia64/ia64/locore.s#10 (text+ko) ==== @@ -217,15 +217,9 @@ nop 0 ;; } -{ .mmi +{ .mmb srlz.d mov ar.k6=r30 - nop 0 - ;; -} -{ .mmb - mov ar.k4=r13 - nop 0 br.ret.sptk rp ;; } @@ -299,35 +293,50 @@ rfi .align 32 -2: movl r16 = ia64_vector_table // set up IVT early +2: +{ .mlx + mov ar.rsc = 0 + movl r16 = ia64_vector_table // set up IVT early ;; +} +{ .mlx mov cr.iva = r16 + movl r16 = ap_stack ;; +} +{ .mmi srlz.i ;; - movl r16 = ap_stack - movl r17 = ap_pcpu - mov ar.rsc = 0 - ;; ld8 r16 = [r16] - ld8 r17 = [r17] mov r18 = KSTACK_PAGES*PAGE_SIZE-SIZEOF_PCB-SIZEOF_TRAPFRAME-16 ;; - add sp = r18, r16 +} +{ .mlx mov ar.bspstore = r16 + movl gp = __gp ;; +} +{ .mmi loadrs - movl gp = __gp + ;; + alloc r17 = ar.pfs, 0, 0, 0, 0 + add sp = r18, r16 ;; - mov ar.k4 = r17 +} +{ .mfb mov ar.rsc = 3 - mov r13 = r17 /* gas doesn't know tp as an alias for r13 */ + nop 0 + br.call.sptk.few rp = ia64_ap_startup ;; - alloc r16 = ar.pfs, 0, 0, 0, 0 +} + /* NOT REACHED */ +9: +{ .mfb + nop 0 + nop 0 + br.sptk 9b ;; - br.call.sptk.few rp = ia64_ap_startup - /* NOT REACHED */ -9: br 9b +} END(os_boot_rendez) #endif /* !SMP */ ==== //depot/projects/ia64_epc/sys/ia64/ia64/mp_machdep.c#6 (text+ko) ==== @@ -56,6 +56,8 @@ #include #include +MALLOC_DECLARE(M_PMAP); + void ia64_ap_startup(void); extern vm_offset_t vhpt_base, vhpt_size; @@ -69,8 +71,8 @@ int mp_ipi_test = 0; /* Variables used by os_boot_rendez */ -volatile vm_offset_t ap_stack; -volatile struct pcpu *ap_pcpu; +void *ap_stack; +struct pcpu *ap_pcpu; volatile int ap_delay; volatile int ap_awake; volatile int ap_spin; @@ -86,6 +88,9 @@ __asm __volatile("mov cr.pta=%0;; srlz.i;;" :: "r" (vhpt_base + (1<<8) + (vhpt_size<<2) + 1)); + pcpup = ap_pcpu; + ia64_set_k4((intptr_t)pcpup); + map_pal_code(); map_port_space(); map_gateway_page();