Re: [RFC PATCH v2 03/14] kcov: add barriers to recursion guard in kcov_df_write

Yunseong Kim <[email protected]> Fri, 12 Jun 2026 14:55:50 +0200
Newsgroups org.kernel.vger.workflows,dev.linux.lists.llvm,org.kernel.vger.linux-doc,org.kernel.vger.linux-kbuild,org.kernel.vger.linux-kernel,org.kernel.vger.linux-kselftest,org.kernel.vger.rust-for-linux,org.kvack.linux-mm
Message-ID <[email protected]>
Hi Alexander,

> On Thu, Jun 11, 2026 at 6:21 PM Yunseong Kim <[email protected]> wrote:
>>
>> The recursion guard (bit-31 of kcov_df_seq) prevents reentry when
>> copy_from_kernel_nofault() or other called functions are instrumented
>> with INSTRUMENT_ALL. Without compiler barriers, the guard set/clear
>> can be reordered relative to the function body, making the protection
>> ineffective under optimization.
>>
>> Add barrier() after setting the guard and before clearing it, ensuring
>> the compiler does not move instrumented operations outside the guarded
>> region.
>>
>> Cc: Peter Zijlstra <[email protected]>
>> Signed-off-by: Yunseong Kim <[email protected]>
>> ---
>>  kernel/kcov_dataflow.c | 2 ++
> 
> Please merge this patch into the one introducing kcov_dataflow.c
> 

Understood. I'll merge them in v3.

>>  1 file changed, 2 insertions(+)
>>
>> diff --git a/kernel/kcov_dataflow.c b/kernel/kcov_dataflow.c
>> index df7e8bf70bfa..5248293280d5 100644
>> --- a/kernel/kcov_dataflow.c
>> +++ b/kernel/kcov_dataflow.c
>> @@ -86,6 +86,7 @@ kcov_df_write(u64 type_marker, u64 pc, u64 meta, void *ptr,
>>         if (t->kcov_df_seq & (1U << 31))
>>                 return;
>>         t->kcov_df_seq |= (1U << 31);
>> +       barrier();
> 
> Please make sure barriers have comments explaining which barriers they
> pair with (see kernel/kcov.c)

Thanks for the pointer. I see the existing implementation now and will align
my changes with it.

Best regards,
Yunseong