On 2019-04-15 14:55:02 [+0000], Kirill Smelkov wrote: > Hi Sebastian, Hi Kirill, > On Mon, Apr 15, 2019 at 04:38:57PM +0200, Sebastian Andrzej Siewior wrote: > > On 2019-04-13 17:00:59 [+0000], Kirill Smelkov wrote: > > > stream_open.cocci was issuing only warning for pci/switchtec, but after > > > 8a29a3bae2a2 ("pci/switchtec: Don't use completion's wait queue") they > > > started to use wait_even_* inside read method and, since > > > stream_open.cocci considers wait_event_* as blocking the warning became > > > error. Previously it was completions there, but I added support for wait > > > events only for simplicity. > > > > why is wait_event_interruptible() treated differently compared to > > wait_for_completion_interruptible()? > > No particular reason. I just taught stream_open.cocci to consider > only "wait_event_*" as blocking: > > https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/scripts/coccinelle/api/stream_open.cocci?h=v5.1-rc5#n35 > > based on original /proc/xen/xenbus deadlock: > > https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/xen/xenbus/xenbus_dev_frontend.c?h=v5.1-rc5#n135 > https://git.kernel.org/linus/581d21a2d02a > > We can extend "a function that blocks" rule to cover other kernel > primitives. > > For the reference: the deadlock scenario is described in > > https://git.kernel.org/linus/10dce8af3422 As far I understand the problem is when the ->read() callback waits for the ->write() callback. The locking isn't changed by patch you mentioned. So extended might make sense. But then wait_event_* by itself in ->read() isn't a problem as long as its counter part isn't in ->write(). But yes, nice finding. > Kirill Sebastian