From owner-p4-projects@FreeBSD.ORG Tue Apr 4 01:07:03 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 C4C1316A423; Tue, 4 Apr 2006 01:07:03 +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 8530616A420 for ; Tue, 4 Apr 2006 01:07:03 +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 16B9543D66 for ; Tue, 4 Apr 2006 01:06:58 +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 k3416wLa085212 for ; Tue, 4 Apr 2006 01:06:58 GMT (envelope-from kmacy@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.13.1/8.13.1/Submit) id k3416wpG085209 for perforce@freebsd.org; Tue, 4 Apr 2006 01:06:58 GMT (envelope-from kmacy@freebsd.org) Date: Tue, 4 Apr 2006 01:06:58 GMT Message-Id: <200604040106.k3416wpG085209@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 94570 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: Tue, 04 Apr 2006 01:07:04 -0000 http://perforce.freebsd.org/chv.cgi?CH=94570 Change 94570 by kmacy@kmacy_storage:sun4v_rwbuf on 2006/04/04 01:06:54 fix MP intrq initialization Affected files ... .. //depot/projects/kmacy_sun4v/src/sys/sun4v/conf/GENERIC#9 edit .. //depot/projects/kmacy_sun4v/src/sys/sun4v/sun4v/intr_machdep.c#6 edit .. //depot/projects/kmacy_sun4v/src/sys/sun4v/sun4v/mp_locore.S#3 edit .. //depot/projects/kmacy_sun4v/src/sys/sun4v/sun4v/mp_machdep.c#3 edit Differences ... ==== //depot/projects/kmacy_sun4v/src/sys/sun4v/conf/GENERIC#9 (text+ko) ==== @@ -71,7 +71,7 @@ #options WITNESS_SKIPSPIN # Don't run witness on spinlocks for speed # To make an SMP kernel, the next line is needed -#options SMP # Symmetric MultiProcessor Kernel +options SMP # Symmetric MultiProcessor Kernel # Standard busses device pci ==== //depot/projects/kmacy_sun4v/src/sys/sun4v/sun4v/intr_machdep.c#6 (text+ko) ==== @@ -417,34 +417,31 @@ uint64_t error; - pcpup->pc_mondo_data = mondo_data_array + curcpu*INTR_REPORT_SIZE; + pcpup->pc_mondo_data = (vm_offset_t *) ((char *)mondo_data_array + curcpu*INTR_REPORT_SIZE); pcpup->pc_mondo_data_ra = vtophys(pcpup->pc_mondo_data); - - pcpup->pc_cpu_list = cpu_list_array + curcpu*cpu_list_size; - pcpup->pc_cpu_list_ra = vtophys(pcpup->pc_cpu_list); - - pcpup->pc_cpu_q = cpu_q_array + curcpu*INTR_CPU_Q_SIZE; + pcpup->pc_cpu_q = (vm_offset_t *)((char *)cpu_q_array + curcpu*INTR_CPU_Q_SIZE); pcpup->pc_cpu_q_ra = vtophys(pcpup->pc_cpu_q); pcpup->pc_cpu_q_size = INTR_CPU_Q_SIZE; - pcpup->pc_dev_q = dev_q_array + curcpu*INTR_DEV_Q_SIZE; + pcpup->pc_dev_q = (vm_offset_t *)((char *)dev_q_array + curcpu*INTR_DEV_Q_SIZE); pcpup->pc_dev_q_ra = vtophys(pcpup->pc_dev_q); pcpup->pc_dev_q_size = INTR_DEV_Q_SIZE; - pcpup->pc_rq = rq_array + curcpu*2*CPU_RQ_SIZE; + pcpup->pc_rq = (vm_offset_t *)((char *)rq_array + curcpu*2*CPU_RQ_SIZE); pcpup->pc_rq_ra = vtophys(pcpup->pc_rq); pcpup->pc_rq_size = CPU_RQ_SIZE; - pcpup->pc_nrq = nrq_array + curcpu*2*CPU_NRQ_SIZE; + pcpup->pc_nrq = (vm_offset_t *)((char *)nrq_array + curcpu*2*CPU_NRQ_SIZE); pcpup->pc_nrq_ra = vtophys(pcpup->pc_nrq); pcpup->pc_nrq_size = CPU_NRQ_SIZE; error = hv_cpu_qconf(Q(CPU_MONDO_QUEUE_HEAD), pcpup->pc_cpu_q_ra, cpu_q_entries); if (error != H_EOK) - panic("cpu_mondo queue configuration failed: %lu", error); + panic("cpu_mondo queue configuration failed: %lu va=%p ra=0x%lx", error, + pcpup->pc_cpu_q, pcpup->pc_cpu_q_ra); error = hv_cpu_qconf(Q(DEV_MONDO_QUEUE_HEAD), pcpup->pc_dev_q_ra, dev_q_entries); if (error != H_EOK) ==== //depot/projects/kmacy_sun4v/src/sys/sun4v/sun4v/mp_locore.S#3 (text+ko) ==== @@ -139,19 +139,15 @@ bne %xcc, 2b nop - PUTCHAR(0x2e) /* * Get onto our per-cpu panic stack, which precedes the struct pcpu * in the per-cpu page. */ ldx [%l0 + CSA_PCPU], %l1 - PUTCHAR(0x2e) set PCPU_PAGES * PAGE_SIZE - PC_SIZEOF, %l2 add %l1, %l2, %l1 sub %l1, SPOFF + CCFSZ, %sp - PUTCHAR(0x2e) wrpr %g0, PSTATE_KERNEL, %pstate - PUTCHAR(0x2e) #if KTR_COMPILE & KTR_SMP CATR(KTR_SMP, "_mp_start: bootstrap cpuid=%d mid=%d pcpu=%#lx data=%#lx sp=%#lx" ==== //depot/projects/kmacy_sun4v/src/sys/sun4v/sun4v/mp_machdep.c#3 (text+ko) ==== @@ -275,7 +275,6 @@ u_int clock; int cpuid, bp_skipped; u_long s; - printf("cpu_mp_start\n"); mtx_init(&ipi_mtx, "ipi", NULL, MTX_SPIN); root = OF_peer(0); @@ -318,7 +317,7 @@ pc->pc_node = child; all_cpus |= 1 << cpuid; - if (mp_ncpus == 8) + if (mp_ncpus == MAXCPU) break; } PCPU_SET(other_cpus, all_cpus & ~(1 << PCPU_GET(cpuid))); @@ -350,11 +349,11 @@ pc->pc_curpcb = pc->pc_curthread->td_pcb; pc->pc_curpmap = kernel_pmap; csa->csa_state = 0; -#if 1 - printf("unleashing cpuid=%d\n", pc->pc_cpuid); -#endif + csa->csa_pcpu = TLB_PHYS_TO_DIRECT(vtophys(pc->pc_addr)); + DELAY(300); + /* allow AP to run */ csa->csa_cpuid = pc->pc_cpuid; - csa->csa_pcpu = TLB_PHYS_TO_DIRECT(vtophys(pc->pc_addr)); + membar(Sync); s = intr_disable(); while (csa->csa_state != CPU_BOOTSTRAP) ; @@ -390,9 +389,9 @@ while (csa->csa_count != 0) ; #ifdef SIMULATOR + DELAY(300*PCPU_GET(cpuid)); +#else DELAY(300000*PCPU_GET(cpuid)); -#else - DELAY(300*PCPU_GET(cpuid)); #endif /* ok, now grab sched_lock and enter the scheduler */ #if 0