diff mbox series

[bpf] selftests/bpf: Fix a selftest compilation error with CONFIG_SMP=n

Message ID 20221212234617.4058942-1-yhs@fb.com (mailing list archive)
State Superseded
Delegated to: BPF
Headers show
Series [bpf] selftests/bpf: Fix a selftest compilation error with CONFIG_SMP=n | expand

Checks

Context Check Description
netdev/tree_selection success Clearly marked for bpf
netdev/apply fail Patch does not apply to bpf
bpf/vmtest-bpf-PR fail merge-conflict

Commit Message

Yonghong Song Dec. 12, 2022, 11:46 p.m. UTC
Kernel test robot reported bpf selftest build failure when CONFIG_SMP
is not set. The error message looks below:

  >> progs/rcu_read_lock.c:256:34: error: no member named 'last_wakee' in 'struct task_struct'
             last_wakee = task->real_parent->last_wakee;
                          ~~~~~~~~~~~~~~~~~  ^
     1 error generated.

When CONFIG_SMP is not set, the field 'last_wakee' is not available in struct
'task_struct'. Hence the above compilation failure. To fix the issue, let us
choose another field 'group_leader' which is available regardless of
CONDFIG_SMP set or not.

Reported-by: kernel test robot <lkp@intel.com>
Signed-off-by: Yonghong Song <yhs@fb.com>
---
 tools/testing/selftests/bpf/progs/rcu_read_lock.c      | 8 ++++----
 tools/testing/selftests/bpf/progs/task_kfunc_failure.c | 2 +-
 2 files changed, 5 insertions(+), 5 deletions(-)

Comments

David Vernet Dec. 12, 2022, 11:58 p.m. UTC | #1
On Mon, Dec 12, 2022 at 03:46:17PM -0800, Yonghong Song wrote:
> Kernel test robot reported bpf selftest build failure when CONFIG_SMP
> is not set. The error message looks below:
> 
>   >> progs/rcu_read_lock.c:256:34: error: no member named 'last_wakee' in 'struct task_struct'
>              last_wakee = task->real_parent->last_wakee;
>                           ~~~~~~~~~~~~~~~~~  ^
>      1 error generated.
> 
> When CONFIG_SMP is not set, the field 'last_wakee' is not available in struct
> 'task_struct'. Hence the above compilation failure. To fix the issue, let us
> choose another field 'group_leader' which is available regardless of
> CONDFIG_SMP set or not.

s/CONDFIG_SMP/CONFIG_SMP

