ntsync: Introduce the ntsync driver and character device.

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>
Link: https://lore.kernel.org/r/20240329000621.148791-2-zfigura@codeweavers.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Elizabeth Figura
2024-03-28 19:05:52 -05:00
committed by Greg Kroah-Hartman
parent 26f0d3b11a
commit 25b9cadb1e
3 changed files with 64 additions and 0 deletions
+11
View File
@@ -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
+1
View File
@@ -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/
+52
View File
@@ -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");