From owner-svn-src-head@freebsd.org Sat Jul 28 07:54:22 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 9692010455A7; Sat, 28 Jul 2018 07:54:22 +0000 (UTC) (envelope-from andrew@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 44AFD8017B; Sat, 28 Jul 2018 07:54:22 +0000 (UTC) (envelope-from andrew@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 22F4A23DD5; Sat, 28 Jul 2018 07:54:22 +0000 (UTC) (envelope-from andrew@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id w6S7sMcY036014; Sat, 28 Jul 2018 07:54:22 GMT (envelope-from andrew@FreeBSD.org) Received: (from andrew@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w6S7sLY3036012; Sat, 28 Jul 2018 07:54:21 GMT (envelope-from andrew@FreeBSD.org) Message-Id: <201807280754.w6S7sLY3036012@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: andrew set sender to andrew@FreeBSD.org using -f From: Andrew Turner Date: Sat, 28 Jul 2018 07:54:21 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r336806 - in head/sys: arm/arm arm/include conf X-SVN-Group: head X-SVN-Commit-Author: andrew X-SVN-Commit-Paths: in head/sys: arm/arm arm/include conf X-SVN-Commit-Revision: 336806 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.27 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, 28 Jul 2018 07:54:22 -0000 Author: andrew Date: Sat Jul 28 07:54:21 2018 New Revision: 336806 URL: https://svnweb.freebsd.org/changeset/base/336806 Log: Only support INTRNG in the SMP code on arm. We already require INTRNG on anything that could be multicore on arm. Modified: head/sys/arm/arm/mp_machdep.c head/sys/arm/include/smp.h head/sys/conf/options.arm Modified: head/sys/arm/arm/mp_machdep.c ============================================================================== --- head/sys/arm/arm/mp_machdep.c Sat Jul 28 07:37:01 2018 (r336805) +++ head/sys/arm/arm/mp_machdep.c Sat Jul 28 07:54:21 2018 (r336806) @@ -26,7 +26,6 @@ * SUCH DAMAGE. */ #include "opt_ddb.h" -#include "opt_smp.h" #include __FBSDID("$FreeBSD$"); @@ -75,9 +74,6 @@ volatile int mp_naps; /* Set to 1 once we're ready to let the APs out of the pen. */ volatile int aps_ready = 0; -#ifndef INTRNG -static int ipi_handler(void *arg); -#endif void set_stackptrs(int cpu); /* Temporary variables for init_secondary() */ @@ -153,9 +149,6 @@ init_secondary(int cpu) { struct pcpu *pc; uint32_t loop_counter; -#ifndef INTRNG - int start = 0, end = 0; -#endif pmap_set_tex(); cpuinfo_reinit_mmu(pmap_kern_ttb); @@ -215,20 +208,6 @@ init_secondary(int cpu) mtx_unlock_spin(&ap_boot_mtx); -#ifndef INTRNG - /* Enable ipi */ -#ifdef IPI_IRQ_START - start = IPI_IRQ_START; -#ifdef IPI_IRQ_END - end = IPI_IRQ_END; -#else - end = IPI_IRQ_START; -#endif -#endif - - for (int i = start; i <= end; i++) - arm_unmask_irq(i); -#endif /* INTRNG */ enable_interrupts(PSR_I); loop_counter = 0; @@ -250,7 +229,6 @@ init_secondary(int cpu) /* NOTREACHED */ } -#ifdef INTRNG static void ipi_rendezvous(void *dummy __unused) { @@ -347,126 +325,20 @@ ipi_hardclock(void *arg) critical_exit(); } -#else -static int -ipi_handler(void *arg) -{ - u_int cpu, ipi; - - cpu = PCPU_GET(cpuid); - - ipi = pic_ipi_read((int)arg); - - while ((ipi != 0x3ff)) { - switch (ipi) { - case IPI_RENDEZVOUS: - CTR0(KTR_SMP, "IPI_RENDEZVOUS"); - smp_rendezvous_action(); - break; - - case IPI_AST: - CTR0(KTR_SMP, "IPI_AST"); - break; - - case IPI_STOP: - /* - * IPI_STOP_HARD is mapped to IPI_STOP so it is not - * necessary to add it in the switch. - */ - CTR0(KTR_SMP, "IPI_STOP or IPI_STOP_HARD"); - - savectx(&stoppcbs[cpu]); - - /* - * CPUs are stopped when entering the debugger and at - * system shutdown, both events which can precede a - * panic dump. For the dump to be correct, all caches - * must be flushed and invalidated, but on ARM there's - * no way to broadcast a wbinv_all to other cores. - * Instead, we have each core do the local wbinv_all as - * part of stopping the core. The core requesting the - * stop will do the l2 cache flush after all other cores - * have done their l1 flushes and stopped. - */ - dcache_wbinv_poc_all(); - - /* Indicate we are stopped */ - CPU_SET_ATOMIC(cpu, &stopped_cpus); - - /* Wait for restart */ - while (!CPU_ISSET(cpu, &started_cpus)) - cpu_spinwait(); - - CPU_CLR_ATOMIC(cpu, &started_cpus); - CPU_CLR_ATOMIC(cpu, &stopped_cpus); -#ifdef DDB - dbg_resume_dbreg(); -#endif - CTR0(KTR_SMP, "IPI_STOP (restart)"); - break; - case IPI_PREEMPT: - CTR1(KTR_SMP, "%s: IPI_PREEMPT", __func__); - sched_preempt(curthread); - break; - case IPI_HARDCLOCK: - CTR1(KTR_SMP, "%s: IPI_HARDCLOCK", __func__); - hardclockintr(); - break; - default: - panic("Unknown IPI 0x%0x on cpu %d", ipi, curcpu); - } - - pic_ipi_clear(ipi); - ipi = pic_ipi_read(-1); - } - - return (FILTER_HANDLED); -} -#endif - static void release_aps(void *dummy __unused) { uint32_t loop_counter; -#ifndef INTRNG - int start = 0, end = 0; -#endif if (mp_ncpus == 1) return; -#ifdef INTRNG intr_pic_ipi_setup(IPI_RENDEZVOUS, "rendezvous", ipi_rendezvous, NULL); intr_pic_ipi_setup(IPI_AST, "ast", ipi_ast, NULL); intr_pic_ipi_setup(IPI_STOP, "stop", ipi_stop, NULL); intr_pic_ipi_setup(IPI_PREEMPT, "preempt", ipi_preempt, NULL); intr_pic_ipi_setup(IPI_HARDCLOCK, "hardclock", ipi_hardclock, NULL); -#else -#ifdef IPI_IRQ_START - start = IPI_IRQ_START; -#ifdef IPI_IRQ_END - end = IPI_IRQ_END; -#else - end = IPI_IRQ_START; -#endif -#endif - for (int i = start; i <= end; i++) { - /* - * IPI handler - */ - /* - * Use 0xdeadbeef as the argument value for irq 0, - * if we used 0, the intr code will give the trap frame - * pointer instead. - */ - arm_setup_irqhandler("ipi", ipi_handler, NULL, (void *)i, i, - INTR_TYPE_MISC | INTR_EXCL, NULL); - - /* Enable ipi */ - arm_unmask_irq(i); - } -#endif atomic_store_rel_int(&aps_ready, 1); /* Wake the other threads up */ dsb(); @@ -507,11 +379,7 @@ ipi_all_but_self(u_int ipi) other_cpus = all_cpus; CPU_CLR(PCPU_GET(cpuid), &other_cpus); CTR2(KTR_SMP, "%s: ipi: %x", __func__, ipi); -#ifdef INTRNG intr_ipi_send(other_cpus, ipi); -#else - pic_ipi_send(other_cpus, ipi); -#endif } void @@ -523,11 +391,7 @@ ipi_cpu(int cpu, u_int ipi) CPU_SET(cpu, &cpus); CTR3(KTR_SMP, "%s: cpu: %d, ipi: %x", __func__, cpu, ipi); -#ifdef INTRNG intr_ipi_send(cpus, ipi); -#else - pic_ipi_send(cpus, ipi); -#endif } void @@ -535,9 +399,5 @@ ipi_selected(cpuset_t cpus, u_int ipi) { CTR2(KTR_SMP, "%s: ipi: %x", __func__, ipi); -#ifdef INTRNG intr_ipi_send(cpus, ipi); -#else - pic_ipi_send(cpus, ipi); -#endif } Modified: head/sys/arm/include/smp.h ============================================================================== --- head/sys/arm/include/smp.h Sat Jul 28 07:37:01 2018 (r336805) +++ head/sys/arm/include/smp.h Sat Jul 28 07:54:21 2018 (r336806) @@ -6,7 +6,6 @@ #include #include -#ifdef INTRNG enum { IPI_AST, IPI_PREEMPT, @@ -18,16 +17,6 @@ enum { IPI_CACHE, /* Not used now, but keep it reserved. */ INTR_IPI_COUNT }; -#else -#define IPI_AST 0 -#define IPI_PREEMPT 2 -#define IPI_RENDEZVOUS 3 -#define IPI_STOP 4 -#define IPI_STOP_HARD 4 -#define IPI_HARDCLOCK 6 -#define IPI_TLB 7 /* Not used now, but keep it reserved. */ -#define IPI_CACHE 8 /* Not used now, but keep it reserved. */ -#endif /* INTRNG */ void init_secondary(int cpu); void mpentry(void); @@ -35,13 +24,6 @@ void mpentry(void); void ipi_all_but_self(u_int ipi); void ipi_cpu(int cpu, u_int ipi); void ipi_selected(cpuset_t cpus, u_int ipi); - -/* PIC interface */ -#ifndef INTRNG -void pic_ipi_send(cpuset_t cpus, u_int ipi); -void pic_ipi_clear(int ipi); -int pic_ipi_read(int arg); -#endif /* Platform interface */ void platform_mp_setmaxid(void); Modified: head/sys/conf/options.arm ============================================================================== --- head/sys/conf/options.arm Sat Jul 28 07:37:01 2018 (r336805) +++ head/sys/conf/options.arm Sat Jul 28 07:54:21 2018 (r336806) @@ -23,8 +23,6 @@ EFI opt_platform.h FLASHADDR opt_global.h GIC_DEFAULT_ICFGR_INIT opt_global.h INTRNG opt_global.h -IPI_IRQ_START opt_smp.h -IPI_IRQ_END opt_smp.h FREEBSD_BOOT_LOADER opt_global.h KERNBASE opt_global.h KERNVIRTADDR opt_global.h