Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp286045imu; Fri, 16 Nov 2018 02:32:11 -0800 (PST) X-Google-Smtp-Source: AJdET5e4QDJJvt76eQF5UH5HGBJ0xzS+2fBlTCSMHcPYVqcKw22ju+6D3udBwTp/yG1Otsh+L/Ix X-Received: by 2002:a63:561b:: with SMTP id k27mr9430352pgb.271.1542364330958; Fri, 16 Nov 2018 02:32:10 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1542364330; cv=none; d=google.com; s=arc-20160816; b=j5j5eHVUc5XBcHkTZXtEqNekCzTMIS/NfuecS4OI1v8XCOSJyuOj1Zk5aFHiOWHp0A iyEW52we9typuiE5VMqzEMUuvy1cu7NFqepoq/dyxYilKxScdCVO1pynTsfG1RBKaKZj 7i2gEUrQzrknLfZD68FHnsXAV54tZjZMqz66yOaCoqltqDgbbOlZaBFILa9oa3oZfDTc DLpbmnPkYQAvR073u0RtFLCsw9Kfgvv3Xk/Yp3MraIXyG0VFFPEiXAdDH99B4EhuaIDy oGrLbAvBdlM94fuLyqRYQp+jSTiEDExY60slJQpkQ4Gn0P7RHn87iKEZosqoj9wmO1Bh IdYA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from :dkim-signature; bh=A/HYy38X64Ymi0JxJUnGzfz9CegyjpxxQc6zme4vEgM=; b=f3Pl34QE+hQQAggzzuJdif7ciPqPm8ON3jaEqmexdxtMDcBecOvhwYfS/9olY3rXak AQEoQaQv5kQ3X8ZN0e+oFcEyqRLbiTYSbfPytYz6lUHAnGTfJII9Ih5SXbcT4sVt3gRZ j35DxnVwGOei/uOQXt2uosgPUW+2IPrzByMMQgeqUn82sB0OXvwBN8XtFIECcb9Wh2NC CY/vy7VB4UQbRLI4o4PnE6FefpVpUclqcSz360JtoeKTDAmwQucNOX0q25SsQR6MCNkb a8LharsFpx1F9+jsEMOSdQz1vlcaVKuPXgf7aKKS8U8q0LgSb3A7lMpBKTtGfpI09BKB jdRw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@126.com header.s=s110527 header.b=RGsytdb3; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=126.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id g19si23089957pgj.358.2018.11.16.02.31.56; Fri, 16 Nov 2018 02:32:10 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@126.com header.s=s110527 header.b=RGsytdb3; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=126.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2389430AbeKPUmx (ORCPT + 99 others); Fri, 16 Nov 2018 15:42:53 -0500 Received: from m15-111.126.com ([220.181.15.111]:59196 "EHLO m15-111.126.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727454AbeKPUmx (ORCPT ); Fri, 16 Nov 2018 15:42:53 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=126.com; s=s110527; h=From:Subject:Date:Message-Id; bh=A/HYy38X64Ymi0JxJU nGzfz9CegyjpxxQc6zme4vEgM=; b=RGsytdb3yL/THk4P12QkD2EnENu0R+A0cm y6F9KMr09ACM9llXnX558sqcRcxk+8uosnW1uWhghWc29bf+7y3RVgwql4amkVtn ORQicILH9oYA75U3sEWgEvp8P1arvgJ2zQ+1xE/Vj8D+gKJMYzXqbAJmErDQ4gqR ozkH7y/yQ= Received: from pek-zhang3-d1.corp.ad.wrs.com (unknown [60.247.85.82]) by smtp1 (Coremail) with SMTP id C8mowAC3z7NUnO5b5DmoAA--.27164S2; Fri, 16 Nov 2018 18:30:51 +0800 (CST) From: Zhaolong Zhang To: gregkh@linuxfoundation.org Cc: linux-kernel@vger.kernel.org, xiubli@redhat.com, ying.xue@windriver.com, hamish.martin@alliedtelesis.co.nz Subject: [PATCH] uio: dismiss waiters on device unregistration Date: Fri, 16 Nov 2018 18:21:51 +0800 Message-Id: <1542363711-23231-1-git-send-email-zhangzl2013@126.com> X-Mailer: git-send-email 1.9.1 X-CM-TRANSID: C8mowAC3z7NUnO5b5DmoAA--.27164S2 X-Coremail-Antispam: 1Uf129KBjvJXoW7ZryUZF4DCFWUtrW7GrW5Awb_yoW8Gry5p3 yfKFWYyr18Wr4xWr13Ja1xXa45W34v9FWqqry7Ja43AanIqF1aqr17tFy29FyrtF95Ar4k tayrtw4fuFWUuaDanT9S1TB71UUUUUUqnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDUYxBIdaVFxhVjvjDU0xZFpf9x07j-o7tUUUUU= X-Originating-IP: [60.247.85.82] X-CM-SenderInfo: x2kd0wt2osiiat6rjloofrz/1tbitAMBz1pD7YspRgAAsp Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org When the device is unregistered, it should wake up the blocking waiters. Otherwise, they will sleep forever. Signed-off-by: Zhaolong Zhang --- drivers/uio/uio.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/drivers/uio/uio.c b/drivers/uio/uio.c index 8564466..08fa55d 100644 --- a/drivers/uio/uio.c +++ b/drivers/uio/uio.c @@ -569,20 +569,20 @@ static ssize_t uio_read(struct file *filep, char __user *buf, ssize_t retval = 0; s32 event_count; - mutex_lock(&idev->info_lock); - if (!idev->info || !idev->info->irq) - retval = -EIO; - mutex_unlock(&idev->info_lock); - - if (retval) - return retval; - if (count != sizeof(s32)) return -EINVAL; add_wait_queue(&idev->wait, &wait); do { + mutex_lock(&idev->info_lock); + if (!idev->info || !idev->info->irq) { + retval = -EIO; + mutex_unlock(&idev->info_lock); + break; + } + mutex_unlock(&idev->info_lock); + set_current_state(TASK_INTERRUPTIBLE); event_count = atomic_read(&idev->event); @@ -1014,6 +1014,9 @@ void uio_unregister_device(struct uio_info *info) idev->info = NULL; mutex_unlock(&idev->info_lock); + wake_up_interruptible(&idev->wait); + kill_fasync(&idev->async_queue, SIGIO, POLL_HUP); + device_unregister(&idev->dev); return; -- 1.9.1