* [PATCH] bpf: devmap: Pass lockdep expression to RCU lists
@ 2020-01-23 12:04 Amol Grover
2020-01-23 13:37 ` Jesper Dangaard Brouer
` (2 more replies)
0 siblings, 3 replies; 8+ messages in thread
From: Amol Grover @ 2020-01-23 12:04 UTC (permalink / raw)
To: Alexei Starovoitov, Daniel Borkmann, David S . Miller,
Jakub Kicinski, Jesper Dangaard Brouer, John Fastabend,
Martin KaFai Lau, Song Liu, Yonghong Song, Andrii Nakryiko
Cc: netdev, bpf, linux-kernel, linux-kernel-mentees, Joel Fernandes,
Madhuparna Bhowmik, Paul E . McKenney, Amol Grover
head is traversed using hlist_for_each_entry_rcu outside an
RCU read-side critical section but under the protection
of dtab->index_lock.
Hence, add corresponding lockdep expression to silence false-positive
lockdep warnings, and harden RCU lists.
Signed-off-by: Amol Grover <frextrite@gmail.com>
---
kernel/bpf/devmap.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/kernel/bpf/devmap.c b/kernel/bpf/devmap.c
index 3d3d61b5985b..b4b6b77f309c 100644
--- a/kernel/bpf/devmap.c
+++ b/kernel/bpf/devmap.c
@@ -293,7 +293,8 @@ struct bpf_dtab_netdev *__dev_map_hash_lookup_elem(struct bpf_map *map, u32 key)
struct hlist_head *head = dev_map_index_hash(dtab, key);
struct bpf_dtab_netdev *dev;
- hlist_for_each_entry_rcu(dev, head, index_hlist)
+ hlist_for_each_entry_rcu(dev, head, index_hlist,
+ lockdep_is_held(&dtab->index_lock))
if (dev->idx == key)
return dev;
--
2.24.1
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH] bpf: devmap: Pass lockdep expression to RCU lists
2020-01-23 12:04 [PATCH] bpf: devmap: Pass lockdep expression to RCU lists Amol Grover
@ 2020-01-23 13:37 ` Jesper Dangaard Brouer
2020-01-23 13:42 ` Toke Høiland-Jørgensen
2020-01-23 13:38 ` Toke Høiland-Jørgensen
2020-01-23 17:18 ` Amol Grover
2 siblings, 1 reply; 8+ messages in thread
From: Jesper Dangaard Brouer @ 2020-01-23 13:37 UTC (permalink / raw)
To: Amol Grover
Cc: brouer, Alexei Starovoitov, Daniel Borkmann, David S . Miller,
Jakub Kicinski, Jesper Dangaard Brouer, John Fastabend,
Martin KaFai Lau, Song Liu, Yonghong Song, Andrii Nakryiko,
netdev, bpf, linux-kernel, linux-kernel-mentees, Joel Fernandes,
Madhuparna Bhowmik, Paul E . McKenney
On Thu, 23 Jan 2020 17:34:38 +0530
Amol Grover <frextrite@gmail.com> wrote:
> head is traversed using hlist_for_each_entry_rcu outside an
> RCU read-side critical section but under the protection
> of dtab->index_lock.
We do hold the lock in update and delete cases, but not in the lookup
cases. Is it then still okay to add the lockdep_is_held() annotation?
If it is then it looks fine to me:
Acked-by: Jesper Dangaard Brouer <brouer@redhat.com>
> Hence, add corresponding lockdep expression to silence false-positive
> lockdep warnings, and harden RCU lists.
>
> Signed-off-by: Amol Grover <frextrite@gmail.com>
> ---
> kernel/bpf/devmap.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/kernel/bpf/devmap.c b/kernel/bpf/devmap.c
> index 3d3d61b5985b..b4b6b77f309c 100644
> --- a/kernel/bpf/devmap.c
> +++ b/kernel/bpf/devmap.c
> @@ -293,7 +293,8 @@ struct bpf_dtab_netdev *__dev_map_hash_lookup_elem(struct bpf_map *map, u32 key)
> struct hlist_head *head = dev_map_index_hash(dtab, key);
> struct bpf_dtab_netdev *dev;
>
> - hlist_for_each_entry_rcu(dev, head, index_hlist)
> + hlist_for_each_entry_rcu(dev, head, index_hlist,
> + lockdep_is_held(&dtab->index_lock))
> if (dev->idx == key)
> return dev;
>
--
Best regards,
Jesper Dangaard Brouer
MSc.CS, Principal Kernel Engineer at Red Hat
LinkedIn: http://www.linkedin.com/in/brouer
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] bpf: devmap: Pass lockdep expression to RCU lists
2020-01-23 12:04 [PATCH] bpf: devmap: Pass lockdep expression to RCU lists Amol Grover
2020-01-23 13:37 ` Jesper Dangaard Brouer
@ 2020-01-23 13:38 ` Toke Høiland-Jørgensen
2020-01-23 15:59 ` Daniel Borkmann
2020-01-23 17:18 ` Amol Grover
2 siblings, 1 reply; 8+ messages in thread
From: Toke Høiland-Jørgensen @ 2020-01-23 13:38 UTC (permalink / raw)
To: Amol Grover, Alexei Starovoitov, Daniel Borkmann,
David S . Miller, Jakub Kicinski, Jesper Dangaard Brouer,
John Fastabend, Martin KaFai Lau, Song Liu, Yonghong Song,
Andrii Nakryiko
Cc: netdev, bpf, linux-kernel, linux-kernel-mentees, Joel Fernandes,
Madhuparna Bhowmik, Paul E . McKenney, Amol Grover
Amol Grover <frextrite@gmail.com> writes:
> head is traversed using hlist_for_each_entry_rcu outside an
> RCU read-side critical section but under the protection
> of dtab->index_lock.
>
> Hence, add corresponding lockdep expression to silence false-positive
> lockdep warnings, and harden RCU lists.
>
> Signed-off-by: Amol Grover <frextrite@gmail.com>
Could you please add an appropriate Fixes: tag?
Otherwise:
Acked-by: Toke Høiland-Jørgensen <toke@redhat.com>
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] bpf: devmap: Pass lockdep expression to RCU lists
2020-01-23 13:37 ` Jesper Dangaard Brouer
@ 2020-01-23 13:42 ` Toke Høiland-Jørgensen
2020-01-23 17:10 ` Amol Grover
0 siblings, 1 reply; 8+ messages in thread
From: Toke Høiland-Jørgensen @ 2020-01-23 13:42 UTC (permalink / raw)
To: Jesper Dangaard Brouer, Amol Grover
Cc: brouer, Alexei Starovoitov, Daniel Borkmann, David S . Miller,
Jakub Kicinski, Jesper Dangaard Brouer, John Fastabend,
Martin KaFai Lau, Song Liu, Yonghong Song, Andrii Nakryiko,
netdev, bpf, linux-kernel, linux-kernel-mentees, Joel Fernandes,
Madhuparna Bhowmik, Paul E . McKenney
Jesper Dangaard Brouer <brouer@redhat.com> writes:
> On Thu, 23 Jan 2020 17:34:38 +0530
> Amol Grover <frextrite@gmail.com> wrote:
>
>> head is traversed using hlist_for_each_entry_rcu outside an
>> RCU read-side critical section but under the protection
>> of dtab->index_lock.
>
> We do hold the lock in update and delete cases, but not in the lookup
> cases. Is it then still okay to add the lockdep_is_held() annotation?
I concluded 'yes' from the comment on hlist_for_each_entry_rcu():
The lockdep condition gets passed to this:
#define __list_check_rcu(dummy, cond, extra...) \
({ \
check_arg_count_one(extra); \
RCU_LOCKDEP_WARN(!cond && !rcu_read_lock_any_held(), \
"RCU-list traversed in non-reader section!"); \
})
so that seems fine :)
-Toke
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] bpf: devmap: Pass lockdep expression to RCU lists
2020-01-23 13:38 ` Toke Høiland-Jørgensen
@ 2020-01-23 15:59 ` Daniel Borkmann
0 siblings, 0 replies; 8+ messages in thread
From: Daniel Borkmann @ 2020-01-23 15:59 UTC (permalink / raw)
To: Toke Høiland-Jørgensen, Amol Grover,
Alexei Starovoitov, David S . Miller, Jakub Kicinski,
Jesper Dangaard Brouer, John Fastabend, Martin KaFai Lau,
Song Liu, Yonghong Song, Andrii Nakryiko
Cc: netdev, bpf, linux-kernel, linux-kernel-mentees, Joel Fernandes,
Madhuparna Bhowmik, Paul E . McKenney
On 1/23/20 2:38 PM, Toke Høiland-Jørgensen wrote:
> Amol Grover <frextrite@gmail.com> writes:
>
>> head is traversed using hlist_for_each_entry_rcu outside an
>> RCU read-side critical section but under the protection
>> of dtab->index_lock.
>>
>> Hence, add corresponding lockdep expression to silence false-positive
>> lockdep warnings, and harden RCU lists.
>>
>> Signed-off-by: Amol Grover <frextrite@gmail.com>
>
> Could you please add an appropriate Fixes: tag?
+1, please reply with Fixes: tag (no need to resend).
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] bpf: devmap: Pass lockdep expression to RCU lists
2020-01-23 13:42 ` Toke Høiland-Jørgensen
@ 2020-01-23 17:10 ` Amol Grover
0 siblings, 0 replies; 8+ messages in thread
From: Amol Grover @ 2020-01-23 17:10 UTC (permalink / raw)
To: Toke Høiland-Jørgensen
Cc: Jesper Dangaard Brouer, Alexei Starovoitov, Daniel Borkmann,
David S . Miller, Jakub Kicinski, Jesper Dangaard Brouer,
John Fastabend, Martin KaFai Lau, Song Liu, Yonghong Song,
Andrii Nakryiko, netdev, bpf, linux-kernel, linux-kernel-mentees,
Joel Fernandes, Madhuparna Bhowmik, Paul E . McKenney
On Thu, Jan 23, 2020 at 02:42:03PM +0100, Toke Høiland-Jørgensen wrote:
> Jesper Dangaard Brouer <brouer@redhat.com> writes:
>
> > On Thu, 23 Jan 2020 17:34:38 +0530
> > Amol Grover <frextrite@gmail.com> wrote:
> >
> >> head is traversed using hlist_for_each_entry_rcu outside an
> >> RCU read-side critical section but under the protection
> >> of dtab->index_lock.
> >
> > We do hold the lock in update and delete cases, but not in the lookup
> > cases. Is it then still okay to add the lockdep_is_held() annotation?
>
> I concluded 'yes' from the comment on hlist_for_each_entry_rcu():
>
> The lockdep condition gets passed to this:
>
> #define __list_check_rcu(dummy, cond, extra...) \
> ({ \
> check_arg_count_one(extra); \
> RCU_LOCKDEP_WARN(!cond && !rcu_read_lock_any_held(), \
> "RCU-list traversed in non-reader section!"); \
> })
>
>
> so that seems fine :)
>
Yes, adding a lockdep expression will be okay. This is because an
implicit check is done to check if list_for_each_entry_rcu() is
traversed under RCU read-side critical section. In case the traversal is
outside RCU read-side critical section, the lockdep expression makes
sure the traversal is done under the mentioned lock.
Thanks
Amol
> -Toke
>
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] bpf: devmap: Pass lockdep expression to RCU lists
2020-01-23 12:04 [PATCH] bpf: devmap: Pass lockdep expression to RCU lists Amol Grover
2020-01-23 13:37 ` Jesper Dangaard Brouer
2020-01-23 13:38 ` Toke Høiland-Jørgensen
@ 2020-01-23 17:18 ` Amol Grover
2020-01-23 22:04 ` Daniel Borkmann
2 siblings, 1 reply; 8+ messages in thread
From: Amol Grover @ 2020-01-23 17:18 UTC (permalink / raw)
To: Alexei Starovoitov, Daniel Borkmann, David S . Miller,
Jesper Dangaard Brouer, John Fastabend, Martin KaFai Lau,
Song Liu, Yonghong Song, Andrii Nakryiko, brouer, toke
Cc: netdev, bpf, linux-kernel, linux-kernel-mentees, Joel Fernandes,
Madhuparna Bhowmik, Paul E . McKenney
On Thu, Jan 23, 2020 at 05:34:38PM +0530, Amol Grover wrote:
> head is traversed using hlist_for_each_entry_rcu outside an
> RCU read-side critical section but under the protection
> of dtab->index_lock.
>
> Hence, add corresponding lockdep expression to silence false-positive
> lockdep warnings, and harden RCU lists.
>
Fixes: 6f9d451ab1a3 ("xdp: Add devmap_hash map type for looking up devices by hashed index")
> Signed-off-by: Amol Grover <frextrite@gmail.com>
> ---
> kernel/bpf/devmap.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/kernel/bpf/devmap.c b/kernel/bpf/devmap.c
> index 3d3d61b5985b..b4b6b77f309c 100644
> --- a/kernel/bpf/devmap.c
> +++ b/kernel/bpf/devmap.c
> @@ -293,7 +293,8 @@ struct bpf_dtab_netdev *__dev_map_hash_lookup_elem(struct bpf_map *map, u32 key)
> struct hlist_head *head = dev_map_index_hash(dtab, key);
> struct bpf_dtab_netdev *dev;
>
> - hlist_for_each_entry_rcu(dev, head, index_hlist)
> + hlist_for_each_entry_rcu(dev, head, index_hlist,
> + lockdep_is_held(&dtab->index_lock))
> if (dev->idx == key)
> return dev;
>
> --
> 2.24.1
>
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] bpf: devmap: Pass lockdep expression to RCU lists
2020-01-23 17:18 ` Amol Grover
@ 2020-01-23 22:04 ` Daniel Borkmann
0 siblings, 0 replies; 8+ messages in thread
From: Daniel Borkmann @ 2020-01-23 22:04 UTC (permalink / raw)
To: Amol Grover, Alexei Starovoitov, David S . Miller,
Jesper Dangaard Brouer, John Fastabend, Martin KaFai Lau,
Song Liu, Yonghong Song, Andrii Nakryiko, brouer, toke
Cc: netdev, bpf, linux-kernel, linux-kernel-mentees, Joel Fernandes,
Madhuparna Bhowmik, Paul E . McKenney
On 1/23/20 6:18 PM, Amol Grover wrote:
> On Thu, Jan 23, 2020 at 05:34:38PM +0530, Amol Grover wrote:
>> head is traversed using hlist_for_each_entry_rcu outside an
>> RCU read-side critical section but under the protection
>> of dtab->index_lock.
>>
>> Hence, add corresponding lockdep expression to silence false-positive
>> lockdep warnings, and harden RCU lists.
>>
> Fixes: 6f9d451ab1a3 ("xdp: Add devmap_hash map type for looking up devices by hashed index")
>> Signed-off-by: Amol Grover <frextrite@gmail.com>
Applied, thanks!
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2020-01-23 22:04 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-01-23 12:04 [PATCH] bpf: devmap: Pass lockdep expression to RCU lists Amol Grover
2020-01-23 13:37 ` Jesper Dangaard Brouer
2020-01-23 13:42 ` Toke Høiland-Jørgensen
2020-01-23 17:10 ` Amol Grover
2020-01-23 13:38 ` Toke Høiland-Jørgensen
2020-01-23 15:59 ` Daniel Borkmann
2020-01-23 17:18 ` Amol Grover
2020-01-23 22:04 ` Daniel Borkmann
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).