[PATCH bpf-next v1] selftests/bpf: Add get_preempt_count() support for RISC-V

Tiezhu Yang posted 1 patch 2 days, 21 hours ago
tools/testing/selftests/bpf/bpf_experimental.h | 7 +++++++
1 file changed, 7 insertions(+)
[PATCH bpf-next v1] selftests/bpf: Add get_preempt_count() support for RISC-V
Posted by Tiezhu Yang 2 days, 21 hours ago
Currently, there is no RISC-V support for get_preempt_count() and
its fallback path always returns 0.

Add it so that bpf_in_interrupt(), bpf_in_nmi(), bpf_in_hardirq(),
bpf_in_serving_softirq(), and bpf_in_task() work for RISC-V as well.

Given that RISC-V has supported CONFIG_THREAD_INFO_IN_TASK since its
initial commit fbe934d69eb7 ("RISC-V: Build Infrastructure") in 2017,
directly retrieve preempt_count from the thread_info embedded within
task_struct via bpf_get_current_task_btf().

This aligns the implementation with arm64, powerpc, and loongarch.

Tested on a RISC-V virtual machine.

Before:
  $ sudo ./test_progs -t exe_ctx
  ...
  #114     exe_ctx:FAIL
  Summary: 0/0 PASSED, 0 SKIPPED, 1 FAILED

After:
  $ sudo ./test_progs -t exe_ctx
  #114     exe_ctx:OK
  Summary: 1/0 PASSED, 0 SKIPPED, 0 FAILED

Signed-off-by: Tiezhu Yang <yangtiezhu@loongson.cn>
Tested-by: Pu Lehui <pulehui@huawei.com>
Reviewed-by: Pu Lehui <pulehui@huawei.com>
---
RFC -> v1:
  -- No code changes
  -- Update the commit message
  -- Add Tested-by and Reviewed-by
https://lore.kernel.org/bpf/0191fe3f-b956-480d-aef2-a4d75f9e02de@huawei.com/

 tools/testing/selftests/bpf/bpf_experimental.h | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/tools/testing/selftests/bpf/bpf_experimental.h b/tools/testing/selftests/bpf/bpf_experimental.h
index 67ff7882299e..ff37ae5a113d 100644
--- a/tools/testing/selftests/bpf/bpf_experimental.h
+++ b/tools/testing/selftests/bpf/bpf_experimental.h
@@ -425,6 +425,8 @@ static inline int get_preempt_count(void)
 	return bpf_get_lowcore()->preempt_count;
 #elif defined(bpf_target_loongarch)
 	return bpf_get_current_task_btf()->thread_info.preempt_count;
+#elif defined(bpf_target_riscv)
+	return bpf_get_current_task_btf()->thread_info.preempt_count;
 #endif
 	return 0;
 }
@@ -436,6 +438,7 @@ static inline int get_preempt_count(void)
  *	* powerpc64
  *	* s390x
  *	* loongarch
