From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2992452AbbGZG4i (ORCPT ); Sun, 26 Jul 2015 02:56:38 -0400 Received: from mga03.intel.com ([134.134.136.65]:3931 "EHLO mga03.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932222AbbGZGzX (ORCPT ); Sun, 26 Jul 2015 02:55:23 -0400 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.15,546,1432623600"; d="scan'208";a="754924968" From: Tomas Winkler To: Greg Kroah-Hartman Cc: arnd@arndb.de, Alexander Usyskin , linux-kernel@vger.kernel.org, Tomas Winkler Subject: [char-misc-next 7/9 RESEND] mei: support polling for event notification Date: Sun, 26 Jul 2015 09:54:21 +0300 Message-Id: <1437893663-2068-8-git-send-email-tomas.winkler@intel.com> X-Mailer: git-send-email 2.4.3 In-Reply-To: <1437893663-2068-1-git-send-email-tomas.winkler@intel.com> References: <1437893663-2068-1-git-send-email-tomas.winkler@intel.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Polling on priority events is translated on waiting for event notification. One need to enable notification prior for calling select or poll system call otherwise process will not wait. Signed-off-by: Tomas Winkler Signed-off-by: Alexander Usyskin --- drivers/misc/mei/main.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/drivers/misc/mei/main.c b/drivers/misc/mei/main.c index ffa70035af29..17b356f26686 100644 --- a/drivers/misc/mei/main.c +++ b/drivers/misc/mei/main.c @@ -608,6 +608,7 @@ static unsigned int mei_poll(struct file *file, poll_table *wait) struct mei_cl *cl = file->private_data; struct mei_device *dev; unsigned int mask = 0; + bool notify_en; if (WARN_ON(!cl || !cl->dev)) return POLLERR; @@ -616,6 +617,7 @@ static unsigned int mei_poll(struct file *file, poll_table *wait) mutex_lock(&dev->device_lock); + notify_en = cl->notify_en && (req_events & POLLPRI); if (dev->dev_state != MEI_DEV_ENABLED || !mei_cl_is_connected(cl)) { @@ -628,6 +630,12 @@ static unsigned int mei_poll(struct file *file, poll_table *wait) goto out; } + if (notify_en) { + poll_wait(file, &cl->ev_wait, wait); + if (cl->notify_ev) + mask |= POLLPRI; + } + if (req_events & (POLLIN | POLLRDNORM)) { poll_wait(file, &cl->rx_wait, wait); -- 2.4.3