Skip to content

Commit

Permalink
ntsync: Introduce the ntsync driver and character device.
Browse files Browse the repository at this point in the history
ntsync uses a misc device as the simplest and least intrusive uAPI interface.

Each file description on the device represents an isolated NT instance, intended
to correspond to a single NT virtual machine.

Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
Signed-off-by: Alexandre Frade <kernel@xanmod.org>
  • Loading branch information
Elizabeth Figura authored and xanmod committed Mar 1, 2024
1 parent 54ea718 commit 950ca5b
Show file tree
Hide file tree
Showing 3 changed files with 64 additions and 0 deletions.
11 changes: 11 additions & 0 deletions drivers/misc/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -506,6 +506,17 @@ config OPEN_DICE

If unsure, say N.

config NTSYNC
tristate "NT synchronization primitive emulation"
help
This module provides kernel support for emulation of Windows NT
synchronization primitives. It is not a hardware driver.

To compile this driver as a module, choose M here: the
module will be called ntsync.

If unsure, say N.

config VCPU_STALL_DETECTOR
tristate "Guest vCPU stall detector"
depends on OF && HAS_IOMEM
Expand Down
1 change: 1 addition & 0 deletions drivers/misc/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ obj-$(CONFIG_PVPANIC) += pvpanic/
obj-$(CONFIG_UACCE) += uacce/
obj-$(CONFIG_XILINX_SDFEC) += xilinx_sdfec.o
obj-$(CONFIG_HISI_HIKEY_USB) += hisi_hikey_usb.o
obj-$(CONFIG_NTSYNC) += ntsync.o
obj-$(CONFIG_HI6421V600_IRQ) += hi6421v600-irq.o
obj-$(CONFIG_OPEN_DICE) += open-dice.o
obj-$(CONFIG_GP_PCI1XXXX) += mchp_pci1xxxx/
Expand Down
52 changes: 52 additions & 0 deletions drivers/misc/ntsync.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
// SPDX-License-Identifier: GPL-2.0-only
/*
* ntsync.c - Kernel driver for NT synchronization primitives
*
* Copyright (C) 2024 Elizabeth Figura <zfigura@codeweavers.com>
*/

#include <linux/fs.h>
#include <linux/miscdevice.h>
#include <linux/module.h>

#define NTSYNC_NAME "ntsync"

static int ntsync_char_open(struct inode *inode, struct file *file)
{
return nonseekable_open(inode, file);
}

static int ntsync_char_release(struct inode *inode, struct file *file)
{
return 0;
}

static long ntsync_char_ioctl(struct file *file, unsigned int cmd,
unsigned long parm)
{
switch (cmd) {
default:
return -ENOIOCTLCMD;
}
}

static const struct file_operations ntsync_fops = {
.owner = THIS_MODULE,
.open = ntsync_char_open,
.release = ntsync_char_release,
.unlocked_ioctl = ntsync_char_ioctl,
.compat_ioctl = compat_ptr_ioctl,
.llseek = no_llseek,
};

static struct miscdevice ntsync_misc = {
.minor = MISC_DYNAMIC_MINOR,
.name = NTSYNC_NAME,
.fops = &ntsync_fops,
};

module_misc_device(ntsync_misc);

MODULE_AUTHOR("Elizabeth Figura <zfigura@codeweavers.com>");
MODULE_DESCRIPTION("Kernel driver for NT synchronization primitives");
MODULE_LICENSE("GPL");

0 comments on commit 950ca5b

Please sign in to comment.