Received: by 2002:ab2:69cc:0:b0:1f4:be93:e15a with SMTP id n12csp1780601lqp; Mon, 15 Apr 2024 18:15:29 -0700 (PDT) X-Forwarded-Encrypted: i=3; AJvYcCViSnxVuasncDs5SLRoWcRzpWmputLxuwmVzkXEZU372OZq4JtfxktaQr5fWZthkhaznVdVuEa9YZg2T26c+HXEtzZ5aSJMNxyrFPBM3g== X-Google-Smtp-Source: AGHT+IEH5FGNJrER8wUTURdWOYwNL6XWMEQdbdApJUUu+41u462A6QRP3+aG70bK31A+CGSOym79 X-Received: by 2002:a17:907:360d:b0:a52:5a04:faff with SMTP id bk13-20020a170907360d00b00a525a04faffmr4745586ejc.8.1713230129135; Mon, 15 Apr 2024 18:15:29 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1713230129; cv=pass; d=google.com; s=arc-20160816; b=CZAAjGANU0ybEaXQWTa1ioHCMqfJ04zk6n4Jj1dBKWWYYEpRf7F8zJnGA5ZQQvP/Qr 2lvXoJuFO+tjZcMY66Ml6Xx9oLuyhCfCSuvqlLg3ct5hMNTZcYDMhXzPqYyx8wmFFQig 4sUVI2NAOSsIg3bKFmlUgsGd04gh4B4oDDn+881kAWv64J0xjcWe1oVRFM8bUIc+biUr j/C8erG9jzQOM1vdGR4CFoVfjKoJQSj2aPQ/tap4FDdqEYQ6u6QjoKbNqgeW1vuCnhiP +gQiIvqYc5iawi6ZDGZI+adsBxBCDZeB/ee5avnVujRsc3lMV+H1gpZ9+RsGwXB0EMzd 8ecw== 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=eVY06L/C5FDTmF2RNqfudsnjwkB3tbhT/y33cGhZc0I=; b=A1TVnxyG8cUQqlp+GPoMW+s1eUgvkd2ZUbSJSbsMflW0XajEpbig4KDwlTJRSz1yPu UwRNS+5ipCZrSrkgwSPGNC9iSGOB3w3JMl2T9s7C+Tkd5JXxRJWWir1NWXa7kWV4UZKO 8hH2YB9QdxwRk1yPb99/J2hPINY21SQkO7sh79RpE1jFTvGDk8J50F3Qmawqa+tdq5NZ O5b8biwWFaP1VichstYaExbHIgfX4T4NMYoNkZL5ZmIWzSNmKhBxXfkjYP+y+PGlrdJZ f5TSme7wXDn4h6mPCSYOR8wtMR2MYX8qVuhnXlmlkF2oV+ki06wAU5U3XZn+mcdv17oM FRpg==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@codeweavers.com header.s=s1 header.b=mkZWxMp6; 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-146075-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) smtp.mailfrom="linux-kernel+bounces-146075-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=codeweavers.com Return-Path: Received: from am.mirrors.kernel.org (am.mirrors.kernel.org. [147.75.80.249]) by mx.google.com with ESMTPS id dr8-20020a170907720800b00a5198d85cbfsi5289246ejc.403.2024.04.15.18.15.29 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 15 Apr 2024 18:15:29 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel+bounces-146075-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) client-ip=147.75.80.249; Authentication-Results: mx.google.com; dkim=pass header.i=@codeweavers.com header.s=s1 header.b=mkZWxMp6; 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-146075-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) smtp.mailfrom="linux-kernel+bounces-146075-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 am.mirrors.kernel.org (Postfix) with ESMTPS id D7BCB1F21251 for ; Tue, 16 Apr 2024 01:15:28 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 9410115ADB7; Tue, 16 Apr 2024 01:10:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=codeweavers.com header.i=@codeweavers.com header.b="mkZWxMp6" 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 B97166AB9; Tue, 16 Apr 2024 01:10:28 +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=1713229833; cv=none; b=C3JXXs7hdqTXPnKEvc83yhSZvYPtZzneHudcc3wyFl+HLG/yjVI5QytB0NF7IFAHnxwtQDlt+8Vz21pRnXsJtbzHFI+gjMybXEpgkB1GYNxZCIMl5UwaifMb9y7giGDfQ950/4KNodDEq+Igd82Uytjdb2l2MhtBBnZKm6JpQlo= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713229833; c=relaxed/simple; bh=Qydx+3xcTvNeUCPGX/oOLNK9YJQeyBhE3gI1tli3A40=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=UGarrVB6z6+zFWxSPi1a3lgG58ETY/ox/9ibVQEwoZtWu3wPmxuv0fpTDvMubNRlLO74vQPzdx8Y3UgWS8TGrHk/XOq1YW4xAysD4x8OzZrXjYJurjXW3Q6itaSTPn2eI/T0oH2rzq63cY4ciVsxAPkradk6zITRdv+PUSrGb5M= 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=mkZWxMp6; 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=mkZWxMp6ZQe3hcvQHoWyFaI8i0 KilzSPCNkod+ULoWOaDBLMFq1DbEjG9WUa9WLTXiTxbVx9CTDflkEFECLaBxqa3opX3Fz1Iuas7Kl mF0e0O/IqUo7eI/NKDfAnP8E766qXM/nGGpgnlcEVYUWkDXHvDc+T407tgU1H3JEedOj3IV1PApTZ d05iBcgt6PJjIsHMmmtaaYcjSgpZjTAGF41F3al+gngVXE9g41NZTXVfS4blS3xuGt8FZRjrF6w9X Z1A5ij1OIhv0TcgSAdn9GaOcVyfTOmFut1Kf0JqZlmPOzmStj87FKhdIn/s+uDVpTT3ozjGh2F6Tc 0g1lVLKw==; 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 1rwXL0-00FbQv-1I; Mon, 15 Apr 2024 20:10:18 -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 , Ingo Molnar , Will Deacon , Waiman Long , Boqun Feng , Elizabeth Figura Subject: [PATCH v4 09/27] ntsync: Introduce NTSYNC_IOC_EVENT_PULSE. Date: Mon, 15 Apr 2024 20:08:19 -0500 Message-ID: <20240416010837.333694-10-zfigura@codeweavers.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240416010837.333694-1-zfigura@codeweavers.com> References: <20240416010837.333694-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