1
0

release 6.12.5

This commit is contained in:
Konstantin Demin 2024-12-16 07:12:49 +03:00
parent a78998e6a3
commit efeeb92dda
42 changed files with 570 additions and 433 deletions

7
debian/changelog vendored
View File

@ -1,3 +1,10 @@
linux (6.12.5-1) sid; urgency=medium
* New upstream stable update:
https://www.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.12.5
-- Konstantin Demin <rockdrilla@gmail.com> Mon, 16 Dec 2024 06:43:43 +0300
linux (6.12.4-1) sid; urgency=medium
* Sync with Debian.

View File

@ -2386,7 +2386,6 @@ CONFIG_DEFAULT_HUNG_TASK_TIMEOUT=120
# CONFIG_TEST_LOCKUP is not set
# CONFIG_SCHED_DEBUG is not set
CONFIG_SCHEDSTATS=y
CONFIG_DEBUG_TIMEKEEPING=y
# CONFIG_PROVE_LOCKING is not set
# CONFIG_LOCK_STAT is not set
# CONFIG_DEBUG_RT_MUTEXES is not set
@ -3478,7 +3477,6 @@ CONFIG_CDROM=m
CONFIG_CGROUP_WRITEBACK=y
CONFIG_CLKBLD_I8253=y
CONFIG_CLKEVT_I8253=y
CONFIG_CLOCKSOURCE_VALIDATE_LAST_CYCLE=y
CONFIG_CLOCKSOURCE_WATCHDOG=y
CONFIG_CLZ_TAB=y
CONFIG_COMPACT_UNEVICTABLE_DEFAULT=0

View File

@ -18,7 +18,7 @@ Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
--- a/fs/btrfs/super.c
+++ b/fs/btrfs/super.c
@@ -2631,7 +2631,7 @@ module_exit(exit_btrfs_fs)
@@ -2618,7 +2618,7 @@ module_exit(exit_btrfs_fs)
MODULE_DESCRIPTION("B-Tree File System (BTRFS)");
MODULE_LICENSE("GPL");

View File

@ -21,7 +21,7 @@ Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
--- a/net/ieee802154/socket.c
+++ b/net/ieee802154/socket.c
@@ -1138,4 +1138,4 @@ module_exit(af_ieee802154_remove);
@@ -1140,4 +1140,4 @@ module_exit(af_ieee802154_remove);
MODULE_LICENSE("GPL");
MODULE_DESCRIPTION("IEEE 802.15.4 socket interface");

View File

