From 45b8d146cb0f9e73585ea08f04aa8eddcfda47af Mon Sep 17 00:00:00 2001 From: Wizzard Date: Fri, 23 Feb 2024 22:34:28 -0500 Subject: [PATCH] Updated for version 6.7.6-zen1 & NTSync V2 --- ...sync_driver_and_character\n_device..patch" | 35 +++---- ...c:_Introduce_NTSYNC_IOC_CREATE_SEM..patch} | 38 ++++---- ...ync:_Introduce_NTSYNC_IOC_SEM_POST..patch} | 44 +++++---- ...sync:_Introduce_NTSYNC_IOC_WAIT_ANY..patch | 75 ++++++++------ ...ync:_Introduce_NTSYNC_IOC_WAIT_ALL..patch} | 46 ++++----- ..._Introduce_NTSYNC_IOC_CREATE_MUTEX..patch} | 32 +++--- ..._Introduce_NTSYNC_IOC_MUTEX_UNLOCK..patch} | 18 +--- ...c:_Introduce_NTSYNC_IOC_MUTEX_KILL..patch} | 32 +++--- ...:_Introduce_NTSYNC_IOC_CREATE_EVENT..patch | 32 +++--- ...ync:_Introduce_NTSYNC_IOC_EVENT_SET..patch | 18 +--- ...:_Introduce_NTSYNC_IOC_EVENT_RESET..patch} | 18 +--- ...:_Introduce_NTSYNC_IOC_EVENT_PULSE..patch} | 22 ++--- ...sync:_Introduce_NTSYNC_IOC_SEM_READ..patch | 18 +--- ...c:_Introduce_NTSYNC_IOC_MUTEX_READ..patch} | 18 +--- ...nc:_Introduce_NTSYNC_IOC_EVENT_READ..patch | 18 +--- ..._ntsync:_Introduce_alertable_waits..patch} | 38 +++----- ...low_waits_to_use_the_REALTIME_clock..patch | 79 +++++++++++++++ ...d_some_tests_for_semaphore\n_state..patch" | 27 +++--- ...:_Add_some_tests_for_mutex\n_state..patch" | 34 ++++--- ...me_tests_for\n_NTSYNC_IOC_WAIT_ANY..patch" | 41 ++++---- ...me_tests_for\n_NTSYNC_IOC_WAIT_ALL..patch" | 15 +-- ...gnaling_with_WINESYNC_IOC_WAIT_ANY..patch" | 25 ++--- ...gnaling_with_WINESYNC_IOC_WAIT_ALL..patch" | 15 +-- ...sts_for\n_manual-reset_event_state..patch" | 17 +--- ...tests_for_auto-reset\n_event_state..patch" | 17 +--- ...for_wakeup\n_signaling_with_events..patch" | 33 +++---- ...ync:_Add_tests_for_alertable_waits..patch} | 15 +-- ..._for_wakeup\n_signaling_via_alerts..patch" | 21 +--- ..._stress_test_for\n_contended_waits..patch" | 97 +++++++++++++++++++ ...intainers:_Add_an_entry_for_ntsync..patch} | 14 +-- linux-clang/linux6.7-zen/template | 4 +- ...sync_driver_and_character\n_device..patch" | 35 +++---- ...c:_Introduce_NTSYNC_IOC_CREATE_SEM..patch} | 38 ++++---- ...ync:_Introduce_NTSYNC_IOC_SEM_POST..patch} | 44 +++++---- ...sync:_Introduce_NTSYNC_IOC_WAIT_ANY..patch | 75 ++++++++------ ...ync:_Introduce_NTSYNC_IOC_WAIT_ALL..patch} | 46 ++++----- ..._Introduce_NTSYNC_IOC_CREATE_MUTEX..patch} | 32 +++--- ..._Introduce_NTSYNC_IOC_MUTEX_UNLOCK..patch} | 18 +--- ...c:_Introduce_NTSYNC_IOC_MUTEX_KILL..patch} | 32 +++--- ...:_Introduce_NTSYNC_IOC_CREATE_EVENT..patch | 32 +++--- ...ync:_Introduce_NTSYNC_IOC_EVENT_SET..patch | 18 +--- ...:_Introduce_NTSYNC_IOC_EVENT_RESET..patch} | 18 +--- ...:_Introduce_NTSYNC_IOC_EVENT_PULSE..patch} | 22 ++--- ...sync:_Introduce_NTSYNC_IOC_SEM_READ..patch | 18 +--- ...c:_Introduce_NTSYNC_IOC_MUTEX_READ..patch} | 18 +--- ...nc:_Introduce_NTSYNC_IOC_EVENT_READ..patch | 18 +--- ..._ntsync:_Introduce_alertable_waits..patch} | 38 +++----- ...low_waits_to_use_the_REALTIME_clock..patch | 79 +++++++++++++++ ...d_some_tests_for_semaphore\n_state..patch" | 27 +++--- ...:_Add_some_tests_for_mutex\n_state..patch" | 34 ++++--- ...me_tests_for\n_NTSYNC_IOC_WAIT_ANY..patch" | 41 ++++---- ...me_tests_for\n_NTSYNC_IOC_WAIT_ALL..patch" | 15 +-- ...gnaling_with_WINESYNC_IOC_WAIT_ANY..patch" | 25 ++--- ...gnaling_with_WINESYNC_IOC_WAIT_ALL..patch" | 15 +-- ...sts_for\n_manual-reset_event_state..patch" | 17 +--- ...tests_for_auto-reset\n_event_state..patch" | 17 +--- ...for_wakeup\n_signaling_with_events..patch" | 33 +++---- ...ync:_Add_tests_for_alertable_waits..patch} | 15 +-- ..._for_wakeup\n_signaling_via_alerts..patch" | 21 +--- ..._stress_test_for\n_contended_waits..patch" | 97 +++++++++++++++++++ ...intainers:_Add_an_entry_for_ntsync..patch} | 14 +-- linux-gcc/linux6.7-zen/template | 4 +- 62 files changed, 928 insertions(+), 984 deletions(-) rename linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0000.patch => "linux-clang/linux6.7-zen/patches/0000-[PATCH_v2_1_31]_ntsync:_Introduce_the_ntsync_driver_and_character\n_device..patch" (78%) rename linux-clang/linux6.7-zen/patches/{v2_20240130_zfigura_nt_synchronization_primitive_driver_0001.patch => 0001-[PATCH_v2_2_31]_ntsync:_Introduce_NTSYNC_IOC_CREATE_SEM..patch} (86%) rename linux-clang/linux6.7-zen/patches/{v2_20240130_zfigura_nt_synchronization_primitive_driver_0002.patch => 0002-[PATCH_v2_3_31]_ntsync:_Introduce_NTSYNC_IOC_SEM_POST..patch} (75%) rename linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0003.patch => linux-clang/linux6.7-zen/patches/0003-[PATCH_v2_4_31]_ntsync:_Introduce_NTSYNC_IOC_WAIT_ANY..patch (80%) rename linux-clang/linux6.7-zen/patches/{v2_20240130_zfigura_nt_synchronization_primitive_driver_0004.patch => 0004-[PATCH_v2_5_31]_ntsync:_Introduce_NTSYNC_IOC_WAIT_ALL..patch} (86%) rename linux-clang/linux6.7-zen/patches/{v2_20240130_zfigura_nt_synchronization_primitive_driver_0005.patch => 0005-[PATCH_v2_6_31]_ntsync:_Introduce_NTSYNC_IOC_CREATE_MUTEX..patch} (82%) rename linux-clang/linux6.7-zen/patches/{v2_20240130_zfigura_nt_synchronization_primitive_driver_0006.patch => 0006-[PATCH_v2_7_31]_ntsync:_Introduce_NTSYNC_IOC_MUTEX_UNLOCK..patch} (83%) rename linux-clang/linux6.7-zen/patches/{v2_20240130_zfigura_nt_synchronization_primitive_driver_0007.patch => 0007-[PATCH_v2_8_31]_ntsync:_Introduce_NTSYNC_IOC_MUTEX_KILL..patch} (81%) rename linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0008.patch => linux-clang/linux6.7-zen/patches/0008-[PATCH_v2_9_31]_ntsync:_Introduce_NTSYNC_IOC_CREATE_EVENT..patch (81%) rename linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0009.patch => linux-clang/linux6.7-zen/patches/0009-[PATCH_v2_10_31]_ntsync:_Introduce_NTSYNC_IOC_EVENT_SET..patch (79%) rename linux-clang/linux6.7-zen/patches/{v2_20240130_zfigura_nt_synchronization_primitive_driver_0010.patch => 0010-[PATCH_v2_11_31]_ntsync:_Introduce_NTSYNC_IOC_EVENT_RESET..patch} (75%) rename linux-clang/linux6.7-zen/patches/{v2_20240130_zfigura_nt_synchronization_primitive_driver_0011.patch => 0011-[PATCH_v2_12_31]_ntsync:_Introduce_NTSYNC_IOC_EVENT_PULSE..patch} (76%) rename linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0012.patch => linux-clang/linux6.7-zen/patches/0012-[PATCH_v2_13_31]_ntsync:_Introduce_NTSYNC_IOC_SEM_READ..patch (75%) rename linux-clang/linux6.7-zen/patches/{v2_20240130_zfigura_nt_synchronization_primitive_driver_0013.patch => 0013-[PATCH_v2_14_31]_ntsync:_Introduce_NTSYNC_IOC_MUTEX_READ..patch} (77%) rename linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0014.patch => linux-clang/linux6.7-zen/patches/0014-[PATCH_v2_15_31]_ntsync:_Introduce_NTSYNC_IOC_EVENT_READ..patch (76%) rename linux-clang/linux6.7-zen/patches/{v2_20240130_zfigura_nt_synchronization_primitive_driver_0015.patch => 0015-[PATCH_v2_16_31]_ntsync:_Introduce_alertable_waits..patch} (79%) create mode 100644 linux-clang/linux6.7-zen/patches/0016-[PATCH_v2_17_31]_ntsync:_Allow_waits_to_use_the_REALTIME_clock..patch rename linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0016.patch => "linux-clang/linux6.7-zen/patches/0017-[PATCH_v2_18_31]_selftests:_ntsync:_Add_some_tests_for_semaphore\n_state..patch" (90%) rename linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0017.patch => "linux-clang/linux6.7-zen/patches/0018-[PATCH_v2_19_31]_selftests:_ntsync:_Add_some_tests_for_mutex\n_state..patch" (90%) rename linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0018.patch => "linux-clang/linux6.7-zen/patches/0019-[PATCH_v2_20_31]_selftests:_ntsync:_Add_some_tests_for\n_NTSYNC_IOC_WAIT_ANY..patch" (81%) rename linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0019.patch => "linux-clang/linux6.7-zen/patches/0020-[PATCH_v2_21_31]_selftests:_ntsync:_Add_some_tests_for\n_NTSYNC_IOC_WAIT_ALL..patch" (89%) rename linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0020.patch => "linux-clang/linux6.7-zen/patches/0021-[PATCH_v2_22_31]_selftests:_ntsync:_Add_some_tests_for_wakeup\n_signaling_with_WINESYNC_IOC_WAIT_ANY..patch" (86%) rename linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0021.patch => "linux-clang/linux6.7-zen/patches/0022-[PATCH_v2_23_31]_selftests:_ntsync:_Add_some_tests_for_wakeup\n_signaling_with_WINESYNC_IOC_WAIT_ALL..patch" (86%) rename linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0022.patch => "linux-clang/linux6.7-zen/patches/0023-[PATCH_v2_24_31]_selftests:_ntsync:_Add_some_tests_for\n_manual-reset_event_state..patch" (86%) rename linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0023.patch => "linux-clang/linux6.7-zen/patches/0024-[PATCH_v2_25_31]_selftests:_ntsync:_Add_some_tests_for_auto-reset\n_event_state..patch" (80%) rename linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0024.patch => "linux-clang/linux6.7-zen/patches/0025-[PATCH_v2_26_31]_selftests:_ntsync:_Add_some_tests_for_wakeup\n_signaling_with_events..patch" (89%) rename linux-clang/linux6.7-zen/patches/{v2_20240130_zfigura_nt_synchronization_primitive_driver_0025.patch => 0026-[PATCH_v2_27_31]_selftests:_ntsync:_Add_tests_for_alertable_waits..patch} (93%) rename linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0026.patch => "linux-clang/linux6.7-zen/patches/0027-[PATCH_v2_28_31]_selftests:_ntsync:_Add_some_tests_for_wakeup\n_signaling_via_alerts..patch" (83%) create mode 100644 "linux-clang/linux6.7-zen/patches/0028-[PATCH_v2_29_31]_selftests:_ntsync:_Add_a_stress_test_for\n_contended_waits..patch" rename linux-clang/linux6.7-zen/patches/{v2_20240130_zfigura_nt_synchronization_primitive_driver_0027.patch => 0029-[PATCH_v2_30_31]_maintainers:_Add_an_entry_for_ntsync..patch} (61%) rename linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0000.patch => "linux-gcc/linux6.7-zen/patches/0000-[PATCH_v2_1_31]_ntsync:_Introduce_the_ntsync_driver_and_character\n_device..patch" (78%) rename linux-gcc/linux6.7-zen/patches/{v2_20240130_zfigura_nt_synchronization_primitive_driver_0001.patch => 0001-[PATCH_v2_2_31]_ntsync:_Introduce_NTSYNC_IOC_CREATE_SEM..patch} (86%) rename linux-gcc/linux6.7-zen/patches/{v2_20240130_zfigura_nt_synchronization_primitive_driver_0002.patch => 0002-[PATCH_v2_3_31]_ntsync:_Introduce_NTSYNC_IOC_SEM_POST..patch} (75%) rename linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0003.patch => linux-gcc/linux6.7-zen/patches/0003-[PATCH_v2_4_31]_ntsync:_Introduce_NTSYNC_IOC_WAIT_ANY..patch (80%) rename linux-gcc/linux6.7-zen/patches/{v2_20240130_zfigura_nt_synchronization_primitive_driver_0004.patch => 0004-[PATCH_v2_5_31]_ntsync:_Introduce_NTSYNC_IOC_WAIT_ALL..patch} (86%) rename linux-gcc/linux6.7-zen/patches/{v2_20240130_zfigura_nt_synchronization_primitive_driver_0005.patch => 0005-[PATCH_v2_6_31]_ntsync:_Introduce_NTSYNC_IOC_CREATE_MUTEX..patch} (82%) rename linux-gcc/linux6.7-zen/patches/{v2_20240130_zfigura_nt_synchronization_primitive_driver_0006.patch => 0006-[PATCH_v2_7_31]_ntsync:_Introduce_NTSYNC_IOC_MUTEX_UNLOCK..patch} (83%) rename linux-gcc/linux6.7-zen/patches/{v2_20240130_zfigura_nt_synchronization_primitive_driver_0007.patch => 0007-[PATCH_v2_8_31]_ntsync:_Introduce_NTSYNC_IOC_MUTEX_KILL..patch} (81%) rename linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0008.patch => linux-gcc/linux6.7-zen/patches/0008-[PATCH_v2_9_31]_ntsync:_Introduce_NTSYNC_IOC_CREATE_EVENT..patch (81%) rename linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0009.patch => linux-gcc/linux6.7-zen/patches/0009-[PATCH_v2_10_31]_ntsync:_Introduce_NTSYNC_IOC_EVENT_SET..patch (79%) rename linux-gcc/linux6.7-zen/patches/{v2_20240130_zfigura_nt_synchronization_primitive_driver_0010.patch => 0010-[PATCH_v2_11_31]_ntsync:_Introduce_NTSYNC_IOC_EVENT_RESET..patch} (75%) rename linux-gcc/linux6.7-zen/patches/{v2_20240130_zfigura_nt_synchronization_primitive_driver_0011.patch => 0011-[PATCH_v2_12_31]_ntsync:_Introduce_NTSYNC_IOC_EVENT_PULSE..patch} (76%) rename linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0012.patch => linux-gcc/linux6.7-zen/patches/0012-[PATCH_v2_13_31]_ntsync:_Introduce_NTSYNC_IOC_SEM_READ..patch (75%) rename linux-gcc/linux6.7-zen/patches/{v2_20240130_zfigura_nt_synchronization_primitive_driver_0013.patch => 0013-[PATCH_v2_14_31]_ntsync:_Introduce_NTSYNC_IOC_MUTEX_READ..patch} (77%) rename linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0014.patch => linux-gcc/linux6.7-zen/patches/0014-[PATCH_v2_15_31]_ntsync:_Introduce_NTSYNC_IOC_EVENT_READ..patch (76%) rename linux-gcc/linux6.7-zen/patches/{v2_20240130_zfigura_nt_synchronization_primitive_driver_0015.patch => 0015-[PATCH_v2_16_31]_ntsync:_Introduce_alertable_waits..patch} (79%) create mode 100644 linux-gcc/linux6.7-zen/patches/0016-[PATCH_v2_17_31]_ntsync:_Allow_waits_to_use_the_REALTIME_clock..patch rename linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0016.patch => "linux-gcc/linux6.7-zen/patches/0017-[PATCH_v2_18_31]_selftests:_ntsync:_Add_some_tests_for_semaphore\n_state..patch" (90%) rename linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0017.patch => "linux-gcc/linux6.7-zen/patches/0018-[PATCH_v2_19_31]_selftests:_ntsync:_Add_some_tests_for_mutex\n_state..patch" (90%) rename linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0018.patch => "linux-gcc/linux6.7-zen/patches/0019-[PATCH_v2_20_31]_selftests:_ntsync:_Add_some_tests_for\n_NTSYNC_IOC_WAIT_ANY..patch" (81%) rename linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0019.patch => "linux-gcc/linux6.7-zen/patches/0020-[PATCH_v2_21_31]_selftests:_ntsync:_Add_some_tests_for\n_NTSYNC_IOC_WAIT_ALL..patch" (89%) rename linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0020.patch => "linux-gcc/linux6.7-zen/patches/0021-[PATCH_v2_22_31]_selftests:_ntsync:_Add_some_tests_for_wakeup\n_signaling_with_WINESYNC_IOC_WAIT_ANY..patch" (86%) rename linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0021.patch => "linux-gcc/linux6.7-zen/patches/0022-[PATCH_v2_23_31]_selftests:_ntsync:_Add_some_tests_for_wakeup\n_signaling_with_WINESYNC_IOC_WAIT_ALL..patch" (86%) rename linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0022.patch => "linux-gcc/linux6.7-zen/patches/0023-[PATCH_v2_24_31]_selftests:_ntsync:_Add_some_tests_for\n_manual-reset_event_state..patch" (86%) rename linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0023.patch => "linux-gcc/linux6.7-zen/patches/0024-[PATCH_v2_25_31]_selftests:_ntsync:_Add_some_tests_for_auto-reset\n_event_state..patch" (80%) rename linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0024.patch => "linux-gcc/linux6.7-zen/patches/0025-[PATCH_v2_26_31]_selftests:_ntsync:_Add_some_tests_for_wakeup\n_signaling_with_events..patch" (89%) rename linux-gcc/linux6.7-zen/patches/{v2_20240130_zfigura_nt_synchronization_primitive_driver_0025.patch => 0026-[PATCH_v2_27_31]_selftests:_ntsync:_Add_tests_for_alertable_waits..patch} (93%) rename linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0026.patch => "linux-gcc/linux6.7-zen/patches/0027-[PATCH_v2_28_31]_selftests:_ntsync:_Add_some_tests_for_wakeup\n_signaling_via_alerts..patch" (83%) create mode 100644 "linux-gcc/linux6.7-zen/patches/0028-[PATCH_v2_29_31]_selftests:_ntsync:_Add_a_stress_test_for\n_contended_waits..patch" rename linux-gcc/linux6.7-zen/patches/{v2_20240130_zfigura_nt_synchronization_primitive_driver_0027.patch => 0029-[PATCH_v2_30_31]_maintainers:_Add_an_entry_for_ntsync..patch} (61%) diff --git a/linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0000.patch "b/linux-clang/linux6.7-zen/patches/0000-[PATCH_v2_1_31]_ntsync:_Introduce_the_ntsync_driver_and_character\n_device..patch" similarity index 78% rename from linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0000.patch rename to "linux-clang/linux6.7-zen/patches/0000-[PATCH_v2_1_31]_ntsync:_Introduce_the_ntsync_driver_and_character\n_device..patch" index 3459d34..5193a8c 100644 --- a/linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0000.patch +++ "b/linux-clang/linux6.7-zen/patches/0000-[PATCH_v2_1_31]_ntsync:_Introduce_the_ntsync_driver_and_character\n_device..patch" @@ -1,13 +1,3 @@ -From git@z Thu Jan 1 00:00:00 1970 -Subject: [PATCH RFC v2 1/29] ntsync: Introduce the ntsync driver and - character device. -From: Elizabeth Figura -Date: Tue, 30 Jan 2024 20:13:28 -0600 -Message-Id: <20240131021356.10322-2-zfigura@codeweavers.com> -MIME-Version: 1.0 -Content-Type: text/plain; charset="utf-8" -Content-Transfer-Encoding: 7bit - ntsync uses a misc device as the simplest and least intrusive uAPI interface. Each file description on the device represents an isolated NT instance, intended @@ -15,19 +5,19 @@ to correspond to a single NT virtual machine. Signed-off-by: Elizabeth Figura --- - drivers/misc/Kconfig | 9 ++++++++ + drivers/misc/Kconfig | 11 +++++++++ drivers/misc/Makefile | 1 + drivers/misc/ntsync.c | 52 +++++++++++++++++++++++++++++++++++++++++++ - 3 files changed, 62 insertions(+) + 3 files changed, 64 insertions(+) create mode 100644 drivers/misc/ntsync.c diff --git a/drivers/misc/Kconfig b/drivers/misc/Kconfig -index 4fb291f0bf7c..bdd8a71bd853 100644 +index 4fb291f0bf7c..801ed229ed7d 100644 --- a/drivers/misc/Kconfig +++ b/drivers/misc/Kconfig -@@ -504,6 +504,15 @@ config OPEN_DICE - measured boot flow. Userspace can use CDIs for remote attestation - and sealing. +@@ -506,6 +506,17 @@ config OPEN_DICE + + If unsure, say N. +config NTSYNC + tristate "NT synchronization primitive emulation" @@ -38,9 +28,11 @@ index 4fb291f0bf7c..bdd8a71bd853 100644 + To compile this driver as a module, choose M here: the + module will be called ntsync. + - If unsure, say N. - ++ If unsure, say N. ++ config VCPU_STALL_DETECTOR + tristate "Guest vCPU stall detector" + depends on OF && HAS_IOMEM diff --git a/drivers/misc/Makefile b/drivers/misc/Makefile index ea6ea5bbbc9c..153a3f4837e8 100644 --- a/drivers/misc/Makefile @@ -55,7 +47,7 @@ index ea6ea5bbbc9c..153a3f4837e8 100644 obj-$(CONFIG_GP_PCI1XXXX) += mchp_pci1xxxx/ diff --git a/drivers/misc/ntsync.c b/drivers/misc/ntsync.c new file mode 100644 -index 000000000000..e4969ef90722 +index 000000000000..bd76e653d83e --- /dev/null +++ b/drivers/misc/ntsync.c @@ -0,0 +1,52 @@ @@ -63,7 +55,7 @@ index 000000000000..e4969ef90722 +/* + * ntsync.c - Kernel driver for NT synchronization primitives + * -+ * Copyright (C) 2024 Elizabeth Figura ++ * Copyright (C) 2024 Elizabeth Figura + */ + +#include @@ -108,9 +100,8 @@ index 000000000000..e4969ef90722 + +module_misc_device(ntsync_misc); + -+MODULE_AUTHOR("Elizabeth Figura"); ++MODULE_AUTHOR("Elizabeth Figura "); +MODULE_DESCRIPTION("Kernel driver for NT synchronization primitives"); +MODULE_LICENSE("GPL"); -- 2.43.0 - diff --git a/linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0001.patch b/linux-clang/linux6.7-zen/patches/0001-[PATCH_v2_2_31]_ntsync:_Introduce_NTSYNC_IOC_CREATE_SEM..patch similarity index 86% rename from linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0001.patch rename to linux-clang/linux6.7-zen/patches/0001-[PATCH_v2_2_31]_ntsync:_Introduce_NTSYNC_IOC_CREATE_SEM..patch index b8fe81c..6d223a2 100644 --- a/linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0001.patch +++ b/linux-clang/linux6.7-zen/patches/0001-[PATCH_v2_2_31]_ntsync:_Introduce_NTSYNC_IOC_CREATE_SEM..patch @@ -1,12 +1,3 @@ -From git@z Thu Jan 1 00:00:00 1970 -Subject: [PATCH RFC v2 2/29] ntsync: Introduce NTSYNC_IOC_CREATE_SEM. -From: Elizabeth Figura -Date: Tue, 30 Jan 2024 20:13:29 -0600 -Message-Id: <20240131021356.10322-3-zfigura@codeweavers.com> -MIME-Version: 1.0 -Content-Type: text/plain; charset="utf-8" -Content-Transfer-Encoding: 7bit - This corresponds to the NT syscall NtCreateSemaphore(). Semaphores are one of three types of object to be implemented in this driver, @@ -20,12 +11,15 @@ creation time. There are no restrictions on the maximum and initial value. Each object is exposed as an file, to which any number of fds may be opened. When all fds are closed, the object is deleted. +Objects hold a pointer to the ntsync_device that created them. The device's +reference count is driven by struct file. + Signed-off-by: Elizabeth Figura --- .../userspace-api/ioctl/ioctl-number.rst | 2 + - drivers/misc/ntsync.c | 120 ++++++++++++++++++ + drivers/misc/ntsync.c | 131 ++++++++++++++++++ include/uapi/linux/ntsync.h | 21 +++ - 3 files changed, 143 insertions(+) + 3 files changed, 154 insertions(+) create mode 100644 include/uapi/linux/ntsync.h diff --git a/Documentation/userspace-api/ioctl/ioctl-number.rst b/Documentation/userspace-api/ioctl/ioctl-number.rst @@ -42,11 +36,11 @@ index 457e16f06e04..2f5c6994f042 100644 'P' all linux/soundcard.h conflict! 'P' 60-6F sound/sscape_ioctl.h conflict! diff --git a/drivers/misc/ntsync.c b/drivers/misc/ntsync.c -index e4969ef90722..3ad86d98b82d 100644 +index bd76e653d83e..20158ec148bc 100644 --- a/drivers/misc/ntsync.c +++ b/drivers/misc/ntsync.c -@@ -5,26 +5,146 @@ - * Copyright (C) 2024 Elizabeth Figura +@@ -5,26 +5,157 @@ + * Copyright (C) 2024 Elizabeth Figura */ +#include @@ -63,6 +57,17 @@ index e4969ef90722..3ad86d98b82d 100644 + NTSYNC_TYPE_SEM, +}; + ++/* ++ * Individual synchronization primitives are represented by ++ * struct ntsync_obj, and each primitive is backed by a file. ++ * ++ * The whole namespace is represented by a struct ntsync_device also ++ * backed by a file. ++ * ++ * Both rely on struct file for reference counting. Individual ++ * ntsync_obj objects take a reference to the device when created. ++ */ ++ +struct ntsync_obj { + enum ntsync_type type; + @@ -194,7 +199,7 @@ index e4969ef90722..3ad86d98b82d 100644 } diff --git a/include/uapi/linux/ntsync.h b/include/uapi/linux/ntsync.h new file mode 100644 -index 000000000000..f38818e7759d +index 000000000000..6a4867a6c97b --- /dev/null +++ b/include/uapi/linux/ntsync.h @@ -0,0 +1,21 @@ @@ -202,7 +207,7 @@ index 000000000000..f38818e7759d +/* + * Kernel support for NT synchronization primitive emulation + * -+ * Copyright (C) 2021-2022 Elizabeth Figura ++ * Copyright (C) 2021-2022 Elizabeth Figura + */ + +#ifndef __LINUX_NTSYNC_H @@ -221,4 +226,3 @@ index 000000000000..f38818e7759d +#endif -- 2.43.0 - diff --git a/linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0002.patch b/linux-clang/linux6.7-zen/patches/0002-[PATCH_v2_3_31]_ntsync:_Introduce_NTSYNC_IOC_SEM_POST..patch similarity index 75% rename from linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0002.patch rename to linux-clang/linux6.7-zen/patches/0002-[PATCH_v2_3_31]_ntsync:_Introduce_NTSYNC_IOC_SEM_POST..patch index 66b3ca2..78fdffc 100644 --- a/linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0002.patch +++ b/linux-clang/linux6.7-zen/patches/0002-[PATCH_v2_3_31]_ntsync:_Introduce_NTSYNC_IOC_SEM_POST..patch @@ -1,12 +1,3 @@ -From git@z Thu Jan 1 00:00:00 1970 -Subject: [PATCH RFC v2 3/29] ntsync: Introduce NTSYNC_IOC_SEM_POST. -From: Elizabeth Figura -Date: Tue, 30 Jan 2024 20:13:30 -0600 -Message-Id: <20240131021356.10322-4-zfigura@codeweavers.com> -MIME-Version: 1.0 -Content-Type: text/plain; charset="utf-8" -Content-Transfer-Encoding: 7bit - This corresponds to the NT syscall NtReleaseSemaphore(). This increases the semaphore's internal counter by the given value, and returns @@ -15,16 +6,26 @@ function instead fails and returns -EOVERFLOW. Signed-off-by: Elizabeth Figura --- - drivers/misc/ntsync.c | 68 +++++++++++++++++++++++++++++++++++-- + drivers/misc/ntsync.c | 72 +++++++++++++++++++++++++++++++++++-- include/uapi/linux/ntsync.h | 2 ++ - 2 files changed, 67 insertions(+), 3 deletions(-) + 2 files changed, 71 insertions(+), 3 deletions(-) diff --git a/drivers/misc/ntsync.c b/drivers/misc/ntsync.c -index 3ad86d98b82d..1af38969f9a2 100644 +index 20158ec148bc..3c2f743c58b0 100644 --- a/drivers/misc/ntsync.c +++ b/drivers/misc/ntsync.c -@@ -20,23 +20,68 @@ enum ntsync_type { - }; +@@ -10,7 +10,9 @@ + #include + #include + #include ++#include + #include ++#include + #include + + #define NTSYNC_NAME "ntsync" +@@ -31,23 +33,70 @@ enum ntsync_type { + */ struct ntsync_obj { + spinlock_t lock; @@ -56,13 +57,15 @@ index 3ad86d98b82d..1af38969f9a2 100644 + */ +static int post_sem_state(struct ntsync_obj *sem, __u32 count) +{ ++ __u32 sum; ++ + lockdep_assert_held(&sem->lock); + -+ if (sem->u.sem.count + count < sem->u.sem.count || -+ sem->u.sem.count + count > sem->u.sem.max) ++ if (check_add_overflow(sem->u.sem.count, count, &sum) || ++ sum > sem->u.sem.max) + return -EOVERFLOW; + -+ sem->u.sem.count += count; ++ sem->u.sem.count = sum; + return 0; +} + @@ -95,7 +98,7 @@ index 3ad86d98b82d..1af38969f9a2 100644 static int ntsync_obj_release(struct inode *inode, struct file *file) { struct ntsync_obj *obj = file->private_data; -@@ -47,9 +92,25 @@ static int ntsync_obj_release(struct inode *inode, struct file *file) +@@ -58,9 +107,25 @@ static int ntsync_obj_release(struct inode *inode, struct file *file) return 0; } @@ -121,7 +124,7 @@ index 3ad86d98b82d..1af38969f9a2 100644 .llseek = no_llseek, }; -@@ -64,6 +125,7 @@ static struct ntsync_obj *ntsync_alloc_obj(struct ntsync_device *dev, +@@ -75,6 +140,7 @@ static struct ntsync_obj *ntsync_alloc_obj(struct ntsync_device *dev, obj->type = type; obj->dev = dev; get_file(dev->file); @@ -130,7 +133,7 @@ index 3ad86d98b82d..1af38969f9a2 100644 return obj; } diff --git a/include/uapi/linux/ntsync.h b/include/uapi/linux/ntsync.h -index f38818e7759d..878ec4f0f2e8 100644 +index 6a4867a6c97b..dcfa38fdc93c 100644 --- a/include/uapi/linux/ntsync.h +++ b/include/uapi/linux/ntsync.h @@ -18,4 +18,6 @@ struct ntsync_sem_args { @@ -142,4 +145,3 @@ index f38818e7759d..878ec4f0f2e8 100644 #endif -- 2.43.0 - diff --git a/linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0003.patch b/linux-clang/linux6.7-zen/patches/0003-[PATCH_v2_4_31]_ntsync:_Introduce_NTSYNC_IOC_WAIT_ANY..patch similarity index 80% rename from linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0003.patch rename to linux-clang/linux6.7-zen/patches/0003-[PATCH_v2_4_31]_ntsync:_Introduce_NTSYNC_IOC_WAIT_ANY..patch index e610f90..6d57657 100644 --- a/linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0003.patch +++ b/linux-clang/linux6.7-zen/patches/0003-[PATCH_v2_4_31]_ntsync:_Introduce_NTSYNC_IOC_WAIT_ANY..patch @@ -1,12 +1,3 @@ -From git@z Thu Jan 1 00:00:00 1970 -Subject: [PATCH RFC v2 4/29] ntsync: Introduce NTSYNC_IOC_WAIT_ANY. -From: Elizabeth Figura -Date: Tue, 30 Jan 2024 20:13:31 -0600 -Message-Id: <20240131021356.10322-5-zfigura@codeweavers.com> -MIME-Version: 1.0 -Content-Type: text/plain; charset="utf-8" -Content-Transfer-Encoding: 7bit - This corresponds to part of the functionality of the NT syscall NtWaitForMultipleObjects(). Specifically, it implements the behaviour where the third argument (wait_any) is TRUE, and it does not handle alertable waits. @@ -29,17 +20,46 @@ This ioctl validates that all objects belong to the relevant device. This is not necessary for any technical reason related to NTSYNC_IOC_WAIT_ANY, but will be necessary for NTSYNC_IOC_WAIT_ALL introduced in the following patch. +Wait ioctls need to take a temporary reference to each object being waited on. +As with the device, the reference count of struct file is used for ntsync_obj. + Signed-off-by: Elizabeth Figura --- - drivers/misc/ntsync.c | 232 ++++++++++++++++++++++++++++++++++++ + drivers/misc/ntsync.c | 239 ++++++++++++++++++++++++++++++++++++ include/uapi/linux/ntsync.h | 12 ++ - 2 files changed, 244 insertions(+) + 2 files changed, 251 insertions(+) diff --git a/drivers/misc/ntsync.c b/drivers/misc/ntsync.c -index 1af38969f9a2..0a0ab755d57f 100644 +index 3c2f743c58b0..ad93ca0f8b84 100644 --- a/drivers/misc/ntsync.c +++ b/drivers/misc/ntsync.c -@@ -34,12 +34,55 @@ struct ntsync_obj { +@@ -6,11 +6,16 @@ + */ + + #include ++#include + #include + #include ++#include ++#include + #include + #include + #include ++#include ++#include + #include + #include + #include +@@ -30,6 +35,8 @@ enum ntsync_type { + * + * Both rely on struct file for reference counting. Individual + * ntsync_obj objects take a reference to the device when created. ++ * Wait operations take a reference to each object being waited on for ++ * the duration of the wait. + */ + + struct ntsync_obj { +@@ -47,12 +54,55 @@ struct ntsync_obj { __u32 max; } sem; } u; @@ -95,7 +115,7 @@ index 1af38969f9a2..0a0ab755d57f 100644 /* * Actually change the semaphore state, returning -EOVERFLOW if it is made * invalid. -@@ -73,6 +116,8 @@ static int ntsync_sem_post(struct ntsync_obj *sem, void __user *argp) +@@ -88,6 +138,8 @@ static int ntsync_sem_post(struct ntsync_obj *sem, void __user *argp) prev_count = sem->u.sem.count; ret = post_sem_state(sem, args); @@ -104,7 +124,7 @@ index 1af38969f9a2..0a0ab755d57f 100644 spin_unlock(&sem->lock); -@@ -126,6 +171,7 @@ static struct ntsync_obj *ntsync_alloc_obj(struct ntsync_device *dev, +@@ -141,6 +193,7 @@ static struct ntsync_obj *ntsync_alloc_obj(struct ntsync_device *dev, obj->dev = dev; get_file(dev->file); spin_lock_init(&obj->lock); @@ -112,7 +132,7 @@ index 1af38969f9a2..0a0ab755d57f 100644 return obj; } -@@ -176,6 +222,190 @@ static int ntsync_create_sem(struct ntsync_device *dev, void __user *argp) +@@ -191,6 +244,190 @@ static int ntsync_create_sem(struct ntsync_device *dev, void __user *argp) return put_user(fd, &user_args->sem); } @@ -121,15 +141,13 @@ index 1af38969f9a2..0a0ab755d57f 100644 + struct file *file = fget(fd); + struct ntsync_obj *obj; + -+ if (file->f_op != &ntsync_obj_fops) -+ { ++ if (file->f_op != &ntsync_obj_fops) { + fput(file); + return NULL; + } + + obj = file->private_data; -+ if (obj->dev != dev) -+ { ++ if (obj->dev != dev) { + fput(file); + return NULL; + } @@ -142,10 +160,14 @@ index 1af38969f9a2..0a0ab755d57f 100644 + fput(obj->file); +} + -+static int ntsync_schedule(const struct ntsync_q *q, ktime_t *timeout) ++static int ntsync_schedule(const struct ntsync_q *q, const struct ntsync_wait_args *args) +{ ++ ktime_t timeout = ns_to_ktime(args->timeout); ++ ktime_t *timeout_ptr; + int ret = 0; + ++ timeout_ptr = (args->timeout == U64_MAX ? NULL : &timeout); ++ + do { + if (signal_pending(current)) { + ret = -ERESTARTSYS; @@ -157,7 +179,7 @@ index 1af38969f9a2..0a0ab755d57f 100644 + ret = 0; + break; + } -+ ret = schedule_hrtimeout(timeout, HRTIMER_MODE_ABS); ++ ret = schedule_hrtimeout(timeout_ptr, HRTIMER_MODE_ABS); + } while (ret < 0); + __set_current_state(TASK_RUNNING); + @@ -229,7 +251,6 @@ index 1af38969f9a2..0a0ab755d57f 100644 +{ + struct ntsync_wait_args args; + struct ntsync_q *q; -+ ktime_t timeout; + int signaled; + __u32 i; + int ret; @@ -267,8 +288,7 @@ index 1af38969f9a2..0a0ab755d57f 100644 + + /* sleep */ + -+ timeout = ns_to_ktime(args.timeout); -+ ret = ntsync_schedule(q, args.timeout == U64_MAX ? NULL : &timeout); ++ ret = ntsync_schedule(q, &args); + + /* and finally, unqueue */ + @@ -303,7 +323,7 @@ index 1af38969f9a2..0a0ab755d57f 100644 static int ntsync_char_open(struct inode *inode, struct file *file) { struct ntsync_device *dev; -@@ -207,6 +437,8 @@ static long ntsync_char_ioctl(struct file *file, unsigned int cmd, +@@ -222,6 +459,8 @@ static long ntsync_char_ioctl(struct file *file, unsigned int cmd, switch (cmd) { case NTSYNC_IOC_CREATE_SEM: return ntsync_create_sem(dev, argp); @@ -313,7 +333,7 @@ index 1af38969f9a2..0a0ab755d57f 100644 return -ENOIOCTLCMD; } diff --git a/include/uapi/linux/ntsync.h b/include/uapi/linux/ntsync.h -index 878ec4f0f2e8..9cd1dd05d971 100644 +index dcfa38fdc93c..56b643fab611 100644 --- a/include/uapi/linux/ntsync.h +++ b/include/uapi/linux/ntsync.h @@ -16,7 +16,19 @@ struct ntsync_sem_args { @@ -338,4 +358,3 @@ index 878ec4f0f2e8..9cd1dd05d971 100644 -- 2.43.0 - diff --git a/linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0004.patch b/linux-clang/linux6.7-zen/patches/0004-[PATCH_v2_5_31]_ntsync:_Introduce_NTSYNC_IOC_WAIT_ALL..patch similarity index 86% rename from linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0004.patch rename to linux-clang/linux6.7-zen/patches/0004-[PATCH_v2_5_31]_ntsync:_Introduce_NTSYNC_IOC_WAIT_ALL..patch index 34eac82..7d2c890 100644 --- a/linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0004.patch +++ b/linux-clang/linux6.7-zen/patches/0004-[PATCH_v2_5_31]_ntsync:_Introduce_NTSYNC_IOC_WAIT_ALL..patch @@ -1,27 +1,18 @@ -From git@z Thu Jan 1 00:00:00 1970 -Subject: [PATCH RFC v2 5/29] ntsync: Introduce NTSYNC_IOC_WAIT_ALL. -From: Elizabeth Figura -Date: Tue, 30 Jan 2024 20:13:32 -0600 -Message-Id: <20240131021356.10322-6-zfigura@codeweavers.com> -MIME-Version: 1.0 -Content-Type: text/plain; charset="utf-8" -Content-Transfer-Encoding: 7bit - This is similar to NTSYNC_IOC_WAIT_ANY, but waits until all of the objects are simultaneously signaled, and then acquires all of them as a single atomic operation. Signed-off-by: Elizabeth Figura --- - drivers/misc/ntsync.c | 244 ++++++++++++++++++++++++++++++++++-- + drivers/misc/ntsync.c | 242 ++++++++++++++++++++++++++++++++++-- include/uapi/linux/ntsync.h | 1 + - 2 files changed, 237 insertions(+), 8 deletions(-) + 2 files changed, 235 insertions(+), 8 deletions(-) diff --git a/drivers/misc/ntsync.c b/drivers/misc/ntsync.c -index 0a0ab755d57f..b86d62094344 100644 +index ad93ca0f8b84..d5759e9a3a8e 100644 --- a/drivers/misc/ntsync.c +++ b/drivers/misc/ntsync.c -@@ -35,7 +35,34 @@ struct ntsync_obj { +@@ -55,7 +55,34 @@ struct ntsync_obj { } sem; } u; @@ -56,7 +47,7 @@ index 0a0ab755d57f..b86d62094344 100644 }; struct ntsync_q_entry { -@@ -56,14 +83,99 @@ struct ntsync_q { +@@ -76,14 +103,99 @@ struct ntsync_q { */ atomic_t signaled; @@ -156,7 +147,7 @@ index 0a0ab755d57f..b86d62094344 100644 static void try_wake_any_sem(struct ntsync_obj *sem) { struct ntsync_q_entry *entry; -@@ -101,6 +213,7 @@ static int post_sem_state(struct ntsync_obj *sem, __u32 count) +@@ -123,6 +235,7 @@ static int post_sem_state(struct ntsync_obj *sem, __u32 count) static int ntsync_sem_post(struct ntsync_obj *sem, void __user *argp) { @@ -164,7 +155,7 @@ index 0a0ab755d57f..b86d62094344 100644 __u32 __user *user_args = argp; __u32 prev_count; __u32 args; -@@ -112,14 +225,29 @@ static int ntsync_sem_post(struct ntsync_obj *sem, void __user *argp) +@@ -134,14 +247,29 @@ static int ntsync_sem_post(struct ntsync_obj *sem, void __user *argp) if (sem->type != NTSYNC_TYPE_SEM) return -EINVAL; @@ -200,7 +191,7 @@ index 0a0ab755d57f..b86d62094344 100644 if (!ret && put_user(prev_count, user_args)) ret = -EFAULT; -@@ -172,6 +300,8 @@ static struct ntsync_obj *ntsync_alloc_obj(struct ntsync_device *dev, +@@ -194,6 +322,8 @@ static struct ntsync_obj *ntsync_alloc_obj(struct ntsync_device *dev, get_file(dev->file); spin_lock_init(&obj->lock); INIT_LIST_HEAD(&obj->any_waiters); @@ -209,7 +200,7 @@ index 0a0ab755d57f..b86d62094344 100644 return obj; } -@@ -274,7 +404,7 @@ static int ntsync_schedule(const struct ntsync_q *q, ktime_t *timeout) +@@ -298,7 +428,7 @@ static int ntsync_schedule(const struct ntsync_q *q, const struct ntsync_wait_ar * Allocate and initialize the ntsync_q structure, but do not queue us yet. */ static int setup_wait(struct ntsync_device *dev, @@ -218,7 +209,7 @@ index 0a0ab755d57f..b86d62094344 100644 struct ntsync_q **ret_q) { const __u32 count = args->count; -@@ -298,6 +428,7 @@ static int setup_wait(struct ntsync_device *dev, +@@ -322,6 +452,7 @@ static int setup_wait(struct ntsync_device *dev, q->task = current; q->owner = args->owner; atomic_set(&q->signaled, -1); @@ -226,7 +217,7 @@ index 0a0ab755d57f..b86d62094344 100644 q->count = count; for (i = 0; i < count; i++) { -@@ -307,6 +438,16 @@ static int setup_wait(struct ntsync_device *dev, +@@ -331,6 +462,16 @@ static int setup_wait(struct ntsync_device *dev, if (!obj) goto err; @@ -243,7 +234,7 @@ index 0a0ab755d57f..b86d62094344 100644 entry->obj = obj; entry->q = q; entry->index = i; -@@ -343,7 +484,7 @@ static int ntsync_wait_any(struct ntsync_device *dev, void __user *argp) +@@ -366,7 +507,7 @@ static int ntsync_wait_any(struct ntsync_device *dev, void __user *argp) if (copy_from_user(&args, argp, sizeof(args))) return -EFAULT; @@ -252,7 +243,7 @@ index 0a0ab755d57f..b86d62094344 100644 if (ret < 0) return ret; -@@ -406,6 +547,89 @@ static int ntsync_wait_any(struct ntsync_device *dev, void __user *argp) +@@ -428,6 +569,87 @@ static int ntsync_wait_any(struct ntsync_device *dev, void __user *argp) return ret; } @@ -260,7 +251,6 @@ index 0a0ab755d57f..b86d62094344 100644 +{ + struct ntsync_wait_args args; + struct ntsync_q *q; -+ ktime_t timeout; + int signaled; + __u32 i; + int ret; @@ -298,8 +288,7 @@ index 0a0ab755d57f..b86d62094344 100644 + + /* sleep */ + -+ timeout = ns_to_ktime(args.timeout); -+ ret = ntsync_schedule(q, args.timeout == U64_MAX ? NULL : &timeout); ++ ret = ntsync_schedule(q, &args); + + /* and finally, unqueue */ + @@ -342,7 +331,7 @@ index 0a0ab755d57f..b86d62094344 100644 static int ntsync_char_open(struct inode *inode, struct file *file) { struct ntsync_device *dev; -@@ -414,6 +638,8 @@ static int ntsync_char_open(struct inode *inode, struct file *file) +@@ -436,6 +658,8 @@ static int ntsync_char_open(struct inode *inode, struct file *file) if (!dev) return -ENOMEM; @@ -351,7 +340,7 @@ index 0a0ab755d57f..b86d62094344 100644 file->private_data = dev; dev->file = file; return nonseekable_open(inode, file); -@@ -437,6 +663,8 @@ static long ntsync_char_ioctl(struct file *file, unsigned int cmd, +@@ -459,6 +683,8 @@ static long ntsync_char_ioctl(struct file *file, unsigned int cmd, switch (cmd) { case NTSYNC_IOC_CREATE_SEM: return ntsync_create_sem(dev, argp); @@ -361,7 +350,7 @@ index 0a0ab755d57f..b86d62094344 100644 return ntsync_wait_any(dev, argp); default: diff --git a/include/uapi/linux/ntsync.h b/include/uapi/linux/ntsync.h -index 9cd1dd05d971..524404f6aceb 100644 +index 56b643fab611..19c37e27a4f8 100644 --- a/include/uapi/linux/ntsync.h +++ b/include/uapi/linux/ntsync.h @@ -29,6 +29,7 @@ struct ntsync_wait_args { @@ -374,4 +363,3 @@ index 9cd1dd05d971..524404f6aceb 100644 -- 2.43.0 - diff --git a/linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0005.patch b/linux-clang/linux6.7-zen/patches/0005-[PATCH_v2_6_31]_ntsync:_Introduce_NTSYNC_IOC_CREATE_MUTEX..patch similarity index 82% rename from linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0005.patch rename to linux-clang/linux6.7-zen/patches/0005-[PATCH_v2_6_31]_ntsync:_Introduce_NTSYNC_IOC_CREATE_MUTEX..patch index 54baae5..cfd07ce 100644 --- a/linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0005.patch +++ b/linux-clang/linux6.7-zen/patches/0005-[PATCH_v2_6_31]_ntsync:_Introduce_NTSYNC_IOC_CREATE_MUTEX..patch @@ -1,12 +1,3 @@ -From git@z Thu Jan 1 00:00:00 1970 -Subject: [PATCH RFC v2 6/29] ntsync: Introduce NTSYNC_IOC_CREATE_MUTEX. -From: Elizabeth Figura -Date: Tue, 30 Jan 2024 20:13:33 -0600 -Message-Id: <20240131021356.10322-7-zfigura@codeweavers.com> -MIME-Version: 1.0 -Content-Type: text/plain; charset="utf-8" -Content-Transfer-Encoding: 7bit - This corresponds to the NT syscall NtCreateMutant(). An NT mutex is recursive, with a 32-bit recursion counter. When acquired via @@ -26,18 +17,18 @@ Signed-off-by: Elizabeth Figura 2 files changed, 74 insertions(+) diff --git a/drivers/misc/ntsync.c b/drivers/misc/ntsync.c -index b86d62094344..484219a266ae 100644 +index d5759e9a3a8e..6f7086d0440a 100644 --- a/drivers/misc/ntsync.c +++ b/drivers/misc/ntsync.c -@@ -17,6 +17,7 @@ +@@ -24,6 +24,7 @@ enum ntsync_type { NTSYNC_TYPE_SEM, + NTSYNC_TYPE_MUTEX, }; - struct ntsync_obj { -@@ -33,6 +34,10 @@ struct ntsync_obj { + /* +@@ -53,6 +54,10 @@ struct ntsync_obj { __u32 count; __u32 max; } sem; @@ -48,7 +39,7 @@ index b86d62094344..484219a266ae 100644 } u; /* -@@ -112,6 +117,10 @@ static bool is_signaled(struct ntsync_obj *obj, __u32 owner) +@@ -132,6 +137,10 @@ static bool is_signaled(struct ntsync_obj *obj, __u32 owner) switch (obj->type) { case NTSYNC_TYPE_SEM: return !!obj->u.sem.count; @@ -59,7 +50,7 @@ index b86d62094344..484219a266ae 100644 } WARN(1, "bad object type %#x\n", obj->type); -@@ -154,6 +163,10 @@ static void try_wake_all(struct ntsync_device *dev, struct ntsync_q *q, +@@ -174,6 +183,10 @@ static void try_wake_all(struct ntsync_device *dev, struct ntsync_q *q, case NTSYNC_TYPE_SEM: obj->u.sem.count--; break; @@ -70,7 +61,7 @@ index b86d62094344..484219a266ae 100644 } } wake_up_process(q->task); -@@ -195,6 +208,28 @@ static void try_wake_any_sem(struct ntsync_obj *sem) +@@ -215,6 +228,28 @@ static void try_wake_any_sem(struct ntsync_obj *sem) } } @@ -99,7 +90,7 @@ index b86d62094344..484219a266ae 100644 /* * Actually change the semaphore state, returning -EOVERFLOW if it is made * invalid. -@@ -352,6 +387,33 @@ static int ntsync_create_sem(struct ntsync_device *dev, void __user *argp) +@@ -374,6 +409,33 @@ static int ntsync_create_sem(struct ntsync_device *dev, void __user *argp) return put_user(fd, &user_args->sem); } @@ -133,7 +124,7 @@ index b86d62094344..484219a266ae 100644 static struct ntsync_obj *get_obj(struct ntsync_device *dev, int fd) { struct file *file = fget(fd); -@@ -469,6 +531,9 @@ static void try_wake_any_obj(struct ntsync_obj *obj) +@@ -493,6 +555,9 @@ static void try_wake_any_obj(struct ntsync_obj *obj) case NTSYNC_TYPE_SEM: try_wake_any_sem(obj); break; @@ -143,7 +134,7 @@ index b86d62094344..484219a266ae 100644 } } -@@ -661,6 +726,8 @@ static long ntsync_char_ioctl(struct file *file, unsigned int cmd, +@@ -681,6 +746,8 @@ static long ntsync_char_ioctl(struct file *file, unsigned int cmd, void __user *argp = (void __user *)parm; switch (cmd) { @@ -153,7 +144,7 @@ index b86d62094344..484219a266ae 100644 return ntsync_create_sem(dev, argp); case NTSYNC_IOC_WAIT_ALL: diff --git a/include/uapi/linux/ntsync.h b/include/uapi/linux/ntsync.h -index 524404f6aceb..d68f24fd75a2 100644 +index 19c37e27a4f8..8ac9d419c360 100644 --- a/include/uapi/linux/ntsync.h +++ b/include/uapi/linux/ntsync.h @@ -16,6 +16,12 @@ struct ntsync_sem_args { @@ -179,4 +170,3 @@ index 524404f6aceb..d68f24fd75a2 100644 -- 2.43.0 - diff --git a/linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0006.patch b/linux-clang/linux6.7-zen/patches/0006-[PATCH_v2_7_31]_ntsync:_Introduce_NTSYNC_IOC_MUTEX_UNLOCK..patch similarity index 83% rename from linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0006.patch rename to linux-clang/linux6.7-zen/patches/0006-[PATCH_v2_7_31]_ntsync:_Introduce_NTSYNC_IOC_MUTEX_UNLOCK..patch index f88e505..97e5ace 100644 --- a/linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0006.patch +++ b/linux-clang/linux6.7-zen/patches/0006-[PATCH_v2_7_31]_ntsync:_Introduce_NTSYNC_IOC_MUTEX_UNLOCK..patch @@ -1,12 +1,3 @@ -From git@z Thu Jan 1 00:00:00 1970 -Subject: [PATCH RFC v2 7/29] ntsync: Introduce NTSYNC_IOC_MUTEX_UNLOCK. -From: Elizabeth Figura -Date: Tue, 30 Jan 2024 20:13:34 -0600 -Message-Id: <20240131021356.10322-8-zfigura@codeweavers.com> -MIME-Version: 1.0 -Content-Type: text/plain; charset="utf-8" -Content-Transfer-Encoding: 7bit - This corresponds to the NT syscall NtReleaseMutant(). This syscall decrements the mutex's recursion count by one, and returns the @@ -20,10 +11,10 @@ Signed-off-by: Elizabeth Figura 2 files changed, 65 insertions(+) diff --git a/drivers/misc/ntsync.c b/drivers/misc/ntsync.c -index 484219a266ae..1770ec4008af 100644 +index 6f7086d0440a..222ebead8eba 100644 --- a/drivers/misc/ntsync.c +++ b/drivers/misc/ntsync.c -@@ -290,6 +290,68 @@ static int ntsync_sem_post(struct ntsync_obj *sem, void __user *argp) +@@ -312,6 +312,68 @@ static int ntsync_sem_post(struct ntsync_obj *sem, void __user *argp) return ret; } @@ -92,7 +83,7 @@ index 484219a266ae..1770ec4008af 100644 static int ntsync_obj_release(struct inode *inode, struct file *file) { struct ntsync_obj *obj = file->private_data; -@@ -309,6 +371,8 @@ static long ntsync_obj_ioctl(struct file *file, unsigned int cmd, +@@ -331,6 +393,8 @@ static long ntsync_obj_ioctl(struct file *file, unsigned int cmd, switch (cmd) { case NTSYNC_IOC_SEM_POST: return ntsync_sem_post(obj, argp); @@ -102,7 +93,7 @@ index 484219a266ae..1770ec4008af 100644 return -ENOIOCTLCMD; } diff --git a/include/uapi/linux/ntsync.h b/include/uapi/linux/ntsync.h -index d68f24fd75a2..a3f5f4f13798 100644 +index 8ac9d419c360..265503d441b1 100644 --- a/include/uapi/linux/ntsync.h +++ b/include/uapi/linux/ntsync.h @@ -39,5 +39,6 @@ struct ntsync_wait_args { @@ -114,4 +105,3 @@ index d68f24fd75a2..a3f5f4f13798 100644 #endif -- 2.43.0 - diff --git a/linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0007.patch b/linux-clang/linux6.7-zen/patches/0007-[PATCH_v2_8_31]_ntsync:_Introduce_NTSYNC_IOC_MUTEX_KILL..patch similarity index 81% rename from linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0007.patch rename to linux-clang/linux6.7-zen/patches/0007-[PATCH_v2_8_31]_ntsync:_Introduce_NTSYNC_IOC_MUTEX_KILL..patch index c49854a..ec55ac0 100644 --- a/linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0007.patch +++ b/linux-clang/linux6.7-zen/patches/0007-[PATCH_v2_8_31]_ntsync:_Introduce_NTSYNC_IOC_MUTEX_KILL..patch @@ -1,12 +1,3 @@ -From git@z Thu Jan 1 00:00:00 1970 -Subject: [PATCH RFC v2 8/29] ntsync: Introduce NTSYNC_IOC_MUTEX_KILL. -From: Elizabeth Figura -Date: Tue, 30 Jan 2024 20:13:35 -0600 -Message-Id: <20240131021356.10322-9-zfigura@codeweavers.com> -MIME-Version: 1.0 -Content-Type: text/plain; charset="utf-8" -Content-Transfer-Encoding: 7bit - This does not correspond to any NT syscall. Rather, when a thread dies, it should be called by the NT emulator for each mutex. @@ -23,10 +14,10 @@ Signed-off-by: Elizabeth Figura 2 files changed, 70 insertions(+), 2 deletions(-) diff --git a/drivers/misc/ntsync.c b/drivers/misc/ntsync.c -index 1770ec4008af..aadf01c65ca0 100644 +index 222ebead8eba..a3466be50c45 100644 --- a/drivers/misc/ntsync.c +++ b/drivers/misc/ntsync.c -@@ -37,6 +37,7 @@ struct ntsync_obj { +@@ -57,6 +57,7 @@ struct ntsync_obj { struct { __u32 count; __u32 owner; @@ -34,7 +25,7 @@ index 1770ec4008af..aadf01c65ca0 100644 } mutex; } u; -@@ -89,6 +90,7 @@ struct ntsync_q { +@@ -109,6 +110,7 @@ struct ntsync_q { atomic_t signaled; bool all; @@ -42,7 +33,7 @@ index 1770ec4008af..aadf01c65ca0 100644 __u32 count; struct ntsync_q_entry entries[]; }; -@@ -164,6 +166,9 @@ static void try_wake_all(struct ntsync_device *dev, struct ntsync_q *q, +@@ -184,6 +186,9 @@ static void try_wake_all(struct ntsync_device *dev, struct ntsync_q *q, obj->u.sem.count--; break; case NTSYNC_TYPE_MUTEX: @@ -52,7 +43,7 @@ index 1770ec4008af..aadf01c65ca0 100644 obj->u.mutex.count++; obj->u.mutex.owner = q->owner; break; -@@ -223,6 +228,9 @@ static void try_wake_any_mutex(struct ntsync_obj *mutex) +@@ -243,6 +248,9 @@ static void try_wake_any_mutex(struct ntsync_obj *mutex) continue; if (atomic_cmpxchg(&q->signaled, -1, entry->index) == -1) { @@ -62,7 +53,7 @@ index 1770ec4008af..aadf01c65ca0 100644 mutex->u.mutex.count++; mutex->u.mutex.owner = q->owner; wake_up_process(q->task); -@@ -352,6 +360,62 @@ static int ntsync_mutex_unlock(struct ntsync_obj *mutex, void __user *argp) +@@ -374,6 +382,62 @@ static int ntsync_mutex_unlock(struct ntsync_obj *mutex, void __user *argp) return ret; } @@ -125,7 +116,7 @@ index 1770ec4008af..aadf01c65ca0 100644 static int ntsync_obj_release(struct inode *inode, struct file *file) { struct ntsync_obj *obj = file->private_data; -@@ -373,6 +437,8 @@ static long ntsync_obj_ioctl(struct file *file, unsigned int cmd, +@@ -395,6 +459,8 @@ static long ntsync_obj_ioctl(struct file *file, unsigned int cmd, return ntsync_sem_post(obj, argp); case NTSYNC_IOC_MUTEX_UNLOCK: return ntsync_mutex_unlock(obj, argp); @@ -134,7 +125,7 @@ index 1770ec4008af..aadf01c65ca0 100644 default: return -ENOIOCTLCMD; } -@@ -555,6 +621,7 @@ static int setup_wait(struct ntsync_device *dev, +@@ -579,6 +645,7 @@ static int setup_wait(struct ntsync_device *dev, q->owner = args->owner; atomic_set(&q->signaled, -1); q->all = all; @@ -142,7 +133,7 @@ index 1770ec4008af..aadf01c65ca0 100644 q->count = count; for (i = 0; i < count; i++) { -@@ -664,7 +731,7 @@ static int ntsync_wait_any(struct ntsync_device *dev, void __user *argp) +@@ -686,7 +753,7 @@ static int ntsync_wait_any(struct ntsync_device *dev, void __user *argp) struct ntsync_wait_args __user *user_args = argp; /* even if we caught a signal, we need to communicate success */ @@ -151,7 +142,7 @@ index 1770ec4008af..aadf01c65ca0 100644 if (put_user(signaled, &user_args->index)) ret = -EFAULT; -@@ -747,7 +814,7 @@ static int ntsync_wait_all(struct ntsync_device *dev, void __user *argp) +@@ -767,7 +834,7 @@ static int ntsync_wait_all(struct ntsync_device *dev, void __user *argp) struct ntsync_wait_args __user *user_args = argp; /* even if we caught a signal, we need to communicate success */ @@ -161,7 +152,7 @@ index 1770ec4008af..aadf01c65ca0 100644 if (put_user(signaled, &user_args->index)) ret = -EFAULT; diff --git a/include/uapi/linux/ntsync.h b/include/uapi/linux/ntsync.h -index a3f5f4f13798..3861397c6c2f 100644 +index 265503d441b1..4800941fcbda 100644 --- a/include/uapi/linux/ntsync.h +++ b/include/uapi/linux/ntsync.h @@ -40,5 +40,6 @@ struct ntsync_wait_args { @@ -173,4 +164,3 @@ index a3f5f4f13798..3861397c6c2f 100644 #endif -- 2.43.0 - diff --git a/linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0008.patch b/linux-clang/linux6.7-zen/patches/0008-[PATCH_v2_9_31]_ntsync:_Introduce_NTSYNC_IOC_CREATE_EVENT..patch similarity index 81% rename from linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0008.patch rename to linux-clang/linux6.7-zen/patches/0008-[PATCH_v2_9_31]_ntsync:_Introduce_NTSYNC_IOC_CREATE_EVENT..patch index 623bf23..7376a14 100644 --- a/linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0008.patch +++ b/linux-clang/linux6.7-zen/patches/0008-[PATCH_v2_9_31]_ntsync:_Introduce_NTSYNC_IOC_CREATE_EVENT..patch @@ -1,12 +1,3 @@ -From git@z Thu Jan 1 00:00:00 1970 -Subject: [PATCH RFC v2 9/29] ntsync: Introduce NTSYNC_IOC_CREATE_EVENT. -From: Elizabeth Figura -Date: Tue, 30 Jan 2024 20:13:36 -0600 -Message-Id: <20240131021356.10322-10-zfigura@codeweavers.com> -MIME-Version: 1.0 -Content-Type: text/plain; charset="utf-8" -Content-Transfer-Encoding: 7bit - This correspond to the NT syscall NtCreateEvent(). An NT event holds a single bit of state denoting whether it is signaled or @@ -26,18 +17,18 @@ Signed-off-by: Elizabeth Figura 2 files changed, 67 insertions(+) diff --git a/drivers/misc/ntsync.c b/drivers/misc/ntsync.c -index aadf01c65ca0..c719ddd9f6d7 100644 +index a3466be50c45..17dd47d06e0a 100644 --- a/drivers/misc/ntsync.c +++ b/drivers/misc/ntsync.c -@@ -18,6 +18,7 @@ +@@ -25,6 +25,7 @@ enum ntsync_type { NTSYNC_TYPE_SEM, NTSYNC_TYPE_MUTEX, + NTSYNC_TYPE_EVENT, }; - struct ntsync_obj { -@@ -39,6 +40,10 @@ struct ntsync_obj { + /* +@@ -59,6 +60,10 @@ struct ntsync_obj { __u32 owner; bool ownerdead; } mutex; @@ -48,7 +39,7 @@ index aadf01c65ca0..c719ddd9f6d7 100644 } u; /* -@@ -123,6 +128,8 @@ static bool is_signaled(struct ntsync_obj *obj, __u32 owner) +@@ -143,6 +148,8 @@ static bool is_signaled(struct ntsync_obj *obj, __u32 owner) if (obj->u.mutex.owner && obj->u.mutex.owner != owner) return false; return obj->u.mutex.count < UINT_MAX; @@ -57,7 +48,7 @@ index aadf01c65ca0..c719ddd9f6d7 100644 } WARN(1, "bad object type %#x\n", obj->type); -@@ -172,6 +179,10 @@ static void try_wake_all(struct ntsync_device *dev, struct ntsync_q *q, +@@ -192,6 +199,10 @@ static void try_wake_all(struct ntsync_device *dev, struct ntsync_q *q, obj->u.mutex.count++; obj->u.mutex.owner = q->owner; break; @@ -68,7 +59,7 @@ index aadf01c65ca0..c719ddd9f6d7 100644 } } wake_up_process(q->task); -@@ -238,6 +249,26 @@ static void try_wake_any_mutex(struct ntsync_obj *mutex) +@@ -258,6 +269,26 @@ static void try_wake_any_mutex(struct ntsync_obj *mutex) } } @@ -95,7 +86,7 @@ index aadf01c65ca0..c719ddd9f6d7 100644 /* * Actually change the semaphore state, returning -EOVERFLOW if it is made * invalid. -@@ -544,6 +575,30 @@ static int ntsync_create_mutex(struct ntsync_device *dev, void __user *argp) +@@ -566,6 +597,30 @@ static int ntsync_create_mutex(struct ntsync_device *dev, void __user *argp) return put_user(fd, &user_args->mutex); } @@ -126,7 +117,7 @@ index aadf01c65ca0..c719ddd9f6d7 100644 static struct ntsync_obj *get_obj(struct ntsync_device *dev, int fd) { struct file *file = fget(fd); -@@ -665,6 +720,9 @@ static void try_wake_any_obj(struct ntsync_obj *obj) +@@ -689,6 +744,9 @@ static void try_wake_any_obj(struct ntsync_obj *obj) case NTSYNC_TYPE_MUTEX: try_wake_any_mutex(obj); break; @@ -136,7 +127,7 @@ index aadf01c65ca0..c719ddd9f6d7 100644 } } -@@ -857,6 +915,8 @@ static long ntsync_char_ioctl(struct file *file, unsigned int cmd, +@@ -877,6 +935,8 @@ static long ntsync_char_ioctl(struct file *file, unsigned int cmd, void __user *argp = (void __user *)parm; switch (cmd) { @@ -146,7 +137,7 @@ index aadf01c65ca0..c719ddd9f6d7 100644 return ntsync_create_mutex(dev, argp); case NTSYNC_IOC_CREATE_SEM: diff --git a/include/uapi/linux/ntsync.h b/include/uapi/linux/ntsync.h -index 3861397c6c2f..b8cf503365ef 100644 +index 4800941fcbda..040cbdb39033 100644 --- a/include/uapi/linux/ntsync.h +++ b/include/uapi/linux/ntsync.h @@ -22,6 +22,12 @@ struct ntsync_mutex_args { @@ -172,4 +163,3 @@ index 3861397c6c2f..b8cf503365ef 100644 #define NTSYNC_IOC_MUTEX_UNLOCK _IOWR('N', 0x85, struct ntsync_mutex_args) -- 2.43.0 - diff --git a/linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0009.patch b/linux-clang/linux6.7-zen/patches/0009-[PATCH_v2_10_31]_ntsync:_Introduce_NTSYNC_IOC_EVENT_SET..patch similarity index 79% rename from linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0009.patch rename to linux-clang/linux6.7-zen/patches/0009-[PATCH_v2_10_31]_ntsync:_Introduce_NTSYNC_IOC_EVENT_SET..patch index 6411060..58e9472 100644 --- a/linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0009.patch +++ b/linux-clang/linux6.7-zen/patches/0009-[PATCH_v2_10_31]_ntsync:_Introduce_NTSYNC_IOC_EVENT_SET..patch @@ -1,12 +1,3 @@ -From git@z Thu Jan 1 00:00:00 1970 -Subject: [PATCH RFC v2 10/29] ntsync: Introduce NTSYNC_IOC_EVENT_SET. -From: Elizabeth Figura -Date: Tue, 30 Jan 2024 20:13:37 -0600 -Message-Id: <20240131021356.10322-11-zfigura@codeweavers.com> -MIME-Version: 1.0 -Content-Type: text/plain; charset="utf-8" -Content-Transfer-Encoding: 7bit - This corresponds to the NT syscall NtSetEvent(). This sets the event to the signaled state, and returns its previous state. @@ -18,10 +9,10 @@ Signed-off-by: Elizabeth Figura 2 files changed, 38 insertions(+) diff --git a/drivers/misc/ntsync.c b/drivers/misc/ntsync.c -index c719ddd9f6d7..b2da50989953 100644 +index 17dd47d06e0a..edfbf11cafe0 100644 --- a/drivers/misc/ntsync.c +++ b/drivers/misc/ntsync.c -@@ -447,6 +447,41 @@ static int ntsync_mutex_kill(struct ntsync_obj *mutex, void __user *argp) +@@ -469,6 +469,41 @@ static int ntsync_mutex_kill(struct ntsync_obj *mutex, void __user *argp) return ret; } @@ -63,7 +54,7 @@ index c719ddd9f6d7..b2da50989953 100644 static int ntsync_obj_release(struct inode *inode, struct file *file) { struct ntsync_obj *obj = file->private_data; -@@ -470,6 +505,8 @@ static long ntsync_obj_ioctl(struct file *file, unsigned int cmd, +@@ -492,6 +527,8 @@ static long ntsync_obj_ioctl(struct file *file, unsigned int cmd, return ntsync_mutex_unlock(obj, argp); case NTSYNC_IOC_MUTEX_KILL: return ntsync_mutex_kill(obj, argp); @@ -73,7 +64,7 @@ index c719ddd9f6d7..b2da50989953 100644 return -ENOIOCTLCMD; } diff --git a/include/uapi/linux/ntsync.h b/include/uapi/linux/ntsync.h -index b8cf503365ef..782057552483 100644 +index 040cbdb39033..af518530bffd 100644 --- a/include/uapi/linux/ntsync.h +++ b/include/uapi/linux/ntsync.h @@ -48,5 +48,6 @@ struct ntsync_wait_args { @@ -85,4 +76,3 @@ index b8cf503365ef..782057552483 100644 #endif -- 2.43.0 - diff --git a/linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0010.patch b/linux-clang/linux6.7-zen/patches/0010-[PATCH_v2_11_31]_ntsync:_Introduce_NTSYNC_IOC_EVENT_RESET..patch similarity index 75% rename from linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0010.patch rename to linux-clang/linux6.7-zen/patches/0010-[PATCH_v2_11_31]_ntsync:_Introduce_NTSYNC_IOC_EVENT_RESET..patch index 36501b9..88cdda0 100644 --- a/linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0010.patch +++ b/linux-clang/linux6.7-zen/patches/0010-[PATCH_v2_11_31]_ntsync:_Introduce_NTSYNC_IOC_EVENT_RESET..patch @@ -1,12 +1,3 @@ -From git@z Thu Jan 1 00:00:00 1970 -Subject: [PATCH RFC v2 11/29] ntsync: Introduce NTSYNC_IOC_EVENT_RESET. -From: Elizabeth Figura -Date: Tue, 30 Jan 2024 20:13:38 -0600 -Message-Id: <20240131021356.10322-12-zfigura@codeweavers.com> -MIME-Version: 1.0 -Content-Type: text/plain; charset="utf-8" -Content-Transfer-Encoding: 7bit - This corresponds to the NT syscall NtResetEvent(). This sets the event to the unsignaled state, and returns its previous state. @@ -18,10 +9,10 @@ Signed-off-by: Elizabeth Figura 2 files changed, 23 insertions(+) diff --git a/drivers/misc/ntsync.c b/drivers/misc/ntsync.c -index b2da50989953..009d927739b8 100644 +index edfbf11cafe0..fa4c3fa1e496 100644 --- a/drivers/misc/ntsync.c +++ b/drivers/misc/ntsync.c -@@ -482,6 +482,26 @@ static int ntsync_event_set(struct ntsync_obj *event, void __user *argp) +@@ -504,6 +504,26 @@ static int ntsync_event_set(struct ntsync_obj *event, void __user *argp) return 0; } @@ -48,7 +39,7 @@ index b2da50989953..009d927739b8 100644 static int ntsync_obj_release(struct inode *inode, struct file *file) { struct ntsync_obj *obj = file->private_data; -@@ -507,6 +527,8 @@ static long ntsync_obj_ioctl(struct file *file, unsigned int cmd, +@@ -529,6 +549,8 @@ static long ntsync_obj_ioctl(struct file *file, unsigned int cmd, return ntsync_mutex_kill(obj, argp); case NTSYNC_IOC_EVENT_SET: return ntsync_event_set(obj, argp); @@ -58,7 +49,7 @@ index b2da50989953..009d927739b8 100644 return -ENOIOCTLCMD; } diff --git a/include/uapi/linux/ntsync.h b/include/uapi/linux/ntsync.h -index 782057552483..f2d7507d8438 100644 +index af518530bffd..6963356ee3f7 100644 --- a/include/uapi/linux/ntsync.h +++ b/include/uapi/linux/ntsync.h @@ -49,5 +49,6 @@ struct ntsync_wait_args { @@ -70,4 +61,3 @@ index 782057552483..f2d7507d8438 100644 #endif -- 2.43.0 - diff --git a/linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0011.patch b/linux-clang/linux6.7-zen/patches/0011-[PATCH_v2_12_31]_ntsync:_Introduce_NTSYNC_IOC_EVENT_PULSE..patch similarity index 76% rename from linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0011.patch rename to linux-clang/linux6.7-zen/patches/0011-[PATCH_v2_12_31]_ntsync:_Introduce_NTSYNC_IOC_EVENT_PULSE..patch index b02d7da..76aa1a7 100644 --- a/linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0011.patch +++ b/linux-clang/linux6.7-zen/patches/0011-[PATCH_v2_12_31]_ntsync:_Introduce_NTSYNC_IOC_EVENT_PULSE..patch @@ -1,12 +1,3 @@ -From git@z Thu Jan 1 00:00:00 1970 -Subject: [PATCH RFC v2 12/29] ntsync: Introduce NTSYNC_IOC_EVENT_PULSE. -From: Elizabeth Figura -Date: Tue, 30 Jan 2024 20:13:39 -0600 -Message-Id: <20240131021356.10322-13-zfigura@codeweavers.com> -MIME-Version: 1.0 -Content-Type: text/plain; charset="utf-8" -Content-Transfer-Encoding: 7bit - This corresponds to the NT syscall NtPulseEvent(). This wakes up any waiters as if the event had been set, but does not set the @@ -21,10 +12,10 @@ Signed-off-by: Elizabeth Figura 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/drivers/misc/ntsync.c b/drivers/misc/ntsync.c -index 009d927739b8..240ae858fa96 100644 +index fa4c3fa1e496..b9b4127a6c9f 100644 --- a/drivers/misc/ntsync.c +++ b/drivers/misc/ntsync.c -@@ -447,7 +447,7 @@ static int ntsync_mutex_kill(struct ntsync_obj *mutex, void __user *argp) +@@ -469,7 +469,7 @@ static int ntsync_mutex_kill(struct ntsync_obj *mutex, void __user *argp) return ret; } @@ -33,7 +24,7 @@ index 009d927739b8..240ae858fa96 100644 { struct ntsync_device *dev = event->dev; __u32 prev_state; -@@ -463,6 +463,8 @@ static int ntsync_event_set(struct ntsync_obj *event, void __user *argp) +@@ -485,6 +485,8 @@ static int ntsync_event_set(struct ntsync_obj *event, void __user *argp) event->u.event.signaled = true; try_wake_all_obj(dev, event); try_wake_any_event(event); @@ -42,7 +33,7 @@ index 009d927739b8..240ae858fa96 100644 spin_unlock(&event->lock); spin_unlock(&dev->wait_all_lock); -@@ -472,6 +474,8 @@ static int ntsync_event_set(struct ntsync_obj *event, void __user *argp) +@@ -494,6 +496,8 @@ static int ntsync_event_set(struct ntsync_obj *event, void __user *argp) prev_state = event->u.event.signaled; event->u.event.signaled = true; try_wake_any_event(event); @@ -51,7 +42,7 @@ index 009d927739b8..240ae858fa96 100644 spin_unlock(&event->lock); } -@@ -526,9 +530,11 @@ static long ntsync_obj_ioctl(struct file *file, unsigned int cmd, +@@ -548,9 +552,11 @@ static long ntsync_obj_ioctl(struct file *file, unsigned int cmd, case NTSYNC_IOC_MUTEX_KILL: return ntsync_mutex_kill(obj, argp); case NTSYNC_IOC_EVENT_SET: @@ -65,7 +56,7 @@ index 009d927739b8..240ae858fa96 100644 return -ENOIOCTLCMD; } diff --git a/include/uapi/linux/ntsync.h b/include/uapi/linux/ntsync.h -index f2d7507d8438..598f894f868d 100644 +index 6963356ee3f7..72047f36c45d 100644 --- a/include/uapi/linux/ntsync.h +++ b/include/uapi/linux/ntsync.h @@ -50,5 +50,6 @@ struct ntsync_wait_args { @@ -77,4 +68,3 @@ index f2d7507d8438..598f894f868d 100644 #endif -- 2.43.0 - diff --git a/linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0012.patch b/linux-clang/linux6.7-zen/patches/0012-[PATCH_v2_13_31]_ntsync:_Introduce_NTSYNC_IOC_SEM_READ..patch similarity index 75% rename from linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0012.patch rename to linux-clang/linux6.7-zen/patches/0012-[PATCH_v2_13_31]_ntsync:_Introduce_NTSYNC_IOC_SEM_READ..patch index e05d69c..e32f7ef 100644 --- a/linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0012.patch +++ b/linux-clang/linux6.7-zen/patches/0012-[PATCH_v2_13_31]_ntsync:_Introduce_NTSYNC_IOC_SEM_READ..patch @@ -1,12 +1,3 @@ -From git@z Thu Jan 1 00:00:00 1970 -Subject: [PATCH RFC v2 13/29] ntsync: Introduce NTSYNC_IOC_SEM_READ. -From: Elizabeth Figura -Date: Tue, 30 Jan 2024 20:13:40 -0600 -Message-Id: <20240131021356.10322-14-zfigura@codeweavers.com> -MIME-Version: 1.0 -Content-Type: text/plain; charset="utf-8" -Content-Transfer-Encoding: 7bit - This corresponds to the NT syscall NtQuerySemaphore(). This returns the current count and maximum count of the semaphore. @@ -18,10 +9,10 @@ Signed-off-by: Elizabeth Figura 2 files changed, 22 insertions(+) diff --git a/drivers/misc/ntsync.c b/drivers/misc/ntsync.c -index 240ae858fa96..6dccfbfb2512 100644 +index b9b4127a6c9f..0daaeeeba051 100644 --- a/drivers/misc/ntsync.c +++ b/drivers/misc/ntsync.c -@@ -506,6 +506,25 @@ static int ntsync_event_reset(struct ntsync_obj *event, void __user *argp) +@@ -528,6 +528,25 @@ static int ntsync_event_reset(struct ntsync_obj *event, void __user *argp) return 0; } @@ -47,7 +38,7 @@ index 240ae858fa96..6dccfbfb2512 100644 static int ntsync_obj_release(struct inode *inode, struct file *file) { struct ntsync_obj *obj = file->private_data; -@@ -525,6 +544,8 @@ static long ntsync_obj_ioctl(struct file *file, unsigned int cmd, +@@ -547,6 +566,8 @@ static long ntsync_obj_ioctl(struct file *file, unsigned int cmd, switch (cmd) { case NTSYNC_IOC_SEM_POST: return ntsync_sem_post(obj, argp); @@ -57,7 +48,7 @@ index 240ae858fa96..6dccfbfb2512 100644 return ntsync_mutex_unlock(obj, argp); case NTSYNC_IOC_MUTEX_KILL: diff --git a/include/uapi/linux/ntsync.h b/include/uapi/linux/ntsync.h -index 598f894f868d..6017f621687e 100644 +index 72047f36c45d..42f51dc4e57e 100644 --- a/include/uapi/linux/ntsync.h +++ b/include/uapi/linux/ntsync.h @@ -51,5 +51,6 @@ struct ntsync_wait_args { @@ -69,4 +60,3 @@ index 598f894f868d..6017f621687e 100644 #endif -- 2.43.0 - diff --git a/linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0013.patch b/linux-clang/linux6.7-zen/patches/0013-[PATCH_v2_14_31]_ntsync:_Introduce_NTSYNC_IOC_MUTEX_READ..patch similarity index 77% rename from linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0013.patch rename to linux-clang/linux6.7-zen/patches/0013-[PATCH_v2_14_31]_ntsync:_Introduce_NTSYNC_IOC_MUTEX_READ..patch index 4a4b6a6..b97bd13 100644 --- a/linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0013.patch +++ b/linux-clang/linux6.7-zen/patches/0013-[PATCH_v2_14_31]_ntsync:_Introduce_NTSYNC_IOC_MUTEX_READ..patch @@ -1,12 +1,3 @@ -From git@z Thu Jan 1 00:00:00 1970 -Subject: [PATCH RFC v2 14/29] ntsync: Introduce NTSYNC_IOC_MUTEX_READ. -From: Elizabeth Figura -Date: Tue, 30 Jan 2024 20:13:41 -0600 -Message-Id: <20240131021356.10322-15-zfigura@codeweavers.com> -MIME-Version: 1.0 -Content-Type: text/plain; charset="utf-8" -Content-Transfer-Encoding: 7bit - This corresponds to the NT syscall NtQueryMutant(). This returns the recursion count, owner, and abandoned state of the mutex. @@ -18,10 +9,10 @@ Signed-off-by: Elizabeth Figura 2 files changed, 24 insertions(+) diff --git a/drivers/misc/ntsync.c b/drivers/misc/ntsync.c -index 6dccfbfb2512..7f5f96ec7c69 100644 +index 0daaeeeba051..b07510035c1f 100644 --- a/drivers/misc/ntsync.c +++ b/drivers/misc/ntsync.c -@@ -525,6 +525,27 @@ static int ntsync_sem_read(struct ntsync_obj *sem, void __user *argp) +@@ -547,6 +547,27 @@ static int ntsync_sem_read(struct ntsync_obj *sem, void __user *argp) return 0; } @@ -49,7 +40,7 @@ index 6dccfbfb2512..7f5f96ec7c69 100644 static int ntsync_obj_release(struct inode *inode, struct file *file) { struct ntsync_obj *obj = file->private_data; -@@ -550,6 +571,8 @@ static long ntsync_obj_ioctl(struct file *file, unsigned int cmd, +@@ -572,6 +593,8 @@ static long ntsync_obj_ioctl(struct file *file, unsigned int cmd, return ntsync_mutex_unlock(obj, argp); case NTSYNC_IOC_MUTEX_KILL: return ntsync_mutex_kill(obj, argp); @@ -59,7 +50,7 @@ index 6dccfbfb2512..7f5f96ec7c69 100644 return ntsync_event_set(obj, argp, false); case NTSYNC_IOC_EVENT_RESET: diff --git a/include/uapi/linux/ntsync.h b/include/uapi/linux/ntsync.h -index 6017f621687e..a1d0ef581212 100644 +index 42f51dc4e57e..25f3296cfabf 100644 --- a/include/uapi/linux/ntsync.h +++ b/include/uapi/linux/ntsync.h @@ -52,5 +52,6 @@ struct ntsync_wait_args { @@ -71,4 +62,3 @@ index 6017f621687e..a1d0ef581212 100644 #endif -- 2.43.0 - diff --git a/linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0014.patch b/linux-clang/linux6.7-zen/patches/0014-[PATCH_v2_15_31]_ntsync:_Introduce_NTSYNC_IOC_EVENT_READ..patch similarity index 76% rename from linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0014.patch rename to linux-clang/linux6.7-zen/patches/0014-[PATCH_v2_15_31]_ntsync:_Introduce_NTSYNC_IOC_EVENT_READ..patch index ff7ac42..476ae09 100644 --- a/linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0014.patch +++ b/linux-clang/linux6.7-zen/patches/0014-[PATCH_v2_15_31]_ntsync:_Introduce_NTSYNC_IOC_EVENT_READ..patch @@ -1,12 +1,3 @@ -From git@z Thu Jan 1 00:00:00 1970 -Subject: [PATCH RFC v2 15/29] ntsync: Introduce NTSYNC_IOC_EVENT_READ. -From: Elizabeth Figura -Date: Tue, 30 Jan 2024 20:13:42 -0600 -Message-Id: <20240131021356.10322-16-zfigura@codeweavers.com> -MIME-Version: 1.0 -Content-Type: text/plain; charset="utf-8" -Content-Transfer-Encoding: 7bit - This corresponds to the NT syscall NtQueryEvent(). This returns the signaled state of the event and whether it is manual-reset. @@ -18,10 +9,10 @@ Signed-off-by: Elizabeth Figura 2 files changed, 22 insertions(+) diff --git a/drivers/misc/ntsync.c b/drivers/misc/ntsync.c -index 7f5f96ec7c69..5439c1c9e90f 100644 +index b07510035c1f..981a1545192c 100644 --- a/drivers/misc/ntsync.c +++ b/drivers/misc/ntsync.c -@@ -546,6 +546,25 @@ static int ntsync_mutex_read(struct ntsync_obj *mutex, void __user *argp) +@@ -568,6 +568,25 @@ static int ntsync_mutex_read(struct ntsync_obj *mutex, void __user *argp) return ret; } @@ -47,7 +38,7 @@ index 7f5f96ec7c69..5439c1c9e90f 100644 static int ntsync_obj_release(struct inode *inode, struct file *file) { struct ntsync_obj *obj = file->private_data; -@@ -579,6 +598,8 @@ static long ntsync_obj_ioctl(struct file *file, unsigned int cmd, +@@ -601,6 +620,8 @@ static long ntsync_obj_ioctl(struct file *file, unsigned int cmd, return ntsync_event_reset(obj, argp); case NTSYNC_IOC_EVENT_PULSE: return ntsync_event_set(obj, argp, true); @@ -57,7 +48,7 @@ index 7f5f96ec7c69..5439c1c9e90f 100644 return -ENOIOCTLCMD; } diff --git a/include/uapi/linux/ntsync.h b/include/uapi/linux/ntsync.h -index a1d0ef581212..582d33b0dcac 100644 +index 25f3296cfabf..03c95e5a398f 100644 --- a/include/uapi/linux/ntsync.h +++ b/include/uapi/linux/ntsync.h @@ -53,5 +53,6 @@ struct ntsync_wait_args { @@ -69,4 +60,3 @@ index a1d0ef581212..582d33b0dcac 100644 #endif -- 2.43.0 - diff --git a/linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0015.patch b/linux-clang/linux6.7-zen/patches/0015-[PATCH_v2_16_31]_ntsync:_Introduce_alertable_waits..patch similarity index 79% rename from linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0015.patch rename to linux-clang/linux6.7-zen/patches/0015-[PATCH_v2_16_31]_ntsync:_Introduce_alertable_waits..patch index 9a3a0c9..ce53af5 100644 --- a/linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0015.patch +++ b/linux-clang/linux6.7-zen/patches/0015-[PATCH_v2_16_31]_ntsync:_Introduce_alertable_waits..patch @@ -1,12 +1,3 @@ -From git@z Thu Jan 1 00:00:00 1970 -Subject: [PATCH RFC v2 16/29] ntsync: Introduce alertable waits. -From: Elizabeth Figura -Date: Tue, 30 Jan 2024 20:13:43 -0600 -Message-Id: <20240131021356.10322-17-zfigura@codeweavers.com> -MIME-Version: 1.0 -Content-Type: text/plain; charset="utf-8" -Content-Transfer-Encoding: 7bit - NT waits can optionally be made "alertable". This is a special channel for thread wakeup that is mildly similar to SIGIO. A thread has an internal single bit of "alerted" state, and if a thread is made alerted while an alertable wait, @@ -24,10 +15,10 @@ Signed-off-by: Elizabeth Figura 2 files changed, 60 insertions(+), 10 deletions(-) diff --git a/drivers/misc/ntsync.c b/drivers/misc/ntsync.c -index 5439c1c9e90f..1e619e1ce6a6 100644 +index 981a1545192c..0055b4671808 100644 --- a/drivers/misc/ntsync.c +++ b/drivers/misc/ntsync.c -@@ -784,22 +784,29 @@ static int setup_wait(struct ntsync_device *dev, +@@ -808,22 +808,29 @@ static int setup_wait(struct ntsync_device *dev, const struct ntsync_wait_args *args, bool all, struct ntsync_q **ret_q) { @@ -60,7 +51,7 @@ index 5439c1c9e90f..1e619e1ce6a6 100644 if (!q) return -ENOMEM; q->task = current; -@@ -809,7 +816,7 @@ static int setup_wait(struct ntsync_device *dev, +@@ -833,7 +840,7 @@ static int setup_wait(struct ntsync_device *dev, q->ownerdead = false; q->count = count; @@ -69,18 +60,18 @@ index 5439c1c9e90f..1e619e1ce6a6 100644 struct ntsync_q_entry *entry = &q->entries[i]; struct ntsync_obj *obj = get_obj(dev, fds[i]); -@@ -860,9 +867,9 @@ static int ntsync_wait_any(struct ntsync_device *dev, void __user *argp) +@@ -883,9 +890,9 @@ static void try_wake_any_obj(struct ntsync_obj *obj) + static int ntsync_wait_any(struct ntsync_device *dev, void __user *argp) { struct ntsync_wait_args args; - struct ntsync_q *q; + __u32 i, total_count; - ktime_t timeout; + struct ntsync_q *q; int signaled; - __u32 i; int ret; if (copy_from_user(&args, argp, sizeof(args))) -@@ -872,9 +879,13 @@ static int ntsync_wait_any(struct ntsync_device *dev, void __user *argp) +@@ -895,9 +902,13 @@ static int ntsync_wait_any(struct ntsync_device *dev, void __user *argp) if (ret < 0) return ret; @@ -95,7 +86,7 @@ index 5439c1c9e90f..1e619e1ce6a6 100644 struct ntsync_q_entry *entry = &q->entries[i]; struct ntsync_obj *obj = entry->obj; -@@ -883,9 +894,15 @@ static int ntsync_wait_any(struct ntsync_device *dev, void __user *argp) +@@ -906,9 +917,15 @@ static int ntsync_wait_any(struct ntsync_device *dev, void __user *argp) spin_unlock(&obj->lock); } @@ -113,7 +104,7 @@ index 5439c1c9e90f..1e619e1ce6a6 100644 struct ntsync_obj *obj = q->entries[i].obj; if (atomic_read(&q->signaled) != -1) -@@ -903,7 +920,7 @@ static int ntsync_wait_any(struct ntsync_device *dev, void __user *argp) +@@ -925,7 +942,7 @@ static int ntsync_wait_any(struct ntsync_device *dev, void __user *argp) /* and finally, unqueue */ @@ -122,7 +113,7 @@ index 5439c1c9e90f..1e619e1ce6a6 100644 struct ntsync_q_entry *entry = &q->entries[i]; struct ntsync_obj *obj = entry->obj; -@@ -964,6 +981,14 @@ static int ntsync_wait_all(struct ntsync_device *dev, void __user *argp) +@@ -985,6 +1002,14 @@ static int ntsync_wait_all(struct ntsync_device *dev, void __user *argp) */ list_add_tail(&entry->node, &obj->all_waiters); } @@ -137,7 +128,7 @@ index 5439c1c9e90f..1e619e1ce6a6 100644 /* check if we are already signaled */ -@@ -971,6 +996,21 @@ static int ntsync_wait_all(struct ntsync_device *dev, void __user *argp) +@@ -992,6 +1017,21 @@ static int ntsync_wait_all(struct ntsync_device *dev, void __user *argp) spin_unlock(&dev->wait_all_lock); @@ -158,8 +149,8 @@ index 5439c1c9e90f..1e619e1ce6a6 100644 + /* sleep */ - timeout = ns_to_ktime(args.timeout); -@@ -994,6 +1034,16 @@ static int ntsync_wait_all(struct ntsync_device *dev, void __user *argp) + ret = ntsync_schedule(q, &args); +@@ -1014,6 +1054,16 @@ static int ntsync_wait_all(struct ntsync_device *dev, void __user *argp) put_obj(obj); } @@ -177,7 +168,7 @@ index 5439c1c9e90f..1e619e1ce6a6 100644 spin_unlock(&dev->wait_all_lock); diff --git a/include/uapi/linux/ntsync.h b/include/uapi/linux/ntsync.h -index 582d33b0dcac..7c91af7011e4 100644 +index 03c95e5a398f..555ae81b479a 100644 --- a/include/uapi/linux/ntsync.h +++ b/include/uapi/linux/ntsync.h @@ -34,7 +34,7 @@ struct ntsync_wait_args { @@ -191,4 +182,3 @@ index 582d33b0dcac..7c91af7011e4 100644 #define NTSYNC_MAX_WAIT_COUNT 64 -- 2.43.0 - diff --git a/linux-clang/linux6.7-zen/patches/0016-[PATCH_v2_17_31]_ntsync:_Allow_waits_to_use_the_REALTIME_clock..patch b/linux-clang/linux6.7-zen/patches/0016-[PATCH_v2_17_31]_ntsync:_Allow_waits_to_use_the_REALTIME_clock..patch new file mode 100644 index 0000000..6e15e88 --- /dev/null +++ b/linux-clang/linux6.7-zen/patches/0016-[PATCH_v2_17_31]_ntsync:_Allow_waits_to_use_the_REALTIME_clock..patch @@ -0,0 +1,79 @@ +NtWaitForMultipleObjects() can receive a timeout in two forms, relative or +absolute. Relative timeouts are unaffected by changes to the system time and do +not count down while the system suspends; for absolute timeouts the opposite is +true. + +In order to make the interface and implementation simpler, the ntsync driver +only deals in absolute timeouts. However, we need to be able to emulate both +behaviours apropos suspension and time adjustment, which is achieved by allowing +either the MONOTONIC or REALTIME clock to be used. + +Signed-off-by: Elizabeth Figura +--- + drivers/misc/ntsync.c | 9 ++++++++- + include/uapi/linux/ntsync.h | 4 ++++ + 2 files changed, 12 insertions(+), 1 deletion(-) + +diff --git a/drivers/misc/ntsync.c b/drivers/misc/ntsync.c +index 0055b4671808..f54c81dada3d 100644 +--- a/drivers/misc/ntsync.c ++++ b/drivers/misc/ntsync.c +@@ -778,11 +778,15 @@ static void put_obj(struct ntsync_obj *obj) + static int ntsync_schedule(const struct ntsync_q *q, const struct ntsync_wait_args *args) + { + ktime_t timeout = ns_to_ktime(args->timeout); ++ clockid_t clock = CLOCK_MONOTONIC; + ktime_t *timeout_ptr; + int ret = 0; + + timeout_ptr = (args->timeout == U64_MAX ? NULL : &timeout); + ++ if (args->flags & NTSYNC_WAIT_REALTIME) ++ clock = CLOCK_REALTIME; ++ + do { + if (signal_pending(current)) { + ret = -ERESTARTSYS; +@@ -794,7 +798,7 @@ static int ntsync_schedule(const struct ntsync_q *q, const struct ntsync_wait_ar + ret = 0; + break; + } +- ret = schedule_hrtimeout(timeout_ptr, HRTIMER_MODE_ABS); ++ ret = schedule_hrtimeout_range_clock(timeout_ptr, 0, HRTIMER_MODE_ABS, clock); + } while (ret < 0); + __set_current_state(TASK_RUNNING); + +@@ -817,6 +821,9 @@ static int setup_wait(struct ntsync_device *dev, + if (!args->owner) + return -EINVAL; + ++ if (args->pad || (args->flags & ~NTSYNC_WAIT_REALTIME)) ++ return -EINVAL; ++ + if (args->count > NTSYNC_MAX_WAIT_COUNT) + return -EINVAL; + +diff --git a/include/uapi/linux/ntsync.h b/include/uapi/linux/ntsync.h +index 555ae81b479a..b5e835d8dba8 100644 +--- a/include/uapi/linux/ntsync.h ++++ b/include/uapi/linux/ntsync.h +@@ -28,6 +28,8 @@ struct ntsync_event_args { + __u32 signaled; + }; + ++#define NTSYNC_WAIT_REALTIME 0x1 ++ + struct ntsync_wait_args { + __u64 timeout; + __u64 objs; +@@ -35,6 +37,8 @@ struct ntsync_wait_args { + __u32 owner; + __u32 index; + __u32 alert; ++ __u32 flags; ++ __u32 pad; + }; + + #define NTSYNC_MAX_WAIT_COUNT 64 +-- +2.43.0 diff --git a/linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0016.patch "b/linux-clang/linux6.7-zen/patches/0017-[PATCH_v2_18_31]_selftests:_ntsync:_Add_some_tests_for_semaphore\n_state..patch" similarity index 90% rename from linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0016.patch rename to "linux-clang/linux6.7-zen/patches/0017-[PATCH_v2_18_31]_selftests:_ntsync:_Add_some_tests_for_semaphore\n_state..patch" index cc3864a..5d8c716 100644 --- a/linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0016.patch +++ "b/linux-clang/linux6.7-zen/patches/0017-[PATCH_v2_18_31]_selftests:_ntsync:_Add_some_tests_for_semaphore\n_state..patch" @@ -1,13 +1,3 @@ -From git@z Thu Jan 1 00:00:00 1970 -Subject: [PATCH RFC v2 17/29] selftests: ntsync: Add some tests for - semaphore state. -From: Elizabeth Figura -Date: Tue, 30 Jan 2024 20:13:44 -0600 -Message-Id: <20240131021356.10322-18-zfigura@codeweavers.com> -MIME-Version: 1.0 -Content-Type: text/plain; charset="utf-8" -Content-Transfer-Encoding: 7bit - Wine has tests for its synchronization primitives, but these are more accessible to kernel developers, and also allow us to test some edge cases that Wine does not care about. @@ -20,8 +10,8 @@ Signed-off-by: Elizabeth Figura tools/testing/selftests/Makefile | 1 + .../testing/selftests/drivers/ntsync/Makefile | 8 + tools/testing/selftests/drivers/ntsync/config | 1 + - .../testing/selftests/drivers/ntsync/ntsync.c | 143 ++++++++++++++++++ - 4 files changed, 153 insertions(+) + .../testing/selftests/drivers/ntsync/ntsync.c | 149 ++++++++++++++++++ + 4 files changed, 159 insertions(+) create mode 100644 tools/testing/selftests/drivers/ntsync/Makefile create mode 100644 tools/testing/selftests/drivers/ntsync/config create mode 100644 tools/testing/selftests/drivers/ntsync/ntsync.c @@ -61,15 +51,15 @@ index 000000000000..60539c826d06 +CONFIG_WINESYNC=y diff --git a/tools/testing/selftests/drivers/ntsync/ntsync.c b/tools/testing/selftests/drivers/ntsync/ntsync.c new file mode 100644 -index 000000000000..6ceb48fb42e3 +index 000000000000..1e145c6dfded --- /dev/null +++ b/tools/testing/selftests/drivers/ntsync/ntsync.c -@@ -0,0 +1,143 @@ +@@ -0,0 +1,149 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* + * Various unit tests for the "ntsync" synchronization primitive driver. + * -+ * Copyright (C) 2021-2022 Elizabeth Figura ++ * Copyright (C) 2021-2022 Elizabeth Figura + */ + +#define _GNU_SOURCE @@ -202,6 +192,12 @@ index 000000000000..6ceb48fb42e3 + EXPECT_EQ(0, count); + check_sem_state(sem, 1, 2); + ++ count = ~0u; ++ ret = post_sem(sem, &count); ++ EXPECT_EQ(-1, ret); ++ EXPECT_EQ(EOVERFLOW, errno); ++ check_sem_state(sem, 1, 2); ++ + close(sem); + + close(fd); @@ -210,4 +206,3 @@ index 000000000000..6ceb48fb42e3 +TEST_HARNESS_MAIN -- 2.43.0 - diff --git a/linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0017.patch "b/linux-clang/linux6.7-zen/patches/0018-[PATCH_v2_19_31]_selftests:_ntsync:_Add_some_tests_for_mutex\n_state..patch" similarity index 90% rename from linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0017.patch rename to "linux-clang/linux6.7-zen/patches/0018-[PATCH_v2_19_31]_selftests:_ntsync:_Add_some_tests_for_mutex\n_state..patch" index 35a182e..316e7d1 100644 --- a/linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0017.patch +++ "b/linux-clang/linux6.7-zen/patches/0018-[PATCH_v2_19_31]_selftests:_ntsync:_Add_some_tests_for_mutex\n_state..patch" @@ -1,23 +1,13 @@ -From git@z Thu Jan 1 00:00:00 1970 -Subject: [PATCH RFC v2 18/29] selftests: ntsync: Add some tests for mutex - state. -From: Elizabeth Figura -Date: Tue, 30 Jan 2024 20:13:45 -0600 -Message-Id: <20240131021356.10322-19-zfigura@codeweavers.com> -MIME-Version: 1.0 -Content-Type: text/plain; charset="utf-8" -Content-Transfer-Encoding: 7bit - Test mutex-specific ioctls NTSYNC_IOC_MUTEX_UNLOCK and NTSYNC_IOC_MUTEX_READ, and waiting on mutexes. Signed-off-by: Elizabeth Figura --- - .../testing/selftests/drivers/ntsync/ntsync.c | 181 ++++++++++++++++++ - 1 file changed, 181 insertions(+) + .../testing/selftests/drivers/ntsync/ntsync.c | 196 ++++++++++++++++++ + 1 file changed, 196 insertions(+) diff --git a/tools/testing/selftests/drivers/ntsync/ntsync.c b/tools/testing/selftests/drivers/ntsync/ntsync.c -index 6ceb48fb42e3..80c8bd409d68 100644 +index 1e145c6dfded..7cd0f40594fd 100644 --- a/tools/testing/selftests/drivers/ntsync/ntsync.c +++ b/tools/testing/selftests/drivers/ntsync/ntsync.c @@ -40,6 +40,39 @@ static int post_sem(int sem, __u32 *count) @@ -60,7 +50,7 @@ index 6ceb48fb42e3..80c8bd409d68 100644 static int wait_any(int fd, __u32 count, const int *objs, __u32 owner, __u32 *index) { struct ntsync_wait_args args = {0}; -@@ -140,4 +173,152 @@ TEST(semaphore_state) +@@ -146,4 +179,167 @@ TEST(semaphore_state) close(fd); } @@ -209,10 +199,24 @@ index 6ceb48fb42e3..80c8bd409d68 100644 + + close(mutex); + ++ mutex_args.owner = 123; ++ mutex_args.count = ~0u; ++ mutex_args.mutex = 0xdeadbeef; ++ ret = ioctl(fd, NTSYNC_IOC_CREATE_MUTEX, &mutex_args); ++ EXPECT_EQ(0, ret); ++ EXPECT_NE(0xdeadbeef, mutex_args.mutex); ++ mutex = mutex_args.mutex; ++ check_mutex_state(mutex, ~0u, 123); ++ ++ ret = wait_any(fd, 1, &mutex, 123, &index); ++ EXPECT_EQ(-1, ret); ++ EXPECT_EQ(ETIMEDOUT, errno); ++ ++ close(mutex); ++ + close(fd); +} + TEST_HARNESS_MAIN -- 2.43.0 - diff --git a/linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0018.patch "b/linux-clang/linux6.7-zen/patches/0019-[PATCH_v2_20_31]_selftests:_ntsync:_Add_some_tests_for\n_NTSYNC_IOC_WAIT_ANY..patch" similarity index 81% rename from linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0018.patch rename to "linux-clang/linux6.7-zen/patches/0019-[PATCH_v2_20_31]_selftests:_ntsync:_Add_some_tests_for\n_NTSYNC_IOC_WAIT_ANY..patch" index d82f310..6484738 100644 --- a/linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0018.patch +++ "b/linux-clang/linux6.7-zen/patches/0019-[PATCH_v2_20_31]_selftests:_ntsync:_Add_some_tests_for\n_NTSYNC_IOC_WAIT_ANY..patch" @@ -1,38 +1,27 @@ -From git@z Thu Jan 1 00:00:00 1970 -Subject: [PATCH RFC v2 19/29] selftests: ntsync: Add some tests for - NTSYNC_IOC_WAIT_ANY. -From: Elizabeth Figura -Date: Tue, 30 Jan 2024 20:13:46 -0600 -Message-Id: <20240131021356.10322-20-zfigura@codeweavers.com> -MIME-Version: 1.0 -Content-Type: text/plain; charset="utf-8" -Content-Transfer-Encoding: 7bit - Test basic synchronous functionality of NTSYNC_IOC_WAIT_ANY, when objects are considered signaled or not signaled, and how they are affected by a successful wait. Signed-off-by: Elizabeth Figura --- - .../testing/selftests/drivers/ntsync/ntsync.c | 105 ++++++++++++++++++ - 1 file changed, 105 insertions(+) + .../testing/selftests/drivers/ntsync/ntsync.c | 119 ++++++++++++++++++ + 1 file changed, 119 insertions(+) diff --git a/tools/testing/selftests/drivers/ntsync/ntsync.c b/tools/testing/selftests/drivers/ntsync/ntsync.c -index 80c8bd409d68..13e7c9d7441e 100644 +index 7cd0f40594fd..40ad8cbd3138 100644 --- a/tools/testing/selftests/drivers/ntsync/ntsync.c +++ b/tools/testing/selftests/drivers/ntsync/ntsync.c -@@ -321,4 +321,109 @@ TEST(mutex_state) +@@ -342,4 +342,123 @@ TEST(mutex_state) close(fd); } +TEST(test_wait_any) +{ ++ int objs[NTSYNC_MAX_WAIT_COUNT + 1], fd, ret; + struct ntsync_mutex_args mutex_args = {0}; -+ struct ntsync_wait_args wait_args = {0}; + struct ntsync_sem_args sem_args = {0}; -+ __u32 owner, index, count; ++ __u32 owner, index, count, i; + struct timespec timeout; -+ int objs[2], fd, ret; + + clock_gettime(CLOCK_MONOTONIC, &timeout); + @@ -117,13 +106,28 @@ index 80c8bd409d68..13e7c9d7441e 100644 + objs[0] = objs[1] = sem_args.sem; + ret = wait_any(fd, 2, objs, 456, &index); + EXPECT_EQ(0, ret); -+ EXPECT_EQ(0, wait_args.index); ++ EXPECT_EQ(0, index); + check_sem_state(sem_args.sem, 1, 3); + + ret = wait_any(fd, 0, NULL, 456, &index); + EXPECT_EQ(-1, ret); + EXPECT_EQ(ETIMEDOUT, errno); + ++ for (i = 0; i < NTSYNC_MAX_WAIT_COUNT + 1; ++i) ++ objs[i] = sem_args.sem; ++ ++ ret = wait_any(fd, NTSYNC_MAX_WAIT_COUNT, objs, 123, &index); ++ EXPECT_EQ(0, ret); ++ EXPECT_EQ(0, index); ++ ++ ret = wait_any(fd, NTSYNC_MAX_WAIT_COUNT + 1, objs, 123, &index); ++ EXPECT_EQ(-1, ret); ++ EXPECT_EQ(EINVAL, errno); ++ ++ ret = wait_any(fd, -1, objs, 123, &index); ++ EXPECT_EQ(-1, ret); ++ EXPECT_EQ(EINVAL, errno); ++ + close(sem_args.sem); + close(mutex_args.mutex); + @@ -133,4 +137,3 @@ index 80c8bd409d68..13e7c9d7441e 100644 TEST_HARNESS_MAIN -- 2.43.0 - diff --git a/linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0019.patch "b/linux-clang/linux6.7-zen/patches/0020-[PATCH_v2_21_31]_selftests:_ntsync:_Add_some_tests_for\n_NTSYNC_IOC_WAIT_ALL..patch" similarity index 89% rename from linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0019.patch rename to "linux-clang/linux6.7-zen/patches/0020-[PATCH_v2_21_31]_selftests:_ntsync:_Add_some_tests_for\n_NTSYNC_IOC_WAIT_ALL..patch" index ec7fb58..ebe93e0 100644 --- a/linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0019.patch +++ "b/linux-clang/linux6.7-zen/patches/0020-[PATCH_v2_21_31]_selftests:_ntsync:_Add_some_tests_for\n_NTSYNC_IOC_WAIT_ALL..patch" @@ -1,13 +1,3 @@ -From git@z Thu Jan 1 00:00:00 1970 -Subject: [PATCH RFC v2 20/29] selftests: ntsync: Add some tests for - NTSYNC_IOC_WAIT_ALL. -From: Elizabeth Figura -Date: Tue, 30 Jan 2024 20:13:47 -0600 -Message-Id: <20240131021356.10322-21-zfigura@codeweavers.com> -MIME-Version: 1.0 -Content-Type: text/plain; charset="utf-8" -Content-Transfer-Encoding: 7bit - Test basic synchronous functionality of NTSYNC_IOC_WAIT_ALL, and when objects are considered simultaneously signaled. @@ -17,7 +7,7 @@ Signed-off-by: Elizabeth Figura 1 file changed, 97 insertions(+), 2 deletions(-) diff --git a/tools/testing/selftests/drivers/ntsync/ntsync.c b/tools/testing/selftests/drivers/ntsync/ntsync.c -index 13e7c9d7441e..77f1b7e42d76 100644 +index 40ad8cbd3138..c0f372167557 100644 --- a/tools/testing/selftests/drivers/ntsync/ntsync.c +++ b/tools/testing/selftests/drivers/ntsync/ntsync.c @@ -73,7 +73,8 @@ static int unlock_mutex(int mutex, __u32 owner, __u32 *count) @@ -53,7 +43,7 @@ index 13e7c9d7441e..77f1b7e42d76 100644 TEST(semaphore_state) { struct ntsync_sem_args sem_args; -@@ -426,4 +437,88 @@ TEST(test_wait_any) +@@ -461,4 +472,88 @@ TEST(test_wait_any) close(fd); } @@ -144,4 +134,3 @@ index 13e7c9d7441e..77f1b7e42d76 100644 TEST_HARNESS_MAIN -- 2.43.0 - diff --git a/linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0020.patch "b/linux-clang/linux6.7-zen/patches/0021-[PATCH_v2_22_31]_selftests:_ntsync:_Add_some_tests_for_wakeup\n_signaling_with_WINESYNC_IOC_WAIT_ANY..patch" similarity index 86% rename from linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0020.patch rename to "linux-clang/linux6.7-zen/patches/0021-[PATCH_v2_22_31]_selftests:_ntsync:_Add_some_tests_for_wakeup\n_signaling_with_WINESYNC_IOC_WAIT_ANY..patch" index 3d9e0d2..d813930 100644 --- a/linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0020.patch +++ "b/linux-clang/linux6.7-zen/patches/0021-[PATCH_v2_22_31]_selftests:_ntsync:_Add_some_tests_for_wakeup\n_signaling_with_WINESYNC_IOC_WAIT_ANY..patch" @@ -1,37 +1,25 @@ -From git@z Thu Jan 1 00:00:00 1970 -Subject: [PATCH RFC v2 21/29] selftests: ntsync: Add some tests for wakeup - signaling with WINESYNC_IOC_WAIT_ANY. -From: Elizabeth Figura -Date: Tue, 30 Jan 2024 20:13:48 -0600 -Message-Id: <20240131021356.10322-22-zfigura@codeweavers.com> -MIME-Version: 1.0 -Content-Type: text/plain; charset="utf-8" -Content-Transfer-Encoding: 7bit - Test contended "wait-for-any" waits, to make sure that scheduling and wakeup logic works correctly. Signed-off-by: Elizabeth Figura --- - .../testing/selftests/drivers/ntsync/ntsync.c | 152 ++++++++++++++++++ - 1 file changed, 152 insertions(+) + .../testing/selftests/drivers/ntsync/ntsync.c | 150 ++++++++++++++++++ + 1 file changed, 150 insertions(+) diff --git a/tools/testing/selftests/drivers/ntsync/ntsync.c b/tools/testing/selftests/drivers/ntsync/ntsync.c -index 77f1b7e42d76..96a866ef235f 100644 +index c0f372167557..993f5db23768 100644 --- a/tools/testing/selftests/drivers/ntsync/ntsync.c +++ b/tools/testing/selftests/drivers/ntsync/ntsync.c -@@ -521,4 +521,156 @@ TEST(test_wait_all) +@@ -556,4 +556,154 @@ TEST(test_wait_all) close(fd); } -+struct wake_args -+{ ++struct wake_args { + int fd; + int obj; +}; + -+struct wait_args -+{ ++struct wait_args { + int fd; + unsigned long request; + struct ntsync_wait_args *args; @@ -179,4 +167,3 @@ index 77f1b7e42d76..96a866ef235f 100644 TEST_HARNESS_MAIN -- 2.43.0 - diff --git a/linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0021.patch "b/linux-clang/linux6.7-zen/patches/0022-[PATCH_v2_23_31]_selftests:_ntsync:_Add_some_tests_for_wakeup\n_signaling_with_WINESYNC_IOC_WAIT_ALL..patch" similarity index 86% rename from linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0021.patch rename to "linux-clang/linux6.7-zen/patches/0022-[PATCH_v2_23_31]_selftests:_ntsync:_Add_some_tests_for_wakeup\n_signaling_with_WINESYNC_IOC_WAIT_ALL..patch" index 522d6a6..053e2c7 100644 --- a/linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0021.patch +++ "b/linux-clang/linux6.7-zen/patches/0022-[PATCH_v2_23_31]_selftests:_ntsync:_Add_some_tests_for_wakeup\n_signaling_with_WINESYNC_IOC_WAIT_ALL..patch" @@ -1,13 +1,3 @@ -From git@z Thu Jan 1 00:00:00 1970 -Subject: [PATCH RFC v2 22/29] selftests: ntsync: Add some tests for wakeup - signaling with WINESYNC_IOC_WAIT_ALL. -From: Elizabeth Figura -Date: Tue, 30 Jan 2024 20:13:49 -0600 -Message-Id: <20240131021356.10322-23-zfigura@codeweavers.com> -MIME-Version: 1.0 -Content-Type: text/plain; charset="utf-8" -Content-Transfer-Encoding: 7bit - Test contended "wait-for-all" waits, to make sure that scheduling and wakeup logic works correctly, and that the wait only exits once objects are all simultaneously signaled. @@ -18,10 +8,10 @@ Signed-off-by: Elizabeth Figura 1 file changed, 98 insertions(+) diff --git a/tools/testing/selftests/drivers/ntsync/ntsync.c b/tools/testing/selftests/drivers/ntsync/ntsync.c -index 96a866ef235f..7776fe71b8ef 100644 +index 993f5db23768..b77fb0b2c4b1 100644 --- a/tools/testing/selftests/drivers/ntsync/ntsync.c +++ b/tools/testing/selftests/drivers/ntsync/ntsync.c -@@ -673,4 +673,102 @@ TEST(wake_any) +@@ -706,4 +706,102 @@ TEST(wake_any) close(fd); } @@ -126,4 +116,3 @@ index 96a866ef235f..7776fe71b8ef 100644 TEST_HARNESS_MAIN -- 2.43.0 - diff --git a/linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0022.patch "b/linux-clang/linux6.7-zen/patches/0023-[PATCH_v2_24_31]_selftests:_ntsync:_Add_some_tests_for\n_manual-reset_event_state..patch" similarity index 86% rename from linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0022.patch rename to "linux-clang/linux6.7-zen/patches/0023-[PATCH_v2_24_31]_selftests:_ntsync:_Add_some_tests_for\n_manual-reset_event_state..patch" index 1d3a60d..ace9ac0 100644 --- a/linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0022.patch +++ "b/linux-clang/linux6.7-zen/patches/0023-[PATCH_v2_24_31]_selftests:_ntsync:_Add_some_tests_for\n_manual-reset_event_state..patch" @@ -1,13 +1,3 @@ -From git@z Thu Jan 1 00:00:00 1970 -Subject: [PATCH RFC v2 23/29] selftests: ntsync: Add some tests for - manual-reset event state. -From: Elizabeth Figura -Date: Tue, 30 Jan 2024 20:13:50 -0600 -Message-Id: <20240131021356.10322-24-zfigura@codeweavers.com> -MIME-Version: 1.0 -Content-Type: text/plain; charset="utf-8" -Content-Transfer-Encoding: 7bit - Test event-specific ioctls NTSYNC_IOC_EVENT_SET, NTSYNC_IOC_EVENT_RESET, NTSYNC_IOC_EVENT_PULSE, NTSYNC_IOC_EVENT_READ for manual-reset events, and waiting on manual-reset events. @@ -18,7 +8,7 @@ Signed-off-by: Elizabeth Figura 1 file changed, 89 insertions(+) diff --git a/tools/testing/selftests/drivers/ntsync/ntsync.c b/tools/testing/selftests/drivers/ntsync/ntsync.c -index 7776fe71b8ef..98fc70a9a58b 100644 +index b77fb0b2c4b1..b6481c2b85cc 100644 --- a/tools/testing/selftests/drivers/ntsync/ntsync.c +++ b/tools/testing/selftests/drivers/ntsync/ntsync.c @@ -73,6 +73,27 @@ static int unlock_mutex(int mutex, __u32 owner, __u32 *count) @@ -49,7 +39,7 @@ index 7776fe71b8ef..98fc70a9a58b 100644 static int wait_objs(int fd, unsigned long request, __u32 count, const int *objs, __u32 owner, __u32 *index) { -@@ -332,6 +353,74 @@ TEST(mutex_state) +@@ -353,6 +374,74 @@ TEST(mutex_state) close(fd); } @@ -123,7 +113,6 @@ index 7776fe71b8ef..98fc70a9a58b 100644 + TEST(test_wait_any) { - struct ntsync_mutex_args mutex_args = {0}; + int objs[NTSYNC_MAX_WAIT_COUNT + 1], fd, ret; -- 2.43.0 - diff --git a/linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0023.patch "b/linux-clang/linux6.7-zen/patches/0024-[PATCH_v2_25_31]_selftests:_ntsync:_Add_some_tests_for_auto-reset\n_event_state..patch" similarity index 80% rename from linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0023.patch rename to "linux-clang/linux6.7-zen/patches/0024-[PATCH_v2_25_31]_selftests:_ntsync:_Add_some_tests_for_auto-reset\n_event_state..patch" index f34c5e4..3989a16 100644 --- a/linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0023.patch +++ "b/linux-clang/linux6.7-zen/patches/0024-[PATCH_v2_25_31]_selftests:_ntsync:_Add_some_tests_for_auto-reset\n_event_state..patch" @@ -1,13 +1,3 @@ -From git@z Thu Jan 1 00:00:00 1970 -Subject: [PATCH RFC v2 24/29] selftests: ntsync: Add some tests for - auto-reset event state. -From: Elizabeth Figura -Date: Tue, 30 Jan 2024 20:13:51 -0600 -Message-Id: <20240131021356.10322-25-zfigura@codeweavers.com> -MIME-Version: 1.0 -Content-Type: text/plain; charset="utf-8" -Content-Transfer-Encoding: 7bit - Test event-specific ioctls NTSYNC_IOC_EVENT_SET, NTSYNC_IOC_EVENT_RESET, NTSYNC_IOC_EVENT_PULSE, NTSYNC_IOC_EVENT_READ for auto-reset events, and waiting on auto-reset events. @@ -18,10 +8,10 @@ Signed-off-by: Elizabeth Figura 1 file changed, 59 insertions(+) diff --git a/tools/testing/selftests/drivers/ntsync/ntsync.c b/tools/testing/selftests/drivers/ntsync/ntsync.c -index 98fc70a9a58b..f1fb28949367 100644 +index b6481c2b85cc..12ccb4ec28e4 100644 --- a/tools/testing/selftests/drivers/ntsync/ntsync.c +++ b/tools/testing/selftests/drivers/ntsync/ntsync.c -@@ -421,6 +421,65 @@ TEST(manual_event_state) +@@ -442,6 +442,65 @@ TEST(manual_event_state) close(fd); } @@ -86,7 +76,6 @@ index 98fc70a9a58b..f1fb28949367 100644 + TEST(test_wait_any) { - struct ntsync_mutex_args mutex_args = {0}; + int objs[NTSYNC_MAX_WAIT_COUNT + 1], fd, ret; -- 2.43.0 - diff --git a/linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0024.patch "b/linux-clang/linux6.7-zen/patches/0025-[PATCH_v2_26_31]_selftests:_ntsync:_Add_some_tests_for_wakeup\n_signaling_with_events..patch" similarity index 89% rename from linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0024.patch rename to "linux-clang/linux6.7-zen/patches/0025-[PATCH_v2_26_31]_selftests:_ntsync:_Add_some_tests_for_wakeup\n_signaling_with_events..patch" index 39fadaa..832a88f 100644 --- a/linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0024.patch +++ "b/linux-clang/linux6.7-zen/patches/0025-[PATCH_v2_26_31]_selftests:_ntsync:_Add_some_tests_for_wakeup\n_signaling_with_events..patch" @@ -1,13 +1,3 @@ -From git@z Thu Jan 1 00:00:00 1970 -Subject: [PATCH RFC v2 25/29] selftests: ntsync: Add some tests for wakeup - signaling with events. -From: Elizabeth Figura -Date: Tue, 30 Jan 2024 20:13:52 -0600 -Message-Id: <20240131021356.10322-26-zfigura@codeweavers.com> -MIME-Version: 1.0 -Content-Type: text/plain; charset="utf-8" -Content-Transfer-Encoding: 7bit - Expand the contended wait tests, which previously only covered events and semaphores, to cover events as well. @@ -17,10 +7,10 @@ Signed-off-by: Elizabeth Figura 1 file changed, 147 insertions(+), 4 deletions(-) diff --git a/tools/testing/selftests/drivers/ntsync/ntsync.c b/tools/testing/selftests/drivers/ntsync/ntsync.c -index f1fb28949367..598333df3e6d 100644 +index 12ccb4ec28e4..5d17eff6a370 100644 --- a/tools/testing/selftests/drivers/ntsync/ntsync.c +++ b/tools/testing/selftests/drivers/ntsync/ntsync.c -@@ -587,6 +587,7 @@ TEST(test_wait_any) +@@ -622,6 +622,7 @@ TEST(test_wait_any) TEST(test_wait_all) { @@ -28,7 +18,7 @@ index f1fb28949367..598333df3e6d 100644 struct ntsync_mutex_args mutex_args = {0}; struct ntsync_sem_args sem_args = {0}; __u32 owner, index, count; -@@ -609,6 +610,11 @@ TEST(test_wait_all) +@@ -644,6 +645,11 @@ TEST(test_wait_all) EXPECT_EQ(0, ret); EXPECT_NE(0xdeadbeef, mutex_args.mutex); @@ -40,7 +30,7 @@ index f1fb28949367..598333df3e6d 100644 objs[0] = sem_args.sem; objs[1] = mutex_args.mutex; -@@ -657,6 +663,14 @@ TEST(test_wait_all) +@@ -692,6 +698,14 @@ TEST(test_wait_all) check_sem_state(sem_args.sem, 1, 3); check_mutex_state(mutex_args.mutex, 1, 123); @@ -55,7 +45,7 @@ index f1fb28949367..598333df3e6d 100644 /* test waiting on the same object twice */ objs[0] = objs[1] = sem_args.sem; ret = wait_all(fd, 2, objs, 123, &index); -@@ -665,6 +679,7 @@ TEST(test_wait_all) +@@ -700,6 +714,7 @@ TEST(test_wait_all) close(sem_args.sem); close(mutex_args.mutex); @@ -63,7 +53,7 @@ index f1fb28949367..598333df3e6d 100644 close(fd); } -@@ -713,12 +728,13 @@ static int wait_for_thread(pthread_t thread, unsigned int ms) +@@ -746,12 +761,13 @@ static int wait_for_thread(pthread_t thread, unsigned int ms) TEST(wake_any) { @@ -78,7 +68,7 @@ index f1fb28949367..598333df3e6d 100644 pthread_t thread; fd = open("/dev/ntsync", O_CLOEXEC | O_RDONLY); -@@ -800,10 +816,101 @@ TEST(wake_any) +@@ -833,10 +849,101 @@ TEST(wake_any) EXPECT_EQ(0, thread_args.ret); EXPECT_EQ(1, wait_args.index); @@ -180,7 +170,7 @@ index f1fb28949367..598333df3e6d 100644 ret = pthread_create(&thread, NULL, wait_thread, &thread_args); EXPECT_EQ(0, ret); -@@ -823,12 +930,14 @@ TEST(wake_any) +@@ -856,12 +963,14 @@ TEST(wake_any) TEST(wake_all) { @@ -197,7 +187,7 @@ index f1fb28949367..598333df3e6d 100644 pthread_t thread; fd = open("/dev/ntsync", O_CLOEXEC | O_RDONLY); -@@ -848,12 +957,24 @@ TEST(wake_all) +@@ -881,12 +990,24 @@ TEST(wake_all) EXPECT_EQ(0, ret); EXPECT_NE(0xdeadbeef, mutex_args.mutex); @@ -223,7 +213,7 @@ index f1fb28949367..598333df3e6d 100644 wait_args.owner = 456; thread_args.fd = fd; thread_args.args = &wait_args; -@@ -887,12 +1008,32 @@ TEST(wake_all) +@@ -920,12 +1041,32 @@ TEST(wake_all) check_mutex_state(mutex_args.mutex, 0, 0); @@ -256,7 +246,7 @@ index f1fb28949367..598333df3e6d 100644 ret = wait_for_thread(thread, 100); EXPECT_EQ(0, ret); -@@ -910,6 +1051,8 @@ TEST(wake_all) +@@ -943,6 +1084,8 @@ TEST(wake_all) close(sem_args.sem); close(mutex_args.mutex); @@ -267,4 +257,3 @@ index f1fb28949367..598333df3e6d 100644 EXPECT_EQ(0, ret); -- 2.43.0 - diff --git a/linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0025.patch b/linux-clang/linux6.7-zen/patches/0026-[PATCH_v2_27_31]_selftests:_ntsync:_Add_tests_for_alertable_waits..patch similarity index 93% rename from linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0025.patch rename to linux-clang/linux6.7-zen/patches/0026-[PATCH_v2_27_31]_selftests:_ntsync:_Add_tests_for_alertable_waits..patch index 5ed6d50..b8f967b 100644 --- a/linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0025.patch +++ b/linux-clang/linux6.7-zen/patches/0026-[PATCH_v2_27_31]_selftests:_ntsync:_Add_tests_for_alertable_waits..patch @@ -1,13 +1,3 @@ -From git@z Thu Jan 1 00:00:00 1970 -Subject: [PATCH RFC v2 26/29] selftests: ntsync: Add tests for alertable - waits. -From: Elizabeth Figura -Date: Tue, 30 Jan 2024 20:13:53 -0600 -Message-Id: <20240131021356.10322-27-zfigura@codeweavers.com> -MIME-Version: 1.0 -Content-Type: text/plain; charset="utf-8" -Content-Transfer-Encoding: 7bit - Test the "alert" functionality of NTSYNC_IOC_WAIT_ALL and NTSYNC_IOC_WAIT_ANY, when a wait is woken with an alert and when it is woken by an object. @@ -17,7 +7,7 @@ Signed-off-by: Elizabeth Figura 1 file changed, 176 insertions(+), 3 deletions(-) diff --git a/tools/testing/selftests/drivers/ntsync/ntsync.c b/tools/testing/selftests/drivers/ntsync/ntsync.c -index 598333df3e6d..6c00a55909aa 100644 +index 5d17eff6a370..5465a16d38b3 100644 --- a/tools/testing/selftests/drivers/ntsync/ntsync.c +++ b/tools/testing/selftests/drivers/ntsync/ntsync.c @@ -95,7 +95,7 @@ static int read_event_state(int event, __u32 *signaled, __u32 *manual) @@ -66,7 +56,7 @@ index 598333df3e6d..6c00a55909aa 100644 } TEST(semaphore_state) -@@ -1062,4 +1077,162 @@ TEST(wake_all) +@@ -1095,4 +1110,162 @@ TEST(wake_all) close(fd); } @@ -231,4 +221,3 @@ index 598333df3e6d..6c00a55909aa 100644 TEST_HARNESS_MAIN -- 2.43.0 - diff --git a/linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0026.patch "b/linux-clang/linux6.7-zen/patches/0027-[PATCH_v2_28_31]_selftests:_ntsync:_Add_some_tests_for_wakeup\n_signaling_via_alerts..patch" similarity index 83% rename from linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0026.patch rename to "linux-clang/linux6.7-zen/patches/0027-[PATCH_v2_28_31]_selftests:_ntsync:_Add_some_tests_for_wakeup\n_signaling_via_alerts..patch" index 12e8859..5e0734b 100644 --- a/linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0026.patch +++ "b/linux-clang/linux6.7-zen/patches/0027-[PATCH_v2_28_31]_selftests:_ntsync:_Add_some_tests_for_wakeup\n_signaling_via_alerts..patch" @@ -1,13 +1,3 @@ -From git@z Thu Jan 1 00:00:00 1970 -Subject: [PATCH RFC v2 27/29] selftests: ntsync: Add some tests for wakeup - signaling via alerts. -From: Elizabeth Figura -Date: Tue, 30 Jan 2024 20:13:54 -0600 -Message-Id: <20240131021356.10322-28-zfigura@codeweavers.com> -MIME-Version: 1.0 -Content-Type: text/plain; charset="utf-8" -Content-Transfer-Encoding: 7bit - Expand the alert tests to cover alerting a thread mid-wait, to test that the relevant scheduling logic works correctly. @@ -17,10 +7,10 @@ Signed-off-by: Elizabeth Figura 1 file changed, 62 insertions(+) diff --git a/tools/testing/selftests/drivers/ntsync/ntsync.c b/tools/testing/selftests/drivers/ntsync/ntsync.c -index 6c00a55909aa..09153d0686ac 100644 +index 5465a16d38b3..968874d7e325 100644 --- a/tools/testing/selftests/drivers/ntsync/ntsync.c +++ b/tools/testing/selftests/drivers/ntsync/ntsync.c -@@ -1080,9 +1080,12 @@ TEST(wake_all) +@@ -1113,9 +1113,12 @@ TEST(wake_all) TEST(alert_any) { struct ntsync_event_args event_args = {0}; @@ -33,7 +23,7 @@ index 6c00a55909aa..09153d0686ac 100644 fd = open("/dev/ntsync", O_CLOEXEC | O_RDONLY); ASSERT_LE(0, fd); -@@ -1130,6 +1133,34 @@ TEST(alert_any) +@@ -1163,6 +1166,34 @@ TEST(alert_any) EXPECT_EQ(0, ret); EXPECT_EQ(2, index); @@ -68,7 +58,7 @@ index 6c00a55909aa..09153d0686ac 100644 close(event_args.event); /* test with an auto-reset event */ -@@ -1166,9 +1197,12 @@ TEST(alert_any) +@@ -1199,9 +1230,12 @@ TEST(alert_any) TEST(alert_all) { struct ntsync_event_args event_args = {0}; @@ -81,7 +71,7 @@ index 6c00a55909aa..09153d0686ac 100644 fd = open("/dev/ntsync", O_CLOEXEC | O_RDONLY); ASSERT_LE(0, fd); -@@ -1202,6 +1236,34 @@ TEST(alert_all) +@@ -1235,6 +1269,34 @@ TEST(alert_all) EXPECT_EQ(0, ret); EXPECT_EQ(2, index); @@ -118,4 +108,3 @@ index 6c00a55909aa..09153d0686ac 100644 /* test with an auto-reset event */ -- 2.43.0 - diff --git "a/linux-clang/linux6.7-zen/patches/0028-[PATCH_v2_29_31]_selftests:_ntsync:_Add_a_stress_test_for\n_contended_waits..patch" "b/linux-clang/linux6.7-zen/patches/0028-[PATCH_v2_29_31]_selftests:_ntsync:_Add_a_stress_test_for\n_contended_waits..patch" new file mode 100644 index 0000000..5fcc536 --- /dev/null +++ "b/linux-clang/linux6.7-zen/patches/0028-[PATCH_v2_29_31]_selftests:_ntsync:_Add_a_stress_test_for\n_contended_waits..patch" @@ -0,0 +1,97 @@ +Test a more realistic usage pattern, and one with heavy contention, in order to +actually exercise ntsync's internal synchronization. + +This test has several threads in a tight loop acquiring a mutex, modifying some +shared data, and then releasing the mutex. At the end we check if the data is +consistent. + +Signed-off-by: Elizabeth Figura +--- + .../testing/selftests/drivers/ntsync/ntsync.c | 74 +++++++++++++++++++ + 1 file changed, 74 insertions(+) + +diff --git a/tools/testing/selftests/drivers/ntsync/ntsync.c b/tools/testing/selftests/drivers/ntsync/ntsync.c +index 968874d7e325..5fa2c9a0768c 100644 +--- a/tools/testing/selftests/drivers/ntsync/ntsync.c ++++ b/tools/testing/selftests/drivers/ntsync/ntsync.c +@@ -1330,4 +1330,78 @@ TEST(alert_all) + close(fd); + } + ++#define STRESS_LOOPS 10000 ++#define STRESS_THREADS 4 ++ ++static unsigned int stress_counter; ++static int stress_device, stress_start_event, stress_mutex; ++ ++static void *stress_thread(void *arg) ++{ ++ struct ntsync_wait_args wait_args = {0}; ++ __u32 index, count, i; ++ int ret; ++ ++ wait_args.timeout = UINT64_MAX; ++ wait_args.count = 1; ++ wait_args.objs = (uintptr_t)&stress_start_event; ++ wait_args.owner = gettid(); ++ wait_args.index = 0xdeadbeef; ++ ++ ioctl(stress_device, NTSYNC_IOC_WAIT_ANY, &wait_args); ++ ++ wait_args.objs = (uintptr_t)&stress_mutex; ++ ++ for (i = 0; i < STRESS_LOOPS; ++i) { ++ ioctl(stress_device, NTSYNC_IOC_WAIT_ANY, &wait_args); ++ ++ ++stress_counter; ++ ++ unlock_mutex(stress_mutex, wait_args.owner, &count); ++ } ++ ++ return NULL; ++} ++ ++TEST(stress_wait) ++{ ++ struct ntsync_event_args event_args; ++ struct ntsync_mutex_args mutex_args; ++ pthread_t threads[STRESS_THREADS]; ++ __u32 signaled, i; ++ int ret; ++ ++ stress_device = open("/dev/ntsync", O_CLOEXEC | O_RDONLY); ++ ASSERT_LE(0, stress_device); ++ ++ mutex_args.owner = 0; ++ mutex_args.count = 0; ++ ret = ioctl(stress_device, NTSYNC_IOC_CREATE_MUTEX, &mutex_args); ++ EXPECT_EQ(0, ret); ++ stress_mutex = mutex_args.mutex; ++ ++ event_args.manual = 1; ++ event_args.signaled = 0; ++ ret = ioctl(stress_device, NTSYNC_IOC_CREATE_EVENT, &event_args); ++ EXPECT_EQ(0, ret); ++ stress_start_event = event_args.event; ++ ++ for (i = 0; i < STRESS_THREADS; ++i) ++ pthread_create(&threads[i], NULL, stress_thread, NULL); ++ ++ ret = ioctl(stress_start_event, NTSYNC_IOC_EVENT_SET, &signaled); ++ EXPECT_EQ(0, ret); ++ ++ for (i = 0; i < STRESS_THREADS; ++i) { ++ ret = pthread_join(threads[i], NULL); ++ EXPECT_EQ(0, ret); ++ } ++ ++ EXPECT_EQ(STRESS_LOOPS * STRESS_THREADS, stress_counter); ++ ++ close(stress_start_event); ++ close(stress_mutex); ++ close(stress_device); ++} ++ + TEST_HARNESS_MAIN +-- +2.43.0 diff --git a/linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0027.patch b/linux-clang/linux6.7-zen/patches/0029-[PATCH_v2_30_31]_maintainers:_Add_an_entry_for_ntsync..patch similarity index 61% rename from linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0027.patch rename to linux-clang/linux6.7-zen/patches/0029-[PATCH_v2_30_31]_maintainers:_Add_an_entry_for_ntsync..patch index fee7a66..f7e2bd6 100644 --- a/linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0027.patch +++ b/linux-clang/linux6.7-zen/patches/0029-[PATCH_v2_30_31]_maintainers:_Add_an_entry_for_ntsync..patch @@ -1,12 +1,3 @@ -From git@z Thu Jan 1 00:00:00 1970 -Subject: [PATCH RFC v2 28/29] maintainers: Add an entry for ntsync. -From: Elizabeth Figura -Date: Tue, 30 Jan 2024 20:13:55 -0600 -Message-Id: <20240131021356.10322-29-zfigura@codeweavers.com> -MIME-Version: 1.0 -Content-Type: text/plain; charset="utf-8" -Content-Transfer-Encoding: 7bit - Add myself as maintainer, supported by CodeWeavers. Signed-off-by: Elizabeth Figura @@ -15,10 +6,10 @@ Signed-off-by: Elizabeth Figura 1 file changed, 9 insertions(+) diff --git a/MAINTAINERS b/MAINTAINERS -index 8d1052fa6a69..7924127d351b 100644 +index 9ed4d3868539..d83dd35d9f73 100644 --- a/MAINTAINERS +++ b/MAINTAINERS -@@ -15585,6 +15585,15 @@ T: git https://github.com/Paragon-Software-Group/linux-ntfs3.git +@@ -15595,6 +15595,15 @@ T: git https://github.com/Paragon-Software-Group/linux-ntfs3.git F: Documentation/filesystems/ntfs3.rst F: fs/ntfs3/ @@ -36,4 +27,3 @@ index 8d1052fa6a69..7924127d351b 100644 L: linux-m68k@lists.linux-m68k.org -- 2.43.0 - diff --git a/linux-clang/linux6.7-zen/template b/linux-clang/linux6.7-zen/template index 6fa642e..33dc2d6 100644 --- a/linux-clang/linux6.7-zen/template +++ b/linux-clang/linux6.7-zen/template @@ -1,5 +1,5 @@ pkgname=linux6.7-zen -version=6.7.5 +version=6.7.6 revision=1 zen=1 wrksrc="linux-${version}-zen${zen}" @@ -8,7 +8,7 @@ maintainer="Wizzard " license="GPL-2.0-only" homepage="http://www.zen-kernel.org/" distfiles="https://github.com/zen-kernel/zen-kernel/archive/refs/tags/v${version}-zen${zen}.tar.gz" -checksum="6f4bb1b180880034269d539a47f3c120874f4923604976127f4ba9d8db0546dd" +checksum="77cdaa148e8ff5660b7c0287f6f70a0c36e0355521456c6fc754948fbe101ceb" python_version=3 patch_args="-Np1" diff --git a/linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0000.patch "b/linux-gcc/linux6.7-zen/patches/0000-[PATCH_v2_1_31]_ntsync:_Introduce_the_ntsync_driver_and_character\n_device..patch" similarity index 78% rename from linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0000.patch rename to "linux-gcc/linux6.7-zen/patches/0000-[PATCH_v2_1_31]_ntsync:_Introduce_the_ntsync_driver_and_character\n_device..patch" index 3459d34..5193a8c 100644 --- a/linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0000.patch +++ "b/linux-gcc/linux6.7-zen/patches/0000-[PATCH_v2_1_31]_ntsync:_Introduce_the_ntsync_driver_and_character\n_device..patch" @@ -1,13 +1,3 @@ -From git@z Thu Jan 1 00:00:00 1970 -Subject: [PATCH RFC v2 1/29] ntsync: Introduce the ntsync driver and - character device. -From: Elizabeth Figura -Date: Tue, 30 Jan 2024 20:13:28 -0600 -Message-Id: <20240131021356.10322-2-zfigura@codeweavers.com> -MIME-Version: 1.0 -Content-Type: text/plain; charset="utf-8" -Content-Transfer-Encoding: 7bit - ntsync uses a misc device as the simplest and least intrusive uAPI interface. Each file description on the device represents an isolated NT instance, intended @@ -15,19 +5,19 @@ to correspond to a single NT virtual machine. Signed-off-by: Elizabeth Figura --- - drivers/misc/Kconfig | 9 ++++++++ + drivers/misc/Kconfig | 11 +++++++++ drivers/misc/Makefile | 1 + drivers/misc/ntsync.c | 52 +++++++++++++++++++++++++++++++++++++++++++ - 3 files changed, 62 insertions(+) + 3 files changed, 64 insertions(+) create mode 100644 drivers/misc/ntsync.c diff --git a/drivers/misc/Kconfig b/drivers/misc/Kconfig -index 4fb291f0bf7c..bdd8a71bd853 100644 +index 4fb291f0bf7c..801ed229ed7d 100644 --- a/drivers/misc/Kconfig +++ b/drivers/misc/Kconfig -@@ -504,6 +504,15 @@ config OPEN_DICE - measured boot flow. Userspace can use CDIs for remote attestation - and sealing. +@@ -506,6 +506,17 @@ config OPEN_DICE + + If unsure, say N. +config NTSYNC + tristate "NT synchronization primitive emulation" @@ -38,9 +28,11 @@ index 4fb291f0bf7c..bdd8a71bd853 100644 + To compile this driver as a module, choose M here: the + module will be called ntsync. + - If unsure, say N. - ++ If unsure, say N. ++ config VCPU_STALL_DETECTOR + tristate "Guest vCPU stall detector" + depends on OF && HAS_IOMEM diff --git a/drivers/misc/Makefile b/drivers/misc/Makefile index ea6ea5bbbc9c..153a3f4837e8 100644 --- a/drivers/misc/Makefile @@ -55,7 +47,7 @@ index ea6ea5bbbc9c..153a3f4837e8 100644 obj-$(CONFIG_GP_PCI1XXXX) += mchp_pci1xxxx/ diff --git a/drivers/misc/ntsync.c b/drivers/misc/ntsync.c new file mode 100644 -index 000000000000..e4969ef90722 +index 000000000000..bd76e653d83e --- /dev/null +++ b/drivers/misc/ntsync.c @@ -0,0 +1,52 @@ @@ -63,7 +55,7 @@ index 000000000000..e4969ef90722 +/* + * ntsync.c - Kernel driver for NT synchronization primitives + * -+ * Copyright (C) 2024 Elizabeth Figura ++ * Copyright (C) 2024 Elizabeth Figura + */ + +#include @@ -108,9 +100,8 @@ index 000000000000..e4969ef90722 + +module_misc_device(ntsync_misc); + -+MODULE_AUTHOR("Elizabeth Figura"); ++MODULE_AUTHOR("Elizabeth Figura "); +MODULE_DESCRIPTION("Kernel driver for NT synchronization primitives"); +MODULE_LICENSE("GPL"); -- 2.43.0 - diff --git a/linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0001.patch b/linux-gcc/linux6.7-zen/patches/0001-[PATCH_v2_2_31]_ntsync:_Introduce_NTSYNC_IOC_CREATE_SEM..patch similarity index 86% rename from linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0001.patch rename to linux-gcc/linux6.7-zen/patches/0001-[PATCH_v2_2_31]_ntsync:_Introduce_NTSYNC_IOC_CREATE_SEM..patch index b8fe81c..6d223a2 100644 --- a/linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0001.patch +++ b/linux-gcc/linux6.7-zen/patches/0001-[PATCH_v2_2_31]_ntsync:_Introduce_NTSYNC_IOC_CREATE_SEM..patch @@ -1,12 +1,3 @@ -From git@z Thu Jan 1 00:00:00 1970 -Subject: [PATCH RFC v2 2/29] ntsync: Introduce NTSYNC_IOC_CREATE_SEM. -From: Elizabeth Figura -Date: Tue, 30 Jan 2024 20:13:29 -0600 -Message-Id: <20240131021356.10322-3-zfigura@codeweavers.com> -MIME-Version: 1.0 -Content-Type: text/plain; charset="utf-8" -Content-Transfer-Encoding: 7bit - This corresponds to the NT syscall NtCreateSemaphore(). Semaphores are one of three types of object to be implemented in this driver, @@ -20,12 +11,15 @@ creation time. There are no restrictions on the maximum and initial value. Each object is exposed as an file, to which any number of fds may be opened. When all fds are closed, the object is deleted. +Objects hold a pointer to the ntsync_device that created them. The device's +reference count is driven by struct file. + Signed-off-by: Elizabeth Figura --- .../userspace-api/ioctl/ioctl-number.rst | 2 + - drivers/misc/ntsync.c | 120 ++++++++++++++++++ + drivers/misc/ntsync.c | 131 ++++++++++++++++++ include/uapi/linux/ntsync.h | 21 +++ - 3 files changed, 143 insertions(+) + 3 files changed, 154 insertions(+) create mode 100644 include/uapi/linux/ntsync.h diff --git a/Documentation/userspace-api/ioctl/ioctl-number.rst b/Documentation/userspace-api/ioctl/ioctl-number.rst @@ -42,11 +36,11 @@ index 457e16f06e04..2f5c6994f042 100644 'P' all linux/soundcard.h conflict! 'P' 60-6F sound/sscape_ioctl.h conflict! diff --git a/drivers/misc/ntsync.c b/drivers/misc/ntsync.c -index e4969ef90722..3ad86d98b82d 100644 +index bd76e653d83e..20158ec148bc 100644 --- a/drivers/misc/ntsync.c +++ b/drivers/misc/ntsync.c -@@ -5,26 +5,146 @@ - * Copyright (C) 2024 Elizabeth Figura +@@ -5,26 +5,157 @@ + * Copyright (C) 2024 Elizabeth Figura */ +#include @@ -63,6 +57,17 @@ index e4969ef90722..3ad86d98b82d 100644 + NTSYNC_TYPE_SEM, +}; + ++/* ++ * Individual synchronization primitives are represented by ++ * struct ntsync_obj, and each primitive is backed by a file. ++ * ++ * The whole namespace is represented by a struct ntsync_device also ++ * backed by a file. ++ * ++ * Both rely on struct file for reference counting. Individual ++ * ntsync_obj objects take a reference to the device when created. ++ */ ++ +struct ntsync_obj { + enum ntsync_type type; + @@ -194,7 +199,7 @@ index e4969ef90722..3ad86d98b82d 100644 } diff --git a/include/uapi/linux/ntsync.h b/include/uapi/linux/ntsync.h new file mode 100644 -index 000000000000..f38818e7759d +index 000000000000..6a4867a6c97b --- /dev/null +++ b/include/uapi/linux/ntsync.h @@ -0,0 +1,21 @@ @@ -202,7 +207,7 @@ index 000000000000..f38818e7759d +/* + * Kernel support for NT synchronization primitive emulation + * -+ * Copyright (C) 2021-2022 Elizabeth Figura ++ * Copyright (C) 2021-2022 Elizabeth Figura + */ + +#ifndef __LINUX_NTSYNC_H @@ -221,4 +226,3 @@ index 000000000000..f38818e7759d +#endif -- 2.43.0 - diff --git a/linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0002.patch b/linux-gcc/linux6.7-zen/patches/0002-[PATCH_v2_3_31]_ntsync:_Introduce_NTSYNC_IOC_SEM_POST..patch similarity index 75% rename from linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0002.patch rename to linux-gcc/linux6.7-zen/patches/0002-[PATCH_v2_3_31]_ntsync:_Introduce_NTSYNC_IOC_SEM_POST..patch index 66b3ca2..78fdffc 100644 --- a/linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0002.patch +++ b/linux-gcc/linux6.7-zen/patches/0002-[PATCH_v2_3_31]_ntsync:_Introduce_NTSYNC_IOC_SEM_POST..patch @@ -1,12 +1,3 @@ -From git@z Thu Jan 1 00:00:00 1970 -Subject: [PATCH RFC v2 3/29] ntsync: Introduce NTSYNC_IOC_SEM_POST. -From: Elizabeth Figura -Date: Tue, 30 Jan 2024 20:13:30 -0600 -Message-Id: <20240131021356.10322-4-zfigura@codeweavers.com> -MIME-Version: 1.0 -Content-Type: text/plain; charset="utf-8" -Content-Transfer-Encoding: 7bit - This corresponds to the NT syscall NtReleaseSemaphore(). This increases the semaphore's internal counter by the given value, and returns @@ -15,16 +6,26 @@ function instead fails and returns -EOVERFLOW. Signed-off-by: Elizabeth Figura --- - drivers/misc/ntsync.c | 68 +++++++++++++++++++++++++++++++++++-- + drivers/misc/ntsync.c | 72 +++++++++++++++++++++++++++++++++++-- include/uapi/linux/ntsync.h | 2 ++ - 2 files changed, 67 insertions(+), 3 deletions(-) + 2 files changed, 71 insertions(+), 3 deletions(-) diff --git a/drivers/misc/ntsync.c b/drivers/misc/ntsync.c -index 3ad86d98b82d..1af38969f9a2 100644 +index 20158ec148bc..3c2f743c58b0 100644 --- a/drivers/misc/ntsync.c +++ b/drivers/misc/ntsync.c -@@ -20,23 +20,68 @@ enum ntsync_type { - }; +@@ -10,7 +10,9 @@ + #include + #include + #include ++#include + #include ++#include + #include + + #define NTSYNC_NAME "ntsync" +@@ -31,23 +33,70 @@ enum ntsync_type { + */ struct ntsync_obj { + spinlock_t lock; @@ -56,13 +57,15 @@ index 3ad86d98b82d..1af38969f9a2 100644 + */ +static int post_sem_state(struct ntsync_obj *sem, __u32 count) +{ ++ __u32 sum; ++ + lockdep_assert_held(&sem->lock); + -+ if (sem->u.sem.count + count < sem->u.sem.count || -+ sem->u.sem.count + count > sem->u.sem.max) ++ if (check_add_overflow(sem->u.sem.count, count, &sum) || ++ sum > sem->u.sem.max) + return -EOVERFLOW; + -+ sem->u.sem.count += count; ++ sem->u.sem.count = sum; + return 0; +} + @@ -95,7 +98,7 @@ index 3ad86d98b82d..1af38969f9a2 100644 static int ntsync_obj_release(struct inode *inode, struct file *file) { struct ntsync_obj *obj = file->private_data; -@@ -47,9 +92,25 @@ static int ntsync_obj_release(struct inode *inode, struct file *file) +@@ -58,9 +107,25 @@ static int ntsync_obj_release(struct inode *inode, struct file *file) return 0; } @@ -121,7 +124,7 @@ index 3ad86d98b82d..1af38969f9a2 100644 .llseek = no_llseek, }; -@@ -64,6 +125,7 @@ static struct ntsync_obj *ntsync_alloc_obj(struct ntsync_device *dev, +@@ -75,6 +140,7 @@ static struct ntsync_obj *ntsync_alloc_obj(struct ntsync_device *dev, obj->type = type; obj->dev = dev; get_file(dev->file); @@ -130,7 +133,7 @@ index 3ad86d98b82d..1af38969f9a2 100644 return obj; } diff --git a/include/uapi/linux/ntsync.h b/include/uapi/linux/ntsync.h -index f38818e7759d..878ec4f0f2e8 100644 +index 6a4867a6c97b..dcfa38fdc93c 100644 --- a/include/uapi/linux/ntsync.h +++ b/include/uapi/linux/ntsync.h @@ -18,4 +18,6 @@ struct ntsync_sem_args { @@ -142,4 +145,3 @@ index f38818e7759d..878ec4f0f2e8 100644 #endif -- 2.43.0 - diff --git a/linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0003.patch b/linux-gcc/linux6.7-zen/patches/0003-[PATCH_v2_4_31]_ntsync:_Introduce_NTSYNC_IOC_WAIT_ANY..patch similarity index 80% rename from linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0003.patch rename to linux-gcc/linux6.7-zen/patches/0003-[PATCH_v2_4_31]_ntsync:_Introduce_NTSYNC_IOC_WAIT_ANY..patch index e610f90..6d57657 100644 --- a/linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0003.patch +++ b/linux-gcc/linux6.7-zen/patches/0003-[PATCH_v2_4_31]_ntsync:_Introduce_NTSYNC_IOC_WAIT_ANY..patch @@ -1,12 +1,3 @@ -From git@z Thu Jan 1 00:00:00 1970 -Subject: [PATCH RFC v2 4/29] ntsync: Introduce NTSYNC_IOC_WAIT_ANY. -From: Elizabeth Figura -Date: Tue, 30 Jan 2024 20:13:31 -0600 -Message-Id: <20240131021356.10322-5-zfigura@codeweavers.com> -MIME-Version: 1.0 -Content-Type: text/plain; charset="utf-8" -Content-Transfer-Encoding: 7bit - This corresponds to part of the functionality of the NT syscall NtWaitForMultipleObjects(). Specifically, it implements the behaviour where the third argument (wait_any) is TRUE, and it does not handle alertable waits. @@ -29,17 +20,46 @@ This ioctl validates that all objects belong to the relevant device. This is not necessary for any technical reason related to NTSYNC_IOC_WAIT_ANY, but will be necessary for NTSYNC_IOC_WAIT_ALL introduced in the following patch. +Wait ioctls need to take a temporary reference to each object being waited on. +As with the device, the reference count of struct file is used for ntsync_obj. + Signed-off-by: Elizabeth Figura --- - drivers/misc/ntsync.c | 232 ++++++++++++++++++++++++++++++++++++ + drivers/misc/ntsync.c | 239 ++++++++++++++++++++++++++++++++++++ include/uapi/linux/ntsync.h | 12 ++ - 2 files changed, 244 insertions(+) + 2 files changed, 251 insertions(+) diff --git a/drivers/misc/ntsync.c b/drivers/misc/ntsync.c -index 1af38969f9a2..0a0ab755d57f 100644 +index 3c2f743c58b0..ad93ca0f8b84 100644 --- a/drivers/misc/ntsync.c +++ b/drivers/misc/ntsync.c -@@ -34,12 +34,55 @@ struct ntsync_obj { +@@ -6,11 +6,16 @@ + */ + + #include ++#include + #include + #include ++#include ++#include + #include + #include + #include ++#include ++#include + #include + #include + #include +@@ -30,6 +35,8 @@ enum ntsync_type { + * + * Both rely on struct file for reference counting. Individual + * ntsync_obj objects take a reference to the device when created. ++ * Wait operations take a reference to each object being waited on for ++ * the duration of the wait. + */ + + struct ntsync_obj { +@@ -47,12 +54,55 @@ struct ntsync_obj { __u32 max; } sem; } u; @@ -95,7 +115,7 @@ index 1af38969f9a2..0a0ab755d57f 100644 /* * Actually change the semaphore state, returning -EOVERFLOW if it is made * invalid. -@@ -73,6 +116,8 @@ static int ntsync_sem_post(struct ntsync_obj *sem, void __user *argp) +@@ -88,6 +138,8 @@ static int ntsync_sem_post(struct ntsync_obj *sem, void __user *argp) prev_count = sem->u.sem.count; ret = post_sem_state(sem, args); @@ -104,7 +124,7 @@ index 1af38969f9a2..0a0ab755d57f 100644 spin_unlock(&sem->lock); -@@ -126,6 +171,7 @@ static struct ntsync_obj *ntsync_alloc_obj(struct ntsync_device *dev, +@@ -141,6 +193,7 @@ static struct ntsync_obj *ntsync_alloc_obj(struct ntsync_device *dev, obj->dev = dev; get_file(dev->file); spin_lock_init(&obj->lock); @@ -112,7 +132,7 @@ index 1af38969f9a2..0a0ab755d57f 100644 return obj; } -@@ -176,6 +222,190 @@ static int ntsync_create_sem(struct ntsync_device *dev, void __user *argp) +@@ -191,6 +244,190 @@ static int ntsync_create_sem(struct ntsync_device *dev, void __user *argp) return put_user(fd, &user_args->sem); } @@ -121,15 +141,13 @@ index 1af38969f9a2..0a0ab755d57f 100644 + struct file *file = fget(fd); + struct ntsync_obj *obj; + -+ if (file->f_op != &ntsync_obj_fops) -+ { ++ if (file->f_op != &ntsync_obj_fops) { + fput(file); + return NULL; + } + + obj = file->private_data; -+ if (obj->dev != dev) -+ { ++ if (obj->dev != dev) { + fput(file); + return NULL; + } @@ -142,10 +160,14 @@ index 1af38969f9a2..0a0ab755d57f 100644 + fput(obj->file); +} + -+static int ntsync_schedule(const struct ntsync_q *q, ktime_t *timeout) ++static int ntsync_schedule(const struct ntsync_q *q, const struct ntsync_wait_args *args) +{ ++ ktime_t timeout = ns_to_ktime(args->timeout); ++ ktime_t *timeout_ptr; + int ret = 0; + ++ timeout_ptr = (args->timeout == U64_MAX ? NULL : &timeout); ++ + do { + if (signal_pending(current)) { + ret = -ERESTARTSYS; @@ -157,7 +179,7 @@ index 1af38969f9a2..0a0ab755d57f 100644 + ret = 0; + break; + } -+ ret = schedule_hrtimeout(timeout, HRTIMER_MODE_ABS); ++ ret = schedule_hrtimeout(timeout_ptr, HRTIMER_MODE_ABS); + } while (ret < 0); + __set_current_state(TASK_RUNNING); + @@ -229,7 +251,6 @@ index 1af38969f9a2..0a0ab755d57f 100644 +{ + struct ntsync_wait_args args; + struct ntsync_q *q; -+ ktime_t timeout; + int signaled; + __u32 i; + int ret; @@ -267,8 +288,7 @@ index 1af38969f9a2..0a0ab755d57f 100644 + + /* sleep */ + -+ timeout = ns_to_ktime(args.timeout); -+ ret = ntsync_schedule(q, args.timeout == U64_MAX ? NULL : &timeout); ++ ret = ntsync_schedule(q, &args); + + /* and finally, unqueue */ + @@ -303,7 +323,7 @@ index 1af38969f9a2..0a0ab755d57f 100644 static int ntsync_char_open(struct inode *inode, struct file *file) { struct ntsync_device *dev; -@@ -207,6 +437,8 @@ static long ntsync_char_ioctl(struct file *file, unsigned int cmd, +@@ -222,6 +459,8 @@ static long ntsync_char_ioctl(struct file *file, unsigned int cmd, switch (cmd) { case NTSYNC_IOC_CREATE_SEM: return ntsync_create_sem(dev, argp); @@ -313,7 +333,7 @@ index 1af38969f9a2..0a0ab755d57f 100644 return -ENOIOCTLCMD; } diff --git a/include/uapi/linux/ntsync.h b/include/uapi/linux/ntsync.h -index 878ec4f0f2e8..9cd1dd05d971 100644 +index dcfa38fdc93c..56b643fab611 100644 --- a/include/uapi/linux/ntsync.h +++ b/include/uapi/linux/ntsync.h @@ -16,7 +16,19 @@ struct ntsync_sem_args { @@ -338,4 +358,3 @@ index 878ec4f0f2e8..9cd1dd05d971 100644 -- 2.43.0 - diff --git a/linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0004.patch b/linux-gcc/linux6.7-zen/patches/0004-[PATCH_v2_5_31]_ntsync:_Introduce_NTSYNC_IOC_WAIT_ALL..patch similarity index 86% rename from linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0004.patch rename to linux-gcc/linux6.7-zen/patches/0004-[PATCH_v2_5_31]_ntsync:_Introduce_NTSYNC_IOC_WAIT_ALL..patch index 34eac82..7d2c890 100644 --- a/linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0004.patch +++ b/linux-gcc/linux6.7-zen/patches/0004-[PATCH_v2_5_31]_ntsync:_Introduce_NTSYNC_IOC_WAIT_ALL..patch @@ -1,27 +1,18 @@ -From git@z Thu Jan 1 00:00:00 1970 -Subject: [PATCH RFC v2 5/29] ntsync: Introduce NTSYNC_IOC_WAIT_ALL. -From: Elizabeth Figura -Date: Tue, 30 Jan 2024 20:13:32 -0600 -Message-Id: <20240131021356.10322-6-zfigura@codeweavers.com> -MIME-Version: 1.0 -Content-Type: text/plain; charset="utf-8" -Content-Transfer-Encoding: 7bit - This is similar to NTSYNC_IOC_WAIT_ANY, but waits until all of the objects are simultaneously signaled, and then acquires all of them as a single atomic operation. Signed-off-by: Elizabeth Figura --- - drivers/misc/ntsync.c | 244 ++++++++++++++++++++++++++++++++++-- + drivers/misc/ntsync.c | 242 ++++++++++++++++++++++++++++++++++-- include/uapi/linux/ntsync.h | 1 + - 2 files changed, 237 insertions(+), 8 deletions(-) + 2 files changed, 235 insertions(+), 8 deletions(-) diff --git a/drivers/misc/ntsync.c b/drivers/misc/ntsync.c -index 0a0ab755d57f..b86d62094344 100644 +index ad93ca0f8b84..d5759e9a3a8e 100644 --- a/drivers/misc/ntsync.c +++ b/drivers/misc/ntsync.c -@@ -35,7 +35,34 @@ struct ntsync_obj { +@@ -55,7 +55,34 @@ struct ntsync_obj { } sem; } u; @@ -56,7 +47,7 @@ index 0a0ab755d57f..b86d62094344 100644 }; struct ntsync_q_entry { -@@ -56,14 +83,99 @@ struct ntsync_q { +@@ -76,14 +103,99 @@ struct ntsync_q { */ atomic_t signaled; @@ -156,7 +147,7 @@ index 0a0ab755d57f..b86d62094344 100644 static void try_wake_any_sem(struct ntsync_obj *sem) { struct ntsync_q_entry *entry; -@@ -101,6 +213,7 @@ static int post_sem_state(struct ntsync_obj *sem, __u32 count) +@@ -123,6 +235,7 @@ static int post_sem_state(struct ntsync_obj *sem, __u32 count) static int ntsync_sem_post(struct ntsync_obj *sem, void __user *argp) { @@ -164,7 +155,7 @@ index 0a0ab755d57f..b86d62094344 100644 __u32 __user *user_args = argp; __u32 prev_count; __u32 args; -@@ -112,14 +225,29 @@ static int ntsync_sem_post(struct ntsync_obj *sem, void __user *argp) +@@ -134,14 +247,29 @@ static int ntsync_sem_post(struct ntsync_obj *sem, void __user *argp) if (sem->type != NTSYNC_TYPE_SEM) return -EINVAL; @@ -200,7 +191,7 @@ index 0a0ab755d57f..b86d62094344 100644 if (!ret && put_user(prev_count, user_args)) ret = -EFAULT; -@@ -172,6 +300,8 @@ static struct ntsync_obj *ntsync_alloc_obj(struct ntsync_device *dev, +@@ -194,6 +322,8 @@ static struct ntsync_obj *ntsync_alloc_obj(struct ntsync_device *dev, get_file(dev->file); spin_lock_init(&obj->lock); INIT_LIST_HEAD(&obj->any_waiters); @@ -209,7 +200,7 @@ index 0a0ab755d57f..b86d62094344 100644 return obj; } -@@ -274,7 +404,7 @@ static int ntsync_schedule(const struct ntsync_q *q, ktime_t *timeout) +@@ -298,7 +428,7 @@ static int ntsync_schedule(const struct ntsync_q *q, const struct ntsync_wait_ar * Allocate and initialize the ntsync_q structure, but do not queue us yet. */ static int setup_wait(struct ntsync_device *dev, @@ -218,7 +209,7 @@ index 0a0ab755d57f..b86d62094344 100644 struct ntsync_q **ret_q) { const __u32 count = args->count; -@@ -298,6 +428,7 @@ static int setup_wait(struct ntsync_device *dev, +@@ -322,6 +452,7 @@ static int setup_wait(struct ntsync_device *dev, q->task = current; q->owner = args->owner; atomic_set(&q->signaled, -1); @@ -226,7 +217,7 @@ index 0a0ab755d57f..b86d62094344 100644 q->count = count; for (i = 0; i < count; i++) { -@@ -307,6 +438,16 @@ static int setup_wait(struct ntsync_device *dev, +@@ -331,6 +462,16 @@ static int setup_wait(struct ntsync_device *dev, if (!obj) goto err; @@ -243,7 +234,7 @@ index 0a0ab755d57f..b86d62094344 100644 entry->obj = obj; entry->q = q; entry->index = i; -@@ -343,7 +484,7 @@ static int ntsync_wait_any(struct ntsync_device *dev, void __user *argp) +@@ -366,7 +507,7 @@ static int ntsync_wait_any(struct ntsync_device *dev, void __user *argp) if (copy_from_user(&args, argp, sizeof(args))) return -EFAULT; @@ -252,7 +243,7 @@ index 0a0ab755d57f..b86d62094344 100644 if (ret < 0) return ret; -@@ -406,6 +547,89 @@ static int ntsync_wait_any(struct ntsync_device *dev, void __user *argp) +@@ -428,6 +569,87 @@ static int ntsync_wait_any(struct ntsync_device *dev, void __user *argp) return ret; } @@ -260,7 +251,6 @@ index 0a0ab755d57f..b86d62094344 100644 +{ + struct ntsync_wait_args args; + struct ntsync_q *q; -+ ktime_t timeout; + int signaled; + __u32 i; + int ret; @@ -298,8 +288,7 @@ index 0a0ab755d57f..b86d62094344 100644 + + /* sleep */ + -+ timeout = ns_to_ktime(args.timeout); -+ ret = ntsync_schedule(q, args.timeout == U64_MAX ? NULL : &timeout); ++ ret = ntsync_schedule(q, &args); + + /* and finally, unqueue */ + @@ -342,7 +331,7 @@ index 0a0ab755d57f..b86d62094344 100644 static int ntsync_char_open(struct inode *inode, struct file *file) { struct ntsync_device *dev; -@@ -414,6 +638,8 @@ static int ntsync_char_open(struct inode *inode, struct file *file) +@@ -436,6 +658,8 @@ static int ntsync_char_open(struct inode *inode, struct file *file) if (!dev) return -ENOMEM; @@ -351,7 +340,7 @@ index 0a0ab755d57f..b86d62094344 100644 file->private_data = dev; dev->file = file; return nonseekable_open(inode, file); -@@ -437,6 +663,8 @@ static long ntsync_char_ioctl(struct file *file, unsigned int cmd, +@@ -459,6 +683,8 @@ static long ntsync_char_ioctl(struct file *file, unsigned int cmd, switch (cmd) { case NTSYNC_IOC_CREATE_SEM: return ntsync_create_sem(dev, argp); @@ -361,7 +350,7 @@ index 0a0ab755d57f..b86d62094344 100644 return ntsync_wait_any(dev, argp); default: diff --git a/include/uapi/linux/ntsync.h b/include/uapi/linux/ntsync.h -index 9cd1dd05d971..524404f6aceb 100644 +index 56b643fab611..19c37e27a4f8 100644 --- a/include/uapi/linux/ntsync.h +++ b/include/uapi/linux/ntsync.h @@ -29,6 +29,7 @@ struct ntsync_wait_args { @@ -374,4 +363,3 @@ index 9cd1dd05d971..524404f6aceb 100644 -- 2.43.0 - diff --git a/linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0005.patch b/linux-gcc/linux6.7-zen/patches/0005-[PATCH_v2_6_31]_ntsync:_Introduce_NTSYNC_IOC_CREATE_MUTEX..patch similarity index 82% rename from linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0005.patch rename to linux-gcc/linux6.7-zen/patches/0005-[PATCH_v2_6_31]_ntsync:_Introduce_NTSYNC_IOC_CREATE_MUTEX..patch index 54baae5..cfd07ce 100644 --- a/linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0005.patch +++ b/linux-gcc/linux6.7-zen/patches/0005-[PATCH_v2_6_31]_ntsync:_Introduce_NTSYNC_IOC_CREATE_MUTEX..patch @@ -1,12 +1,3 @@ -From git@z Thu Jan 1 00:00:00 1970 -Subject: [PATCH RFC v2 6/29] ntsync: Introduce NTSYNC_IOC_CREATE_MUTEX. -From: Elizabeth Figura -Date: Tue, 30 Jan 2024 20:13:33 -0600 -Message-Id: <20240131021356.10322-7-zfigura@codeweavers.com> -MIME-Version: 1.0 -Content-Type: text/plain; charset="utf-8" -Content-Transfer-Encoding: 7bit - This corresponds to the NT syscall NtCreateMutant(). An NT mutex is recursive, with a 32-bit recursion counter. When acquired via @@ -26,18 +17,18 @@ Signed-off-by: Elizabeth Figura 2 files changed, 74 insertions(+) diff --git a/drivers/misc/ntsync.c b/drivers/misc/ntsync.c -index b86d62094344..484219a266ae 100644 +index d5759e9a3a8e..6f7086d0440a 100644 --- a/drivers/misc/ntsync.c +++ b/drivers/misc/ntsync.c -@@ -17,6 +17,7 @@ +@@ -24,6 +24,7 @@ enum ntsync_type { NTSYNC_TYPE_SEM, + NTSYNC_TYPE_MUTEX, }; - struct ntsync_obj { -@@ -33,6 +34,10 @@ struct ntsync_obj { + /* +@@ -53,6 +54,10 @@ struct ntsync_obj { __u32 count; __u32 max; } sem; @@ -48,7 +39,7 @@ index b86d62094344..484219a266ae 100644 } u; /* -@@ -112,6 +117,10 @@ static bool is_signaled(struct ntsync_obj *obj, __u32 owner) +@@ -132,6 +137,10 @@ static bool is_signaled(struct ntsync_obj *obj, __u32 owner) switch (obj->type) { case NTSYNC_TYPE_SEM: return !!obj->u.sem.count; @@ -59,7 +50,7 @@ index b86d62094344..484219a266ae 100644 } WARN(1, "bad object type %#x\n", obj->type); -@@ -154,6 +163,10 @@ static void try_wake_all(struct ntsync_device *dev, struct ntsync_q *q, +@@ -174,6 +183,10 @@ static void try_wake_all(struct ntsync_device *dev, struct ntsync_q *q, case NTSYNC_TYPE_SEM: obj->u.sem.count--; break; @@ -70,7 +61,7 @@ index b86d62094344..484219a266ae 100644 } } wake_up_process(q->task); -@@ -195,6 +208,28 @@ static void try_wake_any_sem(struct ntsync_obj *sem) +@@ -215,6 +228,28 @@ static void try_wake_any_sem(struct ntsync_obj *sem) } } @@ -99,7 +90,7 @@ index b86d62094344..484219a266ae 100644 /* * Actually change the semaphore state, returning -EOVERFLOW if it is made * invalid. -@@ -352,6 +387,33 @@ static int ntsync_create_sem(struct ntsync_device *dev, void __user *argp) +@@ -374,6 +409,33 @@ static int ntsync_create_sem(struct ntsync_device *dev, void __user *argp) return put_user(fd, &user_args->sem); } @@ -133,7 +124,7 @@ index b86d62094344..484219a266ae 100644 static struct ntsync_obj *get_obj(struct ntsync_device *dev, int fd) { struct file *file = fget(fd); -@@ -469,6 +531,9 @@ static void try_wake_any_obj(struct ntsync_obj *obj) +@@ -493,6 +555,9 @@ static void try_wake_any_obj(struct ntsync_obj *obj) case NTSYNC_TYPE_SEM: try_wake_any_sem(obj); break; @@ -143,7 +134,7 @@ index b86d62094344..484219a266ae 100644 } } -@@ -661,6 +726,8 @@ static long ntsync_char_ioctl(struct file *file, unsigned int cmd, +@@ -681,6 +746,8 @@ static long ntsync_char_ioctl(struct file *file, unsigned int cmd, void __user *argp = (void __user *)parm; switch (cmd) { @@ -153,7 +144,7 @@ index b86d62094344..484219a266ae 100644 return ntsync_create_sem(dev, argp); case NTSYNC_IOC_WAIT_ALL: diff --git a/include/uapi/linux/ntsync.h b/include/uapi/linux/ntsync.h -index 524404f6aceb..d68f24fd75a2 100644 +index 19c37e27a4f8..8ac9d419c360 100644 --- a/include/uapi/linux/ntsync.h +++ b/include/uapi/linux/ntsync.h @@ -16,6 +16,12 @@ struct ntsync_sem_args { @@ -179,4 +170,3 @@ index 524404f6aceb..d68f24fd75a2 100644 -- 2.43.0 - diff --git a/linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0006.patch b/linux-gcc/linux6.7-zen/patches/0006-[PATCH_v2_7_31]_ntsync:_Introduce_NTSYNC_IOC_MUTEX_UNLOCK..patch similarity index 83% rename from linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0006.patch rename to linux-gcc/linux6.7-zen/patches/0006-[PATCH_v2_7_31]_ntsync:_Introduce_NTSYNC_IOC_MUTEX_UNLOCK..patch index f88e505..97e5ace 100644 --- a/linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0006.patch +++ b/linux-gcc/linux6.7-zen/patches/0006-[PATCH_v2_7_31]_ntsync:_Introduce_NTSYNC_IOC_MUTEX_UNLOCK..patch @@ -1,12 +1,3 @@ -From git@z Thu Jan 1 00:00:00 1970 -Subject: [PATCH RFC v2 7/29] ntsync: Introduce NTSYNC_IOC_MUTEX_UNLOCK. -From: Elizabeth Figura -Date: Tue, 30 Jan 2024 20:13:34 -0600 -Message-Id: <20240131021356.10322-8-zfigura@codeweavers.com> -MIME-Version: 1.0 -Content-Type: text/plain; charset="utf-8" -Content-Transfer-Encoding: 7bit - This corresponds to the NT syscall NtReleaseMutant(). This syscall decrements the mutex's recursion count by one, and returns the @@ -20,10 +11,10 @@ Signed-off-by: Elizabeth Figura 2 files changed, 65 insertions(+) diff --git a/drivers/misc/ntsync.c b/drivers/misc/ntsync.c -index 484219a266ae..1770ec4008af 100644 +index 6f7086d0440a..222ebead8eba 100644 --- a/drivers/misc/ntsync.c +++ b/drivers/misc/ntsync.c -@@ -290,6 +290,68 @@ static int ntsync_sem_post(struct ntsync_obj *sem, void __user *argp) +@@ -312,6 +312,68 @@ static int ntsync_sem_post(struct ntsync_obj *sem, void __user *argp) return ret; } @@ -92,7 +83,7 @@ index 484219a266ae..1770ec4008af 100644 static int ntsync_obj_release(struct inode *inode, struct file *file) { struct ntsync_obj *obj = file->private_data; -@@ -309,6 +371,8 @@ static long ntsync_obj_ioctl(struct file *file, unsigned int cmd, +@@ -331,6 +393,8 @@ static long ntsync_obj_ioctl(struct file *file, unsigned int cmd, switch (cmd) { case NTSYNC_IOC_SEM_POST: return ntsync_sem_post(obj, argp); @@ -102,7 +93,7 @@ index 484219a266ae..1770ec4008af 100644 return -ENOIOCTLCMD; } diff --git a/include/uapi/linux/ntsync.h b/include/uapi/linux/ntsync.h -index d68f24fd75a2..a3f5f4f13798 100644 +index 8ac9d419c360..265503d441b1 100644 --- a/include/uapi/linux/ntsync.h +++ b/include/uapi/linux/ntsync.h @@ -39,5 +39,6 @@ struct ntsync_wait_args { @@ -114,4 +105,3 @@ index d68f24fd75a2..a3f5f4f13798 100644 #endif -- 2.43.0 - diff --git a/linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0007.patch b/linux-gcc/linux6.7-zen/patches/0007-[PATCH_v2_8_31]_ntsync:_Introduce_NTSYNC_IOC_MUTEX_KILL..patch similarity index 81% rename from linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0007.patch rename to linux-gcc/linux6.7-zen/patches/0007-[PATCH_v2_8_31]_ntsync:_Introduce_NTSYNC_IOC_MUTEX_KILL..patch index c49854a..ec55ac0 100644 --- a/linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0007.patch +++ b/linux-gcc/linux6.7-zen/patches/0007-[PATCH_v2_8_31]_ntsync:_Introduce_NTSYNC_IOC_MUTEX_KILL..patch @@ -1,12 +1,3 @@ -From git@z Thu Jan 1 00:00:00 1970 -Subject: [PATCH RFC v2 8/29] ntsync: Introduce NTSYNC_IOC_MUTEX_KILL. -From: Elizabeth Figura -Date: Tue, 30 Jan 2024 20:13:35 -0600 -Message-Id: <20240131021356.10322-9-zfigura@codeweavers.com> -MIME-Version: 1.0 -Content-Type: text/plain; charset="utf-8" -Content-Transfer-Encoding: 7bit - This does not correspond to any NT syscall. Rather, when a thread dies, it should be called by the NT emulator for each mutex. @@ -23,10 +14,10 @@ Signed-off-by: Elizabeth Figura 2 files changed, 70 insertions(+), 2 deletions(-) diff --git a/drivers/misc/ntsync.c b/drivers/misc/ntsync.c -index 1770ec4008af..aadf01c65ca0 100644 +index 222ebead8eba..a3466be50c45 100644 --- a/drivers/misc/ntsync.c +++ b/drivers/misc/ntsync.c -@@ -37,6 +37,7 @@ struct ntsync_obj { +@@ -57,6 +57,7 @@ struct ntsync_obj { struct { __u32 count; __u32 owner; @@ -34,7 +25,7 @@ index 1770ec4008af..aadf01c65ca0 100644 } mutex; } u; -@@ -89,6 +90,7 @@ struct ntsync_q { +@@ -109,6 +110,7 @@ struct ntsync_q { atomic_t signaled; bool all; @@ -42,7 +33,7 @@ index 1770ec4008af..aadf01c65ca0 100644 __u32 count; struct ntsync_q_entry entries[]; }; -@@ -164,6 +166,9 @@ static void try_wake_all(struct ntsync_device *dev, struct ntsync_q *q, +@@ -184,6 +186,9 @@ static void try_wake_all(struct ntsync_device *dev, struct ntsync_q *q, obj->u.sem.count--; break; case NTSYNC_TYPE_MUTEX: @@ -52,7 +43,7 @@ index 1770ec4008af..aadf01c65ca0 100644 obj->u.mutex.count++; obj->u.mutex.owner = q->owner; break; -@@ -223,6 +228,9 @@ static void try_wake_any_mutex(struct ntsync_obj *mutex) +@@ -243,6 +248,9 @@ static void try_wake_any_mutex(struct ntsync_obj *mutex) continue; if (atomic_cmpxchg(&q->signaled, -1, entry->index) == -1) { @@ -62,7 +53,7 @@ index 1770ec4008af..aadf01c65ca0 100644 mutex->u.mutex.count++; mutex->u.mutex.owner = q->owner; wake_up_process(q->task); -@@ -352,6 +360,62 @@ static int ntsync_mutex_unlock(struct ntsync_obj *mutex, void __user *argp) +@@ -374,6 +382,62 @@ static int ntsync_mutex_unlock(struct ntsync_obj *mutex, void __user *argp) return ret; } @@ -125,7 +116,7 @@ index 1770ec4008af..aadf01c65ca0 100644 static int ntsync_obj_release(struct inode *inode, struct file *file) { struct ntsync_obj *obj = file->private_data; -@@ -373,6 +437,8 @@ static long ntsync_obj_ioctl(struct file *file, unsigned int cmd, +@@ -395,6 +459,8 @@ static long ntsync_obj_ioctl(struct file *file, unsigned int cmd, return ntsync_sem_post(obj, argp); case NTSYNC_IOC_MUTEX_UNLOCK: return ntsync_mutex_unlock(obj, argp); @@ -134,7 +125,7 @@ index 1770ec4008af..aadf01c65ca0 100644 default: return -ENOIOCTLCMD; } -@@ -555,6 +621,7 @@ static int setup_wait(struct ntsync_device *dev, +@@ -579,6 +645,7 @@ static int setup_wait(struct ntsync_device *dev, q->owner = args->owner; atomic_set(&q->signaled, -1); q->all = all; @@ -142,7 +133,7 @@ index 1770ec4008af..aadf01c65ca0 100644 q->count = count; for (i = 0; i < count; i++) { -@@ -664,7 +731,7 @@ static int ntsync_wait_any(struct ntsync_device *dev, void __user *argp) +@@ -686,7 +753,7 @@ static int ntsync_wait_any(struct ntsync_device *dev, void __user *argp) struct ntsync_wait_args __user *user_args = argp; /* even if we caught a signal, we need to communicate success */ @@ -151,7 +142,7 @@ index 1770ec4008af..aadf01c65ca0 100644 if (put_user(signaled, &user_args->index)) ret = -EFAULT; -@@ -747,7 +814,7 @@ static int ntsync_wait_all(struct ntsync_device *dev, void __user *argp) +@@ -767,7 +834,7 @@ static int ntsync_wait_all(struct ntsync_device *dev, void __user *argp) struct ntsync_wait_args __user *user_args = argp; /* even if we caught a signal, we need to communicate success */ @@ -161,7 +152,7 @@ index 1770ec4008af..aadf01c65ca0 100644 if (put_user(signaled, &user_args->index)) ret = -EFAULT; diff --git a/include/uapi/linux/ntsync.h b/include/uapi/linux/ntsync.h -index a3f5f4f13798..3861397c6c2f 100644 +index 265503d441b1..4800941fcbda 100644 --- a/include/uapi/linux/ntsync.h +++ b/include/uapi/linux/ntsync.h @@ -40,5 +40,6 @@ struct ntsync_wait_args { @@ -173,4 +164,3 @@ index a3f5f4f13798..3861397c6c2f 100644 #endif -- 2.43.0 - diff --git a/linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0008.patch b/linux-gcc/linux6.7-zen/patches/0008-[PATCH_v2_9_31]_ntsync:_Introduce_NTSYNC_IOC_CREATE_EVENT..patch similarity index 81% rename from linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0008.patch rename to linux-gcc/linux6.7-zen/patches/0008-[PATCH_v2_9_31]_ntsync:_Introduce_NTSYNC_IOC_CREATE_EVENT..patch index 623bf23..7376a14 100644 --- a/linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0008.patch +++ b/linux-gcc/linux6.7-zen/patches/0008-[PATCH_v2_9_31]_ntsync:_Introduce_NTSYNC_IOC_CREATE_EVENT..patch @@ -1,12 +1,3 @@ -From git@z Thu Jan 1 00:00:00 1970 -Subject: [PATCH RFC v2 9/29] ntsync: Introduce NTSYNC_IOC_CREATE_EVENT. -From: Elizabeth Figura -Date: Tue, 30 Jan 2024 20:13:36 -0600 -Message-Id: <20240131021356.10322-10-zfigura@codeweavers.com> -MIME-Version: 1.0 -Content-Type: text/plain; charset="utf-8" -Content-Transfer-Encoding: 7bit - This correspond to the NT syscall NtCreateEvent(). An NT event holds a single bit of state denoting whether it is signaled or @@ -26,18 +17,18 @@ Signed-off-by: Elizabeth Figura 2 files changed, 67 insertions(+) diff --git a/drivers/misc/ntsync.c b/drivers/misc/ntsync.c -index aadf01c65ca0..c719ddd9f6d7 100644 +index a3466be50c45..17dd47d06e0a 100644 --- a/drivers/misc/ntsync.c +++ b/drivers/misc/ntsync.c -@@ -18,6 +18,7 @@ +@@ -25,6 +25,7 @@ enum ntsync_type { NTSYNC_TYPE_SEM, NTSYNC_TYPE_MUTEX, + NTSYNC_TYPE_EVENT, }; - struct ntsync_obj { -@@ -39,6 +40,10 @@ struct ntsync_obj { + /* +@@ -59,6 +60,10 @@ struct ntsync_obj { __u32 owner; bool ownerdead; } mutex; @@ -48,7 +39,7 @@ index aadf01c65ca0..c719ddd9f6d7 100644 } u; /* -@@ -123,6 +128,8 @@ static bool is_signaled(struct ntsync_obj *obj, __u32 owner) +@@ -143,6 +148,8 @@ static bool is_signaled(struct ntsync_obj *obj, __u32 owner) if (obj->u.mutex.owner && obj->u.mutex.owner != owner) return false; return obj->u.mutex.count < UINT_MAX; @@ -57,7 +48,7 @@ index aadf01c65ca0..c719ddd9f6d7 100644 } WARN(1, "bad object type %#x\n", obj->type); -@@ -172,6 +179,10 @@ static void try_wake_all(struct ntsync_device *dev, struct ntsync_q *q, +@@ -192,6 +199,10 @@ static void try_wake_all(struct ntsync_device *dev, struct ntsync_q *q, obj->u.mutex.count++; obj->u.mutex.owner = q->owner; break; @@ -68,7 +59,7 @@ index aadf01c65ca0..c719ddd9f6d7 100644 } } wake_up_process(q->task); -@@ -238,6 +249,26 @@ static void try_wake_any_mutex(struct ntsync_obj *mutex) +@@ -258,6 +269,26 @@ static void try_wake_any_mutex(struct ntsync_obj *mutex) } } @@ -95,7 +86,7 @@ index aadf01c65ca0..c719ddd9f6d7 100644 /* * Actually change the semaphore state, returning -EOVERFLOW if it is made * invalid. -@@ -544,6 +575,30 @@ static int ntsync_create_mutex(struct ntsync_device *dev, void __user *argp) +@@ -566,6 +597,30 @@ static int ntsync_create_mutex(struct ntsync_device *dev, void __user *argp) return put_user(fd, &user_args->mutex); } @@ -126,7 +117,7 @@ index aadf01c65ca0..c719ddd9f6d7 100644 static struct ntsync_obj *get_obj(struct ntsync_device *dev, int fd) { struct file *file = fget(fd); -@@ -665,6 +720,9 @@ static void try_wake_any_obj(struct ntsync_obj *obj) +@@ -689,6 +744,9 @@ static void try_wake_any_obj(struct ntsync_obj *obj) case NTSYNC_TYPE_MUTEX: try_wake_any_mutex(obj); break; @@ -136,7 +127,7 @@ index aadf01c65ca0..c719ddd9f6d7 100644 } } -@@ -857,6 +915,8 @@ static long ntsync_char_ioctl(struct file *file, unsigned int cmd, +@@ -877,6 +935,8 @@ static long ntsync_char_ioctl(struct file *file, unsigned int cmd, void __user *argp = (void __user *)parm; switch (cmd) { @@ -146,7 +137,7 @@ index aadf01c65ca0..c719ddd9f6d7 100644 return ntsync_create_mutex(dev, argp); case NTSYNC_IOC_CREATE_SEM: diff --git a/include/uapi/linux/ntsync.h b/include/uapi/linux/ntsync.h -index 3861397c6c2f..b8cf503365ef 100644 +index 4800941fcbda..040cbdb39033 100644 --- a/include/uapi/linux/ntsync.h +++ b/include/uapi/linux/ntsync.h @@ -22,6 +22,12 @@ struct ntsync_mutex_args { @@ -172,4 +163,3 @@ index 3861397c6c2f..b8cf503365ef 100644 #define NTSYNC_IOC_MUTEX_UNLOCK _IOWR('N', 0x85, struct ntsync_mutex_args) -- 2.43.0 - diff --git a/linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0009.patch b/linux-gcc/linux6.7-zen/patches/0009-[PATCH_v2_10_31]_ntsync:_Introduce_NTSYNC_IOC_EVENT_SET..patch similarity index 79% rename from linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0009.patch rename to linux-gcc/linux6.7-zen/patches/0009-[PATCH_v2_10_31]_ntsync:_Introduce_NTSYNC_IOC_EVENT_SET..patch index 6411060..58e9472 100644 --- a/linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0009.patch +++ b/linux-gcc/linux6.7-zen/patches/0009-[PATCH_v2_10_31]_ntsync:_Introduce_NTSYNC_IOC_EVENT_SET..patch @@ -1,12 +1,3 @@ -From git@z Thu Jan 1 00:00:00 1970 -Subject: [PATCH RFC v2 10/29] ntsync: Introduce NTSYNC_IOC_EVENT_SET. -From: Elizabeth Figura -Date: Tue, 30 Jan 2024 20:13:37 -0600 -Message-Id: <20240131021356.10322-11-zfigura@codeweavers.com> -MIME-Version: 1.0 -Content-Type: text/plain; charset="utf-8" -Content-Transfer-Encoding: 7bit - This corresponds to the NT syscall NtSetEvent(). This sets the event to the signaled state, and returns its previous state. @@ -18,10 +9,10 @@ Signed-off-by: Elizabeth Figura 2 files changed, 38 insertions(+) diff --git a/drivers/misc/ntsync.c b/drivers/misc/ntsync.c -index c719ddd9f6d7..b2da50989953 100644 +index 17dd47d06e0a..edfbf11cafe0 100644 --- a/drivers/misc/ntsync.c +++ b/drivers/misc/ntsync.c -@@ -447,6 +447,41 @@ static int ntsync_mutex_kill(struct ntsync_obj *mutex, void __user *argp) +@@ -469,6 +469,41 @@ static int ntsync_mutex_kill(struct ntsync_obj *mutex, void __user *argp) return ret; } @@ -63,7 +54,7 @@ index c719ddd9f6d7..b2da50989953 100644 static int ntsync_obj_release(struct inode *inode, struct file *file) { struct ntsync_obj *obj = file->private_data; -@@ -470,6 +505,8 @@ static long ntsync_obj_ioctl(struct file *file, unsigned int cmd, +@@ -492,6 +527,8 @@ static long ntsync_obj_ioctl(struct file *file, unsigned int cmd, return ntsync_mutex_unlock(obj, argp); case NTSYNC_IOC_MUTEX_KILL: return ntsync_mutex_kill(obj, argp); @@ -73,7 +64,7 @@ index c719ddd9f6d7..b2da50989953 100644 return -ENOIOCTLCMD; } diff --git a/include/uapi/linux/ntsync.h b/include/uapi/linux/ntsync.h -index b8cf503365ef..782057552483 100644 +index 040cbdb39033..af518530bffd 100644 --- a/include/uapi/linux/ntsync.h +++ b/include/uapi/linux/ntsync.h @@ -48,5 +48,6 @@ struct ntsync_wait_args { @@ -85,4 +76,3 @@ index b8cf503365ef..782057552483 100644 #endif -- 2.43.0 - diff --git a/linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0010.patch b/linux-gcc/linux6.7-zen/patches/0010-[PATCH_v2_11_31]_ntsync:_Introduce_NTSYNC_IOC_EVENT_RESET..patch similarity index 75% rename from linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0010.patch rename to linux-gcc/linux6.7-zen/patches/0010-[PATCH_v2_11_31]_ntsync:_Introduce_NTSYNC_IOC_EVENT_RESET..patch index 36501b9..88cdda0 100644 --- a/linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0010.patch +++ b/linux-gcc/linux6.7-zen/patches/0010-[PATCH_v2_11_31]_ntsync:_Introduce_NTSYNC_IOC_EVENT_RESET..patch @@ -1,12 +1,3 @@ -From git@z Thu Jan 1 00:00:00 1970 -Subject: [PATCH RFC v2 11/29] ntsync: Introduce NTSYNC_IOC_EVENT_RESET. -From: Elizabeth Figura -Date: Tue, 30 Jan 2024 20:13:38 -0600 -Message-Id: <20240131021356.10322-12-zfigura@codeweavers.com> -MIME-Version: 1.0 -Content-Type: text/plain; charset="utf-8" -Content-Transfer-Encoding: 7bit - This corresponds to the NT syscall NtResetEvent(). This sets the event to the unsignaled state, and returns its previous state. @@ -18,10 +9,10 @@ Signed-off-by: Elizabeth Figura 2 files changed, 23 insertions(+) diff --git a/drivers/misc/ntsync.c b/drivers/misc/ntsync.c -index b2da50989953..009d927739b8 100644 +index edfbf11cafe0..fa4c3fa1e496 100644 --- a/drivers/misc/ntsync.c +++ b/drivers/misc/ntsync.c -@@ -482,6 +482,26 @@ static int ntsync_event_set(struct ntsync_obj *event, void __user *argp) +@@ -504,6 +504,26 @@ static int ntsync_event_set(struct ntsync_obj *event, void __user *argp) return 0; } @@ -48,7 +39,7 @@ index b2da50989953..009d927739b8 100644 static int ntsync_obj_release(struct inode *inode, struct file *file) { struct ntsync_obj *obj = file->private_data; -@@ -507,6 +527,8 @@ static long ntsync_obj_ioctl(struct file *file, unsigned int cmd, +@@ -529,6 +549,8 @@ static long ntsync_obj_ioctl(struct file *file, unsigned int cmd, return ntsync_mutex_kill(obj, argp); case NTSYNC_IOC_EVENT_SET: return ntsync_event_set(obj, argp); @@ -58,7 +49,7 @@ index b2da50989953..009d927739b8 100644 return -ENOIOCTLCMD; } diff --git a/include/uapi/linux/ntsync.h b/include/uapi/linux/ntsync.h -index 782057552483..f2d7507d8438 100644 +index af518530bffd..6963356ee3f7 100644 --- a/include/uapi/linux/ntsync.h +++ b/include/uapi/linux/ntsync.h @@ -49,5 +49,6 @@ struct ntsync_wait_args { @@ -70,4 +61,3 @@ index 782057552483..f2d7507d8438 100644 #endif -- 2.43.0 - diff --git a/linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0011.patch b/linux-gcc/linux6.7-zen/patches/0011-[PATCH_v2_12_31]_ntsync:_Introduce_NTSYNC_IOC_EVENT_PULSE..patch similarity index 76% rename from linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0011.patch rename to linux-gcc/linux6.7-zen/patches/0011-[PATCH_v2_12_31]_ntsync:_Introduce_NTSYNC_IOC_EVENT_PULSE..patch index b02d7da..76aa1a7 100644 --- a/linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0011.patch +++ b/linux-gcc/linux6.7-zen/patches/0011-[PATCH_v2_12_31]_ntsync:_Introduce_NTSYNC_IOC_EVENT_PULSE..patch @@ -1,12 +1,3 @@ -From git@z Thu Jan 1 00:00:00 1970 -Subject: [PATCH RFC v2 12/29] ntsync: Introduce NTSYNC_IOC_EVENT_PULSE. -From: Elizabeth Figura -Date: Tue, 30 Jan 2024 20:13:39 -0600 -Message-Id: <20240131021356.10322-13-zfigura@codeweavers.com> -MIME-Version: 1.0 -Content-Type: text/plain; charset="utf-8" -Content-Transfer-Encoding: 7bit - This corresponds to the NT syscall NtPulseEvent(). This wakes up any waiters as if the event had been set, but does not set the @@ -21,10 +12,10 @@ Signed-off-by: Elizabeth Figura 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/drivers/misc/ntsync.c b/drivers/misc/ntsync.c -index 009d927739b8..240ae858fa96 100644 +index fa4c3fa1e496..b9b4127a6c9f 100644 --- a/drivers/misc/ntsync.c +++ b/drivers/misc/ntsync.c -@@ -447,7 +447,7 @@ static int ntsync_mutex_kill(struct ntsync_obj *mutex, void __user *argp) +@@ -469,7 +469,7 @@ static int ntsync_mutex_kill(struct ntsync_obj *mutex, void __user *argp) return ret; } @@ -33,7 +24,7 @@ index 009d927739b8..240ae858fa96 100644 { struct ntsync_device *dev = event->dev; __u32 prev_state; -@@ -463,6 +463,8 @@ static int ntsync_event_set(struct ntsync_obj *event, void __user *argp) +@@ -485,6 +485,8 @@ static int ntsync_event_set(struct ntsync_obj *event, void __user *argp) event->u.event.signaled = true; try_wake_all_obj(dev, event); try_wake_any_event(event); @@ -42,7 +33,7 @@ index 009d927739b8..240ae858fa96 100644 spin_unlock(&event->lock); spin_unlock(&dev->wait_all_lock); -@@ -472,6 +474,8 @@ static int ntsync_event_set(struct ntsync_obj *event, void __user *argp) +@@ -494,6 +496,8 @@ static int ntsync_event_set(struct ntsync_obj *event, void __user *argp) prev_state = event->u.event.signaled; event->u.event.signaled = true; try_wake_any_event(event); @@ -51,7 +42,7 @@ index 009d927739b8..240ae858fa96 100644 spin_unlock(&event->lock); } -@@ -526,9 +530,11 @@ static long ntsync_obj_ioctl(struct file *file, unsigned int cmd, +@@ -548,9 +552,11 @@ static long ntsync_obj_ioctl(struct file *file, unsigned int cmd, case NTSYNC_IOC_MUTEX_KILL: return ntsync_mutex_kill(obj, argp); case NTSYNC_IOC_EVENT_SET: @@ -65,7 +56,7 @@ index 009d927739b8..240ae858fa96 100644 return -ENOIOCTLCMD; } diff --git a/include/uapi/linux/ntsync.h b/include/uapi/linux/ntsync.h -index f2d7507d8438..598f894f868d 100644 +index 6963356ee3f7..72047f36c45d 100644 --- a/include/uapi/linux/ntsync.h +++ b/include/uapi/linux/ntsync.h @@ -50,5 +50,6 @@ struct ntsync_wait_args { @@ -77,4 +68,3 @@ index f2d7507d8438..598f894f868d 100644 #endif -- 2.43.0 - diff --git a/linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0012.patch b/linux-gcc/linux6.7-zen/patches/0012-[PATCH_v2_13_31]_ntsync:_Introduce_NTSYNC_IOC_SEM_READ..patch similarity index 75% rename from linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0012.patch rename to linux-gcc/linux6.7-zen/patches/0012-[PATCH_v2_13_31]_ntsync:_Introduce_NTSYNC_IOC_SEM_READ..patch index e05d69c..e32f7ef 100644 --- a/linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0012.patch +++ b/linux-gcc/linux6.7-zen/patches/0012-[PATCH_v2_13_31]_ntsync:_Introduce_NTSYNC_IOC_SEM_READ..patch @@ -1,12 +1,3 @@ -From git@z Thu Jan 1 00:00:00 1970 -Subject: [PATCH RFC v2 13/29] ntsync: Introduce NTSYNC_IOC_SEM_READ. -From: Elizabeth Figura -Date: Tue, 30 Jan 2024 20:13:40 -0600 -Message-Id: <20240131021356.10322-14-zfigura@codeweavers.com> -MIME-Version: 1.0 -Content-Type: text/plain; charset="utf-8" -Content-Transfer-Encoding: 7bit - This corresponds to the NT syscall NtQuerySemaphore(). This returns the current count and maximum count of the semaphore. @@ -18,10 +9,10 @@ Signed-off-by: Elizabeth Figura 2 files changed, 22 insertions(+) diff --git a/drivers/misc/ntsync.c b/drivers/misc/ntsync.c -index 240ae858fa96..6dccfbfb2512 100644 +index b9b4127a6c9f..0daaeeeba051 100644 --- a/drivers/misc/ntsync.c +++ b/drivers/misc/ntsync.c -@@ -506,6 +506,25 @@ static int ntsync_event_reset(struct ntsync_obj *event, void __user *argp) +@@ -528,6 +528,25 @@ static int ntsync_event_reset(struct ntsync_obj *event, void __user *argp) return 0; } @@ -47,7 +38,7 @@ index 240ae858fa96..6dccfbfb2512 100644 static int ntsync_obj_release(struct inode *inode, struct file *file) { struct ntsync_obj *obj = file->private_data; -@@ -525,6 +544,8 @@ static long ntsync_obj_ioctl(struct file *file, unsigned int cmd, +@@ -547,6 +566,8 @@ static long ntsync_obj_ioctl(struct file *file, unsigned int cmd, switch (cmd) { case NTSYNC_IOC_SEM_POST: return ntsync_sem_post(obj, argp); @@ -57,7 +48,7 @@ index 240ae858fa96..6dccfbfb2512 100644 return ntsync_mutex_unlock(obj, argp); case NTSYNC_IOC_MUTEX_KILL: diff --git a/include/uapi/linux/ntsync.h b/include/uapi/linux/ntsync.h -index 598f894f868d..6017f621687e 100644 +index 72047f36c45d..42f51dc4e57e 100644 --- a/include/uapi/linux/ntsync.h +++ b/include/uapi/linux/ntsync.h @@ -51,5 +51,6 @@ struct ntsync_wait_args { @@ -69,4 +60,3 @@ index 598f894f868d..6017f621687e 100644 #endif -- 2.43.0 - diff --git a/linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0013.patch b/linux-gcc/linux6.7-zen/patches/0013-[PATCH_v2_14_31]_ntsync:_Introduce_NTSYNC_IOC_MUTEX_READ..patch similarity index 77% rename from linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0013.patch rename to linux-gcc/linux6.7-zen/patches/0013-[PATCH_v2_14_31]_ntsync:_Introduce_NTSYNC_IOC_MUTEX_READ..patch index 4a4b6a6..b97bd13 100644 --- a/linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0013.patch +++ b/linux-gcc/linux6.7-zen/patches/0013-[PATCH_v2_14_31]_ntsync:_Introduce_NTSYNC_IOC_MUTEX_READ..patch @@ -1,12 +1,3 @@ -From git@z Thu Jan 1 00:00:00 1970 -Subject: [PATCH RFC v2 14/29] ntsync: Introduce NTSYNC_IOC_MUTEX_READ. -From: Elizabeth Figura -Date: Tue, 30 Jan 2024 20:13:41 -0600 -Message-Id: <20240131021356.10322-15-zfigura@codeweavers.com> -MIME-Version: 1.0 -Content-Type: text/plain; charset="utf-8" -Content-Transfer-Encoding: 7bit - This corresponds to the NT syscall NtQueryMutant(). This returns the recursion count, owner, and abandoned state of the mutex. @@ -18,10 +9,10 @@ Signed-off-by: Elizabeth Figura 2 files changed, 24 insertions(+) diff --git a/drivers/misc/ntsync.c b/drivers/misc/ntsync.c -index 6dccfbfb2512..7f5f96ec7c69 100644 +index 0daaeeeba051..b07510035c1f 100644 --- a/drivers/misc/ntsync.c +++ b/drivers/misc/ntsync.c -@@ -525,6 +525,27 @@ static int ntsync_sem_read(struct ntsync_obj *sem, void __user *argp) +@@ -547,6 +547,27 @@ static int ntsync_sem_read(struct ntsync_obj *sem, void __user *argp) return 0; } @@ -49,7 +40,7 @@ index 6dccfbfb2512..7f5f96ec7c69 100644 static int ntsync_obj_release(struct inode *inode, struct file *file) { struct ntsync_obj *obj = file->private_data; -@@ -550,6 +571,8 @@ static long ntsync_obj_ioctl(struct file *file, unsigned int cmd, +@@ -572,6 +593,8 @@ static long ntsync_obj_ioctl(struct file *file, unsigned int cmd, return ntsync_mutex_unlock(obj, argp); case NTSYNC_IOC_MUTEX_KILL: return ntsync_mutex_kill(obj, argp); @@ -59,7 +50,7 @@ index 6dccfbfb2512..7f5f96ec7c69 100644 return ntsync_event_set(obj, argp, false); case NTSYNC_IOC_EVENT_RESET: diff --git a/include/uapi/linux/ntsync.h b/include/uapi/linux/ntsync.h -index 6017f621687e..a1d0ef581212 100644 +index 42f51dc4e57e..25f3296cfabf 100644 --- a/include/uapi/linux/ntsync.h +++ b/include/uapi/linux/ntsync.h @@ -52,5 +52,6 @@ struct ntsync_wait_args { @@ -71,4 +62,3 @@ index 6017f621687e..a1d0ef581212 100644 #endif -- 2.43.0 - diff --git a/linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0014.patch b/linux-gcc/linux6.7-zen/patches/0014-[PATCH_v2_15_31]_ntsync:_Introduce_NTSYNC_IOC_EVENT_READ..patch similarity index 76% rename from linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0014.patch rename to linux-gcc/linux6.7-zen/patches/0014-[PATCH_v2_15_31]_ntsync:_Introduce_NTSYNC_IOC_EVENT_READ..patch index ff7ac42..476ae09 100644 --- a/linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0014.patch +++ b/linux-gcc/linux6.7-zen/patches/0014-[PATCH_v2_15_31]_ntsync:_Introduce_NTSYNC_IOC_EVENT_READ..patch @@ -1,12 +1,3 @@ -From git@z Thu Jan 1 00:00:00 1970 -Subject: [PATCH RFC v2 15/29] ntsync: Introduce NTSYNC_IOC_EVENT_READ. -From: Elizabeth Figura -Date: Tue, 30 Jan 2024 20:13:42 -0600 -Message-Id: <20240131021356.10322-16-zfigura@codeweavers.com> -MIME-Version: 1.0 -Content-Type: text/plain; charset="utf-8" -Content-Transfer-Encoding: 7bit - This corresponds to the NT syscall NtQueryEvent(). This returns the signaled state of the event and whether it is manual-reset. @@ -18,10 +9,10 @@ Signed-off-by: Elizabeth Figura 2 files changed, 22 insertions(+) diff --git a/drivers/misc/ntsync.c b/drivers/misc/ntsync.c -index 7f5f96ec7c69..5439c1c9e90f 100644 +index b07510035c1f..981a1545192c 100644 --- a/drivers/misc/ntsync.c +++ b/drivers/misc/ntsync.c -@@ -546,6 +546,25 @@ static int ntsync_mutex_read(struct ntsync_obj *mutex, void __user *argp) +@@ -568,6 +568,25 @@ static int ntsync_mutex_read(struct ntsync_obj *mutex, void __user *argp) return ret; } @@ -47,7 +38,7 @@ index 7f5f96ec7c69..5439c1c9e90f 100644 static int ntsync_obj_release(struct inode *inode, struct file *file) { struct ntsync_obj *obj = file->private_data; -@@ -579,6 +598,8 @@ static long ntsync_obj_ioctl(struct file *file, unsigned int cmd, +@@ -601,6 +620,8 @@ static long ntsync_obj_ioctl(struct file *file, unsigned int cmd, return ntsync_event_reset(obj, argp); case NTSYNC_IOC_EVENT_PULSE: return ntsync_event_set(obj, argp, true); @@ -57,7 +48,7 @@ index 7f5f96ec7c69..5439c1c9e90f 100644 return -ENOIOCTLCMD; } diff --git a/include/uapi/linux/ntsync.h b/include/uapi/linux/ntsync.h -index a1d0ef581212..582d33b0dcac 100644 +index 25f3296cfabf..03c95e5a398f 100644 --- a/include/uapi/linux/ntsync.h +++ b/include/uapi/linux/ntsync.h @@ -53,5 +53,6 @@ struct ntsync_wait_args { @@ -69,4 +60,3 @@ index a1d0ef581212..582d33b0dcac 100644 #endif -- 2.43.0 - diff --git a/linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0015.patch b/linux-gcc/linux6.7-zen/patches/0015-[PATCH_v2_16_31]_ntsync:_Introduce_alertable_waits..patch similarity index 79% rename from linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0015.patch rename to linux-gcc/linux6.7-zen/patches/0015-[PATCH_v2_16_31]_ntsync:_Introduce_alertable_waits..patch index 9a3a0c9..ce53af5 100644 --- a/linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0015.patch +++ b/linux-gcc/linux6.7-zen/patches/0015-[PATCH_v2_16_31]_ntsync:_Introduce_alertable_waits..patch @@ -1,12 +1,3 @@ -From git@z Thu Jan 1 00:00:00 1970 -Subject: [PATCH RFC v2 16/29] ntsync: Introduce alertable waits. -From: Elizabeth Figura -Date: Tue, 30 Jan 2024 20:13:43 -0600 -Message-Id: <20240131021356.10322-17-zfigura@codeweavers.com> -MIME-Version: 1.0 -Content-Type: text/plain; charset="utf-8" -Content-Transfer-Encoding: 7bit - NT waits can optionally be made "alertable". This is a special channel for thread wakeup that is mildly similar to SIGIO. A thread has an internal single bit of "alerted" state, and if a thread is made alerted while an alertable wait, @@ -24,10 +15,10 @@ Signed-off-by: Elizabeth Figura 2 files changed, 60 insertions(+), 10 deletions(-) diff --git a/drivers/misc/ntsync.c b/drivers/misc/ntsync.c -index 5439c1c9e90f..1e619e1ce6a6 100644 +index 981a1545192c..0055b4671808 100644 --- a/drivers/misc/ntsync.c +++ b/drivers/misc/ntsync.c -@@ -784,22 +784,29 @@ static int setup_wait(struct ntsync_device *dev, +@@ -808,22 +808,29 @@ static int setup_wait(struct ntsync_device *dev, const struct ntsync_wait_args *args, bool all, struct ntsync_q **ret_q) { @@ -60,7 +51,7 @@ index 5439c1c9e90f..1e619e1ce6a6 100644 if (!q) return -ENOMEM; q->task = current; -@@ -809,7 +816,7 @@ static int setup_wait(struct ntsync_device *dev, +@@ -833,7 +840,7 @@ static int setup_wait(struct ntsync_device *dev, q->ownerdead = false; q->count = count; @@ -69,18 +60,18 @@ index 5439c1c9e90f..1e619e1ce6a6 100644 struct ntsync_q_entry *entry = &q->entries[i]; struct ntsync_obj *obj = get_obj(dev, fds[i]); -@@ -860,9 +867,9 @@ static int ntsync_wait_any(struct ntsync_device *dev, void __user *argp) +@@ -883,9 +890,9 @@ static void try_wake_any_obj(struct ntsync_obj *obj) + static int ntsync_wait_any(struct ntsync_device *dev, void __user *argp) { struct ntsync_wait_args args; - struct ntsync_q *q; + __u32 i, total_count; - ktime_t timeout; + struct ntsync_q *q; int signaled; - __u32 i; int ret; if (copy_from_user(&args, argp, sizeof(args))) -@@ -872,9 +879,13 @@ static int ntsync_wait_any(struct ntsync_device *dev, void __user *argp) +@@ -895,9 +902,13 @@ static int ntsync_wait_any(struct ntsync_device *dev, void __user *argp) if (ret < 0) return ret; @@ -95,7 +86,7 @@ index 5439c1c9e90f..1e619e1ce6a6 100644 struct ntsync_q_entry *entry = &q->entries[i]; struct ntsync_obj *obj = entry->obj; -@@ -883,9 +894,15 @@ static int ntsync_wait_any(struct ntsync_device *dev, void __user *argp) +@@ -906,9 +917,15 @@ static int ntsync_wait_any(struct ntsync_device *dev, void __user *argp) spin_unlock(&obj->lock); } @@ -113,7 +104,7 @@ index 5439c1c9e90f..1e619e1ce6a6 100644 struct ntsync_obj *obj = q->entries[i].obj; if (atomic_read(&q->signaled) != -1) -@@ -903,7 +920,7 @@ static int ntsync_wait_any(struct ntsync_device *dev, void __user *argp) +@@ -925,7 +942,7 @@ static int ntsync_wait_any(struct ntsync_device *dev, void __user *argp) /* and finally, unqueue */ @@ -122,7 +113,7 @@ index 5439c1c9e90f..1e619e1ce6a6 100644 struct ntsync_q_entry *entry = &q->entries[i]; struct ntsync_obj *obj = entry->obj; -@@ -964,6 +981,14 @@ static int ntsync_wait_all(struct ntsync_device *dev, void __user *argp) +@@ -985,6 +1002,14 @@ static int ntsync_wait_all(struct ntsync_device *dev, void __user *argp) */ list_add_tail(&entry->node, &obj->all_waiters); } @@ -137,7 +128,7 @@ index 5439c1c9e90f..1e619e1ce6a6 100644 /* check if we are already signaled */ -@@ -971,6 +996,21 @@ static int ntsync_wait_all(struct ntsync_device *dev, void __user *argp) +@@ -992,6 +1017,21 @@ static int ntsync_wait_all(struct ntsync_device *dev, void __user *argp) spin_unlock(&dev->wait_all_lock); @@ -158,8 +149,8 @@ index 5439c1c9e90f..1e619e1ce6a6 100644 + /* sleep */ - timeout = ns_to_ktime(args.timeout); -@@ -994,6 +1034,16 @@ static int ntsync_wait_all(struct ntsync_device *dev, void __user *argp) + ret = ntsync_schedule(q, &args); +@@ -1014,6 +1054,16 @@ static int ntsync_wait_all(struct ntsync_device *dev, void __user *argp) put_obj(obj); } @@ -177,7 +168,7 @@ index 5439c1c9e90f..1e619e1ce6a6 100644 spin_unlock(&dev->wait_all_lock); diff --git a/include/uapi/linux/ntsync.h b/include/uapi/linux/ntsync.h -index 582d33b0dcac..7c91af7011e4 100644 +index 03c95e5a398f..555ae81b479a 100644 --- a/include/uapi/linux/ntsync.h +++ b/include/uapi/linux/ntsync.h @@ -34,7 +34,7 @@ struct ntsync_wait_args { @@ -191,4 +182,3 @@ index 582d33b0dcac..7c91af7011e4 100644 #define NTSYNC_MAX_WAIT_COUNT 64 -- 2.43.0 - diff --git a/linux-gcc/linux6.7-zen/patches/0016-[PATCH_v2_17_31]_ntsync:_Allow_waits_to_use_the_REALTIME_clock..patch b/linux-gcc/linux6.7-zen/patches/0016-[PATCH_v2_17_31]_ntsync:_Allow_waits_to_use_the_REALTIME_clock..patch new file mode 100644 index 0000000..6e15e88 --- /dev/null +++ b/linux-gcc/linux6.7-zen/patches/0016-[PATCH_v2_17_31]_ntsync:_Allow_waits_to_use_the_REALTIME_clock..patch @@ -0,0 +1,79 @@ +NtWaitForMultipleObjects() can receive a timeout in two forms, relative or +absolute. Relative timeouts are unaffected by changes to the system time and do +not count down while the system suspends; for absolute timeouts the opposite is +true. + +In order to make the interface and implementation simpler, the ntsync driver +only deals in absolute timeouts. However, we need to be able to emulate both +behaviours apropos suspension and time adjustment, which is achieved by allowing +either the MONOTONIC or REALTIME clock to be used. + +Signed-off-by: Elizabeth Figura +--- + drivers/misc/ntsync.c | 9 ++++++++- + include/uapi/linux/ntsync.h | 4 ++++ + 2 files changed, 12 insertions(+), 1 deletion(-) + +diff --git a/drivers/misc/ntsync.c b/drivers/misc/ntsync.c +index 0055b4671808..f54c81dada3d 100644 +--- a/drivers/misc/ntsync.c ++++ b/drivers/misc/ntsync.c +@@ -778,11 +778,15 @@ static void put_obj(struct ntsync_obj *obj) + static int ntsync_schedule(const struct ntsync_q *q, const struct ntsync_wait_args *args) + { + ktime_t timeout = ns_to_ktime(args->timeout); ++ clockid_t clock = CLOCK_MONOTONIC; + ktime_t *timeout_ptr; + int ret = 0; + + timeout_ptr = (args->timeout == U64_MAX ? NULL : &timeout); + ++ if (args->flags & NTSYNC_WAIT_REALTIME) ++ clock = CLOCK_REALTIME; ++ + do { + if (signal_pending(current)) { + ret = -ERESTARTSYS; +@@ -794,7 +798,7 @@ static int ntsync_schedule(const struct ntsync_q *q, const struct ntsync_wait_ar + ret = 0; + break; + } +- ret = schedule_hrtimeout(timeout_ptr, HRTIMER_MODE_ABS); ++ ret = schedule_hrtimeout_range_clock(timeout_ptr, 0, HRTIMER_MODE_ABS, clock); + } while (ret < 0); + __set_current_state(TASK_RUNNING); + +@@ -817,6 +821,9 @@ static int setup_wait(struct ntsync_device *dev, + if (!args->owner) + return -EINVAL; + ++ if (args->pad || (args->flags & ~NTSYNC_WAIT_REALTIME)) ++ return -EINVAL; ++ + if (args->count > NTSYNC_MAX_WAIT_COUNT) + return -EINVAL; + +diff --git a/include/uapi/linux/ntsync.h b/include/uapi/linux/ntsync.h +index 555ae81b479a..b5e835d8dba8 100644 +--- a/include/uapi/linux/ntsync.h ++++ b/include/uapi/linux/ntsync.h +@@ -28,6 +28,8 @@ struct ntsync_event_args { + __u32 signaled; + }; + ++#define NTSYNC_WAIT_REALTIME 0x1 ++ + struct ntsync_wait_args { + __u64 timeout; + __u64 objs; +@@ -35,6 +37,8 @@ struct ntsync_wait_args { + __u32 owner; + __u32 index; + __u32 alert; ++ __u32 flags; ++ __u32 pad; + }; + + #define NTSYNC_MAX_WAIT_COUNT 64 +-- +2.43.0 diff --git a/linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0016.patch "b/linux-gcc/linux6.7-zen/patches/0017-[PATCH_v2_18_31]_selftests:_ntsync:_Add_some_tests_for_semaphore\n_state..patch" similarity index 90% rename from linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0016.patch rename to "linux-gcc/linux6.7-zen/patches/0017-[PATCH_v2_18_31]_selftests:_ntsync:_Add_some_tests_for_semaphore\n_state..patch" index cc3864a..5d8c716 100644 --- a/linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0016.patch +++ "b/linux-gcc/linux6.7-zen/patches/0017-[PATCH_v2_18_31]_selftests:_ntsync:_Add_some_tests_for_semaphore\n_state..patch" @@ -1,13 +1,3 @@ -From git@z Thu Jan 1 00:00:00 1970 -Subject: [PATCH RFC v2 17/29] selftests: ntsync: Add some tests for - semaphore state. -From: Elizabeth Figura -Date: Tue, 30 Jan 2024 20:13:44 -0600 -Message-Id: <20240131021356.10322-18-zfigura@codeweavers.com> -MIME-Version: 1.0 -Content-Type: text/plain; charset="utf-8" -Content-Transfer-Encoding: 7bit - Wine has tests for its synchronization primitives, but these are more accessible to kernel developers, and also allow us to test some edge cases that Wine does not care about. @@ -20,8 +10,8 @@ Signed-off-by: Elizabeth Figura tools/testing/selftests/Makefile | 1 + .../testing/selftests/drivers/ntsync/Makefile | 8 + tools/testing/selftests/drivers/ntsync/config | 1 + - .../testing/selftests/drivers/ntsync/ntsync.c | 143 ++++++++++++++++++ - 4 files changed, 153 insertions(+) + .../testing/selftests/drivers/ntsync/ntsync.c | 149 ++++++++++++++++++ + 4 files changed, 159 insertions(+) create mode 100644 tools/testing/selftests/drivers/ntsync/Makefile create mode 100644 tools/testing/selftests/drivers/ntsync/config create mode 100644 tools/testing/selftests/drivers/ntsync/ntsync.c @@ -61,15 +51,15 @@ index 000000000000..60539c826d06 +CONFIG_WINESYNC=y diff --git a/tools/testing/selftests/drivers/ntsync/ntsync.c b/tools/testing/selftests/drivers/ntsync/ntsync.c new file mode 100644 -index 000000000000..6ceb48fb42e3 +index 000000000000..1e145c6dfded --- /dev/null +++ b/tools/testing/selftests/drivers/ntsync/ntsync.c -@@ -0,0 +1,143 @@ +@@ -0,0 +1,149 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* + * Various unit tests for the "ntsync" synchronization primitive driver. + * -+ * Copyright (C) 2021-2022 Elizabeth Figura ++ * Copyright (C) 2021-2022 Elizabeth Figura + */ + +#define _GNU_SOURCE @@ -202,6 +192,12 @@ index 000000000000..6ceb48fb42e3 + EXPECT_EQ(0, count); + check_sem_state(sem, 1, 2); + ++ count = ~0u; ++ ret = post_sem(sem, &count); ++ EXPECT_EQ(-1, ret); ++ EXPECT_EQ(EOVERFLOW, errno); ++ check_sem_state(sem, 1, 2); ++ + close(sem); + + close(fd); @@ -210,4 +206,3 @@ index 000000000000..6ceb48fb42e3 +TEST_HARNESS_MAIN -- 2.43.0 - diff --git a/linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0017.patch "b/linux-gcc/linux6.7-zen/patches/0018-[PATCH_v2_19_31]_selftests:_ntsync:_Add_some_tests_for_mutex\n_state..patch" similarity index 90% rename from linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0017.patch rename to "linux-gcc/linux6.7-zen/patches/0018-[PATCH_v2_19_31]_selftests:_ntsync:_Add_some_tests_for_mutex\n_state..patch" index 35a182e..316e7d1 100644 --- a/linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0017.patch +++ "b/linux-gcc/linux6.7-zen/patches/0018-[PATCH_v2_19_31]_selftests:_ntsync:_Add_some_tests_for_mutex\n_state..patch" @@ -1,23 +1,13 @@ -From git@z Thu Jan 1 00:00:00 1970 -Subject: [PATCH RFC v2 18/29] selftests: ntsync: Add some tests for mutex - state. -From: Elizabeth Figura -Date: Tue, 30 Jan 2024 20:13:45 -0600 -Message-Id: <20240131021356.10322-19-zfigura@codeweavers.com> -MIME-Version: 1.0 -Content-Type: text/plain; charset="utf-8" -Content-Transfer-Encoding: 7bit - Test mutex-specific ioctls NTSYNC_IOC_MUTEX_UNLOCK and NTSYNC_IOC_MUTEX_READ, and waiting on mutexes. Signed-off-by: Elizabeth Figura --- - .../testing/selftests/drivers/ntsync/ntsync.c | 181 ++++++++++++++++++ - 1 file changed, 181 insertions(+) + .../testing/selftests/drivers/ntsync/ntsync.c | 196 ++++++++++++++++++ + 1 file changed, 196 insertions(+) diff --git a/tools/testing/selftests/drivers/ntsync/ntsync.c b/tools/testing/selftests/drivers/ntsync/ntsync.c -index 6ceb48fb42e3..80c8bd409d68 100644 +index 1e145c6dfded..7cd0f40594fd 100644 --- a/tools/testing/selftests/drivers/ntsync/ntsync.c +++ b/tools/testing/selftests/drivers/ntsync/ntsync.c @@ -40,6 +40,39 @@ static int post_sem(int sem, __u32 *count) @@ -60,7 +50,7 @@ index 6ceb48fb42e3..80c8bd409d68 100644 static int wait_any(int fd, __u32 count, const int *objs, __u32 owner, __u32 *index) { struct ntsync_wait_args args = {0}; -@@ -140,4 +173,152 @@ TEST(semaphore_state) +@@ -146,4 +179,167 @@ TEST(semaphore_state) close(fd); } @@ -209,10 +199,24 @@ index 6ceb48fb42e3..80c8bd409d68 100644 + + close(mutex); + ++ mutex_args.owner = 123; ++ mutex_args.count = ~0u; ++ mutex_args.mutex = 0xdeadbeef; ++ ret = ioctl(fd, NTSYNC_IOC_CREATE_MUTEX, &mutex_args); ++ EXPECT_EQ(0, ret); ++ EXPECT_NE(0xdeadbeef, mutex_args.mutex); ++ mutex = mutex_args.mutex; ++ check_mutex_state(mutex, ~0u, 123); ++ ++ ret = wait_any(fd, 1, &mutex, 123, &index); ++ EXPECT_EQ(-1, ret); ++ EXPECT_EQ(ETIMEDOUT, errno); ++ ++ close(mutex); ++ + close(fd); +} + TEST_HARNESS_MAIN -- 2.43.0 - diff --git a/linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0018.patch "b/linux-gcc/linux6.7-zen/patches/0019-[PATCH_v2_20_31]_selftests:_ntsync:_Add_some_tests_for\n_NTSYNC_IOC_WAIT_ANY..patch" similarity index 81% rename from linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0018.patch rename to "linux-gcc/linux6.7-zen/patches/0019-[PATCH_v2_20_31]_selftests:_ntsync:_Add_some_tests_for\n_NTSYNC_IOC_WAIT_ANY..patch" index d82f310..6484738 100644 --- a/linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0018.patch +++ "b/linux-gcc/linux6.7-zen/patches/0019-[PATCH_v2_20_31]_selftests:_ntsync:_Add_some_tests_for\n_NTSYNC_IOC_WAIT_ANY..patch" @@ -1,38 +1,27 @@ -From git@z Thu Jan 1 00:00:00 1970 -Subject: [PATCH RFC v2 19/29] selftests: ntsync: Add some tests for - NTSYNC_IOC_WAIT_ANY. -From: Elizabeth Figura -Date: Tue, 30 Jan 2024 20:13:46 -0600 -Message-Id: <20240131021356.10322-20-zfigura@codeweavers.com> -MIME-Version: 1.0 -Content-Type: text/plain; charset="utf-8" -Content-Transfer-Encoding: 7bit - Test basic synchronous functionality of NTSYNC_IOC_WAIT_ANY, when objects are considered signaled or not signaled, and how they are affected by a successful wait. Signed-off-by: Elizabeth Figura --- - .../testing/selftests/drivers/ntsync/ntsync.c | 105 ++++++++++++++++++ - 1 file changed, 105 insertions(+) + .../testing/selftests/drivers/ntsync/ntsync.c | 119 ++++++++++++++++++ + 1 file changed, 119 insertions(+) diff --git a/tools/testing/selftests/drivers/ntsync/ntsync.c b/tools/testing/selftests/drivers/ntsync/ntsync.c -index 80c8bd409d68..13e7c9d7441e 100644 +index 7cd0f40594fd..40ad8cbd3138 100644 --- a/tools/testing/selftests/drivers/ntsync/ntsync.c +++ b/tools/testing/selftests/drivers/ntsync/ntsync.c -@@ -321,4 +321,109 @@ TEST(mutex_state) +@@ -342,4 +342,123 @@ TEST(mutex_state) close(fd); } +TEST(test_wait_any) +{ ++ int objs[NTSYNC_MAX_WAIT_COUNT + 1], fd, ret; + struct ntsync_mutex_args mutex_args = {0}; -+ struct ntsync_wait_args wait_args = {0}; + struct ntsync_sem_args sem_args = {0}; -+ __u32 owner, index, count; ++ __u32 owner, index, count, i; + struct timespec timeout; -+ int objs[2], fd, ret; + + clock_gettime(CLOCK_MONOTONIC, &timeout); + @@ -117,13 +106,28 @@ index 80c8bd409d68..13e7c9d7441e 100644 + objs[0] = objs[1] = sem_args.sem; + ret = wait_any(fd, 2, objs, 456, &index); + EXPECT_EQ(0, ret); -+ EXPECT_EQ(0, wait_args.index); ++ EXPECT_EQ(0, index); + check_sem_state(sem_args.sem, 1, 3); + + ret = wait_any(fd, 0, NULL, 456, &index); + EXPECT_EQ(-1, ret); + EXPECT_EQ(ETIMEDOUT, errno); + ++ for (i = 0; i < NTSYNC_MAX_WAIT_COUNT + 1; ++i) ++ objs[i] = sem_args.sem; ++ ++ ret = wait_any(fd, NTSYNC_MAX_WAIT_COUNT, objs, 123, &index); ++ EXPECT_EQ(0, ret); ++ EXPECT_EQ(0, index); ++ ++ ret = wait_any(fd, NTSYNC_MAX_WAIT_COUNT + 1, objs, 123, &index); ++ EXPECT_EQ(-1, ret); ++ EXPECT_EQ(EINVAL, errno); ++ ++ ret = wait_any(fd, -1, objs, 123, &index); ++ EXPECT_EQ(-1, ret); ++ EXPECT_EQ(EINVAL, errno); ++ + close(sem_args.sem); + close(mutex_args.mutex); + @@ -133,4 +137,3 @@ index 80c8bd409d68..13e7c9d7441e 100644 TEST_HARNESS_MAIN -- 2.43.0 - diff --git a/linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0019.patch "b/linux-gcc/linux6.7-zen/patches/0020-[PATCH_v2_21_31]_selftests:_ntsync:_Add_some_tests_for\n_NTSYNC_IOC_WAIT_ALL..patch" similarity index 89% rename from linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0019.patch rename to "linux-gcc/linux6.7-zen/patches/0020-[PATCH_v2_21_31]_selftests:_ntsync:_Add_some_tests_for\n_NTSYNC_IOC_WAIT_ALL..patch" index ec7fb58..ebe93e0 100644 --- a/linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0019.patch +++ "b/linux-gcc/linux6.7-zen/patches/0020-[PATCH_v2_21_31]_selftests:_ntsync:_Add_some_tests_for\n_NTSYNC_IOC_WAIT_ALL..patch" @@ -1,13 +1,3 @@ -From git@z Thu Jan 1 00:00:00 1970 -Subject: [PATCH RFC v2 20/29] selftests: ntsync: Add some tests for - NTSYNC_IOC_WAIT_ALL. -From: Elizabeth Figura -Date: Tue, 30 Jan 2024 20:13:47 -0600 -Message-Id: <20240131021356.10322-21-zfigura@codeweavers.com> -MIME-Version: 1.0 -Content-Type: text/plain; charset="utf-8" -Content-Transfer-Encoding: 7bit - Test basic synchronous functionality of NTSYNC_IOC_WAIT_ALL, and when objects are considered simultaneously signaled. @@ -17,7 +7,7 @@ Signed-off-by: Elizabeth Figura 1 file changed, 97 insertions(+), 2 deletions(-) diff --git a/tools/testing/selftests/drivers/ntsync/ntsync.c b/tools/testing/selftests/drivers/ntsync/ntsync.c -index 13e7c9d7441e..77f1b7e42d76 100644 +index 40ad8cbd3138..c0f372167557 100644 --- a/tools/testing/selftests/drivers/ntsync/ntsync.c +++ b/tools/testing/selftests/drivers/ntsync/ntsync.c @@ -73,7 +73,8 @@ static int unlock_mutex(int mutex, __u32 owner, __u32 *count) @@ -53,7 +43,7 @@ index 13e7c9d7441e..77f1b7e42d76 100644 TEST(semaphore_state) { struct ntsync_sem_args sem_args; -@@ -426,4 +437,88 @@ TEST(test_wait_any) +@@ -461,4 +472,88 @@ TEST(test_wait_any) close(fd); } @@ -144,4 +134,3 @@ index 13e7c9d7441e..77f1b7e42d76 100644 TEST_HARNESS_MAIN -- 2.43.0 - diff --git a/linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0020.patch "b/linux-gcc/linux6.7-zen/patches/0021-[PATCH_v2_22_31]_selftests:_ntsync:_Add_some_tests_for_wakeup\n_signaling_with_WINESYNC_IOC_WAIT_ANY..patch" similarity index 86% rename from linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0020.patch rename to "linux-gcc/linux6.7-zen/patches/0021-[PATCH_v2_22_31]_selftests:_ntsync:_Add_some_tests_for_wakeup\n_signaling_with_WINESYNC_IOC_WAIT_ANY..patch" index 3d9e0d2..d813930 100644 --- a/linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0020.patch +++ "b/linux-gcc/linux6.7-zen/patches/0021-[PATCH_v2_22_31]_selftests:_ntsync:_Add_some_tests_for_wakeup\n_signaling_with_WINESYNC_IOC_WAIT_ANY..patch" @@ -1,37 +1,25 @@ -From git@z Thu Jan 1 00:00:00 1970 -Subject: [PATCH RFC v2 21/29] selftests: ntsync: Add some tests for wakeup - signaling with WINESYNC_IOC_WAIT_ANY. -From: Elizabeth Figura -Date: Tue, 30 Jan 2024 20:13:48 -0600 -Message-Id: <20240131021356.10322-22-zfigura@codeweavers.com> -MIME-Version: 1.0 -Content-Type: text/plain; charset="utf-8" -Content-Transfer-Encoding: 7bit - Test contended "wait-for-any" waits, to make sure that scheduling and wakeup logic works correctly. Signed-off-by: Elizabeth Figura --- - .../testing/selftests/drivers/ntsync/ntsync.c | 152 ++++++++++++++++++ - 1 file changed, 152 insertions(+) + .../testing/selftests/drivers/ntsync/ntsync.c | 150 ++++++++++++++++++ + 1 file changed, 150 insertions(+) diff --git a/tools/testing/selftests/drivers/ntsync/ntsync.c b/tools/testing/selftests/drivers/ntsync/ntsync.c -index 77f1b7e42d76..96a866ef235f 100644 +index c0f372167557..993f5db23768 100644 --- a/tools/testing/selftests/drivers/ntsync/ntsync.c +++ b/tools/testing/selftests/drivers/ntsync/ntsync.c -@@ -521,4 +521,156 @@ TEST(test_wait_all) +@@ -556,4 +556,154 @@ TEST(test_wait_all) close(fd); } -+struct wake_args -+{ ++struct wake_args { + int fd; + int obj; +}; + -+struct wait_args -+{ ++struct wait_args { + int fd; + unsigned long request; + struct ntsync_wait_args *args; @@ -179,4 +167,3 @@ index 77f1b7e42d76..96a866ef235f 100644 TEST_HARNESS_MAIN -- 2.43.0 - diff --git a/linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0021.patch "b/linux-gcc/linux6.7-zen/patches/0022-[PATCH_v2_23_31]_selftests:_ntsync:_Add_some_tests_for_wakeup\n_signaling_with_WINESYNC_IOC_WAIT_ALL..patch" similarity index 86% rename from linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0021.patch rename to "linux-gcc/linux6.7-zen/patches/0022-[PATCH_v2_23_31]_selftests:_ntsync:_Add_some_tests_for_wakeup\n_signaling_with_WINESYNC_IOC_WAIT_ALL..patch" index 522d6a6..053e2c7 100644 --- a/linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0021.patch +++ "b/linux-gcc/linux6.7-zen/patches/0022-[PATCH_v2_23_31]_selftests:_ntsync:_Add_some_tests_for_wakeup\n_signaling_with_WINESYNC_IOC_WAIT_ALL..patch" @@ -1,13 +1,3 @@ -From git@z Thu Jan 1 00:00:00 1970 -Subject: [PATCH RFC v2 22/29] selftests: ntsync: Add some tests for wakeup - signaling with WINESYNC_IOC_WAIT_ALL. -From: Elizabeth Figura -Date: Tue, 30 Jan 2024 20:13:49 -0600 -Message-Id: <20240131021356.10322-23-zfigura@codeweavers.com> -MIME-Version: 1.0 -Content-Type: text/plain; charset="utf-8" -Content-Transfer-Encoding: 7bit - Test contended "wait-for-all" waits, to make sure that scheduling and wakeup logic works correctly, and that the wait only exits once objects are all simultaneously signaled. @@ -18,10 +8,10 @@ Signed-off-by: Elizabeth Figura 1 file changed, 98 insertions(+) diff --git a/tools/testing/selftests/drivers/ntsync/ntsync.c b/tools/testing/selftests/drivers/ntsync/ntsync.c -index 96a866ef235f..7776fe71b8ef 100644 +index 993f5db23768..b77fb0b2c4b1 100644 --- a/tools/testing/selftests/drivers/ntsync/ntsync.c +++ b/tools/testing/selftests/drivers/ntsync/ntsync.c -@@ -673,4 +673,102 @@ TEST(wake_any) +@@ -706,4 +706,102 @@ TEST(wake_any) close(fd); } @@ -126,4 +116,3 @@ index 96a866ef235f..7776fe71b8ef 100644 TEST_HARNESS_MAIN -- 2.43.0 - diff --git a/linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0022.patch "b/linux-gcc/linux6.7-zen/patches/0023-[PATCH_v2_24_31]_selftests:_ntsync:_Add_some_tests_for\n_manual-reset_event_state..patch" similarity index 86% rename from linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0022.patch rename to "linux-gcc/linux6.7-zen/patches/0023-[PATCH_v2_24_31]_selftests:_ntsync:_Add_some_tests_for\n_manual-reset_event_state..patch" index 1d3a60d..ace9ac0 100644 --- a/linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0022.patch +++ "b/linux-gcc/linux6.7-zen/patches/0023-[PATCH_v2_24_31]_selftests:_ntsync:_Add_some_tests_for\n_manual-reset_event_state..patch" @@ -1,13 +1,3 @@ -From git@z Thu Jan 1 00:00:00 1970 -Subject: [PATCH RFC v2 23/29] selftests: ntsync: Add some tests for - manual-reset event state. -From: Elizabeth Figura -Date: Tue, 30 Jan 2024 20:13:50 -0600 -Message-Id: <20240131021356.10322-24-zfigura@codeweavers.com> -MIME-Version: 1.0 -Content-Type: text/plain; charset="utf-8" -Content-Transfer-Encoding: 7bit - Test event-specific ioctls NTSYNC_IOC_EVENT_SET, NTSYNC_IOC_EVENT_RESET, NTSYNC_IOC_EVENT_PULSE, NTSYNC_IOC_EVENT_READ for manual-reset events, and waiting on manual-reset events. @@ -18,7 +8,7 @@ Signed-off-by: Elizabeth Figura 1 file changed, 89 insertions(+) diff --git a/tools/testing/selftests/drivers/ntsync/ntsync.c b/tools/testing/selftests/drivers/ntsync/ntsync.c -index 7776fe71b8ef..98fc70a9a58b 100644 +index b77fb0b2c4b1..b6481c2b85cc 100644 --- a/tools/testing/selftests/drivers/ntsync/ntsync.c +++ b/tools/testing/selftests/drivers/ntsync/ntsync.c @@ -73,6 +73,27 @@ static int unlock_mutex(int mutex, __u32 owner, __u32 *count) @@ -49,7 +39,7 @@ index 7776fe71b8ef..98fc70a9a58b 100644 static int wait_objs(int fd, unsigned long request, __u32 count, const int *objs, __u32 owner, __u32 *index) { -@@ -332,6 +353,74 @@ TEST(mutex_state) +@@ -353,6 +374,74 @@ TEST(mutex_state) close(fd); } @@ -123,7 +113,6 @@ index 7776fe71b8ef..98fc70a9a58b 100644 + TEST(test_wait_any) { - struct ntsync_mutex_args mutex_args = {0}; + int objs[NTSYNC_MAX_WAIT_COUNT + 1], fd, ret; -- 2.43.0 - diff --git a/linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0023.patch "b/linux-gcc/linux6.7-zen/patches/0024-[PATCH_v2_25_31]_selftests:_ntsync:_Add_some_tests_for_auto-reset\n_event_state..patch" similarity index 80% rename from linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0023.patch rename to "linux-gcc/linux6.7-zen/patches/0024-[PATCH_v2_25_31]_selftests:_ntsync:_Add_some_tests_for_auto-reset\n_event_state..patch" index f34c5e4..3989a16 100644 --- a/linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0023.patch +++ "b/linux-gcc/linux6.7-zen/patches/0024-[PATCH_v2_25_31]_selftests:_ntsync:_Add_some_tests_for_auto-reset\n_event_state..patch" @@ -1,13 +1,3 @@ -From git@z Thu Jan 1 00:00:00 1970 -Subject: [PATCH RFC v2 24/29] selftests: ntsync: Add some tests for - auto-reset event state. -From: Elizabeth Figura -Date: Tue, 30 Jan 2024 20:13:51 -0600 -Message-Id: <20240131021356.10322-25-zfigura@codeweavers.com> -MIME-Version: 1.0 -Content-Type: text/plain; charset="utf-8" -Content-Transfer-Encoding: 7bit - Test event-specific ioctls NTSYNC_IOC_EVENT_SET, NTSYNC_IOC_EVENT_RESET, NTSYNC_IOC_EVENT_PULSE, NTSYNC_IOC_EVENT_READ for auto-reset events, and waiting on auto-reset events. @@ -18,10 +8,10 @@ Signed-off-by: Elizabeth Figura 1 file changed, 59 insertions(+) diff --git a/tools/testing/selftests/drivers/ntsync/ntsync.c b/tools/testing/selftests/drivers/ntsync/ntsync.c -index 98fc70a9a58b..f1fb28949367 100644 +index b6481c2b85cc..12ccb4ec28e4 100644 --- a/tools/testing/selftests/drivers/ntsync/ntsync.c +++ b/tools/testing/selftests/drivers/ntsync/ntsync.c -@@ -421,6 +421,65 @@ TEST(manual_event_state) +@@ -442,6 +442,65 @@ TEST(manual_event_state) close(fd); } @@ -86,7 +76,6 @@ index 98fc70a9a58b..f1fb28949367 100644 + TEST(test_wait_any) { - struct ntsync_mutex_args mutex_args = {0}; + int objs[NTSYNC_MAX_WAIT_COUNT + 1], fd, ret; -- 2.43.0 - diff --git a/linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0024.patch "b/linux-gcc/linux6.7-zen/patches/0025-[PATCH_v2_26_31]_selftests:_ntsync:_Add_some_tests_for_wakeup\n_signaling_with_events..patch" similarity index 89% rename from linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0024.patch rename to "linux-gcc/linux6.7-zen/patches/0025-[PATCH_v2_26_31]_selftests:_ntsync:_Add_some_tests_for_wakeup\n_signaling_with_events..patch" index 39fadaa..832a88f 100644 --- a/linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0024.patch +++ "b/linux-gcc/linux6.7-zen/patches/0025-[PATCH_v2_26_31]_selftests:_ntsync:_Add_some_tests_for_wakeup\n_signaling_with_events..patch" @@ -1,13 +1,3 @@ -From git@z Thu Jan 1 00:00:00 1970 -Subject: [PATCH RFC v2 25/29] selftests: ntsync: Add some tests for wakeup - signaling with events. -From: Elizabeth Figura -Date: Tue, 30 Jan 2024 20:13:52 -0600 -Message-Id: <20240131021356.10322-26-zfigura@codeweavers.com> -MIME-Version: 1.0 -Content-Type: text/plain; charset="utf-8" -Content-Transfer-Encoding: 7bit - Expand the contended wait tests, which previously only covered events and semaphores, to cover events as well. @@ -17,10 +7,10 @@ Signed-off-by: Elizabeth Figura 1 file changed, 147 insertions(+), 4 deletions(-) diff --git a/tools/testing/selftests/drivers/ntsync/ntsync.c b/tools/testing/selftests/drivers/ntsync/ntsync.c -index f1fb28949367..598333df3e6d 100644 +index 12ccb4ec28e4..5d17eff6a370 100644 --- a/tools/testing/selftests/drivers/ntsync/ntsync.c +++ b/tools/testing/selftests/drivers/ntsync/ntsync.c -@@ -587,6 +587,7 @@ TEST(test_wait_any) +@@ -622,6 +622,7 @@ TEST(test_wait_any) TEST(test_wait_all) { @@ -28,7 +18,7 @@ index f1fb28949367..598333df3e6d 100644 struct ntsync_mutex_args mutex_args = {0}; struct ntsync_sem_args sem_args = {0}; __u32 owner, index, count; -@@ -609,6 +610,11 @@ TEST(test_wait_all) +@@ -644,6 +645,11 @@ TEST(test_wait_all) EXPECT_EQ(0, ret); EXPECT_NE(0xdeadbeef, mutex_args.mutex); @@ -40,7 +30,7 @@ index f1fb28949367..598333df3e6d 100644 objs[0] = sem_args.sem; objs[1] = mutex_args.mutex; -@@ -657,6 +663,14 @@ TEST(test_wait_all) +@@ -692,6 +698,14 @@ TEST(test_wait_all) check_sem_state(sem_args.sem, 1, 3); check_mutex_state(mutex_args.mutex, 1, 123); @@ -55,7 +45,7 @@ index f1fb28949367..598333df3e6d 100644 /* test waiting on the same object twice */ objs[0] = objs[1] = sem_args.sem; ret = wait_all(fd, 2, objs, 123, &index); -@@ -665,6 +679,7 @@ TEST(test_wait_all) +@@ -700,6 +714,7 @@ TEST(test_wait_all) close(sem_args.sem); close(mutex_args.mutex); @@ -63,7 +53,7 @@ index f1fb28949367..598333df3e6d 100644 close(fd); } -@@ -713,12 +728,13 @@ static int wait_for_thread(pthread_t thread, unsigned int ms) +@@ -746,12 +761,13 @@ static int wait_for_thread(pthread_t thread, unsigned int ms) TEST(wake_any) { @@ -78,7 +68,7 @@ index f1fb28949367..598333df3e6d 100644 pthread_t thread; fd = open("/dev/ntsync", O_CLOEXEC | O_RDONLY); -@@ -800,10 +816,101 @@ TEST(wake_any) +@@ -833,10 +849,101 @@ TEST(wake_any) EXPECT_EQ(0, thread_args.ret); EXPECT_EQ(1, wait_args.index); @@ -180,7 +170,7 @@ index f1fb28949367..598333df3e6d 100644 ret = pthread_create(&thread, NULL, wait_thread, &thread_args); EXPECT_EQ(0, ret); -@@ -823,12 +930,14 @@ TEST(wake_any) +@@ -856,12 +963,14 @@ TEST(wake_any) TEST(wake_all) { @@ -197,7 +187,7 @@ index f1fb28949367..598333df3e6d 100644 pthread_t thread; fd = open("/dev/ntsync", O_CLOEXEC | O_RDONLY); -@@ -848,12 +957,24 @@ TEST(wake_all) +@@ -881,12 +990,24 @@ TEST(wake_all) EXPECT_EQ(0, ret); EXPECT_NE(0xdeadbeef, mutex_args.mutex); @@ -223,7 +213,7 @@ index f1fb28949367..598333df3e6d 100644 wait_args.owner = 456; thread_args.fd = fd; thread_args.args = &wait_args; -@@ -887,12 +1008,32 @@ TEST(wake_all) +@@ -920,12 +1041,32 @@ TEST(wake_all) check_mutex_state(mutex_args.mutex, 0, 0); @@ -256,7 +246,7 @@ index f1fb28949367..598333df3e6d 100644 ret = wait_for_thread(thread, 100); EXPECT_EQ(0, ret); -@@ -910,6 +1051,8 @@ TEST(wake_all) +@@ -943,6 +1084,8 @@ TEST(wake_all) close(sem_args.sem); close(mutex_args.mutex); @@ -267,4 +257,3 @@ index f1fb28949367..598333df3e6d 100644 EXPECT_EQ(0, ret); -- 2.43.0 - diff --git a/linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0025.patch b/linux-gcc/linux6.7-zen/patches/0026-[PATCH_v2_27_31]_selftests:_ntsync:_Add_tests_for_alertable_waits..patch similarity index 93% rename from linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0025.patch rename to linux-gcc/linux6.7-zen/patches/0026-[PATCH_v2_27_31]_selftests:_ntsync:_Add_tests_for_alertable_waits..patch index 5ed6d50..b8f967b 100644 --- a/linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0025.patch +++ b/linux-gcc/linux6.7-zen/patches/0026-[PATCH_v2_27_31]_selftests:_ntsync:_Add_tests_for_alertable_waits..patch @@ -1,13 +1,3 @@ -From git@z Thu Jan 1 00:00:00 1970 -Subject: [PATCH RFC v2 26/29] selftests: ntsync: Add tests for alertable - waits. -From: Elizabeth Figura -Date: Tue, 30 Jan 2024 20:13:53 -0600 -Message-Id: <20240131021356.10322-27-zfigura@codeweavers.com> -MIME-Version: 1.0 -Content-Type: text/plain; charset="utf-8" -Content-Transfer-Encoding: 7bit - Test the "alert" functionality of NTSYNC_IOC_WAIT_ALL and NTSYNC_IOC_WAIT_ANY, when a wait is woken with an alert and when it is woken by an object. @@ -17,7 +7,7 @@ Signed-off-by: Elizabeth Figura 1 file changed, 176 insertions(+), 3 deletions(-) diff --git a/tools/testing/selftests/drivers/ntsync/ntsync.c b/tools/testing/selftests/drivers/ntsync/ntsync.c -index 598333df3e6d..6c00a55909aa 100644 +index 5d17eff6a370..5465a16d38b3 100644 --- a/tools/testing/selftests/drivers/ntsync/ntsync.c +++ b/tools/testing/selftests/drivers/ntsync/ntsync.c @@ -95,7 +95,7 @@ static int read_event_state(int event, __u32 *signaled, __u32 *manual) @@ -66,7 +56,7 @@ index 598333df3e6d..6c00a55909aa 100644 } TEST(semaphore_state) -@@ -1062,4 +1077,162 @@ TEST(wake_all) +@@ -1095,4 +1110,162 @@ TEST(wake_all) close(fd); } @@ -231,4 +221,3 @@ index 598333df3e6d..6c00a55909aa 100644 TEST_HARNESS_MAIN -- 2.43.0 - diff --git a/linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0026.patch "b/linux-gcc/linux6.7-zen/patches/0027-[PATCH_v2_28_31]_selftests:_ntsync:_Add_some_tests_for_wakeup\n_signaling_via_alerts..patch" similarity index 83% rename from linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0026.patch rename to "linux-gcc/linux6.7-zen/patches/0027-[PATCH_v2_28_31]_selftests:_ntsync:_Add_some_tests_for_wakeup\n_signaling_via_alerts..patch" index 12e8859..5e0734b 100644 --- a/linux-clang/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0026.patch +++ "b/linux-gcc/linux6.7-zen/patches/0027-[PATCH_v2_28_31]_selftests:_ntsync:_Add_some_tests_for_wakeup\n_signaling_via_alerts..patch" @@ -1,13 +1,3 @@ -From git@z Thu Jan 1 00:00:00 1970 -Subject: [PATCH RFC v2 27/29] selftests: ntsync: Add some tests for wakeup - signaling via alerts. -From: Elizabeth Figura -Date: Tue, 30 Jan 2024 20:13:54 -0600 -Message-Id: <20240131021356.10322-28-zfigura@codeweavers.com> -MIME-Version: 1.0 -Content-Type: text/plain; charset="utf-8" -Content-Transfer-Encoding: 7bit - Expand the alert tests to cover alerting a thread mid-wait, to test that the relevant scheduling logic works correctly. @@ -17,10 +7,10 @@ Signed-off-by: Elizabeth Figura 1 file changed, 62 insertions(+) diff --git a/tools/testing/selftests/drivers/ntsync/ntsync.c b/tools/testing/selftests/drivers/ntsync/ntsync.c -index 6c00a55909aa..09153d0686ac 100644 +index 5465a16d38b3..968874d7e325 100644 --- a/tools/testing/selftests/drivers/ntsync/ntsync.c +++ b/tools/testing/selftests/drivers/ntsync/ntsync.c -@@ -1080,9 +1080,12 @@ TEST(wake_all) +@@ -1113,9 +1113,12 @@ TEST(wake_all) TEST(alert_any) { struct ntsync_event_args event_args = {0}; @@ -33,7 +23,7 @@ index 6c00a55909aa..09153d0686ac 100644 fd = open("/dev/ntsync", O_CLOEXEC | O_RDONLY); ASSERT_LE(0, fd); -@@ -1130,6 +1133,34 @@ TEST(alert_any) +@@ -1163,6 +1166,34 @@ TEST(alert_any) EXPECT_EQ(0, ret); EXPECT_EQ(2, index); @@ -68,7 +58,7 @@ index 6c00a55909aa..09153d0686ac 100644 close(event_args.event); /* test with an auto-reset event */ -@@ -1166,9 +1197,12 @@ TEST(alert_any) +@@ -1199,9 +1230,12 @@ TEST(alert_any) TEST(alert_all) { struct ntsync_event_args event_args = {0}; @@ -81,7 +71,7 @@ index 6c00a55909aa..09153d0686ac 100644 fd = open("/dev/ntsync", O_CLOEXEC | O_RDONLY); ASSERT_LE(0, fd); -@@ -1202,6 +1236,34 @@ TEST(alert_all) +@@ -1235,6 +1269,34 @@ TEST(alert_all) EXPECT_EQ(0, ret); EXPECT_EQ(2, index); @@ -118,4 +108,3 @@ index 6c00a55909aa..09153d0686ac 100644 /* test with an auto-reset event */ -- 2.43.0 - diff --git "a/linux-gcc/linux6.7-zen/patches/0028-[PATCH_v2_29_31]_selftests:_ntsync:_Add_a_stress_test_for\n_contended_waits..patch" "b/linux-gcc/linux6.7-zen/patches/0028-[PATCH_v2_29_31]_selftests:_ntsync:_Add_a_stress_test_for\n_contended_waits..patch" new file mode 100644 index 0000000..5fcc536 --- /dev/null +++ "b/linux-gcc/linux6.7-zen/patches/0028-[PATCH_v2_29_31]_selftests:_ntsync:_Add_a_stress_test_for\n_contended_waits..patch" @@ -0,0 +1,97 @@ +Test a more realistic usage pattern, and one with heavy contention, in order to +actually exercise ntsync's internal synchronization. + +This test has several threads in a tight loop acquiring a mutex, modifying some +shared data, and then releasing the mutex. At the end we check if the data is +consistent. + +Signed-off-by: Elizabeth Figura +--- + .../testing/selftests/drivers/ntsync/ntsync.c | 74 +++++++++++++++++++ + 1 file changed, 74 insertions(+) + +diff --git a/tools/testing/selftests/drivers/ntsync/ntsync.c b/tools/testing/selftests/drivers/ntsync/ntsync.c +index 968874d7e325..5fa2c9a0768c 100644 +--- a/tools/testing/selftests/drivers/ntsync/ntsync.c ++++ b/tools/testing/selftests/drivers/ntsync/ntsync.c +@@ -1330,4 +1330,78 @@ TEST(alert_all) + close(fd); + } + ++#define STRESS_LOOPS 10000 ++#define STRESS_THREADS 4 ++ ++static unsigned int stress_counter; ++static int stress_device, stress_start_event, stress_mutex; ++ ++static void *stress_thread(void *arg) ++{ ++ struct ntsync_wait_args wait_args = {0}; ++ __u32 index, count, i; ++ int ret; ++ ++ wait_args.timeout = UINT64_MAX; ++ wait_args.count = 1; ++ wait_args.objs = (uintptr_t)&stress_start_event; ++ wait_args.owner = gettid(); ++ wait_args.index = 0xdeadbeef; ++ ++ ioctl(stress_device, NTSYNC_IOC_WAIT_ANY, &wait_args); ++ ++ wait_args.objs = (uintptr_t)&stress_mutex; ++ ++ for (i = 0; i < STRESS_LOOPS; ++i) { ++ ioctl(stress_device, NTSYNC_IOC_WAIT_ANY, &wait_args); ++ ++ ++stress_counter; ++ ++ unlock_mutex(stress_mutex, wait_args.owner, &count); ++ } ++ ++ return NULL; ++} ++ ++TEST(stress_wait) ++{ ++ struct ntsync_event_args event_args; ++ struct ntsync_mutex_args mutex_args; ++ pthread_t threads[STRESS_THREADS]; ++ __u32 signaled, i; ++ int ret; ++ ++ stress_device = open("/dev/ntsync", O_CLOEXEC | O_RDONLY); ++ ASSERT_LE(0, stress_device); ++ ++ mutex_args.owner = 0; ++ mutex_args.count = 0; ++ ret = ioctl(stress_device, NTSYNC_IOC_CREATE_MUTEX, &mutex_args); ++ EXPECT_EQ(0, ret); ++ stress_mutex = mutex_args.mutex; ++ ++ event_args.manual = 1; ++ event_args.signaled = 0; ++ ret = ioctl(stress_device, NTSYNC_IOC_CREATE_EVENT, &event_args); ++ EXPECT_EQ(0, ret); ++ stress_start_event = event_args.event; ++ ++ for (i = 0; i < STRESS_THREADS; ++i) ++ pthread_create(&threads[i], NULL, stress_thread, NULL); ++ ++ ret = ioctl(stress_start_event, NTSYNC_IOC_EVENT_SET, &signaled); ++ EXPECT_EQ(0, ret); ++ ++ for (i = 0; i < STRESS_THREADS; ++i) { ++ ret = pthread_join(threads[i], NULL); ++ EXPECT_EQ(0, ret); ++ } ++ ++ EXPECT_EQ(STRESS_LOOPS * STRESS_THREADS, stress_counter); ++ ++ close(stress_start_event); ++ close(stress_mutex); ++ close(stress_device); ++} ++ + TEST_HARNESS_MAIN +-- +2.43.0 diff --git a/linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0027.patch b/linux-gcc/linux6.7-zen/patches/0029-[PATCH_v2_30_31]_maintainers:_Add_an_entry_for_ntsync..patch similarity index 61% rename from linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0027.patch rename to linux-gcc/linux6.7-zen/patches/0029-[PATCH_v2_30_31]_maintainers:_Add_an_entry_for_ntsync..patch index fee7a66..f7e2bd6 100644 --- a/linux-gcc/linux6.7-zen/patches/v2_20240130_zfigura_nt_synchronization_primitive_driver_0027.patch +++ b/linux-gcc/linux6.7-zen/patches/0029-[PATCH_v2_30_31]_maintainers:_Add_an_entry_for_ntsync..patch @@ -1,12 +1,3 @@ -From git@z Thu Jan 1 00:00:00 1970 -Subject: [PATCH RFC v2 28/29] maintainers: Add an entry for ntsync. -From: Elizabeth Figura -Date: Tue, 30 Jan 2024 20:13:55 -0600 -Message-Id: <20240131021356.10322-29-zfigura@codeweavers.com> -MIME-Version: 1.0 -Content-Type: text/plain; charset="utf-8" -Content-Transfer-Encoding: 7bit - Add myself as maintainer, supported by CodeWeavers. Signed-off-by: Elizabeth Figura @@ -15,10 +6,10 @@ Signed-off-by: Elizabeth Figura 1 file changed, 9 insertions(+) diff --git a/MAINTAINERS b/MAINTAINERS -index 8d1052fa6a69..7924127d351b 100644 +index 9ed4d3868539..d83dd35d9f73 100644 --- a/MAINTAINERS +++ b/MAINTAINERS -@@ -15585,6 +15585,15 @@ T: git https://github.com/Paragon-Software-Group/linux-ntfs3.git +@@ -15595,6 +15595,15 @@ T: git https://github.com/Paragon-Software-Group/linux-ntfs3.git F: Documentation/filesystems/ntfs3.rst F: fs/ntfs3/ @@ -36,4 +27,3 @@ index 8d1052fa6a69..7924127d351b 100644 L: linux-m68k@lists.linux-m68k.org -- 2.43.0 - diff --git a/linux-gcc/linux6.7-zen/template b/linux-gcc/linux6.7-zen/template index 635872d..f65ddd2 100644 --- a/linux-gcc/linux6.7-zen/template +++ b/linux-gcc/linux6.7-zen/template @@ -1,5 +1,5 @@ pkgname=linux6.7-zen -version=6.7.5 +version=6.7.6 revision=1 zen=1 python_version=3 @@ -8,7 +8,7 @@ maintainer="Wizzard " license="GPL-2.0-only" homepage="https://github.com/zen-kernel/zen-kernel" distfiles="https://github.com/zen-kernel/zen-kernel/archive/refs/tags/v${version}-zen${zen}.tar.gz" -checksum="6f4bb1b180880034269d539a47f3c120874f4923604976127f4ba9d8db0546dd" +checksum="77cdaa148e8ff5660b7c0287f6f70a0c36e0355521456c6fc754948fbe101ceb" archs="x86_64* i686* ppc* aarch64*" patch_args="-Np1"