From: Nikolay Borisov <nik.borisov@suse.com>
To: Elizabeth Figura <zfigura@codeweavers.com>,
Arnd Bergmann <arnd@arndb.de>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
linux-kernel@vger.kernel.org, linux-api@vger.kernel.org
Cc: wine-devel@winehq.org, "André Almeida" <andrealmeid@igalia.com>,
"Wolfram Sang" <wsa@kernel.org>,
"Arkadiusz Hiler" <ahiler@codeweavers.com>,
"Peter Zijlstra" <peterz@infradead.org>
Subject: Re: [RFC PATCH 4/9] ntsync: Introduce NTSYNC_IOC_PUT_SEM.
Date: Thu, 25 Jan 2024 10:59:23 +0200 [thread overview]
Message-ID: <f6448d5a-c04a-4d8f-9672-a14aa3061c3e@suse.com> (raw)
In-Reply-To: <20240124004028.16826-5-zfigura@codeweavers.com>
On 24.01.24 г. 2:40 ч., Elizabeth Figura wrote:
> This corresponds to the NT syscall NtReleaseSemaphore().
>
> Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
> ---
> drivers/misc/ntsync.c | 76 +++++++++++++++++++++++++++++++++++++
> include/uapi/linux/ntsync.h | 2 +
> 2 files changed, 78 insertions(+)
>
> diff --git a/drivers/misc/ntsync.c b/drivers/misc/ntsync.c
> index 3287b94be351..d1c91c2a4f1a 100644
> --- a/drivers/misc/ntsync.c
> +++ b/drivers/misc/ntsync.c
> @@ -21,9 +21,11 @@ enum ntsync_type {
> struct ntsync_obj {
> struct rcu_head rhead;
> struct kref refcount;
> + spinlock_t lock;
>
> enum ntsync_type type;
>
> + /* The following fields are protected by the object lock. */
> union {
> struct {
> __u32 count;
> @@ -36,6 +38,19 @@ struct ntsync_device {
> struct xarray objects;
> };
>
> +static struct ntsync_obj *get_obj(struct ntsync_device *dev, __u32 id)
> +{
> + struct ntsync_obj *obj;
> +
> + rcu_read_lock();
> + obj = xa_load(&dev->objects, id);
> + if (obj && !kref_get_unless_zero(&obj->refcount))
> + obj = NULL;
> + rcu_read_unlock();
> +
> + return obj;
> +}
> +
> static void destroy_obj(struct kref *ref)
> {
> struct ntsync_obj *obj = container_of(ref, struct ntsync_obj, refcount);
> @@ -48,6 +63,18 @@ static void put_obj(struct ntsync_obj *obj)
> kref_put(&obj->refcount, destroy_obj);
> }
>
> +static struct ntsync_obj *get_obj_typed(struct ntsync_device *dev, __u32 id,
> + enum ntsync_type type)
> +{
> + struct ntsync_obj *obj = get_obj(dev, id);
> +
> + if (obj && obj->type != type) {
> + put_obj(obj);
> + return NULL;
> + }
> + return obj;
> +}
> +
> static int ntsync_char_open(struct inode *inode, struct file *file)
> {
> struct ntsync_device *dev;
> @@ -81,6 +108,7 @@ static int ntsync_char_release(struct inode *inode, struct file *file)
> static void init_obj(struct ntsync_obj *obj)
> {
> kref_init(&obj->refcount);
> + spin_lock_init(&obj->lock);
> }
>
> static int ntsync_create_sem(struct ntsync_device *dev, void __user *argp)
> @@ -131,6 +159,52 @@ static int ntsync_delete(struct ntsync_device *dev, void __user *argp)
> return 0;
> }
>
> +/*
> + * Actually change the semaphore state, returning -EOVERFLOW if it is made
> + * invalid.
> + */
> +static int put_sem_state(struct ntsync_obj *sem, __u32 count)
nit: Just a general observation - those functions that contains the
specific type in their name could take the exact object i.e struct ntsem
which will make the code somewhat more clear. Of course, this would mean
that the struct definition in patch 3 should be changed to also contain
a tag name.
next prev parent reply other threads:[~2024-01-25 8:59 UTC|newest]
Thread overview: 39+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-01-24 0:40 [RFC PATCH 0/9] NT synchronization primitive driver Elizabeth Figura
2024-01-24 0:40 ` [RFC PATCH 1/9] ntsync: Introduce the ntsync driver and character device Elizabeth Figura
2024-01-24 7:38 ` Arnd Bergmann
2024-01-24 17:51 ` Elizabeth Figura
2024-01-24 21:26 ` Andy Lutomirski
2024-01-24 22:56 ` Elizabeth Figura
2024-01-25 3:42 ` Elizabeth Figura
2024-01-25 16:47 ` Arnd Bergmann
2024-01-25 18:21 ` Elizabeth Figura
2024-01-25 18:55 ` Andy Lutomirski
2024-01-25 21:45 ` Elizabeth Figura
2024-01-25 7:41 ` Alexandre Julliard
2024-01-24 0:40 ` [RFC PATCH 2/9] ntsync: Reserve a minor device number and ioctl range Elizabeth Figura
2024-01-24 0:54 ` Greg Kroah-Hartman
2024-01-24 3:43 ` Elizabeth Figura
2024-01-24 12:32 ` Greg Kroah-Hartman
2024-01-24 17:59 ` Elizabeth Figura
2024-01-24 0:40 ` [RFC PATCH 3/9] ntsync: Introduce NTSYNC_IOC_CREATE_SEM and NTSYNC_IOC_DELETE Elizabeth Figura
2024-01-24 1:14 ` Greg Kroah-Hartman
2024-01-24 3:35 ` Elizabeth Figura
2024-01-24 0:40 ` [RFC PATCH 4/9] ntsync: Introduce NTSYNC_IOC_PUT_SEM Elizabeth Figura
2024-01-25 8:59 ` Nikolay Borisov [this message]
2024-01-24 0:40 ` [RFC PATCH 5/9] ntsync: Introduce NTSYNC_IOC_WAIT_ANY Elizabeth Figura
2024-01-24 7:56 ` Arnd Bergmann
2024-01-24 18:02 ` Elizabeth Figura
2024-01-24 19:52 ` Arnd Bergmann
2024-01-24 22:28 ` Elizabeth Figura
2024-01-25 17:02 ` Arnd Bergmann
2024-01-25 18:30 ` Elizabeth Figura
2024-01-24 0:40 ` [RFC PATCH 6/9] ntsync: Introduce NTSYNC_IOC_WAIT_ALL Elizabeth Figura
2024-01-24 0:40 ` [RFC PATCH 7/9] ntsync: Introduce NTSYNC_IOC_CREATE_MUTEX Elizabeth Figura
2024-01-24 0:40 ` [RFC PATCH 8/9] ntsync: Introduce NTSYNC_IOC_PUT_MUTEX Elizabeth Figura
2024-01-24 7:42 ` Arnd Bergmann
2024-01-24 18:03 ` Elizabeth Figura
2024-01-24 19:53 ` Arnd Bergmann
2024-01-24 0:40 ` [RFC PATCH 9/9] ntsync: Introduce NTSYNC_IOC_KILL_OWNER Elizabeth Figura
2024-01-24 0:59 ` [RFC PATCH 0/9] NT synchronization primitive driver Greg Kroah-Hartman
2024-01-24 1:37 ` Elizabeth Figura
2024-01-24 12:29 ` Greg Kroah-Hartman
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=f6448d5a-c04a-4d8f-9672-a14aa3061c3e@suse.com \
--to=nik.borisov@suse.com \
--cc=ahiler@codeweavers.com \
--cc=andrealmeid@igalia.com \
--cc=arnd@arndb.de \
--cc=gregkh@linuxfoundation.org \
--cc=linux-api@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=peterz@infradead.org \
--cc=wine-devel@winehq.org \
--cc=wsa@kernel.org \
--cc=zfigura@codeweavers.com \
/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
all inboxes | Powered by JetHome®