@ -12,7 +12,7 @@ actually used.
---
--- a/fs/notify/fanotify/fanotify_user.c
+++ b/fs/notify/fanotify/fanotify_user.c
@@ -1752,6 +1752,14 @@ static int do_fanotify_mark(int fanotify
@@ -1763,6 +1763,14 @@ static int do_fanotify_mark(int fanotify
umask = FANOTIFY_EVENT_FLAGS;
}

View File

@ -54,7 +54,7 @@ use of $(ARCH) needs to be moved after this.
KCONFIG_CONFIG ?= .config
export KCONFIG_CONFIG
@@ -524,6 +494,35 @@ RUSTFLAGS_KERNEL =
@@ -525,6 +495,35 @@ RUSTFLAGS_KERNEL =
AFLAGS_KERNEL =
LDFLAGS_vmlinux =

View File

@ -20,7 +20,7 @@ is non-empty.
---
--- a/Makefile
+++ b/Makefile
@@ -1817,7 +1817,7 @@ PHONY += prepare
@@ -1818,7 +1818,7 @@ PHONY += prepare
# now expand this into a simple variable to reduce the cost of shell evaluations
prepare: CC_VERSION_TEXT := $(CC_VERSION_TEXT)
prepare:

View File

@ -42,7 +42,7 @@ Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
Ignore sysrq setting - this boot parameter will
--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
@@ -3164,6 +3164,14 @@ config COMPAT_32
@@ -3163,6 +3163,14 @@ config COMPAT_32
select HAVE_UID16
select OLD_SIGSUSPEND3

View File

@ -1,6 +1,6 @@
--- a/net/ipv4/af_inet.c
+++ b/net/ipv4/af_inet.c
@@ -1802,7 +1802,7 @@ static __net_init int inet_init_net(stru
@@ -1800,7 +1800,7 @@ static __net_init int inet_init_net(stru
/*
* Set defaults for local port range
*/

View File

@ -1,21 +0,0 @@
From 06bc88f16094c6f38e0890992af4a32415716c5d Mon Sep 17 00:00:00 2001
From: "Jan Alexander Steffens (heftig)" <heftig@archlinux.org>
Date: Thu, 18 Jul 2024 21:19:39 +0200
Subject: Revert "misc: ntsync: mark driver as "broken" to prevent from
building"
This reverts commit f5b335dc025cfee90957efa90dc72fada0d5abb4.
---
drivers/misc/Kconfig | 1 -
1 file changed, 1 deletion(-)
--- a/drivers/misc/Kconfig
+++ b/drivers/misc/Kconfig
@@ -517,7 +517,6 @@ config OPEN_DICE
config NTSYNC
tristate "NT synchronization primitive emulation"
- depends on BROKEN
help
This module provides kernel support for emulation of Windows NT
synchronization primitives. It is not a hardware driver.

View File

@ -0,0 +1,55 @@
From e50ffd43b88d64b8063a9fce59f1d03b56f6144c Mon Sep 17 00:00:00 2001
From: Elizabeth Figura <zfigura@codeweavers.com>
Date: Fri, 13 Dec 2024 13:34:42 -0600
Subject: ntsync: Return the fd from NTSYNC_IOC_CREATE_SEM.
Simplify the user API a bit by returning the fd as return value from the ioctl
instead of through the argument pointer.
Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
---
drivers/misc/ntsync.c | 7 ++-----
include/uapi/linux/ntsync.h | 3 +--
2 files changed, 3 insertions(+), 7 deletions(-)
--- a/drivers/misc/ntsync.c
+++ b/drivers/misc/ntsync.c
@@ -165,7 +165,6 @@ static int ntsync_obj_get_fd(struct ntsy
static int ntsync_create_sem(struct ntsync_device *dev, void __user *argp)
{
- struct ntsync_sem_args __user *user_args = argp;
struct ntsync_sem_args args;
struct ntsync_obj *sem;
int fd;
@@ -182,12 +181,10 @@ static int ntsync_create_sem(struct ntsy
sem->u.sem.count = args.count;
sem->u.sem.max = args.max;
fd = ntsync_obj_get_fd(sem);
- if (fd < 0) {
+ if (fd < 0)
kfree(sem);
- return fd;
- }
- return put_user(fd, &user_args->sem);
+ return fd;
}
static int ntsync_char_open(struct inode *inode, struct file *file)
--- a/include/uapi/linux/ntsync.h
+++ b/include/uapi/linux/ntsync.h
@@ -11,12 +11,11 @@
#include <linux/types.h>
struct ntsync_sem_args {
- __u32 sem;
__u32 count;
__u32 max;
};
-#define NTSYNC_IOC_CREATE_SEM _IOWR('N', 0x80, struct ntsync_sem_args)
+#define NTSYNC_IOC_CREATE_SEM _IOW ('N', 0x80, struct ntsync_sem_args)
#define NTSYNC_IOC_SEM_POST _IOWR('N', 0x81, __u32)

View File

@ -0,0 +1,64 @@
From 160e9bf7826da868ae4de261753a03cce2208ff6 Mon Sep 17 00:00:00 2001
From: Elizabeth Figura <zfigura@codeweavers.com>
Date: Fri, 13 Dec 2024 13:34:43 -0600
Subject: ntsync: Rename NTSYNC_IOC_SEM_POST to NTSYNC_IOC_SEM_RELEASE.
Use the more common "release" terminology, which is also the term used by NT,
instead of "post" (which is used by POSIX).
Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
---
drivers/misc/ntsync.c | 10 +++++-----
include/uapi/linux/ntsync.h | 2 +-
2 files changed, 6 insertions(+), 6 deletions(-)
--- a/drivers/misc/ntsync.c
+++ b/drivers/misc/ntsync.c
@@ -57,7 +57,7 @@ struct ntsync_device {
* Actually change the semaphore state, returning -EOVERFLOW if it is made
* invalid.
*/
-static int post_sem_state(struct ntsync_obj *sem, __u32 count)
+static int release_sem_state(struct ntsync_obj *sem, __u32 count)
{
__u32 sum;
@@ -71,7 +71,7 @@ static int post_sem_state(struct ntsync_
return 0;
}
-static int ntsync_sem_post(struct ntsync_obj *sem, void __user *argp)
+static int ntsync_sem_release(struct ntsync_obj *sem, void __user *argp)
{
__u32 __user *user_args = argp;
__u32 prev_count;
@@ -87,7 +87,7 @@ static int ntsync_sem_post(struct ntsync
spin_lock(&sem->lock);
prev_count = sem->u.sem.count;
- ret = post_sem_state(sem, args);
+ ret = release_sem_state(sem, args);
spin_unlock(&sem->lock);
@@ -114,8 +114,8 @@ static long ntsync_obj_ioctl(struct file
void __user *argp = (void __user *)parm;
switch (cmd) {
- case NTSYNC_IOC_SEM_POST:
- return ntsync_sem_post(obj, argp);
+ case NTSYNC_IOC_SEM_RELEASE:
+ return ntsync_sem_release(obj, argp);
default:
return -ENOIOCTLCMD;
}
--- a/include/uapi/linux/ntsync.h
+++ b/include/uapi/linux/ntsync.h
@@ -17,6 +17,6 @@ struct ntsync_sem_args {
#define NTSYNC_IOC_CREATE_SEM _IOW ('N', 0x80, struct ntsync_sem_args)
-#define NTSYNC_IOC_SEM_POST _IOWR('N', 0x81, __u32)
+#define NTSYNC_IOC_SEM_RELEASE _IOWR('N', 0x81, __u32)
#endif

View File

@ -1,6 +1,6 @@
From 60b01019526236e40466cf20bf1192074e5e1a7c Mon Sep 17 00:00:00 2001
From e855a17ec837cdee9047e6e23e47ed7b4312a265 Mon Sep 17 00:00:00 2001
From: Elizabeth Figura <zfigura@codeweavers.com>
Date: Sun, 19 May 2024 15:24:27 -0500
Date: Fri, 13 Dec 2024 13:34:44 -0600
Subject: ntsync: Introduce NTSYNC_IOC_WAIT_ANY.
This corresponds to part of the functionality of the NT syscall
@ -38,9 +38,9 @@ in future patches (split out to ease review).
Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
---
drivers/misc/ntsync.c | 245 ++++++++++++++++++++++++++++++++++++
include/uapi/linux/ntsync.h | 14 +++
2 files changed, 259 insertions(+)
drivers/misc/ntsync.c | 247 +++++++++++++++++++++++++++++++++++-
include/uapi/linux/ntsync.h | 14 ++
2 files changed, 260 insertions(+), 1 deletion(-)
--- a/drivers/misc/ntsync.c
+++ b/drivers/misc/ntsync.c
@ -126,10 +126,12 @@ Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
/*
* Actually change the semaphore state, returning -EOVERFLOW if it is made
* invalid.
@@ -88,6 +138,8 @@ static int ntsync_sem_post(struct ntsync
@@ -87,7 +137,9 @@ static int ntsync_sem_release(struct nts
spin_lock(&sem->lock);
prev_count = sem->u.sem.count;
ret = post_sem_state(sem, args);
- ret = release_sem_state(sem, args);
+ ret = post_sem_state(sem, args);
+ if (!ret)
+ try_wake_any_sem(sem);
@ -143,8 +145,8 @@ Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
return obj;
}
@@ -190,6 +243,196 @@ static int ntsync_create_sem(struct ntsy
return put_user(fd, &user_args->sem);
@@ -187,6 +240,196 @@ static int ntsync_create_sem(struct ntsy
return fd;
}
+static struct ntsync_obj *get_obj(struct ntsync_device *dev, int fd)
@ -340,7 +342,7 @@ Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
static int ntsync_char_open(struct inode *inode, struct file *file)
{
struct ntsync_device *dev;
@@ -221,6 +464,8 @@ static long ntsync_char_ioctl(struct fil
@@ -218,6 +461,8 @@ static long ntsync_char_ioctl(struct fil
switch (cmd) {
case NTSYNC_IOC_CREATE_SEM:
return ntsync_create_sem(dev, argp);
@ -351,7 +353,7 @@ Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
}
--- a/include/uapi/linux/ntsync.h
+++ b/include/uapi/linux/ntsync.h
@@ -16,7 +16,21 @@ struct ntsync_sem_args {
@@ -15,7 +15,21 @@ struct ntsync_sem_args {
__u32 max;
};
@ -368,8 +370,8 @@ Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
+
+#define NTSYNC_MAX_WAIT_COUNT 64
+
#define NTSYNC_IOC_CREATE_SEM _IOWR('N', 0x80, struct ntsync_sem_args)
#define NTSYNC_IOC_CREATE_SEM _IOW ('N', 0x80, struct ntsync_sem_args)
+#define NTSYNC_IOC_WAIT_ANY _IOWR('N', 0x82, struct ntsync_wait_args)
#define NTSYNC_IOC_SEM_POST _IOWR('N', 0x81, __u32)
#define NTSYNC_IOC_SEM_RELEASE _IOWR('N', 0x81, __u32)

View File

@ -1,6 +1,6 @@
From 73fc33606fcb7028ec1ee6027a361de4e85ab5d6 Mon Sep 17 00:00:00 2001
From 6c1dac87ff835a48a067fe75bd0a6965921dac78 Mon Sep 17 00:00:00 2001
From: Elizabeth Figura <zfigura@codeweavers.com>
Date: Sun, 19 May 2024 15:24:28 -0500
Date: Fri, 13 Dec 2024 13:34:45 -0600
Subject: ntsync: Introduce NTSYNC_IOC_WAIT_ALL.
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
@ -27,9 +27,9 @@ The locking scheme used here was written by Peter Zijlstra.
Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
---
drivers/misc/ntsync.c | 334 ++++++++++++++++++++++++++++++++++--
drivers/misc/ntsync.c | 336 ++++++++++++++++++++++++++++++++++--
include/uapi/linux/ntsync.h | 1 +
2 files changed, 322 insertions(+), 13 deletions(-)
2 files changed, 323 insertions(+), 14 deletions(-)
--- a/drivers/misc/ntsync.c
+++ b/drivers/misc/ntsync.c
@ -280,7 +280,7 @@ Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
list_for_each_entry(entry, &sem->any_waiters, node) {
struct ntsync_q *q = entry->q;
@@ -111,7 +315,7 @@ static int post_sem_state(struct ntsync_
@@ -111,7 +315,7 @@ static int release_sem_state(struct ntsy
{
__u32 sum;
@ -289,9 +289,9 @@ Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
if (check_add_overflow(sem->u.sem.count, count, &sum) ||
sum > sem->u.sem.max)
@@ -123,9 +327,11 @@ static int post_sem_state(struct ntsync_
@@ -123,9 +327,11 @@ static int release_sem_state(struct ntsy
static int ntsync_sem_post(struct ntsync_obj *sem, void __user *argp)
static int ntsync_sem_release(struct ntsync_obj *sem, void __user *argp)
{
+ struct ntsync_device *dev = sem->dev;
__u32 __user *user_args = argp;
@ -301,7 +301,7 @@ Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
int ret;
if (copy_from_user(&args, argp, sizeof(args)))
@@ -134,14 +340,17 @@ static int ntsync_sem_post(struct ntsync
@@ -134,14 +340,17 @@ static int ntsync_sem_release(struct nts
if (sem->type != NTSYNC_TYPE_SEM)
return -EINVAL;
@ -309,8 +309,9 @@ Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
+ all = ntsync_lock_obj(dev, sem);
prev_count = sem->u.sem.count;
ret = post_sem_state(sem, args);
- ret = post_sem_state(sem, args);
- if (!ret)
+ ret = release_sem_state(sem, args);
+ if (!ret) {
+ if (all)
+ try_wake_all_obj(dev, sem);
@ -331,7 +332,7 @@ Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
return obj;
}
@@ -304,7 +515,7 @@ static int ntsync_schedule(const struct
@@ -301,7 +512,7 @@ static int ntsync_schedule(const struct
* Allocate and initialize the ntsync_q structure, but do not queue us yet.
*/
static int setup_wait(struct ntsync_device *dev,
@ -340,7 +341,7 @@ Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
struct ntsync_q **ret_q)
{
const __u32 count = args->count;
@@ -327,6 +538,7 @@ static int setup_wait(struct ntsync_devi
@@ -324,6 +535,7 @@ static int setup_wait(struct ntsync_devi
return -ENOMEM;
q->task = current;
atomic_set(&q->signaled, -1);
@ -348,7 +349,7 @@ Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
q->count = count;
for (i = 0; i < count; i++) {
@@ -336,6 +548,16 @@ static int setup_wait(struct ntsync_devi
@@ -333,6 +545,16 @@ static int setup_wait(struct ntsync_devi
if (!obj)
goto err;
@ -365,7 +366,7 @@ Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
entry->obj = obj;
entry->q = q;
entry->index = i;
@@ -365,13 +587,14 @@ static int ntsync_wait_any(struct ntsync
@@ -362,13 +584,14 @@ static int ntsync_wait_any(struct ntsync
struct ntsync_wait_args args;
struct ntsync_q *q;
int signaled;
@ -381,7 +382,7 @@ Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
if (ret < 0)
return ret;
@@ -381,9 +604,9 @@ static int ntsync_wait_any(struct ntsync
@@ -378,9 +601,9 @@ static int ntsync_wait_any(struct ntsync
struct ntsync_q_entry *entry = &q->entries[i];
struct ntsync_obj *obj = entry->obj;
@ -393,7 +394,7 @@ Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
}
/* check if we are already signaled */
@@ -394,9 +617,9 @@ static int ntsync_wait_any(struct ntsync
@@ -391,9 +614,9 @@ static int ntsync_wait_any(struct ntsync
if (atomic_read(&q->signaled) != -1)
break;
@ -405,7 +406,7 @@ Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
}
/* sleep */
@@ -409,13 +632,94 @@ static int ntsync_wait_any(struct ntsync
@@ -406,13 +629,94 @@ static int ntsync_wait_any(struct ntsync
struct ntsync_q_entry *entry = &q->entries[i];
struct ntsync_obj *obj = entry->obj;
@ -502,7 +503,7 @@ Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
signaled = atomic_read(&q->signaled);
if (signaled != -1) {
struct ntsync_wait_args __user *user_args = argp;
@@ -441,6 +745,8 @@ static int ntsync_char_open(struct inode
@@ -438,6 +742,8 @@ static int ntsync_char_open(struct inode
if (!dev)
return -ENOMEM;
@ -511,7 +512,7 @@ Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
file->private_data = dev;
dev->file = file;
return nonseekable_open(inode, file);
@@ -464,6 +770,8 @@ static long ntsync_char_ioctl(struct fil
@@ -461,6 +767,8 @@ static long ntsync_char_ioctl(struct fil
switch (cmd) {
case NTSYNC_IOC_CREATE_SEM:
return ntsync_create_sem(dev, argp);
@ -522,11 +523,11 @@ Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
default:
--- a/include/uapi/linux/ntsync.h
+++ b/include/uapi/linux/ntsync.h
@@ -31,6 +31,7 @@ struct ntsync_wait_args {
@@ -30,6 +30,7 @@ struct ntsync_wait_args {
#define NTSYNC_IOC_CREATE_SEM _IOWR('N', 0x80, struct ntsync_sem_args)
#define NTSYNC_IOC_CREATE_SEM _IOW ('N', 0x80, struct ntsync_sem_args)
#define NTSYNC_IOC_WAIT_ANY _IOWR('N', 0x82, struct ntsync_wait_args)
+#define NTSYNC_IOC_WAIT_ALL _IOWR('N', 0x83, struct ntsync_wait_args)
#define NTSYNC_IOC_SEM_POST _IOWR('N', 0x81, __u32)
#define NTSYNC_IOC_SEM_RELEASE _IOWR('N', 0x81, __u32)

View File

@ -1,6 +1,6 @@
From fdeceab49078a80987c665ed837ee4f1b8a942a8 Mon Sep 17 00:00:00 2001
From bcdeaefdc4b60e7845232c201427717df3a83277 Mon Sep 17 00:00:00 2001
From: Elizabeth Figura <zfigura@codeweavers.com>
Date: Sun, 19 May 2024 15:24:29 -0500
Date: Fri, 13 Dec 2024 13:34:46 -0600
Subject: ntsync: Introduce NTSYNC_IOC_CREATE_MUTEX.
This corresponds to the NT syscall NtCreateMutant().
@ -18,9 +18,9 @@ created.
Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
---
drivers/misc/ntsync.c | 77 +++++++++++++++++++++++++++++++++++--
include/uapi/linux/ntsync.h | 10 ++++-
2 files changed, 83 insertions(+), 4 deletions(-)
drivers/misc/ntsync.c | 74 +++++++++++++++++++++++++++++++++++--
include/uapi/linux/ntsync.h | 9 ++++-
2 files changed, 79 insertions(+), 4 deletions(-)
--- a/drivers/misc/ntsync.c
+++ b/drivers/misc/ntsync.c
@ -121,13 +121,12 @@ Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
/*
* Actually change the semaphore state, returning -EOVERFLOW if it is made
* invalid.
@@ -454,6 +492,33 @@ static int ntsync_create_sem(struct ntsy
return put_user(fd, &user_args->sem);
@@ -451,6 +489,30 @@ static int ntsync_create_sem(struct ntsy
return fd;
}
+static int ntsync_create_mutex(struct ntsync_device *dev, void __user *argp)
+{
+ struct ntsync_mutex_args __user *user_args = argp;
+ struct ntsync_mutex_args args;
+ struct ntsync_obj *mutex;
+ int fd;
@ -144,18 +143,16 @@ Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
+ mutex->u.mutex.count = args.count;
+ mutex->u.mutex.owner = args.owner;
+ fd = ntsync_obj_get_fd(mutex);
+ if (fd < 0) {
+ if (fd < 0)
+ kfree(mutex);
+ return fd;
+ }
+
+ return put_user(fd, &user_args->mutex);
+ return fd;
+}
+
static struct ntsync_obj *get_obj(struct ntsync_device *dev, int fd)
{
struct file *file = fget(fd);
@@ -523,7 +588,7 @@ static int setup_wait(struct ntsync_devi
@@ -520,7 +582,7 @@ static int setup_wait(struct ntsync_devi
struct ntsync_q *q;
__u32 i, j;
@ -164,7 +161,7 @@ Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
return -EINVAL;
if (args->count > NTSYNC_MAX_WAIT_COUNT)
@@ -537,6 +602,7 @@ static int setup_wait(struct ntsync_devi
@@ -534,6 +596,7 @@ static int setup_wait(struct ntsync_devi
if (!q)
return -ENOMEM;
q->task = current;
@ -172,7 +169,7 @@ Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
atomic_set(&q->signaled, -1);
q->all = all;
q->count = count;
@@ -579,6 +645,9 @@ static void try_wake_any_obj(struct ntsy
@@ -576,6 +639,9 @@ static void try_wake_any_obj(struct ntsy
case NTSYNC_TYPE_SEM:
try_wake_any_sem(obj);
break;
@ -182,7 +179,7 @@ Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
}
}
@@ -768,6 +837,8 @@ static long ntsync_char_ioctl(struct fil
@@ -765,6 +831,8 @@ static long ntsync_char_ioctl(struct fil
void __user *argp = (void __user *)parm;
switch (cmd) {
@ -193,12 +190,11 @@ Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
case NTSYNC_IOC_WAIT_ALL:
--- a/include/uapi/linux/ntsync.h
+++ b/include/uapi/linux/ntsync.h
@@ -16,6 +16,12 @@ struct ntsync_sem_args {
@@ -15,6 +15,11 @@ struct ntsync_sem_args {
__u32 max;
};
+struct ntsync_mutex_args {
+ __u32 mutex;
+ __u32 owner;
+ __u32 count;
+};
@ -206,7 +202,7 @@ Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
#define NTSYNC_WAIT_REALTIME 0x1
struct ntsync_wait_args {
@@ -24,7 +30,8 @@ struct ntsync_wait_args {
@@ -23,7 +28,8 @@ struct ntsync_wait_args {
__u32 count;
__u32 index;
__u32 flags;
@ -216,11 +212,11 @@ Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
};
#define NTSYNC_MAX_WAIT_COUNT 64
@@ -32,6 +39,7 @@ struct ntsync_wait_args {
#define NTSYNC_IOC_CREATE_SEM _IOWR('N', 0x80, struct ntsync_sem_args)
@@ -31,6 +37,7 @@ struct ntsync_wait_args {
#define NTSYNC_IOC_CREATE_SEM _IOW ('N', 0x80, struct ntsync_sem_args)
#define NTSYNC_IOC_WAIT_ANY _IOWR('N', 0x82, struct ntsync_wait_args)
#define NTSYNC_IOC_WAIT_ALL _IOWR('N', 0x83, struct ntsync_wait_args)
+#define NTSYNC_IOC_CREATE_MUTEX _IOWR('N', 0x84, struct ntsync_sem_args)
+#define NTSYNC_IOC_CREATE_MUTEX _IOW ('N', 0x84, struct ntsync_mutex_args)
#define NTSYNC_IOC_SEM_POST _IOWR('N', 0x81, __u32)
#define NTSYNC_IOC_SEM_RELEASE _IOWR('N', 0x81, __u32)

View File

@ -1,6 +1,6 @@
From cc9ade623cd90cd002fb86f3aa249af2e6e4019e Mon Sep 17 00:00:00 2001
From e349279c9dc7fc2136a764a16074a90ef3039f38 Mon Sep 17 00:00:00 2001
From: Elizabeth Figura <zfigura@codeweavers.com>
Date: Sun, 19 May 2024 15:24:30 -0500
Date: Fri, 13 Dec 2024 13:34:47 -0600
Subject: ntsync: Introduce NTSYNC_IOC_MUTEX_UNLOCK.
This corresponds to the NT syscall NtReleaseMutant().
@ -17,7 +17,7 @@ Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
--- a/drivers/misc/ntsync.c
+++ b/drivers/misc/ntsync.c
@@ -396,6 +396,57 @@ static int ntsync_sem_post(struct ntsync
@@ -396,6 +396,57 @@ static int ntsync_sem_release(struct nts
return ret;
}
@ -77,8 +77,8 @@ Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
struct ntsync_obj *obj = file->private_data;
@@ -415,6 +466,8 @@ static long ntsync_obj_ioctl(struct file
switch (cmd) {
case NTSYNC_IOC_SEM_POST:
return ntsync_sem_post(obj, argp);
case NTSYNC_IOC_SEM_RELEASE:
return ntsync_sem_release(obj, argp);
+ case NTSYNC_IOC_MUTEX_UNLOCK:
+ return ntsync_mutex_unlock(obj, argp);
default:
@ -86,10 +86,10 @@ Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
}
--- a/include/uapi/linux/ntsync.h
+++ b/include/uapi/linux/ntsync.h
@@ -42,5 +42,6 @@ struct ntsync_wait_args {
#define NTSYNC_IOC_CREATE_MUTEX _IOWR('N', 0x84, struct ntsync_sem_args)
@@ -40,5 +40,6 @@ struct ntsync_wait_args {
#define NTSYNC_IOC_CREATE_MUTEX _IOW ('N', 0x84, struct ntsync_mutex_args)
#define NTSYNC_IOC_SEM_POST _IOWR('N', 0x81, __u32)
#define NTSYNC_IOC_SEM_RELEASE _IOWR('N', 0x81, __u32)
+#define NTSYNC_IOC_MUTEX_UNLOCK _IOWR('N', 0x85, struct ntsync_mutex_args)
#endif

View File

@ -1,6 +1,6 @@
From dca3fe766afa42e34f5d3f62c0f2850760663176 Mon Sep 17 00:00:00 2001
From ebb60a10ac3c6b28ba7a46aa67b279d41ad9356d Mon Sep 17 00:00:00 2001
From: Elizabeth Figura <zfigura@codeweavers.com>
Date: Sun, 19 May 2024 15:24:31 -0500
Date: Fri, 13 Dec 2024 13:34:48 -0600
Subject: ntsync: Introduce NTSYNC_IOC_MUTEX_KILL.
This does not correspond to any NT syscall. Rather, when a thread dies, it
@ -111,7 +111,7 @@ Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
{
struct ntsync_obj *obj = file->private_data;
@@ -468,6 +522,8 @@ static long ntsync_obj_ioctl(struct file
return ntsync_sem_post(obj, argp);
return ntsync_sem_release(obj, argp);
case NTSYNC_IOC_MUTEX_UNLOCK:
return ntsync_mutex_unlock(obj, argp);
+ case NTSYNC_IOC_MUTEX_KILL:
@ -119,7 +119,7 @@ Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
default:
return -ENOIOCTLCMD;
}
@@ -658,6 +714,7 @@ static int setup_wait(struct ntsync_devi
@@ -652,6 +708,7 @@ static int setup_wait(struct ntsync_devi
q->owner = args->owner;
atomic_set(&q->signaled, -1);
q->all = all;
@ -127,7 +127,7 @@ Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
q->count = count;
for (i = 0; i < count; i++) {
@@ -766,7 +823,7 @@ static int ntsync_wait_any(struct ntsync
@@ -760,7 +817,7 @@ static int ntsync_wait_any(struct ntsync
struct ntsync_wait_args __user *user_args = argp;
/* even if we caught a signal, we need to communicate success */
@ -136,7 +136,7 @@ Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
if (put_user(signaled, &user_args->index))
ret = -EFAULT;
@@ -847,7 +904,7 @@ static int ntsync_wait_all(struct ntsync
@@ -841,7 +898,7 @@ static int ntsync_wait_all(struct ntsync
struct ntsync_wait_args __user *user_args = argp;
/* even if we caught a signal, we need to communicate success */
@ -147,9 +147,9 @@ Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
ret = -EFAULT;
--- a/include/uapi/linux/ntsync.h
+++ b/include/uapi/linux/ntsync.h
@@ -43,5 +43,6 @@ struct ntsync_wait_args {
@@ -41,5 +41,6 @@ struct ntsync_wait_args {
#define NTSYNC_IOC_SEM_POST _IOWR('N', 0x81, __u32)
#define NTSYNC_IOC_SEM_RELEASE _IOWR('N', 0x81, __u32)
#define NTSYNC_IOC_MUTEX_UNLOCK _IOWR('N', 0x85, struct ntsync_mutex_args)
+#define NTSYNC_IOC_MUTEX_KILL _IOW ('N', 0x86, __u32)

View File

@ -1,6 +1,6 @@
From 3f3bbc85f1e613364261d685b8197c32ffdeaad0 Mon Sep 17 00:00:00 2001
From f74c8259d49ea4c0e679902da9c7c95ec06ae65c Mon Sep 17 00:00:00 2001
From: Elizabeth Figura <zfigura@codeweavers.com>
Date: Sun, 19 May 2024 15:24:32 -0500
Date: Fri, 13 Dec 2024 13:34:49 -0600
Subject: ntsync: Introduce NTSYNC_IOC_CREATE_EVENT.
This correspond to the NT syscall NtCreateEvent().
@ -17,9 +17,9 @@ creation time.
Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
---
drivers/misc/ntsync.c | 62 +++++++++++++++++++++++++++++++++++++
include/uapi/linux/ntsync.h | 7 +++++
2 files changed, 69 insertions(+)
drivers/misc/ntsync.c | 59 +++++++++++++++++++++++++++++++++++++
include/uapi/linux/ntsync.h | 6 ++++
2 files changed, 65 insertions(+)
--- a/drivers/misc/ntsync.c
+++ b/drivers/misc/ntsync.c
@ -91,13 +91,12 @@ Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
/*
* Actually change the semaphore state, returning -EOVERFLOW if it is made
* invalid.
@@ -628,6 +661,30 @@ static int ntsync_create_mutex(struct nt
return put_user(fd, &user_args->mutex);
@@ -622,6 +655,27 @@ static int ntsync_create_mutex(struct nt
return fd;
}
+static int ntsync_create_event(struct ntsync_device *dev, void __user *argp)
+{
+ struct ntsync_event_args __user *user_args = argp;
+ struct ntsync_event_args args;
+ struct ntsync_obj *event;
+ int fd;
@ -111,18 +110,16 @@ Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
+ event->u.event.manual = args.manual;
+ event->u.event.signaled = args.signaled;
+ fd = ntsync_obj_get_fd(event);
+ if (fd < 0) {
+ if (fd < 0)
+ kfree(event);
+ return fd;
+ }
+
+ return put_user(fd, &user_args->event);
+ return fd;
+}
+
static struct ntsync_obj *get_obj(struct ntsync_device *dev, int fd)
{
struct file *file = fget(fd);
@@ -758,6 +815,9 @@ static void try_wake_any_obj(struct ntsy
@@ -752,6 +806,9 @@ static void try_wake_any_obj(struct ntsy
case NTSYNC_TYPE_MUTEX:
try_wake_any_mutex(obj);
break;
@ -132,7 +129,7 @@ Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
}
}
@@ -947,6 +1007,8 @@ static long ntsync_char_ioctl(struct fil
@@ -941,6 +998,8 @@ static long ntsync_char_ioctl(struct fil
void __user *argp = (void __user *)parm;
switch (cmd) {
@ -143,12 +140,11 @@ Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
case NTSYNC_IOC_CREATE_SEM:
--- a/include/uapi/linux/ntsync.h
+++ b/include/uapi/linux/ntsync.h
@@ -22,6 +22,12 @@ struct ntsync_mutex_args {
@@ -20,6 +20,11 @@ struct ntsync_mutex_args {
__u32 count;
};
+struct ntsync_event_args {
+ __u32 event;
+ __u32 manual;
+ __u32 signaled;
+};
@ -156,11 +152,11 @@ Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
#define NTSYNC_WAIT_REALTIME 0x1
struct ntsync_wait_args {
@@ -40,6 +46,7 @@ struct ntsync_wait_args {
@@ -38,6 +43,7 @@ struct ntsync_wait_args {
#define NTSYNC_IOC_WAIT_ANY _IOWR('N', 0x82, struct ntsync_wait_args)
#define NTSYNC_IOC_WAIT_ALL _IOWR('N', 0x83, struct ntsync_wait_args)
#define NTSYNC_IOC_CREATE_MUTEX _IOWR('N', 0x84, struct ntsync_sem_args)
+#define NTSYNC_IOC_CREATE_EVENT _IOWR('N', 0x87, struct ntsync_event_args)
#define NTSYNC_IOC_CREATE_MUTEX _IOW ('N', 0x84, struct ntsync_mutex_args)
+#define NTSYNC_IOC_CREATE_EVENT _IOW ('N', 0x87, struct ntsync_event_args)
#define NTSYNC_IOC_SEM_POST _IOWR('N', 0x81, __u32)
#define NTSYNC_IOC_SEM_RELEASE _IOWR('N', 0x81, __u32)
#define NTSYNC_IOC_MUTEX_UNLOCK _IOWR('N', 0x85, struct ntsync_mutex_args)

View File

@ -1,6 +1,6 @@
From a6f107f17a976008b85c3e269bf4196e595d3f52 Mon Sep 17 00:00:00 2001
From bf60db9cfeccc8f92636b6dcf2eccd7fcd8d84f3 Mon Sep 17 00:00:00 2001
From: Elizabeth Figura <zfigura@codeweavers.com>
Date: Sun, 19 May 2024 15:24:33 -0500
Date: Fri, 13 Dec 2024 13:34:50 -0600
Subject: ntsync: Introduce NTSYNC_IOC_EVENT_SET.
This corresponds to the NT syscall NtSetEvent().
@ -58,8 +58,8 @@ Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
}
--- a/include/uapi/linux/ntsync.h
+++ b/include/uapi/linux/ntsync.h
@@ -51,5 +51,6 @@ struct ntsync_wait_args {
#define NTSYNC_IOC_SEM_POST _IOWR('N', 0x81, __u32)
@@ -48,5 +48,6 @@ struct ntsync_wait_args {
#define NTSYNC_IOC_SEM_RELEASE _IOWR('N', 0x81, __u32)
#define NTSYNC_IOC_MUTEX_UNLOCK _IOWR('N', 0x85, struct ntsync_mutex_args)
#define NTSYNC_IOC_MUTEX_KILL _IOW ('N', 0x86, __u32)
+#define NTSYNC_IOC_EVENT_SET _IOR ('N', 0x88, __u32)

View File

@ -1,6 +1,6 @@
From aa3ebb5870eb9ed259aba2ed4e07e9993e6cd978 Mon Sep 17 00:00:00 2001
From f2de3c99a840cac45446515dd268cb9d64f9f892 Mon Sep 17 00:00:00 2001
From: Elizabeth Figura <zfigura@codeweavers.com>
Date: Sun, 19 May 2024 15:24:34 -0500
Date: Fri, 13 Dec 2024 13:34:51 -0600
Subject: ntsync: Introduce NTSYNC_IOC_EVENT_RESET.
This corresponds to the NT syscall NtResetEvent().
@ -55,7 +55,7 @@ Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
}
--- a/include/uapi/linux/ntsync.h
+++ b/include/uapi/linux/ntsync.h
@@ -52,5 +52,6 @@ struct ntsync_wait_args {
@@ -49,5 +49,6 @@ struct ntsync_wait_args {
#define NTSYNC_IOC_MUTEX_UNLOCK _IOWR('N', 0x85, struct ntsync_mutex_args)
#define NTSYNC_IOC_MUTEX_KILL _IOW ('N', 0x86, __u32)
#define NTSYNC_IOC_EVENT_SET _IOR ('N', 0x88, __u32)

View File

@ -1,6 +1,6 @@
From 99bca5d776a3011214041c42107a210fe315a35e Mon Sep 17 00:00:00 2001
From 50c791dde217f9fdc1785de77fa2ae888d6bdb4e Mon Sep 17 00:00:00 2001
From: Elizabeth Figura <zfigura@codeweavers.com>
Date: Sun, 19 May 2024 15:24:35 -0500
Date: Fri, 13 Dec 2024 13:34:52 -0600
Subject: ntsync: Introduce NTSYNC_IOC_EVENT_PULSE.
This corresponds to the NT syscall NtPulseEvent().
@ -51,7 +51,7 @@ Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
}
--- a/include/uapi/linux/ntsync.h
+++ b/include/uapi/linux/ntsync.h
@@ -53,5 +53,6 @@ struct ntsync_wait_args {
@@ -50,5 +50,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)

View File

@ -1,6 +1,6 @@
From 1ef0ea672662bd19e7c6a4eac1067d11e50844b2 Mon Sep 17 00:00:00 2001
From 248013d9877d47dc5219344268c10b62de1f52f2 Mon Sep 17 00:00:00 2001
From: Elizabeth Figura <zfigura@codeweavers.com>
Date: Sun, 19 May 2024 15:24:36 -0500
Date: Fri, 13 Dec 2024 13:34:53 -0600
Subject: ntsync: Introduce NTSYNC_IOC_SEM_READ.
This corresponds to the NT syscall NtQuerySemaphore().
@ -9,13 +9,13 @@ This returns the current count and maximum count of the semaphore.
Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
---
drivers/misc/ntsync.c | 26 ++++++++++++++++++++++++++
drivers/misc/ntsync.c | 24 ++++++++++++++++++++++++
include/uapi/linux/ntsync.h | 1 +
2 files changed, 27 insertions(+)
2 files changed, 25 insertions(+)
--- a/drivers/misc/ntsync.c
+++ b/drivers/misc/ntsync.c
@@ -583,6 +583,30 @@ static int ntsync_event_reset(struct nts
@@ -583,6 +583,28 @@ static int ntsync_event_reset(struct nts
return 0;
}
@ -29,8 +29,6 @@ Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
+ if (sem->type != NTSYNC_TYPE_SEM)
+ return -EINVAL;
+
+ args.sem = 0;
+
+ all = ntsync_lock_obj(dev, sem);
+
+ args.count = sem->u.sem.count;
@ -46,10 +44,10 @@ Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
static int ntsync_obj_release(struct inode *inode, struct file *file)
{
struct ntsync_obj *obj = file->private_data;
@@ -602,6 +626,8 @@ static long ntsync_obj_ioctl(struct file
@@ -602,6 +624,8 @@ static long ntsync_obj_ioctl(struct file
switch (cmd) {
case NTSYNC_IOC_SEM_POST:
return ntsync_sem_post(obj, argp);
case NTSYNC_IOC_SEM_RELEASE:
return ntsync_sem_release(obj, argp);
+ case NTSYNC_IOC_SEM_READ:
+ return ntsync_sem_read(obj, argp);
case NTSYNC_IOC_MUTEX_UNLOCK:
@ -57,7 +55,7 @@ Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
case NTSYNC_IOC_MUTEX_KILL:
--- a/include/uapi/linux/ntsync.h
+++ b/include/uapi/linux/ntsync.h
@@ -54,5 +54,6 @@ struct ntsync_wait_args {
@@ -51,5 +51,6 @@ struct ntsync_wait_args {
#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)

View File

@ -1,6 +1,6 @@
From 7891b7d15abd12975aebb955821fbc43353b45d6 Mon Sep 17 00:00:00 2001
From 8fc7a993fd8bc6b1a09b4b965bee7d16bb2156cc Mon Sep 17 00:00:00 2001
From: Elizabeth Figura <zfigura@codeweavers.com>
Date: Sun, 19 May 2024 15:24:37 -0500
Date: Fri, 13 Dec 2024 13:34:54 -0600
Subject: ntsync: Introduce NTSYNC_IOC_MUTEX_READ.
This corresponds to the NT syscall NtQueryMutant().
@ -9,13 +9,13 @@ This returns the recursion count, owner, and abandoned state of the mutex.
Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
---
drivers/misc/ntsync.c | 28 ++++++++++++++++++++++++++++
drivers/misc/ntsync.c | 26 ++++++++++++++++++++++++++
include/uapi/linux/ntsync.h | 1 +
2 files changed, 29 insertions(+)
2 files changed, 27 insertions(+)
--- a/drivers/misc/ntsync.c
+++ b/drivers/misc/ntsync.c
@@ -607,6 +607,32 @@ static int ntsync_sem_read(struct ntsync
@@ -605,6 +605,30 @@ static int ntsync_sem_read(struct ntsync
return 0;
}
@ -30,8 +30,6 @@ Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
+ if (mutex->type != NTSYNC_TYPE_MUTEX)
+ return -EINVAL;
+
+ args.mutex = 0;
+
+ all = ntsync_lock_obj(dev, mutex);
+
+ args.count = mutex->u.mutex.count;
@ -48,7 +46,7 @@ Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
static int ntsync_obj_release(struct inode *inode, struct file *file)
{
struct ntsync_obj *obj = file->private_data;
@@ -632,6 +658,8 @@ static long ntsync_obj_ioctl(struct file
@@ -630,6 +654,8 @@ static long ntsync_obj_ioctl(struct file
return ntsync_mutex_unlock(obj, argp);
case NTSYNC_IOC_MUTEX_KILL:
return ntsync_mutex_kill(obj, argp);
@ -59,7 +57,7 @@ Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
case NTSYNC_IOC_EVENT_RESET:
--- a/include/uapi/linux/ntsync.h
+++ b/include/uapi/linux/ntsync.h
@@ -55,5 +55,6 @@ struct ntsync_wait_args {
@@ -52,5 +52,6 @@ struct ntsync_wait_args {
#define NTSYNC_IOC_EVENT_RESET _IOR ('N', 0x89, __u32)
#define NTSYNC_IOC_EVENT_PULSE _IOR ('N', 0x8a, __u32)
#define NTSYNC_IOC_SEM_READ _IOR ('N', 0x8b, struct ntsync_sem_args)

View File

@ -1,6 +1,6 @@
From 35ff252f99aa4002e0c2ecef37314a422969791b Mon Sep 17 00:00:00 2001
From aed34cc9c28dba5e3735d7c59e1970a32eefc5f4 Mon Sep 17 00:00:00 2001
From: Elizabeth Figura <zfigura@codeweavers.com>
Date: Sun, 19 May 2024 15:24:38 -0500
Date: Fri, 13 Dec 2024 13:34:55 -0600
Subject: ntsync: Introduce NTSYNC_IOC_EVENT_READ.
This corresponds to the NT syscall NtQueryEvent().
@ -9,13 +9,13 @@ This returns the signaled state of the event and whether it is manual-reset.
Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
---
drivers/misc/ntsync.c | 26 ++++++++++++++++++++++++++
drivers/misc/ntsync.c | 24 ++++++++++++++++++++++++
include/uapi/linux/ntsync.h | 1 +
2 files changed, 27 insertions(+)
2 files changed, 25 insertions(+)
--- a/drivers/misc/ntsync.c
+++ b/drivers/misc/ntsync.c
@@ -633,6 +633,30 @@ static int ntsync_mutex_read(struct ntsy
@@ -629,6 +629,28 @@ static int ntsync_mutex_read(struct ntsy
return ret;
}
@ -29,8 +29,6 @@ Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
+ if (event->type != NTSYNC_TYPE_EVENT)
+ return -EINVAL;
+
+ args.event = 0;
+
+ all = ntsync_lock_obj(dev, event);
+
+ args.manual = event->u.event.manual;
@ -46,7 +44,7 @@ Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
static int ntsync_obj_release(struct inode *inode, struct file *file)
{
struct ntsync_obj *obj = file->private_data;
@@ -666,6 +690,8 @@ static long ntsync_obj_ioctl(struct file
@@ -662,6 +684,8 @@ static long ntsync_obj_ioctl(struct file
return ntsync_event_reset(obj, argp);
case NTSYNC_IOC_EVENT_PULSE:
return ntsync_event_set(obj, argp, true);
@ -57,7 +55,7 @@ Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
}
--- a/include/uapi/linux/ntsync.h
+++ b/include/uapi/linux/ntsync.h
@@ -56,5 +56,6 @@ struct ntsync_wait_args {
@@ -53,5 +53,6 @@ struct ntsync_wait_args {
#define NTSYNC_IOC_EVENT_PULSE _IOR ('N', 0x8a, __u32)
#define NTSYNC_IOC_SEM_READ _IOR ('N', 0x8b, struct ntsync_sem_args)
#define NTSYNC_IOC_MUTEX_READ _IOR ('N', 0x8c, struct ntsync_mutex_args)

View File

@ -1,6 +1,6 @@
From 2c391d57d1393cd46bf8bab08232ddc3dd32d5e5 Mon Sep 17 00:00:00 2001
From 361a7fb848ba9cac87855cb68f9ab000ed1027be Mon Sep 17 00:00:00 2001
From: Elizabeth Figura <zfigura@codeweavers.com>
Date: Sun, 19 May 2024 15:24:39 -0500
Date: Fri, 13 Dec 2024 13:34:56 -0600
Subject: ntsync: Introduce alertable waits.
NT waits can optionally be made "alertable". This is a special channel for
@ -21,7 +21,7 @@ Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
--- a/drivers/misc/ntsync.c
+++ b/drivers/misc/ntsync.c
@@ -884,22 +884,29 @@ static int setup_wait(struct ntsync_devi
@@ -869,22 +869,29 @@ static int setup_wait(struct ntsync_devi
const struct ntsync_wait_args *args, bool all,
struct ntsync_q **ret_q)
{
@ -54,7 +54,7 @@ Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
if (!q)
return -ENOMEM;
q->task = current;
@@ -909,7 +916,7 @@ static int setup_wait(struct ntsync_devi
@@ -894,7 +901,7 @@ static int setup_wait(struct ntsync_devi
q->ownerdead = false;
q->count = count;
@ -63,7 +63,7 @@ Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
struct ntsync_q_entry *entry = &q->entries[i];
struct ntsync_obj *obj = get_obj(dev, fds[i]);
@@ -959,10 +966,10 @@ static void try_wake_any_obj(struct ntsy
@@ -944,10 +951,10 @@ static void try_wake_any_obj(struct ntsy
static int ntsync_wait_any(struct ntsync_device *dev, void __user *argp)
{
struct ntsync_wait_args args;
@ -75,7 +75,7 @@ Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
int ret;
if (copy_from_user(&args, argp, sizeof(args)))
@@ -972,9 +979,13 @@ static int ntsync_wait_any(struct ntsync
@@ -957,9 +964,13 @@ static int ntsync_wait_any(struct ntsync
if (ret < 0)
return ret;
@ -90,7 +90,7 @@ Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
struct ntsync_q_entry *entry = &q->entries[i];
struct ntsync_obj *obj = entry->obj;
@@ -983,9 +994,15 @@ static int ntsync_wait_any(struct ntsync
@@ -968,9 +979,15 @@ static int ntsync_wait_any(struct ntsync
ntsync_unlock_obj(dev, obj, all);
}
@ -108,7 +108,7 @@ Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
struct ntsync_obj *obj = q->entries[i].obj;
if (atomic_read(&q->signaled) != -1)
@@ -1002,7 +1019,7 @@ static int ntsync_wait_any(struct ntsync
@@ -987,7 +1004,7 @@ static int ntsync_wait_any(struct ntsync
/* and finally, unqueue */
@ -117,7 +117,7 @@ Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
struct ntsync_q_entry *entry = &q->entries[i];
struct ntsync_obj *obj = entry->obj;
@@ -1062,6 +1079,14 @@ static int ntsync_wait_all(struct ntsync
@@ -1047,6 +1064,14 @@ static int ntsync_wait_all(struct ntsync
*/
list_add_tail(&entry->node, &obj->all_waiters);
}
@ -132,7 +132,7 @@ Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
/* check if we are already signaled */
@@ -1069,6 +1094,21 @@ static int ntsync_wait_all(struct ntsync
@@ -1054,6 +1079,21 @@ static int ntsync_wait_all(struct ntsync
mutex_unlock(&dev->wait_all_lock);
@ -154,7 +154,7 @@ Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
/* sleep */
ret = ntsync_schedule(q, &args);
@@ -1094,6 +1134,18 @@ static int ntsync_wait_all(struct ntsync
@@ -1079,6 +1119,18 @@ static int ntsync_wait_all(struct ntsync
mutex_unlock(&dev->wait_all_lock);
@ -175,7 +175,7 @@ Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
struct ntsync_wait_args __user *user_args = argp;
--- a/include/uapi/linux/ntsync.h
+++ b/include/uapi/linux/ntsync.h
@@ -37,7 +37,8 @@ struct ntsync_wait_args {
@@ -34,7 +34,8 @@ struct ntsync_wait_args {
__u32 index;
__u32 flags;
__u32 owner;

View File

@ -1,6 +1,6 @@
From 8d87043cd76368bb9996ba541d12e40cbb4201e5 Mon Sep 17 00:00:00 2001
From b240b27e5348d38acbc4a12f1dc762dd1845f391 Mon Sep 17 00:00:00 2001
From: Elizabeth Figura <zfigura@codeweavers.com>
Date: Sun, 19 May 2024 15:24:52 -0500
Date: Fri, 13 Dec 2024 13:35:09 -0600
Subject: maintainers: Add an entry for ntsync.
Add myself as maintainer, supported by CodeWeavers.

View File

@ -1,6 +1,6 @@
From 4cb25d42d38f1e0b144b084674591b70afa60bb0 Mon Sep 17 00:00:00 2001
From 733e310bb840117593a0eb4726fa63b34fea9cc3 Mon Sep 17 00:00:00 2001
From: Elizabeth Figura <zfigura@codeweavers.com>
Date: Sun, 19 May 2024 15:24:53 -0500
Date: Fri, 13 Dec 2024 13:35:10 -0600
Subject: docs: ntsync: Add documentation for the ntsync uAPI.
Add an overall explanation of the driver architecture, and complete and precise
@ -9,8 +9,8 @@ specification for its intended behaviour.
Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
---
Documentation/userspace-api/index.rst | 1 +
Documentation/userspace-api/ntsync.rst | 398 +++++++++++++++++++++++++
2 files changed, 399 insertions(+)
Documentation/userspace-api/ntsync.rst | 385 +++++++++++++++++++++++++
2 files changed, 386 insertions(+)
create mode 100644 Documentation/userspace-api/ntsync.rst
--- a/Documentation/userspace-api/index.rst
@ -25,7 +25,7 @@ Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
--- /dev/null
+++ b/Documentation/userspace-api/ntsync.rst
@@ -0,0 +1,398 @@
@@ -0,0 +1,385 @@
+===================================
+NT synchronization primitive driver
+===================================
@ -101,19 +101,16 @@ Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
+structures used in ioctl calls::
+
+ struct ntsync_sem_args {
+ __u32 sem;
+ __u32 count;
+ __u32 max;
+ };
+
+ struct ntsync_mutex_args {
+ __u32 mutex;
+ __u32 owner;
+ __u32 count;
+ };
+
+ struct ntsync_event_args {
+ __u32 event;
+ __u32 signaled;
+ __u32 manual;
+ };
@ -130,7 +127,7 @@ Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
+ };
+
+Depending on the ioctl, members of the structure may be used as input,
+output, or not at all. All ioctls return 0 on success.
+output, or not at all.
+
+The ioctls on the device file are as follows:
+
@ -141,14 +138,13 @@ Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
+
+ .. list-table::
+
+ * - ``sem``
+ - On output, contains a file descriptor to the created semaphore.
+ * - ``count``
+ - Initial count of the semaphore.
+ * - ``max``
+ - Maximum count of the semaphore.
+
+ Fails with ``EINVAL`` if ``count`` is greater than ``max``.
+ On success, returns a file descriptor the created semaphore.
+
+.. c:macro:: NTSYNC_IOC_CREATE_MUTEX
+
@ -157,8 +153,6 @@ Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
+
+ .. list-table::
+
+ * - ``mutex``
+ - On output, contains a file descriptor to the created mutex.
+ * - ``count``
+ - Initial recursion count of the mutex.
+ * - ``owner``
@ -166,6 +160,7 @@ Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
+
+ If ``owner`` is nonzero and ``count`` is zero, or if ``owner`` is
+ zero and ``count`` is nonzero, the function fails with ``EINVAL``.
+ On success, returns a file descriptor the created mutex.
+
+.. c:macro:: NTSYNC_IOC_CREATE_EVENT
+
@ -174,8 +169,6 @@ Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
+
+ .. list-table::
+
+ * - ``event``
+ - On output, contains a file descriptor to the created event.
+ * - ``signaled``
+ - If nonzero, the event is initially signaled, otherwise
+ nonsignaled.
@ -183,6 +176,8 @@ Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
+ - If nonzero, the event is a manual-reset event, otherwise
+ auto-reset.
+
+ On success, returns a file descriptor the created event.
+
+The ioctls on the individual objects are as follows:
+
+.. c:macro:: NTSYNC_IOC_SEM_POST
@ -205,8 +200,6 @@ Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
+
+ .. list-table::
+
+ * - ``mutex``
+ - Ignored.
+ * - ``owner``
+ - Specifies the owner trying to release this mutex.
+ * - ``count``
@ -255,8 +248,6 @@ Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
+
+ .. list-table::
+
+ * - ``sem``
+ - Ignored.
+ * - ``count``
+ - On output, contains the current count of the semaphore.
+ * - ``max``
@ -269,8 +260,6 @@ Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
+
+ .. list-table::
+
+ * - ``mutex``
+ - Ignored.
+ * - ``owner``
+ - On output, contains the current owner of the mutex, or zero
+ if the mutex is not currently owned.
@ -288,8 +277,6 @@ Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
+
+ .. list-table::
+
+ * - ``event``
+ - Ignored.
+ * - ``signaled``
+ - On output, contains the current state of the event.
+ * - ``manual``

View File

@ -0,0 +1,25 @@
From 4871bb89577d78a3d55b44e47c3a4f677dbdc89b Mon Sep 17 00:00:00 2001
From: Elizabeth Figura <zfigura@codeweavers.com>
Date: Fri, 13 Dec 2024 13:35:11 -0600
Subject: ntsync: No longer depend on BROKEN.
f5b335dc025cfee90957efa90dc72fada0d5abb4 ("misc: ntsync: mark driver as "broken"
to prevent from building") was committed to avoid the driver being used while
only part of its functionality was released. Since the rest of the functionality
has now been committed, revert this.
Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
---
drivers/misc/Kconfig | 1 -
1 file changed, 1 deletion(-)
--- a/drivers/misc/Kconfig
+++ b/drivers/misc/Kconfig
@@ -517,7 +517,6 @@ config OPEN_DICE
config NTSYNC
tristate "NT synchronization primitive emulation"
- depends on BROKEN
help
This module provides kernel support for emulation of Windows NT
synchronization primitives. It is not a hardware driver.

View File

@ -13,7 +13,7 @@ dependency on CONFIG_ARC and adds RUSTFLAGS.
--- a/Makefile
+++ b/Makefile
@@ -812,6 +812,9 @@ KBUILD_CFLAGS += -fno-delete-null-pointe
@@ -813,6 +813,9 @@ KBUILD_CFLAGS += -fno-delete-null-pointe
ifdef CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE
KBUILD_CFLAGS += -O2
KBUILD_RUSTFLAGS += -Copt-level=2

View File

@ -1,6 +1,6 @@
--- a/Makefile
+++ b/Makefile
@@ -820,6 +820,10 @@ KBUILD_CFLAGS += -Os
@@ -821,6 +821,10 @@ KBUILD_CFLAGS += -Os
KBUILD_RUSTFLAGS += -Copt-level=s
endif

View File

@ -11,7 +11,7 @@ Signed-off-by: Alexandre Frade <kernel@xanmod.org>
--- a/Makefile
+++ b/Makefile
@@ -824,6 +824,13 @@ ifdef CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE
@@ -825,6 +825,13 @@ ifdef CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE
KBUILD_CFLAGS += $(call cc-option,-fivopts)
endif

View File

@ -0,0 +1,24 @@
From 578cb97f41beb5d2dde81b8a4c1db6e01e8bcc6a Mon Sep 17 00:00:00 2001
From: Oleksandr Natalenko <oleksandr@natalenko.name>
Date: Wed, 11 Dec 2024 08:50:50 +0100
Subject: kbuild-6.12: adopt proposed upstream change for generic CPUs
Link: https://lore.kernel.org/lkml/20241210144945.2325330-4-arnd@kernel.org/
Signed-off-by: Oleksandr Natalenko <oleksandr@natalenko.name>
---
arch/x86/Makefile | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
--- a/arch/x86/Makefile
+++ b/arch/x86/Makefile
@@ -184,8 +184,8 @@ else
cflags-$(CONFIG_MCORE2) += -march=core2
cflags-$(CONFIG_MATOM) += -march=bonnell
ifeq ($(CONFIG_X86_64_VERSION),1)
- cflags-$(CONFIG_GENERIC_CPU) += -mtune=generic
- rustflags-$(CONFIG_GENERIC_CPU) += -Ztune-cpu=generic
+ cflags-$(CONFIG_GENERIC_CPU) += -march=x86-64 -mtune=generic
+ rustflags-$(CONFIG_GENERIC_CPU) += -Ctarget-cpu=x86-64 -Ztune-cpu=generic
else
cflags-$(CONFIG_GENERIC_CPU) += -march=x86-64-v$(CONFIG_X86_64_VERSION)
rustflags-$(CONFIG_GENERIC_CPU) += -Ctarget-cpu=x86-64-v$(CONFIG_X86_64_VERSION)

View File

@ -142,7 +142,7 @@ Signed-off-by: Alexandre Frade <kernel@xanmod.org>
* and hopefully then we'll have sufficient space.
--- a/net/ipv4/tcp_ipv4.c
+++ b/net/ipv4/tcp_ipv4.c
@@ -3524,6 +3524,7 @@ static int __net_init tcp_sk_init(struct
@@ -3525,6 +3525,7 @@ static int __net_init tcp_sk_init(struct
net->ipv4.sysctl_tcp_syn_linear_timeouts = 4;
net->ipv4.sysctl_tcp_shrink_window = 0;

View File

@ -180,7 +180,7 @@ Signed-off-by: Alexandre Frade <kernel@xanmod.org>
/*
* Some NVIDIA GPU devices do not work with bus reset, SBR needs to be
* prevented for those affected devices.
@@ -5168,6 +5268,8 @@ static const struct pci_dev_acs_enabled
@@ -5171,6 +5271,8 @@ static const struct pci_dev_acs_enabled
{ PCI_VENDOR_ID_ZHAOXIN, PCI_ANY_ID, pci_quirk_zhaoxin_pcie_ports_acs },
/* Wangxun nics */
{ PCI_VENDOR_ID_WANGXUN, PCI_ANY_ID, pci_quirk_wangxun_nic_acs },

View File

@ -12,7 +12,7 @@ Signed-off-by: Alexandre Frade <kernel@xanmod.org>
--- a/Makefile
+++ b/Makefile
@@ -996,15 +996,8 @@ export CC_FLAGS_FPU
@@ -997,15 +997,8 @@ export CC_FLAGS_FPU
export CC_FLAGS_NO_FPU
ifneq ($(CONFIG_FUNCTION_ALIGNMENT),0)

View File

@ -11,11 +11,11 @@ Signed-off-by: Alexandre Frade <kernel@xanmod.org>
--- a/scripts/setlocalversion
+++ b/scripts/setlocalversion
@@ -92,7 +92,6 @@ scm_version()
@@ -113,7 +113,6 @@ scm_version()
# If only the short version is requested, don't bother
# running further git commands
if $short; then
- echo "+"
return
fi
# If we are past the tagged commit, we pretty print it.

View File

@ -11,7 +11,7 @@ Signed-off-by: Alexandre Frade <kernel@xanmod.org>
--- a/scripts/setlocalversion
+++ b/scripts/setlocalversion
@@ -182,4 +182,4 @@ elif [ "${LOCALVERSION+set}" != "set" ];
@@ -204,4 +204,4 @@ elif [ "${LOCALVERSION+set}" != "set" ];
scm_version="$(scm_version --short)"
fi

View File

@ -15,7 +15,7 @@ Signed-off-by: Sultan Alsawaf <sultan@kerneltoast.com>
--- a/Makefile
+++ b/Makefile
@@ -1018,11 +1018,6 @@ KBUILD_CFLAGS += -fno-strict-overflow
@@ -1019,11 +1019,6 @@ KBUILD_CFLAGS += -fno-strict-overflow
# Make sure -fstack-check isn't enabled (like gentoo apparently did)
KBUILD_CFLAGS += -fno-stack-check

View File

@ -49,7 +49,7 @@ Subject: ZEN: drm/amdgpu/pm: Allow override of min_power_limit with
*/
--- a/drivers/gpu/drm/amd/pm/amdgpu_pm.c
+++ b/drivers/gpu/drm/amd/pm/amdgpu_pm.c
@@ -3272,6 +3272,9 @@ static ssize_t amdgpu_hwmon_show_power_c
@@ -3276,6 +3276,9 @@ static ssize_t amdgpu_hwmon_show_power_c
struct device_attribute *attr,
char *buf)
{
@ -61,7 +61,7 @@ Subject: ZEN: drm/amdgpu/pm: Allow override of min_power_limit with
--- a/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
+++ b/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
@@ -2779,7 +2779,10 @@ int smu_get_power_limit(void *handle,
@@ -2792,7 +2792,10 @@ int smu_get_power_limit(void *handle,
*limit = smu->max_power_limit;
break;
case SMU_PPT_LIMIT_MIN:
@ -73,7 +73,7 @@ Subject: ZEN: drm/amdgpu/pm: Allow override of min_power_limit with
break;
default:
return -EINVAL;
@@ -2803,7 +2806,14 @@ static int smu_set_power_limit(void *han
@@ -2816,7 +2819,14 @@ static int smu_set_power_limit(void *han
if (smu->ppt_funcs->set_power_limit)
return smu->ppt_funcs->set_power_limit(smu, limit_type, limit);

View File

@ -0,0 +1,22 @@
From a31b09c511dd58e5032a3c941638207281b20ce4 Mon Sep 17 00:00:00 2001
From: Steven Barrett <steven@liquorix.net>
Date: Sat, 14 Dec 2024 11:23:18 -0600
Subject: ZEN: kernel/Kconfig.preempt: Remove EXPERT conditional on PREEMPT_RT
Allow users to select PREEMPT_RT without requiring to configure all
items hidden by enabling CONFIG_EXPERT.
---
kernel/Kconfig.preempt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
--- a/kernel/Kconfig.preempt
+++ b/kernel/Kconfig.preempt
@@ -69,7 +69,7 @@ config PREEMPT
config PREEMPT_RT
bool "Fully Preemptible Kernel (Real-Time)"
- depends on EXPERT && ARCH_SUPPORTS_RT
+ depends on ARCH_SUPPORTS_RT
select PREEMPTION
help
This option turns the kernel into a real-time kernel by replacing

36
debian/patches/series vendored
View File

@ -122,6 +122,7 @@ mixed-arch/0003-krd-adjust-CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE_O3.patch
mixed-arch/0004-XANMOD-x86-build-Prevent-generating-avx2-and-avx512-.patch
mixed-arch/0005-krd-adjust-KBUILD_CFLAGS-fno-tree-vectorize.patch
mixed-arch/0006-XANMOD-kbuild-Add-GCC-SMS-based-modulo-scheduling-fl.patch
mixed-arch/0007-PF-kbuild-6.12-adopt-proposed-upstream-change-for-gener.patch
misc-bbr3/0001-net-tcp_bbr-broaden-app-limited-rate-sample-detectio.patch
misc-bbr3/0002-net-tcp_bbr-v2-shrink-delivered_mstamp-first_tx_msta.patch
@ -143,22 +144,24 @@ misc-bbr3/0017-net-tcp_bbr-v3-ensure-ECN-enabled-BBR-flows-set-ECT-.patch
misc-bbr3/0018-tcp-export-TCPI_OPT_ECN_LOW-in-tcp_info-tcpi_options.patch
misc-bbr3/0019-x86-cfi-bpf-Add-tso_segs-and-skb_marked_lost-to-bpf_.patch
misc-ntsync5/0001-ntsync-Introduce-NTSYNC_IOC_WAIT_ANY.patch
misc-ntsync5/0002-ntsync-Introduce-NTSYNC_IOC_WAIT_ALL.patch
misc-ntsync5/0003-ntsync-Introduce-NTSYNC_IOC_CREATE_MUTEX.patch
misc-ntsync5/0004-ntsync-Introduce-NTSYNC_IOC_MUTEX_UNLOCK.patch
misc-ntsync5/0005-ntsync-Introduce-NTSYNC_IOC_MUTEX_KILL.patch
misc-ntsync5/0006-ntsync-Introduce-NTSYNC_IOC_CREATE_EVENT.patch
misc-ntsync5/0007-ntsync-Introduce-NTSYNC_IOC_EVENT_SET.patch
misc-ntsync5/0008-ntsync-Introduce-NTSYNC_IOC_EVENT_RESET.patch
misc-ntsync5/0009-ntsync-Introduce-NTSYNC_IOC_EVENT_PULSE.patch
misc-ntsync5/0010-ntsync-Introduce-NTSYNC_IOC_SEM_READ.patch
misc-ntsync5/0011-ntsync-Introduce-NTSYNC_IOC_MUTEX_READ.patch
misc-ntsync5/0012-ntsync-Introduce-NTSYNC_IOC_EVENT_READ.patch
misc-ntsync5/0013-ntsync-Introduce-alertable-waits.patch
misc-ntsync5/0014-maintainers-Add-an-entry-for-ntsync.patch
misc-ntsync5/0015-docs-ntsync-Add-documentation-for-the-ntsync-uAPI.patch
misc-ntsync5/0016-Revert-misc-ntsync-mark-driver-as-broken-to-prevent-.patch
misc-ntsync7/0001-ntsync-Return-the-fd-from-NTSYNC_IOC_CREATE_SEM.patch
misc-ntsync7/0002-ntsync-Rename-NTSYNC_IOC_SEM_POST-to-NTSYNC_IOC_SEM_.patch
misc-ntsync7/0003-ntsync-Introduce-NTSYNC_IOC_WAIT_ANY.patch
misc-ntsync7/0004-ntsync-Introduce-NTSYNC_IOC_WAIT_ALL.patch
misc-ntsync7/0005-ntsync-Introduce-NTSYNC_IOC_CREATE_MUTEX.patch
misc-ntsync7/0006-ntsync-Introduce-NTSYNC_IOC_MUTEX_UNLOCK.patch
misc-ntsync7/0007-ntsync-Introduce-NTSYNC_IOC_MUTEX_KILL.patch
misc-ntsync7/0008-ntsync-Introduce-NTSYNC_IOC_CREATE_EVENT.patch
misc-ntsync7/0009-ntsync-Introduce-NTSYNC_IOC_EVENT_SET.patch
misc-ntsync7/0010-ntsync-Introduce-NTSYNC_IOC_EVENT_RESET.patch
misc-ntsync7/0011-ntsync-Introduce-NTSYNC_IOC_EVENT_PULSE.patch
misc-ntsync7/0012-ntsync-Introduce-NTSYNC_IOC_SEM_READ.patch
misc-ntsync7/0013-ntsync-Introduce-NTSYNC_IOC_MUTEX_READ.patch
misc-ntsync7/0014-ntsync-Introduce-NTSYNC_IOC_EVENT_READ.patch
misc-ntsync7/0015-ntsync-Introduce-alertable-waits.patch
misc-ntsync7/0016-maintainers-Add-an-entry-for-ntsync.patch
misc-ntsync7/0017-docs-ntsync-Add-documentation-for-the-ntsync-uAPI.patch
misc-ntsync7/0018-ntsync-No-longer-depend-on-BROKEN.patch
misc-openwrt/0001-mac80211-ignore-AP-power-level-when-tx-power-type-is.patch
@ -298,6 +301,7 @@ patchset-zen/sauce/0020-ZEN-INTERACTIVE-dm-crypt-Disable-workqueues-for-cryp.pat
patchset-zen/sauce/0021-ZEN-INTERACTIVE-mm-swap-Disable-swap-in-readahead.patch
patchset-zen/sauce/0022-ZEN-INTERACTIVE-Document-PDS-BMQ-configuration.patch
patchset-zen/sauce/0023-ZEN-ahci-Disable-staggered-spinup-by-default.patch
patchset-zen/sauce/0024-ZEN-kernel-Kconfig.preempt-Remove-EXPERT-conditional.patch
patchset-pf/fixes/0001-arch-Kconfig-Default-to-maximum-amount-of-ASLR-bits.patch
patchset-pf/fixes/0002-drivers-firmware-skip-simpledrm-if-nvidia-drm.modese.patch

View File

@ -1,84 +1,6 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
Comment: Ben Hutchings, E7BFC8EC95861109
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
0Kxj20YbAcPtwA==
=hzpE
-----END PGP PUBLIC KEY BLOCK-----
-----BEGIN PGP PUBLIC KEY BLOCK-----
Comment: Greg Kroah-Hartman, 38DBBDC86092693E
mQINBE58tdUBEADY5iQsoL4k8l06dNt+uP2lH8IPi14M51/tOHsW1ZNc8Iok0stH
xsFNBE58tdUBEADY5iQsoL4k8l06dNt+uP2lH8IPi14M51/tOHsW1ZNc8Iok0stH
+uA8w0LpN97UgNhsvXFEkIK2JjLalasUTiUoIeeTshD9t+ekFBx5a9SbLCFlBrDS
TwfieK2xalzomoL22N5ztj1XbdLWh6NRM6kKMeYvgAGo8p884WJk4pPIJK6G0wEw
e9/TG6ilRSLOtxyaF9yZ+FC1eOA1S47Ld2K25Y5GsQF5agwi7nES+9tVVBZp97kB
@ -89,8 +11,8 @@ WGqf8f9s5lSpH8D8OZLDOXKolqnBd5YrJr0Qmpq4cCcIqwNCMbURtsTpbW/EdWl+
AKwnStXXLI5O6Hg+m4c3O8ZwbzcnAOgTJePm2Xoi71t9SbAZZx1/W7p6/57UGrXR
Q4WfiwpOPD0siF33yO2L7G7Gmm4zh8ieX8aS8guqfWFhuSsDta77F2FB9ozD9WN0
Z5tJowiy3Z1VkxvZjZH8IbcB05yBBBV47BJxrPnSuDT+w45yNTqZ6m4VYwARAQAB
tE1HcmVnIEtyb2FoLUhhcnRtYW4gKExpbnV4IGtlcm5lbCBzdGFibGUgcmVsZWFz
ZSBzaWduaW5nIGtleSkgPGdyZWdAa3JvYWguY29tPokCOAQTAQIAIgUCTny11QIb
zU1HcmVnIEtyb2FoLUhhcnRtYW4gKExpbnV4IGtlcm5lbCBzdGFibGUgcmVsZWFz
ZSBzaWduaW5nIGtleSkgPGdyZWdAa3JvYWguY29tPsLBeAQTAQIAIgUCTny11QIb
AwYLCQgHAwIGFQgCCQoLBBYCAwECHgECF4AACgkQONu9yGCSaT5fXBAAx2NfTb1I
Z59eV3PKtqNG0qwQdq/62oSqNKlvlp/JzkeynjeJ7ic1IOs/CTTv2+xoPkLNcNhO
Pz7uem/4aa/my9A0AEp5UsF6Lvdo/Hy7Jxc++0EgW//TyvWcU9qd5qS/85VZf8I5
@ -102,7 +24,7 @@ EDl7JkByXVKJiVVihDuEe5JZXkoIO/eTN6uceF89ZQiO/dFn0Kcqc4vL7uuI6FDM
RZK7mY7bjFxFW1VjspcxhT1NdR7SFNrK8Glzd5FS67oTwSNB3CzkJ3ON/kOJ8JSx
FEt1ZTc2ZpQujrFyTtbksWm3Yy63kbpwxRoR6xgaGwtx0SdkkWDCcA+2GZymCjk5
FFQkAhoEk0tu/n5fvHS7TTZui9a2HMsyqmgTJzeU0eQJDgmb/ahzW0VgjHtABaJr
40Q83M9upkZdHFXSZb7UHFYkAdH1OxdvSFW5Ag0ETny11QEQALIiIb/niWy6M6Gf
40Q83M9upkZdHFXSZb7UHFYkAdH1OxdvSFXOwU0ETny11QEQALIiIb/niWy6M6Gf
BMt/2EBWpLuE+FYVeUQGpGhXD2rUhOo9UpoxBD/Y5mc5OaJsVL3fySYQldVFOaT7
Pu0J1N5FXIBckgtbT3eg+TGD9WIfJy6ZpWjBKf6K4frwTwRpLBKqZhcA/78KzxFH
eRHjV4cEVZVNoRtVqLYuTlbdlkH6G2YxgCioxAfqvsGjsg2ES7Xl6xz3uaBH1DFX
@ -113,7 +35,7 @@ moxfqt6OGig59cYv7PSMfHX25dV01Ns+2R1eo7qiktkV+3CSSs/dUArcTxyovuad
IAUaZAJ3XqsS3FGzZsPYMYNM9faZqOfF6mmGmCZRJMMESWuWjc8ZnVAv4luyD18v
lsr/J9rO0t28s4PJyqJGozEXLBLtsaCVihxBHMY7QK/pC0jRniLpeniDDHY875TI
iG3nrmtR84nnW9WNOG6tuaIcB6hD/DmSr72rRoNEpCa/eT7XiCOymGHS5gWR+94R
1+J1rQZbd1T8gSq/nQQluJII7oz7ABEBAAGJAh8EGAECAAkFAk58tdUCGwwACgkQ
1+J1rQZbd1T8gSq/nQQluJII7oz7ABEBAAHCwV8EGAECAAkFAk58tdUCGwwACgkQ
ONu9yGCSaT4wUxAAvup1iyrlHcch2RHfxpmFRBYNOwtmpExJBy+KUzDZ6RjMTTHF
bw3YrkkXA1cMQobF2vTxnNZs5B2I3u2sp/AD1MeFxD/Me5tebZcjJTBH8DBfKMRw
FwX3fbH4X7McLD6XYMIEz7Vo0e3sTzCVqZM27NmPZrhWHj05LQIliLeUuyX54vYw
@ -124,126 +46,187 @@ gxQ2aZ13cdaFtHTzAOnnYJNEjXS0ClEyxIXXnoLnwjcuLcTTVb3kNH7LAoR/x1Jm
bR1onhIOB/RwFJcUT3/mlJFtXUacGCSSCpCtL0HewU0Yr0uL5Nx51i7pNG4acIJN
teKz1PMyaYZLETVY/euNZ1A/zyaNKs7Y/SCba5q4yOmDc/skSKUQfP7yQ8KiU6tU
meWAafqUuNI946M0RRsKnxmc4guWXyvUWwdrp+AAYfzckZU4gGIRVWKSvG6CTKDs
0HtZ5W1cA3+lrcur6HpKyzk57uGORqWOFquQERMs0oXdHKc5w55soziCllQ=
=DPn8
-----END PGP PUBLIC KEY BLOCK-----
-----BEGIN PGP PUBLIC KEY BLOCK-----
Comment: Linus Torvalds, 79BE3E4300411886
mQENBE55CJIBCACkn+aOLmsaq1ejUcXCAOXkO3w7eiLqjR/ziTL2KZ30p7bxP8cT
UXvfM7fwE7EnqCCkji25x2xsoKXB8AlUswIEYUFCOupj2BOsVmJ/rKZW7fCvKTOK
+BguKjebDxNbgmif39bfSnHDWrW832f5HrYmZn7a/VySDQFdul8Gl/R6gs6PHJbg
jjt+K7Px6cQVMVNvY/VBWdvA1zckO/4h6gf3kWWZN+Wlq8wv/pxft8QzNFgweH9o
5bj4tnQ+wMCLCLiDsgEuVawoOAkg3dRMugIUoiKoBKw7b21q9Vjp4jezRvciC6Ys
4kGUSFG1ZjIn3MpY3f3xZ3yuYwrxQ8JcA7KTABEBAAG0LkxpbnVzIFRvcnZhbGRz
IDx0b3J2YWxkc0BsaW51eC1mb3VuZGF0aW9uLm9yZz6JATgEEwECACIFAk55CJIC
GwMGCwkIBwMCBhUIAgkKCwQWAgMBAh4BAheAAAoJEHm+PkMAQRiGbpwH/2jMNyBq
6SjFrltEwt6cwOJak1lkjpP5IfFMemfKPH03jBv98Yb7nnVE/VofRQi0erPvzU9H
Pitzmq9Hdaz8pTVD1nNiejn6MBHREY5T10U8J9Holn9S1G3CUvEUaBg+YEhHwWA8
hhxFCIRcfz6NPRkZH5zi9xdXBnjLrE3CpoZwVguwCT/25DuSqqJnviKiH+BOvJi/
BnHSnjV1J71MOpVabaTZKxQ1Qkwiyo7KRa/MrBV4Cw87MjF1jmja91wWNOuAwv1S
T+aSaI038zclVqbFrc9gHkTeP3o5p8DG3Q7A1pE/yVLRUW+3jucKtiojylWaqxX7
FD0RZtIuhNsUig+5AQ0ETnkIkgEIAN+ybgD0IlgKRPJ3eksafd+KORseBWwxUy3G
H0yAg/4jZCsfHZ7jpbRKzxNTKW1kE6ClSqehUsuXT5Vc1eh6079erN3y+JNxl6zZ
PC9v+5GNyc28qSfNejt4wmwa/y86T7oQfgo77o8Gu/aO/xzOjw7jSDDR3u9p/hFV
tsqzptxZzvs3hVaiLS+0mar9qYZheaCUqOXOKVo38Vg5gkOhMEwKvZs9x3fINU/t
8ckxOHq6KiLap5Bq87XP0ZJsCaMBwdLYhOFxAiEVtlzwyo3DvMplIahqqNELb71Y
DhpMq/Hu+42oR3pqASCPLfO/0GUSdAGXJVhv7L7ng02ETSBmVOUAEQEAAYkBHwQY
AQIACQUCTnkIkgIbDAAKCRB5vj5DAEEYhuobB/9Fi1GVG5qnPq14S0WKYEW3N891
L37LaXmDh977r/j2dyZOoYIiV4rx6a6urhq9UbcgNw/ke01TNM4y7EhW/lFnxJQX
SMjdsXGcb9HwUevDk2FMV1h9gkHLlqRUlTpjVdQwTB9wMd4bWhZsxybTnGh6o8dC
wBEaGNsHsSBYO81OXrTE/fcZEgKCeKW2xdKRiazu6Mu5WLU6gBy2nOc6oL2zKJZj
ACfllQzBx5+6z2N4Sj0JBOobz4RR2JLElMEckMbdqbIS+c+n02ItMmCORgakf74k
+TEbaZx3ZTVHnhvqQqanZz1i4I5IwHJxkUsYLddgYrylZH+MwNDlB5u3I138
=HEgY
-----END PGP PUBLIC KEY BLOCK-----
-----BEGIN PGP PUBLIC KEY BLOCK-----
Comment: Sasha Levin, DEA66FF797772CDC
mQINBE8z850BEADB9bnpTqV5e6QrSvPOFcJd2xnXiSUWVul5nkrgf9uE5St7jfBW
A20TG5Q7QE7SDVDhcUhPWc36Ib6HCYSe7R15gX8U2eX9zviPdpQz5iQI1lVTiPZl
x8xHOnuFhgZZAVvY3RXXIzv7kSLmHf7CxiSo/wQB2qi0gNsuWeDAy6sX87l2MSkG
KvmJy9uRKLd/H2RA2Z2L9G0w7Kg8IeSzKPN5B1JkZolSRk9oJmKAeFPOkvsZSdpg
zfHqOEKTXEaCw55YC8qz4AVos6BdsoOr7bXMGfUMsQcmjxe4iDCPffI0dkuVxtSQ
kKG8x+JhHpyWTIegJTzOP26pPxlN2GzIr4XT0rlN74JiAklSVM00myTlPltDXPlA
EuAspO9uvFArPTPb0o3cZ5amsXRbVvj6ILzlSYhwxX3HGhkOlAC1gnEXHg0G7nTS
be6Ah/aI39weCEatLXeEq3guUOMmnoJtlVylrzTEFHOaGVu+n9g+Ohcv55qMpBeK
bGjFkiVbX5C+57xFvEbr2O0pePFAiK7pBLo/4OWEa91n48eJJ1LwTkctbs9CdAYn
eDyJdrdckjdiMuS+2jSn+8hnDC7k7xfwvWKlhy+lrsRuP5U0ZaL22amnrTdmW0gd
2imyysXQmrKJRJKQoOGUD76StMECIfHahbnhZkC6U7E5u3E5+dJIf/obzwARAQAB
tB9TYXNoYSBMZXZpbiA8c2FzaGFsQGtlcm5lbC5vcmc+iQJOBBMBCgA4FiEE4n5d
ijQDou9mhzu83qZv95d3LNwFAl1MXngCGwMFCwkIBwIGFQoJCAsCBBYCAwECHgEC
F4AACgkQ3qZv95d3LNz85Q//bt3X4aoFChfdxNmlKdkSKABDmRhl0KLfX1kKSCtx
MsCDlywd+K+XiVBCDXF9SjlMF9gDwIB5j9fwtozznSFhqj3714Wo8TopYxGA00kp
gocvIUj3obMwq2wDUnHkxXxj8Tl5yEF1f9kcClkjUb8+hXp5+tEJy8fVm8KlLcfw
DGm4OGwhtQ1T/Vx9whewPXd1I4U9rztNoDBwmHVh2xuBXi8b1T3TgNLPLTNyWRYI
9cH2EjLLqJhFrLrIi6znUQ2dETwg4UlgOGTElMCmc50uNqM9ej2g+FiH6Xx1wK8C
NeH0B/QiO+rMpVaU+MbQWeO6h/CPXgNfJGmGBnBVyhzjNb5+Dus0AuV9JuNxp92m
/1TuI/F3bUhCsl/POqeBqxtz6IyPehhutSj97s4vX8XKDv5l5nUvSoCk4kgVxcfr
v+OhGgMeadJi+5rWiyESzW/i03GJfD6vYr2YSGcrmkwrjWFDZowzu+JILeL8QNK2
fM2K/O87CR8Aurs5iMnBAsPA9ykr47cIT187sfdi/KykpA7sE6wjdO7T6kiNdTGR
Qu+93x2JcDLO1uRTux7g6uPd7OXLSToeJfbLJfFQv5CHmCjEWUkjyhr+4M71ZFky
Xt6Sd+ww1NmSHuf8pTwTI4jCrbVNF27Nryaqx48I7HuUDFGJ3h8DVedcIxyccNw2
7Ry0JFNhc2hhIExldmluIDxzYXNoYS5sZXZpbkBvcmFjbGUuY29tPokCOAQTAQIA
IgUCTzPznQIbAwYLCQgHAwIGFQgCCQoLBBYCAwECHgECF4AACgkQ3qZv95d3LNxL
UQ//anNSh95SGJuxiFew2DhcJCRk6ZH7Lm+fgVMlqAf/hIwTJYiiD3PbBK3RVSFw
sH3/0I6iKkrAYEnhU4HUSzpl7ohPqpRtJ3nCbTGTWMem8WWkX3vFCOq3HJHc5Qc3
uRyuR32kGILfO0qubXZ1qMhyAJ1psPgU3zSazi3qCEOuWtDGplKEq4gL7au92L98
wFYYJlVUcThloBP0BjDBEX9+WqPMH7/lu96gqzsaYhNgtLdW4WUKZffxo4MitiPK
67YEh4eV4YmZonBAg5hrYDoUUkV80FXRsG+OLNi0UNTwC4RQ+HrUJOGeYayvCQqF
/YSSaKjPtEd5DSfG/+bvZh59LjSvqAaAkSsaMXBA9yiN78I4O/tzI9HBzsfojqKb
yA73rZKctvYHWJHWh/+tAmrKLfhd3IM8MQyIDRGk5dYGIZbSm6WL8j088odLBFC0
Djfx0hWQVwnEA+UxfFaNv/z1XKtH4P+9aIw8QpYzJ5Igyc5aHjSW143GOVxH597Z
bPJ//+P7ImXQcIAjTsF+wRyXS7pSa7IL1zzPWVhD/BAmvEFfC72Z3clVdd5Dm9Tc
/Kxtr7LrVs8gsmz9k5+PiFn0E0lJDcLlFGVbqfHZ861DPADFbIVHeVPS9Fq1SFT5
sFM7D3v+vL57ctJQuLxzdsq6P/ms02udsnbb/iwXafCT2aW0KVNhc2hhIExldmlu
IDxhbGV4YW5kZXIubGV2aW5AdmVyaXpvbi5jb20+iQI4BBMBAgAiBQJXm64BAhsD
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
=oyHM
0HtZ5W1cA3+lrcur6HpKyzk57uGORqWOFquQERMs0oXdHKc5w55soziCllTGwE0E
TnkIkgEIAKSf5o4uaxqrV6NRxcIA5eQ7fDt6IuqNH/OJMvYpnfSntvE/xxNRe98z
t/ATsSeoIKSOLbnHbGygpcHwCVSzAgRhQUI66mPYE6xWYn+splbt8K8pM4r4GC4q
N5sPE1uCaJ/f1t9KccNatbzfZ/ketiZmftr9XJINAV26XwaX9HqCzo8cluCOO34r
s/HpxBUxU29j9UFZ28DXNyQ7/iHqB/eRZZk35aWrzC/+nF+3xDM0WDB4f2jluPi2
dD7AwIsIuIOyAS5VrCg4CSDd1Ey6AhSiIqgErDtvbWr1WOniN7NG9yILpiziQZRI
UbVmMifcyljd/fFnfK5jCvFDwlwDspMAEQEAAc0uTGludXMgVG9ydmFsZHMgPHRv
cnZhbGRzQGxpbnV4LWZvdW5kYXRpb24ub3JnPsLAeAQTAQIAIgUCTnkIkgIbAwYL
CQgHAwIGFQgCCQoLBBYCAwECHgECF4AACgkQeb4+QwBBGIZunAf/aMw3IGrpKMWu
W0TC3pzA4lqTWWSOk/kh8Ux6Z8o8fTeMG/3xhvuedUT9Wh9FCLR6s+/NT0c+K3Oa
r0d1rPylNUPWc2J6OfowEdERjlPXRTwn0eiWf1LUbcJS8RRoGD5gSEfBYDyGHEUI
hFx/Po09GRkfnOL3F1cGeMusTcKmhnBWC7AJP/bkO5Kqome+IqIf4E68mL8GcdKe
NXUnvUw6lVptpNkrFDVCTCLKjspFr8ysFXgLDzsyMXWOaNr3XBY064DC/VJP5pJo
jTfzNyVWpsWtz2AeRN4/ejmnwMbdDsDWkT/JUtFRb7eO5wq2KiPKVZqrFfsUPRFm
0i6E2xSKD87ATQROeQiSAQgA37JuAPQiWApE8nd6Sxp934o5Gx4FbDFTLcYfTICD
/iNkKx8dnuOltErPE1MpbWQToKVKp6FSy5dPlVzV6HrTv16s3fL4k3GXrNk8L2/7
kY3JzbypJ816O3jCbBr/LzpPuhB+Cjvujwa79o7/HM6PDuNIMNHe72n+EVW2yrOm
3FnO+zeFVqItL7SZqv2phmF5oJSo5c4pWjfxWDmCQ6EwTAq9mz3Hd8g1T+3xyTE4
eroqItqnkGrztc/RkmwJowHB0tiE4XECIRW2XPDKjcO8ymUhqGqo0QtvvVgOGkyr
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
=mAKs
-----END PGP PUBLIC KEY BLOCK-----