From: Jim Cromie <[email protected]> Dyndbg classmaps converts ~5,700 DRM debug callsites into static keys, yielding 0-off-cost NOOPs that never touch memory. However, several call patterns do not fit the direct drm_dbg() macro model; notably open-coded drm_debug_enabled() guard blocks, drm_dbg_printer(), and ratelimited helpers.
In upstream, the linker places __drm_debug in the same 64-byte cacheline as hot writers: drm_lease_idr_object, drm_global_mutex. Writes to those locks issue Request-For-Ownership (RFO) invalidations across cores, leaving those residual bit-tests to suffer 7 false-sharing hazards and continuous cache bouncing during active rendering (e.g. 12 concurrent vkcube clients). In contrast, writes to __drm_debug occur almost never, only when userspace updates "/sys/module/drm/parameters/debug". So mark __drm_debug with __read_mostly. This isolates it from the 7 writable symbols it currently shares a cache-line with, eliminating those invalidations. Signed-off-by: Jim Cromie <[email protected]> --- drivers/gpu/drm/drm_print.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/gpu/drm/drm_print.c b/drivers/gpu/drm/drm_print.c index 794417c62097..1ec139c8f06f 100644 --- a/drivers/gpu/drm/drm_print.c +++ b/drivers/gpu/drm/drm_print.c @@ -40,7 +40,7 @@ * __drm_debug: Enable debug output. * Bitmask of DRM_UT_x. See include/drm/drm_print.h for details. */ -u32 __drm_debug; +u32 __drm_debug __read_mostly; EXPORT_SYMBOL(__drm_debug); MODULE_PARM_DESC(debug, "Enable debug output, where each bit enables a debug category.\n" -- 2.56.0