> 
> Reported-by: kernel test robot <lkp@intel.com>
> Signed-off-by: Yonghong Song <yhs@fb.com>
> ---
>  tools/testing/selftests/bpf/progs/rcu_read_lock.c      | 8 ++++----
>  tools/testing/selftests/bpf/progs/task_kfunc_failure.c | 2 +-
>  2 files changed, 5 insertions(+), 5 deletions(-)
> 
> diff --git a/tools/testing/selftests/bpf/progs/rcu_read_lock.c b/tools/testing/selftests/bpf/progs/rcu_read_lock.c
> index 125f908024d3..5cecbdbbb16e 100644
> --- a/tools/testing/selftests/bpf/progs/rcu_read_lock.c
> +++ b/tools/testing/selftests/bpf/progs/rcu_read_lock.c
> @@ -288,13 +288,13 @@ int nested_rcu_region(void *ctx)
>  SEC("?fentry.s/" SYS_PREFIX "sys_getpgid")
>  int task_untrusted_non_rcuptr(void *ctx)
>  {
> -	struct task_struct *task, *last_wakee;
> +	struct task_struct *task, *group_leader;
>  
>  	task = bpf_get_current_task_btf();
>  	bpf_rcu_read_lock();
> -	/* the pointer last_wakee marked as untrusted */
> -	last_wakee = task->real_parent->last_wakee;
> -	(void)bpf_task_storage_get(&map_a, last_wakee, 0, 0);
> +	/* the pointer group_leader marked as untrusted */
> +	group_leader = task->real_parent->group_leader;
> +	(void)bpf_task_storage_get(&map_a, group_leader, 0, 0);
>  	bpf_rcu_read_unlock();
>  	return 0;
>  }
> diff --git a/tools/testing/selftests/bpf/progs/task_kfunc_failure.c b/tools/testing/selftests/bpf/progs/task_kfunc_failure.c
> index 87fa1db9d9b5..1b47b94dbca0 100644
> --- a/tools/testing/selftests/bpf/progs/task_kfunc_failure.c
> +++ b/tools/testing/selftests/bpf/progs/task_kfunc_failure.c
> @@ -73,7 +73,7 @@ int BPF_PROG(task_kfunc_acquire_trusted_walked, struct task_struct *task, u64 cl
>  	struct task_struct *acquired;
>  
>  	/* Can't invoke bpf_task_acquire() on a trusted pointer obtained from walking a struct. */
> -	acquired = bpf_task_acquire(task->last_wakee);
> +	acquired = bpf_task_acquire(task->group_leader);

Ah, I missed that you'd sent this out before I sent out [0]. Thanks for
fixing this for me. I'm fine with just merging this patch and dropping
[0] if it's easier for the maintainers.

[0]: https://lore.kernel.org/all/20221212235344.1563280-1-void@manifault.com/

>  	bpf_task_release(acquired);
>  
>  	return 0;
> -- 
> 2.30.2
>
David Vernet Dec. 12, 2022, 11:58 p.m. UTC | #2
On Mon, Dec 12, 2022 at 05:58:20PM -0600, David Vernet wrote:
> On Mon, Dec 12, 2022 at 03:46:17PM -0800, Yonghong Song wrote:
> > Kernel test robot reported bpf selftest build failure when CONFIG_SMP
> > is not set. The error message looks below:
> > 
> >   >> progs/rcu_read_lock.c:256:34: error: no member named 'last_wakee' in 'struct task_struct'
> >              last_wakee = task->real_parent->last_wakee;
> >                           ~~~~~~~~~~~~~~~~~  ^
> >      1 error generated.
> > 
> > When CONFIG_SMP is not set, the field 'last_wakee' is not available in struct
> > 'task_struct'. Hence the above compilation failure. To fix the issue, let us
> > choose another field 'group_leader' which is available regardless of
> > CONDFIG_SMP set or not.
> 
> s/CONDFIG_SMP/CONFIG_SMP
> 
> > 
> > Reported-by: kernel test robot <lkp@intel.com>
> > Signed-off-by: Yonghong Song <yhs@fb.com>

Also:

Acked-by: David Vernet <void@manifault.com>
Yonghong Song Dec. 13, 2022, 12:41 a.m. UTC | #3
On 12/12/22 3:58 PM, David Vernet wrote:
> On Mon, Dec 12, 2022 at 03:46:17PM -0800, Yonghong Song wrote:
>> Kernel test robot reported bpf selftest build failure when CONFIG_SMP
>> is not set. The error message looks below:
>>
>>    >> progs/rcu_read_lock.c:256:34: error: no member named 'last_wakee' in 'struct task_struct'
>>               last_wakee = task->real_parent->last_wakee;
>>                            ~~~~~~~~~~~~~~~~~  ^
>>       1 error generated.
>>
>> When CONFIG_SMP is not set, the field 'last_wakee' is not available in struct
>> 'task_struct'. Hence the above compilation failure. To fix the issue, let us
>> choose another field 'group_leader' which is available regardless of
>> CONDFIG_SMP set or not.
> 
> s/CONDFIG_SMP/CONFIG_SMP
> 
>>
>> Reported-by: kernel test robot <lkp@intel.com>
>> Signed-off-by: Yonghong Song <yhs@fb.com>
>> ---
>>   tools/testing/selftests/bpf/progs/rcu_read_lock.c      | 8 ++++----
>>   tools/testing/selftests/bpf/progs/task_kfunc_failure.c | 2 +-
>>   2 files changed, 5 insertions(+), 5 deletions(-)
>>
>> diff --git a/tools/testing/selftests/bpf/progs/rcu_read_lock.c b/tools/testing/selftests/bpf/progs/rcu_read_lock.c
>> index 125f908024d3..5cecbdbbb16e 100644
>> --- a/tools/testing/selftests/bpf/progs/rcu_read_lock.c
>> +++ b/tools/testing/selftests/bpf/progs/rcu_read_lock.c
>> @@ -288,13 +288,13 @@ int nested_rcu_region(void *ctx)
>>   SEC("?fentry.s/" SYS_PREFIX "sys_getpgid")
>>   int task_untrusted_non_rcuptr(void *ctx)
>>   {
>> -	struct task_struct *task, *last_wakee;
>> +	struct task_struct *task, *group_leader;
>>   
>>   	task = bpf_get_current_task_btf();
>>   	bpf_rcu_read_lock();
>> -	/* the pointer last_wakee marked as untrusted */
>> -	last_wakee = task->real_parent->last_wakee;
>> -	(void)bpf_task_storage_get(&map_a, last_wakee, 0, 0);
>> +	/* the pointer group_leader marked as untrusted */
>> +	group_leader = task->real_parent->group_leader;
>> +	(void)bpf_task_storage_get(&map_a, group_leader, 0, 0);
>>   	bpf_rcu_read_unlock();
>>   	return 0;
>>   }
>> diff --git a/tools/testing/selftests/bpf/progs/task_kfunc_failure.c b/tools/testing/selftests/bpf/progs/task_kfunc_failure.c
>> index 87fa1db9d9b5..1b47b94dbca0 100644
>> --- a/tools/testing/selftests/bpf/progs/task_kfunc_failure.c
>> +++ b/tools/testing/selftests/bpf/progs/task_kfunc_failure.c
>> @@ -73,7 +73,7 @@ int BPF_PROG(task_kfunc_acquire_trusted_walked, struct task_struct *task, u64 cl
>>   	struct task_struct *acquired;
>>   
>>   	/* Can't invoke bpf_task_acquire() on a trusted pointer obtained from walking a struct. */
>> -	acquired = bpf_task_acquire(task->last_wakee);
>> +	acquired = bpf_task_acquire(task->group_leader);
> 
> Ah, I missed that you'd sent this out before I sent out [0]. Thanks for
> fixing this for me. I'm fine with just merging this patch and dropping
> [0] if it's easier for the maintainers.
> 
> [0]: https://lore.kernel.org/all/20221212235344.1563280-1-void@manifault.com/

I found the above as well since with the kernel-test-bot config, both
rcu_read_lock.c and task_kfunc_failure.c caused compilation errors.

Let me send another version by fixing the above CONFIG_SMP typo,
adding proper fix tags and adding your sign-off and ack.

Thanks!

> 
>>   	bpf_task_release(acquired);
>>   
>>   	return 0;
>> -- 
>> 2.30.2
>>
diff mbox series

Patch

diff --git a/tools/testing/selftests/bpf/progs/rcu_read_lock.c b/tools/testing/selftests/bpf/progs/rcu_read_lock.c
index 125f908024d3..5cecbdbbb16e 100644
--- a/tools/testing/selftests/bpf/progs/rcu_read_lock.c
+++ b/tools/testing/selftests/bpf/progs/rcu_read_lock.c
@@ -288,13 +288,13 @@  int nested_rcu_region(void *ctx)
 SEC("?fentry.s/" SYS_PREFIX "sys_getpgid")
 int task_untrusted_non_rcuptr(void *ctx)
 {
-	struct task_struct *task, *last_wakee;
+	struct task_struct *task, *group_leader;
 
 	task = bpf_get_current_task_btf();
 	bpf_rcu_read_lock();
-	/* the pointer last_wakee marked as untrusted */
-	last_wakee = task->real_parent->last_wakee;
-	(void)bpf_task_storage_get(&map_a, last_wakee, 0, 0);
+	/* the pointer group_leader marked as untrusted */
+	group_leader = task->real_parent->group_leader;
+	(void)bpf_task_storage_get(&map_a, group_leader, 0, 0);
 	bpf_rcu_read_unlock();
 	return 0;
 }
diff --git a/tools/testing/selftests/bpf/progs/task_kfunc_failure.c b/tools/testing/selftests/bpf/progs/task_kfunc_failure.c
index 87fa1db9d9b5..1b47b94dbca0 100644
--- a/tools/testing/selftests/bpf/progs/task_kfunc_failure.c
+++ b/tools/testing/selftests/bpf/progs/task_kfunc_failure.c
@@ -73,7 +73,7 @@  int BPF_PROG(task_kfunc_acquire_trusted_walked, struct task_struct *task, u64 cl
 	struct task_struct *acquired;
 
 	/* Can't invoke bpf_task_acquire() on a trusted pointer obtained from walking a struct. */
-	acquired = bpf_task_acquire(task->last_wakee);
+	acquired = bpf_task_acquire(task->group_leader);
 	bpf_task_release(acquired);
 
 	return 0;