Module Name: src Committed By: riastradh Date: Mon Feb 13 12:00:18 UTC 2023
Modified Files: src/sys/arch/mips/include: asm.h Log Message: mips/asm.h: Cite source for Cavium sync plunger business. To generate a diff of this commit: cvs rdiff -u -r1.71 -r1.72 src/sys/arch/mips/include/asm.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/mips/include/asm.h diff -u src/sys/arch/mips/include/asm.h:1.71 src/sys/arch/mips/include/asm.h:1.72 --- src/sys/arch/mips/include/asm.h:1.71 Thu Apr 21 12:06:31 2022 +++ src/sys/arch/mips/include/asm.h Mon Feb 13 12:00:18 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: asm.h,v 1.71 2022/04/21 12:06:31 riastradh Exp $ */ +/* $NetBSD: asm.h,v 1.72 2023/02/13 12:00:18 riastradh Exp $ */ /* * Copyright (c) 1992, 1993 @@ -582,7 +582,30 @@ _C_LABEL(x): * we need to apply a plunger to it _after_ releasing a lock or else * other CPUs may spin for hundreds of thousands of cycles before they * see the lock is released. So we also have the quirky SYNC_PLUNGER - * barrier as syncw. + * barrier as syncw. See the note in the SYNCW instruction description + * on p. 2168 of Cavium OCTEON III CN78XX Hardware Reference Manual, + * CN78XX-HM-0.99E, September 2014: + * + * Core A (writer) + * + * SW R1, DATA# change shared DATA value + * LI R1, 1 + * SYNCW# (or SYNCWS) Perform DATA store before performing FLAG store + * SW R2, FLAG# say that the shared DATA value is valid + * SYNCW# (or SYNCWS) Force the FLAG store soon (CN78XX-specific) + * + * ... + * + * The second SYNCW instruction executed by core A is not + * necessary for correctness, but has very important performance + * effects on the CN78XX. Without it, the store to FLAG may + * linger in core A's write buffer before it becomes visible to + * any other cores. (If core A is not performing many stores, + * this may add hundreds of thousands of cycles to the flag + * release time since the CN78XX core nominally retains stores to + * attempt to merge them before sending the store on the CMI.) + * Applications should include this second SYNCW instruction after + * flag or lock release. */ #define LLSCSYNC /* nothing */ #define BDSYNC sync