]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
selftests/bpf: Add get_preempt_count() support for LoongArch
authorTiezhu Yang <yangtiezhu@loongson.cn>
Thu, 25 Jun 2026 05:08:57 +0000 (13:08 +0800)
committerHuacai Chen <chenhuacai@loongson.cn>
Thu, 25 Jun 2026 05:08:57 +0000 (13:08 +0800)
There is no LoongArch support for get_preempt_count() currently and its
fallback path always returns 0, just add it so that bpf_in_interrupt(),
bpf_in_nmi(), bpf_in_hardirq(), bpf_in_serving_softirq(), bpf_in_task()
work for LoongArch as well.

The latest kernels select CONFIG_THREAD_INFO_IN_TASK, it can just read
preempt_count from the thread_info which is embedded within task_struct.

With this patch, "./test_progs -t exe_ctx" passes on LoongArch.

Signed-off-by: Tiezhu Yang <yangtiezhu@loongson.cn>
Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
tools/testing/selftests/bpf/bpf_experimental.h

index d1db355e872b9d7cbd104c539c25e53f4d2d76c3..67ff7882299ec5cd16147dc0299aa9495646e789 100644 (file)
@@ -423,6 +423,8 @@ static inline int get_preempt_count(void)
        return bpf_get_current_task_btf()->thread_info.preempt_count;
 #elif defined(bpf_target_s390)
        return bpf_get_lowcore()->preempt_count;
+#elif defined(bpf_target_loongarch)
+       return bpf_get_current_task_btf()->thread_info.preempt_count;
 #endif
        return 0;
 }
@@ -433,6 +435,7 @@ static inline int get_preempt_count(void)
  *     * arm64
  *     * powerpc64
  *     * s390x
+ *     * loongarch
  */
 static inline int bpf_in_interrupt(void)
 {
@@ -454,6 +457,7 @@ static inline int bpf_in_interrupt(void)
  *     * arm64
  *     * powerpc64
  *     * s390x
+ *     * loongarch
  */
 static inline int bpf_in_nmi(void)
 {
@@ -466,6 +470,7 @@ static inline int bpf_in_nmi(void)
  *     * arm64
  *     * powerpc64
  *     * s390x
+ *     * loongarch
  */
 static inline int bpf_in_hardirq(void)
 {
@@ -478,6 +483,7 @@ static inline int bpf_in_hardirq(void)
  *     * arm64
  *     * powerpc64
  *     * s390x
+ *     * loongarch
  */
 static inline int bpf_in_serving_softirq(void)
 {
@@ -498,6 +504,7 @@ static inline int bpf_in_serving_softirq(void)
  *     * arm64
  *     * powerpc64
  *     * s390x
+ *     * loongarch
  */
 static inline int bpf_in_task(void)
 {