Received: by 2002:ab2:b82:0:b0:1f3:401:3cfb with SMTP id 2csp792452lqh; Thu, 28 Mar 2024 17:28:13 -0700 (PDT) X-Forwarded-Encrypted: i=3; AJvYcCXce/MbSk5dI/2opuySGDeZ3fUns2tWg8LPa5BbtKfjxoOJP7jUVRhK1eTXSWJamWmsYkkavPSzm/eKZS56rIXlZYBkV6NT1FhWyBBecA== X-Google-Smtp-Source: AGHT+IFcjRmLQH9Faaka9u9DDl57CJPvcantiPg/fgzKjxoyYj3lE7lznwkHVlWqj/rYAo37uL2S X-Received: by 2002:a17:90a:e60e:b0:2a0:7895:f395 with SMTP id j14-20020a17090ae60e00b002a07895f395mr909364pjy.24.1711672093499; Thu, 28 Mar 2024 17:28:13 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1711672093; cv=pass; d=google.com; s=arc-20160816; b=vo7ZIw9FvX3j3zdlfbqll9w/G6cIJKP6W8upfNVm0MUObJ3AZNtoKJ+Hc3miP0PniX 1rJrzQgvP11C7TdSXT8gSThnnZXqrwHuJ10fBmv+vRvfWX1ODS20bGSh3wMlUhSF2egm L7HN6ky/CrBCRRpriWMPjktyMB8b1hgPG1yiiPUREj+JCx5i3CsLR3H9qDk6odg2lstC x+0kuvRZBhuQwA8dUw0ou/58ME0ti1H+7BU9bU4MYksAEnRfsfvVGBh5gsi1REV5fhJZ dhU0WkSW1ygjyOqlSw9S2X7Oy5IOdhr59/i67TFcRSHkL/U6QFZ9gicubcv+xUWF6TIN xD8Q== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=Zv8h2+szdhg9EDGHBccepteFUUaEkYh+pn7zKQTBoPE=; fh=hR3Xqo6s6FufP5gEw1XgbtLHrluZu7hd5XGp+hLIfiM=; b=EBa0XAFBwc/s4RklhqVZARlMntUo9tyN83DdnHhqrswelpw+2KAPdYV/7LBPmXfpVo C3ssTC7BknsJfGvZKBr/M5I0tBEKVXViv0RY/3Xk46owvcpanhbzUxVPb8ZPZmXvjBez GsenYWAx6exCm9CCwmU30cZUQ9cGqvub3kPXZO4Fn4/CTZwQdd9KrAsj0XEMu/7Woy0h EabioECGus0wwoBSu5AM56UrFsIHlgJO73J2EG44OaYim7rBwF+unocynDjETfRfmcrB ndFpDLvABuYoDPWUPslOi8qzfPYvc7pc9tYu3qrZjTyE6GLK9StmLCgFM9WfBMF48kYj J4Dg==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@codeweavers.com header.s=s1 header.b=ogWE+GQE; arc=pass (i=1 spf=pass spfdomain=codeweavers.com dkim=pass dkdomain=codeweavers.com dmarc=pass fromdomain=codeweavers.com); spf=pass (google.com: domain of linux-kernel+bounces-123889-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.48.161 as permitted sender) smtp.mailfrom="linux-kernel+bounces-123889-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=codeweavers.com Return-Path: Received: from sy.mirrors.kernel.org (sy.mirrors.kernel.org. [147.75.48.161]) by mx.google.com with ESMTPS id f15-20020a17090a4a8f00b0029befcc2fbesi2717404pjh.75.2024.03.28.17.28.12 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 28 Mar 2024 17:28:13 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel+bounces-123889-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.48.161 as permitted sender) client-ip=147.75.48.161; Authentication-Results: mx.google.com; dkim=pass header.i=@codeweavers.com header.s=s1 header.b=ogWE+GQE; arc=pass (i=1 spf=pass spfdomain=codeweavers.com dkim=pass dkdomain=codeweavers.com dmarc=pass fromdomain=codeweavers.com); spf=pass (google.com: domain of linux-kernel+bounces-123889-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.48.161 as permitted sender) smtp.mailfrom="linux-kernel+bounces-123889-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=codeweavers.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sy.mirrors.kernel.org (Postfix) with ESMTPS id C7405B21DCC for ; Fri, 29 Mar 2024 00:26:12 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id ED52F36B1B; Fri, 29 Mar 2024 00:23:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=codeweavers.com header.i=@codeweavers.com header.b="ogWE+GQE" Received: from mail.codeweavers.com (mail.codeweavers.com [4.36.192.163]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C0854335C7; Fri, 29 Mar 2024 00:23:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=4.36.192.163 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1711671832; cv=none; b=QBiYY2KTfiETWkpZJvkxyKg5jp6pDuvoPVWIdHLN1RFBVVskW38IZJde5poTgjfkVel3zvZ2MSWF32+UNfzCiMe6HTG2w1l9/Az5jHRm49d99FGP2ytYCc3b/R1eAgyyK9l42JKhNED4aSZzu5xTazLNpN7nnVvMpuY6UFs9CiA= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1711671832; c=relaxed/simple; bh=Qydx+3xcTvNeUCPGX/oOLNK9YJQeyBhE3gI1tli3A40=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=VSi7W1KvdWKjluL+9CtrOeGYlABatPusg51aFYcxCZlHTy/WLnu+uXQ2rsGHvxnfM8tal/5yaiVj4Zs/GfgtLSrQis7DcFuNvkSnMbPLxjmnAU9M0Rgq5bwzyK9b1l4QGNmigAmBmPCzp29ppxLRsXYhWUzJT/cfAnco1F5WstY= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=codeweavers.com; spf=pass smtp.mailfrom=codeweavers.com; dkim=pass (2048-bit key) header.d=codeweavers.com header.i=@codeweavers.com header.b=ogWE+GQE; arc=none smtp.client-ip=4.36.192.163 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=codeweavers.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=codeweavers.com DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=codeweavers.com; s=s1; h=Message-ID:Date:Subject:Cc:To:From:Sender; bh=Zv8h2+szdhg9EDGHBccepteFUUaEkYh+pn7zKQTBoPE=; b=ogWE+GQEMN0HSO0WytKAwiLoaR vTt6XEXOg1owF+ezjw3ATMODGPfSfBSWhs5aYBEDdc5qzyv2HYHNc84FC8p6jmjvI81kOzxojPhFC 4PIqRH8Y03zjJfwzJCc87TR7M0efCOYRyeuxmXvfQATD06re0ydmwv6GiI/1x3gJg0avp+vIj8LMz NzM7i1Ug436LT54w1QyaR6EaxTC9bswtzO1iBpuqavZFalxo/BfK1yFdbziP+1MdtgQ0lPoarJNal jobeRb9IZbv4QpVIXoyRm+g5Lt7MThokk2hLxOVUsJ0y0cgQEBGNMqJZCenjvI1+wF5NSD9AcN8nm NEcGvqPA==; Received: from cw137ip160.mn.codeweavers.com ([10.69.137.160] helo=camazotz.mn.codeweavers.com) by mail.codeweavers.com with esmtpsa (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1rpzlN-000iik-2w; Thu, 28 Mar 2024 19:06:29 -0500 From: Elizabeth Figura To: Arnd Bergmann , Greg Kroah-Hartman , Jonathan Corbet , Shuah Khan Cc: linux-kernel@vger.kernel.org, linux-api@vger.kernel.org, wine-devel@winehq.org, =?UTF-8?q?Andr=C3=A9=20Almeida?= , Wolfram Sang , Arkadiusz Hiler , Peter Zijlstra , Andy Lutomirski , linux-doc@vger.kernel.org, linux-kselftest@vger.kernel.org, Randy Dunlap , Elizabeth Figura Subject: [PATCH v3 12/30] ntsync: Introduce NTSYNC_IOC_EVENT_PULSE. Date: Thu, 28 Mar 2024 19:06:03 -0500 Message-ID: <20240329000621.148791-13-zfigura@codeweavers.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240329000621.148791-1-zfigura@codeweavers.com> References: <20240329000621.148791-1-zfigura@codeweavers.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit This corresponds to the NT syscall NtPulseEvent(). This wakes up any waiters as if the event had been set, but does not set the event, instead resetting it if it had been signalled. Thus, for a manual-reset event, all waiters are woken, whereas for an auto-reset event, at most one waiter is woken. Signed-off-by: Elizabeth Figura --- drivers/misc/ntsync.c | 10 ++++++++-- include/uapi/linux/ntsync.h | 1 + 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/drivers/misc/ntsync.c b/drivers/misc/ntsync.c index ae78425c87d1..adba4657bf26 100644 --- a/drivers/misc/ntsync.c +++ b/drivers/misc/ntsync.c @@ -473,7 +473,7 @@ static int ntsync_mutex_kill(struct ntsync_obj *mutex, void __user *argp) return ret; } -static int ntsync_event_set(struct ntsync_obj *event, void __user *argp) +static int ntsync_event_set(struct ntsync_obj *event, void __user *argp, bool pulse) { struct ntsync_device *dev = event->dev; __u32 prev_state; @@ -489,6 +489,8 @@ static int ntsync_event_set(struct ntsync_obj *event, void __user *argp) event->u.event.signaled = true; try_wake_all_obj(dev, event); try_wake_any_event(event); + if (pulse) + event->u.event.signaled = false; spin_unlock(&event->lock); spin_unlock(&dev->wait_all_lock); @@ -498,6 +500,8 @@ static int ntsync_event_set(struct ntsync_obj *event, void __user *argp) prev_state = event->u.event.signaled; event->u.event.signaled = true; try_wake_any_event(event); + if (pulse) + event->u.event.signaled = false; spin_unlock(&event->lock); } @@ -552,9 +556,11 @@ static long ntsync_obj_ioctl(struct file *file, unsigned int cmd, case NTSYNC_IOC_MUTEX_KILL: return ntsync_mutex_kill(obj, argp); case NTSYNC_IOC_EVENT_SET: - return ntsync_event_set(obj, argp); + return ntsync_event_set(obj, argp, false); case NTSYNC_IOC_EVENT_RESET: return ntsync_event_reset(obj, argp); + case NTSYNC_IOC_EVENT_PULSE: + return ntsync_event_set(obj, argp, true); default: return -ENOIOCTLCMD; } diff --git a/include/uapi/linux/ntsync.h b/include/uapi/linux/ntsync.h index 657542107328..57721f5d31ba 100644 --- a/include/uapi/linux/ntsync.h +++ b/include/uapi/linux/ntsync.h @@ -54,5 +54,6 @@ struct ntsync_wait_args { #define NTSYNC_IOC_MUTEX_KILL _IOW ('N', 0x86, __u32) #define NTSYNC_IOC_EVENT_SET _IOR ('N', 0x88, __u32) #define NTSYNC_IOC_EVENT_RESET _IOR ('N', 0x89, __u32) +#define NTSYNC_IOC_EVENT_PULSE _IOR ('N', 0x8a, __u32) #endif -- 2.43.0