summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorKirill A. Shutemov <kirill@shutemov.name>2015-11-30 04:17:31 +0200
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2016-03-03 15:06:22 -0800
commit9cec78832326106ebd03bca2235a461aa6fac804 (patch)
treecafe666beafa3b612bcf66c720518f49fb79b066 /drivers
parent859ac05006374e785820017deba204859bbdf1ad (diff)
downloadlinux-9cec78832326106ebd03bca2235a461aa6fac804.tar.gz
linux-9cec78832326106ebd03bca2235a461aa6fac804.tar.bz2
linux-9cec78832326106ebd03bca2235a461aa6fac804.zip
vgaarb: fix signal handling in vga_get()
commit 9f5bd30818c42c6c36a51f93b4df75a2ea2bd85e upstream. There are few defects in vga_get() related to signal hadning: - we shouldn't check for pending signals for TASK_UNINTERRUPTIBLE case; - if we found pending signal we must remove ourself from wait queue and change task state back to running; - -ERESTARTSYS is more appropriate, I guess. Signed-off-by: Kirill A. Shutemov <kirill@shutemov.name> Reviewed-by: David Herrmann <dh.herrmann@gmail.com> Signed-off-by: Dave Airlie <airlied@redhat.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/gpu/vga/vgaarb.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/drivers/gpu/vga/vgaarb.c b/drivers/gpu/vga/vgaarb.c
index e893f6e1937d..3c84e96a485a 100644
--- a/drivers/gpu/vga/vgaarb.c
+++ b/drivers/gpu/vga/vgaarb.c
@@ -392,8 +392,10 @@ int vga_get(struct pci_dev *pdev, unsigned int rsrc, int interruptible)
set_current_state(interruptible ?
TASK_INTERRUPTIBLE :
TASK_UNINTERRUPTIBLE);
- if (signal_pending(current)) {
- rc = -EINTR;
+ if (interruptible && signal_pending(current)) {
+ __set_current_state(TASK_RUNNING);
+ remove_wait_queue(&vga_wait_queue, &wait);
+ rc = -ERESTARTSYS;
break;
}
schedule();