media: cec: add EPOLLPRI in poll() when dev is unregistered
authorHans Verkuil <hverkuil-cisco@xs4all.nl>
Tue, 1 Dec 2020 12:44:46 +0000 (13:44 +0100)
committerMauro Carvalho Chehab <mchehab+huawei@kernel.org>
Mon, 4 Jan 2021 12:16:48 +0000 (13:16 +0100)
If the CEC device was unregistered, then add EPOLLPRI to
the poll() mask. Otherwise a select() that only waits for
exceptions will not wake up. A select() that waits for
read and/or write events *will* wake up on an EPOLLERR, but
not (for some reason) if it just waits for exceptions.

Strangly the epoll functionality will wakeup on EPOLLERR if
you just wait for an exception, so in this respect select()
and epoll differ.

In the end it doesn't really matter, what matters is that
polling file handles are woken up on device unregistration.

Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
drivers/media/cec/core/cec-api.c

index f922a2196b2b7ca3edb70a9eb37d559a788511ec..769e6b4cddce3449323a69de376f062485cf0b64 100644 (file)
@@ -40,7 +40,7 @@ static __poll_t cec_poll(struct file *filp,
 
        poll_wait(filp, &fh->wait, poll);
        if (!cec_is_registered(adap))
-               return EPOLLERR | EPOLLHUP;
+               return EPOLLERR | EPOLLHUP | EPOLLPRI;
        mutex_lock(&adap->lock);
        if (adap->is_configured &&
            adap->transmit_queue_sz < CEC_MAX_MSG_TX_QUEUE_SZ)