From: Elizabeth Figura <zfigura@codeweavers.com>
To: Arnd Bergmann <arnd@arndb.de>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Jonathan Corbet <corbet@lwn.net>, Shuah Khan <shuah@kernel.org>
Cc: linux-kernel@vger.kernel.org, linux-api@vger.kernel.org,
wine-devel@winehq.org, "André Almeida" <andrealmeid@igalia.com>,
"Wolfram Sang" <wsa@kernel.org>,
"Arkadiusz Hiler" <ahiler@codeweavers.com>,
"Peter Zijlstra" <peterz@infradead.org>,
"Andy Lutomirski" <luto@kernel.org>,
linux-doc@vger.kernel.org, linux-kselftest@vger.kernel.org,
"Randy Dunlap" <rdunlap@infradead.org>,
"Ingo Molnar" <mingo@redhat.com>, "Will Deacon" <will@kernel.org>,
"Waiman Long" <longman@redhat.com>,
"Boqun Feng" <boqun.feng@gmail.com>,
"Elizabeth Figura" <zfigura@codeweavers.com>
Subject: [PATCH v5 09/28] ntsync: Introduce NTSYNC_IOC_EVENT_PULSE.
Date: Sun, 19 May 2024 15:24:35 -0500 [thread overview]
Message-ID: <20240519202454.1192826-10-zfigura@codeweavers.com> (raw)
In-Reply-To: <20240519202454.1192826-1-zfigura@codeweavers.com>
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 <zfigura@codeweavers.com>
---
drivers/misc/ntsync.c | 8 ++++++--
include/uapi/linux/ntsync.h | 1 +
2 files changed, 7 insertions(+), 2 deletions(-)
diff --git a/drivers/misc/ntsync.c b/drivers/misc/ntsync.c
index b070ceccc3af..b0c1d644f0af 100644
--- a/drivers/misc/ntsync.c
+++ b/drivers/misc/ntsync.c
@@ -534,7 +534,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;
@@ -550,6 +550,8 @@ static int ntsync_event_set(struct ntsync_obj *event, void __user *argp)
if (all)
try_wake_all_obj(dev, event);
try_wake_any_event(event);
+ if (pulse)
+ event->u.event.signaled = false;
ntsync_unlock_obj(dev, event, all);
@@ -605,9 +607,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 7fdf79729b20..5586fadd9bdd 100644
--- a/include/uapi/linux/ntsync.h
+++ b/include/uapi/linux/ntsync.h
@@ -53,5 +53,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
next prev parent reply other threads:[~2024-05-19 20:25 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-05-19 20:24 [PATCH v5 00/28] NT synchronization primitive driver Elizabeth Figura
2024-05-19 20:24 ` [PATCH v5 01/28] ntsync: Introduce NTSYNC_IOC_WAIT_ANY Elizabeth Figura
2024-05-19 20:24 ` [PATCH v5 02/28] ntsync: Introduce NTSYNC_IOC_WAIT_ALL Elizabeth Figura
2024-05-19 20:24 ` [PATCH v5 03/28] ntsync: Introduce NTSYNC_IOC_CREATE_MUTEX Elizabeth Figura
2024-05-19 20:24 ` [PATCH v5 04/28] ntsync: Introduce NTSYNC_IOC_MUTEX_UNLOCK Elizabeth Figura
2024-05-19 20:24 ` [PATCH v5 05/28] ntsync: Introduce NTSYNC_IOC_MUTEX_KILL Elizabeth Figura
2024-05-19 20:24 ` [PATCH v5 06/28] ntsync: Introduce NTSYNC_IOC_CREATE_EVENT Elizabeth Figura
2024-05-19 20:24 ` [PATCH v5 07/28] ntsync: Introduce NTSYNC_IOC_EVENT_SET Elizabeth Figura
2024-05-19 20:24 ` [PATCH v5 08/28] ntsync: Introduce NTSYNC_IOC_EVENT_RESET Elizabeth Figura
2024-05-19 20:24 ` Elizabeth Figura [this message]
2024-05-19 20:24 ` [PATCH v5 10/28] ntsync: Introduce NTSYNC_IOC_SEM_READ Elizabeth Figura
2024-05-19 20:24 ` [PATCH v5 11/28] ntsync: Introduce NTSYNC_IOC_MUTEX_READ Elizabeth Figura
2024-05-19 20:24 ` [PATCH v5 12/28] ntsync: Introduce NTSYNC_IOC_EVENT_READ Elizabeth Figura
2024-05-19 20:24 ` [PATCH v5 13/28] ntsync: Introduce alertable waits Elizabeth Figura
2024-05-19 20:24 ` [PATCH v5 14/28] selftests: ntsync: Add some tests for semaphore state Elizabeth Figura
2024-05-19 20:24 ` [PATCH v5 15/28] selftests: ntsync: Add some tests for mutex state Elizabeth Figura
2024-05-19 20:24 ` [PATCH v5 16/28] selftests: ntsync: Add some tests for NTSYNC_IOC_WAIT_ANY Elizabeth Figura
2024-05-19 20:24 ` [PATCH v5 17/28] selftests: ntsync: Add some tests for NTSYNC_IOC_WAIT_ALL Elizabeth Figura
2024-05-19 20:24 ` [PATCH v5 18/28] selftests: ntsync: Add some tests for wakeup signaling with WINESYNC_IOC_WAIT_ANY Elizabeth Figura
2024-05-19 20:24 ` [PATCH v5 19/28] selftests: ntsync: Add some tests for wakeup signaling with WINESYNC_IOC_WAIT_ALL Elizabeth Figura
2024-05-19 20:24 ` [PATCH v5 20/28] selftests: ntsync: Add some tests for manual-reset event state Elizabeth Figura
2024-05-19 20:24 ` [PATCH v5 21/28] selftests: ntsync: Add some tests for auto-reset " Elizabeth Figura
2024-05-19 20:24 ` [PATCH v5 22/28] selftests: ntsync: Add some tests for wakeup signaling with events Elizabeth Figura
2024-05-19 20:24 ` [PATCH v5 23/28] selftests: ntsync: Add tests for alertable waits Elizabeth Figura
2024-05-19 20:24 ` [PATCH v5 24/28] selftests: ntsync: Add some tests for wakeup signaling via alerts Elizabeth Figura
2024-05-19 20:24 ` [PATCH v5 25/28] selftests: ntsync: Add a stress test for contended waits Elizabeth Figura
2024-05-19 20:24 ` [PATCH v5 26/28] maintainers: Add an entry for ntsync Elizabeth Figura
2024-05-19 20:24 ` [PATCH v5 27/28] docs: ntsync: Add documentation for the ntsync uAPI Elizabeth Figura
2024-05-19 20:24 ` [PATCH v5 28/28] ntsync: No longer depend on BROKEN Elizabeth Figura
2024-06-10 16:58 ` [PATCH v5 00/28] NT synchronization primitive driver Elizabeth Figura
2024-08-12 17:09 ` Elizabeth Figura
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240519202454.1192826-10-zfigura@codeweavers.com \
--to=zfigura@codeweavers.com \
--cc=ahiler@codeweavers.com \
--cc=andrealmeid@igalia.com \
--cc=arnd@arndb.de \
--cc=boqun.feng@gmail.com \
--cc=corbet@lwn.net \
--cc=gregkh@linuxfoundation.org \
--cc=linux-api@vger.kernel.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=longman@redhat.com \
--cc=luto@kernel.org \
--cc=mingo@redhat.com \
--cc=peterz@infradead.org \
--cc=rdunlap@infradead.org \
--cc=shuah@kernel.org \
--cc=will@kernel.org \
--cc=wine-devel@winehq.org \
--cc=wsa@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox