Hi Alex, > > @@ -84,7 +118,7 @@ void ieee802154_xmit_complete(struct ieee802154_hw *hw, struct sk_buff *skb, > > hw->phy->sifs_period * NSEC_PER_USEC, > > HRTIMER_MODE_REL); > > } else { > > - ieee802154_wake_queue(hw); > > + ieee802154_release_queue(local); > > } > > > > dev_consume_skb_any(skb); > > @@ -98,7 +132,7 @@ void ieee802154_xmit_error(struct ieee802154_hw *hw, struct sk_buff *skb, > > struct ieee802154_local *local = hw_to_local(hw); > > > > local->tx_result = reason; > > - ieee802154_wake_queue(hw); > > + ieee802154_release_queue(local); > > dev_kfree_skb_any(skb); > > atomic_dec(&hw->phy->ongoing_txs); > > I am pretty sure that will end in a scheduling while atomic warning > with hwsim. If you don't hit it you have the wrong config, you need to > enable such warnings and have the right preemption model setting. I was using the "desktop" kernel preemption model (voluntary), I've switched to CONFIG_PREEMPT ("Preemptible kernel (Low-latency)"), and enabled CONFIG_DEBUG_ATOMIC_SLEEP. You are right that we should use a spinlock instead of a mutex here. However I don't think disabling IRQs is necessary, so I'll switch to spin_(un)lock() calls. > These calls xmit complete/error should even be allowed to be called > from a hardware irq context, however I _think_ we don't have a driver > which currently does that, but the mutex will break stuff here in the > xmit_do() callback of netdev which hwsim is calling it from. > > Please check again... Will perform a new set of test runs with the new configuration, yes. Thanks, Miquèl