Questioning requirement for ASSERT_RTNL in indirect code

5 messages, 2 authors, 2021-09-14 · open the first message on its own page

Questioning requirement for ASSERT_RTNL in indirect code

From: Eli Cohen <hidden>
Date: 2021-09-14 06:05:11

Hi,

I see the same assert and the same comment, "All callback list access
should be protected by RTNL.", in the following locations

drivers/net/ethernet/broadcom/bnxt/bnxt_tc.c:1873
drivers/net/ethernet/mellanox/mlx5/core/en/rep/tc.c:303
drivers/net/ethernet/netronome/nfp/flower/offload.c:1770

I assume the source of this comment is the same. Can you guys explain
why is this necessary?

Currently, with
74fc4f828769 ("net: Fix offloading indirect devices dependency on qdisc order creation"

the assert will emit a warning into dmesg with no other noticable
effect. I am thinking maybe we need to remove this assert.

Comments?

- Eli

Re: Questioning requirement for ASSERT_RTNL in indirect code

From: Jakub Kicinski <kuba@kernel.org>
Date: 2021-09-14 14:26:33

On Tue, 14 Sep 2021 09:05:00 +0300 Eli Cohen wrote:
I see the same assert and the same comment, "All callback list access
should be protected by RTNL.", in the following locations

drivers/net/ethernet/broadcom/bnxt/bnxt_tc.c:1873
drivers/net/ethernet/mellanox/mlx5/core/en/rep/tc.c:303
drivers/net/ethernet/netronome/nfp/flower/offload.c:1770

I assume the source of this comment is the same. Can you guys explain
why is this necessary?
Because most drivers (all but mlx5?) depend on rtnl_lock for
serializing tc offload operations.
Currently, with
74fc4f828769 ("net: Fix offloading indirect devices dependency on qdisc order creation"

the assert will emit a warning into dmesg with no other noticable
effect. I am thinking maybe we need to remove this assert.

Comments?
rtnl_lock must be held unless unlocked_driver_cb is set.

Re: Questioning requirement for ASSERT_RTNL in indirect code

From: Eli Cohen <hidden>
Date: 2021-09-14 14:54:49

On Tue, Sep 14, 2021 at 07:26:29AM -0700, Jakub Kicinski wrote:
On Tue, 14 Sep 2021 09:05:00 +0300 Eli Cohen wrote:
quoted
I see the same assert and the same comment, "All callback list access
should be protected by RTNL.", in the following locations

drivers/net/ethernet/broadcom/bnxt/bnxt_tc.c:1873
drivers/net/ethernet/mellanox/mlx5/core/en/rep/tc.c:303
drivers/net/ethernet/netronome/nfp/flower/offload.c:1770

I assume the source of this comment is the same. Can you guys explain
why is this necessary?
Because most drivers (all but mlx5?) depend on rtnl_lock for
serializing tc offload operations.
But the assert I am referring to is called as part of setting up the
callback that will be used for offload operations, e.g. for adding a new
filter with tc. It's not the actual filter insetion code.

And as far as I can see this call sequence is already serialized by
flow_indr_block_lock.
quoted
Currently, with
74fc4f828769 ("net: Fix offloading indirect devices dependency on qdisc order creation"

the assert will emit a warning into dmesg with no other noticable
effect. I am thinking maybe we need to remove this assert.

Comments?
rtnl_lock must be held unless unlocked_driver_cb is set.

Re: Questioning requirement for ASSERT_RTNL in indirect code

From: Jakub Kicinski <kuba@kernel.org>
Date: 2021-09-14 15:07:49

On Tue, 14 Sep 2021 17:54:39 +0300 Eli Cohen wrote:
On Tue, Sep 14, 2021 at 07:26:29AM -0700, Jakub Kicinski wrote:
quoted
On Tue, 14 Sep 2021 09:05:00 +0300 Eli Cohen wrote:  
quoted
I see the same assert and the same comment, "All callback list access
should be protected by RTNL.", in the following locations

drivers/net/ethernet/broadcom/bnxt/bnxt_tc.c:1873
drivers/net/ethernet/mellanox/mlx5/core/en/rep/tc.c:303
drivers/net/ethernet/netronome/nfp/flower/offload.c:1770

I assume the source of this comment is the same. Can you guys explain
why is this necessary?  
Because most drivers (all but mlx5?) depend on rtnl_lock for
serializing tc offload operations.
  
But the assert I am referring to is called as part of setting up the
callback that will be used for offload operations, e.g. for adding a new
filter with tc. It's not the actual filter insetion code.

And as far as I can see this call sequence is already serialized by
flow_indr_block_lock.
Hm, indeed, should've looked at the code. There doesn't seem to be
anything on the driver side this is protecting. The assert was added
before the flow/nftables rewrite of the infra, perhaps that's the
answer. IOW the lock did not exist back then.

Re: Questioning requirement for ASSERT_RTNL in indirect code

From: Eli Cohen <hidden>
Date: 2021-09-14 16:32:42

On Tue, Sep 14, 2021 at 08:07:46AM -0700, Jakub Kicinski wrote:
On Tue, 14 Sep 2021 17:54:39 +0300 Eli Cohen wrote:
quoted
On Tue, Sep 14, 2021 at 07:26:29AM -0700, Jakub Kicinski wrote:
quoted
On Tue, 14 Sep 2021 09:05:00 +0300 Eli Cohen wrote:  
quoted
I see the same assert and the same comment, "All callback list access
should be protected by RTNL.", in the following locations

drivers/net/ethernet/broadcom/bnxt/bnxt_tc.c:1873
drivers/net/ethernet/mellanox/mlx5/core/en/rep/tc.c:303
drivers/net/ethernet/netronome/nfp/flower/offload.c:1770

I assume the source of this comment is the same. Can you guys explain
why is this necessary?  
Because most drivers (all but mlx5?) depend on rtnl_lock for
serializing tc offload operations.
  
But the assert I am referring to is called as part of setting up the
callback that will be used for offload operations, e.g. for adding a new
filter with tc. It's not the actual filter insetion code.

And as far as I can see this call sequence is already serialized by
flow_indr_block_lock.
Hm, indeed, should've looked at the code. There doesn't seem to be
anything on the driver side this is protecting. The assert was added
before the flow/nftables rewrite of the infra, perhaps that's the
answer. IOW the lock did not exist back then.
ok, so if there are no objections by my next morning, I will post a
patch to remove these.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help