+ *	* riscv
  */
 static inline int bpf_in_interrupt(void)
 {
@@ -458,6 +461,7 @@ static inline int bpf_in_interrupt(void)
  *	* powerpc64
  *	* s390x
  *	* loongarch
+ *	* riscv
  */
 static inline int bpf_in_nmi(void)
 {
@@ -471,6 +475,7 @@ static inline int bpf_in_nmi(void)
  *	* powerpc64
  *	* s390x
  *	* loongarch
+ *	* riscv
  */
 static inline int bpf_in_hardirq(void)
 {
@@ -484,6 +489,7 @@ static inline int bpf_in_hardirq(void)
  *	* powerpc64
  *	* s390x
  *	* loongarch
+ *	* riscv
  */
 static inline int bpf_in_serving_softirq(void)
 {
@@ -505,6 +511,7 @@ static inline int bpf_in_serving_softirq(void)
  *	* powerpc64
  *	* s390x
  *	* loongarch
+ *	* riscv
  */
 static inline int bpf_in_task(void)
 {
-- 
2.42.0
Re: [PATCH bpf-next v1] selftests/bpf: Add get_preempt_count() support for RISC-V
Posted by Pu Lehui 2 days, 20 hours ago
Hi Tiezhu,

Thanks to respin it, we need this to cover more selftests.

On 2026/7/22 10:29, Tiezhu Yang wrote:
> Currently, there is no RISC-V support for get_preempt_count() and
> its fallback path always returns 0.
> 
> Add it so that bpf_in_interrupt(), bpf_in_nmi(), bpf_in_hardirq(),
> bpf_in_serving_softirq(), and bpf_in_task() work for RISC-V as well.
> 
> Given that RISC-V has supported CONFIG_THREAD_INFO_IN_TASK since its
> initial commit fbe934d69eb7 ("RISC-V: Build Infrastructure") in 2017,
> directly retrieve preempt_count from the thread_info embedded within
> task_struct via bpf_get_current_task_btf().
> 
> This aligns the implementation with arm64, powerpc, and loongarch.
> 
> Tested on a RISC-V virtual machine.
> 
> Before:
>    $ sudo ./test_progs -t exe_ctx
>    ...
>    #114     exe_ctx:FAIL
>    Summary: 0/0 PASSED, 0 SKIPPED, 1 FAILED
> 
> After:
>    $ sudo ./test_progs -t exe_ctx
>    #114     exe_ctx:OK
>    Summary: 1/0 PASSED, 0 SKIPPED, 0 FAILED
> 
> Signed-off-by: Tiezhu Yang <yangtiezhu@loongson.cn>
> Tested-by: Pu Lehui <pulehui@huawei.com>
> Reviewed-by: Pu Lehui <pulehui@huawei.com>
> ---
> RFC -> v1:
>    -- No code changes
>    -- Update the commit message
>    -- Add Tested-by and Reviewed-by
> https://lore.kernel.org/bpf/0191fe3f-b956-480d-aef2-a4d75f9e02de@huawei.com/
> 
>   tools/testing/selftests/bpf/bpf_experimental.h | 7 +++++++
>   1 file changed, 7 insertions(+)
> 
> diff --git a/tools/testing/selftests/bpf/bpf_experimental.h b/tools/testing/selftests/bpf/bpf_experimental.h
> index 67ff7882299e..ff37ae5a113d 100644
> --- a/tools/testing/selftests/bpf/bpf_experimental.h
> +++ b/tools/testing/selftests/bpf/bpf_experimental.h
> @@ -425,6 +425,8 @@ static inline int get_preempt_count(void)
>   	return bpf_get_lowcore()->preempt_count;
>   #elif defined(bpf_target_loongarch)
>   	return bpf_get_current_task_btf()->thread_info.preempt_count;
> +#elif defined(bpf_target_riscv)
> +	return bpf_get_current_task_btf()->thread_info.preempt_count;
>   #endif
>   	return 0;
>   }
> @@ -436,6 +438,7 @@ static inline int get_preempt_count(void)
>    *	* powerpc64
>    *	* s390x
>    *	* loongarch
> + *	* riscv
>    */
>   static inline int bpf_in_interrupt(void)
>   {
> @@ -458,6 +461,7 @@ static inline int bpf_in_interrupt(void)
>    *	* powerpc64
>    *	* s390x
>    *	* loongarch
> + *	* riscv
>    */
>   static inline int bpf_in_nmi(void)
>   {
> @@ -471,6 +475,7 @@ static inline int bpf_in_nmi(void)
>    *	* powerpc64
>    *	* s390x
>    *	* loongarch
> + *	* riscv
>    */
>   static inline int bpf_in_hardirq(void)
>   {
> @@ -484,6 +489,7 @@ static inline int bpf_in_hardirq(void)
>    *	* powerpc64
>    *	* s390x
>    *	* loongarch
> + *	* riscv
>    */
>   static inline int bpf_in_serving_softirq(void)
>   {
> @@ -505,6 +511,7 @@ static inline int bpf_in_serving_softirq(void)
>    *	* powerpc64
>    *	* s390x
>    *	* loongarch
> + *	* riscv
>    */
>   static inline int bpf_in_task(void)
>   {