Module Name: src Committed By: jmcneill Date: Wed Jun 12 10:00:09 UTC 2019
Modified Files: src/sys/arch/arm/cortex: gicv3_its.c gicv3_its.h Log Message: Fail gracefully if gicv3_its_set_affinity is called before a cpu is brought online. To generate a diff of this commit: cvs rdiff -u -r1.10 -r1.11 src/sys/arch/arm/cortex/gicv3_its.c cvs rdiff -u -r1.4 -r1.5 src/sys/arch/arm/cortex/gicv3_its.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/arm/cortex/gicv3_its.c diff -u src/sys/arch/arm/cortex/gicv3_its.c:1.10 src/sys/arch/arm/cortex/gicv3_its.c:1.11 --- src/sys/arch/arm/cortex/gicv3_its.c:1.10 Sat Dec 8 15:04:40 2018 +++ src/sys/arch/arm/cortex/gicv3_its.c Wed Jun 12 10:00:09 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: gicv3_its.c,v 1.10 2018/12/08 15:04:40 jmcneill Exp $ */ +/* $NetBSD: gicv3_its.c,v 1.11 2019/06/12 10:00:09 jmcneill Exp $ */ /*- * Copyright (c) 2018 The NetBSD Foundation, Inc. @@ -32,7 +32,7 @@ #define _INTR_PRIVATE #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: gicv3_its.c,v 1.10 2018/12/08 15:04:40 jmcneill Exp $"); +__KERNEL_RCSID(0, "$NetBSD: gicv3_its.c,v 1.11 2019/06/12 10:00:09 jmcneill Exp $"); #include <sys/param.h> #include <sys/kmem.h> @@ -719,6 +719,8 @@ gicv3_its_cpu_init(void *priv, struct cp gits_command_mapc(its, cpu_index(ci), rdbase, true); gits_command_invall(its, cpu_index(ci)); gits_wait(its); + + its->its_cpuonline[cpu_index(ci)] = true; } static void @@ -749,6 +751,8 @@ gicv3_its_set_affinity(void *priv, size_ return EINVAL; ci = cpu_lookup(kcpuset_ffs(affinity) - 1); + if (its->its_cpuonline[cpu_index(ci)] == false) + return ENXIO; const uint32_t devid = gicv3_its_devid(pa->pa_pc, pa->pa_tag); gits_command_movi(its, devid, devid, cpu_index(ci)); Index: src/sys/arch/arm/cortex/gicv3_its.h diff -u src/sys/arch/arm/cortex/gicv3_its.h:1.4 src/sys/arch/arm/cortex/gicv3_its.h:1.5 --- src/sys/arch/arm/cortex/gicv3_its.h:1.4 Wed Nov 28 22:54:11 2018 +++ src/sys/arch/arm/cortex/gicv3_its.h Wed Jun 12 10:00:09 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: gicv3_its.h,v 1.4 2018/11/28 22:54:11 jmcneill Exp $ */ +/* $NetBSD: gicv3_its.h,v 1.5 2019/06/12 10:00:09 jmcneill Exp $ */ /*- * Copyright (c) 2018 The NetBSD Foundation, Inc. @@ -53,6 +53,7 @@ struct gicv3_its { uint32_t its_id; uint64_t its_base; uint64_t its_rdbase[MAXCPUS]; + bool its_cpuonline[MAXCPUS]; struct gicv3_softc *its_gic; struct gicv3_lpi_callback its_cb;