From owner-svn-src-stable@freebsd.org Wed Sep 7 12:59:10 2016 Return-Path: Delivered-To: svn-src-stable@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 1D58EBC64D1; Wed, 7 Sep 2016 12:59:10 +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 mx1.freebsd.org (Postfix) with ESMTPS id C3E1118EC; Wed, 7 Sep 2016 12:59:09 +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 u87Cx8HQ086619; Wed, 7 Sep 2016 12:59:08 GMT (envelope-from andrew@FreeBSD.org) Received: (from andrew@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id u87Cx8r7086618; Wed, 7 Sep 2016 12:59:08 GMT (envelope-from andrew@FreeBSD.org) Message-Id: <201609071259.u87Cx8r7086618@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: andrew set sender to andrew@FreeBSD.org using -f From: Andrew Turner Date: Wed, 7 Sep 2016 12:59:08 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-11@freebsd.org Subject: svn commit: r305532 - stable/11/sys/arm64/arm64 X-SVN-Group: stable-11 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 07 Sep 2016 12:59:10 -0000 Author: andrew Date: Wed Sep 7 12:59:08 2016 New Revision: 305532 URL: https://svnweb.freebsd.org/changeset/base/305532 Log: MFC 303307, 303308, 303309 clean up the arm64 MP code: - Rework how we number CPUs on arm64 to try and keep clusters together. - Fix a typo in a string in a KASSERT to sanity check the CPU IDs. - Remove an unused variable. Obtained from: ABT Systems Ltd Sponsored by: The FreeBSD Foundation Modified: stable/11/sys/arm64/arm64/mp_machdep.c Directory Properties: stable/11/ (props changed) Modified: stable/11/sys/arm64/arm64/mp_machdep.c ============================================================================== --- stable/11/sys/arm64/arm64/mp_machdep.c Wed Sep 7 12:33:04 2016 (r305531) +++ stable/11/sys/arm64/arm64/mp_machdep.c Wed Sep 7 12:59:08 2016 (r305532) @@ -112,9 +112,6 @@ static int ipi_handler(void *arg); struct mtx ap_boot_mtx; struct pcb stoppcbs[MAXCPU]; -#ifdef INVARIANTS -static uint32_t cpu_reg[MAXCPU][2]; -#endif static device_t cpu_list[MAXCPU]; /* @@ -441,22 +438,22 @@ cpu_init_fdt(u_int id, phandle_t node, u if (id > mp_maxid) return (0); - KASSERT(id < MAXCPU, ("Too mant CPUs")); - - KASSERT(addr_size == 1 || addr_size == 2, ("Invalid register size")); -#ifdef INVARIANTS - cpu_reg[id][0] = reg[0]; - if (addr_size == 2) - cpu_reg[id][1] = reg[1]; -#endif + KASSERT(id < MAXCPU, ("Too many CPUs")); /* We are already running on cpu 0 */ if (id == cpu0) return (1); + /* + * Rotate the CPU IDs to put the boot CPU as CPU 0. We keep the other + * CPUs ordered as the are likely grouped into clusters so it can be + * useful to keep that property, e.g. for the GICv3 driver to send + * an IPI to all CPUs in the cluster. + */ cpuid = id; if (cpuid < cpu0) - cpuid++; + cpuid += mp_maxid + 1; + cpuid -= cpu0; pcpup = &__pcpu[cpuid]; pcpu_init(pcpup, cpuid, sizeof(struct pcpu));