diff --git a/debian/changelog b/debian/changelog index 42545d5..295a979 100644 --- a/debian/changelog +++ b/debian/changelog @@ -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 Mon, 16 Dec 2024 06:43:43 +0300 + linux (6.12.4-1) sid; urgency=medium * Sync with Debian. diff --git a/debian/config/config b/debian/config/config index b1526a7..94fd423 100644 --- a/debian/config/config +++ b/debian/config/config @@ -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 diff --git a/debian/patches/bugfix/all/fs-add-module_softdep-declarations-for-hard-coded-cr.patch b/debian/patches/bugfix/all/fs-add-module_softdep-declarations-for-hard-coded-cr.patch index 5efba01..cfec61c 100644 --- a/debian/patches/bugfix/all/fs-add-module_softdep-declarations-for-hard-coded-cr.patch +++ b/debian/patches/bugfix/all/fs-add-module_softdep-declarations-for-hard-coded-cr.patch @@ -18,7 +18,7 @@ Signed-off-by: Ben Hutchings --- 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"); diff --git a/debian/patches/debian/af_802154-Disable-auto-loading-as-mitigation-against.patch b/debian/patches/debian/af_802154-Disable-auto-loading-as-mitigation-against.patch index 73bf91e..01f3620 100644 --- a/debian/patches/debian/af_802154-Disable-auto-loading-as-mitigation-against.patch +++ b/debian/patches/debian/af_802154-Disable-auto-loading-as-mitigation-against.patch @@ -21,7 +21,7 @@ Signed-off-by: Ben Hutchings --- 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"); diff --git a/debian/patches/debian/fanotify-taint-on-use-of-fanotify_access_permissions.patch b/debian/patches/debian/fanotify-taint-on-use-of-fanotify_access_permissions.patch index f102cfa..a2dc0e9 100644 --- a/debian/patches/debian/fanotify-taint-on-use-of-fanotify_access_permissions.patch +++ b/debian/patches/debian/fanotify-taint-on-use-of-fanotify_access_permissions.patch @@ -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; } diff --git a/debian/patches/debian/kernelvariables.patch b/debian/patches/debian/kernelvariables.patch index 95bb6df..9965126 100644 --- a/debian/patches/debian/kernelvariables.patch +++ b/debian/patches/debian/kernelvariables.patch @@ -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 = diff --git a/debian/patches/debian/makefile-make-compiler-version-comparison-optional.patch b/debian/patches/debian/makefile-make-compiler-version-comparison-optional.patch index c754e7f..9f7a12f 100644 --- a/debian/patches/debian/makefile-make-compiler-version-comparison-optional.patch +++ b/debian/patches/debian/makefile-make-compiler-version-comparison-optional.patch @@ -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: diff --git a/debian/patches/features/x86/x86-make-x32-syscall-support-conditional.patch b/debian/patches/features/x86/x86-make-x32-syscall-support-conditional.patch index 5ec2377..dc7dabe 100644 --- a/debian/patches/features/x86/x86-make-x32-syscall-support-conditional.patch +++ b/debian/patches/features/x86/x86-make-x32-syscall-support-conditional.patch @@ -42,7 +42,7 @@ Signed-off-by: Ben Hutchings 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 diff --git a/debian/patches/krd/0003-local-ports.patch b/debian/patches/krd/0003-local-ports.patch index fd20a12..e471cc7 100644 --- a/debian/patches/krd/0003-local-ports.patch +++ b/debian/patches/krd/0003-local-ports.patch @@ -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 */ diff --git a/debian/patches/misc-ntsync5/0016-Revert-misc-ntsync-mark-driver-as-broken-to-prevent-.patch b/debian/patches/misc-ntsync5/0016-Revert-misc-ntsync-mark-driver-as-broken-to-prevent-.patch deleted file mode 100644 index 208a441..0000000 --- a/debian/patches/misc-ntsync5/0016-Revert-misc-ntsync-mark-driver-as-broken-to-prevent-.patch +++ /dev/null @@ -1,21 +0,0 @@ -From 06bc88f16094c6f38e0890992af4a32415716c5d Mon Sep 17 00:00:00 2001 -From: "Jan Alexander Steffens (heftig)" -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. diff --git a/debian/patches/misc-ntsync7/0001-ntsync-Return-the-fd-from-NTSYNC_IOC_CREATE_SEM.patch b/debian/patches/misc-ntsync7/0001-ntsync-Return-the-fd-from-NTSYNC_IOC_CREATE_SEM.patch new file mode 100644 index 0000000..c341f2b --- /dev/null +++ b/debian/patches/misc-ntsync7/0001-ntsync-Return-the-fd-from-NTSYNC_IOC_CREATE_SEM.patch @@ -0,0 +1,55 @@ +From e50ffd43b88d64b8063a9fce59f1d03b56f6144c Mon Sep 17 00:00:00 2001 +From: Elizabeth Figura +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 +--- + 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 + + 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) + diff --git a/debian/patches/misc-ntsync7/0002-ntsync-Rename-NTSYNC_IOC_SEM_POST-to-NTSYNC_IOC_SEM_.patch b/debian/patches/misc-ntsync7/0002-ntsync-Rename-NTSYNC_IOC_SEM_POST-to-NTSYNC_IOC_SEM_.patch new file mode 100644 index 0000000..53ac42e --- /dev/null +++ b/debian/patches/misc-ntsync7/0002-ntsync-Rename-NTSYNC_IOC_SEM_POST-to-NTSYNC_IOC_SEM_.patch @@ -0,0 +1,64 @@ +From 160e9bf7826da868ae4de261753a03cce2208ff6 Mon Sep 17 00:00:00 2001 +From: Elizabeth Figura +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 +--- + 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 diff --git a/debian/patches/misc-ntsync5/0001-ntsync-Introduce-NTSYNC_IOC_WAIT_ANY.patch b/debian/patches/misc-ntsync7/0003-ntsync-Introduce-NTSYNC_IOC_WAIT_ANY.patch similarity index 92% rename from debian/patches/misc-ntsync5/0001-ntsync-Introduce-NTSYNC_IOC_WAIT_ANY.patch rename to debian/patches/misc-ntsync7/0003-ntsync-Introduce-NTSYNC_IOC_WAIT_ANY.patch index 7768cda..2507b2c 100644 --- a/debian/patches/misc-ntsync5/0001-ntsync-Introduce-NTSYNC_IOC_WAIT_ANY.patch +++ b/debian/patches/misc-ntsync7/0003-ntsync-Introduce-NTSYNC_IOC_WAIT_ANY.patch @@ -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 -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 --- - 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 /* * 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 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 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 } --- 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 + +#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) diff --git a/debian/patches/misc-ntsync5/0002-ntsync-Introduce-NTSYNC_IOC_WAIT_ALL.patch b/debian/patches/misc-ntsync7/0004-ntsync-Introduce-NTSYNC_IOC_WAIT_ALL.patch similarity index 91% rename from debian/patches/misc-ntsync5/0002-ntsync-Introduce-NTSYNC_IOC_WAIT_ALL.patch rename to debian/patches/misc-ntsync7/0004-ntsync-Introduce-NTSYNC_IOC_WAIT_ALL.patch index 7b98085..933498a 100644 --- a/debian/patches/misc-ntsync5/0002-ntsync-Introduce-NTSYNC_IOC_WAIT_ALL.patch +++ b/debian/patches/misc-ntsync7/0004-ntsync-Introduce-NTSYNC_IOC_WAIT_ALL.patch @@ -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 -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 --- - 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 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 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 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 + 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 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 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 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 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 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 } /* 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 } /* 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 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 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 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) diff --git a/debian/patches/misc-ntsync5/0003-ntsync-Introduce-NTSYNC_IOC_CREATE_MUTEX.patch b/debian/patches/misc-ntsync7/0005-ntsync-Introduce-NTSYNC_IOC_CREATE_MUTEX.patch similarity index 82% rename from debian/patches/misc-ntsync5/0003-ntsync-Introduce-NTSYNC_IOC_CREATE_MUTEX.patch rename to debian/patches/misc-ntsync7/0005-ntsync-Introduce-NTSYNC_IOC_CREATE_MUTEX.patch index e752503..ddc6202 100644 --- a/debian/patches/misc-ntsync5/0003-ntsync-Introduce-NTSYNC_IOC_CREATE_MUTEX.patch +++ b/debian/patches/misc-ntsync7/0005-ntsync-Introduce-NTSYNC_IOC_CREATE_MUTEX.patch @@ -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 -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 --- - 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 /* * 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 + 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 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 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 } } -@@ -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 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 #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 }; #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) diff --git a/debian/patches/misc-ntsync5/0004-ntsync-Introduce-NTSYNC_IOC_MUTEX_UNLOCK.patch b/debian/patches/misc-ntsync7/0006-ntsync-Introduce-NTSYNC_IOC_MUTEX_UNLOCK.patch similarity index 84% rename from debian/patches/misc-ntsync5/0004-ntsync-Introduce-NTSYNC_IOC_MUTEX_UNLOCK.patch rename to debian/patches/misc-ntsync7/0006-ntsync-Introduce-NTSYNC_IOC_MUTEX_UNLOCK.patch index 988aa19..5c10875 100644 --- a/debian/patches/misc-ntsync5/0004-ntsync-Introduce-NTSYNC_IOC_MUTEX_UNLOCK.patch +++ b/debian/patches/misc-ntsync7/0006-ntsync-Introduce-NTSYNC_IOC_MUTEX_UNLOCK.patch @@ -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 -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 --- 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 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 } --- 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 diff --git a/debian/patches/misc-ntsync5/0005-ntsync-Introduce-NTSYNC_IOC_MUTEX_KILL.patch b/debian/patches/misc-ntsync7/0007-ntsync-Introduce-NTSYNC_IOC_MUTEX_KILL.patch similarity index 90% rename from debian/patches/misc-ntsync5/0005-ntsync-Introduce-NTSYNC_IOC_MUTEX_KILL.patch rename to debian/patches/misc-ntsync7/0007-ntsync-Introduce-NTSYNC_IOC_MUTEX_KILL.patch index 954c32f..9befec2 100644 --- a/debian/patches/misc-ntsync5/0005-ntsync-Introduce-NTSYNC_IOC_MUTEX_KILL.patch +++ b/debian/patches/misc-ntsync7/0007-ntsync-Introduce-NTSYNC_IOC_MUTEX_KILL.patch @@ -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 -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 { 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 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 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 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 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) diff --git a/debian/patches/misc-ntsync5/0006-ntsync-Introduce-NTSYNC_IOC_CREATE_EVENT.patch b/debian/patches/misc-ntsync7/0008-ntsync-Introduce-NTSYNC_IOC_CREATE_EVENT.patch similarity index 80% rename from debian/patches/misc-ntsync5/0006-ntsync-Introduce-NTSYNC_IOC_CREATE_EVENT.patch rename to debian/patches/misc-ntsync7/0008-ntsync-Introduce-NTSYNC_IOC_CREATE_EVENT.patch index 84ab14e..0714942 100644 --- a/debian/patches/misc-ntsync5/0006-ntsync-Introduce-NTSYNC_IOC_CREATE_EVENT.patch +++ b/debian/patches/misc-ntsync7/0008-ntsync-Introduce-NTSYNC_IOC_CREATE_EVENT.patch @@ -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 -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 --- - 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 /* * 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 + 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 } } -@@ -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 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 #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) diff --git a/debian/patches/misc-ntsync5/0007-ntsync-Introduce-NTSYNC_IOC_EVENT_SET.patch b/debian/patches/misc-ntsync7/0009-ntsync-Introduce-NTSYNC_IOC_EVENT_SET.patch similarity index 89% rename from debian/patches/misc-ntsync5/0007-ntsync-Introduce-NTSYNC_IOC_EVENT_SET.patch rename to debian/patches/misc-ntsync7/0009-ntsync-Introduce-NTSYNC_IOC_EVENT_SET.patch index af5f192..abeca7f 100644 --- a/debian/patches/misc-ntsync5/0007-ntsync-Introduce-NTSYNC_IOC_EVENT_SET.patch +++ b/debian/patches/misc-ntsync7/0009-ntsync-Introduce-NTSYNC_IOC_EVENT_SET.patch @@ -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 -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 } --- 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) diff --git a/debian/patches/misc-ntsync5/0008-ntsync-Introduce-NTSYNC_IOC_EVENT_RESET.patch b/debian/patches/misc-ntsync7/0010-ntsync-Introduce-NTSYNC_IOC_EVENT_RESET.patch similarity index 92% rename from debian/patches/misc-ntsync5/0008-ntsync-Introduce-NTSYNC_IOC_EVENT_RESET.patch rename to debian/patches/misc-ntsync7/0010-ntsync-Introduce-NTSYNC_IOC_EVENT_RESET.patch index 1500576..8a7a580 100644 --- a/debian/patches/misc-ntsync5/0008-ntsync-Introduce-NTSYNC_IOC_EVENT_RESET.patch +++ b/debian/patches/misc-ntsync7/0010-ntsync-Introduce-NTSYNC_IOC_EVENT_RESET.patch @@ -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 -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 } --- 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) diff --git a/debian/patches/misc-ntsync5/0009-ntsync-Introduce-NTSYNC_IOC_EVENT_PULSE.patch b/debian/patches/misc-ntsync7/0011-ntsync-Introduce-NTSYNC_IOC_EVENT_PULSE.patch similarity index 92% rename from debian/patches/misc-ntsync5/0009-ntsync-Introduce-NTSYNC_IOC_EVENT_PULSE.patch rename to debian/patches/misc-ntsync7/0011-ntsync-Introduce-NTSYNC_IOC_EVENT_PULSE.patch index 6f14ed4..c335c3e 100644 --- a/debian/patches/misc-ntsync5/0009-ntsync-Introduce-NTSYNC_IOC_EVENT_PULSE.patch +++ b/debian/patches/misc-ntsync7/0011-ntsync-Introduce-NTSYNC_IOC_EVENT_PULSE.patch @@ -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 -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 } --- 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) diff --git a/debian/patches/misc-ntsync5/0010-ntsync-Introduce-NTSYNC_IOC_SEM_READ.patch b/debian/patches/misc-ntsync7/0012-ntsync-Introduce-NTSYNC_IOC_SEM_READ.patch similarity index 77% rename from debian/patches/misc-ntsync5/0010-ntsync-Introduce-NTSYNC_IOC_SEM_READ.patch rename to debian/patches/misc-ntsync7/0012-ntsync-Introduce-NTSYNC_IOC_SEM_READ.patch index 19f8345..178ab19 100644 --- a/debian/patches/misc-ntsync5/0010-ntsync-Introduce-NTSYNC_IOC_SEM_READ.patch +++ b/debian/patches/misc-ntsync7/0012-ntsync-Introduce-NTSYNC_IOC_SEM_READ.patch @@ -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 -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 --- - 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 + 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 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 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) diff --git a/debian/patches/misc-ntsync5/0011-ntsync-Introduce-NTSYNC_IOC_MUTEX_READ.patch b/debian/patches/misc-ntsync7/0013-ntsync-Introduce-NTSYNC_IOC_MUTEX_READ.patch similarity index 81% rename from debian/patches/misc-ntsync5/0011-ntsync-Introduce-NTSYNC_IOC_MUTEX_READ.patch rename to debian/patches/misc-ntsync7/0013-ntsync-Introduce-NTSYNC_IOC_MUTEX_READ.patch index d75f8c3..c40686e 100644 --- a/debian/patches/misc-ntsync5/0011-ntsync-Introduce-NTSYNC_IOC_MUTEX_READ.patch +++ b/debian/patches/misc-ntsync7/0013-ntsync-Introduce-NTSYNC_IOC_MUTEX_READ.patch @@ -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 -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 --- - 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 + 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 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 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) diff --git a/debian/patches/misc-ntsync5/0012-ntsync-Introduce-NTSYNC_IOC_EVENT_READ.patch b/debian/patches/misc-ntsync7/0014-ntsync-Introduce-NTSYNC_IOC_EVENT_READ.patch similarity index 81% rename from debian/patches/misc-ntsync5/0012-ntsync-Introduce-NTSYNC_IOC_EVENT_READ.patch rename to debian/patches/misc-ntsync7/0014-ntsync-Introduce-NTSYNC_IOC_EVENT_READ.patch index a72cd1b..88597a7 100644 --- a/debian/patches/misc-ntsync5/0012-ntsync-Introduce-NTSYNC_IOC_EVENT_READ.patch +++ b/debian/patches/misc-ntsync7/0014-ntsync-Introduce-NTSYNC_IOC_EVENT_READ.patch @@ -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 -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 --- - 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 + 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 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 } --- 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) diff --git a/debian/patches/misc-ntsync5/0013-ntsync-Introduce-alertable-waits.patch b/debian/patches/misc-ntsync7/0015-ntsync-Introduce-alertable-waits.patch similarity index 86% rename from debian/patches/misc-ntsync5/0013-ntsync-Introduce-alertable-waits.patch rename to debian/patches/misc-ntsync7/0015-ntsync-Introduce-alertable-waits.patch index 6908cf4..2dd76e0 100644 --- a/debian/patches/misc-ntsync5/0013-ntsync-Introduce-alertable-waits.patch +++ b/debian/patches/misc-ntsync7/0015-ntsync-Introduce-alertable-waits.patch @@ -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 -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 --- 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 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 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 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 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 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 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 /* 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 /* 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 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; diff --git a/debian/patches/misc-ntsync5/0014-maintainers-Add-an-entry-for-ntsync.patch b/debian/patches/misc-ntsync7/0016-maintainers-Add-an-entry-for-ntsync.patch similarity index 88% rename from debian/patches/misc-ntsync5/0014-maintainers-Add-an-entry-for-ntsync.patch rename to debian/patches/misc-ntsync7/0016-maintainers-Add-an-entry-for-ntsync.patch index 4b424a3..ed5de57 100644 --- a/debian/patches/misc-ntsync5/0014-maintainers-Add-an-entry-for-ntsync.patch +++ b/debian/patches/misc-ntsync7/0016-maintainers-Add-an-entry-for-ntsync.patch @@ -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 -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. diff --git a/debian/patches/misc-ntsync5/0015-docs-ntsync-Add-documentation-for-the-ntsync-uAPI.patch b/debian/patches/misc-ntsync7/0017-docs-ntsync-Add-documentation-for-the-ntsync-uAPI.patch similarity index 95% rename from debian/patches/misc-ntsync5/0015-docs-ntsync-Add-documentation-for-the-ntsync-uAPI.patch rename to debian/patches/misc-ntsync7/0017-docs-ntsync-Add-documentation-for-the-ntsync-uAPI.patch index a5f7b7e..c8582c0 100644 --- a/debian/patches/misc-ntsync5/0015-docs-ntsync-Add-documentation-for-the-ntsync-uAPI.patch +++ b/debian/patches/misc-ntsync7/0017-docs-ntsync-Add-documentation-for-the-ntsync-uAPI.patch @@ -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 -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 --- 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 --- /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 +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 + }; + +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 + + .. 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 + + .. 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 + + 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 + + .. 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 + - 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 + + .. list-table:: + -+ * - ``mutex`` -+ - Ignored. + * - ``owner`` + - Specifies the owner trying to release this mutex. + * - ``count`` @@ -255,8 +248,6 @@ Signed-off-by: Elizabeth Figura + + .. list-table:: + -+ * - ``sem`` -+ - Ignored. + * - ``count`` + - On output, contains the current count of the semaphore. + * - ``max`` @@ -269,8 +260,6 @@ Signed-off-by: Elizabeth Figura + + .. 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 + + .. list-table:: + -+ * - ``event`` -+ - Ignored. + * - ``signaled`` + - On output, contains the current state of the event. + * - ``manual`` diff --git a/debian/patches/misc-ntsync7/0018-ntsync-No-longer-depend-on-BROKEN.patch b/debian/patches/misc-ntsync7/0018-ntsync-No-longer-depend-on-BROKEN.patch new file mode 100644 index 0000000..ea9b498 --- /dev/null +++ b/debian/patches/misc-ntsync7/0018-ntsync-No-longer-depend-on-BROKEN.patch @@ -0,0 +1,25 @@ +From 4871bb89577d78a3d55b44e47c3a4f677dbdc89b Mon Sep 17 00:00:00 2001 +From: Elizabeth Figura +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 +--- + 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. diff --git a/debian/patches/mixed-arch/0002-ZEN-Restore-CONFIG_OPTIMIZE_FOR_PERFORMANCE_O3.patch b/debian/patches/mixed-arch/0002-ZEN-Restore-CONFIG_OPTIMIZE_FOR_PERFORMANCE_O3.patch index aecbdf6..f2a1c0b 100644 --- a/debian/patches/mixed-arch/0002-ZEN-Restore-CONFIG_OPTIMIZE_FOR_PERFORMANCE_O3.patch +++ b/debian/patches/mixed-arch/0002-ZEN-Restore-CONFIG_OPTIMIZE_FOR_PERFORMANCE_O3.patch @@ -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 diff --git a/debian/patches/mixed-arch/0003-krd-adjust-CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE_O3.patch b/debian/patches/mixed-arch/0003-krd-adjust-CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE_O3.patch index 9e28451..d7e9419 100644 --- a/debian/patches/mixed-arch/0003-krd-adjust-CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE_O3.patch +++ b/debian/patches/mixed-arch/0003-krd-adjust-CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE_O3.patch @@ -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 diff --git a/debian/patches/mixed-arch/0006-XANMOD-kbuild-Add-GCC-SMS-based-modulo-scheduling-fl.patch b/debian/patches/mixed-arch/0006-XANMOD-kbuild-Add-GCC-SMS-based-modulo-scheduling-fl.patch index 27480d7..bd79305 100644 --- a/debian/patches/mixed-arch/0006-XANMOD-kbuild-Add-GCC-SMS-based-modulo-scheduling-fl.patch +++ b/debian/patches/mixed-arch/0006-XANMOD-kbuild-Add-GCC-SMS-based-modulo-scheduling-fl.patch @@ -11,7 +11,7 @@ Signed-off-by: Alexandre Frade --- 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 diff --git a/debian/patches/mixed-arch/0007-PF-kbuild-6.12-adopt-proposed-upstream-change-for-gener.patch b/debian/patches/mixed-arch/0007-PF-kbuild-6.12-adopt-proposed-upstream-change-for-gener.patch new file mode 100644 index 0000000..35a2a6b --- /dev/null +++ b/debian/patches/mixed-arch/0007-PF-kbuild-6.12-adopt-proposed-upstream-change-for-gener.patch @@ -0,0 +1,24 @@ +From 578cb97f41beb5d2dde81b8a4c1db6e01e8bcc6a Mon Sep 17 00:00:00 2001 +From: Oleksandr Natalenko +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 +--- + 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) diff --git a/debian/patches/patchset-xanmod/net/tcp/cloudflare/0001-tcp-Add-a-sysctl-to-skip-tcp-collapse-processing-whe.patch b/debian/patches/patchset-xanmod/net/tcp/cloudflare/0001-tcp-Add-a-sysctl-to-skip-tcp-collapse-processing-whe.patch index 8f1cd81..f722119 100644 --- a/debian/patches/patchset-xanmod/net/tcp/cloudflare/0001-tcp-Add-a-sysctl-to-skip-tcp-collapse-processing-whe.patch +++ b/debian/patches/patchset-xanmod/net/tcp/cloudflare/0001-tcp-Add-a-sysctl-to-skip-tcp-collapse-processing-whe.patch @@ -142,7 +142,7 @@ Signed-off-by: Alexandre Frade * 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; diff --git a/debian/patches/patchset-xanmod/pci_acso/0001-PCI-Enable-overrides-for-missing-ACS-capabilities.patch b/debian/patches/patchset-xanmod/pci_acso/0001-PCI-Enable-overrides-for-missing-ACS-capabilities.patch index 043c552..7330405 100644 --- a/debian/patches/patchset-xanmod/pci_acso/0001-PCI-Enable-overrides-for-missing-ACS-capabilities.patch +++ b/debian/patches/patchset-xanmod/pci_acso/0001-PCI-Enable-overrides-for-missing-ACS-capabilities.patch @@ -180,7 +180,7 @@ Signed-off-by: Alexandre Frade /* * 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 }, diff --git a/debian/patches/patchset-xanmod/xanmod/0001-kbuild-Remove-GCC-minimal-function-alignment.patch b/debian/patches/patchset-xanmod/xanmod/0001-kbuild-Remove-GCC-minimal-function-alignment.patch index 62b3550..e6c6213 100644 --- a/debian/patches/patchset-xanmod/xanmod/0001-kbuild-Remove-GCC-minimal-function-alignment.patch +++ b/debian/patches/patchset-xanmod/xanmod/0001-kbuild-Remove-GCC-minimal-function-alignment.patch @@ -12,7 +12,7 @@ Signed-off-by: Alexandre Frade --- 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) diff --git a/debian/patches/patchset-xanmod/xanmod/0015-XANMOD-scripts-setlocalversion-remove-tag-for-git-re.patch b/debian/patches/patchset-xanmod/xanmod/0015-XANMOD-scripts-setlocalversion-remove-tag-for-git-re.patch index 7112826..a5bb961 100644 --- a/debian/patches/patchset-xanmod/xanmod/0015-XANMOD-scripts-setlocalversion-remove-tag-for-git-re.patch +++ b/debian/patches/patchset-xanmod/xanmod/0015-XANMOD-scripts-setlocalversion-remove-tag-for-git-re.patch @@ -11,11 +11,11 @@ Signed-off-by: Alexandre Frade --- 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. + diff --git a/debian/patches/patchset-xanmod/xanmod/0016-XANMOD-scripts-setlocalversion-Move-localversion-fil.patch b/debian/patches/patchset-xanmod/xanmod/0016-XANMOD-scripts-setlocalversion-Move-localversion-fil.patch index 6251e2c..862e678 100644 --- a/debian/patches/patchset-xanmod/xanmod/0016-XANMOD-scripts-setlocalversion-Move-localversion-fil.patch +++ b/debian/patches/patchset-xanmod/xanmod/0016-XANMOD-scripts-setlocalversion-Move-localversion-fil.patch @@ -11,7 +11,7 @@ Signed-off-by: Alexandre Frade --- 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 diff --git a/debian/patches/patchset-zen/sauce/0004-ZEN-Disable-stack-conservation-for-GCC.patch b/debian/patches/patchset-zen/sauce/0004-ZEN-Disable-stack-conservation-for-GCC.patch index 3a6922a..12e6187 100644 --- a/debian/patches/patchset-zen/sauce/0004-ZEN-Disable-stack-conservation-for-GCC.patch +++ b/debian/patches/patchset-zen/sauce/0004-ZEN-Disable-stack-conservation-for-GCC.patch @@ -15,7 +15,7 @@ Signed-off-by: Sultan Alsawaf --- 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 diff --git a/debian/patches/patchset-zen/sauce/0009-ZEN-drm-amdgpu-pm-Allow-override-of-min_power_limit-.patch b/debian/patches/patchset-zen/sauce/0009-ZEN-drm-amdgpu-pm-Allow-override-of-min_power_limit-.patch index 5e44279..486f46c 100644 --- a/debian/patches/patchset-zen/sauce/0009-ZEN-drm-amdgpu-pm-Allow-override-of-min_power_limit-.patch +++ b/debian/patches/patchset-zen/sauce/0009-ZEN-drm-amdgpu-pm-Allow-override-of-min_power_limit-.patch @@ -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); diff --git a/debian/patches/patchset-zen/sauce/0024-ZEN-kernel-Kconfig.preempt-Remove-EXPERT-conditional.patch b/debian/patches/patchset-zen/sauce/0024-ZEN-kernel-Kconfig.preempt-Remove-EXPERT-conditional.patch new file mode 100644 index 0000000..b8492a3 --- /dev/null +++ b/debian/patches/patchset-zen/sauce/0024-ZEN-kernel-Kconfig.preempt-Remove-EXPERT-conditional.patch @@ -0,0 +1,22 @@ +From a31b09c511dd58e5032a3c941638207281b20ce4 Mon Sep 17 00:00:00 2001 +From: Steven Barrett +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 diff --git a/debian/patches/series b/debian/patches/series index 3afe662..ca2e095 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -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 diff --git a/debian/upstream/signing-key.asc b/debian/upstream/signing-key.asc index 5b5ba93..f053173 100644 --- a/debian/upstream/signing-key.asc +++ b/debian/upstream/signing-key.asc @@ -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-----