Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

ntsync: Introduce NTSYNC_IOC_EVENT_READ.

This corresponds to the NT syscall NtQueryEvent().

This returns the signaled state of the event and whether it is manual-reset.

Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
Link: https://lore.kernel.org/r/20241213193511.457338-15-zfigura@codeweavers.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

authored by

Elizabeth Figura and committed by
Greg Kroah-Hartman
e864071a 0b3c3144

+25
+24
drivers/misc/ntsync.c
··· 629 629 return ret; 630 630 } 631 631 632 + static int ntsync_event_read(struct ntsync_obj *event, void __user *argp) 633 + { 634 + struct ntsync_event_args __user *user_args = argp; 635 + struct ntsync_device *dev = event->dev; 636 + struct ntsync_event_args args; 637 + bool all; 638 + 639 + if (event->type != NTSYNC_TYPE_EVENT) 640 + return -EINVAL; 641 + 642 + all = ntsync_lock_obj(dev, event); 643 + 644 + args.manual = event->u.event.manual; 645 + args.signaled = event->u.event.signaled; 646 + 647 + ntsync_unlock_obj(dev, event, all); 648 + 649 + if (copy_to_user(user_args, &args, sizeof(args))) 650 + return -EFAULT; 651 + return 0; 652 + } 653 + 632 654 static int ntsync_obj_release(struct inode *inode, struct file *file) 633 655 { 634 656 struct ntsync_obj *obj = file->private_data; ··· 684 662 return ntsync_event_reset(obj, argp); 685 663 case NTSYNC_IOC_EVENT_PULSE: 686 664 return ntsync_event_set(obj, argp, true); 665 + case NTSYNC_IOC_EVENT_READ: 666 + return ntsync_event_read(obj, argp); 687 667 default: 688 668 return -ENOIOCTLCMD; 689 669 }
+1
include/uapi/linux/ntsync.h
··· 53 53 #define NTSYNC_IOC_EVENT_PULSE _IOR ('N', 0x8a, __u32) 54 54 #define NTSYNC_IOC_SEM_READ _IOR ('N', 0x8b, struct ntsync_sem_args) 55 55 #define NTSYNC_IOC_MUTEX_READ _IOR ('N', 0x8c, struct ntsync_mutex_args) 56 + #define NTSYNC_IOC_EVENT_READ _IOR ('N', 0x8d, struct ntsync_event_args) 56 57 57 58 #endif