Hi, On Fri, Mar 4, 2022 at 5:54 AM Miquel Raynal <miquel.raynal@xxxxxxxxxxx> wrote: > I had a second look at it and it appears to me that the issue was > already there and is structural. We just did not really cared about it > because we didn't bother with synchronization issues. > I am not sure if I understand correctly. We stop the queue at some specific moment and we need to make sure that xmit_do() is not called or can't be called anymore. I was thinking about: void ieee802154_disable_queue(struct ieee802154_hw *hw) { struct ieee802154_local *local = hw_to_local(hw); struct ieee802154_sub_if_data *sdata; rcu_read_lock(); list_for_each_entry_rcu(sdata, &local->interfaces, list) { if (!sdata->dev) continue; netif_tx_disable(sdata->dev); } rcu_read_unlock(); } EXPORT_SYMBOL(ieee802154_stop_queue);