Hi, On 5/13/21 3:44 PM, Maximilian Luz wrote: > The poll function should not return -ERESTARTSYS. > > Furthermore, locking in this function is completely unnecessary. The > ddev->lock protects access to the main device and controller (ddev->dev > and ddev->ctrl), ensuring that both are and remain valid while being > accessed by clients. Both are, however, never accessed in the poll > function. The shutdown test (via atomic bit flags) be safely done > without locking, so drop locking here entirely. > > Reported-by: kernel test robot <lkp@xxxxxxxxx> > Fixes: 1d609992832e ("platform/surface: Add DTX driver> Signed-off-by: Maximilian Luz <luzmaximilian@xxxxxxxxx> Thank you for your patch, I've applied this patch to my review-hans branch: https://git.kernel.org/pub/scm/linux/kernel/git/pdx86/platform-drivers-x86.git/log/?h=review-hans I will also include this in the next pdx86-fixes pull-req for 5.13. Note it will show up in my review-hans branch once I've pushed my local branch there, which might take a while. Once I've run some tests on this branch the patches there will be added to the platform-drivers-x86/for-next branch and eventually will be included in the pdx86 pull-request to Linus for the next merge-window. Regards, Hans > --- > drivers/platform/surface/surface_dtx.c | 8 +------- > 1 file changed, 1 insertion(+), 7 deletions(-) > > diff --git a/drivers/platform/surface/surface_dtx.c b/drivers/platform/surface/surface_dtx.c > index 63ce587e79e3..5d9b758a99bb 100644 > --- a/drivers/platform/surface/surface_dtx.c > +++ b/drivers/platform/surface/surface_dtx.c > @@ -527,20 +527,14 @@ static __poll_t surface_dtx_poll(struct file *file, struct poll_table_struct *pt > struct sdtx_client *client = file->private_data; > __poll_t events = 0; > > - if (down_read_killable(&client->ddev->lock)) > - return -ERESTARTSYS; > - > - if (test_bit(SDTX_DEVICE_SHUTDOWN_BIT, &client->ddev->flags)) { > - up_read(&client->ddev->lock); > + if (test_bit(SDTX_DEVICE_SHUTDOWN_BIT, &client->ddev->flags)) > return EPOLLHUP | EPOLLERR; > - } > > poll_wait(file, &client->ddev->waitq, pt); > > if (!kfifo_is_empty(&client->buffer)) > events |= EPOLLIN | EPOLLRDNORM; > > - up_read(&client->ddev->lock); > return events; > } > >