From 635e74e4cf82d0803f583d9b831821577962d03b Mon Sep 17 00:00:00 2001 From: Tony Zhu Date: Tue, 21 Nov 2023 16:48:02 +0800 Subject: [PATCH] SPLITLOCK test: add the README document of split lock test This document introduces what is split lock and how to test it in user mode. Signed-off-by: Tony Zhu --- splitlock/README.md | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 splitlock/README.md diff --git a/splitlock/README.md b/splitlock/README.md new file mode 100644 index 0000000..76a3d85 --- /dev/null +++ b/splitlock/README.md @@ -0,0 +1,28 @@ +# SPLIT LOCK + +## Description +A split lock is any atomic operation whose operand crosses two cache lines. +Since the operand spans two cache lines and the operation must be atomic, +the system locks the bus while the CPU accesses the two cache lines. + +A bus lock is acquired through either split locked access to writeback (WB) +memory or any locked access to non-WB memory. This is typically thousands of +cycles slower than an atomic operation within a cache line. It also disrupts +performance on other cores and brings the whole system to its knees. + +## Usage +make +./sl_test +1. Linux kernel driver will export the split_lock_detect flag to /proc/cpuinfo + if hardware supports this feature. +2. Test if the locked instruction will trigger #AC. If no split_lock_detect is + not set by default or it is split_lock_detect=warn, #AC will be triggered. + The boot parameter maybe fatal or ratelimit(ratelimit:1 max ratelimit:1000). + If split_lock_detect=fatal, split lock test will output Caught SIGBUS/#AC. + For more, please refer to handle_bus_lock in arch/x86/kernel/cpu/intel.c. +Examples of exception: +x86/split lock detection: #AC: sl_test/4354 took a split_lock trap at address: 0x401231 +x86/split lock detection: #DB: sl_test/5137 took a bus_lock trap at address: 0x4011f5 + +## Expected result +All test results should show pass, no fail.