On Tue, 2017-11-21 at 13:17 +0100, Benjamin Beichler wrote: > > + /*wait for radios with deferred delete*/ please add spaces there > + spin_lock_bh(&hwsim_delete_lock); > + while (!list_empty(&delete_radios)) { > + pr_debug("mac80211_hwsim: wait for deferred radio remove\n"); > + spin_unlock_bh(&hwsim_delete_lock); > + flush_work(&list_entry(&delete_radios, > + struct mac80211_hwsim_data, list) > + ->destroy_work); This can't possibly be right ... you're locking the list_empty which is a trivial pointer comparison, but not the actual list_entry() ... I'd also prefer you actually didn't leave the problem in part as you describe - and a new workqueue probably isn't that much overhead and should introduce *less* new code than this, so IMHO that's worth it. johannes