Date: Sun, 17 Sep 2017 03:53:52 +0000 From: bugzilla-noreply@freebsd.org To: freebsd-bugs@FreeBSD.org Subject: [Bug 222234] head -r323246 aarch64 (Pine64+ 2GB) boot time context, sometimes: acquiring blockable sleep lock with spinlock or critical section held Message-ID: <bug-222234-8-3lR3TlnYeG@https.bugs.freebsd.org/bugzilla/> In-Reply-To: <bug-222234-8@https.bugs.freebsd.org/bugzilla/> References: <bug-222234-8@https.bugs.freebsd.org/bugzilla/>
next in thread | previous in thread | raw e-mail | index | archive | help
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=3D222234 --- Comment #5 from Mark Millard <markmi@dsl-only.net> --- (In reply to Mark Millard from comment #4) I found ARMv7 material indicating the same sort of issue for sev use: The Event signal is seen to be a non-memory communication, and as such the update to memory releasing the lock must actually be observable by all observers when the SEV instruction is executed and the event is sent. This = then requires the use of DSB rather than DMB. There is: /usr/src/sys/arm/include/cpu-v6.h:#define sev() __asm __volatile("sev" : := : "memory") # grep -r 'sev()' /usr/src/sys/ | more /usr/src/sys/arm/altera/socfpga/socfpga_mp.c: sev(); /usr/src/sys/arm/allwinner/aw_mp.c: sev(); /usr/src/sys/arm/allwinner/aw_mp.c: sev(); /usr/src/sys/arm/mv/armada38x/pmsu.c: sev(); /usr/src/sys/arm/broadcom/bcm2835/bcm2836_mp.c: sev(); /usr/src/sys/arm/broadcom/bcm2835/bcm2836_mp.c: sev(); /usr/src/sys/arm/xilinx/zy7_mp.c: sev(); /usr/src/sys/arm/amlogic/aml8726/aml8726_mp.c: sev(); /usr/src/sys/arm/include/cpu-v6.h:#define sev() __asm __volatile("sev" : := : "memory") /usr/src/sys/arm/arm/mp_machdep.c: sev(); /usr/src/sys/arm/ti/omap4/omap4_mp.c: sev(); /usr/src/sys/arm/freescale/imx/imx6_mp.c: sev(); /usr/src/sys/arm/rockchip/rk30xx_mp.c: sev(); /usr/src/sys/arm/nvidia/tegra124/tegra124_mp.c: sev(); /usr/src/sys/arm/samsung/exynos/exynos5_mp.c: sev(); These all seem to have dsb use, for example /usr/src/sys/arm/arm/mp_machdep.c has: atomic_store_rel_int(&aps_ready, 1); /* Wake the other threads up */ dsb(); sev(); printf("Release APs\n"); in its release_aps . --=20 You are receiving this mail because: You are the assignee for the bug.=
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?bug-222234-8-3lR3TlnYeG>