https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=222234
--- Comment #5 from Mark Millard <[email protected]> --- (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 . -- You are receiving this mail because: You are the assignee for the bug. _______________________________________________ [email protected] mailing list https://lists.freebsd.org/mailman/listinfo/freebsd-bugs To unsubscribe, send any mail to "[email protected]"
