On Tue, Mar 17, 2020 at 12:05:10PM -0400, Dennis Dalessandro wrote: > +static void flush_pq_iowait(struct hfi1_user_sdma_pkt_q *pq) > +{ > + unsigned long flags; > + seqlock_t *lock = pq->busy.lock; > + > + if (!lock) > + return; > + write_seqlock_irqsave(lock, flags); > + if (!list_empty(&pq->busy.list)) { > + list_del_init(&pq->busy.list); > + pq->busy.lock = NULL; > + } > + write_sequnlock_irqrestore(lock, flags); I'm trying to grasp how a seqlock is protecting a list_empty and list_del_init, and this seems.. uh.. insane? The only place that uses seqlock in infiniband is in hfi1 It only calls seqlock_init and write_seqlock Never read_seqlock So, this isn't a seqlock, it is a normal spinlock obfuscated as a seqlock. Please clean this mess too. I don't know what to do with this patch, it might well be functionally right, but everything about reading it screams wrong wrong wrong. I don't want to send it to Linus in -rc like this. At least add something to the commit message asking temporary forgiveness for this madness. Also s/insure/ensure/, right? Jason