On Mon, Dec 21, 2020 at 11:53 AM Kalle Valo <kvalo@xxxxxxxxxxxxxx> wrote: > Brian Norris <briannorris@xxxxxxxxxxxx> writes: > > On Sun, Dec 20, 2020 at 5:53 PM Miaoqing Pan <miaoqing@xxxxxxxxxxxxxx> wrote: > >> if (skb_queue_len(q) == ATH10K_MAX_NUM_MGMT_PENDING) { > > > > I believe you should be switching this to use skb_queue_len_lockless() > > too. > > Why lockless? (reads documentation) Ah, is it due to memory > synchronisation now that we don't take the data_lock anymore? As the original post notes, there was no valid locking in the first place anyway, but now that we're fully relying on the queue lock, we either need to grab that lock, or else otherwise use lock-free-denoted methods. One could say it's about data synchronization, but it's really about the lack of memory model -- C didn't have a formal one until relatively recently, and the kernel has always blazed its own way anyway. You need to annotate *something* about a bare read, otherwise it's not safe to do concurrently; either compiler or hardware can do nasty things to you. (In practice, it's unlikely this particular case will cause a problem for this reason; it's already a somewhat imprecise check anyway.) Brian