aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan200101 <sentrycraft123@gmail.com>2024-04-06 17:05:32 +0200
committerJan200101 <sentrycraft123@gmail.com>2024-04-06 17:05:32 +0200
commit684f5ef56790771b425c7007c9dfcfbd8ea1a300 (patch)
tree118298a92be197f4a59d03cf2a5b447cbe9b9354
parentc0c9b770e4f24e17886587762c42194b6e524720 (diff)
downloadkernel-fsync-684f5ef56790771b425c7007c9dfcfbd8ea1a300.tar.gz
kernel-fsync-684f5ef56790771b425c7007c9dfcfbd8ea1a300.zip
kernel 6.8.2
-rw-r--r--SOURCES/0001-Allow-to-set-custom-USB-pollrate-for-specific-device.patch4
-rw-r--r--SOURCES/0001-Revert-PCI-Add-a-REBAR-size-quirk-for-Sapphire-RX-56.patch (renamed from SOURCES/0001-Remove-REBAR-size-quirk-for-Sapphire-RX-5600-XT-Puls.patch)0
-rw-r--r--SOURCES/0001-amd-hdr.patch2348
-rw-r--r--SOURCES/0001-bump-the-sensitivity-of-AMD-SFH.patch28
-rw-r--r--SOURCES/0001-ntsync.patch5600
-rw-r--r--SOURCES/0002-drm-i915-add-kernel-parameter-to-disable-async-page-.patch35
-rw-r--r--SOURCES/Patchlist.changelog168
-rw-r--r--SOURCES/cachy-bore.patch284
-rw-r--r--SOURCES/dracut-virt.conf5
-rw-r--r--SOURCES/filter-aarch64.sh.fedora2
-rwxr-xr-xSOURCES/filter-modules.sh.fedora4
-rwxr-xr-xSOURCES/filter-modules.sh.rhel2
-rw-r--r--SOURCES/filter-ppc64le.sh.fedora2
-rw-r--r--SOURCES/kernel-aarch64-16k-debug-fedora.config181
-rw-r--r--SOURCES/kernel-aarch64-16k-fedora.config181
-rw-r--r--SOURCES/kernel-aarch64-64k-debug-rhel.config111
-rw-r--r--SOURCES/kernel-aarch64-64k-rhel.config111
-rw-r--r--SOURCES/kernel-aarch64-debug-fedora.config181
-rw-r--r--SOURCES/kernel-aarch64-debug-rhel.config111
-rw-r--r--SOURCES/kernel-aarch64-fedora.config181
-rw-r--r--SOURCES/kernel-aarch64-rhel.config111
-rw-r--r--SOURCES/kernel-aarch64-rt-debug-rhel.config113
-rw-r--r--SOURCES/kernel-aarch64-rt-rhel.config113
-rw-r--r--SOURCES/kernel-ppc64le-debug-fedora.config110
-rw-r--r--SOURCES/kernel-ppc64le-debug-rhel.config114
-rw-r--r--SOURCES/kernel-ppc64le-fedora.config110
-rw-r--r--SOURCES/kernel-ppc64le-rhel.config114
-rw-r--r--SOURCES/kernel-s390x-debug-fedora.config110
-rw-r--r--SOURCES/kernel-s390x-debug-rhel.config114
-rw-r--r--SOURCES/kernel-s390x-fedora.config110
-rw-r--r--SOURCES/kernel-s390x-rhel.config114
-rw-r--r--SOURCES/kernel-s390x-zfcpdump-rhel.config114
-rw-r--r--SOURCES/kernel-x86_64-debug-fedora.config139
-rw-r--r--SOURCES/kernel-x86_64-debug-rhel.config112
-rw-r--r--SOURCES/kernel-x86_64-fedora.config139
-rw-r--r--SOURCES/kernel-x86_64-rhel.config112
-rw-r--r--SOURCES/kernel-x86_64-rt-debug-rhel.config112
-rw-r--r--SOURCES/kernel-x86_64-rt-rhel.config112
-rw-r--r--SOURCES/kernel.changelog476
-rw-r--r--SOURCES/linux-surface.patch1207
-rw-r--r--SOURCES/mod-extra.list.fedora1
-rw-r--r--SOURCES/mod-extra.list.rhel1
-rw-r--r--SOURCES/mod-internal.list2
-rw-r--r--SOURCES/nvidiagpuoot001.x509bin0 -> 1416 bytes
-rw-r--r--SOURCES/patch-6.8-redhat.patch (renamed from SOURCES/patch-6.7-redhat.patch)216
-rwxr-xr-xSOURCES/process_configs.sh14
-rw-r--r--SOURCES/rog-ally-gyro-fix.patch2847
-rw-r--r--SOURCES/rpminspect.yaml2
-rw-r--r--SOURCES/steam-deck.patch1527
-rw-r--r--SOURCES/steamdeck-oled-audio.patch216
-rw-r--r--SOURCES/steamdeck-oled-wifi.patch241
-rw-r--r--SOURCES/t2linux.patch162
-rw-r--r--SOURCES/tkg-prjc_v6.7-r2.patch11478
-rw-r--r--SOURCES/tkg-unprivileged-CLONE_NEWUSER.patch4
-rw-r--r--SOURCES/tkg.patch12
-rw-r--r--SOURCES/valve-gamescope-framerate-control-fixups.patch520
-rw-r--r--SPECS/kernel.spec693
57 files changed, 6324 insertions, 24907 deletions
diff --git a/SOURCES/0001-Allow-to-set-custom-USB-pollrate-for-specific-device.patch b/SOURCES/0001-Allow-to-set-custom-USB-pollrate-for-specific-device.patch
index ecd0304..88631ae 100644
--- a/SOURCES/0001-Allow-to-set-custom-USB-pollrate-for-specific-device.patch
+++ b/SOURCES/0001-Allow-to-set-custom-USB-pollrate-for-specific-device.patch
@@ -15,8 +15,8 @@ diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/adm
index dbd26fde4..c9b8b80af 100644
--- a/Documentation/admin-guide/kernel-parameters.txt
+++ b/Documentation/admin-guide/kernel-parameters.txt
-@@ -6552,6 +6552,14 @@
- delay after resetting its port);
+@@ -6971,6 +6971,14 @@
+ request from 5000 ms to 500 ms);
Example: quirks=0781:5580:bk,0a5c:5834:gij
+ usbcore.interrupt_interval_override=
diff --git a/SOURCES/0001-Remove-REBAR-size-quirk-for-Sapphire-RX-5600-XT-Puls.patch b/SOURCES/0001-Revert-PCI-Add-a-REBAR-size-quirk-for-Sapphire-RX-56.patch
index dd8f961..dd8f961 100644
--- a/SOURCES/0001-Remove-REBAR-size-quirk-for-Sapphire-RX-5600-XT-Puls.patch
+++ b/SOURCES/0001-Revert-PCI-Add-a-REBAR-size-quirk-for-Sapphire-RX-56.patch
diff --git a/SOURCES/0001-amd-hdr.patch b/SOURCES/0001-amd-hdr.patch
index 87f2978..0980a25 100644
--- a/SOURCES/0001-amd-hdr.patch
+++ b/SOURCES/0001-amd-hdr.patch
@@ -1,118 +1,319 @@
-From a890fe8f821eab96408c2263320e1106d5263f10 Mon Sep 17 00:00:00 2001
-From: Thomas Crider <gloriouseggroll@gmail.com>
-Date: Wed, 6 Dec 2023 17:09:52 -0500
-Subject: [PATCH] hdr
+From dd5929402cebad821285fb6f112f48f8e63a393d Mon Sep 17 00:00:00 2001
+From: Joshua Ashton <joshua@froggi.es>
+Date: Tue, 19 Sep 2023 10:29:31 -0100
+Subject: [PATCH] HACK: Prefix new color mgmt properties with VALVE1_
+Plane color mgmt properties, predefined transfer functions and CRTC
+shaper/3D LUT aren't upstream properties yet, add a prefix to indicate
+they are downstream props.
+
+Signed-off-by: Joshua Ashton <joshua@froggi.es>
+Signed-off-by: Melissa Wen <mwen@igalia.com>
---
- drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h | 71 ++
- drivers/gpu/drm/amd/display/Kconfig | 7 +
- .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 35 +-
- .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h | 100 +++
- .../amd/display/amdgpu_dm/amdgpu_dm_color.c | 812 ++++++++++++++++--
- .../amd/display/amdgpu_dm/amdgpu_dm_crtc.c | 72 ++
- .../amd/display/amdgpu_dm/amdgpu_dm_plane.c | 234 ++++-
- .../amd/display/dc/dcn10/dcn10_cm_common.c | 95 +-
- .../amd/display/dc/dcn10/dcn10_hw_sequencer.c | 14 +-
- .../gpu/drm/amd/display/include/fixed31_32.h | 12 +
- drivers/gpu/drm/arm/malidp_crtc.c | 2 +-
- drivers/gpu/drm/drm_atomic.c | 1 +
- drivers/gpu/drm/drm_atomic_state_helper.c | 1 +
- drivers/gpu/drm/drm_property.c | 49 ++
- include/drm/drm_mode_object.h | 2 +-
- include/drm/drm_plane.h | 7 +
- include/drm/drm_property.h | 6 +
- include/uapi/drm/drm_mode.h | 8 +
+ .../amd/display/amdgpu_dm/amdgpu_dm_color.c | 26 +++++++++----------
+ 1 file changed, 13 insertions(+), 13 deletions(-)
-diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h
-index 32fe05c81..84bf501b0 100644
---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h
-+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h
-@@ -343,6 +343,77 @@ struct amdgpu_mode_info {
- int disp_priority;
- const struct amdgpu_display_funcs *funcs;
- const enum drm_plane_type *plane_type;
-+
-+ /* Driver-private color mgmt props */
-+
-+ /* @plane_degamma_lut_property: Plane property to set a degamma LUT to
-+ * convert input space before blending.
-+ */
-+ struct drm_property *plane_degamma_lut_property;
-+ /* @plane_degamma_lut_size_property: Plane property to define the max
-+ * size of degamma LUT as supported by the driver (read-only).
-+ */
-+ struct drm_property *plane_degamma_lut_size_property;
-+ /**
-+ * @plane_degamma_tf_property: Plane pre-defined transfer function to
-+ * to go from scanout/encoded values to linear values.
-+ */
-+ struct drm_property *plane_degamma_tf_property;
-+ /**
-+ * @plane_hdr_mult_property:
-+ */
-+ struct drm_property *plane_hdr_mult_property;
-+
-+ struct drm_property *plane_ctm_property;
-+ /**
-+ * @shaper_lut_property: Plane property to set pre-blending shaper LUT
-+ * that converts color content before 3D LUT.
-+ */
-+ struct drm_property *plane_shaper_lut_property;
-+ /**
-+ * @shaper_lut_size_property: Plane property for the size of
-+ * pre-blending shaper LUT as supported by the driver (read-only).
-+ */
-+ struct drm_property *plane_shaper_lut_size_property;
-+ /**
-+ * @plane_shaper_tf_property: Plane property to set a predefined
-+ * transfer function for pre-blending shaper (before applying 3D LUT)
-+ * with or without LUT.
-+ */
-+ struct drm_property *plane_shaper_tf_property;
-+ /**
-+ * @plane_lut3d_property: Plane property for gamma correction using a
-+ * 3D LUT (pre-blending).
-+ */
-+ struct drm_property *plane_lut3d_property;
-+ /**
-+ * @plane_degamma_lut_size_property: Plane property to define the max
-+ * size of 3D LUT as supported by the driver (read-only).
-+ */
-+ struct drm_property *plane_lut3d_size_property;
-+ /**
-+ * @plane_blend_lut_property: Plane property for output gamma before
-+ * blending. Userspace set a blend LUT to convert colors after 3D LUT
-+ * conversion. It works as a post-3D LUT 1D LUT, with shaper LUT, they
-+ * are sandwiching 3D LUT with two 1D LUT.
-+ */
-+ struct drm_property *plane_blend_lut_property;
-+ /**
-+ * @plane_blend_lut_size_property: Plane property to define the max
-+ * size of blend LUT as supported by the driver (read-only).
-+ */
-+ struct drm_property *plane_blend_lut_size_property;
-+ /**
-+ * @plane_blend_tf_property: Plane property to set a predefined
-+ * transfer function for pre-blending blend (before applying 3D LUT)
-+ * with or without LUT.
-+ */
-+ struct drm_property *plane_blend_tf_property;
-+ /* @regamma_tf_property: Transfer function for CRTC regamma
-+ * (post-blending). Possible values are defined by `enum
-+ * amdgpu_transfer_function`.
-+ */
-+ struct drm_property *regamma_tf_property;
+diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_color.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_color.c
+index c87b64e464ed5..0a7df5984d0b8 100644
+--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_color.c
++++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_color.c
+@@ -226,7 +226,7 @@ amdgpu_dm_create_color_properties(struct amdgpu_device *adev)
+
+ prop = drm_property_create(adev_to_drm(adev),
+ DRM_MODE_PROP_BLOB,
+- "AMD_PLANE_DEGAMMA_LUT", 0);
++ "VALVE1_PLANE_DEGAMMA_LUT", 0);
+ if (!prop)
+ return -ENOMEM;
+ adev->mode_info.plane_degamma_lut_property = prop;
+@@ -240,41 +240,41 @@ amdgpu_dm_create_color_properties(struct amdgpu_device *adev)
+ adev->mode_info.plane_degamma_lut_size_property = prop;
+
+ prop = amdgpu_create_tf_property(adev_to_drm(adev),
+- "AMD_PLANE_DEGAMMA_TF",
++ "VALVE1_PLANE_DEGAMMA_TF",
+ amdgpu_eotf);
+ if (!prop)
+ return -ENOMEM;
+ adev->mode_info.plane_degamma_tf_property = prop;
+
+ prop = drm_property_create_range(adev_to_drm(adev),
+- 0, "AMD_PLANE_HDR_MULT", 0, U64_MAX);
++ 0, "VALVE1_PLANE_HDR_MULT", 0, U64_MAX);
+ if (!prop)
+ return -ENOMEM;
+ adev->mode_info.plane_hdr_mult_property = prop;
+
+ prop = drm_property_create(adev_to_drm(adev),
+ DRM_MODE_PROP_BLOB,
+- "AMD_PLANE_CTM", 0);
++ "VALVE1_PLANE_CTM", 0);
+ if (!prop)
+ return -ENOMEM;
+ adev->mode_info.plane_ctm_property = prop;
+
+ prop = drm_property_create(adev_to_drm(adev),
+ DRM_MODE_PROP_BLOB,
+- "AMD_PLANE_SHAPER_LUT", 0);
++ "VALVE1_PLANE_SHAPER_LUT", 0);
+ if (!prop)
+ return -ENOMEM;
+ adev->mode_info.plane_shaper_lut_property = prop;
+
+ prop = drm_property_create_range(adev_to_drm(adev),
+ DRM_MODE_PROP_IMMUTABLE,
+- "AMD_PLANE_SHAPER_LUT_SIZE", 0, UINT_MAX);
++ "VALVE1_PLANE_SHAPER_LUT_SIZE", 0, UINT_MAX);
+ if (!prop)
+ return -ENOMEM;
+ adev->mode_info.plane_shaper_lut_size_property = prop;
+
+ prop = amdgpu_create_tf_property(adev_to_drm(adev),
+- "AMD_PLANE_SHAPER_TF",
++ "VALVE1_PLANE_SHAPER_TF",
+ amdgpu_inv_eotf);
+ if (!prop)
+ return -ENOMEM;
+@@ -282,41 +282,41 @@ amdgpu_dm_create_color_properties(struct amdgpu_device *adev)
+
+ prop = drm_property_create(adev_to_drm(adev),
+ DRM_MODE_PROP_BLOB,
+- "AMD_PLANE_LUT3D", 0);
++ "VALVE1_PLANE_LUT3D", 0);
+ if (!prop)
+ return -ENOMEM;
+ adev->mode_info.plane_lut3d_property = prop;
+
+ prop = drm_property_create_range(adev_to_drm(adev),
+ DRM_MODE_PROP_IMMUTABLE,
+- "AMD_PLANE_LUT3D_SIZE", 0, UINT_MAX);
++ "VALVE1_PLANE_LUT3D_SIZE", 0, UINT_MAX);
+ if (!prop)
+ return -ENOMEM;
+ adev->mode_info.plane_lut3d_size_property = prop;
+
+ prop = drm_property_create(adev_to_drm(adev),
+ DRM_MODE_PROP_BLOB,
+- "AMD_PLANE_BLEND_LUT", 0);
++ "VALVE1_PLANE_BLEND_LUT", 0);
+ if (!prop)
+ return -ENOMEM;
+ adev->mode_info.plane_blend_lut_property = prop;
+
+ prop = drm_property_create_range(adev_to_drm(adev),
+ DRM_MODE_PROP_IMMUTABLE,
+- "AMD_PLANE_BLEND_LUT_SIZE", 0, UINT_MAX);
++ "VALVE1_PLANE_BLEND_LUT_SIZE", 0, UINT_MAX);
+ if (!prop)
+ return -ENOMEM;
+ adev->mode_info.plane_blend_lut_size_property = prop;
+
+ prop = amdgpu_create_tf_property(adev_to_drm(adev),
+- "AMD_PLANE_BLEND_TF",
++ "VALVE1_PLANE_BLEND_TF",
+ amdgpu_eotf);
+ if (!prop)
+ return -ENOMEM;
+ adev->mode_info.plane_blend_tf_property = prop;
+
+ prop = amdgpu_create_tf_property(adev_to_drm(adev),
+- "AMD_CRTC_REGAMMA_TF",
++ "VALVE1_CRTC_REGAMMA_TF",
+ amdgpu_inv_eotf);
+ if (!prop)
+ return -ENOMEM;
+--
+GitLab
+
+
+From a5ae6b501aed085d27541c284893e431776fe259 Mon Sep 17 00:00:00 2001
+From: Melissa Wen <mwen@igalia.com>
+Date: Mon, 25 Sep 2023 16:25:27 -0100
+Subject: [PATCH] HACK: change TF API to fit current gamescope
+
+upstream requested to identify if the type of transfer function a
+property is capable to handle (basically EOTF or inv_EOTF). gamescope
+understand it is implictly identified by the block/property position in
+the pipeline and doesn't handle this difference yet. change the upstream
+API to fit the current gamescope implementation.
+
+Signed-off-by: Melissa Wen <mwen@igalia.com>
+---
+ .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h | 21 +++---
+ .../amd/display/amdgpu_dm/amdgpu_dm_color.c | 69 ++++++++-----------
+ 2 files changed, 38 insertions(+), 52 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h
+index 9c1871b866cc9..feaa82f74a68f 100644
+--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h
++++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h
+@@ -734,19 +734,14 @@ extern const struct amdgpu_ip_block_version dm_ip_block;
+ */
+ enum amdgpu_transfer_function {
+ AMDGPU_TRANSFER_FUNCTION_DEFAULT,
+- AMDGPU_TRANSFER_FUNCTION_SRGB_EOTF,
+- AMDGPU_TRANSFER_FUNCTION_BT709_INV_OETF,
+- AMDGPU_TRANSFER_FUNCTION_PQ_EOTF,
+- AMDGPU_TRANSFER_FUNCTION_IDENTITY,
+- AMDGPU_TRANSFER_FUNCTION_GAMMA22_EOTF,
+- AMDGPU_TRANSFER_FUNCTION_GAMMA24_EOTF,
+- AMDGPU_TRANSFER_FUNCTION_GAMMA26_EOTF,
+- AMDGPU_TRANSFER_FUNCTION_SRGB_INV_EOTF,
+- AMDGPU_TRANSFER_FUNCTION_BT709_OETF,
+- AMDGPU_TRANSFER_FUNCTION_PQ_INV_EOTF,
+- AMDGPU_TRANSFER_FUNCTION_GAMMA22_INV_EOTF,
+- AMDGPU_TRANSFER_FUNCTION_GAMMA24_INV_EOTF,
+- AMDGPU_TRANSFER_FUNCTION_GAMMA26_INV_EOTF,
++ AMDGPU_TRANSFER_FUNCTION_SRGB,
++ AMDGPU_TRANSFER_FUNCTION_BT709,
++ AMDGPU_TRANSFER_FUNCTION_PQ,
++ AMDGPU_TRANSFER_FUNCTION_LINEAR,
++ AMDGPU_TRANSFER_FUNCTION_UNITY,
++ AMDGPU_TRANSFER_FUNCTION_GAMMA22,
++ AMDGPU_TRANSFER_FUNCTION_GAMMA24,
++ AMDGPU_TRANSFER_FUNCTION_GAMMA26,
+ AMDGPU_TRANSFER_FUNCTION_COUNT
};
-
- #define AMDGPU_MAX_BL_LEVEL 0xFF
+
+diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_color.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_color.c
+index 0a7df5984d0b8..21e0efc42a34c 100644
+--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_color.c
++++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_color.c
+@@ -163,36 +163,31 @@ static inline struct fixed31_32 amdgpu_dm_fixpt_from_s3132(__u64 x)
+ static const char * const
+ amdgpu_transfer_function_names[] = {
+ [AMDGPU_TRANSFER_FUNCTION_DEFAULT] = "Default",
+- [AMDGPU_TRANSFER_FUNCTION_IDENTITY] = "Identity",
+- [AMDGPU_TRANSFER_FUNCTION_SRGB_EOTF] = "sRGB EOTF",
+- [AMDGPU_TRANSFER_FUNCTION_BT709_INV_OETF] = "BT.709 inv_OETF",
+- [AMDGPU_TRANSFER_FUNCTION_PQ_EOTF] = "PQ EOTF",
+- [AMDGPU_TRANSFER_FUNCTION_GAMMA22_EOTF] = "Gamma 2.2 EOTF",
+- [AMDGPU_TRANSFER_FUNCTION_GAMMA24_EOTF] = "Gamma 2.4 EOTF",
+- [AMDGPU_TRANSFER_FUNCTION_GAMMA26_EOTF] = "Gamma 2.6 EOTF",
+- [AMDGPU_TRANSFER_FUNCTION_SRGB_INV_EOTF] = "sRGB inv_EOTF",
+- [AMDGPU_TRANSFER_FUNCTION_BT709_OETF] = "BT.709 OETF",
+- [AMDGPU_TRANSFER_FUNCTION_PQ_INV_EOTF] = "PQ inv_EOTF",
+- [AMDGPU_TRANSFER_FUNCTION_GAMMA22_INV_EOTF] = "Gamma 2.2 inv_EOTF",
+- [AMDGPU_TRANSFER_FUNCTION_GAMMA24_INV_EOTF] = "Gamma 2.4 inv_EOTF",
+- [AMDGPU_TRANSFER_FUNCTION_GAMMA26_INV_EOTF] = "Gamma 2.6 inv_EOTF",
++ [AMDGPU_TRANSFER_FUNCTION_LINEAR] = "Linear",
++ [AMDGPU_TRANSFER_FUNCTION_UNITY] = "Unity",
++ [AMDGPU_TRANSFER_FUNCTION_SRGB] = "sRGB",
++ [AMDGPU_TRANSFER_FUNCTION_BT709] = "BT.709",
++ [AMDGPU_TRANSFER_FUNCTION_PQ] = "PQ (Perceptual Quantizer)",
++ [AMDGPU_TRANSFER_FUNCTION_GAMMA22] = "Gamma 2.2",
++ [AMDGPU_TRANSFER_FUNCTION_GAMMA24] = "Gamma 2.4",
++ [AMDGPU_TRANSFER_FUNCTION_GAMMA26] = "Gamma 2.6",
+ };
+
+ static const u32 amdgpu_eotf =
+- BIT(AMDGPU_TRANSFER_FUNCTION_SRGB_EOTF) |
+- BIT(AMDGPU_TRANSFER_FUNCTION_BT709_INV_OETF) |
+- BIT(AMDGPU_TRANSFER_FUNCTION_PQ_EOTF) |
+- BIT(AMDGPU_TRANSFER_FUNCTION_GAMMA22_EOTF) |
+- BIT(AMDGPU_TRANSFER_FUNCTION_GAMMA24_EOTF) |
+- BIT(AMDGPU_TRANSFER_FUNCTION_GAMMA26_EOTF);
++ BIT(AMDGPU_TRANSFER_FUNCTION_SRGB) |
++ BIT(AMDGPU_TRANSFER_FUNCTION_BT709) |
++ BIT(AMDGPU_TRANSFER_FUNCTION_PQ) |
++ BIT(AMDGPU_TRANSFER_FUNCTION_GAMMA22) |
++ BIT(AMDGPU_TRANSFER_FUNCTION_GAMMA24) |
++ BIT(AMDGPU_TRANSFER_FUNCTION_GAMMA26);
+
+ static const u32 amdgpu_inv_eotf =
+- BIT(AMDGPU_TRANSFER_FUNCTION_SRGB_INV_EOTF) |
+- BIT(AMDGPU_TRANSFER_FUNCTION_BT709_OETF) |
+- BIT(AMDGPU_TRANSFER_FUNCTION_PQ_INV_EOTF) |
+- BIT(AMDGPU_TRANSFER_FUNCTION_GAMMA22_INV_EOTF) |
+- BIT(AMDGPU_TRANSFER_FUNCTION_GAMMA24_INV_EOTF) |
+- BIT(AMDGPU_TRANSFER_FUNCTION_GAMMA26_INV_EOTF);
++ BIT(AMDGPU_TRANSFER_FUNCTION_SRGB) |
++ BIT(AMDGPU_TRANSFER_FUNCTION_BT709) |
++ BIT(AMDGPU_TRANSFER_FUNCTION_PQ) |
++ BIT(AMDGPU_TRANSFER_FUNCTION_GAMMA22) |
++ BIT(AMDGPU_TRANSFER_FUNCTION_GAMMA24) |
++ BIT(AMDGPU_TRANSFER_FUNCTION_GAMMA26);
+
+ static struct drm_property *
+ amdgpu_create_tf_property(struct drm_device *dev,
+@@ -201,7 +196,8 @@ amdgpu_create_tf_property(struct drm_device *dev,
+ {
+ u32 transfer_functions = supported_tf |
+ BIT(AMDGPU_TRANSFER_FUNCTION_DEFAULT) |
+- BIT(AMDGPU_TRANSFER_FUNCTION_IDENTITY);
++ BIT(AMDGPU_TRANSFER_FUNCTION_LINEAR) |
++ BIT(AMDGPU_TRANSFER_FUNCTION_UNITY);
+ struct drm_prop_enum_list enum_list[AMDGPU_TRANSFER_FUNCTION_COUNT];
+ int i, len;
+
+@@ -645,25 +641,20 @@ amdgpu_tf_to_dc_tf(enum amdgpu_transfer_function tf)
+ switch (tf) {
+ default:
+ case AMDGPU_TRANSFER_FUNCTION_DEFAULT:
+- case AMDGPU_TRANSFER_FUNCTION_IDENTITY:
++ case AMDGPU_TRANSFER_FUNCTION_LINEAR:
++ case AMDGPU_TRANSFER_FUNCTION_UNITY:
+ return TRANSFER_FUNCTION_LINEAR;
+- case AMDGPU_TRANSFER_FUNCTION_SRGB_EOTF:
+- case AMDGPU_TRANSFER_FUNCTION_SRGB_INV_EOTF:
++ case AMDGPU_TRANSFER_FUNCTION_SRGB:
+ return TRANSFER_FUNCTION_SRGB;
+- case AMDGPU_TRANSFER_FUNCTION_BT709_OETF:
+- case AMDGPU_TRANSFER_FUNCTION_BT709_INV_OETF:
++ case AMDGPU_TRANSFER_FUNCTION_BT709:
+ return TRANSFER_FUNCTION_BT709;
+- case AMDGPU_TRANSFER_FUNCTION_PQ_EOTF:
+- case AMDGPU_TRANSFER_FUNCTION_PQ_INV_EOTF:
++ case AMDGPU_TRANSFER_FUNCTION_PQ:
+ return TRANSFER_FUNCTION_PQ;
+- case AMDGPU_TRANSFER_FUNCTION_GAMMA22_EOTF:
+- case AMDGPU_TRANSFER_FUNCTION_GAMMA22_INV_EOTF:
++ case AMDGPU_TRANSFER_FUNCTION_GAMMA22:
+ return TRANSFER_FUNCTION_GAMMA22;
+- case AMDGPU_TRANSFER_FUNCTION_GAMMA24_EOTF:
+- case AMDGPU_TRANSFER_FUNCTION_GAMMA24_INV_EOTF:
++ case AMDGPU_TRANSFER_FUNCTION_GAMMA24:
+ return TRANSFER_FUNCTION_GAMMA24;
+- case AMDGPU_TRANSFER_FUNCTION_GAMMA26_EOTF:
+- case AMDGPU_TRANSFER_FUNCTION_GAMMA26_INV_EOTF:
++ case AMDGPU_TRANSFER_FUNCTION_GAMMA26:
+ return TRANSFER_FUNCTION_GAMMA26;
+ }
+ }
+--
+GitLab
+
+
+
+From 2f33df4d9d3e86546d7c67453ae799306d55b7f5 Mon Sep 17 00:00:00 2001
+From: Melissa Wen <mwen@igalia.com>
+Date: Sat, 22 Apr 2023 14:08:47 -0100
+Subject: [PATCH] HACK: add KConfig to enable driver-specific color mgmt props
+
+We are enabling a large set of color calibration features to enhance KMS
+color mgmt but these properties are specific of AMD display HW, and
+cannot be provided by other vendors. Therefore, set a config option to
+enable AMD driver-private properties used on Steam Deck color mgmt
+pipeline. Replace the agreed name `AMD_PRIVATE_COLOR` with
+our downstream version `CONFIG_DRM_AMD_COLOR_STEAMDECK`.
+
+Signed-off-by: Melissa Wen <mwen@igalia.com>
+---
+ drivers/gpu/drm/amd/display/Kconfig | 7 +++++++
+ drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 2 +-
+ drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_color.c | 2 +-
+ drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.c | 6 +++---
+ drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c | 6 +++---
+ 5 files changed, 15 insertions(+), 8 deletions(-)
+
diff --git a/drivers/gpu/drm/amd/display/Kconfig b/drivers/gpu/drm/amd/display/Kconfig
-index 901d1961b..49523fa82 100644
+index 901d1961b7392..49523fa82f92a 100644
--- a/drivers/gpu/drm/amd/display/Kconfig
+++ b/drivers/gpu/drm/amd/display/Kconfig
@@ -51,4 +51,11 @@ config DRM_AMD_SECURE_DISPLAY
This option enables the calculation of crc of specific region via
debugfs. Cooperate with specific DMCU FW.
-
+
+config DRM_AMD_COLOR_STEAMDECK
+ bool "Enable color calibration features for Steam Deck"
+ depends on DRM_AMD_DC
@@ -122,1924 +323,95 @@ index 901d1961b..49523fa82 100644
+
endmenu
diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
-index deedcd997..ccd99545b 100644
+index 5853cf0229176..1718ddfe75083 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
-@@ -2969,6 +2969,7 @@ static int dm_resume(void *handle)
- dc_stream_release(dm_new_crtc_state->stream);
- dm_new_crtc_state->stream = NULL;
- }
-+ dm_new_crtc_state->base.color_mgmt_changed = true;
- }
-
- for_each_new_plane_in_state(dm->cached_state, plane, new_plane_state, i) {
-@@ -4022,6 +4023,11 @@ static int amdgpu_dm_mode_config_init(struct amdgpu_device *adev)
+@@ -4074,7 +4074,7 @@ static int amdgpu_dm_mode_config_init(struct amdgpu_device *adev)
return r;
}
-
+
+-#ifdef AMD_PRIVATE_COLOR
+#ifdef CONFIG_DRM_AMD_COLOR_STEAMDECK
-+ if (amdgpu_dm_create_color_properties(adev))
-+ return -ENOMEM;
-+#endif
-+
- r = amdgpu_dm_audio_init(adev);
- if (r) {
- dc_release_state(state->context);
-@@ -5094,7 +5100,9 @@ static int fill_dc_plane_attributes(struct amdgpu_device *adev,
- * Always set input transfer function, since plane state is refreshed
- * every time.
- */
-- ret = amdgpu_dm_update_plane_color_mgmt(dm_crtc_state, dc_plane_state);
-+ ret = amdgpu_dm_update_plane_color_mgmt(dm_crtc_state,
-+ plane_state,
-+ dc_plane_state);
- if (ret)
- return ret;
-
-@@ -8117,6 +8125,10 @@ static void amdgpu_dm_commit_planes(struct drm_atomic_state *state,
- bundle->surface_updates[planes_count].gamma = dc_plane->gamma_correction;
- bundle->surface_updates[planes_count].in_transfer_func = dc_plane->in_transfer_func;
- bundle->surface_updates[planes_count].gamut_remap_matrix = &dc_plane->gamut_remap_matrix;
-+ bundle->surface_updates[planes_count].hdr_mult = dc_plane->hdr_mult;
-+ bundle->surface_updates[planes_count].func_shaper = dc_plane->in_shaper_func;
-+ bundle->surface_updates[planes_count].lut3d_func = dc_plane->lut3d_func;
-+ bundle->surface_updates[planes_count].blend_tf = dc_plane->blend_tf;
- }
-
- amdgpu_dm_plane_fill_dc_scaling_info(dm->adev, new_plane_state,
-@@ -8328,6 +8340,10 @@ static void amdgpu_dm_commit_planes(struct drm_atomic_state *state,
- &acrtc_state->stream->csc_color_matrix;
- bundle->stream_update.out_transfer_func =
- acrtc_state->stream->out_transfer_func;
-+ bundle->stream_update.lut3d_func =
-+ (struct dc_3dlut *) acrtc_state->stream->lut3d_func;
-+ bundle->stream_update.func_shaper =
-+ (struct dc_transfer_func *) acrtc_state->stream->func_shaper;
- }
-
- acrtc_state->stream->abm_level = acrtc_state->abm_level;
-@@ -9516,6 +9532,7 @@ static int dm_update_crtc_state(struct amdgpu_display_manager *dm,
- * when a modeset is needed, to ensure it gets reprogrammed.
- */
- if (dm_new_crtc_state->base.color_mgmt_changed ||
-+ dm_old_crtc_state->regamma_tf != dm_new_crtc_state->regamma_tf ||
- drm_atomic_crtc_needs_modeset(new_crtc_state)) {
- ret = amdgpu_dm_update_crtc_color_mgmt(dm_new_crtc_state);
- if (ret)
-@@ -9583,6 +9600,10 @@ static bool should_reset_plane(struct drm_atomic_state *state,
- */
- for_each_oldnew_plane_in_state(state, other, old_other_state, new_other_state, i) {
- struct amdgpu_framebuffer *old_afb, *new_afb;
-+ struct dm_plane_state *dm_new_other_state, *dm_old_other_state;
-+
-+ dm_new_other_state = to_dm_plane_state(new_other_state);
-+ dm_old_other_state = to_dm_plane_state(old_other_state);
-
- if (other->type == DRM_PLANE_TYPE_CURSOR)
- continue;
-@@ -9619,6 +9640,18 @@ static bool should_reset_plane(struct drm_atomic_state *state,
- old_other_state->color_encoding != new_other_state->color_encoding)
- return true;
-
-+ /* HDR/Transfer Function changes. */
-+ if (dm_old_other_state->degamma_tf != dm_new_other_state->degamma_tf ||
-+ dm_old_other_state->degamma_lut != dm_new_other_state->degamma_lut ||
-+ dm_old_other_state->hdr_mult != dm_new_other_state->hdr_mult ||
-+ dm_old_other_state->ctm != dm_new_other_state->ctm ||
-+ dm_old_other_state->shaper_lut != dm_new_other_state->shaper_lut ||
-+ dm_old_other_state->shaper_tf != dm_new_other_state->shaper_tf ||
-+ dm_old_other_state->lut3d != dm_new_other_state->lut3d ||
-+ dm_old_other_state->blend_lut != dm_new_other_state->blend_lut ||
-+ dm_old_other_state->blend_tf != dm_new_other_state->blend_tf)
-+ return true;
-+
- /* Framebuffer checks fall at the end. */
- if (!old_other_state->fb || !new_other_state->fb)
- continue;
-diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h
-index 9e4cc5eed..24c87f425 100644
---- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h
-+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h
-@@ -33,6 +33,8 @@
- #include <drm/drm_plane.h>
- #include "link_service_types.h"
-
-+#define AMDGPU_HDR_MULT_DEFAULT (0x100000000LL)
-+
- /*
- * This file contains the definition for amdgpu_display_manager
- * and its API for amdgpu driver's use.
-@@ -716,9 +718,91 @@ static inline void amdgpu_dm_set_mst_status(uint8_t *status,
-
- extern const struct amdgpu_ip_block_version dm_ip_block;
-
-+enum amdgpu_transfer_function {
-+ AMDGPU_TRANSFER_FUNCTION_DEFAULT,
-+ AMDGPU_TRANSFER_FUNCTION_SRGB_EOTF,
-+ AMDGPU_TRANSFER_FUNCTION_BT709_EOTF,
-+ AMDGPU_TRANSFER_FUNCTION_PQ_EOTF,
-+ AMDGPU_TRANSFER_FUNCTION_LINEAR,
-+ AMDGPU_TRANSFER_FUNCTION_UNITY,
-+ AMDGPU_TRANSFER_FUNCTION_GAMMA22_EOTF,
-+ AMDGPU_TRANSFER_FUNCTION_GAMMA24_EOTF,
-+ AMDGPU_TRANSFER_FUNCTION_GAMMA26_EOTF,
-+ AMDGPU_TRANSFER_FUNCTION_SRGB_INV_EOTF,
-+ AMDGPU_TRANSFER_FUNCTION_BT709_INV_EOTF,
-+ AMDGPU_TRANSFER_FUNCTION_PQ_INV_EOTF,
-+ AMDGPU_TRANSFER_FUNCTION_GAMMA22_INV_EOTF,
-+ AMDGPU_TRANSFER_FUNCTION_GAMMA24_INV_EOTF,
-+ AMDGPU_TRANSFER_FUNCTION_GAMMA26_INV_EOTF,
-+ AMDGPU_TRANSFER_FUNCTION_COUNT
-+};
-+
- struct dm_plane_state {
- struct drm_plane_state base;
- struct dc_plane_state *dc_state;
-+
-+ /* Plane color mgmt */
-+ /**
-+ * @degamma_lut:
-+ *
-+ * 1D LUT for mapping framebuffer/plane pixel data before sampling or
-+ * blending operations. It's usually applied to linearize input space.
-+ * The blob (if not NULL) is an array of &struct drm_color_lut.
-+ */
-+ struct drm_property_blob *degamma_lut;
-+ /**
-+ * @degamma_tf:
-+ *
-+ * Predefined transfer function to tell DC driver the input space to
-+ * linearize.
-+ */
-+ enum amdgpu_transfer_function degamma_tf;
-+ /**
-+ * @hdr_mult:
-+ *
-+ * Multiplier to 'gain' the plane. When PQ is decoded using the fixed
-+ * func transfer function to the internal FP16 fb, 1.0 -> 80 nits (on
-+ * AMD at least). When sRGB is decoded, 1.0 -> 1.0, obviously.
-+ * Therefore, 1.0 multiplier = 80 nits for SDR content. So if you
-+ * want, 203 nits for SDR content, pass in (203.0 / 80.0). Format is
-+ * S31.32 sign-magnitude.
-+ */
-+ __u64 hdr_mult;
-+ /**
-+ * @ctm:
-+ *
-+ * Color transformation matrix. See drm_crtc_enable_color_mgmt(). The
-+ * blob (if not NULL) is a &struct drm_color_ctm.
-+ */
-+ struct drm_property_blob *ctm;
-+ /**
-+ * @shaper_lut: shaper lookup table blob. The blob (if not NULL) is an
-+ * array of &struct drm_color_lut.
-+ */
-+ struct drm_property_blob *shaper_lut;
-+ /**
-+ * @shaper_tf:
-+ *
-+ * Predefined transfer function to delinearize color space.
-+ */
-+ enum amdgpu_transfer_function shaper_tf;
-+ /**
-+ * @lut3d: 3D lookup table blob. The blob (if not NULL) is an array of
-+ * &struct drm_color_lut.
-+ */
-+ struct drm_property_blob *lut3d;
-+ /**
-+ * @blend_lut: blend lut lookup table blob. The blob (if not NULL) is an
-+ * array of &struct drm_color_lut.
-+ */
-+ struct drm_property_blob *blend_lut;
-+ /**
-+ * @blend_tf:
-+ *
-+ * Pre-defined transfer function for converting plane pixel data before
-+ * applying blend LUT.
-+ */
-+ enum amdgpu_transfer_function blend_tf;
- };
-
- struct dm_crtc_state {
-@@ -743,6 +827,14 @@ struct dm_crtc_state {
- struct dc_info_packet vrr_infopacket;
-
- int abm_level;
-+
-+ /**
-+ * @regamma_tf:
-+ *
-+ * Pre-defined transfer function for converting internal FB -> wire
-+ * encoding.
-+ */
-+ enum amdgpu_transfer_function regamma_tf;
- };
-
- #define to_dm_crtc_state(x) container_of(x, struct dm_crtc_state, base)
-@@ -804,14 +896,22 @@ void amdgpu_dm_update_freesync_caps(struct drm_connector *connector,
-
- void amdgpu_dm_trigger_timing_sync(struct drm_device *dev);
-
-+/* 3D LUT max size is 17x17x17 */
-+#define MAX_COLOR_3DLUT_ENTRIES 4913
-+#define MAX_COLOR_3DLUT_BITDEPTH 12
-+int amdgpu_dm_verify_lut3d_size(struct amdgpu_device *adev,
-+ struct drm_plane_state *plane_state);
-+/* 1D LUT size */
- #define MAX_COLOR_LUT_ENTRIES 4096
- /* Legacy gamm LUT users such as X doesn't like large LUT sizes */
- #define MAX_COLOR_LEGACY_LUT_ENTRIES 256
-
- void amdgpu_dm_init_color_mod(void);
-+int amdgpu_dm_create_color_properties(struct amdgpu_device *adev);
- int amdgpu_dm_verify_lut_sizes(const struct drm_crtc_state *crtc_state);
- int amdgpu_dm_update_crtc_color_mgmt(struct dm_crtc_state *crtc);
- int amdgpu_dm_update_plane_color_mgmt(struct dm_crtc_state *crtc,
-+ struct drm_plane_state *plane_state,
- struct dc_plane_state *dc_plane_state);
-
- void amdgpu_dm_update_connector_after_detect(
+ if (amdgpu_dm_create_color_properties(adev))
+ return -ENOMEM;
+ #endif
diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_color.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_color.c
-index a4cb23d05..10fef576c 100644
+index 21e0efc42a34c..8f8d2a8fb2921 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_color.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_color.c
-@@ -72,6 +72,7 @@
- */
-
- #define MAX_DRM_LUT_VALUE 0xFFFF
-+#define SDR_WHITE_LEVEL_INIT_VALUE 80
-
- /**
- * amdgpu_dm_init_color_mod - Initialize the color module.
-@@ -84,6 +85,213 @@ void amdgpu_dm_init_color_mod(void)
- setup_x_points_distribution();
+@@ -97,7 +97,7 @@ static inline struct fixed31_32 amdgpu_dm_fixpt_from_s3132(__u64 x)
+ return val;
}
-
+
+-#ifdef AMD_PRIVATE_COLOR
+#ifdef CONFIG_DRM_AMD_COLOR_STEAMDECK
-+/* Pre-defined Transfer Functions (TF)
-+ *
-+ * AMD driver supports pre-defined mathematical functions for transferring
-+ * between encoded values and optical/linear space. Depending on HW color caps,
-+ * ROMs and curves built by the AMD color module support these transforms.
-+ *
-+ * The driver-specific color implementation exposes properties for pre-blending
-+ * degamma TF, shaper TF (before 3D LUT), and blend(dpp.ogam) TF and
-+ * post-blending regamma (mpc.ogam) TF. However, only pre-blending degamma
-+ * supports ROM curves. AMD color module uses pre-defined coefficients to build
-+ * curves for the other blocks. What can be done by each color block is
-+ * described by struct dpp_color_capsand struct mpc_color_caps.
-+ *
-+ * AMD driver-specific color API exposes the following pre-defined transfer
-+ * functions:
-+ *
-+ * - Linear/Unity: linear/identity relationship between pixel value and
-+ * luminance value;
-+ * - Gamma 2.2, Gamma 2.4, Gamma 2.6: pure gamma functions;
-+ * - sRGB: 2.4 gamma with small initial linear section as standardized by IEC
-+ * 61966-2-1:1999;
-+ * - BT.709 (BT.1886): 2.4 gamma with differences in the dark end of the scale.
-+ * Used in HD-TV and standardized by ITU-R BT.1886;
-+ * - PQ (Perceptual Quantizer): used for HDR display, allows luminance range
-+ * capability of 0 to 10,000 nits; standardized by SMPTE ST 2084.
-+ *
-+ * In the driver-specific API, color block names attached to TF properties
-+ * suggest the intention regarding non-linear encoding pixel's luminance
-+ * values. As some newer encodings don't use gamma curve, we make encoding and
-+ * decoding explicit by defining an enum list of transfer functions supported
-+ * in terms of EOTF and inverse EOTF, where:
-+ *
-+ * - EOTF (electro-optical transfer function): is the transfer function to go
-+ * from the encoded value to an optical (linear) value. De-gamma functions
-+ * traditionally do this.
-+ * - Inverse EOTF (simply the inverse of the EOTF): is usually intended to go
-+ * from an optical/linear space (which might have been used for blending)
-+ * back to the encoded values. Gamma functions traditionally do this.
-+ */
-+static const char * const
-+amdgpu_transfer_function_names[] = {
-+ [AMDGPU_TRANSFER_FUNCTION_DEFAULT] = "Default",
-+ [AMDGPU_TRANSFER_FUNCTION_LINEAR] = "Linear",
-+ [AMDGPU_TRANSFER_FUNCTION_UNITY] = "Unity",
-+ [AMDGPU_TRANSFER_FUNCTION_SRGB_EOTF] = "sRGB EOTF",
-+ [AMDGPU_TRANSFER_FUNCTION_BT709_EOTF] = "BT.709 EOTF",
-+ [AMDGPU_TRANSFER_FUNCTION_PQ_EOTF] = "PQ EOTF",
-+ [AMDGPU_TRANSFER_FUNCTION_GAMMA22_EOTF] = "Gamma 2.2 EOTF",
-+ [AMDGPU_TRANSFER_FUNCTION_GAMMA24_EOTF] = "Gamma 2.4 EOTF",
-+ [AMDGPU_TRANSFER_FUNCTION_GAMMA26_EOTF] = "Gamma 2.6 EOTF",
-+ [AMDGPU_TRANSFER_FUNCTION_SRGB_INV_EOTF] = "sRGB inv_EOTF",
-+ [AMDGPU_TRANSFER_FUNCTION_BT709_INV_EOTF] = "BT.709 inv_EOTF",
-+ [AMDGPU_TRANSFER_FUNCTION_PQ_INV_EOTF] = "PQ inv_EOTF",
-+ [AMDGPU_TRANSFER_FUNCTION_GAMMA22_INV_EOTF] = "Gamma 2.2 inv_EOTF",
-+ [AMDGPU_TRANSFER_FUNCTION_GAMMA24_INV_EOTF] = "Gamma 2.4 inv_EOTF",
-+ [AMDGPU_TRANSFER_FUNCTION_GAMMA26_INV_EOTF] = "Gamma 2.6 inv_EOTF",
-+};
-+
-+static const u32 amdgpu_eotf =
-+ BIT(AMDGPU_TRANSFER_FUNCTION_SRGB_EOTF) |
-+ BIT(AMDGPU_TRANSFER_FUNCTION_BT709_EOTF) |
-+ BIT(AMDGPU_TRANSFER_FUNCTION_PQ_EOTF) |
-+ BIT(AMDGPU_TRANSFER_FUNCTION_GAMMA22_EOTF) |
-+ BIT(AMDGPU_TRANSFER_FUNCTION_GAMMA24_EOTF) |
-+ BIT(AMDGPU_TRANSFER_FUNCTION_GAMMA26_EOTF);
-+
-+static const u32 amdgpu_inv_eotf =
-+ BIT(AMDGPU_TRANSFER_FUNCTION_SRGB_INV_EOTF) |
-+ BIT(AMDGPU_TRANSFER_FUNCTION_BT709_INV_EOTF) |
-+ BIT(AMDGPU_TRANSFER_FUNCTION_PQ_INV_EOTF) |
-+ BIT(AMDGPU_TRANSFER_FUNCTION_GAMMA22_INV_EOTF) |
-+ BIT(AMDGPU_TRANSFER_FUNCTION_GAMMA24_INV_EOTF) |
-+ BIT(AMDGPU_TRANSFER_FUNCTION_GAMMA26_INV_EOTF);
-+
-+static struct drm_property *
-+amdgpu_create_tf_property(struct drm_device *dev,
-+ const char *name,
-+ u32 supported_tf)
-+{
-+ u32 transfer_functions = supported_tf |
-+ BIT(AMDGPU_TRANSFER_FUNCTION_DEFAULT) |
-+ BIT(AMDGPU_TRANSFER_FUNCTION_LINEAR) |
-+ BIT(AMDGPU_TRANSFER_FUNCTION_UNITY);
-+ struct drm_prop_enum_list enum_list[AMDGPU_TRANSFER_FUNCTION_COUNT];
-+ int i, len;
-+
-+ len = 0;
-+ for (i = 0; i < AMDGPU_TRANSFER_FUNCTION_COUNT; i++) {
-+ if ((transfer_functions & BIT(i)) == 0)
-+ continue;
-+
-+ enum_list[len].type = i;
-+ enum_list[len].name = amdgpu_transfer_function_names[i];
-+ len++;
-+ }
-+
-+ return drm_property_create_enum(dev, DRM_MODE_PROP_ENUM,
-+ name, enum_list, len);
-+}
-+
-+int
-+amdgpu_dm_create_color_properties(struct amdgpu_device *adev)
-+{
-+ struct drm_property *prop;
-+
-+ prop = drm_property_create(adev_to_drm(adev),
-+ DRM_MODE_PROP_BLOB,
-+ "VALVE1_PLANE_DEGAMMA_LUT", 0);
-+ if (!prop)
-+ return -ENOMEM;
-+ adev->mode_info.plane_degamma_lut_property = prop;
-+
-+ prop = drm_property_create_range(adev_to_drm(adev),
-+ DRM_MODE_PROP_IMMUTABLE,
-+ "VALVE1_PLANE_DEGAMMA_LUT_SIZE", 0, UINT_MAX);
-+ if (!prop)
-+ return -ENOMEM;
-+ adev->mode_info.plane_degamma_lut_size_property = prop;
-+
-+ prop = amdgpu_create_tf_property(adev_to_drm(adev),
-+ "VALVE1_PLANE_DEGAMMA_TF",
-+ amdgpu_eotf);
-+ if (!prop)
-+ return -ENOMEM;
-+ adev->mode_info.plane_degamma_tf_property = prop;
-+
-+ prop = drm_property_create_range(adev_to_drm(adev),
-+ 0, "VALVE1_PLANE_HDR_MULT", 0, U64_MAX);
-+ if (!prop)
-+ return -ENOMEM;
-+ adev->mode_info.plane_hdr_mult_property = prop;
-+
-+ prop = drm_property_create(adev_to_drm(adev),
-+ DRM_MODE_PROP_BLOB,
-+ "VALVE1_PLANE_CTM", 0);
-+ if (!prop)
-+ return -ENOMEM;
-+ adev->mode_info.plane_ctm_property = prop;
-+
-+ prop = drm_property_create(adev_to_drm(adev),
-+ DRM_MODE_PROP_BLOB,
-+ "VALVE1_PLANE_SHAPER_LUT", 0);
-+ if (!prop)
-+ return -ENOMEM;
-+ adev->mode_info.plane_shaper_lut_property = prop;
-+
-+ prop = drm_property_create_range(adev_to_drm(adev),
-+ DRM_MODE_PROP_IMMUTABLE,
-+ "VALVE1_PLANE_SHAPER_LUT_SIZE", 0, UINT_MAX);
-+ if (!prop)
-+ return -ENOMEM;
-+ adev->mode_info.plane_shaper_lut_size_property = prop;
-+
-+ prop = amdgpu_create_tf_property(adev_to_drm(adev),
-+ "VALVE1_PLANE_SHAPER_TF",
-+ amdgpu_inv_eotf);
-+ if (!prop)
-+ return -ENOMEM;
-+ adev->mode_info.plane_shaper_tf_property = prop;
-+
-+ prop = drm_property_create(adev_to_drm(adev),
-+ DRM_MODE_PROP_BLOB,
-+ "VALVE1_PLANE_LUT3D", 0);
-+ if (!prop)
-+ return -ENOMEM;
-+ adev->mode_info.plane_lut3d_property = prop;
-+
-+ prop = drm_property_create_range(adev_to_drm(adev),
-+ DRM_MODE_PROP_IMMUTABLE,
-+ "VALVE1_PLANE_LUT3D_SIZE", 0, UINT_MAX);
-+ if (!prop)
-+ return -ENOMEM;
-+ adev->mode_info.plane_lut3d_size_property = prop;
-+
-+ prop = drm_property_create(adev_to_drm(adev),
-+ DRM_MODE_PROP_BLOB,
-+ "VALVE1_PLANE_BLEND_LUT", 0);
-+ if (!prop)
-+ return -ENOMEM;
-+ adev->mode_info.plane_blend_lut_property = prop;
-+
-+ prop = drm_property_create_range(adev_to_drm(adev),
-+ DRM_MODE_PROP_IMMUTABLE,
-+ "VALVE1_PLANE_BLEND_LUT_SIZE", 0, UINT_MAX);
-+ if (!prop)
-+ return -ENOMEM;
-+ adev->mode_info.plane_blend_lut_size_property = prop;
-+
-+ prop = amdgpu_create_tf_property(adev_to_drm(adev),
-+ "VALVE1_PLANE_BLEND_TF",
-+ amdgpu_eotf);
-+ if (!prop)
-+ return -ENOMEM;
-+ adev->mode_info.plane_blend_tf_property = prop;
-+
-+ prop = amdgpu_create_tf_property(adev_to_drm(adev),
-+ "VALVE1_CRTC_REGAMMA_TF",
-+ amdgpu_inv_eotf);
-+ if (!prop)
-+ return -ENOMEM;
-+ adev->mode_info.regamma_tf_property = prop;
-+
-+ return 0;
-+}
-+#endif
-+
- /**
- * __extract_blob_lut - Extracts the DRM lut and lut size from a blob.
- * @blob: DRM color mgmt property blob
-@@ -182,7 +390,6 @@ static void __drm_lut_to_dc_gamma(const struct drm_color_lut *lut,
- static void __drm_ctm_to_dc_matrix(const struct drm_color_ctm *ctm,
- struct fixed31_32 *matrix)
- {
-- int64_t val;
- int i;
-
- /*
-@@ -201,12 +408,33 @@ static void __drm_ctm_to_dc_matrix(const struct drm_color_ctm *ctm,
- }
-
- /* gamut_remap_matrix[i] = ctm[i - floor(i/4)] */
-- val = ctm->matrix[i - (i / 4)];
-- /* If negative, convert to 2's complement. */
-- if (val & (1ULL << 63))
-- val = -(val & ~(1ULL << 63));
-+ matrix[i] = dc_fixpt_from_s3132(ctm->matrix[i - (i / 4)]);
-+ }
-+}
-+
-+/**
-+ * __drm_ctm2_to_dc_matrix - converts a DRM CTM2 to a DC CSC float matrix
-+ * @ctm: DRM color transformation matrix
-+ * @matrix: DC CSC float matrix
-+ *
-+ * The matrix needs to be a 3x4 (12 entry) matrix.
-+ */
-+static void __drm_ctm2_to_dc_matrix(const struct drm_color_ctm2 *ctm,
-+ struct fixed31_32 *matrix)
-+{
-+ int i;
-
-- matrix[i].value = val;
-+ /*
-+ * DRM gives a 3x3 matrix, but DC wants 3x4. Assuming we're operating
-+ * with homogeneous coordinates, augment the matrix with 0's.
-+ *
-+ * The format provided is S31.32, using signed-magnitude representation.
-+ * Our fixed31_32 is also S31.32, but is using 2's complement. We have
-+ * to convert from signed-magnitude to 2's complement.
-+ */
-+ for (i = 0; i < 12; i++) {
-+ /* gamut_remap_matrix[i] = ctm[i - floor(i/4)] */
-+ matrix[i] = dc_fixpt_from_s3132(ctm->matrix[i]);
- }
- }
-
-@@ -268,16 +496,18 @@ static int __set_output_tf(struct dc_transfer_func *func,
- struct calculate_buffer cal_buffer = {0};
- bool res;
-
-- ASSERT(lut && lut_size == MAX_COLOR_LUT_ENTRIES);
--
- cal_buffer.buffer_index = -1;
-
-- gamma = dc_create_gamma();
-- if (!gamma)
-- return -ENOMEM;
-+ if (lut_size) {
-+ ASSERT(lut && lut_size == MAX_COLOR_LUT_ENTRIES);
-
-- gamma->num_entries = lut_size;
-- __drm_lut_to_dc_gamma(lut, gamma, false);
-+ gamma = dc_create_gamma();
-+ if (!gamma)
-+ return -ENOMEM;
-+
-+ gamma->num_entries = lut_size;
-+ __drm_lut_to_dc_gamma(lut, gamma, false);
-+ }
-
- if (func->tf == TRANSFER_FUNCTION_LINEAR) {
- /*
-@@ -285,27 +515,63 @@ static int __set_output_tf(struct dc_transfer_func *func,
- * on top of a linear input. But degamma params can be used
- * instead to simulate this.
- */
-- gamma->type = GAMMA_CUSTOM;
-+ if (gamma)
-+ gamma->type = GAMMA_CUSTOM;
- res = mod_color_calculate_degamma_params(NULL, func,
-- gamma, true);
-+ gamma, gamma != NULL);
- } else {
- /*
- * Assume sRGB. The actual mapping will depend on whether the
- * input was legacy or not.
- */
-- gamma->type = GAMMA_CS_TFM_1D;
-- res = mod_color_calculate_regamma_params(func, gamma, false,
-+ if (gamma)
-+ gamma->type = GAMMA_CS_TFM_1D;
-+ res = mod_color_calculate_regamma_params(func, gamma, gamma != NULL,
- has_rom, NULL, &cal_buffer);
- }
-
-- dc_gamma_release(&gamma);
-+ if (gamma)
-+ dc_gamma_release(&gamma);
-
- return res ? 0 : -ENOMEM;
- }
-
-+static int amdgpu_dm_set_atomic_regamma(struct dc_stream_state *stream,
-+ const struct drm_color_lut *regamma_lut,
-+ uint32_t regamma_size, bool has_rom,
-+ enum dc_transfer_func_predefined tf)
-+{
-+ struct dc_transfer_func *out_tf = stream->out_transfer_func;
-+ int ret = 0;
-+
-+ if (regamma_size || tf != TRANSFER_FUNCTION_LINEAR) {
-+ /* CRTC RGM goes into RGM LUT.
-+ *
-+ * Note: there is no implicit sRGB regamma here. We are using
-+ * degamma calculation from color module to calculate the curve
-+ * from a linear base.
-+ */
-+ out_tf->type = TF_TYPE_DISTRIBUTED_POINTS;
-+ out_tf->tf = tf;
-+ out_tf->sdr_ref_white_level = SDR_WHITE_LEVEL_INIT_VALUE;
-+
-+ ret = __set_output_tf(out_tf, regamma_lut, regamma_size, has_rom);
-+ } else {
-+ /*
-+ * No CRTC RGM means we can just put the block into bypass
-+ * since we don't have any plane level adjustments using it.
-+ */
-+ out_tf->type = TF_TYPE_BYPASS;
-+ out_tf->tf = TRANSFER_FUNCTION_LINEAR;
-+ }
-+
-+ return ret;
-+}
-+
- /**
- * __set_input_tf - calculates the input transfer function based on expected
- * input space.
-+ * @caps: dc color capabilities
- * @func: transfer function
- * @lut: lookup table that defines the color space
- * @lut_size: size of respective lut.
-@@ -313,27 +579,249 @@ static int __set_output_tf(struct dc_transfer_func *func,
- * Returns:
- * 0 in case of success. -ENOMEM if fails.
- */
--static int __set_input_tf(struct dc_transfer_func *func,
-+static int __set_input_tf(struct dc_color_caps *caps, struct dc_transfer_func *func,
- const struct drm_color_lut *lut, uint32_t lut_size)
- {
- struct dc_gamma *gamma = NULL;
- bool res;
-
-- gamma = dc_create_gamma();
-- if (!gamma)
-- return -ENOMEM;
-+ if (lut_size) {
-+ gamma = dc_create_gamma();
-+ if (!gamma)
-+ return -ENOMEM;
-
-- gamma->type = GAMMA_CUSTOM;
-- gamma->num_entries = lut_size;
-+ gamma->type = GAMMA_CUSTOM;
-+ gamma->num_entries = lut_size;
-+
-+ __drm_lut_to_dc_gamma(lut, gamma, false);
-+ }
-
-- __drm_lut_to_dc_gamma(lut, gamma, false);
-+ res = mod_color_calculate_degamma_params(caps, func, gamma, gamma != NULL);
-
-- res = mod_color_calculate_degamma_params(NULL, func, gamma, true);
-- dc_gamma_release(&gamma);
-+ if (gamma)
-+ dc_gamma_release(&gamma);
-
- return res ? 0 : -ENOMEM;
- }
-
-+static enum dc_transfer_func_predefined
-+amdgpu_tf_to_dc_tf(enum amdgpu_transfer_function tf)
-+{
-+ switch (tf)
-+ {
-+ default:
-+ case AMDGPU_TRANSFER_FUNCTION_DEFAULT:
-+ case AMDGPU_TRANSFER_FUNCTION_LINEAR:
-+ return TRANSFER_FUNCTION_LINEAR;
-+ case AMDGPU_TRANSFER_FUNCTION_SRGB_EOTF:
-+ case AMDGPU_TRANSFER_FUNCTION_SRGB_INV_EOTF:
-+ return TRANSFER_FUNCTION_SRGB;
-+ case AMDGPU_TRANSFER_FUNCTION_BT709_EOTF:
-+ case AMDGPU_TRANSFER_FUNCTION_BT709_INV_EOTF:
-+ return TRANSFER_FUNCTION_BT709;
-+ case AMDGPU_TRANSFER_FUNCTION_PQ_EOTF:
-+ case AMDGPU_TRANSFER_FUNCTION_PQ_INV_EOTF:
-+ return TRANSFER_FUNCTION_PQ;
-+ case AMDGPU_TRANSFER_FUNCTION_UNITY:
-+ return TRANSFER_FUNCTION_UNITY;
-+ case AMDGPU_TRANSFER_FUNCTION_GAMMA22_EOTF:
-+ case AMDGPU_TRANSFER_FUNCTION_GAMMA22_INV_EOTF:
-+ return TRANSFER_FUNCTION_GAMMA22;
-+ case AMDGPU_TRANSFER_FUNCTION_GAMMA24_EOTF:
-+ case AMDGPU_TRANSFER_FUNCTION_GAMMA24_INV_EOTF:
-+ return TRANSFER_FUNCTION_GAMMA24;
-+ case AMDGPU_TRANSFER_FUNCTION_GAMMA26_EOTF:
-+ case AMDGPU_TRANSFER_FUNCTION_GAMMA26_INV_EOTF:
-+ return TRANSFER_FUNCTION_GAMMA26;
-+ }
-+}
-+
-+static void __to_dc_lut3d_color(struct dc_rgb *rgb,
-+ const struct drm_color_lut lut,
-+ int bit_precision)
-+{
-+ rgb->red = drm_color_lut_extract(lut.red, bit_precision);
-+ rgb->green = drm_color_lut_extract(lut.green, bit_precision);
-+ rgb->blue = drm_color_lut_extract(lut.blue, bit_precision);
-+}
-+
-+static void __drm_3dlut_to_dc_3dlut(const struct drm_color_lut *lut,
-+ uint32_t lut3d_size,
-+ struct tetrahedral_params *params,
-+ bool use_tetrahedral_9,
-+ int bit_depth)
-+{
-+ struct dc_rgb *lut0;
-+ struct dc_rgb *lut1;
-+ struct dc_rgb *lut2;
-+ struct dc_rgb *lut3;
-+ int lut_i, i;
-+
-+
-+ if (use_tetrahedral_9) {
-+ lut0 = params->tetrahedral_9.lut0;
-+ lut1 = params->tetrahedral_9.lut1;
-+ lut2 = params->tetrahedral_9.lut2;
-+ lut3 = params->tetrahedral_9.lut3;
-+ } else {
-+ lut0 = params->tetrahedral_17.lut0;
-+ lut1 = params->tetrahedral_17.lut1;
-+ lut2 = params->tetrahedral_17.lut2;
-+ lut3 = params->tetrahedral_17.lut3;
-+ }
-+
-+ for (lut_i = 0, i = 0; i < lut3d_size - 4; lut_i++, i += 4) {
-+ /* We should consider the 3dlut RGB values are distributed
-+ * along four arrays lut0-3 where the first sizes 1229 and the
-+ * other 1228. The bit depth supported for 3dlut channel is
-+ * 12-bit, but DC also supports 10-bit.
-+ *
-+ * TODO: improve color pipeline API to enable the userspace set
-+ * bit depth and 3D LUT size/stride, as specified by VA-API.
-+ */
-+ __to_dc_lut3d_color(&lut0[lut_i], lut[i], bit_depth);
-+ __to_dc_lut3d_color(&lut1[lut_i], lut[i + 1], bit_depth);
-+ __to_dc_lut3d_color(&lut2[lut_i], lut[i + 2], bit_depth);
-+ __to_dc_lut3d_color(&lut3[lut_i], lut[i + 3], bit_depth);
-+ }
-+ /* lut0 has 1229 points (lut_size/4 + 1) */
-+ __to_dc_lut3d_color(&lut0[lut_i], lut[i], bit_depth);
-+}
-+
-+/* amdgpu_dm_atomic_lut3d - set DRM 3D LUT to DC stream
-+ * @drm_lut3d: DRM CRTC (user) 3D LUT
-+ * @drm_lut3d_size: size of 3D LUT
-+ * @lut3d: DC 3D LUT
-+ *
-+ * Map DRM CRTC 3D LUT to DC 3D LUT and all necessary bits to program it
-+ * on DCN MPC accordingly.
-+ */
-+static void amdgpu_dm_atomic_lut3d(const struct drm_color_lut *drm_lut,
-+ uint32_t drm_lut3d_size,
-+ struct dc_3dlut *lut)
-+{
-+ if (!drm_lut3d_size) {
-+ lut->state.bits.initialized = 0;
-+ } else {
-+ /* Stride and bit depth are not programmable by API yet.
-+ * Therefore, only supports 17x17x17 3D LUT (12-bit).
-+ */
-+ lut->lut_3d.use_tetrahedral_9 = false;
-+ lut->lut_3d.use_12bits = true;
-+ lut->state.bits.initialized = 1;
-+ __drm_3dlut_to_dc_3dlut(drm_lut, drm_lut3d_size, &lut->lut_3d,
-+ lut->lut_3d.use_tetrahedral_9,
-+ MAX_COLOR_3DLUT_BITDEPTH);
-+ }
-+}
-+
-+static int amdgpu_dm_atomic_shaper_lut(const struct drm_color_lut *shaper_lut,
-+ bool has_rom,
-+ enum dc_transfer_func_predefined tf,
-+ uint32_t shaper_size,
-+ struct dc_transfer_func *func_shaper)
-+{
-+ int ret = 0;
-+
-+ if (shaper_size || tf != TRANSFER_FUNCTION_LINEAR) {
-+ /* If DRM shaper LUT is set, we assume a linear color space
-+ * (linearized by DRM degamma 1D LUT or not)
-+ */
-+ func_shaper->type = TF_TYPE_DISTRIBUTED_POINTS;
-+ func_shaper->tf = tf;
-+ func_shaper->sdr_ref_white_level = SDR_WHITE_LEVEL_INIT_VALUE;
-+
-+ ret = __set_output_tf(func_shaper, shaper_lut, shaper_size, has_rom);
-+ } else {
-+ func_shaper->type = TF_TYPE_BYPASS;
-+ func_shaper->tf = TRANSFER_FUNCTION_LINEAR;
-+ }
-+
-+ return ret;
-+}
-+
-+static int amdgpu_dm_atomic_blend_lut(const struct drm_color_lut *blend_lut,
-+ bool has_rom,
-+ enum dc_transfer_func_predefined tf,
-+ uint32_t blend_size,
-+ struct dc_transfer_func *func_blend)
-+{
-+ int ret = 0;
-+
-+ if (blend_size || tf != TRANSFER_FUNCTION_LINEAR) {
-+ /* DRM plane gamma LUT or TF means we are linearizing color
-+ * space before blending (similar to degamma programming). As
-+ * we don't have hardcoded curve support, or we use AMD color
-+ * module to fill the parameters that will be translated to HW
-+ * points.
-+ */
-+ func_blend->type = TF_TYPE_DISTRIBUTED_POINTS;
-+ func_blend->tf = tf;
-+ func_blend->sdr_ref_white_level = SDR_WHITE_LEVEL_INIT_VALUE;
-+
-+ ret = __set_input_tf(NULL, func_blend, blend_lut, blend_size);
-+ } else {
-+ func_blend->type = TF_TYPE_BYPASS;
-+ func_blend->tf = TRANSFER_FUNCTION_LINEAR;
-+ }
-+
-+ return ret;
-+}
-+
-+/* amdgpu_dm_lut3d_size - get expected size according to hw color caps
-+ * @adev: amdgpu device
-+ * @lut_size: default size
-+ *
-+ * Return:
-+ * lut_size if DC 3D LUT is supported, zero otherwise.
-+ */
-+static uint32_t amdgpu_dm_get_lut3d_size(struct amdgpu_device *adev,
-+ uint32_t lut_size)
-+{
-+ return adev->dm.dc->caps.color.dpp.hw_3d_lut ? lut_size : 0;
-+}
-+
-+/**
-+ * amdgpu_dm_verify_lut3d_size - verifies if 3D LUT is supported and if DRM 3D
-+ * LUT matches the hw supported size
-+ * @adev: amdgpu device
-+ * @crtc_state: the DRM CRTC state
-+ *
-+ * Verifies if post-blending (MPC) 3D LUT is supported by the HW (DCN 3.0 or
-+ * newer) and if the DRM 3D LUT matches the supported size.
-+ *
-+ * Returns:
-+ * 0 on success. -EINVAL if lut size are invalid.
-+ */
-+int amdgpu_dm_verify_lut3d_size(struct amdgpu_device *adev,
-+ struct drm_plane_state *plane_state)
-+{
-+ struct dm_plane_state *dm_plane_state = to_dm_plane_state(plane_state);
-+ const struct drm_color_lut *shaper = NULL, *lut3d = NULL;
-+ uint32_t exp_size, size;
-+
-+ /* shaper LUT is only available if 3D LUT color caps*/
-+ exp_size = amdgpu_dm_get_lut3d_size(adev, MAX_COLOR_LUT_ENTRIES);
-+ shaper = __extract_blob_lut(dm_plane_state->shaper_lut, &size);
-+
-+ if (shaper && size != exp_size) {
-+ drm_dbg(&adev->ddev,
-+ "Invalid Shaper LUT size. Should be %u but got %u.\n",
-+ exp_size, size);
-+ }
-+
-+ exp_size = amdgpu_dm_get_lut3d_size(adev, MAX_COLOR_3DLUT_ENTRIES);
-+ lut3d = __extract_blob_lut(dm_plane_state->lut3d, &size);
-+
-+ if (lut3d && size != exp_size) {
-+ drm_dbg(&adev->ddev, "Invalid 3D LUT size. Should be %u but got %u.\n",
-+ exp_size, size);
-+ return -EINVAL;
-+ }
-+
-+ return 0;
-+}
-+
- /**
- * amdgpu_dm_verify_lut_sizes - verifies if DRM luts match the hw supported sizes
- * @crtc_state: the DRM CRTC state
-@@ -401,9 +889,12 @@ int amdgpu_dm_update_crtc_color_mgmt(struct dm_crtc_state *crtc)
- const struct drm_color_lut *degamma_lut, *regamma_lut;
- uint32_t degamma_size, regamma_size;
- bool has_regamma, has_degamma;
-+ enum dc_transfer_func_predefined tf = TRANSFER_FUNCTION_LINEAR;
- bool is_legacy;
- int r;
-
-+ tf = amdgpu_tf_to_dc_tf(crtc->regamma_tf);
-+
- r = amdgpu_dm_verify_lut_sizes(&crtc->base);
- if (r)
- return r;
-@@ -440,26 +931,22 @@ int amdgpu_dm_update_crtc_color_mgmt(struct dm_crtc_state *crtc)
- stream->out_transfer_func->type = TF_TYPE_DISTRIBUTED_POINTS;
- stream->out_transfer_func->tf = TRANSFER_FUNCTION_SRGB;
-
-+ /* Note: although we pass has_rom as parameter here, we never
-+ * actually use ROM because the color module only takes the ROM
-+ * path if transfer_func->type == PREDEFINED.
-+ *
-+ * See more in mod_color_calculate_regamma_params()
-+ */
- r = __set_legacy_tf(stream->out_transfer_func, regamma_lut,
- regamma_size, has_rom);
- if (r)
- return r;
-- } else if (has_regamma) {
-- /* If atomic regamma, CRTC RGM goes into RGM LUT. */
-- stream->out_transfer_func->type = TF_TYPE_DISTRIBUTED_POINTS;
-- stream->out_transfer_func->tf = TRANSFER_FUNCTION_LINEAR;
--
-- r = __set_output_tf(stream->out_transfer_func, regamma_lut,
-- regamma_size, has_rom);
-+ } else {
-+ regamma_size = has_regamma ? regamma_size : 0;
-+ r = amdgpu_dm_set_atomic_regamma(stream, regamma_lut,
-+ regamma_size, has_rom, tf);
- if (r)
- return r;
-- } else {
-- /*
-- * No CRTC RGM means we can just put the block into bypass
-- * since we don't have any plane level adjustments using it.
-- */
-- stream->out_transfer_func->type = TF_TYPE_BYPASS;
-- stream->out_transfer_func->tf = TRANSFER_FUNCTION_LINEAR;
- }
-
- /*
-@@ -495,20 +982,10 @@ int amdgpu_dm_update_crtc_color_mgmt(struct dm_crtc_state *crtc)
- return 0;
- }
-
--/**
-- * amdgpu_dm_update_plane_color_mgmt: Maps DRM color management to DC plane.
-- * @crtc: amdgpu_dm crtc state
-- * @dc_plane_state: target DC surface
-- *
-- * Update the underlying dc_stream_state's input transfer function (ITF) in
-- * preparation for hardware commit. The transfer function used depends on
-- * the preparation done on the stream for color management.
-- *
-- * Returns:
-- * 0 on success. -ENOMEM if mem allocation fails.
-- */
--int amdgpu_dm_update_plane_color_mgmt(struct dm_crtc_state *crtc,
-- struct dc_plane_state *dc_plane_state)
-+static int
-+map_crtc_degamma_to_dc_plane(struct dm_crtc_state *crtc,
-+ struct dc_plane_state *dc_plane_state,
-+ struct dc_color_caps *caps)
- {
- const struct drm_color_lut *degamma_lut;
- enum dc_transfer_func_predefined tf = TRANSFER_FUNCTION_SRGB;
-@@ -531,8 +1008,7 @@ int amdgpu_dm_update_plane_color_mgmt(struct dm_crtc_state *crtc,
- &degamma_size);
- ASSERT(degamma_size == MAX_COLOR_LUT_ENTRIES);
-
-- dc_plane_state->in_transfer_func->type =
-- TF_TYPE_DISTRIBUTED_POINTS;
-+ dc_plane_state->in_transfer_func->type = TF_TYPE_DISTRIBUTED_POINTS;
-
- /*
- * This case isn't fully correct, but also fairly
-@@ -564,11 +1040,11 @@ int amdgpu_dm_update_plane_color_mgmt(struct dm_crtc_state *crtc,
- dc_plane_state->in_transfer_func->tf =
- TRANSFER_FUNCTION_LINEAR;
-
-- r = __set_input_tf(dc_plane_state->in_transfer_func,
-+ r = __set_input_tf(caps, dc_plane_state->in_transfer_func,
- degamma_lut, degamma_size);
- if (r)
- return r;
-- } else if (crtc->cm_is_degamma_srgb) {
-+ } else {
- /*
- * For legacy gamma support we need the regamma input
- * in linear space. Assume that the input is sRGB.
-@@ -577,14 +1053,220 @@ int amdgpu_dm_update_plane_color_mgmt(struct dm_crtc_state *crtc,
- dc_plane_state->in_transfer_func->tf = tf;
-
- if (tf != TRANSFER_FUNCTION_SRGB &&
-- !mod_color_calculate_degamma_params(NULL,
-- dc_plane_state->in_transfer_func, NULL, false))
-+ !mod_color_calculate_degamma_params(caps,
-+ dc_plane_state->in_transfer_func,
-+ NULL, false))
-+ return -ENOMEM;
-+ }
-+
-+ return 0;
-+}
-+
-+static int
-+__set_dm_plane_degamma(struct drm_plane_state *plane_state,
-+ struct dc_plane_state *dc_plane_state,
-+ struct dc_color_caps *color_caps)
-+{
-+ struct dm_plane_state *dm_plane_state = to_dm_plane_state(plane_state);
-+ const struct drm_color_lut *degamma_lut;
-+ enum amdgpu_transfer_function tf = AMDGPU_TRANSFER_FUNCTION_DEFAULT;
-+ uint32_t degamma_size;
-+ bool has_degamma_lut;
-+ int ret;
-+
-+ degamma_lut = __extract_blob_lut(dm_plane_state->degamma_lut,
-+ &degamma_size);
-+
-+ has_degamma_lut = degamma_lut &&
-+ !__is_lut_linear(degamma_lut, degamma_size);
-+
-+ tf = dm_plane_state->degamma_tf;
-+
-+ /* If we don't have plane degamma LUT nor TF to set on DC, we have
-+ * nothing to do here, return.
-+ */
-+ if (!has_degamma_lut && tf == AMDGPU_TRANSFER_FUNCTION_DEFAULT)
-+ return -EINVAL;
-+
-+ dc_plane_state->in_transfer_func->tf = amdgpu_tf_to_dc_tf(tf);
-+
-+ if (has_degamma_lut) {
-+ ASSERT(degamma_size == MAX_COLOR_LUT_ENTRIES);
-+
-+ dc_plane_state->in_transfer_func->type =
-+ TF_TYPE_DISTRIBUTED_POINTS;
-+
-+ ret = __set_input_tf(color_caps, dc_plane_state->in_transfer_func,
-+ degamma_lut, degamma_size);
-+ if (ret)
-+ return ret;
-+ } else {
-+ dc_plane_state->in_transfer_func->type =
-+ TF_TYPE_PREDEFINED;
-+
-+ if (!mod_color_calculate_degamma_params(color_caps,
-+ dc_plane_state->in_transfer_func, NULL, false))
- return -ENOMEM;
-- } else {
-- /* ...Otherwise we can just bypass the DGM block. */
-- dc_plane_state->in_transfer_func->type = TF_TYPE_BYPASS;
-- dc_plane_state->in_transfer_func->tf = TRANSFER_FUNCTION_LINEAR;
-+ }
-+ return 0;
-+}
-+
-+static int
-+amdgpu_dm_plane_set_color_properties(struct drm_plane_state *plane_state,
-+ struct dc_plane_state *dc_plane_state,
-+ struct dc_color_caps *color_caps)
-+{
-+ struct dm_plane_state *dm_plane_state = to_dm_plane_state(plane_state);
-+ enum amdgpu_transfer_function shaper_tf = AMDGPU_TRANSFER_FUNCTION_DEFAULT;
-+ enum amdgpu_transfer_function blend_tf = AMDGPU_TRANSFER_FUNCTION_DEFAULT;
-+ const struct drm_color_lut *shaper_lut, *lut3d, *blend_lut;
-+ uint32_t shaper_size, lut3d_size, blend_size;
-+ int ret;
-+
-+ /* We have nothing to do here, return */
-+ /*
-+ * JoshA: WE HAVE TO DO THIS EVERY TIME.
-+ * It's on a new dc_plane_state allocation, none of this data is here!
-+ * !!!!!!!!
-+ * This was always true before we duped properties due to LUCK and the
-+ * properties matching.
-+ if (!plane_state->color_mgmt_changed)
-+ return 0;
-+ */
-+
-+ dc_plane_state->hdr_mult = dc_fixpt_from_s3132(dm_plane_state->hdr_mult);
-+
-+ shaper_lut = __extract_blob_lut(dm_plane_state->shaper_lut, &shaper_size);
-+ shaper_size = shaper_lut != NULL ? shaper_size : 0;
-+ shaper_tf = dm_plane_state->shaper_tf;
-+ lut3d = __extract_blob_lut(dm_plane_state->lut3d, &lut3d_size);
-+ lut3d_size = lut3d != NULL ? lut3d_size : 0;
-+
-+ amdgpu_dm_atomic_lut3d(lut3d, lut3d_size, dc_plane_state->lut3d_func);
-+ ret = amdgpu_dm_atomic_shaper_lut(shaper_lut, false,
-+ amdgpu_tf_to_dc_tf(shaper_tf),
-+ shaper_size,
-+ dc_plane_state->in_shaper_func);
-+ if (ret) {
-+ drm_dbg_kms(plane_state->plane->dev,
-+ "setting plane %d shaper LUT failed.\n",
-+ plane_state->plane->index);
-+
-+ return ret;
-+ }
-+
-+ blend_tf = dm_plane_state->blend_tf;
-+ blend_lut = __extract_blob_lut(dm_plane_state->blend_lut, &blend_size);
-+ blend_size = blend_lut != NULL ? blend_size : 0;
-+
-+ ret = amdgpu_dm_atomic_blend_lut(blend_lut, false,
-+ amdgpu_tf_to_dc_tf(blend_tf),
-+ blend_size, dc_plane_state->blend_tf);
-+ if (ret) {
-+ drm_dbg_kms(plane_state->plane->dev,
-+ "setting plane %d gamma lut failed.\n",
-+ plane_state->plane->index);
-+
-+ return ret;
- }
-
- return 0;
- }
-+
-+/**
-+ * amdgpu_dm_update_plane_color_mgmt: Maps DRM color management to DC plane.
-+ * @crtc: amdgpu_dm crtc state
-+ * @plane_state: DRM plane state
-+ * @dc_plane_state: target DC surface
-+ *
-+ * Update the underlying dc_stream_state's input transfer function (ITF) in
-+ * preparation for hardware commit. The transfer function used depends on
-+ * the preparation done on the stream for color management.
-+ *
-+ * Returns:
-+ * 0 on success. -ENOMEM if mem allocation fails.
-+ */
-+int amdgpu_dm_update_plane_color_mgmt(struct dm_crtc_state *crtc,
-+ struct drm_plane_state *plane_state,
-+ struct dc_plane_state *dc_plane_state)
-+{
-+ struct amdgpu_device *adev = drm_to_adev(crtc->base.state->dev);
-+ struct dm_plane_state *dm_plane_state = to_dm_plane_state(plane_state);
-+ struct drm_color_ctm2 *ctm = NULL;
-+ struct dc_color_caps *color_caps = NULL;
-+ bool has_crtc_cm_degamma;
-+ int ret;
-+
-+ ret = amdgpu_dm_verify_lut3d_size(adev, plane_state);
-+ if (ret) {
-+ drm_dbg_driver(&adev->ddev, "amdgpu_dm_verify_lut3d_size() failed\n");
-+ return ret;
-+ }
-+
-+ if (dc_plane_state->ctx && dc_plane_state->ctx->dc)
-+ color_caps = &dc_plane_state->ctx->dc->caps.color;
-+
-+ /* Initially, we can just bypass the DGM block. */
-+ dc_plane_state->in_transfer_func->type = TF_TYPE_BYPASS;
-+ dc_plane_state->in_transfer_func->tf = TRANSFER_FUNCTION_LINEAR;
-+
-+ /* After, we start to update values according to color props */
-+ has_crtc_cm_degamma = (crtc->cm_has_degamma || crtc->cm_is_degamma_srgb);
-+
-+ ret = __set_dm_plane_degamma(plane_state, dc_plane_state, color_caps);
-+ if (ret == -ENOMEM)
-+ return ret;
-+
-+ /* We only have one degamma block available (pre-blending) for the
-+ * whole color correction pipeline, so that we can't actually perform
-+ * plane and CRTC degamma at the same time. Explicitly reject atomic
-+ * updates when userspace sets both plane and CRTC degamma properties.
-+ */
-+ if (has_crtc_cm_degamma && ret != -EINVAL){
-+ drm_dbg_kms(crtc->base.crtc->dev,
-+ "doesn't support plane and CRTC degamma at the same time\n");
-+ return -EINVAL;
-+ }
-+
-+ /* If we are here, it means we don't have plane degamma settings, check
-+ * if we have CRTC degamma waiting for mapping to pre-blending degamma
-+ * block
-+ */
-+ if (has_crtc_cm_degamma) {
-+ /* AMD HW doesn't have post-blending degamma caps. When DRM
-+ * CRTC atomic degamma is set, we maps it to DPP degamma block
-+ * (pre-blending) or, on legacy gamma, we use DPP degamma to
-+ * linearize (implicit degamma) from sRGB/BT709 according to
-+ * the input space.
-+ */
-+ ret = map_crtc_degamma_to_dc_plane(crtc, dc_plane_state, color_caps);
-+ if (ret)
-+ return ret;
-+ }
-+
-+ /* Setup CRTC CTM. */
-+ if (dm_plane_state->ctm) {
-+ ctm = (struct drm_color_ctm2 *)dm_plane_state->ctm->data;
-+
-+ /*
-+ * So far, if we have both plane and CRTC CTM, plane CTM takes
-+ * the priority and we discard data for CRTC CTM, as
-+ * implemented in dcn10_program_gamut_remap(). However, we
-+ * have MPC gamut_remap_matrix from DCN3 family, therefore we
-+ * can remap MPC programing of the matrix to MPC block and
-+ * provide support for both DPP and MPC matrix at the same
-+ * time.
-+ */
-+ __drm_ctm2_to_dc_matrix(ctm, dc_plane_state->gamut_remap_matrix.matrix);
-+
-+ dc_plane_state->gamut_remap_matrix.enable_remap = true;
-+ dc_plane_state->input_csc_color_matrix.enable_adjustment = false;
-+ } else {
-+ /* Bypass CTM. */
-+ dc_plane_state->gamut_remap_matrix.enable_remap = false;
-+ dc_plane_state->input_csc_color_matrix.enable_adjustment = false;
-+ }
-+
-+ return amdgpu_dm_plane_set_color_properties(plane_state,
-+ dc_plane_state, color_caps);
-+}
+ /* Pre-defined Transfer Functions (TF)
+ *
+ * AMD driver supports pre-defined mathematical functions for transferring
diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.c
-index 97b7a0b8a..f1707c774 100644
+index 6e715ef3a5566..ab9992f24ae21 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.c
-@@ -260,6 +260,7 @@ static struct drm_crtc_state *dm_crtc_duplicate_state(struct drm_crtc *crtc)
- state->freesync_config = cur->freesync_config;
- state->cm_has_degamma = cur->cm_has_degamma;
- state->cm_is_degamma_srgb = cur->cm_is_degamma_srgb;
-+ state->regamma_tf = cur->regamma_tf;
- state->crc_skip_count = cur->crc_skip_count;
- state->mpo_requested = cur->mpo_requested;
- /* TODO Duplicate dc_stream after objects are stream object is flattened */
-@@ -289,6 +289,70 @@
+@@ -290,7 +290,7 @@ static int amdgpu_dm_crtc_late_register(struct drm_crtc *crtc)
}
#endif
-
+
+-#ifdef AMD_PRIVATE_COLOR
+#ifdef CONFIG_DRM_AMD_COLOR_STEAMDECK
-+/**
-+ * drm_crtc_additional_color_mgmt - enable additional color properties
-+ * @crtc: DRM CRTC
-+ *
-+ * This function lets the driver enable post-blending CRTC regamma transfer
-+ * function property in addition to DRM CRTC gamma LUT. Default value means
-+ * linear transfer function, which is the default CRTC gamma LUT behaviour
-+ * without this property.
-+ */
-+static void
-+dm_crtc_additional_color_mgmt(struct drm_crtc *crtc)
-+{
-+ struct amdgpu_device *adev = drm_to_adev(crtc->dev);
-+
-+ if(adev->dm.dc->caps.color.mpc.ogam_ram)
-+ drm_object_attach_property(&crtc->base,
-+ adev->mode_info.regamma_tf_property,
-+ AMDGPU_TRANSFER_FUNCTION_DEFAULT);
-+}
-+
-+static int
-+amdgpu_dm_atomic_crtc_set_property(struct drm_crtc *crtc,
-+ struct drm_crtc_state *state,
-+ struct drm_property *property,
-+ uint64_t val)
-+{
-+ struct amdgpu_device *adev = drm_to_adev(crtc->dev);
-+ struct dm_crtc_state *acrtc_state = to_dm_crtc_state(state);
-+
-+ if (property == adev->mode_info.regamma_tf_property) {
-+ if (acrtc_state->regamma_tf != val) {
-+ acrtc_state->regamma_tf = val;
-+ acrtc_state->base.color_mgmt_changed |= 1;
-+ }
-+ } else {
-+ drm_dbg_atomic(crtc->dev,
-+ "[CRTC:%d:%s] unknown property [PROP:%d:%s]]\n",
-+ crtc->base.id, crtc->name,
-+ property->base.id, property->name);
-+ return -EINVAL;
-+ }
-+
-+ return 0;
-+}
-+
-+static int
-+amdgpu_dm_atomic_crtc_get_property(struct drm_crtc *crtc,
-+ const struct drm_crtc_state *state,
-+ struct drm_property *property,
-+ uint64_t *val)
-+{
-+ struct amdgpu_device *adev = drm_to_adev(crtc->dev);
-+ struct dm_crtc_state *acrtc_state = to_dm_crtc_state(state);
-+
-+ if (property == adev->mode_info.regamma_tf_property)
-+ *val = acrtc_state->regamma_tf;
-+ else
-+ return -EINVAL;
-+
-+ return 0;
-+}
-+#endif
-+
- /* Implemented only the options currently available for the driver */
- static const struct drm_crtc_funcs amdgpu_dm_crtc_funcs = {
- .reset = amdgpu_dm_crtc_reset_state,
-@@ -307,6 +307,10 @@
+ /**
+ * dm_crtc_additional_color_mgmt - enable additional color properties
+ * @crtc: DRM CRTC
+@@ -372,7 +372,7 @@ static const struct drm_crtc_funcs amdgpu_dm_crtc_funcs = {
#if defined(CONFIG_DEBUG_FS)
.late_register = amdgpu_dm_crtc_late_register,
#endif
+-#ifdef AMD_PRIVATE_COLOR
+#ifdef CONFIG_DRM_AMD_COLOR_STEAMDECK
-+ .atomic_set_property = amdgpu_dm_atomic_crtc_set_property,
-+ .atomic_get_property = amdgpu_dm_atomic_crtc_get_property,
-+#endif
- };
-
- static void amdgpu_dm_crtc_helper_disable(struct drm_crtc *crtc)
-@@ -489,6 +558,9 @@ int amdgpu_dm_crtc_init(struct amdgpu_display_manager *dm,
-
+ .atomic_set_property = amdgpu_dm_atomic_crtc_set_property,
+ .atomic_get_property = amdgpu_dm_atomic_crtc_get_property,
+ #endif
+@@ -551,7 +551,7 @@ int amdgpu_dm_crtc_init(struct amdgpu_display_manager *dm,
+
drm_mode_crtc_set_gamma_size(&acrtc->base, MAX_COLOR_LEGACY_LUT_ENTRIES);
-
+
+-#ifdef AMD_PRIVATE_COLOR
+#ifdef CONFIG_DRM_AMD_COLOR_STEAMDECK
-+ dm_crtc_additional_color_mgmt(&acrtc->base);
-+#endif
+ dm_crtc_additional_color_mgmt(&acrtc->base);
+ #endif
return 0;
-
- fail:
diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c
-index cc74dd69a..2ed20e6e4 100644
+index 8a4c40b4c27e4..5d87c24f0461f 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c
-@@ -1337,8 +1337,14 @@
- amdgpu_state = kzalloc(sizeof(*amdgpu_state), GFP_KERNEL);
- WARN_ON(amdgpu_state == NULL);
-
-- if (amdgpu_state)
-- __drm_atomic_helper_plane_reset(plane, &amdgpu_state->base);
-+ if (!amdgpu_state)
-+ return;
-+
-+ __drm_atomic_helper_plane_reset(plane, &amdgpu_state->base);
-+ amdgpu_state->degamma_tf = AMDGPU_TRANSFER_FUNCTION_DEFAULT;
-+ amdgpu_state->hdr_mult = AMDGPU_HDR_MULT_DEFAULT;
-+ amdgpu_state->shaper_tf = AMDGPU_TRANSFER_FUNCTION_DEFAULT;
-+ amdgpu_state->blend_tf = AMDGPU_TRANSFER_FUNCTION_DEFAULT;
- }
-
- static struct drm_plane_state *amdgpu_dm_plane_drm_plane_duplicate_state(struct drm_plane *plane)
-@@ -1354,6 +1360,32 @@ dm_drm_plane_duplicate_state(struct drm_plane *plane)
- dc_plane_state_retain(dm_plane_state->dc_state);
- }
-
-+ if (old_dm_plane_state->degamma_lut) {
-+ drm_property_blob_get(old_dm_plane_state->degamma_lut);
-+ dm_plane_state->degamma_lut = old_dm_plane_state->degamma_lut;
-+ }
-+ if (old_dm_plane_state->ctm) {
-+ drm_property_blob_get(old_dm_plane_state->ctm);
-+ dm_plane_state->ctm = old_dm_plane_state->ctm;
-+ }
-+ if (old_dm_plane_state->shaper_lut) {
-+ drm_property_blob_get(old_dm_plane_state->shaper_lut);
-+ dm_plane_state->shaper_lut = old_dm_plane_state->shaper_lut;
-+ }
-+ if (old_dm_plane_state->lut3d) {
-+ drm_property_blob_get(old_dm_plane_state->lut3d);
-+ dm_plane_state->lut3d = old_dm_plane_state->lut3d;
-+ }
-+ if (old_dm_plane_state->blend_lut) {
-+ drm_property_blob_get(old_dm_plane_state->blend_lut);
-+ dm_plane_state->blend_lut = old_dm_plane_state->blend_lut;
-+ }
-+
-+ dm_plane_state->degamma_tf = old_dm_plane_state->degamma_tf;
-+ dm_plane_state->hdr_mult = old_dm_plane_state->hdr_mult;
-+ dm_plane_state->shaper_tf = old_dm_plane_state->shaper_tf;
-+ dm_plane_state->blend_tf = old_dm_plane_state->blend_tf;
-+
- return &dm_plane_state->base;
- }
-
-@@ -1421,12 +1453,203 @@ static void dm_drm_plane_destroy_state(struct drm_plane *plane,
- {
- struct dm_plane_state *dm_plane_state = to_dm_plane_state(state);
-
-+ if (dm_plane_state->degamma_lut)
-+ drm_property_blob_put(dm_plane_state->degamma_lut);
-+ if (dm_plane_state->ctm)
-+ drm_property_blob_put(dm_plane_state->ctm);
-+ if (dm_plane_state->lut3d)
-+ drm_property_blob_put(dm_plane_state->lut3d);
-+ if (dm_plane_state->shaper_lut)
-+ drm_property_blob_put(dm_plane_state->shaper_lut);
-+ if (dm_plane_state->blend_lut)
-+ drm_property_blob_put(dm_plane_state->blend_lut);
-+
- if (dm_plane_state->dc_state)
- dc_plane_state_release(dm_plane_state->dc_state);
-
+@@ -1468,7 +1468,7 @@ static void amdgpu_dm_plane_drm_plane_destroy_state(struct drm_plane *plane,
drm_atomic_helper_plane_destroy_state(plane, state);
}
-
+
+-#ifdef AMD_PRIVATE_COLOR
+#ifdef CONFIG_DRM_AMD_COLOR_STEAMDECK
-+static void
-+amdgpu_dm_atomic_plane_attach_color_mgmt_properties(struct amdgpu_display_manager *dm,
-+ struct drm_plane *plane)
-+{
-+ struct amdgpu_mode_info mode_info = dm->adev->mode_info;
-+ struct dpp_color_caps dpp_color_caps = dm->dc->caps.color.dpp;
-+
-+ /* Check HW color pipeline capabilities for DPP (pre-blending) before expose*/
-+ if (dpp_color_caps.dgam_ram || dpp_color_caps.gamma_corr) {
-+ drm_object_attach_property(&plane->base,
-+ mode_info.plane_degamma_lut_property, 0);
-+ drm_object_attach_property(&plane->base,
-+ mode_info.plane_degamma_lut_size_property,
-+ MAX_COLOR_LUT_ENTRIES);
-+ drm_object_attach_property(&plane->base,
-+ dm->adev->mode_info.plane_degamma_tf_property,
-+ AMDGPU_TRANSFER_FUNCTION_DEFAULT);
-+ }
-+ /* HDR MULT is always available */
-+ drm_object_attach_property(&plane->base,
-+ dm->adev->mode_info.plane_hdr_mult_property,
-+ AMDGPU_HDR_MULT_DEFAULT);
-+
-+ /* Only enable plane CTM if both DPP and MPC gamut remap is available. */
-+ if (dm->dc->caps.color.mpc.gamut_remap)
-+ drm_object_attach_property(&plane->base,
-+ dm->adev->mode_info.plane_ctm_property, 0);
-+
-+ if (dpp_color_caps.hw_3d_lut) {
-+ drm_object_attach_property(&plane->base,
-+ mode_info.plane_shaper_lut_property, 0);
-+ drm_object_attach_property(&plane->base,
-+ mode_info.plane_shaper_lut_size_property,
-+ MAX_COLOR_LUT_ENTRIES);
-+ drm_object_attach_property(&plane->base,
-+ mode_info.plane_shaper_tf_property,
-+ AMDGPU_TRANSFER_FUNCTION_DEFAULT);
-+ drm_object_attach_property(&plane->base,
-+ mode_info.plane_lut3d_property, 0);
-+ drm_object_attach_property(&plane->base,
-+ mode_info.plane_lut3d_size_property,
-+ MAX_COLOR_3DLUT_ENTRIES);
-+ }
-+
-+ if (dpp_color_caps.ogam_ram) {
-+ drm_object_attach_property(&plane->base,
-+ mode_info.plane_blend_lut_property, 0);
-+ drm_object_attach_property(&plane->base,
-+ mode_info.plane_blend_lut_size_property,
-+ MAX_COLOR_LUT_ENTRIES);
-+ drm_object_attach_property(&plane->base,
-+ mode_info.plane_blend_tf_property,
-+ AMDGPU_TRANSFER_FUNCTION_DEFAULT);
-+ }
-+}
-+
-+static int
-+amdgpu_dm_atomic_plane_set_property(struct drm_plane *plane,
-+ struct drm_plane_state *state,
-+ struct drm_property *property,
-+ uint64_t val)
-+{
-+ struct dm_plane_state *dm_plane_state = to_dm_plane_state(state);
-+ struct amdgpu_device *adev = drm_to_adev(plane->dev);
-+ bool replaced = false;
-+ int ret;
-+
-+ if (property == adev->mode_info.plane_degamma_lut_property) {
-+ ret = drm_property_replace_blob_from_id(plane->dev,
-+ &dm_plane_state->degamma_lut,
-+ val,
-+ -1, sizeof(struct drm_color_lut),
-+ &replaced);
-+ dm_plane_state->base.color_mgmt_changed |= replaced;
-+ return ret;
-+ } else if (property == adev->mode_info.plane_degamma_tf_property) {
-+ if (dm_plane_state->degamma_tf != val) {
-+ dm_plane_state->degamma_tf = val;
-+ dm_plane_state->base.color_mgmt_changed = 1;
-+ }
-+ } else if (property == adev->mode_info.plane_hdr_mult_property) {
-+ if (dm_plane_state->hdr_mult != val) {
-+ dm_plane_state->hdr_mult = val;
-+ dm_plane_state->base.color_mgmt_changed = 1;
-+ }
-+ } else if (property == adev->mode_info.plane_ctm_property) {
-+ ret = drm_property_replace_blob_from_id(plane->dev,
-+ &dm_plane_state->ctm,
-+ val,
-+ sizeof(struct drm_color_ctm2), -1,
-+ &replaced);
-+ dm_plane_state->base.color_mgmt_changed |= replaced;
-+ return ret;
-+ } else if (property == adev->mode_info.plane_shaper_lut_property) {
-+ ret = drm_property_replace_blob_from_id(plane->dev,
-+ &dm_plane_state->shaper_lut,
-+ val, -1,
-+ sizeof(struct drm_color_lut),
-+ &replaced);
-+ dm_plane_state->base.color_mgmt_changed |= replaced;
-+ return ret;
-+ } else if (property == adev->mode_info.plane_shaper_tf_property) {
-+ if (dm_plane_state->shaper_tf != val) {
-+ dm_plane_state->shaper_tf = val;
-+ dm_plane_state->base.color_mgmt_changed = 1;
-+ }
-+ } else if (property == adev->mode_info.plane_lut3d_property) {
-+ ret = drm_property_replace_blob_from_id(plane->dev,
-+ &dm_plane_state->lut3d,
-+ val, -1,
-+ sizeof(struct drm_color_lut),
-+ &replaced);
-+ dm_plane_state->base.color_mgmt_changed |= replaced;
-+ return ret;
-+ } else if (property == adev->mode_info.plane_blend_lut_property) {
-+ ret = drm_property_replace_blob_from_id(plane->dev,
-+ &dm_plane_state->blend_lut,
-+ val, -1,
-+ sizeof(struct drm_color_lut),
-+ &replaced);
-+ dm_plane_state->base.color_mgmt_changed |= replaced;
-+ return ret;
-+ } else if (property == adev->mode_info.plane_blend_tf_property) {
-+ if (dm_plane_state->blend_tf != val) {
-+ dm_plane_state->blend_tf = val;
-+ dm_plane_state->base.color_mgmt_changed = 1;
-+ }
-+ } else {
-+ drm_dbg_atomic(plane->dev,
-+ "[PLANE:%d:%s] unknown property [PROP:%d:%s]]\n",
-+ plane->base.id, plane->name,
-+ property->base.id, property->name);
-+ return -EINVAL;
-+ }
-+
-+ return 0;
-+}
-+
-+static int
-+amdgpu_dm_atomic_plane_get_property(struct drm_plane *plane,
-+ const struct drm_plane_state *state,
-+ struct drm_property *property,
-+ uint64_t *val)
-+{
-+ struct dm_plane_state *dm_plane_state = to_dm_plane_state(state);
-+ struct amdgpu_device *adev = drm_to_adev(plane->dev);
-+
-+ if (property == adev->mode_info.plane_degamma_lut_property) {
-+ *val = (dm_plane_state->degamma_lut) ?
-+ dm_plane_state->degamma_lut->base.id : 0;
-+ } else if (property == adev->mode_info.plane_degamma_tf_property) {
-+ *val = dm_plane_state->degamma_tf;
-+ } else if (property == adev->mode_info.plane_hdr_mult_property) {
-+ *val = dm_plane_state->hdr_mult;
-+ } else if (property == adev->mode_info.plane_ctm_property) {
-+ *val = (dm_plane_state->ctm) ?
-+ dm_plane_state->ctm->base.id : 0;
-+ } else if (property == adev->mode_info.plane_shaper_lut_property) {
-+ *val = (dm_plane_state->shaper_lut) ?
-+ dm_plane_state->shaper_lut->base.id : 0;
-+ } else if (property == adev->mode_info.plane_shaper_tf_property) {
-+ *val = dm_plane_state->shaper_tf;
-+ } else if (property == adev->mode_info.plane_lut3d_property) {
-+ *val = (dm_plane_state->lut3d) ?
-+ dm_plane_state->lut3d->base.id : 0;
-+ } else if (property == adev->mode_info.plane_blend_lut_property) {
-+ *val = (dm_plane_state->blend_lut) ?
-+ dm_plane_state->blend_lut->base.id : 0;
-+ } else if (property == adev->mode_info.plane_blend_tf_property) {
-+ *val = dm_plane_state->blend_tf;
-+
-+ } else {
-+ return -EINVAL;
-+ }
-+
-+ return 0;
-+}
-+#endif
-+
- static const struct drm_plane_funcs dm_plane_funcs = {
- .update_plane = drm_atomic_helper_update_plane,
- .disable_plane = drm_atomic_helper_disable_plane,
-@@ -1658,6 +1881,10 @@ static const struct drm_plane_funcs dm_plane_funcs = {
+ static void
+ dm_atomic_plane_attach_color_mgmt_properties(struct amdgpu_display_manager *dm,
+ struct drm_plane *plane)
+@@ -1659,7 +1659,7 @@ static const struct drm_plane_funcs dm_plane_funcs = {
.atomic_duplicate_state = amdgpu_dm_plane_drm_plane_duplicate_state,
.atomic_destroy_state = amdgpu_dm_plane_drm_plane_destroy_state,
.format_mod_supported = amdgpu_dm_plane_format_mod_supported,
+-#ifdef AMD_PRIVATE_COLOR
+#ifdef CONFIG_DRM_AMD_COLOR_STEAMDECK
-+ .atomic_set_property = amdgpu_dm_atomic_plane_set_property,
-+ .atomic_get_property = amdgpu_dm_atomic_plane_get_property,
-+#endif
- };
+ .atomic_set_property = dm_atomic_plane_set_property,
+ .atomic_get_property = dm_atomic_plane_get_property,
+ #endif
+@@ -1742,7 +1742,7 @@ int amdgpu_dm_plane_init(struct amdgpu_display_manager *dm,
- int amdgpu_dm_plane_init(struct amdgpu_display_manager *dm,
-@@ -1514,6 +1741,9 @@ int amdgpu_dm_plane_init(struct amdgpu_display_manager *dm,
-
drm_plane_helper_add(plane, &dm_plane_helper_funcs);
-
+
+-#ifdef AMD_PRIVATE_COLOR
+#ifdef CONFIG_DRM_AMD_COLOR_STEAMDECK
-+ amdgpu_dm_atomic_plane_attach_color_mgmt_properties(dm, plane);
-+#endif
+ dm_atomic_plane_attach_color_mgmt_properties(dm, plane);
+ #endif
/* Create (reset) the plane state */
- if (plane->funcs->reset)
- plane->funcs->reset(plane);
-diff --git a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_cm_common.c b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_cm_common.c
-index 3538973bd..04b2e04b6 100644
---- a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_cm_common.c
-+++ b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_cm_common.c
-@@ -349,20 +349,37 @@ bool cm_helper_translate_curve_to_hw_format(struct dc_context *ctx,
- * segment is from 2^-10 to 2^1
- * There are less than 256 points, for optimization
- */
-- seg_distr[0] = 3;
-- seg_distr[1] = 4;
-- seg_distr[2] = 4;
-- seg_distr[3] = 4;
-- seg_distr[4] = 4;
-- seg_distr[5] = 4;
-- seg_distr[6] = 4;
-- seg_distr[7] = 4;
-- seg_distr[8] = 4;
-- seg_distr[9] = 4;
-- seg_distr[10] = 1;
--
-- region_start = -10;
-- region_end = 1;
-+ if (output_tf->tf == TRANSFER_FUNCTION_LINEAR) {
-+ seg_distr[0] = 0; /* 2 */
-+ seg_distr[1] = 1; /* 4 */
-+ seg_distr[2] = 2; /* 4 */
-+ seg_distr[3] = 3; /* 8 */
-+ seg_distr[4] = 4; /* 16 */
-+ seg_distr[5] = 5; /* 32 */
-+ seg_distr[6] = 6; /* 64 */
-+ seg_distr[7] = 7; /* 128 */
-+
-+ region_start = -8;
-+ region_end = 1;
-+ } else {
-+ seg_distr[0] = 3; /* 8 */
-+ seg_distr[1] = 4; /* 16 */
-+ seg_distr[2] = 4;
-+ seg_distr[3] = 4;
-+ seg_distr[4] = 4;
-+ seg_distr[5] = 4;
-+ seg_distr[6] = 4;
-+ seg_distr[7] = 4;
-+ seg_distr[8] = 4;
-+ seg_distr[9] = 4;
-+ seg_distr[10] = 1; /* 2 */
-+ /* total = 8*16 + 8 + 64 + 2 = */
-+
-+ region_start = -10;
-+ region_end = 1;
-+ }
-+
-+
- }
-
- for (i = region_end - region_start; i < MAX_REGIONS_NUMBER ; i++)
-@@ -375,16 +392,56 @@ bool cm_helper_translate_curve_to_hw_format(struct dc_context *ctx,
-
- j = 0;
- for (k = 0; k < (region_end - region_start); k++) {
-- increment = NUMBER_SW_SEGMENTS / (1 << seg_distr[k]);
-+ /*
-+ * We're using an ugly-ish hack here. Our HW allows for
-+ * 256 segments per region but SW_SEGMENTS is 16.
-+ * SW_SEGMENTS has some undocumented relationship to
-+ * the number of points in the tf_pts struct, which
-+ * is 512, unlike what's suggested TRANSFER_FUNC_POINTS.
-+ *
-+ * In order to work past this dilemma we'll scale our
-+ * increment by (1 << 4) and then do the inverse (1 >> 4)
-+ * when accessing the elements in tf_pts.
-+ *
-+ * TODO: find a better way using SW_SEGMENTS and
-+ * TRANSFER_FUNC_POINTS definitions
-+ */
-+ increment = (NUMBER_SW_SEGMENTS << 4) / (1 << seg_distr[k]);
- start_index = (region_start + k + MAX_LOW_POINT) *
- NUMBER_SW_SEGMENTS;
-- for (i = start_index; i < start_index + NUMBER_SW_SEGMENTS;
-+ for (i = (start_index << 4); i < (start_index << 4) + (NUMBER_SW_SEGMENTS << 4);
- i += increment) {
-+ struct fixed31_32 in_plus_one, in;
-+ struct fixed31_32 value, red_value, green_value, blue_value;
-+ uint32_t t = i & 0xf;
-+
- if (j == hw_points - 1)
- break;
-- rgb_resulted[j].red = output_tf->tf_pts.red[i];
-- rgb_resulted[j].green = output_tf->tf_pts.green[i];
-- rgb_resulted[j].blue = output_tf->tf_pts.blue[i];
-+
-+ in_plus_one = output_tf->tf_pts.red[(i >> 4) + 1];
-+ in = output_tf->tf_pts.red[i >> 4];
-+ value = dc_fixpt_sub(in_plus_one, in);
-+ value = dc_fixpt_shr(dc_fixpt_mul_int(value, t), 4);
-+ value = dc_fixpt_add(in, value);
-+ red_value = value;
-+
-+ in_plus_one = output_tf->tf_pts.green[(i >> 4) + 1];
-+ in = output_tf->tf_pts.green[i >> 4];
-+ value = dc_fixpt_sub(in_plus_one, in);
-+ value = dc_fixpt_shr(dc_fixpt_mul_int(value, t), 4);
-+ value = dc_fixpt_add(in, value);
-+ green_value = value;
-+
-+ in_plus_one = output_tf->tf_pts.blue[(i >> 4) + 1];
-+ in = output_tf->tf_pts.blue[i >> 4];
-+ value = dc_fixpt_sub(in_plus_one, in);
-+ value = dc_fixpt_shr(dc_fixpt_mul_int(value, t), 4);
-+ value = dc_fixpt_add(in, value);
-+ blue_value = value;
-+
-+ rgb_resulted[j].red = red_value;
-+ rgb_resulted[j].green = green_value;
-+ rgb_resulted[j].blue = blue_value;
- j++;
- }
- }
-diff --git a/drivers/gpu/drm/amd/display/dc/hwss/dcn10/dcn10_hwseq.c b/drivers/gpu/drm/amd/display/dc/hwss/dcn10/dcn10_hwseq.c
-index 79befa17b..4daf8621b 100644
---- a/drivers/gpu/drm/amd/display/dc/hwss/dcn10/dcn10_hwseq.c
-+++ b/drivers/gpu/drm/amd/display/dc/hwss/dcn10/dcn10_hwseq.c
-@@ -2486,17 +2486,17 @@ void dcn10_program_gamut_remap(struct pipe_ctx *pipe_ctx)
- adjust.gamut_adjust_type = GRAPHICS_GAMUT_ADJUST_TYPE_BYPASS;
-
-
-- if (pipe_ctx->stream->gamut_remap_matrix.enable_remap == true) {
-+ if (pipe_ctx->plane_state &&
-+ pipe_ctx->plane_state->gamut_remap_matrix.enable_remap == true) {
- adjust.gamut_adjust_type = GRAPHICS_GAMUT_ADJUST_TYPE_SW;
- for (i = 0; i < CSC_TEMPERATURE_MATRIX_SIZE; i++)
- adjust.temperature_matrix[i] =
-- pipe_ctx->stream->gamut_remap_matrix.matrix[i];
-- } else if (pipe_ctx->plane_state &&
-- pipe_ctx->plane_state->gamut_remap_matrix.enable_remap == true) {
-+ pipe_ctx->plane_state->gamut_remap_matrix.matrix[i];
-+ } else if (pipe_ctx->stream->gamut_remap_matrix.enable_remap == true) {
- adjust.gamut_adjust_type = GRAPHICS_GAMUT_ADJUST_TYPE_SW;
- for (i = 0; i < CSC_TEMPERATURE_MATRIX_SIZE; i++)
- adjust.temperature_matrix[i] =
-- pipe_ctx->plane_state->gamut_remap_matrix.matrix[i];
-+ pipe_ctx->stream->gamut_remap_matrix.matrix[i];
- }
-
- pipe_ctx->plane_res.dpp->funcs->dpp_set_gamut_remap(pipe_ctx->plane_res.dpp, &adjust);
-@@ -2942,8 +2942,8 @@ void dcn10_program_pipe(
- hws->funcs.set_hdr_multiplier(pipe_ctx);
-
- if (pipe_ctx->plane_state->update_flags.bits.full_update ||
-- pipe_ctx->plane_state->update_flags.bits.in_transfer_func_change ||
-- pipe_ctx->plane_state->update_flags.bits.gamma_change)
-+ pipe_ctx->plane_state->update_flags.bits.in_transfer_func_change ||
-+ pipe_ctx->plane_state->update_flags.bits.gamma_change)
- hws->funcs.set_input_transfer_func(dc, pipe_ctx, pipe_ctx->plane_state);
-
- /* dcn10_translate_regamma_to_hw_format takes 750us to finish
-diff --git a/drivers/gpu/drm/amd/display/include/fixed31_32.h b/drivers/gpu/drm/amd/display/include/fixed31_32.h
-index d4cf7ead1..84da1dd34 100644
---- a/drivers/gpu/drm/amd/display/include/fixed31_32.h
-+++ b/drivers/gpu/drm/amd/display/include/fixed31_32.h
-@@ -69,6 +69,18 @@ static const struct fixed31_32 dc_fixpt_epsilon = { 1LL };
- static const struct fixed31_32 dc_fixpt_half = { 0x80000000LL };
- static const struct fixed31_32 dc_fixpt_one = { 0x100000000LL };
-
-+static inline struct fixed31_32 dc_fixpt_from_s3132(__u64 x)
-+{
-+ struct fixed31_32 val;
-+
-+ /* If negative, convert to 2's complement. */
-+ if (x & (1ULL << 63))
-+ x = -(x & ~(1ULL << 63));
-+
-+ val.value = x;
-+ return val;
-+}
-+
- /*
- * @brief
- * Initialization routines
-diff --git a/drivers/gpu/drm/arm/malidp_crtc.c b/drivers/gpu/drm/arm/malidp_crtc.c
-index dc01c43f6..d72c22dcf 100644
---- a/drivers/gpu/drm/arm/malidp_crtc.c
-+++ b/drivers/gpu/drm/arm/malidp_crtc.c
-@@ -221,7 +221,7 @@ static int malidp_crtc_atomic_check_ctm(struct drm_crtc *crtc,
-
- /*
- * The size of the ctm is checked in
-- * drm_atomic_replace_property_blob_from_id.
-+ * drm_property_replace_blob_from_id.
- */
- ctm = (struct drm_color_ctm *)state->ctm->data;
- for (i = 0; i < ARRAY_SIZE(ctm->matrix); ++i) {
-diff --git a/drivers/gpu/drm/drm_atomic.c b/drivers/gpu/drm/drm_atomic.c
-index c277b198f..c3df45f90 100644
---- a/drivers/gpu/drm/drm_atomic.c
-+++ b/drivers/gpu/drm/drm_atomic.c
-@@ -733,6 +733,7 @@ static void drm_atomic_plane_print_state(struct drm_printer *p,
- drm_get_color_encoding_name(state->color_encoding));
- drm_printf(p, "\tcolor-range=%s\n",
- drm_get_color_range_name(state->color_range));
-+ drm_printf(p, "\tcolor_mgmt_changed=%d\n", state->color_mgmt_changed);
-
- if (plane->funcs->atomic_print_state)
- plane->funcs->atomic_print_state(p, state);
-diff --git a/drivers/gpu/drm/drm_atomic_state_helper.c b/drivers/gpu/drm/drm_atomic_state_helper.c
-index 784e63d70..25bb0859f 100644
---- a/drivers/gpu/drm/drm_atomic_state_helper.c
-+++ b/drivers/gpu/drm/drm_atomic_state_helper.c
-@@ -338,6 +338,7 @@ void __drm_atomic_helper_plane_duplicate_state(struct drm_plane *plane,
- state->fence = NULL;
- state->commit = NULL;
- state->fb_damage_clips = NULL;
-+ state->color_mgmt_changed = false;
- }
- EXPORT_SYMBOL(__drm_atomic_helper_plane_duplicate_state);
-
-diff --git a/drivers/gpu/drm/drm_property.c b/drivers/gpu/drm/drm_property.c
-index dfec47983..f72ef6493 100644
---- a/drivers/gpu/drm/drm_property.c
-+++ b/drivers/gpu/drm/drm_property.c
-@@ -751,6 +751,55 @@ bool drm_property_replace_blob(struct drm_property_blob **blob,
- }
- EXPORT_SYMBOL(drm_property_replace_blob);
-
-+/**
-+ * drm_property_replace_blob_from_id - replace a blob property taking a reference
-+ * @dev: DRM device
-+ * @blob: a pointer to the member blob to be replaced
-+ * @blob_id: the id of the new blob to replace with
-+ * @expected_size: expected size of the blob property
-+ * @expected_elem_size: expected size of an element in the blob property
-+ * @replaced: if the blob was in fact replaced
-+ *
-+ * Look up the new blob from id, take its reference, check expected sizes of
-+ * the blob and its element and replace the old blob by the new one. Advertise
-+ * if the replacement operation was successful.
-+ *
-+ * Return: true if the blob was in fact replaced. -EINVAL if the new blob was
-+ * not found or sizes don't match.
-+ */
-+int drm_property_replace_blob_from_id(struct drm_device *dev,
-+ struct drm_property_blob **blob,
-+ uint64_t blob_id,
-+ ssize_t expected_size,
-+ ssize_t expected_elem_size,
-+ bool *replaced)
-+{
-+ struct drm_property_blob *new_blob = NULL;
-+
-+ if (blob_id != 0) {
-+ new_blob = drm_property_lookup_blob(dev, blob_id);
-+ if (new_blob == NULL)
-+ return -EINVAL;
-+
-+ if (expected_size > 0 &&
-+ new_blob->length != expected_size) {
-+ drm_property_blob_put(new_blob);
-+ return -EINVAL;
-+ }
-+ if (expected_elem_size > 0 &&
-+ new_blob->length % expected_elem_size != 0) {
-+ drm_property_blob_put(new_blob);
-+ return -EINVAL;
-+ }
-+ }
-+
-+ *replaced |= drm_property_replace_blob(blob, new_blob);
-+ drm_property_blob_put(new_blob);
-+
-+ return 0;
-+}
-+EXPORT_SYMBOL(drm_property_replace_blob_from_id);
-+
- int drm_mode_getblob_ioctl(struct drm_device *dev,
- void *data, struct drm_file *file_priv)
- {
-diff --git a/include/drm/drm_mode_object.h b/include/drm/drm_mode_object.h
-index 912f1e415..08d7a7f01 100644
---- a/include/drm/drm_mode_object.h
-+++ b/include/drm/drm_mode_object.h
-@@ -60,7 +60,7 @@ struct drm_mode_object {
- void (*free_cb)(struct kref *kref);
- };
-
--#define DRM_OBJECT_MAX_PROPERTY 24
-+#define DRM_OBJECT_MAX_PROPERTY 64
- /**
- * struct drm_object_properties - property tracking for &drm_mode_object
- */
-diff --git a/include/drm/drm_plane.h b/include/drm/drm_plane.h
-index 79d62856d..4f87803b3 100644
---- a/include/drm/drm_plane.h
-+++ b/include/drm/drm_plane.h
-@@ -237,6 +237,13 @@ struct drm_plane_state {
-
- /** @state: backpointer to global drm_atomic_state */
- struct drm_atomic_state *state;
-+
-+ /**
-+ * @color_mgmt_changed: Color management properties have changed. Used
-+ * by the atomic helpers and drivers to steer the atomic commit control
-+ * flow.
-+ */
-+ bool color_mgmt_changed : 1;
- };
-
- static inline struct drm_rect
-diff --git a/include/drm/drm_property.h b/include/drm/drm_property.h
-index 65bc9710a..082f29156 100644
---- a/include/drm/drm_property.h
-+++ b/include/drm/drm_property.h
-@@ -279,6 +279,12 @@ struct drm_property_blob *drm_property_create_blob(struct drm_device *dev,
- const void *data);
- struct drm_property_blob *drm_property_lookup_blob(struct drm_device *dev,
- uint32_t id);
-+int drm_property_replace_blob_from_id(struct drm_device *dev,
-+ struct drm_property_blob **blob,
-+ uint64_t blob_id,
-+ ssize_t expected_size,
-+ ssize_t expected_elem_size,
-+ bool *replaced);
- int drm_property_replace_global_blob(struct drm_device *dev,
- struct drm_property_blob **replace,
- size_t length,
-diff --git a/include/uapi/drm/drm_mode.h b/include/uapi/drm/drm_mode.h
-index ea1b639bc..cea5653e4 100644
---- a/include/uapi/drm/drm_mode.h
-+++ b/include/uapi/drm/drm_mode.h
-@@ -846,6 +846,14 @@ struct drm_color_ctm {
- __u64 matrix[9];
- };
-
-+struct drm_color_ctm2 {
-+ /*
-+ * Conversion matrix in S31.32 sign-magnitude
-+ * (not two's complement!) format.
-+ */
-+ __u64 matrix[12];
-+};
-+
- struct drm_color_lut {
- /*
- * Values are mapped linearly to 0.0 - 1.0 range, with 0x0 == 0.0 and
---
-2.43.0
+--
+GitLab
From b938468f07222b4faab5ae5cf5391eccd9532bb0 Mon Sep 17 00:00:00 2001
From: Bouke Sybren Haarsma <boukehaarsma23@gmail.com>
@@ -2058,9 +430,9 @@ index 2ed20e6e439bb5..65ee8745e96540 100644
drm_plane_helper_add(plane, &dm_plane_helper_funcs);
#ifdef CONFIG_DRM_AMD_COLOR_STEAMDECK
-- amdgpu_dm_atomic_plane_attach_color_mgmt_properties(dm, plane);
+- dm_atomic_plane_attach_color_mgmt_properties(dm, plane);
+ if (dm->adev->asic_type >= CHIP_SIENNA_CICHLID)
-+ amdgpu_dm_atomic_plane_attach_color_mgmt_properties(dm, plane);
++ dm_atomic_plane_attach_color_mgmt_properties(dm, plane);
#endif
/* Create (reset) the plane state */
if (plane->funcs->reset)
diff --git a/SOURCES/0001-bump-the-sensitivity-of-AMD-SFH.patch b/SOURCES/0001-bump-the-sensitivity-of-AMD-SFH.patch
index 3a18987..092fab2 100644
--- a/SOURCES/0001-bump-the-sensitivity-of-AMD-SFH.patch
+++ b/SOURCES/0001-bump-the-sensitivity-of-AMD-SFH.patch
@@ -51,29 +51,29 @@ index 8a037de08e92..9426320a4a9c 100644
break;
case MAG_IDX: /* magnetometer */
memset(rep_desc, 0, sizeof(comp3_report_descriptor));
-@@ -201,9 +202,9 @@ static u8 get_input_rep(u8 current_index, int sensor_idx, int report_id,
+@@ -201,9 +201,9 @@
OFFSET_SENSOR_DATA_DEFAULT;
memcpy_fromio(&accel_data, sensoraddr, sizeof(struct sfh_accel_data));
get_common_inputs(&acc_input.common_property, report_id);
-- acc_input.in_accel_x_value = float_to_int(accel_data.acceldata.x) / 100;
-- acc_input.in_accel_y_value = float_to_int(accel_data.acceldata.y) / 100;
-- acc_input.in_accel_z_value = float_to_int(accel_data.acceldata.z) / 100;
-+ acc_input.in_accel_x_value = float_to_int(accel_data.acceldata.x);
-+ acc_input.in_accel_y_value = float_to_int(accel_data.acceldata.y);
-+ acc_input.in_accel_z_value = float_to_int(accel_data.acceldata.z);
+- acc_input.in_accel_x_value = amd_sfh_float_to_int(accel_data.acceldata.x) / 100;
+- acc_input.in_accel_y_value = amd_sfh_float_to_int(accel_data.acceldata.y) / 100;
+- acc_input.in_accel_z_value = amd_sfh_float_to_int(accel_data.acceldata.z) / 100;
++ acc_input.in_accel_x_value = amd_sfh_float_to_int(accel_data.acceldata.x);
++ acc_input.in_accel_y_value = amd_sfh_float_to_int(accel_data.acceldata.y);
++ acc_input.in_accel_z_value = amd_sfh_float_to_int(accel_data.acceldata.z);
memcpy(input_report, &acc_input, sizeof(acc_input));
report_size = sizeof(acc_input);
break;
-@@ -212,9 +213,9 @@ static u8 get_input_rep(u8 current_index, int sensor_idx, int report_id,
+@@ -212,9 +212,9 @@
OFFSET_SENSOR_DATA_DEFAULT;
memcpy_fromio(&gyro_data, sensoraddr, sizeof(struct sfh_gyro_data));
get_common_inputs(&gyro_input.common_property, report_id);
-- gyro_input.in_angel_x_value = float_to_int(gyro_data.gyrodata.x) / 1000;
-- gyro_input.in_angel_y_value = float_to_int(gyro_data.gyrodata.y) / 1000;
-- gyro_input.in_angel_z_value = float_to_int(gyro_data.gyrodata.z) / 1000;
-+ gyro_input.in_angel_x_value = float_to_int(gyro_data.gyrodata.x);
-+ gyro_input.in_angel_y_value = float_to_int(gyro_data.gyrodata.y);
-+ gyro_input.in_angel_z_value = float_to_int(gyro_data.gyrodata.z);
+- gyro_input.in_angel_x_value = amd_sfh_float_to_int(gyro_data.gyrodata.x) / 1000;
+- gyro_input.in_angel_y_value = amd_sfh_float_to_int(gyro_data.gyrodata.y) / 1000;
+- gyro_input.in_angel_z_value = amd_sfh_float_to_int(gyro_data.gyrodata.z) / 1000;
++ gyro_input.in_angel_x_value = amd_sfh_float_to_int(gyro_data.gyrodata.x);
++ gyro_input.in_angel_y_value = amd_sfh_float_to_int(gyro_data.gyrodata.y);
++ gyro_input.in_angel_z_value = amd_sfh_float_to_int(gyro_data.gyrodata.z);
memcpy(input_report, &gyro_input, sizeof(gyro_input));
report_size = sizeof(gyro_input);
break;
diff --git a/SOURCES/0001-ntsync.patch b/SOURCES/0001-ntsync.patch
index 34a383a..fa47d21 100644
--- a/SOURCES/0001-ntsync.patch
+++ b/SOURCES/0001-ntsync.patch
@@ -1,883 +1,590 @@
-From 34529eb8302090ff79e04d95a6bb7f5fd48cecb6 Mon Sep 17 00:00:00 2001
+Subject: [PATCH v2 0/31] NT synchronization primitive driver
From: Elizabeth Figura <zfigura@codeweavers.com>
-Date: Fri, 5 Mar 2021 10:50:45 -0600
-Subject: [PATCH 01/32] ntsync: Introduce the ntsync driver and character
- device.
-
-ntsync uses a misc device as the simplest and least intrusive uAPI interface.
-
-Each file description on the device represents an isolated NT instance, intended
-to correspond to a single NT virtual machine.
----
- drivers/misc/Kconfig | 9 ++++++++
- drivers/misc/Makefile | 1 +
- drivers/misc/ntsync.c | 53 +++++++++++++++++++++++++++++++++++++++++++
- 3 files changed, 63 insertions(+)
- create mode 100644 drivers/misc/ntsync.c
-
-diff --git a/drivers/misc/Kconfig b/drivers/misc/Kconfig
-index f37c4b8380ae..622eb26ac040 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.
-
-+config NTSYNC
-+ tristate "NT synchronization primitive emulation"
-+ help
-+ This module provides kernel support for emulation of Windows NT
-+ synchronization primitives. It is not a hardware driver.
-+
-+ To compile this driver as a module, choose M here: the
-+ module will be called ntsync.
-+
- If unsure, say N.
-
- config VCPU_STALL_DETECTOR
-diff --git a/drivers/misc/Makefile b/drivers/misc/Makefile
-index f2a4d1ff65d4..bd12e9a3b8c5 100644
---- a/drivers/misc/Makefile
-+++ b/drivers/misc/Makefile
-@@ -59,6 +59,7 @@ obj-$(CONFIG_PVPANIC) += pvpanic/
- obj-$(CONFIG_UACCE) += uacce/
- obj-$(CONFIG_XILINX_SDFEC) += xilinx_sdfec.o
- obj-$(CONFIG_HISI_HIKEY_USB) += hisi_hikey_usb.o
-+obj-$(CONFIG_NTSYNC) += ntsync.o
- obj-$(CONFIG_HI6421V600_IRQ) += hi6421v600-irq.o
- obj-$(CONFIG_OPEN_DICE) += open-dice.o
- obj-$(CONFIG_GP_PCI1XXXX) += mchp_pci1xxxx/
-diff --git a/drivers/misc/ntsync.c b/drivers/misc/ntsync.c
-new file mode 100644
-index 000000000000..9424c6210e51
---- /dev/null
-+++ b/drivers/misc/ntsync.c
-@@ -0,0 +1,53 @@
-+// SPDX-License-Identifier: GPL-2.0-only
-+/*
-+ * ntsync.c - Kernel driver for NT synchronization primitives
-+ *
-+ * Copyright (C) 2021-2022 Elizabeth Figura
-+ */
-+
-+#include <linux/fs.h>
-+#include <linux/miscdevice.h>
-+#include <linux/module.h>
-+
-+#define NTSYNC_NAME "ntsync"
-+
-+static int ntsync_char_open(struct inode *inode, struct file *file)
-+{
-+ return nonseekable_open(inode, file);
-+}
-+
-+static int ntsync_char_release(struct inode *inode, struct file *file)
-+{
-+ return 0;
-+}
-+
-+static long ntsync_char_ioctl(struct file *file, unsigned int cmd,
-+ unsigned long parm)
-+{
-+ switch (cmd) {
-+ default:
-+ return -ENOIOCTLCMD;
-+ }
-+}
-+
-+static const struct file_operations ntsync_fops = {
-+ .owner = THIS_MODULE,
-+ .open = ntsync_char_open,
-+ .release = ntsync_char_release,
-+ .unlocked_ioctl = ntsync_char_ioctl,
-+ .compat_ioctl = ntsync_char_ioctl,
-+ .llseek = no_llseek,
-+};
-+
-+static struct miscdevice ntsync_misc = {
-+ .minor = MISC_DYNAMIC_MINOR,
-+ .name = NTSYNC_NAME,
-+ .fops = &ntsync_fops,
-+};
-+
-+module_misc_device(ntsync_misc);
-+
-+MODULE_AUTHOR("Elizabeth Figura");
-+MODULE_DESCRIPTION("Kernel driver for NT synchronization primitives");
-+MODULE_LICENSE("GPL");
-+MODULE_ALIAS("devname:" NTSYNC_NAME);
---
-2.43.0
-
-From a375bffd8ab8d06b81e4b83c9f5577fdc97246f9 Mon Sep 17 00:00:00 2001
-From: Elizabeth Figura <zfigura@codeweavers.com>
-Date: Fri, 5 Mar 2021 10:57:06 -0600
-Subject: [PATCH 02/32] ntsync: Reserve a minor device number and ioctl range.
-
----
- Documentation/admin-guide/devices.txt | 3 ++-
- Documentation/userspace-api/ioctl/ioctl-number.rst | 2 ++
- drivers/misc/ntsync.c | 3 ++-
- include/linux/miscdevice.h | 1 +
- 4 files changed, 7 insertions(+), 2 deletions(-)
-
-diff --git a/Documentation/admin-guide/devices.txt b/Documentation/admin-guide/devices.txt
-index 839054923530..13841636ce92 100644
---- a/Documentation/admin-guide/devices.txt
-+++ b/Documentation/admin-guide/devices.txt
-@@ -376,8 +376,9 @@
- 240 = /dev/userio Serio driver testing device
- 241 = /dev/vhost-vsock Host kernel driver for virtio vsock
- 242 = /dev/rfkill Turning off radio transmissions (rfkill)
-+ 243 = /dev/ntsync NT synchronization primitive device
+Date: Mon, 19 Feb 2024 16:38:02 -0600
+Message-Id: <20240219223833.95710-1-zfigura@codeweavers.com>
+MIME-Version: 1.0
+Content-Type: text/plain; charset="utf-8"
+Content-Transfer-Encoding: 7bit
+
+This patch series introduces a new char misc driver, /dev/ntsync, which is used
+to implement Windows NT synchronization primitives.
+
+ Documentation/userspace-api/index.rst | 1 +
+ Documentation/userspace-api/ioctl/ioctl-number.rst | 2 +
+ Documentation/userspace-api/ntsync.rst | 399 ++++++
+ MAINTAINERS | 9 +
+ drivers/misc/Kconfig | 11 +
+ drivers/misc/Makefile | 1 +
+ drivers/misc/ntsync.c | 1159 ++++++++++++++++
+ include/uapi/linux/ntsync.h | 62 +
+ tools/testing/selftests/Makefile | 1 +
+ tools/testing/selftests/drivers/ntsync/Makefile | 8 +
+ tools/testing/selftests/drivers/ntsync/config | 1 +
+ tools/testing/selftests/drivers/ntsync/ntsync.c | 1407 ++++++++++++++++++++
+ 12 files changed, 3061 insertions(+)
+diff --git a/Documentation/userspace-api/index.rst b/Documentation/userspace-api/index.rst
+index 09f61bd2ac2e..f5a72ed27def 100644
+--- a/Documentation/userspace-api/index.rst
++++ b/Documentation/userspace-api/index.rst
+@@ -34,6 +34,7 @@ place where this information is gathered.
+ tee
+ isapnp
+ dcdbas
++ ntsync
-- 243-254 Reserved for local use
-+ 244-254 Reserved for local use
- 255 Reserved for MISC_DYNAMIC_MINOR
+ .. only:: subproject and html
- 11 char Raw keyboard device (Linux/SPARC only)
diff --git a/Documentation/userspace-api/ioctl/ioctl-number.rst b/Documentation/userspace-api/ioctl/ioctl-number.rst
-index 4ea5b837399a..055482769b35 100644
+index 457e16f06e04..2f5c6994f042 100644
--- a/Documentation/userspace-api/ioctl/ioctl-number.rst
+++ b/Documentation/userspace-api/ioctl/ioctl-number.rst
-@@ -375,6 +375,8 @@ Code Seq# Include File Comments
- <mailto:thomas@winischhofer.net>
- 0xF6 all LTTng Linux Trace Toolkit Next Generation
- <mailto:mathieu.desnoyers@efficios.com>
-+0xF7 00-1F uapi/linux/ntsync.h NT synchronization primitives
+@@ -173,6 +173,8 @@ Code Seq# Include File Comments
+ 'M' 00-0F drivers/video/fsl-diu-fb.h conflict!
+ 'N' 00-1F drivers/usb/scanner.h
+ 'N' 40-7F drivers/block/nvme.c
++'N' 80-8F uapi/linux/ntsync.h NT synchronization primitives
+ <mailto:wine-devel@winehq.org>
- 0xF8 all arch/x86/include/uapi/asm/amd_hsmp.h AMD HSMP EPYC system management interface driver
- <mailto:nchatrad@amd.com>
- 0xFD all linux/dm-ioctl.h
-diff --git a/drivers/misc/ntsync.c b/drivers/misc/ntsync.c
-index 9424c6210e51..84b498e2b2d5 100644
---- a/drivers/misc/ntsync.c
-+++ b/drivers/misc/ntsync.c
-@@ -40,7 +40,7 @@ static const struct file_operations ntsync_fops = {
- };
-
- static struct miscdevice ntsync_misc = {
-- .minor = MISC_DYNAMIC_MINOR,
-+ .minor = NTSYNC_MINOR,
- .name = NTSYNC_NAME,
- .fops = &ntsync_fops,
- };
-@@ -51,3 +51,4 @@ MODULE_AUTHOR("Elizabeth Figura");
- MODULE_DESCRIPTION("Kernel driver for NT synchronization primitives");
- MODULE_LICENSE("GPL");
- MODULE_ALIAS("devname:" NTSYNC_NAME);
-+MODULE_ALIAS_MISCDEV(NTSYNC_MINOR);
-diff --git a/include/linux/miscdevice.h b/include/linux/miscdevice.h
-index c0fea6ca5076..fe5d9366fdf7 100644
---- a/include/linux/miscdevice.h
-+++ b/include/linux/miscdevice.h
-@@ -71,6 +71,7 @@
- #define USERIO_MINOR 240
- #define VHOST_VSOCK_MINOR 241
- #define RFKILL_MINOR 242
-+#define NTSYNC_MINOR 243
- #define MISC_DYNAMIC_MINOR 255
-
- struct device;
---
-2.43.0
-
-From a5f6ffc3056884b48bb9161bc1246d841d9ed961 Mon Sep 17 00:00:00 2001
-From: Elizabeth Figura <zfigura@codeweavers.com>
-Date: Fri, 5 Mar 2021 11:15:39 -0600
-Subject: [PATCH 03/32] ntsync: Introduce NTSYNC_IOC_CREATE_SEM and
- NTSYNC_IOC_DELETE.
-
-These correspond to the NT syscalls NtCreateSemaphore() and NtClose().
-Unlike those functions, however, these ioctls do not handle object names, or
-lookup of existing objects, or handle reference counting, but simply create the
-underlying primitive. The user space emulator is expected to implement those
-functions if they are required.
----
- drivers/misc/ntsync.c | 117 ++++++++++++++++++++++++++++++++++++
- include/uapi/linux/ntsync.h | 25 ++++++++
- 2 files changed, 142 insertions(+)
- create mode 100644 include/uapi/linux/ntsync.h
-
-diff --git a/drivers/misc/ntsync.c b/drivers/misc/ntsync.c
-index 84b498e2b2d5..3287b94be351 100644
---- a/drivers/misc/ntsync.c
-+++ b/drivers/misc/ntsync.c
-@@ -8,23 +8,140 @@
- #include <linux/fs.h>
- #include <linux/miscdevice.h>
- #include <linux/module.h>
-+#include <linux/slab.h>
-+#include <linux/xarray.h>
-+#include <uapi/linux/ntsync.h>
-
- #define NTSYNC_NAME "ntsync"
-
-+enum ntsync_type {
-+ NTSYNC_TYPE_SEM,
-+};
-+
-+struct ntsync_obj {
-+ struct rcu_head rhead;
-+ struct kref refcount;
-+
-+ enum ntsync_type type;
-+
-+ union {
-+ struct {
-+ __u32 count;
-+ __u32 max;
-+ } sem;
-+ } u;
-+};
-+
-+struct ntsync_device {
-+ struct xarray objects;
-+};
-+
-+static void destroy_obj(struct kref *ref)
-+{
-+ struct ntsync_obj *obj = container_of(ref, struct ntsync_obj, refcount);
+ 'O' 00-06 mtd/ubi-user.h UBI
+ 'P' all linux/soundcard.h conflict!
+ 'P' 60-6F sound/sscape_ioctl.h conflict!
+diff --git a/Documentation/userspace-api/ntsync.rst b/Documentation/userspace-api/ntsync.rst
+new file mode 100644
+index 000000000000..202c2350d3af
+--- /dev/null
++++ b/Documentation/userspace-api/ntsync.rst
+@@ -0,0 +1,399 @@
++===================================
++NT synchronization primitive driver
++===================================
+
-+ kfree_rcu(obj, rhead);
-+}
++This page documents the user-space API for the ntsync driver.
+
-+static void put_obj(struct ntsync_obj *obj)
-+{
-+ kref_put(&obj->refcount, destroy_obj);
-+}
++ntsync is a support driver for emulation of NT synchronization
++primitives by user-space NT emulators. It exists because implementation
++in user-space, using existing tools, cannot match Windows performance
++while offering accurate semantics. It is implemented entirely in
++software, and does not drive any hardware device.
+
- static int ntsync_char_open(struct inode *inode, struct file *file)
- {
-+ struct ntsync_device *dev;
++This interface is meant as a compatibility tool only, and should not
++be used for general synchronization. Instead use generic, versatile
++interfaces such as futex(2) and poll(2).
+
-+ dev = kzalloc(sizeof(*dev), GFP_KERNEL);
-+ if (!dev)
-+ return -ENOMEM;
++Synchronization primitives
++==========================
+
-+ xa_init_flags(&dev->objects, XA_FLAGS_ALLOC);
++The ntsync driver exposes three types of synchronization primitives:
++semaphores, mutexes, and events.
+
-+ file->private_data = dev;
- return nonseekable_open(inode, file);
- }
-
- static int ntsync_char_release(struct inode *inode, struct file *file)
- {
-+ struct ntsync_device *dev = file->private_data;
-+ struct ntsync_obj *obj;
-+ unsigned long id;
++A semaphore holds a single volatile 32-bit counter, and a static 32-bit
++integer denoting the maximum value. It is considered signaled when the
++counter is nonzero. The counter is decremented by one when a wait is
++satisfied. Both the initial and maximum count are established when the
++semaphore is created.
+
-+ xa_for_each(&dev->objects, id, obj)
-+ put_obj(obj);
++A mutex holds a volatile 32-bit recursion count, and a volatile 32-bit
++identifier denoting its owner. A mutex is considered signaled when its
++owner is zero (indicating that it is not owned). The recursion count is
++incremented when a wait is satisfied, and ownership is set to the given
++identifier.
+
-+ xa_destroy(&dev->objects);
++A mutex also holds an internal flag denoting whether its previous owner
++has died; such a mutex is said to be abandoned. Owner death is not
++tracked automatically based on thread death, but rather must be
++communicated using ``NTSYNC_IOC_MUTEX_KILL``. An abandoned mutex is
++inherently considered unowned.
+
-+ kfree(dev);
++Except for the "unowned" semantics of zero, the actual value of the
++owner identifier is not interpreted by the ntsync driver at all. The
++intended use is to store a thread identifier; however, the ntsync
++driver does not actually validate that a calling thread provides
++consistent or unique identifiers.
+
-+ return 0;
-+}
++An event holds a volatile boolean state denoting whether it is signaled
++or not. There are two types of events, auto-reset and manual-reset. An
++auto-reset event is designaled when a wait is satisfied; a manual-reset
++event is not. The event type is specified when the event is created.
+
-+static void init_obj(struct ntsync_obj *obj)
-+{
-+ kref_init(&obj->refcount);
-+}
++Unless specified otherwise, all operations on an object are atomic and
++totally ordered with respect to other operations on the same object.
+
-+static int ntsync_create_sem(struct ntsync_device *dev, void __user *argp)
-+{
-+ struct ntsync_sem_args __user *user_args = argp;
-+ struct ntsync_sem_args args;
-+ struct ntsync_obj *sem;
-+ __u32 id;
-+ int ret;
++Objects are represented by files. When all file descriptors to an
++object are closed, that object is deleted.
+
-+ if (copy_from_user(&args, argp, sizeof(args)))
-+ return -EFAULT;
++Char device
++===========
+
-+ if (args.count > args.max)
-+ return -EINVAL;
++The ntsync driver creates a single char device /dev/ntsync. Each file
++description opened on the device represents a unique instance intended
++to back an individual NT virtual machine. Objects created by one ntsync
++instance may only be used with other objects created by the same
++instance.
+
-+ sem = kzalloc(sizeof(*sem), GFP_KERNEL);
-+ if (!sem)
-+ return -ENOMEM;
++ioctl reference
++===============
+
-+ init_obj(sem);
-+ sem->type = NTSYNC_TYPE_SEM;
-+ sem->u.sem.count = args.count;
-+ sem->u.sem.max = args.max;
++All operations on the device are done through ioctls. There are four
++structures used in ioctl calls::
+
-+ ret = xa_alloc(&dev->objects, &id, sem, xa_limit_32b, GFP_KERNEL);
-+ if (ret < 0) {
-+ kfree(sem);
-+ return ret;
-+ }
++ struct ntsync_sem_args {
++ __u32 sem;
++ __u32 count;
++ __u32 max;
++ };
+
-+ return put_user(id, &user_args->sem);
-+}
++ struct ntsync_mutex_args {
++ __u32 mutex;
++ __u32 owner;
++ __u32 count;
++ };
+
-+static int ntsync_delete(struct ntsync_device *dev, void __user *argp)
-+{
-+ struct ntsync_obj *obj;
-+ __u32 id;
++ struct ntsync_event_args {
++ __u32 event;
++ __u32 signaled;
++ __u32 manual;
++ };
+
-+ if (get_user(id, (__u32 __user *)argp))
-+ return -EFAULT;
++ struct ntsync_wait_args {
++ __u64 timeout;
++ __u64 objs;
++ __u32 count;
++ __u32 owner;
++ __u32 index;
++ __u32 alert;
++ __u32 flags;
++ __u32 pad;
++ };
+
-+ obj = xa_erase(&dev->objects, id);
-+ if (!obj)
-+ return -EINVAL;
++Depending on the ioctl, members of the structure may be used as input,
++output, or not at all. All ioctls return 0 on success.
+
-+ put_obj(obj);
- return 0;
- }
-
- static long ntsync_char_ioctl(struct file *file, unsigned int cmd,
- unsigned long parm)
- {
-+ struct ntsync_device *dev = file->private_data;
-+ void __user *argp = (void __user *)parm;
++The ioctls on the device file are as follows:
+
- switch (cmd) {
-+ case NTSYNC_IOC_CREATE_SEM:
-+ return ntsync_create_sem(dev, argp);
-+ case NTSYNC_IOC_DELETE:
-+ return ntsync_delete(dev, argp);
- default:
- return -ENOIOCTLCMD;
- }
-diff --git a/include/uapi/linux/ntsync.h b/include/uapi/linux/ntsync.h
-new file mode 100644
-index 000000000000..d97afc138dcc
---- /dev/null
-+++ b/include/uapi/linux/ntsync.h
-@@ -0,0 +1,25 @@
-+/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
-+/*
-+ * Kernel support for NT synchronization primitive emulation
-+ *
-+ * Copyright (C) 2021-2022 Elizabeth Figura
-+ */
++.. c:macro:: NTSYNC_IOC_CREATE_SEM
+
-+#ifndef __LINUX_NTSYNC_H
-+#define __LINUX_NTSYNC_H
++ Create a semaphore object. Takes a pointer to struct
++ :c:type:`ntsync_sem_args`, which is used as follows:
+
-+#include <linux/types.h>
++ .. list-table::
+
-+struct ntsync_sem_args {
-+ __u32 sem;
-+ __u32 count;
-+ __u32 max;
-+};
++ * - ``sem``
++ - On output, contains a file descriptor to the created semaphore.
++ * - ``count``
++ - Initial count of the semaphore.
++ * - ``max``
++ - Maximum count of the semaphore.
+
-+#define NTSYNC_IOC_BASE 0xf7
++ Fails with ``EINVAL`` if ``count`` is greater than ``max``.
+
-+#define NTSYNC_IOC_CREATE_SEM _IOWR(NTSYNC_IOC_BASE, 0, \
-+ struct ntsync_sem_args)
-+#define NTSYNC_IOC_DELETE _IOW (NTSYNC_IOC_BASE, 1, __u32)
++.. c:macro:: NTSYNC_IOC_CREATE_MUTEX
+
-+#endif
---
-2.43.0
-
-From 81b4a45e9f5ab9275e42e0edb6cbf6073c44d38e Mon Sep 17 00:00:00 2001
-From: Elizabeth Figura <zfigura@codeweavers.com>
-Date: Fri, 5 Mar 2021 11:22:42 -0600
-Subject: [PATCH 04/32] ntsync: Introduce NTSYNC_IOC_PUT_SEM.
-
-This corresponds to the NT syscall NtReleaseSemaphore().
----
- drivers/misc/ntsync.c | 76 +++++++++++++++++++++++++++++++++++++
- include/uapi/linux/ntsync.h | 2 +
- 2 files changed, 78 insertions(+)
-
-diff --git a/drivers/misc/ntsync.c b/drivers/misc/ntsync.c
-index 3287b94be351..d1c91c2a4f1a 100644
---- a/drivers/misc/ntsync.c
-+++ b/drivers/misc/ntsync.c
-@@ -21,9 +21,11 @@ enum ntsync_type {
- struct ntsync_obj {
- struct rcu_head rhead;
- struct kref refcount;
-+ spinlock_t lock;
-
- enum ntsync_type type;
-
-+ /* The following fields are protected by the object lock. */
- union {
- struct {
- __u32 count;
-@@ -36,6 +38,19 @@ struct ntsync_device {
- struct xarray objects;
- };
-
-+static struct ntsync_obj *get_obj(struct ntsync_device *dev, __u32 id)
-+{
-+ struct ntsync_obj *obj;
++ Create a mutex object. Takes a pointer to struct
++ :c:type:`ntsync_mutex_args`, which is used as follows:
+
-+ rcu_read_lock();
-+ obj = xa_load(&dev->objects, id);
-+ if (obj && !kref_get_unless_zero(&obj->refcount))
-+ obj = NULL;
-+ rcu_read_unlock();
++ .. list-table::
+
-+ return obj;
-+}
++ * - ``mutex``
++ - On output, contains a file descriptor to the created mutex.
++ * - ``count``
++ - Initial recursion count of the mutex.
++ * - ``owner``
++ - Initial owner of the mutex.
+
- static void destroy_obj(struct kref *ref)
- {
- struct ntsync_obj *obj = container_of(ref, struct ntsync_obj, refcount);
-@@ -48,6 +63,18 @@ static void put_obj(struct ntsync_obj *obj)
- kref_put(&obj->refcount, destroy_obj);
- }
-
-+static struct ntsync_obj *get_obj_typed(struct ntsync_device *dev, __u32 id,
-+ enum ntsync_type type)
-+{
-+ struct ntsync_obj *obj = get_obj(dev, id);
++ If ``owner`` is nonzero and ``count`` is zero, or if ``owner`` is
++ zero and ``count`` is nonzero, the function fails with ``EINVAL``.
+
-+ if (obj && obj->type != type) {
-+ put_obj(obj);
-+ return NULL;
-+ }
-+ return obj;
-+}
++.. c:macro:: NTSYNC_IOC_CREATE_EVENT
+
- static int ntsync_char_open(struct inode *inode, struct file *file)
- {
- struct ntsync_device *dev;
-@@ -81,6 +108,7 @@ static int ntsync_char_release(struct inode *inode, struct file *file)
- static void init_obj(struct ntsync_obj *obj)
- {
- kref_init(&obj->refcount);
-+ spin_lock_init(&obj->lock);
- }
-
- static int ntsync_create_sem(struct ntsync_device *dev, void __user *argp)
-@@ -131,6 +159,52 @@ static int ntsync_delete(struct ntsync_device *dev, void __user *argp)
- return 0;
- }
-
-+/*
-+ * Actually change the semaphore state, returning -EOVERFLOW if it is made
-+ * invalid.
-+ */
-+static int put_sem_state(struct ntsync_obj *sem, __u32 count)
-+{
-+ lockdep_assert_held(&sem->lock);
++ Create an event object. Takes a pointer to struct
++ :c:type:`ntsync_event_args`, which is used as follows:
+
-+ if (sem->u.sem.count + count < sem->u.sem.count ||
-+ sem->u.sem.count + count > sem->u.sem.max)
-+ return -EOVERFLOW;
++ .. list-table::
+
-+ sem->u.sem.count += count;
-+ return 0;
-+}
++ * - ``event``
++ - On output, contains a file descriptor to the created event.
++ * - ``signaled``
++ - If nonzero, the event is initially signaled, otherwise
++ nonsignaled.
++ * - ``manual``
++ - If nonzero, the event is a manual-reset event, otherwise
++ auto-reset.
+
-+static int ntsync_put_sem(struct ntsync_device *dev, void __user *argp)
-+{
-+ struct ntsync_sem_args __user *user_args = argp;
-+ struct ntsync_sem_args args;
-+ struct ntsync_obj *sem;
-+ __u32 prev_count;
-+ int ret;
++The ioctls on the individual objects are as follows:
+
-+ if (copy_from_user(&args, argp, sizeof(args)))
-+ return -EFAULT;
++.. c:macro:: NTSYNC_IOC_SEM_POST
+
-+ sem = get_obj_typed(dev, args.sem, NTSYNC_TYPE_SEM);
-+ if (!sem)
-+ return -EINVAL;
++ Post to a semaphore object. Takes a pointer to a 32-bit integer,
++ which on input holds the count to be added to the semaphore, and on
++ output contains its previous count.
+
-+ spin_lock(&sem->lock);
++ If adding to the semaphore's current count would raise the latter
++ past the semaphore's maximum count, the ioctl fails with
++ ``EOVERFLOW`` and the semaphore is not affected. If raising the
++ semaphore's count causes it to become signaled, eligible threads
++ waiting on this semaphore will be woken and the semaphore's count
++ decremented appropriately.
+
-+ prev_count = sem->u.sem.count;
-+ ret = put_sem_state(sem, args.count);
++.. c:macro:: NTSYNC_IOC_MUTEX_UNLOCK
+
-+ spin_unlock(&sem->lock);
++ Release a mutex object. Takes a pointer to struct
++ :c:type:`ntsync_mutex_args`, which is used as follows:
+
-+ put_obj(sem);
++ .. list-table::
+
-+ if (!ret && put_user(prev_count, &user_args->count))
-+ ret = -EFAULT;
++ * - ``mutex``
++ - Ignored.
++ * - ``owner``
++ - Specifies the owner trying to release this mutex.
++ * - ``count``
++ - On output, contains the previous recursion count.
+
-+ return ret;
-+}
++ If ``owner`` is zero, the ioctl fails with ``EINVAL``. If ``owner``
++ is not the current owner of the mutex, the ioctl fails with
++ ``EPERM``.
+
- static long ntsync_char_ioctl(struct file *file, unsigned int cmd,
- unsigned long parm)
- {
-@@ -142,6 +216,8 @@ static long ntsync_char_ioctl(struct file *file, unsigned int cmd,
- return ntsync_create_sem(dev, argp);
- case NTSYNC_IOC_DELETE:
- return ntsync_delete(dev, argp);
-+ case NTSYNC_IOC_PUT_SEM:
-+ return ntsync_put_sem(dev, argp);
- default:
- return -ENOIOCTLCMD;
- }
-diff --git a/include/uapi/linux/ntsync.h b/include/uapi/linux/ntsync.h
-index d97afc138dcc..8c610d65f8ef 100644
---- a/include/uapi/linux/ntsync.h
-+++ b/include/uapi/linux/ntsync.h
-@@ -21,5 +21,7 @@ struct ntsync_sem_args {
- #define NTSYNC_IOC_CREATE_SEM _IOWR(NTSYNC_IOC_BASE, 0, \
- struct ntsync_sem_args)
- #define NTSYNC_IOC_DELETE _IOW (NTSYNC_IOC_BASE, 1, __u32)
-+#define NTSYNC_IOC_PUT_SEM _IOWR(NTSYNC_IOC_BASE, 2, \
-+ struct ntsync_sem_args)
-
- #endif
---
-2.43.0
-
-From 68f1adf9a8e440dcb00b6665b8bc0f8aee275857 Mon Sep 17 00:00:00 2001
-From: Elizabeth Figura <zfigura@codeweavers.com>
-Date: Fri, 5 Mar 2021 11:31:44 -0600
-Subject: [PATCH 05/32] ntsync: Introduce NTSYNC_IOC_WAIT_ANY.
-
-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.
-Those features have been split out into separate patches to ease review.
----
- drivers/misc/ntsync.c | 229 ++++++++++++++++++++++++++++++++++++
- include/uapi/linux/ntsync.h | 13 ++
- 2 files changed, 242 insertions(+)
-
-diff --git a/drivers/misc/ntsync.c b/drivers/misc/ntsync.c
-index d1c91c2a4f1a..2e8d3c2d51a4 100644
---- a/drivers/misc/ntsync.c
-+++ b/drivers/misc/ntsync.c
-@@ -23,6 +23,8 @@ struct ntsync_obj {
- struct kref refcount;
- spinlock_t lock;
-
-+ struct list_head any_waiters;
++ The mutex's count will be decremented by one. If decrementing the
++ mutex's count causes it to become zero, the mutex is marked as
++ unowned and signaled, and eligible threads waiting on it will be
++ woken as appropriate.
+
- enum ntsync_type type;
-
- /* The following fields are protected by the object lock. */
-@@ -34,6 +36,28 @@ struct ntsync_obj {
- } u;
- };
-
-+struct ntsync_q_entry {
-+ struct list_head node;
-+ struct ntsync_q *q;
-+ struct ntsync_obj *obj;
-+ __u32 index;
-+};
++.. c:macro:: NTSYNC_IOC_SET_EVENT
+
-+struct ntsync_q {
-+ struct task_struct *task;
-+ __u32 owner;
++ Signal an event object. Takes a pointer to a 32-bit integer, which on
++ output contains the previous state of the event.
+
-+ /*
-+ * Protected via atomic_cmpxchg(). Only the thread that wins the
-+ * compare-and-swap may actually change object states and wake this
-+ * task.
-+ */
-+ atomic_t signaled;
++ Eligible threads will be woken, and auto-reset events will be
++ designaled appropriately.
+
-+ __u32 count;
-+ struct ntsync_q_entry entries[];
-+};
++.. c:macro:: NTSYNC_IOC_RESET_EVENT
+
- struct ntsync_device {
- struct xarray objects;
- };
-@@ -109,6 +133,26 @@ static void init_obj(struct ntsync_obj *obj)
- {
- kref_init(&obj->refcount);
- spin_lock_init(&obj->lock);
-+ INIT_LIST_HEAD(&obj->any_waiters);
-+}
++ Designal an event object. Takes a pointer to a 32-bit integer, which
++ on output contains the previous state of the event.
+
-+static void try_wake_any_sem(struct ntsync_obj *sem)
-+{
-+ struct ntsync_q_entry *entry;
++.. c:macro:: NTSYNC_IOC_PULSE_EVENT
+
-+ lockdep_assert_held(&sem->lock);
++ Wake threads waiting on an event object while leaving it in an
++ unsignaled state. Takes a pointer to a 32-bit integer, which on
++ output contains the previous state of the event.
+
-+ list_for_each_entry(entry, &sem->any_waiters, node) {
-+ struct ntsync_q *q = entry->q;
++ A pulse operation can be thought of as a set followed by a reset,
++ performed as a single atomic operation. If two threads are waiting on
++ an auto-reset event which is pulsed, only one will be woken. If two
++ threads are waiting a manual-reset event which is pulsed, both will
++ be woken. However, in both cases, the event will be unsignaled
++ afterwards, and a simultaneous read operation will always report the
++ event as unsignaled.
+
-+ if (!sem->u.sem.count)
-+ break;
++.. c:macro:: NTSYNC_IOC_READ_SEM
+
-+ if (atomic_cmpxchg(&q->signaled, -1, entry->index) == -1) {
-+ sem->u.sem.count--;
-+ wake_up_process(q->task);
-+ }
-+ }
- }
-
- static int ntsync_create_sem(struct ntsync_device *dev, void __user *argp)
-@@ -194,6 +238,8 @@ static int ntsync_put_sem(struct ntsync_device *dev, void __user *argp)
-
- prev_count = sem->u.sem.count;
- ret = put_sem_state(sem, args.count);
-+ if (!ret)
-+ try_wake_any_sem(sem);
-
- spin_unlock(&sem->lock);
-
-@@ -205,6 +251,187 @@ static int ntsync_put_sem(struct ntsync_device *dev, void __user *argp)
- return ret;
- }
-
-+static int ntsync_schedule(const struct ntsync_q *q, ktime_t *timeout)
-+{
-+ int ret = 0;
++ Read the current state of a semaphore object. Takes a pointer to
++ struct :c:type:`ntsync_sem_args`, which is used as follows:
+
-+ do {
-+ if (signal_pending(current)) {
-+ ret = -ERESTARTSYS;
-+ break;
-+ }
++ .. list-table::
+
-+ set_current_state(TASK_INTERRUPTIBLE);
-+ if (atomic_read(&q->signaled) != -1) {
-+ ret = 0;
-+ break;
-+ }
-+ ret = schedule_hrtimeout(timeout, HRTIMER_MODE_ABS);
-+ } while (ret < 0);
-+ __set_current_state(TASK_RUNNING);
++ * - ``sem``
++ - Ignored.
++ * - ``count``
++ - On output, contains the current count of the semaphore.
++ * - ``max``
++ - On output, contains the maximum count of the semaphore.
+
-+ return ret;
-+}
++.. c:macro:: NTSYNC_IOC_READ_MUTEX
+
-+/*
-+ * Allocate and initialize the ntsync_q structure, but do not queue us yet.
-+ * Also, calculate the relative timeout.
-+ */
-+static int setup_wait(struct ntsync_device *dev,
-+ const struct ntsync_wait_args *args,
-+ ktime_t *ret_timeout, struct ntsync_q **ret_q)
-+{
-+ const __u32 count = args->count;
-+ struct ntsync_q *q;
-+ ktime_t timeout = 0;
-+ __u32 *ids;
-+ __u32 i, j;
++ Read the current state of a mutex object. Takes a pointer to struct
++ :c:type:`ntsync_mutex_args`, which is used as follows:
+
-+ if (!args->owner || args->pad)
-+ return -EINVAL;
++ .. list-table::
+
-+ if (args->count > NTSYNC_MAX_WAIT_COUNT)
-+ return -EINVAL;
++ * - ``mutex``
++ - Ignored.
++ * - ``owner``
++ - On output, contains the current owner of the mutex, or zero
++ if the mutex is not currently owned.
++ * - ``count``
++ - On output, contains the current recursion count of the mutex.
+
-+ if (args->timeout) {
-+ struct timespec64 to;
++ If the mutex is marked as abandoned, the function fails with
++ ``EOWNERDEAD``. In this case, ``count`` and ``owner`` are set to
++ zero.
+
-+ if (get_timespec64(&to, u64_to_user_ptr(args->timeout)))
-+ return -EFAULT;
-+ if (!timespec64_valid(&to))
-+ return -EINVAL;
++.. c:macro:: NTSYNC_IOC_READ_EVENT
+
-+ timeout = timespec64_to_ns(&to);
-+ }
++ Read the current state of an event object. Takes a pointer to struct
++ :c:type:`ntsync_event_args`, which is used as follows:
+
-+ ids = kmalloc_array(count, sizeof(*ids), GFP_KERNEL);
-+ if (!ids)
-+ return -ENOMEM;
-+ if (copy_from_user(ids, u64_to_user_ptr(args->objs),
-+ array_size(count, sizeof(*ids)))) {
-+ kfree(ids);
-+ return -EFAULT;
-+ }
++ .. list-table::
+
-+ q = kmalloc(struct_size(q, entries, count), GFP_KERNEL);
-+ if (!q) {
-+ kfree(ids);
-+ return -ENOMEM;
-+ }
-+ q->task = current;
-+ q->owner = args->owner;
-+ atomic_set(&q->signaled, -1);
-+ q->count = count;
++ * - ``event``
++ - Ignored.
++ * - ``signaled``
++ - On output, contains the current state of the event.
++ * - ``manual``
++ - On output, contains 1 if the event is a manual-reset event,
++ and 0 otherwise.
+
-+ for (i = 0; i < count; i++) {
-+ struct ntsync_q_entry *entry = &q->entries[i];
-+ struct ntsync_obj *obj = get_obj(dev, ids[i]);
++.. c:macro:: NTSYNC_IOC_KILL_OWNER
+
-+ if (!obj)
-+ goto err;
++ Mark a mutex as unowned and abandoned if it is owned by the given
++ owner. Takes an input-only pointer to a 32-bit integer denoting the
++ owner. If the owner is zero, the ioctl fails with ``EINVAL``. If the
++ owner does not own the mutex, the function fails with ``EPERM``.
+
-+ entry->obj = obj;
-+ entry->q = q;
-+ entry->index = i;
-+ }
++ Eligible threads waiting on the mutex will be woken as appropriate
++ (and such waits will fail with ``EOWNERDEAD``, as described below).
+
-+ kfree(ids);
++.. c:macro:: NTSYNC_IOC_WAIT_ANY
+
-+ *ret_q = q;
-+ *ret_timeout = timeout;
-+ return 0;
++ Poll on any of a list of objects, atomically acquiring at most one.
++ Takes a pointer to struct :c:type:`ntsync_wait_args`, which is
++ used as follows:
+
-+err:
-+ for (j = 0; j < i; j++)
-+ put_obj(q->entries[j].obj);
-+ kfree(ids);
-+ kfree(q);
-+ return -EINVAL;
-+}
++ .. list-table::
+
-+static void try_wake_any_obj(struct ntsync_obj *obj)
-+{
-+ switch (obj->type) {
-+ case NTSYNC_TYPE_SEM:
-+ try_wake_any_sem(obj);
-+ break;
-+ }
-+}
++ * - ``timeout``
++ - Absolute timeout in nanoseconds. If ``NTSYNC_WAIT_REALTIME``
++ is set, the timeout is measured against the REALTIME clock;
++ otherwise it is measured against the MONOTONIC clock. If the
++ timeout is equal to or earlier than the current time, the
++ function returns immediately without sleeping. If ``timeout``
++ is U64_MAX, the function will sleep until an object is
++ signaled, and will not fail with ``ETIMEDOUT``.
++ * - ``objs``
++ - Pointer to an array of ``count`` file descriptors
++ (specified as an integer so that the structure has the same
++ size regardless of architecture). If any object is
++ invalid, the function fails with ``EINVAL``.
++ * - ``count``
++ - Number of objects specified in the ``objs`` array.
++ If greater than ``NTSYNC_MAX_WAIT_COUNT``, the function fails
++ with ``EINVAL``.
++ * - ``owner``
++ - Mutex owner identifier. If any object in ``objs`` is a mutex,
++ the ioctl will attempt to acquire that mutex on behalf of
++ ``owner``. If ``owner`` is zero, the ioctl fails with
++ ``EINVAL``.
++ * - ``index``
++ - On success, contains the index (into ``objs``) of the object
++ which was signaled. If ``alert`` was signaled instead,
++ this contains ``count``.
++ * - ``alert``
++ - Optional event object file descriptor. If nonzero, this
++ specifies an "alert" event object which, if signaled, will
++ terminate the wait. If nonzero, the identifier must point to a
++ valid event.
++ * - ``flags``
++ - Zero or more flags. Currently the only flag is
++ ``NTSYNC_WAIT_REALTIME``, which causes the timeout to be
++ measured against the REALTIME clock instead of MONOTONIC.
++ * - ``pad``
++ - Unused, must be set to zero.
++
++ This function attempts to acquire one of the given objects. If unable
++ to do so, it sleeps until an object becomes signaled, subsequently
++ acquiring it, or the timeout expires. In the latter case the ioctl
++ fails with ``ETIMEDOUT``. The function only acquires one object, even
++ if multiple objects are signaled.
++
++ A semaphore is considered to be signaled if its count is nonzero, and
++ is acquired by decrementing its count by one. A mutex is considered
++ to be signaled if it is unowned or if its owner matches the ``owner``
++ argument, and is acquired by incrementing its recursion count by one
++ and setting its owner to the ``owner`` argument. An auto-reset event
++ is acquired by designaling it; a manual-reset event is not affected
++ by acquisition.
+
-+static int ntsync_wait_any(struct ntsync_device *dev, void __user *argp)
-+{
-+ struct ntsync_wait_args args;
-+ struct ntsync_q *q;
-+ ktime_t timeout;
-+ int signaled;
-+ __u32 i;
-+ int ret;
++ Acquisition is atomic and totally ordered with respect to other
++ operations on the same object. If two wait operations (with different
++ ``owner`` identifiers) are queued on the same mutex, only one is
++ signaled. If two wait operations are queued on the same semaphore,
++ and a value of one is posted to it, only one is signaled. The order
++ in which threads are signaled is not specified.
+
-+ if (copy_from_user(&args, argp, sizeof(args)))
-+ return -EFAULT;
++ If an abandoned mutex is acquired, the ioctl fails with
++ ``EOWNERDEAD``. Although this is a failure return, the function may
++ otherwise be considered successful. The mutex is marked as owned by
++ the given owner (with a recursion count of 1) and as no longer
++ abandoned, and ``index`` is still set to the index of the mutex.
+
-+ ret = setup_wait(dev, &args, &timeout, &q);
-+ if (ret < 0)
-+ return ret;
++ The ``alert`` argument is an "extra" event which can terminate the
++ wait, independently of all other objects. If members of ``objs`` and
++ ``alert`` are both simultaneously signaled, a member of ``objs`` will
++ always be given priority and acquired first.
+
-+ /* queue ourselves */
++ It is valid to pass the same object more than once, including by
++ passing the same event in the ``objs`` array and in ``alert``. If a
++ wakeup occurs due to that object being signaled, ``index`` is set to
++ the lowest index corresponding to that object.
+
-+ for (i = 0; i < args.count; i++) {
-+ struct ntsync_q_entry *entry = &q->entries[i];
-+ struct ntsync_obj *obj = entry->obj;
++ The function may fail with ``EINTR`` if a signal is received.
+
-+ spin_lock(&obj->lock);
-+ list_add_tail(&entry->node, &obj->any_waiters);
-+ spin_unlock(&obj->lock);
-+ }
++.. c:macro:: NTSYNC_IOC_WAIT_ALL
+
-+ /* check if we are already signaled */
++ Poll on a list of objects, atomically acquiring all of them. Takes a
++ pointer to struct :c:type:`ntsync_wait_args`, which is used
++ identically to ``NTSYNC_IOC_WAIT_ANY``, except that ``index`` is
++ always filled with zero on success if not woken via alert.
+
-+ for (i = 0; i < args.count; i++) {
-+ struct ntsync_obj *obj = q->entries[i].obj;
++ This function attempts to simultaneously acquire all of the given
++ objects. If unable to do so, it sleeps until all objects become
++ simultaneously signaled, subsequently acquiring them, or the timeout
++ expires. In the latter case the ioctl fails with ``ETIMEDOUT`` and no
++ objects are modified.
+
-+ if (atomic_read(&q->signaled) != -1)
-+ break;
++ Objects may become signaled and subsequently designaled (through
++ acquisition by other threads) while this thread is sleeping. Only
++ once all objects are simultaneously signaled does the ioctl acquire
++ them and return. The entire acquisition is atomic and totally ordered
++ with respect to other operations on any of the given objects.
++
++ If an abandoned mutex is acquired, the ioctl fails with
++ ``EOWNERDEAD``. Similarly to ``NTSYNC_IOC_WAIT_ANY``, all objects are
++ nevertheless marked as acquired. Note that if multiple mutex objects
++ are specified, there is no way to know which were marked as
++ abandoned.
++
++ As with "any" waits, the ``alert`` argument is an "extra" event which
++ can terminate the wait. Critically, however, an "all" wait will
++ succeed if all members in ``objs`` are signaled, *or* if ``alert`` is
++ signaled. In the latter case ``index`` will be set to ``count``. As
++ with "any" waits, if both conditions are filled, the former takes
++ priority, and objects in ``objs`` will be acquired.
+
-+ spin_lock(&obj->lock);
-+ try_wake_any_obj(obj);
-+ spin_unlock(&obj->lock);
-+ }
++ Unlike ``NTSYNC_IOC_WAIT_ANY``, it is not valid to pass the same
++ object more than once, nor is it valid to pass the same object in
++ ``objs`` and in ``alert``. If this is attempted, the function fails
++ with ``EINVAL``.
+diff --git a/MAINTAINERS b/MAINTAINERS
+index 9ed4d3868539..d83dd35d9f73 100644
+--- a/MAINTAINERS
++++ b/MAINTAINERS
+@@ -15595,6 +15595,15 @@ T: git https://github.com/Paragon-Software-Group/linux-ntfs3.git
+ F: Documentation/filesystems/ntfs3.rst
+ F: fs/ntfs3/
+
++NTSYNC SYNCHRONIZATION PRIMITIVE DRIVER
++M: Elizabeth Figura <zfigura@codeweavers.com>
++L: wine-devel@winehq.org
++S: Supported
++F: Documentation/userspace-api/ntsync.rst
++F: drivers/misc/ntsync.c
++F: include/uapi/linux/ntsync.h
++F: tools/testing/selftests/drivers/ntsync/
+
-+ /* sleep */
+ NUBUS SUBSYSTEM
+ M: Finn Thain <fthain@linux-m68k.org>
+ L: linux-m68k@lists.linux-m68k.org
+diff --git a/drivers/misc/Kconfig b/drivers/misc/Kconfig
+index 4fb291f0bf7c..801ed229ed7d 100644
+--- a/drivers/misc/Kconfig
++++ b/drivers/misc/Kconfig
+@@ -506,6 +506,17 @@ config OPEN_DICE
+
+ If unsure, say N.
+
++config NTSYNC
++ tristate "NT synchronization primitive emulation"
++ help
++ This module provides kernel support for emulation of Windows NT
++ synchronization primitives. It is not a hardware driver.
+
-+ ret = ntsync_schedule(q, args.timeout ? &timeout : NULL);
++ To compile this driver as a module, choose M here: the
++ module will be called ntsync.
+
-+ /* and finally, unqueue */
++ If unsure, say N.
+
-+ for (i = 0; i < args.count; i++) {
-+ struct ntsync_q_entry *entry = &q->entries[i];
-+ struct ntsync_obj *obj = entry->obj;
+ 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
++++ b/drivers/misc/Makefile
+@@ -59,6 +59,7 @@ obj-$(CONFIG_PVPANIC) += pvpanic/
+ obj-$(CONFIG_UACCE) += uacce/
+ obj-$(CONFIG_XILINX_SDFEC) += xilinx_sdfec.o
+ obj-$(CONFIG_HISI_HIKEY_USB) += hisi_hikey_usb.o
++obj-$(CONFIG_NTSYNC) += ntsync.o
+ obj-$(CONFIG_HI6421V600_IRQ) += hi6421v600-irq.o
+ obj-$(CONFIG_OPEN_DICE) += open-dice.o
+ obj-$(CONFIG_GP_PCI1XXXX) += mchp_pci1xxxx/
+diff --git a/drivers/misc/ntsync.c b/drivers/misc/ntsync.c
+new file mode 100644
+index 000000000000..f54c81dada3d
+--- /dev/null
++++ b/drivers/misc/ntsync.c
+@@ -0,0 +1,1159 @@
++// SPDX-License-Identifier: GPL-2.0-only
++/*
++ * ntsync.c - Kernel driver for NT synchronization primitives
++ *
++ * Copyright (C) 2024 Elizabeth Figura <zfigura@codeweavers.com>
++ */
+
-+ spin_lock(&obj->lock);
-+ list_del(&entry->node);
-+ spin_unlock(&obj->lock);
++#include <linux/anon_inodes.h>
++#include <linux/atomic.h>
++#include <linux/file.h>
++#include <linux/fs.h>
++#include <linux/hrtimer.h>
++#include <linux/ktime.h>
++#include <linux/miscdevice.h>
++#include <linux/module.h>
++#include <linux/overflow.h>
++#include <linux/sched.h>
++#include <linux/sched/signal.h>
++#include <linux/slab.h>
++#include <linux/spinlock.h>
++#include <uapi/linux/ntsync.h>
+
-+ put_obj(obj);
-+ }
++#define NTSYNC_NAME "ntsync"
+
-+ signaled = atomic_read(&q->signaled);
-+ if (signaled != -1) {
-+ struct ntsync_wait_args __user *user_args = argp;
++enum ntsync_type {
++ NTSYNC_TYPE_SEM,
++ NTSYNC_TYPE_MUTEX,
++ NTSYNC_TYPE_EVENT,
++};
+
-+ /* even if we caught a signal, we need to communicate success */
-+ ret = 0;
++/*
++ * 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.
++ * Wait operations take a reference to each object being waited on for
++ * the duration of the wait.
++ */
+
-+ if (put_user(signaled, &user_args->index))
-+ ret = -EFAULT;
-+ } else if (!ret) {
-+ ret = -ETIMEDOUT;
-+ }
++struct ntsync_obj {
++ spinlock_t lock;
+
-+ kfree(q);
-+ return ret;
-+}
++ enum ntsync_type type;
+
- static long ntsync_char_ioctl(struct file *file, unsigned int cmd,
- unsigned long parm)
- {
-@@ -218,6 +445,8 @@ static long ntsync_char_ioctl(struct file *file, unsigned int cmd,
- return ntsync_delete(dev, argp);
- case NTSYNC_IOC_PUT_SEM:
- return ntsync_put_sem(dev, argp);
-+ case NTSYNC_IOC_WAIT_ANY:
-+ return ntsync_wait_any(dev, argp);
- default:
- return -ENOIOCTLCMD;
- }
-diff --git a/include/uapi/linux/ntsync.h b/include/uapi/linux/ntsync.h
-index 8c610d65f8ef..10f07da7864e 100644
---- a/include/uapi/linux/ntsync.h
-+++ b/include/uapi/linux/ntsync.h
-@@ -16,6 +16,17 @@ struct ntsync_sem_args {
- __u32 max;
- };
-
-+struct ntsync_wait_args {
-+ __u64 timeout;
-+ __u64 objs;
-+ __u32 count;
-+ __u32 owner;
-+ __u32 index;
-+ __u32 pad;
-+};
++ struct file *file;
++ struct ntsync_device *dev;
+
-+#define NTSYNC_MAX_WAIT_COUNT 64
++ /* The following fields are protected by the object lock. */
++ union {
++ struct {
++ __u32 count;
++ __u32 max;
++ } sem;
++ struct {
++ __u32 count;
++ __u32 owner;
++ bool ownerdead;
++ } mutex;
++ struct {
++ bool manual;
++ bool signaled;
++ } event;
++ } u;
+
- #define NTSYNC_IOC_BASE 0xf7
-
- #define NTSYNC_IOC_CREATE_SEM _IOWR(NTSYNC_IOC_BASE, 0, \
-@@ -23,5 +34,7 @@ struct ntsync_sem_args {
- #define NTSYNC_IOC_DELETE _IOW (NTSYNC_IOC_BASE, 1, __u32)
- #define NTSYNC_IOC_PUT_SEM _IOWR(NTSYNC_IOC_BASE, 2, \
- struct ntsync_sem_args)
-+#define NTSYNC_IOC_WAIT_ANY _IOWR(NTSYNC_IOC_BASE, 3, \
-+ struct ntsync_wait_args)
-
- #endif
---
-2.43.0
-
-From ec146c6daf3cd94d70135965f3260f2bea90f305 Mon Sep 17 00:00:00 2001
-From: Elizabeth Figura <zfigura@codeweavers.com>
-Date: Fri, 5 Mar 2021 11:36:09 -0600
-Subject: [PATCH 06/32] ntsync: Introduce NTSYNC_IOC_WAIT_ALL.
-
-This corresponds to part of the functionality of the NT syscall
-NtWaitForMultipleObjects(). Specifically, it implements the behaviour where
-the third argument (wait_any) is FALSE, and it does not yet handle alertable
-waits.
----
- drivers/misc/ntsync.c | 241 ++++++++++++++++++++++++++++++++++--
- include/uapi/linux/ntsync.h | 2 +
- 2 files changed, 235 insertions(+), 8 deletions(-)
-
-diff --git a/drivers/misc/ntsync.c b/drivers/misc/ntsync.c
-index 2e8d3c2d51a4..2685363fae9e 100644
---- a/drivers/misc/ntsync.c
-+++ b/drivers/misc/ntsync.c
-@@ -23,7 +23,34 @@ struct ntsync_obj {
- struct kref refcount;
- spinlock_t lock;
-
+ /*
+ * any_waiters is protected by the object lock, but all_waiters is
+ * protected by the device wait_all_lock.
+ */
- struct list_head any_waiters;
++ struct list_head any_waiters;
+ struct list_head all_waiters;
+
+ /*
@@ -889,36 +596,50 @@ index 2e8d3c2d51a4..2685363fae9e 100644
+ * lock all of the objects, and that means grabbing the wait_all_lock
+ * below (and, due to lock ordering rules, before locking this object).
+ * However, wait-all is a rare operation, and grabbing the wait-all
-+ * lock for every wake would create unnecessary contention. Therefore we
-+ * first check whether all_hint is zero, and, if it is, we skip trying
-+ * to wake "all" waiters.
++ * lock for every wake would create unnecessary contention.
++ * Therefore we first check whether all_hint is zero, and, if it is,
++ * we skip trying to wake "all" waiters.
+ *
+ * This hint isn't protected by any lock. It might change during the
+ * course of a wake, but there's no meaningful race there; it's only a
+ * hint.
+ *
+ * Since wait requests must originate from user-space threads, we're
-+ * limited here by PID_MAX_LIMIT, so there's no risk of saturation.
++ * limited here by PID_MAX_LIMIT, so there's no risk of overflow.
+ */
+ atomic_t all_hint;
-
- enum ntsync_type type;
-
-@@ -54,11 +81,25 @@ struct ntsync_q {
- */
- atomic_t signaled;
-
++};
++
++struct ntsync_q_entry {
++ struct list_head node;
++ struct ntsync_q *q;
++ struct ntsync_obj *obj;
++ __u32 index;
++};
++
++struct ntsync_q {
++ struct task_struct *task;
++ __u32 owner;
++
++ /*
++ * Protected via atomic_cmpxchg(). Only the thread that wins the
++ * compare-and-swap may actually change object states and wake this
++ * task.
++ */
++ atomic_t signaled;
++
+ bool all;
- __u32 count;
- struct ntsync_q_entry entries[];
- };
-
- struct ntsync_device {
++ bool ownerdead;
++ __u32 count;
++ struct ntsync_q_entry entries[];
++};
++
++struct ntsync_device {
+ /*
+ * Wait-all operations must atomically grab all objects, and be totally
-+ * ordered with respect to each other and wait-any operations. If one
-+ * thread is trying to acquire several objects, another thread cannot
-+ * touch the object at the same time.
++ * ordered with respect to each other and wait-any operations.
++ * If one thread is trying to acquire several objects, another thread
++ * cannot touch the object at the same time.
+ *
+ * We achieve this by grabbing multiple object locks at the same time.
+ * However, this creates a lock ordering problem. To solve that problem,
@@ -927,27 +648,8 @@ index 2e8d3c2d51a4..2685363fae9e 100644
+ */
+ spinlock_t wait_all_lock;
+
- struct xarray objects;
- };
-
-@@ -107,6 +148,8 @@ static int ntsync_char_open(struct inode *inode, struct file *file)
- if (!dev)
- return -ENOMEM;
-
-+ spin_lock_init(&dev->wait_all_lock);
-+
- xa_init_flags(&dev->objects, XA_FLAGS_ALLOC);
-
- file->private_data = dev;
-@@ -132,8 +175,81 @@ static int ntsync_char_release(struct inode *inode, struct file *file)
- static void init_obj(struct ntsync_obj *obj)
- {
- kref_init(&obj->refcount);
-+ atomic_set(&obj->all_hint, 0);
- spin_lock_init(&obj->lock);
- INIT_LIST_HEAD(&obj->any_waiters);
-+ INIT_LIST_HEAD(&obj->all_waiters);
-+}
++ struct file *file;
++};
+
+static bool is_signaled(struct ntsync_obj *obj, __u32 owner)
+{
@@ -956,6 +658,12 @@ index 2e8d3c2d51a4..2685363fae9e 100644
+ switch (obj->type) {
+ case NTSYNC_TYPE_SEM:
+ return !!obj->u.sem.count;
++ case NTSYNC_TYPE_MUTEX:
++ if (obj->u.mutex.owner && obj->u.mutex.owner != owner)
++ return false;
++ return obj->u.mutex.count < UINT_MAX;
++ case NTSYNC_TYPE_EVENT:
++ return obj->u.event.signaled;
+ }
+
+ WARN(1, "bad object type %#x\n", obj->type);
@@ -998,6 +706,17 @@ index 2e8d3c2d51a4..2685363fae9e 100644
+ case NTSYNC_TYPE_SEM:
+ obj->u.sem.count--;
+ break;
++ case NTSYNC_TYPE_MUTEX:
++ if (obj->u.mutex.ownerdead)
++ q->ownerdead = true;
++ obj->u.mutex.ownerdead = false;
++ obj->u.mutex.count++;
++ obj->u.mutex.owner = q->owner;
++ break;
++ case NTSYNC_TYPE_EVENT:
++ if (!obj->u.event.manual)
++ obj->u.event.signaled = false;
++ break;
+ }
+ }
+ wake_up_process(q->task);
@@ -1018,260 +737,27 @@ index 2e8d3c2d51a4..2685363fae9e 100644
+
+ list_for_each_entry(entry, &obj->all_waiters, node)
+ try_wake_all(dev, entry->q, obj);
- }
-
- static void try_wake_any_sem(struct ntsync_obj *sem)
-@@ -234,14 +350,29 @@ static int ntsync_put_sem(struct ntsync_device *dev, void __user *argp)
- if (!sem)
- return -EINVAL;
-
-- spin_lock(&sem->lock);
-+ if (atomic_read(&sem->all_hint) > 0) {
-+ spin_lock(&dev->wait_all_lock);
-+ spin_lock_nest_lock(&sem->lock, &dev->wait_all_lock);
-+
-+ prev_count = sem->u.sem.count;
-+ ret = put_sem_state(sem, args.count);
-+ if (!ret) {
-+ try_wake_all_obj(dev, sem);
-+ try_wake_any_sem(sem);
-+ }
-
-- prev_count = sem->u.sem.count;
-- ret = put_sem_state(sem, args.count);
-- if (!ret)
-- try_wake_any_sem(sem);
-+ spin_unlock(&sem->lock);
-+ spin_unlock(&dev->wait_all_lock);
-+ } else {
-+ spin_lock(&sem->lock);
-
-- spin_unlock(&sem->lock);
-+ prev_count = sem->u.sem.count;
-+ ret = put_sem_state(sem, args.count);
-+ if (!ret)
-+ try_wake_any_sem(sem);
-+
-+ spin_unlock(&sem->lock);
-+ }
-
- put_obj(sem);
-
-@@ -278,7 +409,7 @@ static int ntsync_schedule(const struct ntsync_q *q, ktime_t *timeout)
- * Also, calculate the relative timeout.
- */
- static int setup_wait(struct ntsync_device *dev,
-- const struct ntsync_wait_args *args,
-+ const struct ntsync_wait_args *args, bool all,
- ktime_t *ret_timeout, struct ntsync_q **ret_q)
- {
- const __u32 count = args->count;
-@@ -321,6 +452,7 @@ static int setup_wait(struct ntsync_device *dev,
- q->task = current;
- q->owner = args->owner;
- atomic_set(&q->signaled, -1);
-+ q->all = all;
- q->count = count;
-
- for (i = 0; i < count; i++) {
-@@ -330,6 +462,16 @@ static int setup_wait(struct ntsync_device *dev,
- if (!obj)
- goto err;
-
-+ if (all) {
-+ /* Check that the objects are all distinct. */
-+ for (j = 0; j < i; j++) {
-+ if (obj == q->entries[j].obj) {
-+ put_obj(obj);
-+ goto err;
-+ }
-+ }
-+ }
++}
+
- entry->obj = obj;
- entry->q = q;
- entry->index = i;
-@@ -370,7 +512,7 @@ static int ntsync_wait_any(struct ntsync_device *dev, void __user *argp)
- if (copy_from_user(&args, argp, sizeof(args)))
- return -EFAULT;
-
-- ret = setup_wait(dev, &args, &timeout, &q);
-+ ret = setup_wait(dev, &args, false, &timeout, &q);
- if (ret < 0)
- return ret;
-
-@@ -432,6 +574,87 @@ static int ntsync_wait_any(struct ntsync_device *dev, void __user *argp)
- return ret;
- }
-
-+static int ntsync_wait_all(struct ntsync_device *dev, void __user *argp)
++static void try_wake_any_sem(struct ntsync_obj *sem)
+{
-+ struct ntsync_wait_args args;
-+ struct ntsync_q *q;
-+ ktime_t timeout;
-+ int signaled;
-+ __u32 i;
-+ int ret;
-+
-+ if (copy_from_user(&args, argp, sizeof(args)))
-+ return -EFAULT;
-+
-+ ret = setup_wait(dev, &args, true, &timeout, &q);
-+ if (ret < 0)
-+ return ret;
-+
-+ /* queue ourselves */
-+
-+ spin_lock(&dev->wait_all_lock);
-+
-+ for (i = 0; i < args.count; i++) {
-+ struct ntsync_q_entry *entry = &q->entries[i];
-+ struct ntsync_obj *obj = entry->obj;
-+
-+ atomic_inc(&obj->all_hint);
-+
-+ /*
-+ * obj->all_waiters is protected by dev->wait_all_lock rather
-+ * than obj->lock, so there is no need to acquire it here.
-+ */
-+ list_add_tail(&entry->node, &obj->all_waiters);
-+ }
-+
-+ /* check if we are already signaled */
-+
-+ try_wake_all(dev, q, NULL);
-+
-+ spin_unlock(&dev->wait_all_lock);
-+
-+ /* sleep */
-+
-+ ret = ntsync_schedule(q, args.timeout ? &timeout : NULL);
-+
-+ /* and finally, unqueue */
-+
-+ spin_lock(&dev->wait_all_lock);
-+
-+ for (i = 0; i < args.count; i++) {
-+ struct ntsync_q_entry *entry = &q->entries[i];
-+ struct ntsync_obj *obj = entry->obj;
-+
-+ /*
-+ * obj->all_waiters is protected by dev->wait_all_lock rather
-+ * than obj->lock, so there is no need to acquire it here.
-+ */
-+ list_del(&entry->node);
-+
-+ atomic_dec(&obj->all_hint);
-+
-+ put_obj(obj);
-+ }
++ struct ntsync_q_entry *entry;
+
-+ spin_unlock(&dev->wait_all_lock);
++ lockdep_assert_held(&sem->lock);
+
-+ signaled = atomic_read(&q->signaled);
-+ if (signaled != -1) {
-+ struct ntsync_wait_args __user *user_args = argp;
++ list_for_each_entry(entry, &sem->any_waiters, node) {
++ struct ntsync_q *q = entry->q;
+
-+ /* even if we caught a signal, we need to communicate success */
-+ ret = 0;
++ if (!sem->u.sem.count)
++ break;
+
-+ if (put_user(signaled, &user_args->index))
-+ ret = -EFAULT;
-+ } else if (!ret) {
-+ ret = -ETIMEDOUT;
++ if (atomic_cmpxchg(&q->signaled, -1, entry->index) == -1) {
++ sem->u.sem.count--;
++ wake_up_process(q->task);
++ }
+ }
-+
-+ kfree(q);
-+ return ret;
+}
+
- static long ntsync_char_ioctl(struct file *file, unsigned int cmd,
- unsigned long parm)
- {
-@@ -445,6 +668,8 @@ static long ntsync_char_ioctl(struct file *file, unsigned int cmd,
- return ntsync_delete(dev, argp);
- case NTSYNC_IOC_PUT_SEM:
- return ntsync_put_sem(dev, argp);
-+ case NTSYNC_IOC_WAIT_ALL:
-+ return ntsync_wait_all(dev, argp);
- case NTSYNC_IOC_WAIT_ANY:
- return ntsync_wait_any(dev, argp);
- default:
-diff --git a/include/uapi/linux/ntsync.h b/include/uapi/linux/ntsync.h
-index 10f07da7864e..a5bed5a39b21 100644
---- a/include/uapi/linux/ntsync.h
-+++ b/include/uapi/linux/ntsync.h
-@@ -36,5 +36,7 @@ struct ntsync_wait_args {
- struct ntsync_sem_args)
- #define NTSYNC_IOC_WAIT_ANY _IOWR(NTSYNC_IOC_BASE, 3, \
- struct ntsync_wait_args)
-+#define NTSYNC_IOC_WAIT_ALL _IOWR(NTSYNC_IOC_BASE, 4, \
-+ struct ntsync_wait_args)
-
- #endif
---
-2.43.0
-
-From 965d8711ba4fbb0867c8baef95129f0ff62d9419 Mon Sep 17 00:00:00 2001
-From: Elizabeth Figura <zfigura@codeweavers.com>
-Date: Fri, 5 Mar 2021 11:41:10 -0600
-Subject: [PATCH 07/32] ntsync: Introduce NTSYNC_IOC_CREATE_MUTEX.
-
-This corresponds to the NT syscall NtCreateMutant().
----
- drivers/misc/ntsync.c | 72 +++++++++++++++++++++++++++++++++++++
- include/uapi/linux/ntsync.h | 8 +++++
- 2 files changed, 80 insertions(+)
-
-diff --git a/drivers/misc/ntsync.c b/drivers/misc/ntsync.c
-index 2685363fae9e..d48f2ef41341 100644
---- a/drivers/misc/ntsync.c
-+++ b/drivers/misc/ntsync.c
-@@ -16,6 +16,7 @@
-
- enum ntsync_type {
- NTSYNC_TYPE_SEM,
-+ NTSYNC_TYPE_MUTEX,
- };
-
- struct ntsync_obj {
-@@ -60,6 +61,10 @@ struct ntsync_obj {
- __u32 count;
- __u32 max;
- } sem;
-+ struct {
-+ __u32 count;
-+ __u32 owner;
-+ } mutex;
- } u;
- };
-
-@@ -188,6 +193,10 @@ static bool is_signaled(struct ntsync_obj *obj, __u32 owner)
- switch (obj->type) {
- case NTSYNC_TYPE_SEM:
- return !!obj->u.sem.count;
-+ case NTSYNC_TYPE_MUTEX:
-+ if (obj->u.mutex.owner && obj->u.mutex.owner != owner)
-+ return false;
-+ return obj->u.mutex.count < UINT_MAX;
- }
-
- WARN(1, "bad object type %#x\n", obj->type);
-@@ -230,6 +239,10 @@ static void try_wake_all(struct ntsync_device *dev, struct ntsync_q *q,
- case NTSYNC_TYPE_SEM:
- obj->u.sem.count--;
- break;
-+ case NTSYNC_TYPE_MUTEX:
-+ obj->u.mutex.count++;
-+ obj->u.mutex.owner = q->owner;
-+ break;
- }
- }
- wake_up_process(q->task);
-@@ -271,6 +284,28 @@ static void try_wake_any_sem(struct ntsync_obj *sem)
- }
- }
-
+static void try_wake_any_mutex(struct ntsync_obj *mutex)
+{
+ struct ntsync_q_entry *entry;
@@ -1287,6 +773,9 @@ index 2685363fae9e..d48f2ef41341 100644
+ continue;
+
+ if (atomic_cmpxchg(&q->signaled, -1, entry->index) == -1) {
++ if (mutex->u.mutex.ownerdead)
++ q->ownerdead = true;
++ mutex->u.mutex.ownerdead = false;
+ mutex->u.mutex.count++;
+ mutex->u.mutex.owner = q->owner;
+ wake_up_process(q->task);
@@ -1294,119 +783,93 @@ index 2685363fae9e..d48f2ef41341 100644
+ }
+}
+
- static int ntsync_create_sem(struct ntsync_device *dev, void __user *argp)
- {
- struct ntsync_sem_args __user *user_args = argp;
-@@ -303,6 +338,38 @@ static int ntsync_create_sem(struct ntsync_device *dev, void __user *argp)
- return put_user(id, &user_args->sem);
- }
-
-+static int ntsync_create_mutex(struct ntsync_device *dev, void __user *argp)
++static void try_wake_any_event(struct ntsync_obj *event)
+{
-+ struct ntsync_mutex_args __user *user_args = argp;
-+ struct ntsync_mutex_args args;
-+ struct ntsync_obj *mutex;
-+ __u32 id;
++ struct ntsync_q_entry *entry;
++
++ lockdep_assert_held(&event->lock);
++
++ list_for_each_entry(entry, &event->any_waiters, node) {
++ struct ntsync_q *q = entry->q;
++
++ if (!event->u.event.signaled)
++ break;
++
++ if (atomic_cmpxchg(&q->signaled, -1, entry->index) == -1) {
++ if (!event->u.event.manual)
++ event->u.event.signaled = false;
++ wake_up_process(q->task);
++ }
++ }
++}
++
++/*
++ * Actually change the semaphore state, returning -EOVERFLOW if it is made
++ * invalid.
++ */
++static int post_sem_state(struct ntsync_obj *sem, __u32 count)
++{
++ __u32 sum;
++
++ lockdep_assert_held(&sem->lock);
++
++ if (check_add_overflow(sem->u.sem.count, count, &sum) ||
++ sum > sem->u.sem.max)
++ return -EOVERFLOW;
++
++ sem->u.sem.count = sum;
++ return 0;
++}
++
++static int ntsync_sem_post(struct ntsync_obj *sem, void __user *argp)
++{
++ struct ntsync_device *dev = sem->dev;
++ __u32 __user *user_args = argp;
++ __u32 prev_count;
++ __u32 args;
+ int ret;
+
+ if (copy_from_user(&args, argp, sizeof(args)))
+ return -EFAULT;
+
-+ if (!args.owner != !args.count)
++ if (sem->type != NTSYNC_TYPE_SEM)
+ return -EINVAL;
+
-+ mutex = kzalloc(sizeof(*mutex), GFP_KERNEL);
-+ if (!mutex)
-+ return -ENOMEM;
++ if (atomic_read(&sem->all_hint) > 0) {
++ spin_lock(&dev->wait_all_lock);
++ spin_lock_nest_lock(&sem->lock, &dev->wait_all_lock);
+
-+ init_obj(mutex);
-+ mutex->type = NTSYNC_TYPE_MUTEX;
-+ mutex->u.mutex.count = args.count;
-+ mutex->u.mutex.owner = args.owner;
++ prev_count = sem->u.sem.count;
++ ret = post_sem_state(sem, args);
++ if (!ret) {
++ try_wake_all_obj(dev, sem);
++ try_wake_any_sem(sem);
++ }
+
-+ ret = xa_alloc(&dev->objects, &id, mutex, xa_limit_32b, GFP_KERNEL);
-+ if (ret < 0) {
-+ kfree(mutex);
-+ return ret;
++ spin_unlock(&sem->lock);
++ spin_unlock(&dev->wait_all_lock);
++ } else {
++ spin_lock(&sem->lock);
++
++ prev_count = sem->u.sem.count;
++ ret = post_sem_state(sem, args);
++ if (!ret)
++ try_wake_any_sem(sem);
++
++ spin_unlock(&sem->lock);
+ }
+
-+ return put_user(id, &user_args->mutex);
-+}
++ if (!ret && put_user(prev_count, user_args))
++ ret = -EFAULT;
+
- static int ntsync_delete(struct ntsync_device *dev, void __user *argp)
- {
- struct ntsync_obj *obj;
-@@ -497,6 +564,9 @@ static void try_wake_any_obj(struct ntsync_obj *obj)
- case NTSYNC_TYPE_SEM:
- try_wake_any_sem(obj);
- break;
-+ case NTSYNC_TYPE_MUTEX:
-+ try_wake_any_mutex(obj);
-+ break;
- }
- }
-
-@@ -662,6 +732,8 @@ static long ntsync_char_ioctl(struct file *file, unsigned int cmd,
- void __user *argp = (void __user *)parm;
-
- switch (cmd) {
-+ case NTSYNC_IOC_CREATE_MUTEX:
-+ return ntsync_create_mutex(dev, argp);
- case NTSYNC_IOC_CREATE_SEM:
- return ntsync_create_sem(dev, argp);
- case NTSYNC_IOC_DELETE:
-diff --git a/include/uapi/linux/ntsync.h b/include/uapi/linux/ntsync.h
-index a5bed5a39b21..26d1b3d4847f 100644
---- a/include/uapi/linux/ntsync.h
-+++ b/include/uapi/linux/ntsync.h
-@@ -16,6 +16,12 @@ struct ntsync_sem_args {
- __u32 max;
- };
-
-+struct ntsync_mutex_args {
-+ __u32 mutex;
-+ __u32 owner;
-+ __u32 count;
-+};
++ return ret;
++}
+
- struct ntsync_wait_args {
- __u64 timeout;
- __u64 objs;
-@@ -38,5 +44,7 @@ struct ntsync_wait_args {
- struct ntsync_wait_args)
- #define NTSYNC_IOC_WAIT_ALL _IOWR(NTSYNC_IOC_BASE, 4, \
- struct ntsync_wait_args)
-+#define NTSYNC_IOC_CREATE_MUTEX _IOWR(NTSYNC_IOC_BASE, 5, \
-+ struct ntsync_mutex_args)
-
- #endif
---
-2.43.0
-
-From b348f2e4e4054c20f0f1852ffaa90095e1f32415 Mon Sep 17 00:00:00 2001
-From: Elizabeth Figura <zfigura@codeweavers.com>
-Date: Fri, 5 Mar 2021 11:44:41 -0600
-Subject: [PATCH 08/32] ntsync: Introduce NTSYNC_IOC_PUT_MUTEX.
-
-This corresponds to the NT syscall NtReleaseMutant().
----
- drivers/misc/ntsync.c | 67 +++++++++++++++++++++++++++++++++++++
- include/uapi/linux/ntsync.h | 2 ++
- 2 files changed, 69 insertions(+)
-
-diff --git a/drivers/misc/ntsync.c b/drivers/misc/ntsync.c
-index d48f2ef41341..28f43768d1c3 100644
---- a/drivers/misc/ntsync.c
-+++ b/drivers/misc/ntsync.c
-@@ -449,6 +449,71 @@ static int ntsync_put_sem(struct ntsync_device *dev, void __user *argp)
- return ret;
- }
-
+/*
+ * Actually change the mutex state, returning -EPERM if not the owner.
+ */
-+static int put_mutex_state(struct ntsync_obj *mutex,
-+ const struct ntsync_mutex_args *args)
++static int unlock_mutex_state(struct ntsync_obj *mutex,
++ const struct ntsync_mutex_args *args)
+{
+ lockdep_assert_held(&mutex->lock);
+
@@ -1418,11 +881,11 @@ index d48f2ef41341..28f43768d1c3 100644
+ return 0;
+}
+
-+static int ntsync_put_mutex(struct ntsync_device *dev, void __user *argp)
++static int ntsync_mutex_unlock(struct ntsync_obj *mutex, void __user *argp)
+{
+ struct ntsync_mutex_args __user *user_args = argp;
++ struct ntsync_device *dev = mutex->dev;
+ struct ntsync_mutex_args args;
-+ struct ntsync_obj *mutex;
+ __u32 prev_count;
+ int ret;
+
@@ -1431,8 +894,7 @@ index d48f2ef41341..28f43768d1c3 100644
+ if (!args.owner)
+ return -EINVAL;
+
-+ mutex = get_obj_typed(dev, args.mutex, NTSYNC_TYPE_MUTEX);
-+ if (!mutex)
++ if (mutex->type != NTSYNC_TYPE_MUTEX)
+ return -EINVAL;
+
+ if (atomic_read(&mutex->all_hint) > 0) {
@@ -1440,7 +902,7 @@ index d48f2ef41341..28f43768d1c3 100644
+ spin_lock_nest_lock(&mutex->lock, &dev->wait_all_lock);
+
+ prev_count = mutex->u.mutex.count;
-+ ret = put_mutex_state(mutex, &args);
++ ret = unlock_mutex_state(mutex, &args);
+ if (!ret) {
+ try_wake_all_obj(dev, mutex);
+ try_wake_any_mutex(mutex);
@@ -1452,943 +914,530 @@ index d48f2ef41341..28f43768d1c3 100644
+ spin_lock(&mutex->lock);
+
+ prev_count = mutex->u.mutex.count;
-+ ret = put_mutex_state(mutex, &args);
++ ret = unlock_mutex_state(mutex, &args);
+ if (!ret)
+ try_wake_any_mutex(mutex);
+
+ spin_unlock(&mutex->lock);
+ }
+
-+ put_obj(mutex);
-+
+ if (!ret && put_user(prev_count, &user_args->count))
+ ret = -EFAULT;
+
+ return ret;
+}
+
- static int ntsync_schedule(const struct ntsync_q *q, ktime_t *timeout)
- {
- int ret = 0;
-@@ -738,6 +803,8 @@ static long ntsync_char_ioctl(struct file *file, unsigned int cmd,
- return ntsync_create_sem(dev, argp);
- case NTSYNC_IOC_DELETE:
- return ntsync_delete(dev, argp);
-+ case NTSYNC_IOC_PUT_MUTEX:
-+ return ntsync_put_mutex(dev, argp);
- case NTSYNC_IOC_PUT_SEM:
- return ntsync_put_sem(dev, argp);
- case NTSYNC_IOC_WAIT_ALL:
-diff --git a/include/uapi/linux/ntsync.h b/include/uapi/linux/ntsync.h
-index 26d1b3d4847f..2e44e7e77776 100644
---- a/include/uapi/linux/ntsync.h
-+++ b/include/uapi/linux/ntsync.h
-@@ -46,5 +46,7 @@ struct ntsync_wait_args {
- struct ntsync_wait_args)
- #define NTSYNC_IOC_CREATE_MUTEX _IOWR(NTSYNC_IOC_BASE, 5, \
- struct ntsync_mutex_args)
-+#define NTSYNC_IOC_PUT_MUTEX _IOWR(NTSYNC_IOC_BASE, 6, \
-+ struct ntsync_mutex_args)
-
- #endif
---
-2.43.0
-
-From f042ca07e1744d2bb04942163e4e65fc6e624f41 Mon Sep 17 00:00:00 2001
-From: Elizabeth Figura <zfigura@codeweavers.com>
-Date: Fri, 5 Mar 2021 11:46:46 -0600
-Subject: [PATCH 09/32] ntsync: Introduce NTSYNC_IOC_KILL_OWNER.
-
-This does not correspond to any NT syscall, but rather should be called by the
-user-space NT emulator when a thread dies. It is responsible for marking any
-mutexes owned by that thread as abandoned.
----
- drivers/misc/ntsync.c | 80 ++++++++++++++++++++++++++++++++++++-
- include/uapi/linux/ntsync.h | 1 +
- 2 files changed, 79 insertions(+), 2 deletions(-)
-
-diff --git a/drivers/misc/ntsync.c b/drivers/misc/ntsync.c
-index 28f43768d1c3..1173c750c106 100644
---- a/drivers/misc/ntsync.c
-+++ b/drivers/misc/ntsync.c
-@@ -64,6 +64,7 @@ struct ntsync_obj {
- struct {
- __u32 count;
- __u32 owner;
-+ bool ownerdead;
- } mutex;
- } u;
- };
-@@ -87,6 +88,7 @@ struct ntsync_q {
- atomic_t signaled;
-
- bool all;
-+ bool ownerdead;
- __u32 count;
- struct ntsync_q_entry entries[];
- };
-@@ -240,6 +242,9 @@ static void try_wake_all(struct ntsync_device *dev, struct ntsync_q *q,
- obj->u.sem.count--;
- break;
- case NTSYNC_TYPE_MUTEX:
-+ if (obj->u.mutex.ownerdead)
-+ q->ownerdead = true;
-+ obj->u.mutex.ownerdead = false;
- obj->u.mutex.count++;
- obj->u.mutex.owner = q->owner;
- break;
-@@ -299,6 +304,9 @@ static void try_wake_any_mutex(struct ntsync_obj *mutex)
- continue;
-
- if (atomic_cmpxchg(&q->signaled, -1, entry->index) == -1) {
-+ if (mutex->u.mutex.ownerdead)
-+ q->ownerdead = true;
-+ mutex->u.mutex.ownerdead = false;
- mutex->u.mutex.count++;
- mutex->u.mutex.owner = q->owner;
- wake_up_process(q->task);
-@@ -514,6 +522,71 @@ static int ntsync_put_mutex(struct ntsync_device *dev, void __user *argp)
- return ret;
- }
-
+/*
-+ * Actually change the mutex state to mark its owner as dead.
++ * Actually change the mutex state to mark its owner as dead,
++ * returning -EPERM if not the owner.
+ */
-+static void put_mutex_ownerdead_state(struct ntsync_obj *mutex)
++static int kill_mutex_state(struct ntsync_obj *mutex, __u32 owner)
+{
+ lockdep_assert_held(&mutex->lock);
+
++ if (mutex->u.mutex.owner != owner)
++ return -EPERM;
++
+ mutex->u.mutex.ownerdead = true;
+ mutex->u.mutex.owner = 0;
+ mutex->u.mutex.count = 0;
++ return 0;
+}
+
-+static int ntsync_kill_owner(struct ntsync_device *dev, void __user *argp)
++static int ntsync_mutex_kill(struct ntsync_obj *mutex, void __user *argp)
+{
-+ struct ntsync_obj *obj;
-+ unsigned long id;
++ struct ntsync_device *dev = mutex->dev;
+ __u32 owner;
++ int ret;
+
+ if (get_user(owner, (__u32 __user *)argp))
+ return -EFAULT;
+ if (!owner)
+ return -EINVAL;
+
-+ rcu_read_lock();
++ if (mutex->type != NTSYNC_TYPE_MUTEX)
++ return -EINVAL;
+
-+ xa_for_each(&dev->objects, id, obj) {
-+ if (!kref_get_unless_zero(&obj->refcount))
-+ continue;
++ if (atomic_read(&mutex->all_hint) > 0) {
++ spin_lock(&dev->wait_all_lock);
++ spin_lock_nest_lock(&mutex->lock, &dev->wait_all_lock);
+
-+ if (obj->type != NTSYNC_TYPE_MUTEX) {
-+ put_obj(obj);
-+ continue;
++ ret = kill_mutex_state(mutex, owner);
++ if (!ret) {
++ try_wake_all_obj(dev, mutex);
++ try_wake_any_mutex(mutex);
+ }
+
-+ if (atomic_read(&obj->all_hint) > 0) {
-+ spin_lock(&dev->wait_all_lock);
-+ spin_lock_nest_lock(&obj->lock, &dev->wait_all_lock);
++ spin_unlock(&mutex->lock);
++ spin_unlock(&dev->wait_all_lock);
++ } else {
++ spin_lock(&mutex->lock);
+
-+ if (obj->u.mutex.owner == owner) {
-+ put_mutex_ownerdead_state(obj);
-+ try_wake_all_obj(dev, obj);
-+ try_wake_any_mutex(obj);
-+ }
++ ret = kill_mutex_state(mutex, owner);
++ if (!ret)
++ try_wake_any_mutex(mutex);
+
-+ spin_unlock(&obj->lock);
-+ spin_unlock(&dev->wait_all_lock);
-+ } else {
-+ spin_lock(&obj->lock);
++ spin_unlock(&mutex->lock);
++ }
+
-+ if (obj->u.mutex.owner == owner) {
-+ put_mutex_ownerdead_state(obj);
-+ try_wake_any_mutex(obj);
-+ }
++ return ret;
++}
+
-+ spin_unlock(&obj->lock);
-+ }
++static int ntsync_event_set(struct ntsync_obj *event, void __user *argp, bool pulse)
++{
++ struct ntsync_device *dev = event->dev;
++ __u32 prev_state;
+
-+ put_obj(obj);
++ if (event->type != NTSYNC_TYPE_EVENT)
++ return -EINVAL;
++
++ if (atomic_read(&event->all_hint) > 0) {
++ spin_lock(&dev->wait_all_lock);
++ spin_lock_nest_lock(&event->lock, &dev->wait_all_lock);
++
++ prev_state = event->u.event.signaled;
++ event->u.event.signaled = true;
++ try_wake_all_obj(dev, event);
++ try_wake_any_event(event);
++ if (pulse)
++ event->u.event.signaled = false;
++
++ spin_unlock(&event->lock);
++ spin_unlock(&dev->wait_all_lock);
++ } else {
++ spin_lock(&event->lock);
++
++ prev_state = event->u.event.signaled;
++ event->u.event.signaled = true;
++ try_wake_any_event(event);
++ if (pulse)
++ event->u.event.signaled = false;
++
++ spin_unlock(&event->lock);
+ }
+
-+ rcu_read_unlock();
++ if (put_user(prev_state, (__u32 __user *)argp))
++ return -EFAULT;
+
+ return 0;
+}
+
- static int ntsync_schedule(const struct ntsync_q *q, ktime_t *timeout)
- {
- int ret = 0;
-@@ -585,6 +658,7 @@ static int setup_wait(struct ntsync_device *dev,
- q->owner = args->owner;
- atomic_set(&q->signaled, -1);
- q->all = all;
-+ q->ownerdead = false;
- q->count = count;
-
- for (i = 0; i < count; i++) {
-@@ -697,7 +771,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 */
-- ret = 0;
-+ ret = q->ownerdead ? -EOWNERDEAD : 0;
-
- if (put_user(signaled, &user_args->index))
- ret = -EFAULT;
-@@ -778,7 +852,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 */
-- ret = 0;
-+ ret = q->ownerdead ? -EOWNERDEAD : 0;
-
- if (put_user(signaled, &user_args->index))
- ret = -EFAULT;
-@@ -803,6 +877,8 @@ static long ntsync_char_ioctl(struct file *file, unsigned int cmd,
- return ntsync_create_sem(dev, argp);
- case NTSYNC_IOC_DELETE:
- return ntsync_delete(dev, argp);
-+ case NTSYNC_IOC_KILL_OWNER:
-+ return ntsync_kill_owner(dev, argp);
- case NTSYNC_IOC_PUT_MUTEX:
- return ntsync_put_mutex(dev, argp);
- case NTSYNC_IOC_PUT_SEM:
-diff --git a/include/uapi/linux/ntsync.h b/include/uapi/linux/ntsync.h
-index 2e44e7e77776..fec9a3993322 100644
---- a/include/uapi/linux/ntsync.h
-+++ b/include/uapi/linux/ntsync.h
-@@ -48,5 +48,6 @@ struct ntsync_wait_args {
- struct ntsync_mutex_args)
- #define NTSYNC_IOC_PUT_MUTEX _IOWR(NTSYNC_IOC_BASE, 6, \
- struct ntsync_mutex_args)
-+#define NTSYNC_IOC_KILL_OWNER _IOW (NTSYNC_IOC_BASE, 7, __u32)
-
- #endif
---
-2.43.0
-
-From fc85bff90ef0348584fca122f96aa3ec1a5fe604 Mon Sep 17 00:00:00 2001
-From: Elizabeth Figura <zfigura@codeweavers.com>
-Date: Fri, 5 Mar 2021 11:47:55 -0600
-Subject: [PATCH 10/32] ntsync: Introduce NTSYNC_IOC_READ_SEM.
-
-This corresponds to the NT syscall NtQuerySemaphore().
----
- drivers/misc/ntsync.c | 29 +++++++++++++++++++++++++++++
- include/uapi/linux/ntsync.h | 2 ++
- 2 files changed, 31 insertions(+)
-
-diff --git a/drivers/misc/ntsync.c b/drivers/misc/ntsync.c
-index 1173c750c106..70c60f294bb2 100644
---- a/drivers/misc/ntsync.c
-+++ b/drivers/misc/ntsync.c
-@@ -522,6 +522,33 @@ static int ntsync_put_mutex(struct ntsync_device *dev, void __user *argp)
- return ret;
- }
-
-+static int ntsync_read_sem(struct ntsync_device *dev, void __user *argp)
++static int ntsync_event_reset(struct ntsync_obj *event, void __user *argp)
+{
-+ struct ntsync_sem_args __user *user_args = argp;
-+ struct ntsync_sem_args args;
-+ struct ntsync_obj *sem;
-+ __u32 id;
++ __u32 prev_state;
++
++ if (event->type != NTSYNC_TYPE_EVENT)
++ return -EINVAL;
++
++ spin_lock(&event->lock);
++
++ prev_state = event->u.event.signaled;
++ event->u.event.signaled = false;
++
++ spin_unlock(&event->lock);
+
-+ if (get_user(id, &user_args->sem))
++ if (put_user(prev_state, (__u32 __user *)argp))
+ return -EFAULT;
+
-+ sem = get_obj_typed(dev, id, NTSYNC_TYPE_SEM);
-+ if (!sem)
++ return 0;
++}
++
++static int ntsync_sem_read(struct ntsync_obj *sem, void __user *argp)
++{
++ struct ntsync_sem_args __user *user_args = argp;
++ struct ntsync_sem_args args;
++
++ if (sem->type != NTSYNC_TYPE_SEM)
+ return -EINVAL;
+
-+ args.sem = id;
++ args.sem = 0;
+ spin_lock(&sem->lock);
+ args.count = sem->u.sem.count;
+ args.max = sem->u.sem.max;
+ spin_unlock(&sem->lock);
+
-+ put_obj(sem);
-+
+ if (copy_to_user(user_args, &args, sizeof(args)))
+ return -EFAULT;
+ return 0;
+}
+
- /*
- * Actually change the mutex state to mark its owner as dead.
- */
-@@ -883,6 +910,8 @@ static long ntsync_char_ioctl(struct file *file, unsigned int cmd,
- return ntsync_put_mutex(dev, argp);
- case NTSYNC_IOC_PUT_SEM:
- return ntsync_put_sem(dev, argp);
-+ case NTSYNC_IOC_READ_SEM:
-+ return ntsync_read_sem(dev, argp);
- case NTSYNC_IOC_WAIT_ALL:
- return ntsync_wait_all(dev, argp);
- case NTSYNC_IOC_WAIT_ANY:
-diff --git a/include/uapi/linux/ntsync.h b/include/uapi/linux/ntsync.h
-index fec9a3993322..b84a57c13d80 100644
---- a/include/uapi/linux/ntsync.h
-+++ b/include/uapi/linux/ntsync.h
-@@ -49,5 +49,7 @@ struct ntsync_wait_args {
- #define NTSYNC_IOC_PUT_MUTEX _IOWR(NTSYNC_IOC_BASE, 6, \
- struct ntsync_mutex_args)
- #define NTSYNC_IOC_KILL_OWNER _IOW (NTSYNC_IOC_BASE, 7, __u32)
-+#define NTSYNC_IOC_READ_SEM _IOWR(NTSYNC_IOC_BASE, 8, \
-+ struct ntsync_sem_args)
-
- #endif
---
-2.43.0
-
-From 4acc2acbbcacf80485e7d443c0a2327d50879c64 Mon Sep 17 00:00:00 2001
-From: Elizabeth Figura <zfigura@codeweavers.com>
-Date: Fri, 5 Mar 2021 11:48:10 -0600
-Subject: [PATCH 11/32] ntsync: Introduce NTSYNC_IOC_READ_MUTEX.
-
-This corresponds to the NT syscall NtQueryMutant().
----
- drivers/misc/ntsync.c | 31 +++++++++++++++++++++++++++++++
- include/uapi/linux/ntsync.h | 2 ++
- 2 files changed, 33 insertions(+)
-
-diff --git a/drivers/misc/ntsync.c b/drivers/misc/ntsync.c
-index 70c60f294bb2..88adb52bad93 100644
---- a/drivers/misc/ntsync.c
-+++ b/drivers/misc/ntsync.c
-@@ -549,6 +549,35 @@ static int ntsync_read_sem(struct ntsync_device *dev, void __user *argp)
- return 0;
- }
-
-+static int ntsync_read_mutex(struct ntsync_device *dev, void __user *argp)
++static int ntsync_mutex_read(struct ntsync_obj *mutex, void __user *argp)
+{
+ struct ntsync_mutex_args __user *user_args = argp;
+ struct ntsync_mutex_args args;
-+ struct ntsync_obj *mutex;
-+ __u32 id;
+ int ret;
+
-+ if (get_user(id, &user_args->mutex))
-+ return -EFAULT;
-+
-+ mutex = get_obj_typed(dev, id, NTSYNC_TYPE_MUTEX);
-+ if (!mutex)
++ if (mutex->type != NTSYNC_TYPE_MUTEX)
+ return -EINVAL;
+
-+ args.mutex = id;
++ args.mutex = 0;
+ spin_lock(&mutex->lock);
+ args.count = mutex->u.mutex.count;
+ args.owner = mutex->u.mutex.owner;
+ ret = mutex->u.mutex.ownerdead ? -EOWNERDEAD : 0;
+ spin_unlock(&mutex->lock);
+
-+ put_obj(mutex);
-+
+ if (copy_to_user(user_args, &args, sizeof(args)))
+ return -EFAULT;
+ return ret;
+}
+
- /*
- * Actually change the mutex state to mark its owner as dead.
- */
-@@ -910,6 +939,8 @@ static long ntsync_char_ioctl(struct file *file, unsigned int cmd,
- return ntsync_put_mutex(dev, argp);
- case NTSYNC_IOC_PUT_SEM:
- return ntsync_put_sem(dev, argp);
-+ case NTSYNC_IOC_READ_MUTEX:
-+ return ntsync_read_mutex(dev, argp);
- case NTSYNC_IOC_READ_SEM:
- return ntsync_read_sem(dev, argp);
- case NTSYNC_IOC_WAIT_ALL:
-diff --git a/include/uapi/linux/ntsync.h b/include/uapi/linux/ntsync.h
-index b84a57c13d80..fa57f190c80e 100644
---- a/include/uapi/linux/ntsync.h
-+++ b/include/uapi/linux/ntsync.h
-@@ -51,5 +51,7 @@ struct ntsync_wait_args {
- #define NTSYNC_IOC_KILL_OWNER _IOW (NTSYNC_IOC_BASE, 7, __u32)
- #define NTSYNC_IOC_READ_SEM _IOWR(NTSYNC_IOC_BASE, 8, \
- struct ntsync_sem_args)
-+#define NTSYNC_IOC_READ_MUTEX _IOWR(NTSYNC_IOC_BASE, 9, \
-+ struct ntsync_mutex_args)
-
- #endif
---
-2.43.0
-
-From 1bc3fa335b3c30797586eebbf533135ccddcb934 Mon Sep 17 00:00:00 2001
-From: Elizabeth Figura <zfigura@codeweavers.com>
-Date: Wed, 19 Jan 2022 18:21:03 -0600
-Subject: [PATCH 12/32] ntsync: Introduce NTSYNC_IOC_CREATE_EVENT.
-
-This corresponds to the NT syscall NtCreateEvent().
----
- drivers/misc/ntsync.c | 65 +++++++++++++++++++++++++++++++++++++
- include/uapi/linux/ntsync.h | 8 +++++
- 2 files changed, 73 insertions(+)
-
-diff --git a/drivers/misc/ntsync.c b/drivers/misc/ntsync.c
-index 88adb52bad93..3778dbe617e9 100644
---- a/drivers/misc/ntsync.c
-+++ b/drivers/misc/ntsync.c
-@@ -17,6 +17,7 @@
- enum ntsync_type {
- NTSYNC_TYPE_SEM,
- NTSYNC_TYPE_MUTEX,
-+ NTSYNC_TYPE_EVENT,
- };
-
- struct ntsync_obj {
-@@ -66,6 +67,10 @@ struct ntsync_obj {
- __u32 owner;
- bool ownerdead;
- } mutex;
-+ struct {
-+ bool manual;
-+ bool signaled;
-+ } event;
- } u;
- };
-
-@@ -199,6 +204,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;
-+ case NTSYNC_TYPE_EVENT:
-+ return obj->u.event.signaled;
- }
-
- WARN(1, "bad object type %#x\n", obj->type);
-@@ -248,6 +255,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;
-+ case NTSYNC_TYPE_EVENT:
-+ if (!obj->u.event.manual)
-+ obj->u.event.signaled = false;
-+ break;
- }
- }
- wake_up_process(q->task);
-@@ -314,6 +325,26 @@ static void try_wake_any_mutex(struct ntsync_obj *mutex)
- }
- }
-
-+static void try_wake_any_event(struct ntsync_obj *event)
++static int ntsync_event_read(struct ntsync_obj *event, void __user *argp)
+{
-+ struct ntsync_q_entry *entry;
++ struct ntsync_event_args __user *user_args = argp;
++ struct ntsync_event_args args;
+
-+ lockdep_assert_held(&event->lock);
++ if (event->type != NTSYNC_TYPE_EVENT)
++ return -EINVAL;
+
-+ list_for_each_entry(entry, &event->any_waiters, node) {
-+ struct ntsync_q *q = entry->q;
++ args.event = 0;
++ spin_lock(&event->lock);
++ args.manual = event->u.event.manual;
++ args.signaled = event->u.event.signaled;
++ spin_unlock(&event->lock);
+
-+ if (!event->u.event.signaled)
-+ break;
++ if (copy_to_user(user_args, &args, sizeof(args)))
++ return -EFAULT;
++ return 0;
++}
+
-+ if (atomic_cmpxchg(&q->signaled, -1, entry->index) == -1) {
-+ if (!event->u.event.manual)
-+ event->u.event.signaled = false;
-+ wake_up_process(q->task);
-+ }
++static int ntsync_obj_release(struct inode *inode, struct file *file)
++{
++ struct ntsync_obj *obj = file->private_data;
++
++ fput(obj->dev->file);
++ kfree(obj);
++
++ return 0;
++}
++
++static long ntsync_obj_ioctl(struct file *file, unsigned int cmd,
++ unsigned long parm)
++{
++ struct ntsync_obj *obj = file->private_data;
++ void __user *argp = (void __user *)parm;
++
++ switch (cmd) {
++ case NTSYNC_IOC_SEM_POST:
++ return ntsync_sem_post(obj, argp);
++ case NTSYNC_IOC_SEM_READ:
++ return ntsync_sem_read(obj, argp);
++ case NTSYNC_IOC_MUTEX_UNLOCK:
++ return ntsync_mutex_unlock(obj, argp);
++ case NTSYNC_IOC_MUTEX_KILL:
++ return ntsync_mutex_kill(obj, argp);
++ case NTSYNC_IOC_MUTEX_READ:
++ return ntsync_mutex_read(obj, argp);
++ case NTSYNC_IOC_EVENT_SET:
++ return ntsync_event_set(obj, argp, false);
++ case NTSYNC_IOC_EVENT_RESET:
++ return ntsync_event_reset(obj, argp);
++ case NTSYNC_IOC_EVENT_PULSE:
++ return ntsync_event_set(obj, argp, true);
++ case NTSYNC_IOC_EVENT_READ:
++ return ntsync_event_read(obj, argp);
++ default:
++ return -ENOIOCTLCMD;
+ }
+}
+
- static int ntsync_create_sem(struct ntsync_device *dev, void __user *argp)
- {
- struct ntsync_sem_args __user *user_args = argp;
-@@ -378,6 +409,35 @@ static int ntsync_create_mutex(struct ntsync_device *dev, void __user *argp)
- return put_user(id, &user_args->mutex);
- }
-
-+static int ntsync_create_event(struct ntsync_device *dev, void __user *argp)
++static const struct file_operations ntsync_obj_fops = {
++ .owner = THIS_MODULE,
++ .release = ntsync_obj_release,
++ .unlocked_ioctl = ntsync_obj_ioctl,
++ .compat_ioctl = compat_ptr_ioctl,
++ .llseek = no_llseek,
++};
++
++static struct ntsync_obj *ntsync_alloc_obj(struct ntsync_device *dev,
++ enum ntsync_type type)
+{
-+ struct ntsync_event_args __user *user_args = argp;
-+ struct ntsync_event_args args;
-+ struct ntsync_obj *event;
-+ __u32 id;
-+ int ret;
++ struct ntsync_obj *obj;
+
-+ if (copy_from_user(&args, argp, sizeof(args)))
-+ return -EFAULT;
++ obj = kzalloc(sizeof(*obj), GFP_KERNEL);
++ if (!obj)
++ return NULL;
++ obj->type = type;
++ obj->dev = dev;
++ get_file(dev->file);
++ spin_lock_init(&obj->lock);
++ INIT_LIST_HEAD(&obj->any_waiters);
++ INIT_LIST_HEAD(&obj->all_waiters);
++ atomic_set(&obj->all_hint, 0);
+
-+ event = kzalloc(sizeof(*event), GFP_KERNEL);
-+ if (!event)
-+ return -ENOMEM;
++ return obj;
++}
+
-+ init_obj(event);
-+ event->type = NTSYNC_TYPE_EVENT;
-+ event->u.event.manual = args.manual;
-+ event->u.event.signaled = args.signaled;
++static int ntsync_obj_get_fd(struct ntsync_obj *obj)
++{
++ struct file *file;
++ int fd;
+
-+ ret = xa_alloc(&dev->objects, &id, event, xa_limit_32b, GFP_KERNEL);
-+ if (ret < 0) {
-+ kfree(event);
-+ return ret;
++ fd = get_unused_fd_flags(O_CLOEXEC);
++ if (fd < 0)
++ return fd;
++ file = anon_inode_getfile("ntsync", &ntsync_obj_fops, obj, O_RDWR);
++ if (IS_ERR(file)) {
++ put_unused_fd(fd);
++ return PTR_ERR(file);
+ }
++ obj->file = file;
++ fd_install(fd, file);
+
-+ return put_user(id, &user_args->event);
++ return fd;
+}
+
- static int ntsync_delete(struct ntsync_device *dev, void __user *argp)
- {
- struct ntsync_obj *obj;
-@@ -762,6 +822,9 @@ static void try_wake_any_obj(struct ntsync_obj *obj)
- case NTSYNC_TYPE_MUTEX:
- try_wake_any_mutex(obj);
- break;
-+ case NTSYNC_TYPE_EVENT:
-+ try_wake_any_event(obj);
-+ break;
- }
- }
-
-@@ -927,6 +990,8 @@ static long ntsync_char_ioctl(struct file *file, unsigned int cmd,
- void __user *argp = (void __user *)parm;
-
- switch (cmd) {
-+ case NTSYNC_IOC_CREATE_EVENT:
-+ return ntsync_create_event(dev, argp);
- case NTSYNC_IOC_CREATE_MUTEX:
- 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 fa57f190c80e..c7cbdeff32c9 100644
---- a/include/uapi/linux/ntsync.h
-+++ b/include/uapi/linux/ntsync.h
-@@ -22,6 +22,12 @@ struct ntsync_mutex_args {
- __u32 count;
- };
-
-+struct ntsync_event_args {
-+ __u32 event;
-+ __u32 manual;
-+ __u32 signaled;
-+};
-+
- struct ntsync_wait_args {
- __u64 timeout;
- __u64 objs;
-@@ -53,5 +59,7 @@ struct ntsync_wait_args {
- struct ntsync_sem_args)
- #define NTSYNC_IOC_READ_MUTEX _IOWR(NTSYNC_IOC_BASE, 9, \
- struct ntsync_mutex_args)
-+#define NTSYNC_IOC_CREATE_EVENT _IOWR(NTSYNC_IOC_BASE, 10, \
-+ struct ntsync_event_args)
-
- #endif
---
-2.43.0
-
-From d4d9e2196dc13cf89b8181eb4eee86d4a26ef026 Mon Sep 17 00:00:00 2001
-From: Elizabeth Figura <zfigura@codeweavers.com>
-Date: Wed, 19 Jan 2022 18:43:30 -0600
-Subject: [PATCH 13/32] ntsync: Introduce NTSYNC_IOC_SET_EVENT.
-
-This corresponds to the NT syscall NtSetEvent().
----
- drivers/misc/ntsync.c | 45 +++++++++++++++++++++++++++++++++++++
- include/uapi/linux/ntsync.h | 2 ++
- 2 files changed, 47 insertions(+)
-
-diff --git a/drivers/misc/ntsync.c b/drivers/misc/ntsync.c
-index 3778dbe617e9..cd6478bd93bd 100644
---- a/drivers/misc/ntsync.c
-+++ b/drivers/misc/ntsync.c
-@@ -703,6 +703,49 @@ static int ntsync_kill_owner(struct ntsync_device *dev, void __user *argp)
- return 0;
- }
-
-+static int ntsync_set_event(struct ntsync_device *dev, void __user *argp)
++static int ntsync_create_sem(struct ntsync_device *dev, void __user *argp)
+{
-+ struct ntsync_event_args __user *user_args = argp;
-+ struct ntsync_event_args args;
-+ struct ntsync_obj *event;
-+ bool prev_state;
++ struct ntsync_sem_args __user *user_args = argp;
++ struct ntsync_sem_args args;
++ struct ntsync_obj *sem;
++ int fd;
+
+ if (copy_from_user(&args, argp, sizeof(args)))
+ return -EFAULT;
+
-+ event = get_obj_typed(dev, args.event, NTSYNC_TYPE_EVENT);
-+ if (!event)
++ if (args.count > args.max)
+ return -EINVAL;
+
-+ if (atomic_read(&event->all_hint) > 0) {
-+ spin_lock(&dev->wait_all_lock);
-+ spin_lock_nest_lock(&event->lock, &dev->wait_all_lock);
-+
-+ prev_state = event->u.event.signaled;
-+ event->u.event.signaled = true;
-+ try_wake_all_obj(dev, event);
-+ try_wake_any_event(event);
++ sem = ntsync_alloc_obj(dev, NTSYNC_TYPE_SEM);
++ if (!sem)
++ return -ENOMEM;
++ sem->u.sem.count = args.count;
++ sem->u.sem.max = args.max;
++ fd = ntsync_obj_get_fd(sem);
++ if (fd < 0) {
++ kfree(sem);
++ return fd;
++ }
+
-+ spin_unlock(&event->lock);
-+ spin_unlock(&dev->wait_all_lock);
-+ } else {
-+ spin_lock(&event->lock);
++ return put_user(fd, &user_args->sem);
++}
+
-+ prev_state = event->u.event.signaled;
-+ event->u.event.signaled = true;
-+ try_wake_any_event(event);
++static int ntsync_create_mutex(struct ntsync_device *dev, void __user *argp)
++{
++ struct ntsync_mutex_args __user *user_args = argp;
++ struct ntsync_mutex_args args;
++ struct ntsync_obj *mutex;
++ int fd;
+
-+ spin_unlock(&event->lock);
-+ }
++ if (copy_from_user(&args, argp, sizeof(args)))
++ return -EFAULT;
+
-+ put_obj(event);
++ if (!args.owner != !args.count)
++ return -EINVAL;
+
-+ if (put_user(prev_state, &user_args->signaled))
-+ return -EFAULT;
++ mutex = ntsync_alloc_obj(dev, NTSYNC_TYPE_MUTEX);
++ if (!mutex)
++ return -ENOMEM;
++ mutex->u.mutex.count = args.count;
++ mutex->u.mutex.owner = args.owner;
++ fd = ntsync_obj_get_fd(mutex);
++ if (fd < 0) {
++ kfree(mutex);
++ return fd;
++ }
+
-+ return 0;
++ return put_user(fd, &user_args->mutex);
+}
+
- static int ntsync_schedule(const struct ntsync_q *q, ktime_t *timeout)
- {
- int ret = 0;
-@@ -1008,6 +1051,8 @@ static long ntsync_char_ioctl(struct file *file, unsigned int cmd,
- return ntsync_read_mutex(dev, argp);
- case NTSYNC_IOC_READ_SEM:
- return ntsync_read_sem(dev, argp);
-+ case NTSYNC_IOC_SET_EVENT:
-+ return ntsync_set_event(dev, argp);
- case NTSYNC_IOC_WAIT_ALL:
- return ntsync_wait_all(dev, argp);
- case NTSYNC_IOC_WAIT_ANY:
-diff --git a/include/uapi/linux/ntsync.h b/include/uapi/linux/ntsync.h
-index c7cbdeff32c9..8a230f5d4b3f 100644
---- a/include/uapi/linux/ntsync.h
-+++ b/include/uapi/linux/ntsync.h
-@@ -61,5 +61,7 @@ struct ntsync_wait_args {
- struct ntsync_mutex_args)
- #define NTSYNC_IOC_CREATE_EVENT _IOWR(NTSYNC_IOC_BASE, 10, \
- struct ntsync_event_args)
-+#define NTSYNC_IOC_SET_EVENT _IOWR(NTSYNC_IOC_BASE, 11, \
-+ struct ntsync_event_args)
-
- #endif
---
-2.43.0
-
-From 03224658123725d6b8a27b55cd103ad782ebad7b Mon Sep 17 00:00:00 2001
-From: Elizabeth Figura <zfigura@codeweavers.com>
-Date: Wed, 19 Jan 2022 19:00:25 -0600
-Subject: [PATCH 14/32] ntsync: Introduce NTSYNC_IOC_RESET_EVENT.
-
-This corresponds to the NT syscall NtResetEvent().
----
- drivers/misc/ntsync.c | 31 +++++++++++++++++++++++++++++++
- include/uapi/linux/ntsync.h | 2 ++
- 2 files changed, 33 insertions(+)
-
-diff --git a/drivers/misc/ntsync.c b/drivers/misc/ntsync.c
-index cd6478bd93bd..151714dee0ff 100644
---- a/drivers/misc/ntsync.c
-+++ b/drivers/misc/ntsync.c
-@@ -746,6 +746,35 @@ static int ntsync_set_event(struct ntsync_device *dev, void __user *argp)
- return 0;
- }
-
-+static int ntsync_reset_event(struct ntsync_device *dev, void __user *argp)
++static int ntsync_create_event(struct ntsync_device *dev, void __user *argp)
+{
+ struct ntsync_event_args __user *user_args = argp;
+ struct ntsync_event_args args;
+ struct ntsync_obj *event;
-+ bool prev_state;
++ int fd;
+
+ if (copy_from_user(&args, argp, sizeof(args)))
+ return -EFAULT;
+
-+ event = get_obj_typed(dev, args.event, NTSYNC_TYPE_EVENT);
++ event = ntsync_alloc_obj(dev, NTSYNC_TYPE_EVENT);
+ if (!event)
-+ return -EINVAL;
++ return -ENOMEM;
++ event->u.event.manual = args.manual;
++ event->u.event.signaled = args.signaled;
++ fd = ntsync_obj_get_fd(event);
++ if (fd < 0) {
++ kfree(event);
++ return fd;
++ }
+
-+ spin_lock(&event->lock);
++ return put_user(fd, &user_args->event);
++}
+
-+ prev_state = event->u.event.signaled;
-+ event->u.event.signaled = false;
++static struct ntsync_obj *get_obj(struct ntsync_device *dev, int fd)
++{
++ struct file *file = fget(fd);
++ struct ntsync_obj *obj;
+
-+ spin_unlock(&event->lock);
++ if (file->f_op != &ntsync_obj_fops) {
++ fput(file);
++ return NULL;
++ }
+
-+ put_obj(event);
++ obj = file->private_data;
++ if (obj->dev != dev) {
++ fput(file);
++ return NULL;
++ }
+
-+ if (put_user(prev_state, &user_args->signaled))
-+ return -EFAULT;
++ return obj;
++}
+
-+ return 0;
++static void put_obj(struct ntsync_obj *obj)
++{
++ fput(obj->file);
+}
+
- static int ntsync_schedule(const struct ntsync_q *q, ktime_t *timeout)
- {
- int ret = 0;
-@@ -1051,6 +1080,8 @@ static long ntsync_char_ioctl(struct file *file, unsigned int cmd,
- return ntsync_read_mutex(dev, argp);
- case NTSYNC_IOC_READ_SEM:
- return ntsync_read_sem(dev, argp);
-+ case NTSYNC_IOC_RESET_EVENT:
-+ return ntsync_reset_event(dev, argp);
- case NTSYNC_IOC_SET_EVENT:
- return ntsync_set_event(dev, argp);
- case NTSYNC_IOC_WAIT_ALL:
-diff --git a/include/uapi/linux/ntsync.h b/include/uapi/linux/ntsync.h
-index 8a230f5d4b3f..806125856117 100644
---- a/include/uapi/linux/ntsync.h
-+++ b/include/uapi/linux/ntsync.h
-@@ -63,5 +63,7 @@ struct ntsync_wait_args {
- struct ntsync_event_args)
- #define NTSYNC_IOC_SET_EVENT _IOWR(NTSYNC_IOC_BASE, 11, \
- struct ntsync_event_args)
-+#define NTSYNC_IOC_RESET_EVENT _IOWR(NTSYNC_IOC_BASE, 12, \
-+ struct ntsync_event_args)
-
- #endif
---
-2.43.0
-
-From 16daeb0c9b8d95ab27c0c807c49ddebb5dba52c0 Mon Sep 17 00:00:00 2001
-From: Elizabeth Figura <zfigura@codeweavers.com>
-Date: Wed, 19 Jan 2022 19:10:12 -0600
-Subject: [PATCH 15/32] ntsync: Introduce NTSYNC_IOC_PULSE_EVENT.
-
-This corresponds to the NT syscall NtPulseEvent().
----
- drivers/misc/ntsync.c | 11 +++++++++--
- include/uapi/linux/ntsync.h | 2 ++
- 2 files changed, 11 insertions(+), 2 deletions(-)
-
-diff --git a/drivers/misc/ntsync.c b/drivers/misc/ntsync.c
-index 151714dee0ff..45405d01e11d 100644
---- a/drivers/misc/ntsync.c
-+++ b/drivers/misc/ntsync.c
-@@ -703,7 +703,8 @@ static int ntsync_kill_owner(struct ntsync_device *dev, void __user *argp)
- return 0;
- }
-
--static int ntsync_set_event(struct ntsync_device *dev, void __user *argp)
-+static int ntsync_set_event(struct ntsync_device *dev, void __user *argp,
-+ bool pulse)
- {
- struct ntsync_event_args __user *user_args = argp;
- struct ntsync_event_args args;
-@@ -725,6 +726,8 @@ static int ntsync_set_event(struct ntsync_device *dev, void __user *argp)
- event->u.event.signaled = true;
- try_wake_all_obj(dev, event);
- try_wake_any_event(event);
-+ if (pulse)
-+ event->u.event.signaled = false;
-
- spin_unlock(&event->lock);
- spin_unlock(&dev->wait_all_lock);
-@@ -734,6 +737,8 @@ static int ntsync_set_event(struct ntsync_device *dev, void __user *argp)
- prev_state = event->u.event.signaled;
- event->u.event.signaled = true;
- try_wake_any_event(event);
-+ if (pulse)
-+ event->u.event.signaled = false;
-
- spin_unlock(&event->lock);
- }
-@@ -1072,6 +1077,8 @@ static long ntsync_char_ioctl(struct file *file, unsigned int cmd,
- return ntsync_delete(dev, argp);
- case NTSYNC_IOC_KILL_OWNER:
- return ntsync_kill_owner(dev, argp);
-+ case NTSYNC_IOC_PULSE_EVENT:
-+ return ntsync_set_event(dev, argp, true);
- case NTSYNC_IOC_PUT_MUTEX:
- return ntsync_put_mutex(dev, argp);
- case NTSYNC_IOC_PUT_SEM:
-@@ -1083,7 +1090,7 @@ static long ntsync_char_ioctl(struct file *file, unsigned int cmd,
- case NTSYNC_IOC_RESET_EVENT:
- return ntsync_reset_event(dev, argp);
- case NTSYNC_IOC_SET_EVENT:
-- return ntsync_set_event(dev, argp);
-+ return ntsync_set_event(dev, argp, false);
- case NTSYNC_IOC_WAIT_ALL:
- return ntsync_wait_all(dev, argp);
- case NTSYNC_IOC_WAIT_ANY:
-diff --git a/include/uapi/linux/ntsync.h b/include/uapi/linux/ntsync.h
-index 806125856117..30f56b4388c8 100644
---- a/include/uapi/linux/ntsync.h
-+++ b/include/uapi/linux/ntsync.h
-@@ -65,5 +65,7 @@ struct ntsync_wait_args {
- struct ntsync_event_args)
- #define NTSYNC_IOC_RESET_EVENT _IOWR(NTSYNC_IOC_BASE, 12, \
- struct ntsync_event_args)
-+#define NTSYNC_IOC_PULSE_EVENT _IOWR(NTSYNC_IOC_BASE, 13, \
-+ struct ntsync_event_args)
-
- #endif
---
-2.43.0
-
-From c264fe3627e7032d88cd6d56f4ce6a2c2fbc30af Mon Sep 17 00:00:00 2001
-From: Elizabeth Figura <zfigura@codeweavers.com>
-Date: Wed, 19 Jan 2022 19:14:00 -0600
-Subject: [PATCH 16/32] ntsync: Introduce NTSYNC_IOC_READ_EVENT.
-
-This corresponds to the NT syscall NtQueryEvent().
----
- drivers/misc/ntsync.c | 29 +++++++++++++++++++++++++++++
- include/uapi/linux/ntsync.h | 2 ++
- 2 files changed, 31 insertions(+)
-
-diff --git a/drivers/misc/ntsync.c b/drivers/misc/ntsync.c
-index 45405d01e11d..6821d9aa967d 100644
---- a/drivers/misc/ntsync.c
-+++ b/drivers/misc/ntsync.c
-@@ -638,6 +638,33 @@ static int ntsync_read_mutex(struct ntsync_device *dev, void __user *argp)
- return ret;
- }
-
-+static int ntsync_read_event(struct ntsync_device *dev, void __user *argp)
++static int ntsync_schedule(const struct ntsync_q *q, const struct ntsync_wait_args *args)
+{
-+ struct ntsync_event_args __user *user_args = argp;
-+ struct ntsync_event_args args;
-+ struct ntsync_obj *event;
-+ __u32 id;
++ ktime_t timeout = ns_to_ktime(args->timeout);
++ clockid_t clock = CLOCK_MONOTONIC;
++ ktime_t *timeout_ptr;
++ int ret = 0;
+
-+ if (get_user(id, &user_args->event))
-+ return -EFAULT;
++ timeout_ptr = (args->timeout == U64_MAX ? NULL : &timeout);
+
-+ event = get_obj_typed(dev, id, NTSYNC_TYPE_EVENT);
-+ if (!event)
-+ return -EINVAL;
++ if (args->flags & NTSYNC_WAIT_REALTIME)
++ clock = CLOCK_REALTIME;
+
-+ args.event = id;
-+ spin_lock(&event->lock);
-+ args.manual = event->u.event.manual;
-+ args.signaled = event->u.event.signaled;
-+ spin_unlock(&event->lock);
++ do {
++ if (signal_pending(current)) {
++ ret = -ERESTARTSYS;
++ break;
++ }
+
-+ put_obj(event);
++ set_current_state(TASK_INTERRUPTIBLE);
++ if (atomic_read(&q->signaled) != -1) {
++ ret = 0;
++ break;
++ }
++ ret = schedule_hrtimeout_range_clock(timeout_ptr, 0, HRTIMER_MODE_ABS, clock);
++ } while (ret < 0);
++ __set_current_state(TASK_RUNNING);
+
-+ if (copy_to_user(user_args, &args, sizeof(args)))
-+ return -EFAULT;
-+ return 0;
++ return ret;
+}
+
- /*
- * Actually change the mutex state to mark its owner as dead.
- */
-@@ -1083,6 +1110,8 @@ static long ntsync_char_ioctl(struct file *file, unsigned int cmd,
- return ntsync_put_mutex(dev, argp);
- case NTSYNC_IOC_PUT_SEM:
- return ntsync_put_sem(dev, argp);
-+ case NTSYNC_IOC_READ_EVENT:
-+ return ntsync_read_event(dev, argp);
- case NTSYNC_IOC_READ_MUTEX:
- return ntsync_read_mutex(dev, argp);
- case NTSYNC_IOC_READ_SEM:
-diff --git a/include/uapi/linux/ntsync.h b/include/uapi/linux/ntsync.h
-index 30f56b4388c8..86c28b909777 100644
---- a/include/uapi/linux/ntsync.h
-+++ b/include/uapi/linux/ntsync.h
-@@ -67,5 +67,7 @@ struct ntsync_wait_args {
- struct ntsync_event_args)
- #define NTSYNC_IOC_PULSE_EVENT _IOWR(NTSYNC_IOC_BASE, 13, \
- struct ntsync_event_args)
-+#define NTSYNC_IOC_READ_EVENT _IOWR(NTSYNC_IOC_BASE, 14, \
-+ struct ntsync_event_args)
-
- #endif
---
-2.43.0
-
-From 198ddbebdbe3d062505bde44619da050eead04e8 Mon Sep 17 00:00:00 2001
-From: Elizabeth Figura <zfigura@codeweavers.com>
-Date: Wed, 13 Apr 2022 20:02:39 -0500
-Subject: [PATCH 17/32] ntsync: Introduce alertable waits.
-
-This implements the "alertable" feature of NtWaitForMultipleObjects().
-Alerts are implemented using events; the user-space NT emulator is expected to
-create an internal ntsync event for each thread and pass that event to wait
-functions.
----
- drivers/misc/ntsync.c | 68 ++++++++++++++++++++++++++++++++-----
- include/uapi/linux/ntsync.h | 2 +-
- 2 files changed, 60 insertions(+), 10 deletions(-)
-
-diff --git a/drivers/misc/ntsync.c b/drivers/misc/ntsync.c
-index 6821d9aa967d..6f4cb9a3ed5a 100644
---- a/drivers/misc/ntsync.c
-+++ b/drivers/misc/ntsync.c
-@@ -840,10 +840,11 @@ static int setup_wait(struct ntsync_device *dev,
- const __u32 count = args->count;
- struct ntsync_q *q;
- ktime_t timeout = 0;
++/*
++ * Allocate and initialize the ntsync_q structure, but do not queue us yet.
++ */
++static int setup_wait(struct ntsync_device *dev,
++ const struct ntsync_wait_args *args, bool all,
++ struct ntsync_q **ret_q)
++{
++ int fds[NTSYNC_MAX_WAIT_COUNT + 1];
++ const __u32 count = args->count;
++ struct ntsync_q *q;
+ __u32 total_count;
- __u32 *ids;
- __u32 i, j;
-
-- if (!args->owner || args->pad)
++ __u32 i, j;
++
+ if (!args->owner)
- return -EINVAL;
-
- if (args->count > NTSYNC_MAX_WAIT_COUNT)
-@@ -860,7 +861,11 @@ static int setup_wait(struct ntsync_device *dev,
- timeout = timespec64_to_ns(&to);
- }
-
-- ids = kmalloc_array(count, sizeof(*ids), GFP_KERNEL);
++ return -EINVAL;
++
++ if (args->pad || (args->flags & ~NTSYNC_WAIT_REALTIME))
++ return -EINVAL;
++
++ if (args->count > NTSYNC_MAX_WAIT_COUNT)
++ return -EINVAL;
++
+ total_count = count;
+ if (args->alert)
+ total_count++;
+
-+ ids = kmalloc_array(total_count, sizeof(*ids), GFP_KERNEL);
- if (!ids)
- return -ENOMEM;
- if (copy_from_user(ids, u64_to_user_ptr(args->objs),
-@@ -868,8 +873,10 @@ static int setup_wait(struct ntsync_device *dev,
- kfree(ids);
- return -EFAULT;
- }
++ if (copy_from_user(fds, u64_to_user_ptr(args->objs),
++ array_size(count, sizeof(*fds))))
++ return -EFAULT;
+ if (args->alert)
-+ ids[count] = args->alert;
-
-- q = kmalloc(struct_size(q, entries, count), GFP_KERNEL);
++ fds[count] = args->alert;
++
+ q = kmalloc(struct_size(q, entries, total_count), GFP_KERNEL);
- if (!q) {
- kfree(ids);
- return -ENOMEM;
-@@ -881,7 +888,7 @@ static int setup_wait(struct ntsync_device *dev,
- q->ownerdead = false;
- q->count = count;
-
-- for (i = 0; i < count; i++) {
++ if (!q)
++ return -ENOMEM;
++ q->task = current;
++ q->owner = args->owner;
++ atomic_set(&q->signaled, -1);
++ q->all = all;
++ q->ownerdead = false;
++ q->count = count;
++
+ for (i = 0; i < total_count; i++) {
- struct ntsync_q_entry *entry = &q->entries[i];
- struct ntsync_obj *obj = get_obj(dev, ids[i]);
-
-@@ -936,9 +943,9 @@ static int ntsync_wait_any(struct ntsync_device *dev, void __user *argp)
- {
- struct ntsync_wait_args args;
- struct ntsync_q *q;
++ struct ntsync_q_entry *entry = &q->entries[i];
++ struct ntsync_obj *obj = get_obj(dev, fds[i]);
++
++ if (!obj)
++ goto err;
++
++ if (all) {
++ /* Check that the objects are all distinct. */
++ for (j = 0; j < i; j++) {
++ if (obj == q->entries[j].obj) {
++ put_obj(obj);
++ goto err;
++ }
++ }
++ }
++
++ entry->obj = obj;
++ entry->q = q;
++ entry->index = i;
++ }
++
++ *ret_q = q;
++ return 0;
++
++err:
++ for (j = 0; j < i; j++)
++ put_obj(q->entries[j].obj);
++ kfree(q);
++ return -EINVAL;
++}
++
++static void try_wake_any_obj(struct ntsync_obj *obj)
++{
++ switch (obj->type) {
++ case NTSYNC_TYPE_SEM:
++ try_wake_any_sem(obj);
++ break;
++ case NTSYNC_TYPE_MUTEX:
++ try_wake_any_mutex(obj);
++ break;
++ case NTSYNC_TYPE_EVENT:
++ try_wake_any_event(obj);
++ break;
++ }
++}
++
++static int ntsync_wait_any(struct ntsync_device *dev, void __user *argp)
++{
++ struct ntsync_wait_args args;
+ __u32 i, total_count;
- ktime_t timeout;
- int signaled;
-- __u32 i;
- int ret;
-
- if (copy_from_user(&args, argp, sizeof(args)))
-@@ -948,9 +955,13 @@ static int ntsync_wait_any(struct ntsync_device *dev, void __user *argp)
- if (ret < 0)
- return ret;
-
++ struct ntsync_q *q;
++ int signaled;
++ int ret;
++
++ if (copy_from_user(&args, argp, sizeof(args)))
++ return -EFAULT;
++
++ ret = setup_wait(dev, &args, false, &q);
++ if (ret < 0)
++ return ret;
++
+ total_count = args.count;
+ if (args.alert)
+ total_count++;
+
- /* queue ourselves */
-
-- for (i = 0; i < args.count; i++) {
++ /* queue ourselves */
++
+ for (i = 0; i < total_count; i++) {
- struct ntsync_q_entry *entry = &q->entries[i];
- struct ntsync_obj *obj = entry->obj;
-
-@@ -959,9 +970,15 @@ static int ntsync_wait_any(struct ntsync_device *dev, void __user *argp)
- spin_unlock(&obj->lock);
- }
-
-- /* check if we are already signaled */
++ struct ntsync_q_entry *entry = &q->entries[i];
++ struct ntsync_obj *obj = entry->obj;
++
++ spin_lock(&obj->lock);
++ list_add_tail(&entry->node, &obj->any_waiters);
++ spin_unlock(&obj->lock);
++ }
++
+ /*
+ * Check if we are already signaled.
+ *
@@ -2396,25 +1445,84 @@ index 6821d9aa967d..6f4cb9a3ed5a 100644
+ * the alert event. Hence we queue the alert event last, and check
+ * objects in order.
+ */
-
-- for (i = 0; i < args.count; i++) {
++
+ for (i = 0; i < total_count; i++) {
- struct ntsync_obj *obj = q->entries[i].obj;
-
- if (atomic_read(&q->signaled) != -1)
-@@ -978,7 +995,7 @@ static int ntsync_wait_any(struct ntsync_device *dev, void __user *argp)
-
- /* and finally, unqueue */
-
-- for (i = 0; i < args.count; i++) {
++ struct ntsync_obj *obj = q->entries[i].obj;
++
++ if (atomic_read(&q->signaled) != -1)
++ break;
++
++ spin_lock(&obj->lock);
++ try_wake_any_obj(obj);
++ spin_unlock(&obj->lock);
++ }
++
++ /* sleep */
++
++ ret = ntsync_schedule(q, &args);
++
++ /* and finally, unqueue */
++
+ for (i = 0; i < total_count; i++) {
- struct ntsync_q_entry *entry = &q->entries[i];
- struct ntsync_obj *obj = entry->obj;
-
-@@ -1038,6 +1055,14 @@ static int ntsync_wait_all(struct ntsync_device *dev, void __user *argp)
- */
- list_add_tail(&entry->node, &obj->all_waiters);
- }
++ struct ntsync_q_entry *entry = &q->entries[i];
++ struct ntsync_obj *obj = entry->obj;
++
++ spin_lock(&obj->lock);
++ list_del(&entry->node);
++ spin_unlock(&obj->lock);
++
++ put_obj(obj);
++ }
++
++ signaled = atomic_read(&q->signaled);
++ if (signaled != -1) {
++ struct ntsync_wait_args __user *user_args = argp;
++
++ /* even if we caught a signal, we need to communicate success */
++ ret = q->ownerdead ? -EOWNERDEAD : 0;
++
++ if (put_user(signaled, &user_args->index))
++ ret = -EFAULT;
++ } else if (!ret) {
++ ret = -ETIMEDOUT;
++ }
++
++ kfree(q);
++ return ret;
++}
++
++static int ntsync_wait_all(struct ntsync_device *dev, void __user *argp)
++{
++ struct ntsync_wait_args args;
++ struct ntsync_q *q;
++ int signaled;
++ __u32 i;
++ int ret;
++
++ if (copy_from_user(&args, argp, sizeof(args)))
++ return -EFAULT;
++
++ ret = setup_wait(dev, &args, true, &q);
++ if (ret < 0)
++ return ret;
++
++ /* queue ourselves */
++
++ spin_lock(&dev->wait_all_lock);
++
++ for (i = 0; i < args.count; i++) {
++ struct ntsync_q_entry *entry = &q->entries[i];
++ struct ntsync_obj *obj = entry->obj;
++
++ atomic_inc(&obj->all_hint);
++
++ /*
++ * obj->all_waiters is protected by dev->wait_all_lock rather
++ * than obj->lock, so there is no need to acquire obj->lock
++ * here.
++ */
++ list_add_tail(&entry->node, &obj->all_waiters);
++ }
+ if (args.alert) {
+ struct ntsync_q_entry *entry = &q->entries[args.count];
+ struct ntsync_obj *obj = entry->obj;
@@ -2423,13 +1531,13 @@ index 6821d9aa967d..6f4cb9a3ed5a 100644
+ list_add_tail(&entry->node, &obj->any_waiters);
+ spin_unlock(&obj->lock);
+ }
-
- /* check if we are already signaled */
-
-@@ -1045,6 +1070,21 @@ static int ntsync_wait_all(struct ntsync_device *dev, void __user *argp)
-
- spin_unlock(&dev->wait_all_lock);
-
++
++ /* check if we are already signaled */
++
++ try_wake_all(dev, q, NULL);
++
++ spin_unlock(&dev->wait_all_lock);
++
+ /*
+ * Check if the alert event is signaled, making sure to do so only
+ * after checking if the other objects are signaled.
@@ -2445,13 +1553,28 @@ index 6821d9aa967d..6f4cb9a3ed5a 100644
+ }
+ }
+
- /* sleep */
-
- ret = ntsync_schedule(q, args.timeout ? &timeout : NULL);
-@@ -1067,6 +1107,16 @@ static int ntsync_wait_all(struct ntsync_device *dev, void __user *argp)
-
- put_obj(obj);
- }
++ /* sleep */
++
++ ret = ntsync_schedule(q, &args);
++
++ /* and finally, unqueue */
++
++ spin_lock(&dev->wait_all_lock);
++
++ for (i = 0; i < args.count; i++) {
++ struct ntsync_q_entry *entry = &q->entries[i];
++ struct ntsync_obj *obj = entry->obj;
++
++ /*
++ * obj->all_waiters is protected by dev->wait_all_lock rather
++ * than obj->lock, so there is no need to acquire it here.
++ */
++ list_del(&entry->node);
++
++ atomic_dec(&obj->all_hint);
++
++ put_obj(obj);
++ }
+ if (args.alert) {
+ struct ntsync_q_entry *entry = &q->entries[args.count];
+ struct ntsync_obj *obj = entry->obj;
@@ -2462,42 +1585,162 @@ index 6821d9aa967d..6f4cb9a3ed5a 100644
+
+ put_obj(obj);
+ }
-
- spin_unlock(&dev->wait_all_lock);
-
++
++ spin_unlock(&dev->wait_all_lock);
++
++ signaled = atomic_read(&q->signaled);
++ if (signaled != -1) {
++ struct ntsync_wait_args __user *user_args = argp;
++
++ /* even if we caught a signal, we need to communicate success */
++ ret = q->ownerdead ? -EOWNERDEAD : 0;
++
++ if (put_user(signaled, &user_args->index))
++ ret = -EFAULT;
++ } else if (!ret) {
++ ret = -ETIMEDOUT;
++ }
++
++ kfree(q);
++ return ret;
++}
++
++static int ntsync_char_open(struct inode *inode, struct file *file)
++{
++ struct ntsync_device *dev;
++
++ dev = kzalloc(sizeof(*dev), GFP_KERNEL);
++ if (!dev)
++ return -ENOMEM;
++
++ spin_lock_init(&dev->wait_all_lock);
++
++ file->private_data = dev;
++ dev->file = file;
++ return nonseekable_open(inode, file);
++}
++
++static int ntsync_char_release(struct inode *inode, struct file *file)
++{
++ struct ntsync_device *dev = file->private_data;
++
++ kfree(dev);
++
++ return 0;
++}
++
++static long ntsync_char_ioctl(struct file *file, unsigned int cmd,
++ unsigned long parm)
++{
++ struct ntsync_device *dev = file->private_data;
++ void __user *argp = (void __user *)parm;
++
++ switch (cmd) {
++ case NTSYNC_IOC_CREATE_EVENT:
++ return ntsync_create_event(dev, argp);
++ case NTSYNC_IOC_CREATE_MUTEX:
++ return ntsync_create_mutex(dev, argp);
++ case NTSYNC_IOC_CREATE_SEM:
++ return ntsync_create_sem(dev, argp);
++ case NTSYNC_IOC_WAIT_ALL:
++ return ntsync_wait_all(dev, argp);
++ case NTSYNC_IOC_WAIT_ANY:
++ return ntsync_wait_any(dev, argp);
++ default:
++ return -ENOIOCTLCMD;
++ }
++}
++
++static const struct file_operations ntsync_fops = {
++ .owner = THIS_MODULE,
++ .open = ntsync_char_open,
++ .release = ntsync_char_release,
++ .unlocked_ioctl = ntsync_char_ioctl,
++ .compat_ioctl = compat_ptr_ioctl,
++ .llseek = no_llseek,
++};
++
++static struct miscdevice ntsync_misc = {
++ .minor = MISC_DYNAMIC_MINOR,
++ .name = NTSYNC_NAME,
++ .fops = &ntsync_fops,
++};
++
++module_misc_device(ntsync_misc);
++
++MODULE_AUTHOR("Elizabeth Figura <zfigura@codeweavers.com>");
++MODULE_DESCRIPTION("Kernel driver for NT synchronization primitives");
++MODULE_LICENSE("GPL");
diff --git a/include/uapi/linux/ntsync.h b/include/uapi/linux/ntsync.h
-index 86c28b909777..e145b36a15ea 100644
---- a/include/uapi/linux/ntsync.h
+new file mode 100644
+index 000000000000..b5e835d8dba8
+--- /dev/null
+++ b/include/uapi/linux/ntsync.h
-@@ -34,7 +34,7 @@ struct ntsync_wait_args {
- __u32 count;
- __u32 owner;
- __u32 index;
-- __u32 pad;
+@@ -0,0 +1,62 @@
++/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
++/*
++ * Kernel support for NT synchronization primitive emulation
++ *
++ * Copyright (C) 2021-2022 Elizabeth Figura <zfigura@codeweavers.com>
++ */
++
++#ifndef __LINUX_NTSYNC_H
++#define __LINUX_NTSYNC_H
++
++#include <linux/types.h>
++
++struct ntsync_sem_args {
++ __u32 sem;
++ __u32 count;
++ __u32 max;
++};
++
++struct ntsync_mutex_args {
++ __u32 mutex;
++ __u32 owner;
++ __u32 count;
++};
++
++struct ntsync_event_args {
++ __u32 event;
++ __u32 manual;
++ __u32 signaled;
++};
++
++#define NTSYNC_WAIT_REALTIME 0x1
++
++struct ntsync_wait_args {
++ __u64 timeout;
++ __u64 objs;
++ __u32 count;
++ __u32 owner;
++ __u32 index;
+ __u32 alert;
- };
-
- #define NTSYNC_MAX_WAIT_COUNT 64
---
-2.43.0
-
-From 9208836580ed5e5aadfdfaf59dc8352ff6c4a07c Mon Sep 17 00:00:00 2001
-From: Elizabeth Figura <zfigura@codeweavers.com>
-Date: Fri, 5 Mar 2021 12:06:23 -0600
-Subject: [PATCH 18/32] selftests: ntsync: Add some tests for semaphore state.
-
----
- tools/testing/selftests/Makefile | 1 +
- .../testing/selftests/drivers/ntsync/Makefile | 8 +
- tools/testing/selftests/drivers/ntsync/config | 1 +
- .../testing/selftests/drivers/ntsync/ntsync.c | 153 ++++++++++++++++++
- 4 files changed, 163 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
-
++ __u32 flags;
++ __u32 pad;
++};
++
++#define NTSYNC_MAX_WAIT_COUNT 64
++
++#define NTSYNC_IOC_CREATE_SEM _IOWR('N', 0x80, struct ntsync_sem_args)
++#define NTSYNC_IOC_WAIT_ANY _IOWR('N', 0x82, struct ntsync_wait_args)
++#define NTSYNC_IOC_WAIT_ALL _IOWR('N', 0x83, struct ntsync_wait_args)
++#define NTSYNC_IOC_CREATE_MUTEX _IOWR('N', 0x84, struct ntsync_sem_args)
++#define NTSYNC_IOC_CREATE_EVENT _IOWR('N', 0x87, struct ntsync_event_args)
++
++#define NTSYNC_IOC_SEM_POST _IOWR('N', 0x81, __u32)
++#define NTSYNC_IOC_MUTEX_UNLOCK _IOWR('N', 0x85, struct ntsync_mutex_args)
++#define NTSYNC_IOC_MUTEX_KILL _IOW ('N', 0x86, __u32)
++#define NTSYNC_IOC_EVENT_SET _IOR ('N', 0x88, __u32)
++#define NTSYNC_IOC_EVENT_RESET _IOR ('N', 0x89, __u32)
++#define NTSYNC_IOC_EVENT_PULSE _IOR ('N', 0x8a, __u32)
++#define NTSYNC_IOC_SEM_READ _IOR ('N', 0x8b, struct ntsync_sem_args)
++#define NTSYNC_IOC_MUTEX_READ _IOR ('N', 0x8c, struct ntsync_mutex_args)
++#define NTSYNC_IOC_EVENT_READ _IOR ('N', 0x8d, struct ntsync_event_args)
++
++#endif
diff --git a/tools/testing/selftests/Makefile b/tools/testing/selftests/Makefile
-index 8247a7c69c36..40b7318a8e22 100644
+index 15b6a111c3be..6c714a4e6478 100644
--- a/tools/testing/selftests/Makefile
+++ b/tools/testing/selftests/Makefile
@@ -15,6 +15,7 @@ TARGETS += cpu-hotplug
@@ -2531,15 +1774,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..777c408e8f9e
+index 000000000000..5fa2c9a0768c
--- /dev/null
+++ b/tools/testing/selftests/drivers/ntsync/ntsync.c
-@@ -0,0 +1,153 @@
+@@ -0,0 +1,1407 @@
+// 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 <zfigura@codeweavers.com>
+ */
+
+#define _GNU_SOURCE
@@ -2551,43 +1794,88 @@ index 000000000000..777c408e8f9e
+#include <linux/ntsync.h>
+#include "../../kselftest_harness.h"
+
-+static int read_sem_state(int fd, __u32 sem, __u32 *count, __u32 *max)
++static int read_sem_state(int sem, __u32 *count, __u32 *max)
+{
+ struct ntsync_sem_args args;
+ int ret;
+
-+ args.sem = sem;
-+ args.count = 0xdeadbeef;
-+ args.max = 0xdeadbeef;
-+ ret = ioctl(fd, NTSYNC_IOC_READ_SEM, &args);
++ memset(&args, 0xcc, sizeof(args));
++ ret = ioctl(sem, NTSYNC_IOC_SEM_READ, &args);
+ *count = args.count;
+ *max = args.max;
+ return ret;
+}
+
-+#define check_sem_state(fd, sem, count, max) \
++#define check_sem_state(sem, count, max) \
+ ({ \
+ __u32 __count, __max; \
-+ int ret = read_sem_state((fd), (sem), &__count, &__max); \
++ int ret = read_sem_state((sem), &__count, &__max); \
+ EXPECT_EQ(0, ret); \
+ EXPECT_EQ((count), __count); \
+ EXPECT_EQ((max), __max); \
+ })
+
-+static int put_sem(int fd, __u32 sem, __u32 *count)
++static int post_sem(int sem, __u32 *count)
+{
-+ struct ntsync_sem_args args;
++ return ioctl(sem, NTSYNC_IOC_SEM_POST, count);
++}
++
++static int read_mutex_state(int mutex, __u32 *count, __u32 *owner)
++{
++ struct ntsync_mutex_args args;
++ int ret;
++
++ memset(&args, 0xcc, sizeof(args));
++ ret = ioctl(mutex, NTSYNC_IOC_MUTEX_READ, &args);
++ *count = args.count;
++ *owner = args.owner;
++ return ret;
++}
++
++#define check_mutex_state(mutex, count, owner) \
++ ({ \
++ __u32 __count, __owner; \
++ int ret = read_mutex_state((mutex), &__count, &__owner); \
++ EXPECT_EQ(0, ret); \
++ EXPECT_EQ((count), __count); \
++ EXPECT_EQ((owner), __owner); \
++ })
++
++static int unlock_mutex(int mutex, __u32 owner, __u32 *count)
++{
++ struct ntsync_mutex_args args;
+ int ret;
+
-+ args.sem = sem;
-+ args.count = *count;
-+ ret = ioctl(fd, NTSYNC_IOC_PUT_SEM, &args);
++ args.owner = owner;
++ args.count = 0xdeadbeef;
++ ret = ioctl(mutex, NTSYNC_IOC_MUTEX_UNLOCK, &args);
+ *count = args.count;
+ return ret;
+}
+
-+static int wait_any(int fd, __u32 count, const __u32 *objs, __u32 owner,
-+ __u32 *index)
++static int read_event_state(int event, __u32 *signaled, __u32 *manual)
++{
++ struct ntsync_event_args args;
++ int ret;
++
++ memset(&args, 0xcc, sizeof(args));
++ ret = ioctl(event, NTSYNC_IOC_EVENT_READ, &args);
++ *signaled = args.signaled;
++ *manual = args.manual;
++ return ret;
++}
++
++#define check_event_state(event, signaled, manual) \
++ ({ \
++ __u32 __signaled, __manual; \
++ int ret = read_event_state((event), &__signaled, &__manual); \
++ EXPECT_EQ(0, ret); \
++ EXPECT_EQ((signaled), __signaled); \
++ EXPECT_EQ((manual), __manual); \
++ })
++
++static int wait_objs(int fd, unsigned long request, __u32 count,
++ const int *objs, __u32 owner, int alert, __u32 *index)
+{
+ struct ntsync_wait_args args = {0};
+ struct timespec timeout;
@@ -2595,22 +1883,47 @@ index 000000000000..777c408e8f9e
+
+ clock_gettime(CLOCK_MONOTONIC, &timeout);
+
-+ args.timeout = (uintptr_t)&timeout;
++ args.timeout = timeout.tv_sec * 1000000000 + timeout.tv_nsec;
+ args.count = count;
+ args.objs = (uintptr_t)objs;
+ args.owner = owner;
+ args.index = 0xdeadbeef;
-+ ret = ioctl(fd, NTSYNC_IOC_WAIT_ANY, &args);
++ args.alert = alert;
++ ret = ioctl(fd, request, &args);
+ *index = args.index;
+ return ret;
+}
+
++static int wait_any(int fd, __u32 count, const int *objs, __u32 owner, __u32 *index)
++{
++ return wait_objs(fd, NTSYNC_IOC_WAIT_ANY, count, objs, owner, 0, index);
++}
++
++static int wait_all(int fd, __u32 count, const int *objs, __u32 owner, __u32 *index)
++{
++ return wait_objs(fd, NTSYNC_IOC_WAIT_ALL, count, objs, owner, 0, index);
++}
++
++static int wait_any_alert(int fd, __u32 count, const int *objs,
++ __u32 owner, int alert, __u32 *index)
++{
++ return wait_objs(fd, NTSYNC_IOC_WAIT_ANY,
++ count, objs, owner, alert, index);
++}
++
++static int wait_all_alert(int fd, __u32 count, const int *objs,
++ __u32 owner, int alert, __u32 *index)
++{
++ return wait_objs(fd, NTSYNC_IOC_WAIT_ALL,
++ count, objs, owner, alert, index);
++}
++
+TEST(semaphore_state)
+{
+ struct ntsync_sem_args sem_args;
+ struct timespec timeout;
+ __u32 count, index;
-+ int fd, ret;
++ int fd, ret, sem;
+
+ clock_gettime(CLOCK_MONOTONIC, &timeout);
+
@@ -2630,133 +1943,75 @@ index 000000000000..777c408e8f9e
+ ret = ioctl(fd, NTSYNC_IOC_CREATE_SEM, &sem_args);
+ EXPECT_EQ(0, ret);
+ EXPECT_NE(0xdeadbeef, sem_args.sem);
-+ check_sem_state(fd, sem_args.sem, 2, 2);
++ sem = sem_args.sem;
++ check_sem_state(sem, 2, 2);
+
+ count = 0;
-+ ret = put_sem(fd, sem_args.sem, &count);
++ ret = post_sem(sem, &count);
+ EXPECT_EQ(0, ret);
+ EXPECT_EQ(2, count);
-+ check_sem_state(fd, sem_args.sem, 2, 2);
++ check_sem_state(sem, 2, 2);
+
+ count = 1;
-+ ret = put_sem(fd, sem_args.sem, &count);
++ ret = post_sem(sem, &count);
+ EXPECT_EQ(-1, ret);
+ EXPECT_EQ(EOVERFLOW, errno);
-+ check_sem_state(fd, sem_args.sem, 2, 2);
++ check_sem_state(sem, 2, 2);
+
-+ ret = wait_any(fd, 1, &sem_args.sem, 123, &index);
++ ret = wait_any(fd, 1, &sem, 123, &index);
+ EXPECT_EQ(0, ret);
+ EXPECT_EQ(0, index);
-+ check_sem_state(fd, sem_args.sem, 1, 2);
++ check_sem_state(sem, 1, 2);
+
-+ ret = wait_any(fd, 1, &sem_args.sem, 123, &index);
++ ret = wait_any(fd, 1, &sem, 123, &index);
+ EXPECT_EQ(0, ret);
+ EXPECT_EQ(0, index);
-+ check_sem_state(fd, sem_args.sem, 0, 2);
++ check_sem_state(sem, 0, 2);
+
-+ ret = wait_any(fd, 1, &sem_args.sem, 123, &index);
++ ret = wait_any(fd, 1, &sem, 123, &index);
+ EXPECT_EQ(-1, ret);
+ EXPECT_EQ(ETIMEDOUT, errno);
+
+ count = 3;
-+ ret = put_sem(fd, sem_args.sem, &count);
++ ret = post_sem(sem, &count);
+ EXPECT_EQ(-1, ret);
+ EXPECT_EQ(EOVERFLOW, errno);
-+ check_sem_state(fd, sem_args.sem, 0, 2);
++ check_sem_state(sem, 0, 2);
+
+ count = 2;
-+ ret = put_sem(fd, sem_args.sem, &count);
++ ret = post_sem(sem, &count);
+ EXPECT_EQ(0, ret);
+ EXPECT_EQ(0, count);
-+ check_sem_state(fd, sem_args.sem, 2, 2);
++ check_sem_state(sem, 2, 2);
+
-+ ret = wait_any(fd, 1, &sem_args.sem, 123, &index);
++ ret = wait_any(fd, 1, &sem, 123, &index);
+ EXPECT_EQ(0, ret);
-+ ret = wait_any(fd, 1, &sem_args.sem, 123, &index);
++ ret = wait_any(fd, 1, &sem, 123, &index);
+ EXPECT_EQ(0, ret);
+
+ count = 1;
-+ ret = put_sem(fd, sem_args.sem, &count);
++ ret = post_sem(sem, &count);
+ EXPECT_EQ(0, ret);
+ EXPECT_EQ(0, count);
-+ check_sem_state(fd, sem_args.sem, 1, 2);
-+
-+ ret = ioctl(fd, NTSYNC_IOC_DELETE, &sem_args.sem);
-+ EXPECT_EQ(0, ret);
-+
-+ close(fd);
-+}
-+
-+TEST_HARNESS_MAIN
---
-2.43.0
-
-From 7f8e2b5dedf3fe0192bcf7924d651d33df8898a9 Mon Sep 17 00:00:00 2001
-From: Elizabeth Figura <zfigura@codeweavers.com>
-Date: Fri, 5 Mar 2021 12:07:04 -0600
-Subject: [PATCH 19/32] selftests: ntsync: Add some tests for mutex state.
-
----
- .../testing/selftests/drivers/ntsync/ntsync.c | 188 ++++++++++++++++++
- 1 file changed, 188 insertions(+)
-
-diff --git a/tools/testing/selftests/drivers/ntsync/ntsync.c b/tools/testing/selftests/drivers/ntsync/ntsync.c
-index 777c408e8f9e..8390dbbb1dd5 100644
---- a/tools/testing/selftests/drivers/ntsync/ntsync.c
-+++ b/tools/testing/selftests/drivers/ntsync/ntsync.c
-@@ -49,6 +49,42 @@ static int put_sem(int fd, __u32 sem, __u32 *count)
- return ret;
- }
-
-+static int read_mutex_state(int fd, __u32 mutex, __u32 *count, __u32 *owner)
-+{
-+ struct ntsync_mutex_args args;
-+ int ret;
-+
-+ args.mutex = mutex;
-+ args.count = 0xdeadbeef;
-+ args.owner = 0xdeadbeef;
-+ ret = ioctl(fd, NTSYNC_IOC_READ_MUTEX, &args);
-+ *count = args.count;
-+ *owner = args.owner;
-+ return ret;
-+}
++ check_sem_state(sem, 1, 2);
+
-+#define check_mutex_state(fd, mutex, count, owner) \
-+ ({ \
-+ __u32 __count, __owner; \
-+ int ret = read_mutex_state((fd), (mutex), &__count, &__owner); \
-+ EXPECT_EQ(0, ret); \
-+ EXPECT_EQ((count), __count); \
-+ EXPECT_EQ((owner), __owner); \
-+ })
++ count = ~0u;
++ ret = post_sem(sem, &count);
++ EXPECT_EQ(-1, ret);
++ EXPECT_EQ(EOVERFLOW, errno);
++ check_sem_state(sem, 1, 2);
+
-+static int put_mutex(int fd, __u32 mutex, __u32 owner, __u32 *count)
-+{
-+ struct ntsync_mutex_args args;
-+ int ret;
++ close(sem);
+
-+ args.mutex = mutex;
-+ args.owner = owner;
-+ args.count = 0xdeadbeef;
-+ ret = ioctl(fd, NTSYNC_IOC_PUT_MUTEX, &args);
-+ *count = args.count;
-+ return ret;
++ close(fd);
+}
+
- static int wait_any(int fd, __u32 count, const __u32 *objs, __u32 owner,
- __u32 *index)
- {
-@@ -150,4 +186,156 @@ TEST(semaphore_state)
- close(fd);
- }
-
+TEST(mutex_state)
+{
+ struct ntsync_mutex_args mutex_args;
-+ __u32 mutex, owner, count, index;
++ __u32 owner, count, index;
+ struct timespec timeout;
-+ int fd, ret;
++ int fd, ret, mutex;
+
+ clock_gettime(CLOCK_MONOTONIC, &timeout);
+
@@ -2782,75 +2037,74 @@ index 777c408e8f9e..8390dbbb1dd5 100644
+ EXPECT_EQ(0, ret);
+ EXPECT_NE(0xdeadbeef, mutex_args.mutex);
+ mutex = mutex_args.mutex;
-+ check_mutex_state(fd, mutex, 2, 123);
++ check_mutex_state(mutex, 2, 123);
+
-+ ret = put_mutex(fd, mutex, 0, &count);
++ ret = unlock_mutex(mutex, 0, &count);
+ EXPECT_EQ(-1, ret);
+ EXPECT_EQ(EINVAL, errno);
+
-+ ret = put_mutex(fd, mutex, 456, &count);
++ ret = unlock_mutex(mutex, 456, &count);
+ EXPECT_EQ(-1, ret);
+ EXPECT_EQ(EPERM, errno);
-+ check_mutex_state(fd, mutex, 2, 123);
++ check_mutex_state(mutex, 2, 123);
+
-+ ret = put_mutex(fd, mutex, 123, &count);
++ ret = unlock_mutex(mutex, 123, &count);
+ EXPECT_EQ(0, ret);
+ EXPECT_EQ(2, count);
-+ check_mutex_state(fd, mutex, 1, 123);
++ check_mutex_state(mutex, 1, 123);
+
-+ ret = put_mutex(fd, mutex, 123, &count);
++ ret = unlock_mutex(mutex, 123, &count);
+ EXPECT_EQ(0, ret);
+ EXPECT_EQ(1, count);
-+ check_mutex_state(fd, mutex, 0, 0);
++ check_mutex_state(mutex, 0, 0);
+
-+ ret = put_mutex(fd, mutex, 123, &count);
++ ret = unlock_mutex(mutex, 123, &count);
+ EXPECT_EQ(-1, ret);
+ EXPECT_EQ(EPERM, errno);
+
+ ret = wait_any(fd, 1, &mutex, 456, &index);
+ EXPECT_EQ(0, ret);
+ EXPECT_EQ(0, index);
-+ check_mutex_state(fd, mutex, 1, 456);
++ check_mutex_state(mutex, 1, 456);
+
+ ret = wait_any(fd, 1, &mutex, 456, &index);
+ EXPECT_EQ(0, ret);
+ EXPECT_EQ(0, index);
-+ check_mutex_state(fd, mutex, 2, 456);
++ check_mutex_state(mutex, 2, 456);
+
-+ ret = put_mutex(fd, mutex, 456, &count);
++ ret = unlock_mutex(mutex, 456, &count);
+ EXPECT_EQ(0, ret);
+ EXPECT_EQ(2, count);
-+ check_mutex_state(fd, mutex, 1, 456);
++ check_mutex_state(mutex, 1, 456);
+
+ ret = wait_any(fd, 1, &mutex, 123, &index);
+ EXPECT_EQ(-1, ret);
+ EXPECT_EQ(ETIMEDOUT, errno);
+
+ owner = 0;
-+ ret = ioctl(fd, NTSYNC_IOC_KILL_OWNER, &owner);
++ ret = ioctl(mutex, NTSYNC_IOC_MUTEX_KILL, &owner);
+ EXPECT_EQ(-1, ret);
+ EXPECT_EQ(EINVAL, errno);
+
+ owner = 123;
-+ ret = ioctl(fd, NTSYNC_IOC_KILL_OWNER, &owner);
-+ EXPECT_EQ(0, ret);
-+ check_mutex_state(fd, mutex, 1, 456);
++ ret = ioctl(mutex, NTSYNC_IOC_MUTEX_KILL, &owner);
++ EXPECT_EQ(-1, ret);
++ EXPECT_EQ(EPERM, errno);
++ check_mutex_state(mutex, 1, 456);
+
+ owner = 456;
-+ ret = ioctl(fd, NTSYNC_IOC_KILL_OWNER, &owner);
++ ret = ioctl(mutex, NTSYNC_IOC_MUTEX_KILL, &owner);
+ EXPECT_EQ(0, ret);
+
-+ mutex_args.count = 0xdeadbeef;
-+ mutex_args.owner = 0xdeadbeef;
-+ ret = ioctl(fd, NTSYNC_IOC_READ_MUTEX, &mutex_args);
++ memset(&mutex_args, 0xcc, sizeof(mutex_args));
++ ret = ioctl(mutex, NTSYNC_IOC_MUTEX_READ, &mutex_args);
+ EXPECT_EQ(-1, ret);
+ EXPECT_EQ(EOWNERDEAD, errno);
+ EXPECT_EQ(0, mutex_args.count);
+ EXPECT_EQ(0, mutex_args.owner);
+
-+ mutex_args.count = 0xdeadbeef;
-+ mutex_args.owner = 0xdeadbeef;
-+ ret = ioctl(fd, NTSYNC_IOC_READ_MUTEX, &mutex_args);
++ memset(&mutex_args, 0xcc, sizeof(mutex_args));
++ ret = ioctl(mutex, NTSYNC_IOC_MUTEX_READ, &mutex_args);
+ EXPECT_EQ(-1, ret);
+ EXPECT_EQ(EOWNERDEAD, errno);
+ EXPECT_EQ(0, mutex_args.count);
@@ -2860,15 +2114,14 @@ index 777c408e8f9e..8390dbbb1dd5 100644
+ EXPECT_EQ(-1, ret);
+ EXPECT_EQ(EOWNERDEAD, errno);
+ EXPECT_EQ(0, index);
-+ check_mutex_state(fd, mutex, 1, 123);
++ check_mutex_state(mutex, 1, 123);
+
+ owner = 123;
-+ ret = ioctl(fd, NTSYNC_IOC_KILL_OWNER, &owner);
++ ret = ioctl(mutex, NTSYNC_IOC_MUTEX_KILL, &owner);
+ EXPECT_EQ(0, ret);
+
-+ mutex_args.count = 0xdeadbeef;
-+ mutex_args.owner = 0xdeadbeef;
-+ ret = ioctl(fd, NTSYNC_IOC_READ_MUTEX, &mutex_args);
++ memset(&mutex_args, 0xcc, sizeof(mutex_args));
++ ret = ioctl(mutex, NTSYNC_IOC_MUTEX_READ, &mutex_args);
+ EXPECT_EQ(-1, ret);
+ EXPECT_EQ(EOWNERDEAD, errno);
+ EXPECT_EQ(0, mutex_args.count);
@@ -2878,10 +2131,9 @@ index 777c408e8f9e..8390dbbb1dd5 100644
+ EXPECT_EQ(-1, ret);
+ EXPECT_EQ(EOWNERDEAD, errno);
+ EXPECT_EQ(0, index);
-+ check_mutex_state(fd, mutex, 1, 123);
++ check_mutex_state(mutex, 1, 123);
+
-+ ret = ioctl(fd, NTSYNC_IOC_DELETE, &mutex);
-+ EXPECT_EQ(0, ret);
++ close(mutex);
+
+ mutex_args.owner = 0;
+ mutex_args.count = 0;
@@ -2890,49 +2142,167 @@ index 777c408e8f9e..8390dbbb1dd5 100644
+ EXPECT_EQ(0, ret);
+ EXPECT_NE(0xdeadbeef, mutex_args.mutex);
+ mutex = mutex_args.mutex;
-+ check_mutex_state(fd, mutex, 0, 0);
++ check_mutex_state(mutex, 0, 0);
+
+ ret = wait_any(fd, 1, &mutex, 123, &index);
+ EXPECT_EQ(0, ret);
+ EXPECT_EQ(0, index);
-+ check_mutex_state(fd, mutex, 1, 123);
++ check_mutex_state(mutex, 1, 123);
+
-+ ret = ioctl(fd, NTSYNC_IOC_DELETE, &mutex_args.mutex);
++ 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(manual_event_state)
++{
++ struct ntsync_event_args event_args;
++ __u32 index, signaled;
++ int fd, event, ret;
++
++ fd = open("/dev/ntsync", O_CLOEXEC | O_RDONLY);
++ ASSERT_LE(0, fd);
++
++ event_args.manual = 1;
++ event_args.signaled = 0;
++ event_args.event = 0xdeadbeef;
++ ret = ioctl(fd, NTSYNC_IOC_CREATE_EVENT, &event_args);
++ EXPECT_EQ(0, ret);
++ EXPECT_NE(0xdeadbeef, event_args.event);
++ event = event_args.event;
++ check_event_state(event, 0, 1);
++
++ signaled = 0xdeadbeef;
++ ret = ioctl(event, NTSYNC_IOC_EVENT_SET, &signaled);
++ EXPECT_EQ(0, ret);
++ EXPECT_EQ(0, signaled);
++ check_event_state(event, 1, 1);
++
++ ret = ioctl(event, NTSYNC_IOC_EVENT_SET, &signaled);
++ EXPECT_EQ(0, ret);
++ EXPECT_EQ(1, signaled);
++ check_event_state(event, 1, 1);
++
++ ret = wait_any(fd, 1, &event, 123, &index);
++ EXPECT_EQ(0, ret);
++ EXPECT_EQ(0, index);
++ check_event_state(event, 1, 1);
++
++ signaled = 0xdeadbeef;
++ ret = ioctl(event, NTSYNC_IOC_EVENT_RESET, &signaled);
++ EXPECT_EQ(0, ret);
++ EXPECT_EQ(1, signaled);
++ check_event_state(event, 0, 1);
++
++ ret = ioctl(event, NTSYNC_IOC_EVENT_RESET, &signaled);
++ EXPECT_EQ(0, ret);
++ EXPECT_EQ(0, signaled);
++ check_event_state(event, 0, 1);
++
++ ret = wait_any(fd, 1, &event, 123, &index);
++ EXPECT_EQ(-1, ret);
++ EXPECT_EQ(ETIMEDOUT, errno);
++
++ ret = ioctl(event, NTSYNC_IOC_EVENT_SET, &signaled);
++ EXPECT_EQ(0, ret);
++ EXPECT_EQ(0, signaled);
++
++ ret = ioctl(event, NTSYNC_IOC_EVENT_PULSE, &signaled);
++ EXPECT_EQ(0, ret);
++ EXPECT_EQ(1, signaled);
++ check_event_state(event, 0, 1);
++
++ ret = ioctl(event, NTSYNC_IOC_EVENT_PULSE, &signaled);
++ EXPECT_EQ(0, ret);
++ EXPECT_EQ(0, signaled);
++ check_event_state(event, 0, 1);
++
++ close(event);
++
++ close(fd);
++}
++
++TEST(auto_event_state)
++{
++ struct ntsync_event_args event_args;
++ __u32 index, signaled;
++ int fd, event, ret;
++
++ fd = open("/dev/ntsync", O_CLOEXEC | O_RDONLY);
++ ASSERT_LE(0, fd);
++
++ event_args.manual = 0;
++ event_args.signaled = 1;
++ event_args.event = 0xdeadbeef;
++ ret = ioctl(fd, NTSYNC_IOC_CREATE_EVENT, &event_args);
++ EXPECT_EQ(0, ret);
++ EXPECT_NE(0xdeadbeef, event_args.event);
++ event = event_args.event;
++
++ check_event_state(event, 1, 0);
++
++ signaled = 0xdeadbeef;
++ ret = ioctl(event, NTSYNC_IOC_EVENT_SET, &signaled);
++ EXPECT_EQ(0, ret);
++ EXPECT_EQ(1, signaled);
++ check_event_state(event, 1, 0);
++
++ ret = wait_any(fd, 1, &event, 123, &index);
++ EXPECT_EQ(0, ret);
++ EXPECT_EQ(0, index);
++ check_event_state(event, 0, 0);
++
++ signaled = 0xdeadbeef;
++ ret = ioctl(event, NTSYNC_IOC_EVENT_RESET, &signaled);
++ EXPECT_EQ(0, ret);
++ EXPECT_EQ(0, signaled);
++ check_event_state(event, 0, 0);
++
++ ret = wait_any(fd, 1, &event, 123, &index);
++ EXPECT_EQ(-1, ret);
++ EXPECT_EQ(ETIMEDOUT, errno);
++
++ ret = ioctl(event, NTSYNC_IOC_EVENT_SET, &signaled);
++ EXPECT_EQ(0, ret);
++ EXPECT_EQ(0, signaled);
++
++ ret = ioctl(event, NTSYNC_IOC_EVENT_PULSE, &signaled);
++ EXPECT_EQ(0, ret);
++ EXPECT_EQ(1, signaled);
++ check_event_state(event, 0, 0);
++
++ ret = ioctl(event, NTSYNC_IOC_EVENT_PULSE, &signaled);
++ EXPECT_EQ(0, ret);
++ EXPECT_EQ(0, signaled);
++ check_event_state(event, 0, 0);
++
++ close(event);
+
+ close(fd);
+}
+
- TEST_HARNESS_MAIN
---
-2.43.0
-
-From 596798d186edb9ca00396222e9dc0c43fcb40548 Mon Sep 17 00:00:00 2001
-From: Elizabeth Figura <zfigura@codeweavers.com>
-Date: Fri, 5 Mar 2021 12:07:45 -0600
-Subject: [PATCH 20/32] selftests: ntsync: Add some tests for
- WINESYNC_IOC_WAIT_ANY.
-
----
- .../testing/selftests/drivers/ntsync/ntsync.c | 107 ++++++++++++++++++
- 1 file changed, 107 insertions(+)
-
-diff --git a/tools/testing/selftests/drivers/ntsync/ntsync.c b/tools/testing/selftests/drivers/ntsync/ntsync.c
-index 8390dbbb1dd5..8ae930e7a601 100644
---- a/tools/testing/selftests/drivers/ntsync/ntsync.c
-+++ b/tools/testing/selftests/drivers/ntsync/ntsync.c
-@@ -338,4 +338,111 @@ 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 objs[2], owner, index;
++ __u32 owner, index, count, i;
+ struct timespec timeout;
-+ int fd, ret;
+
+ clock_gettime(CLOCK_MONOTONIC, &timeout);
+
@@ -2959,44 +2329,44 @@ index 8390dbbb1dd5..8ae930e7a601 100644
+ ret = wait_any(fd, 2, objs, 123, &index);
+ EXPECT_EQ(0, ret);
+ EXPECT_EQ(0, index);
-+ check_sem_state(fd, sem_args.sem, 1, 3);
-+ check_mutex_state(fd, mutex_args.mutex, 0, 0);
++ check_sem_state(sem_args.sem, 1, 3);
++ check_mutex_state(mutex_args.mutex, 0, 0);
+
+ ret = wait_any(fd, 2, objs, 123, &index);
+ EXPECT_EQ(0, ret);
+ EXPECT_EQ(0, index);
-+ check_sem_state(fd, sem_args.sem, 0, 3);
-+ check_mutex_state(fd, mutex_args.mutex, 0, 0);
++ check_sem_state(sem_args.sem, 0, 3);
++ check_mutex_state(mutex_args.mutex, 0, 0);
+
+ ret = wait_any(fd, 2, objs, 123, &index);
+ EXPECT_EQ(0, ret);
+ EXPECT_EQ(1, index);
-+ check_sem_state(fd, sem_args.sem, 0, 3);
-+ check_mutex_state(fd, mutex_args.mutex, 1, 123);
++ check_sem_state(sem_args.sem, 0, 3);
++ check_mutex_state(mutex_args.mutex, 1, 123);
+
-+ sem_args.count = 1;
-+ ret = ioctl(fd, NTSYNC_IOC_PUT_SEM, &sem_args);
++ count = 1;
++ ret = post_sem(sem_args.sem, &count);
+ EXPECT_EQ(0, ret);
-+ EXPECT_EQ(0, sem_args.count);
++ EXPECT_EQ(0, count);
+
+ ret = wait_any(fd, 2, objs, 123, &index);
+ EXPECT_EQ(0, ret);
+ EXPECT_EQ(0, index);
-+ check_sem_state(fd, sem_args.sem, 0, 3);
-+ check_mutex_state(fd, mutex_args.mutex, 1, 123);
++ check_sem_state(sem_args.sem, 0, 3);
++ check_mutex_state(mutex_args.mutex, 1, 123);
+
+ ret = wait_any(fd, 2, objs, 123, &index);
+ EXPECT_EQ(0, ret);
+ EXPECT_EQ(1, index);
-+ check_sem_state(fd, sem_args.sem, 0, 3);
-+ check_mutex_state(fd, mutex_args.mutex, 2, 123);
++ check_sem_state(sem_args.sem, 0, 3);
++ check_mutex_state(mutex_args.mutex, 2, 123);
+
+ ret = wait_any(fd, 2, objs, 456, &index);
+ EXPECT_EQ(-1, ret);
+ EXPECT_EQ(ETIMEDOUT, errno);
+
+ owner = 123;
-+ ret = ioctl(fd, NTSYNC_IOC_KILL_OWNER, &owner);
++ ret = ioctl(mutex_args.mutex, NTSYNC_IOC_MUTEX_KILL, &owner);
+ EXPECT_EQ(0, ret);
+
+ ret = wait_any(fd, 2, objs, 456, &index);
@@ -3009,93 +2379,49 @@ index 8390dbbb1dd5..8ae930e7a601 100644
+ EXPECT_EQ(1, index);
+
+ /* test waiting on the same object twice */
-+ sem_args.count = 2;
-+ ret = ioctl(fd, NTSYNC_IOC_PUT_SEM, &sem_args);
++ count = 2;
++ ret = post_sem(sem_args.sem, &count);
+ EXPECT_EQ(0, ret);
-+ EXPECT_EQ(0, sem_args.count);
++ EXPECT_EQ(0, count);
+
+ 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);
-+ check_sem_state(fd, sem_args.sem, 1, 3);
++ 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);
+
-+ ret = ioctl(fd, NTSYNC_IOC_DELETE, &sem_args.sem);
-+ EXPECT_EQ(0, ret);
-+ ret = ioctl(fd, NTSYNC_IOC_DELETE, &mutex_args.mutex);
++ 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);
+
-+ close(fd);
-+}
++ ret = wait_any(fd, NTSYNC_MAX_WAIT_COUNT + 1, objs, 123, &index);
++ EXPECT_EQ(-1, ret);
++ EXPECT_EQ(EINVAL, errno);
+
- TEST_HARNESS_MAIN
---
-2.43.0
-
-From 4610258d640a5bd75b7482b92cb74c4ffba58b84 Mon Sep 17 00:00:00 2001
-From: Elizabeth Figura <zfigura@codeweavers.com>
-Date: Fri, 5 Mar 2021 12:08:25 -0600
-Subject: [PATCH 21/32] selftests: ntsync: Add some tests for
- WINESYNC_IOC_WAIT_ALL.
-
----
- .../testing/selftests/drivers/ntsync/ntsync.c | 104 +++++++++++++++++-
- 1 file changed, 101 insertions(+), 3 deletions(-)
-
-diff --git a/tools/testing/selftests/drivers/ntsync/ntsync.c b/tools/testing/selftests/drivers/ntsync/ntsync.c
-index 8ae930e7a601..586e798d3228 100644
---- a/tools/testing/selftests/drivers/ntsync/ntsync.c
-+++ b/tools/testing/selftests/drivers/ntsync/ntsync.c
-@@ -85,8 +85,8 @@ static int put_mutex(int fd, __u32 mutex, __u32 owner, __u32 *count)
- return ret;
- }
-
--static int wait_any(int fd, __u32 count, const __u32 *objs, __u32 owner,
-- __u32 *index)
-+static int wait_objs(int fd, unsigned long request, __u32 count,
-+ const __u32 *objs, __u32 owner, __u32 *index)
- {
- struct ntsync_wait_args args = {0};
- struct timespec timeout;
-@@ -99,11 +99,23 @@ static int wait_any(int fd, __u32 count, const __u32 *objs, __u32 owner,
- args.objs = (uintptr_t)objs;
- args.owner = owner;
- args.index = 0xdeadbeef;
-- ret = ioctl(fd, NTSYNC_IOC_WAIT_ANY, &args);
-+ ret = ioctl(fd, request, &args);
- *index = args.index;
- return ret;
- }
-
-+static int wait_any(int fd, __u32 count, const __u32 *objs,
-+ __u32 owner, __u32 *index)
-+{
-+ return wait_objs(fd, NTSYNC_IOC_WAIT_ANY, count, objs, owner, index);
-+}
++ ret = wait_any(fd, -1, objs, 123, &index);
++ EXPECT_EQ(-1, ret);
++ EXPECT_EQ(EINVAL, errno);
+
-+static int wait_all(int fd, __u32 count, const __u32 *objs,
-+ __u32 owner, __u32 *index)
-+{
-+ return wait_objs(fd, NTSYNC_IOC_WAIT_ALL, count, objs, owner, index);
++ close(sem_args.sem);
++ close(mutex_args.mutex);
++
++ close(fd);
+}
+
- TEST(semaphore_state)
- {
- struct ntsync_sem_args sem_args;
-@@ -445,4 +457,90 @@ TEST(test_wait_any)
- close(fd);
- }
-
+TEST(test_wait_all)
+{
++ struct ntsync_event_args event_args = {0};
+ struct ntsync_mutex_args mutex_args = {0};
+ struct ntsync_sem_args sem_args = {0};
-+ __u32 objs[2], owner, index;
-+ int fd, ret;
++ __u32 owner, index, count;
++ int objs[2], fd, ret;
+
+ fd = open("/dev/ntsync", O_CLOEXEC | O_RDONLY);
+ ASSERT_LE(0, fd);
@@ -3114,213 +2440,86 @@ index 8ae930e7a601..586e798d3228 100644
+ EXPECT_EQ(0, ret);
+ EXPECT_NE(0xdeadbeef, mutex_args.mutex);
+
++ event_args.manual = true;
++ event_args.signaled = true;
++ ret = ioctl(fd, NTSYNC_IOC_CREATE_EVENT, &event_args);
++ EXPECT_EQ(0, ret);
++
+ objs[0] = sem_args.sem;
+ objs[1] = mutex_args.mutex;
+
+ ret = wait_all(fd, 2, objs, 123, &index);
+ EXPECT_EQ(0, ret);
+ EXPECT_EQ(0, index);
-+ check_sem_state(fd, sem_args.sem, 1, 3);
-+ check_mutex_state(fd, mutex_args.mutex, 1, 123);
++ check_sem_state(sem_args.sem, 1, 3);
++ check_mutex_state(mutex_args.mutex, 1, 123);
+
+ ret = wait_all(fd, 2, objs, 456, &index);
+ EXPECT_EQ(-1, ret);
+ EXPECT_EQ(ETIMEDOUT, errno);
-+ check_sem_state(fd, sem_args.sem, 1, 3);
-+ check_mutex_state(fd, mutex_args.mutex, 1, 123);
++ check_sem_state(sem_args.sem, 1, 3);
++ check_mutex_state(mutex_args.mutex, 1, 123);
+
+ ret = wait_all(fd, 2, objs, 123, &index);
+ EXPECT_EQ(0, ret);
+ EXPECT_EQ(0, index);
-+ check_sem_state(fd, sem_args.sem, 0, 3);
-+ check_mutex_state(fd, mutex_args.mutex, 2, 123);
++ check_sem_state(sem_args.sem, 0, 3);
++ check_mutex_state(mutex_args.mutex, 2, 123);
+
+ ret = wait_all(fd, 2, objs, 123, &index);
+ EXPECT_EQ(-1, ret);
+ EXPECT_EQ(ETIMEDOUT, errno);
-+ check_sem_state(fd, sem_args.sem, 0, 3);
-+ check_mutex_state(fd, mutex_args.mutex, 2, 123);
++ check_sem_state(sem_args.sem, 0, 3);
++ check_mutex_state(mutex_args.mutex, 2, 123);
+
-+ sem_args.count = 3;
-+ ret = ioctl(fd, NTSYNC_IOC_PUT_SEM, &sem_args);
++ count = 3;
++ ret = post_sem(sem_args.sem, &count);
+ EXPECT_EQ(0, ret);
-+ EXPECT_EQ(0, sem_args.count);
++ EXPECT_EQ(0, count);
+
+ ret = wait_all(fd, 2, objs, 123, &index);
+ EXPECT_EQ(0, ret);
+ EXPECT_EQ(0, index);
-+ check_sem_state(fd, sem_args.sem, 2, 3);
-+ check_mutex_state(fd, mutex_args.mutex, 3, 123);
++ check_sem_state(sem_args.sem, 2, 3);
++ check_mutex_state(mutex_args.mutex, 3, 123);
+
+ owner = 123;
-+ ret = ioctl(fd, NTSYNC_IOC_KILL_OWNER, &owner);
++ ret = ioctl(mutex_args.mutex, NTSYNC_IOC_MUTEX_KILL, &owner);
+ EXPECT_EQ(0, ret);
+
+ ret = wait_all(fd, 2, objs, 123, &index);
+ EXPECT_EQ(-1, ret);
+ EXPECT_EQ(EOWNERDEAD, errno);
-+ check_sem_state(fd, sem_args.sem, 1, 3);
-+ check_mutex_state(fd, mutex_args.mutex, 1, 123);
-+
-+ /* test waiting on the same object twice */
-+ objs[0] = objs[1] = sem_args.sem;
-+ ret = wait_all(fd, 2, objs, 123, &index);
-+ EXPECT_EQ(-1, ret);
-+ EXPECT_EQ(EINVAL, errno);
-+
-+ ret = ioctl(fd, NTSYNC_IOC_DELETE, &sem_args.sem);
-+ EXPECT_EQ(0, ret);
-+ ret = ioctl(fd, NTSYNC_IOC_DELETE, &mutex_args.mutex);
-+ EXPECT_EQ(0, ret);
-+
-+ close(fd);
-+}
-+
- TEST_HARNESS_MAIN
---
-2.43.0
-
-From a18ca868f284f8eec745aec2346b2ff138370473 Mon Sep 17 00:00:00 2001
-From: Elizabeth Figura <zfigura@codeweavers.com>
-Date: Fri, 5 Mar 2021 12:08:54 -0600
-Subject: [PATCH 22/32] selftests: ntsync: Add some tests for invalid object
- handling.
-
----
- .../testing/selftests/drivers/ntsync/ntsync.c | 93 +++++++++++++++++++
- 1 file changed, 93 insertions(+)
-
-diff --git a/tools/testing/selftests/drivers/ntsync/ntsync.c b/tools/testing/selftests/drivers/ntsync/ntsync.c
-index 586e798d3228..ac24a94f2518 100644
---- a/tools/testing/selftests/drivers/ntsync/ntsync.c
-+++ b/tools/testing/selftests/drivers/ntsync/ntsync.c
-@@ -543,4 +543,97 @@ TEST(test_wait_all)
- close(fd);
- }
-
-+TEST(invalid_objects)
-+{
-+ struct ntsync_mutex_args mutex_args = {0};
-+ struct ntsync_wait_args wait_args = {0};
-+ struct ntsync_sem_args sem_args = {0};
-+ __u32 objs[2] = {0};
-+ int fd, ret;
-+
-+ fd = open("/dev/ntsync", O_CLOEXEC | O_RDONLY);
-+ ASSERT_LE(0, fd);
-+
-+ ret = ioctl(fd, NTSYNC_IOC_PUT_SEM, &sem_args);
-+ EXPECT_EQ(-1, ret);
-+ EXPECT_EQ(EINVAL, errno);
-+
-+ ret = ioctl(fd, NTSYNC_IOC_READ_SEM, &sem_args);
-+ EXPECT_EQ(-1, ret);
-+ EXPECT_EQ(EINVAL, errno);
-+
-+ ret = ioctl(fd, NTSYNC_IOC_PUT_MUTEX, &mutex_args);
-+ EXPECT_EQ(-1, ret);
-+ EXPECT_EQ(EINVAL, errno);
-+
-+ ret = ioctl(fd, NTSYNC_IOC_READ_MUTEX, &mutex_args);
-+ EXPECT_EQ(-1, ret);
-+ EXPECT_EQ(EINVAL, errno);
-+
-+ wait_args.objs = (uintptr_t)objs;
-+ wait_args.count = 1;
-+ ret = ioctl(fd, NTSYNC_IOC_WAIT_ANY, &wait_args);
-+ EXPECT_EQ(-1, ret);
-+ EXPECT_EQ(EINVAL, errno);
-+ ret = ioctl(fd, NTSYNC_IOC_WAIT_ALL, &wait_args);
-+ EXPECT_EQ(-1, ret);
-+ EXPECT_EQ(EINVAL, errno);
-+
-+ ret = ioctl(fd, NTSYNC_IOC_DELETE, &objs[0]);
-+ EXPECT_EQ(-1, ret);
-+ EXPECT_EQ(EINVAL, errno);
-+
-+ sem_args.max = 1;
-+ ret = ioctl(fd, NTSYNC_IOC_CREATE_SEM, &sem_args);
-+ EXPECT_EQ(0, ret);
-+
-+ mutex_args.mutex = sem_args.sem;
-+ ret = ioctl(fd, NTSYNC_IOC_PUT_MUTEX, &mutex_args);
-+ EXPECT_EQ(-1, ret);
-+ EXPECT_EQ(EINVAL, errno);
-+
-+ ret = ioctl(fd, NTSYNC_IOC_READ_MUTEX, &mutex_args);
-+ EXPECT_EQ(-1, ret);
-+ EXPECT_EQ(EINVAL, errno);
++ check_sem_state(sem_args.sem, 1, 3);
++ check_mutex_state(mutex_args.mutex, 1, 123);
+
+ objs[0] = sem_args.sem;
-+ objs[1] = sem_args.sem + 1;
-+ wait_args.count = 2;
-+ ret = ioctl(fd, NTSYNC_IOC_WAIT_ANY, &wait_args);
-+ EXPECT_EQ(-1, ret);
-+ EXPECT_EQ(EINVAL, errno);
-+ ret = ioctl(fd, NTSYNC_IOC_WAIT_ALL, &wait_args);
-+ EXPECT_EQ(-1, ret);
-+ EXPECT_EQ(EINVAL, errno);
-+
-+ objs[0] = sem_args.sem + 1;
-+ objs[1] = sem_args.sem;
-+ ret = ioctl(fd, NTSYNC_IOC_WAIT_ANY, &wait_args);
-+ EXPECT_EQ(-1, ret);
-+ EXPECT_EQ(EINVAL, errno);
-+ ret = ioctl(fd, NTSYNC_IOC_WAIT_ALL, &wait_args);
-+ EXPECT_EQ(-1, ret);
-+ EXPECT_EQ(EINVAL, errno);
-+
-+ ret = ioctl(fd, NTSYNC_IOC_DELETE, &sem_args.sem);
-+ EXPECT_EQ(0, ret);
-+
-+ ret = ioctl(fd, NTSYNC_IOC_CREATE_MUTEX, &mutex_args);
++ objs[1] = event_args.event;
++ ret = wait_all(fd, 2, objs, 123, &index);
+ EXPECT_EQ(0, ret);
++ EXPECT_EQ(0, index);
++ check_sem_state(sem_args.sem, 0, 3);
++ check_event_state(event_args.event, 1, 1);
+
-+ sem_args.sem = mutex_args.mutex;
-+ ret = ioctl(fd, NTSYNC_IOC_PUT_SEM, &sem_args);
-+ EXPECT_EQ(-1, ret);
-+ EXPECT_EQ(EINVAL, errno);
-+
-+ ret = ioctl(fd, NTSYNC_IOC_READ_SEM, &sem_args);
++ /* test waiting on the same object twice */
++ objs[0] = objs[1] = sem_args.sem;
++ ret = wait_all(fd, 2, objs, 123, &index);
+ EXPECT_EQ(-1, ret);
+ EXPECT_EQ(EINVAL, errno);
+
-+ ret = ioctl(fd, NTSYNC_IOC_DELETE, &mutex_args.mutex);
-+ EXPECT_EQ(0, ret);
++ close(sem_args.sem);
++ close(mutex_args.mutex);
++ close(event_args.event);
+
+ close(fd);
+}
+
- TEST_HARNESS_MAIN
---
-2.43.0
-
-From e49d10455ebe2a5d056523a225b8b179b1da932a Mon Sep 17 00:00:00 2001
-From: Elizabeth Figura <zfigura@codeweavers.com>
-Date: Fri, 5 Mar 2021 12:09:32 -0600
-Subject: [PATCH 23/32] selftests: ntsync: Add some tests for wakeup signaling
- with WINESYNC_IOC_WAIT_ANY.
-
----
- .../testing/selftests/drivers/ntsync/ntsync.c | 154 ++++++++++++++++++
- 1 file changed, 154 insertions(+)
-
-diff --git a/tools/testing/selftests/drivers/ntsync/ntsync.c b/tools/testing/selftests/drivers/ntsync/ntsync.c
-index ac24a94f2518..919cabc3ba5e 100644
---- a/tools/testing/selftests/drivers/ntsync/ntsync.c
-+++ b/tools/testing/selftests/drivers/ntsync/ntsync.c
-@@ -636,4 +636,158 @@ TEST(invalid_objects)
- close(fd);
- }
-
-+struct wake_args
-+{
++struct wake_args {
+ int fd;
-+ __u32 obj;
++ int obj;
+};
+
-+struct wait_args
-+{
++struct wait_args {
+ int fd;
+ unsigned long request;
+ struct ntsync_wait_args *args;
@@ -3337,32 +2536,34 @@ index ac24a94f2518..919cabc3ba5e 100644
+ return NULL;
+}
+
-+static void get_abs_timeout(struct timespec *timeout, clockid_t clock,
-+ unsigned int ms)
++static __u64 get_abs_timeout(unsigned int ms)
+{
-+ clock_gettime(clock, timeout);
-+ timeout->tv_nsec += ms * 1000000;
-+ timeout->tv_sec += (timeout->tv_nsec / 1000000000);
-+ timeout->tv_nsec %= 1000000000;
++ struct timespec timeout;
++ clock_gettime(CLOCK_MONOTONIC, &timeout);
++ return (timeout.tv_sec * 1000000000) + timeout.tv_nsec + (ms * 1000000);
+}
+
+static int wait_for_thread(pthread_t thread, unsigned int ms)
+{
+ struct timespec timeout;
-+ get_abs_timeout(&timeout, CLOCK_REALTIME, ms);
++
++ clock_gettime(CLOCK_REALTIME, &timeout);
++ timeout.tv_nsec += ms * 1000000;
++ timeout.tv_sec += (timeout.tv_nsec / 1000000000);
++ timeout.tv_nsec %= 1000000000;
+ return pthread_timedjoin_np(thread, NULL, &timeout);
+}
+
+TEST(wake_any)
+{
++ struct ntsync_event_args event_args = {0};
+ struct ntsync_mutex_args mutex_args = {0};
+ struct ntsync_wait_args wait_args = {0};
+ struct ntsync_sem_args sem_args = {0};
+ struct wait_args thread_args;
-+ __u32 objs[2], count, index;
-+ struct timespec timeout;
++ __u32 count, index, signaled;
++ int objs[2], fd, ret;
+ pthread_t thread;
-+ int fd, ret;
+
+ fd = open("/dev/ntsync", O_CLOEXEC | O_RDONLY);
+ ASSERT_LE(0, fd);
@@ -3386,8 +2587,7 @@ index ac24a94f2518..919cabc3ba5e 100644
+
+ /* test waking the semaphore */
+
-+ get_abs_timeout(&timeout, CLOCK_MONOTONIC, 1000);
-+ wait_args.timeout = (uintptr_t)&timeout;
++ wait_args.timeout = get_abs_timeout(1000);
+ wait_args.objs = (uintptr_t)objs;
+ wait_args.count = 2;
+ wait_args.owner = 456;
@@ -3401,11 +2601,11 @@ index ac24a94f2518..919cabc3ba5e 100644
+ ret = wait_for_thread(thread, 100);
+ EXPECT_EQ(ETIMEDOUT, ret);
+
-+ sem_args.count = 1;
-+ ret = ioctl(fd, NTSYNC_IOC_PUT_SEM, &sem_args);
++ count = 1;
++ ret = post_sem(sem_args.sem, &count);
+ EXPECT_EQ(0, ret);
-+ EXPECT_EQ(0, sem_args.count);
-+ check_sem_state(fd, sem_args.sem, 0, 3);
++ EXPECT_EQ(0, count);
++ check_sem_state(sem_args.sem, 0, 3);
+
+ ret = wait_for_thread(thread, 100);
+ EXPECT_EQ(0, ret);
@@ -3419,7 +2619,7 @@ index ac24a94f2518..919cabc3ba5e 100644
+ EXPECT_EQ(0, ret);
+ EXPECT_EQ(0, index);
+
-+ get_abs_timeout(&timeout, CLOCK_MONOTONIC, 1000);
++ wait_args.timeout = get_abs_timeout(1000);
+ wait_args.owner = 456;
+ ret = pthread_create(&thread, NULL, wait_thread, &thread_args);
+ EXPECT_EQ(0, ret);
@@ -3427,569 +2627,164 @@ index ac24a94f2518..919cabc3ba5e 100644
+ ret = wait_for_thread(thread, 100);
+ EXPECT_EQ(ETIMEDOUT, ret);
+
-+ ret = put_mutex(fd, mutex_args.mutex, 123, &count);
++ ret = unlock_mutex(mutex_args.mutex, 123, &count);
+ EXPECT_EQ(0, ret);
+ EXPECT_EQ(2, count);
+
+ ret = pthread_tryjoin_np(thread, NULL);
+ EXPECT_EQ(EBUSY, ret);
+
-+ ret = put_mutex(fd, mutex_args.mutex, 123, &count);
++ ret = unlock_mutex(mutex_args.mutex, 123, &count);
+ EXPECT_EQ(0, ret);
+ EXPECT_EQ(1, mutex_args.count);
-+ check_mutex_state(fd, mutex_args.mutex, 1, 456);
++ check_mutex_state(mutex_args.mutex, 1, 456);
+
+ ret = wait_for_thread(thread, 100);
+ EXPECT_EQ(0, ret);
+ EXPECT_EQ(0, thread_args.ret);
+ EXPECT_EQ(1, wait_args.index);
+
-+ /* delete an object while it's being waited on */
-+
-+ get_abs_timeout(&timeout, CLOCK_MONOTONIC, 200);
-+ wait_args.owner = 123;
-+ ret = pthread_create(&thread, NULL, wait_thread, &thread_args);
-+ EXPECT_EQ(0, ret);
-+
-+ ret = wait_for_thread(thread, 100);
-+ EXPECT_EQ(ETIMEDOUT, ret);
-+
-+ ret = ioctl(fd, NTSYNC_IOC_DELETE, &sem_args.sem);
-+ EXPECT_EQ(0, ret);
-+ ret = ioctl(fd, NTSYNC_IOC_DELETE, &mutex_args.mutex);
-+ EXPECT_EQ(0, ret);
-+
-+ ret = wait_for_thread(thread, 200);
-+ EXPECT_EQ(0, ret);
-+ EXPECT_EQ(-1, thread_args.ret);
-+ EXPECT_EQ(ETIMEDOUT, thread_args.err);
-+
-+ close(fd);
-+}
-+
- TEST_HARNESS_MAIN
---
-2.43.0
-
-From a9f683caedb447a30b28a3ebb3d8fc597fe26d73 Mon Sep 17 00:00:00 2001
-From: Elizabeth Figura <zfigura@codeweavers.com>
-Date: Fri, 5 Mar 2021 12:09:36 -0600
-Subject: [PATCH 24/32] selftests: ntsync: Add some tests for wakeup signaling
- with WINESYNC_IOC_WAIT_ALL.
-
----
- .../testing/selftests/drivers/ntsync/ntsync.c | 102 ++++++++++++++++++
- 1 file changed, 102 insertions(+)
-
-diff --git a/tools/testing/selftests/drivers/ntsync/ntsync.c b/tools/testing/selftests/drivers/ntsync/ntsync.c
-index 919cabc3ba5e..3dbae7c8ac1f 100644
---- a/tools/testing/selftests/drivers/ntsync/ntsync.c
-+++ b/tools/testing/selftests/drivers/ntsync/ntsync.c
-@@ -790,4 +790,106 @@ TEST(wake_any)
- close(fd);
- }
-
-+TEST(wake_all)
-+{
-+ struct ntsync_mutex_args mutex_args = {0};
-+ struct ntsync_wait_args wait_args = {0};
-+ struct ntsync_sem_args sem_args = {0};
-+ struct wait_args thread_args;
-+ __u32 objs[2], count, index;
-+ struct timespec timeout;
-+ pthread_t thread;
-+ int fd, ret;
-+
-+ fd = open("/dev/ntsync", O_CLOEXEC | O_RDONLY);
-+ ASSERT_LE(0, fd);
-+
-+ sem_args.count = 0;
-+ sem_args.max = 3;
-+ sem_args.sem = 0xdeadbeef;
-+ ret = ioctl(fd, NTSYNC_IOC_CREATE_SEM, &sem_args);
-+ EXPECT_EQ(0, ret);
-+ EXPECT_NE(0xdeadbeef, sem_args.sem);
++ /* test waking events */
+
-+ mutex_args.owner = 123;
-+ mutex_args.count = 1;
-+ mutex_args.mutex = 0xdeadbeef;
-+ ret = ioctl(fd, NTSYNC_IOC_CREATE_MUTEX, &mutex_args);
++ event_args.manual = false;
++ event_args.signaled = false;
++ ret = ioctl(fd, NTSYNC_IOC_CREATE_EVENT, &event_args);
+ EXPECT_EQ(0, ret);
-+ EXPECT_NE(0xdeadbeef, mutex_args.mutex);
-+
-+ objs[0] = sem_args.sem;
-+ objs[1] = mutex_args.mutex;
+
-+ get_abs_timeout(&timeout, CLOCK_MONOTONIC, 1000);
-+ wait_args.timeout = (uintptr_t)&timeout;
-+ wait_args.objs = (uintptr_t)objs;
-+ wait_args.count = 2;
-+ wait_args.owner = 456;
-+ thread_args.fd = fd;
-+ thread_args.args = &wait_args;
-+ thread_args.request = NTSYNC_IOC_WAIT_ALL;
++ objs[1] = event_args.event;
++ wait_args.timeout = get_abs_timeout(1000);
+ ret = pthread_create(&thread, NULL, wait_thread, &thread_args);
+ EXPECT_EQ(0, ret);
+
+ ret = wait_for_thread(thread, 100);
+ EXPECT_EQ(ETIMEDOUT, ret);
+
-+ sem_args.count = 1;
-+ ret = ioctl(fd, NTSYNC_IOC_PUT_SEM, &sem_args);
-+ EXPECT_EQ(0, ret);
-+ EXPECT_EQ(0, sem_args.count);
-+
-+ ret = pthread_tryjoin_np(thread, NULL);
-+ EXPECT_EQ(EBUSY, ret);
-+
-+ check_sem_state(fd, sem_args.sem, 1, 3);
-+
-+ ret = wait_any(fd, 1, &sem_args.sem, 123, &index);
-+ EXPECT_EQ(0, ret);
-+ EXPECT_EQ(0, index);
-+
-+ ret = put_mutex(fd, mutex_args.mutex, 123, &count);
++ ret = ioctl(event_args.event, NTSYNC_IOC_EVENT_SET, &signaled);
+ EXPECT_EQ(0, ret);
-+ EXPECT_EQ(1, count);
-+
-+ ret = pthread_tryjoin_np(thread, NULL);
-+ EXPECT_EQ(EBUSY, ret);
-+
-+ check_mutex_state(fd, mutex_args.mutex, 0, 0);
-+
-+ sem_args.count = 2;
-+ ret = ioctl(fd, NTSYNC_IOC_PUT_SEM, &sem_args);
-+ EXPECT_EQ(0, ret);
-+ EXPECT_EQ(0, sem_args.count);
-+ check_sem_state(fd, sem_args.sem, 1, 3);
-+ check_mutex_state(fd, mutex_args.mutex, 1, 456);
++ EXPECT_EQ(0, signaled);
++ check_event_state(event_args.event, 0, 0);
+
+ ret = wait_for_thread(thread, 100);
+ EXPECT_EQ(0, ret);
+ EXPECT_EQ(0, thread_args.ret);
++ EXPECT_EQ(1, wait_args.index);
+
-+ /* delete an object while it's being waited on */
-+
-+ get_abs_timeout(&timeout, CLOCK_MONOTONIC, 200);
-+ wait_args.owner = 123;
++ wait_args.timeout = get_abs_timeout(1000);
+ ret = pthread_create(&thread, NULL, wait_thread, &thread_args);
+ EXPECT_EQ(0, ret);
+
+ ret = wait_for_thread(thread, 100);
+ EXPECT_EQ(ETIMEDOUT, ret);
+
-+ ret = ioctl(fd, NTSYNC_IOC_DELETE, &sem_args.sem);
++ ret = ioctl(event_args.event, NTSYNC_IOC_EVENT_PULSE, &signaled);
+ EXPECT_EQ(0, ret);
-+ ret = ioctl(fd, NTSYNC_IOC_DELETE, &mutex_args.mutex);
-+ EXPECT_EQ(0, ret);
-+
-+ ret = wait_for_thread(thread, 200);
-+ EXPECT_EQ(0, ret);
-+ EXPECT_EQ(-1, thread_args.ret);
-+ EXPECT_EQ(ETIMEDOUT, thread_args.err);
-+
-+ close(fd);
-+}
++ EXPECT_EQ(0, signaled);
++ check_event_state(event_args.event, 0, 0);
+
- TEST_HARNESS_MAIN
---
-2.43.0
-
-From f56885c1a183947d3b1f5e11a80ce23c7f150e33 Mon Sep 17 00:00:00 2001
-From: Elizabeth Figura <zfigura@codeweavers.com>
-Date: Wed, 19 Jan 2022 19:34:47 -0600
-Subject: [PATCH 25/32] selftests: ntsync: Add some tests for manual-reset
- event state.
-
----
- .../testing/selftests/drivers/ntsync/ntsync.c | 92 +++++++++++++++++++
- 1 file changed, 92 insertions(+)
-
-diff --git a/tools/testing/selftests/drivers/ntsync/ntsync.c b/tools/testing/selftests/drivers/ntsync/ntsync.c
-index 3dbae7c8ac1f..cbe4ed73ffb9 100644
---- a/tools/testing/selftests/drivers/ntsync/ntsync.c
-+++ b/tools/testing/selftests/drivers/ntsync/ntsync.c
-@@ -85,6 +85,30 @@ static int put_mutex(int fd, __u32 mutex, __u32 owner, __u32 *count)
- return ret;
- }
-
-+static int read_event_state(int fd, __u32 event, __u32 *signaled, __u32 *manual)
-+{
-+ struct ntsync_event_args args;
-+ int ret;
-+
-+ args.event = event;
-+ args.signaled = 0xdeadbeef;
-+ args.manual = 0xdeadbeef;
-+ ret = ioctl(fd, NTSYNC_IOC_READ_EVENT, &args);
-+ *signaled = args.signaled;
-+ *manual = args.manual;
-+ return ret;
-+}
-+
-+#define check_event_state(fd, event, signaled, manual) \
-+ ({ \
-+ __u32 __signaled, __manual; \
-+ int ret = read_event_state((fd), (event), \
-+ &__signaled, &__manual); \
-+ EXPECT_EQ(0, ret); \
-+ EXPECT_EQ((signaled), __signaled); \
-+ EXPECT_EQ((manual), __manual); \
-+ })
-+
- static int wait_objs(int fd, unsigned long request, __u32 count,
- const __u32 *objs, __u32 owner, __u32 *index)
- {
-@@ -350,6 +374,74 @@ TEST(mutex_state)
- close(fd);
- }
-
-+TEST(manual_event_state)
-+{
-+ struct ntsync_event_args event_args;
-+ __u32 index;
-+ int fd, ret;
-+
-+ fd = open("/dev/ntsync", O_CLOEXEC | O_RDONLY);
-+ ASSERT_LE(0, fd);
-+
-+ event_args.manual = 1;
-+ event_args.signaled = 0;
-+ event_args.event = 0xdeadbeef;
-+ ret = ioctl(fd, NTSYNC_IOC_CREATE_EVENT, &event_args);
-+ EXPECT_EQ(0, ret);
-+ EXPECT_NE(0xdeadbeef, event_args.event);
-+ check_event_state(fd, event_args.event, 0, 1);
-+
-+ event_args.signaled = 0xdeadbeef;
-+ ret = ioctl(fd, NTSYNC_IOC_SET_EVENT, &event_args);
-+ EXPECT_EQ(0, ret);
-+ EXPECT_EQ(0, event_args.signaled);
-+ check_event_state(fd, event_args.event, 1, 1);
-+
-+ ret = ioctl(fd, NTSYNC_IOC_SET_EVENT, &event_args);
-+ EXPECT_EQ(0, ret);
-+ EXPECT_EQ(1, event_args.signaled);
-+ check_event_state(fd, event_args.event, 1, 1);
-+
-+ ret = wait_any(fd, 1, &event_args.event, 123, &index);
-+ EXPECT_EQ(0, ret);
-+ EXPECT_EQ(0, index);
-+ check_event_state(fd, event_args.event, 1, 1);
-+
-+ event_args.signaled = 0xdeadbeef;
-+ ret = ioctl(fd, NTSYNC_IOC_RESET_EVENT, &event_args);
-+ EXPECT_EQ(0, ret);
-+ EXPECT_EQ(1, event_args.signaled);
-+ check_event_state(fd, event_args.event, 0, 1);
-+
-+ ret = ioctl(fd, NTSYNC_IOC_RESET_EVENT, &event_args);
-+ EXPECT_EQ(0, ret);
-+ EXPECT_EQ(0, event_args.signaled);
-+ check_event_state(fd, event_args.event, 0, 1);
-+
-+ ret = wait_any(fd, 1, &event_args.event, 123, &index);
-+ EXPECT_EQ(-1, ret);
-+ EXPECT_EQ(ETIMEDOUT, errno);
-+
-+ ret = ioctl(fd, NTSYNC_IOC_SET_EVENT, &event_args);
-+ EXPECT_EQ(0, ret);
-+ EXPECT_EQ(0, event_args.signaled);
-+
-+ ret = ioctl(fd, NTSYNC_IOC_PULSE_EVENT, &event_args);
-+ EXPECT_EQ(0, ret);
-+ EXPECT_EQ(1, event_args.signaled);
-+ check_event_state(fd, event_args.event, 0, 1);
-+
-+ ret = ioctl(fd, NTSYNC_IOC_PULSE_EVENT, &event_args);
-+ EXPECT_EQ(0, ret);
-+ EXPECT_EQ(0, event_args.signaled);
-+ check_event_state(fd, event_args.event, 0, 1);
-+
-+ ret = ioctl(fd, NTSYNC_IOC_DELETE, &event_args.event);
-+ EXPECT_EQ(0, ret);
-+
-+ close(fd);
-+}
-+
- TEST(test_wait_any)
- {
- struct ntsync_mutex_args mutex_args = {0};
---
-2.43.0
-
-From d1e2db12a317942c72505085459dad6d64c8926a Mon Sep 17 00:00:00 2001
-From: Elizabeth Figura <zfigura@codeweavers.com>
-Date: Wed, 19 Jan 2022 19:45:39 -0600
-Subject: [PATCH 26/32] selftests: ntsync: Add some tests for auto-reset event
- state.
-
----
- .../testing/selftests/drivers/ntsync/ntsync.c | 59 +++++++++++++++++++
- 1 file changed, 59 insertions(+)
-
-diff --git a/tools/testing/selftests/drivers/ntsync/ntsync.c b/tools/testing/selftests/drivers/ntsync/ntsync.c
-index cbe4ed73ffb9..c158c15fc03e 100644
---- a/tools/testing/selftests/drivers/ntsync/ntsync.c
-+++ b/tools/testing/selftests/drivers/ntsync/ntsync.c
-@@ -442,6 +442,65 @@ TEST(manual_event_state)
- close(fd);
- }
-
-+TEST(auto_event_state)
-+{
-+ struct ntsync_event_args event_args;
-+ __u32 index;
-+ int fd, ret;
-+
-+ fd = open("/dev/ntsync", O_CLOEXEC | O_RDONLY);
-+ ASSERT_LE(0, fd);
-+
-+ event_args.manual = 0;
-+ event_args.signaled = 1;
-+ event_args.event = 0xdeadbeef;
-+ ret = ioctl(fd, NTSYNC_IOC_CREATE_EVENT, &event_args);
-+ EXPECT_EQ(0, ret);
-+ EXPECT_NE(0xdeadbeef, event_args.event);
-+
-+ check_event_state(fd, event_args.event, 1, 0);
-+
-+ event_args.signaled = 0xdeadbeef;
-+ ret = ioctl(fd, NTSYNC_IOC_SET_EVENT, &event_args);
-+ EXPECT_EQ(0, ret);
-+ EXPECT_EQ(1, event_args.signaled);
-+ check_event_state(fd, event_args.event, 1, 0);
-+
-+ ret = wait_any(fd, 1, &event_args.event, 123, &index);
-+ EXPECT_EQ(0, ret);
-+ EXPECT_EQ(0, index);
-+ check_event_state(fd, event_args.event, 0, 0);
-+
-+ event_args.signaled = 0xdeadbeef;
-+ ret = ioctl(fd, NTSYNC_IOC_RESET_EVENT, &event_args);
-+ EXPECT_EQ(0, ret);
-+ EXPECT_EQ(0, event_args.signaled);
-+ check_event_state(fd, event_args.event, 0, 0);
-+
-+ ret = wait_any(fd, 1, &event_args.event, 123, &index);
-+ EXPECT_EQ(-1, ret);
-+ EXPECT_EQ(ETIMEDOUT, errno);
-+
-+ ret = ioctl(fd, NTSYNC_IOC_SET_EVENT, &event_args);
-+ EXPECT_EQ(0, ret);
-+ EXPECT_EQ(0, event_args.signaled);
-+
-+ ret = ioctl(fd, NTSYNC_IOC_PULSE_EVENT, &event_args);
-+ EXPECT_EQ(0, ret);
-+ EXPECT_EQ(1, event_args.signaled);
-+ check_event_state(fd, event_args.event, 0, 0);
-+
-+ ret = ioctl(fd, NTSYNC_IOC_PULSE_EVENT, &event_args);
++ ret = wait_for_thread(thread, 100);
+ EXPECT_EQ(0, ret);
-+ EXPECT_EQ(0, event_args.signaled);
-+ check_event_state(fd, event_args.event, 0, 0);
++ EXPECT_EQ(0, thread_args.ret);
++ EXPECT_EQ(1, wait_args.index);
+
-+ ret = ioctl(fd, NTSYNC_IOC_DELETE, &event_args.event);
-+ EXPECT_EQ(0, ret);
++ close(event_args.event);
+
-+ close(fd);
-+}
-+
- TEST(test_wait_any)
- {
- struct ntsync_mutex_args mutex_args = {0};
---
-2.43.0
-
-From 011b5115949be3b87e3009ea5e4ede6708cf3ece Mon Sep 17 00:00:00 2001
-From: Elizabeth Figura <zfigura@codeweavers.com>
-Date: Wed, 19 Jan 2022 21:00:50 -0600
-Subject: [PATCH 27/32] selftests: ntsync: Add some tests for wakeup signaling
- with events.
-
----
- .../testing/selftests/drivers/ntsync/ntsync.c | 152 +++++++++++++++++-
- 1 file changed, 150 insertions(+), 2 deletions(-)
-
-diff --git a/tools/testing/selftests/drivers/ntsync/ntsync.c b/tools/testing/selftests/drivers/ntsync/ntsync.c
-index c158c15fc03e..8f07577cf156 100644
---- a/tools/testing/selftests/drivers/ntsync/ntsync.c
-+++ b/tools/testing/selftests/drivers/ntsync/ntsync.c
-@@ -610,6 +610,7 @@ TEST(test_wait_any)
-
- TEST(test_wait_all)
- {
-+ struct ntsync_event_args event_args = {0};
- struct ntsync_mutex_args mutex_args = {0};
- struct ntsync_sem_args sem_args = {0};
- __u32 objs[2], owner, index;
-@@ -632,6 +633,11 @@ TEST(test_wait_all)
- EXPECT_EQ(0, ret);
- EXPECT_NE(0xdeadbeef, mutex_args.mutex);
-
+ event_args.manual = true;
-+ event_args.signaled = true;
-+ ret = ioctl(fd, NTSYNC_IOC_CREATE_EVENT, &event_args);
-+ EXPECT_EQ(0, ret);
-+
- objs[0] = sem_args.sem;
- objs[1] = mutex_args.mutex;
-
-@@ -680,6 +686,14 @@ TEST(test_wait_all)
- check_sem_state(fd, sem_args.sem, 1, 3);
- check_mutex_state(fd, mutex_args.mutex, 1, 123);
-
-+ objs[0] = sem_args.sem;
-+ objs[1] = event_args.event;
-+ ret = wait_all(fd, 2, objs, 123, &index);
-+ EXPECT_EQ(0, ret);
-+ EXPECT_EQ(0, index);
-+ check_sem_state(fd, sem_args.sem, 0, 3);
-+ check_event_state(fd, event_args.event, 1, 1);
-+
- /* test waiting on the same object twice */
- objs[0] = objs[1] = sem_args.sem;
- ret = wait_all(fd, 2, objs, 123, &index);
-@@ -690,6 +704,8 @@ TEST(test_wait_all)
- EXPECT_EQ(0, ret);
- ret = ioctl(fd, NTSYNC_IOC_DELETE, &mutex_args.mutex);
- EXPECT_EQ(0, ret);
-+ ret = ioctl(fd, NTSYNC_IOC_DELETE, &event_args.event);
-+ EXPECT_EQ(0, ret);
-
- close(fd);
- }
-@@ -829,6 +845,7 @@ static int wait_for_thread(pthread_t thread, unsigned int ms)
-
- TEST(wake_any)
- {
-+ struct ntsync_event_args event_args = {0};
- struct ntsync_mutex_args mutex_args = {0};
- struct ntsync_wait_args wait_args = {0};
- struct ntsync_sem_args sem_args = {0};
-@@ -918,10 +935,103 @@ TEST(wake_any)
- EXPECT_EQ(0, thread_args.ret);
- EXPECT_EQ(1, wait_args.index);
-
-+ /* test waking events */
-+
-+ event_args.manual = false;
+ event_args.signaled = false;
+ ret = ioctl(fd, NTSYNC_IOC_CREATE_EVENT, &event_args);
+ EXPECT_EQ(0, ret);
+
+ objs[1] = event_args.event;
-+ get_abs_timeout(&timeout, CLOCK_MONOTONIC, 1000);
++ wait_args.timeout = get_abs_timeout(1000);
+ ret = pthread_create(&thread, NULL, wait_thread, &thread_args);
+ EXPECT_EQ(0, ret);
+
+ ret = wait_for_thread(thread, 100);
+ EXPECT_EQ(ETIMEDOUT, ret);
+
-+ ret = ioctl(fd, NTSYNC_IOC_SET_EVENT, &event_args);
++ ret = ioctl(event_args.event, NTSYNC_IOC_EVENT_SET, &signaled);
+ EXPECT_EQ(0, ret);
-+ EXPECT_EQ(0, event_args.signaled);
-+ check_event_state(fd, event_args.event, 0, 0);
++ EXPECT_EQ(0, signaled);
++ check_event_state(event_args.event, 1, 1);
+
+ ret = wait_for_thread(thread, 100);
+ EXPECT_EQ(0, ret);
+ EXPECT_EQ(0, thread_args.ret);
+ EXPECT_EQ(1, wait_args.index);
+
-+ get_abs_timeout(&timeout, CLOCK_MONOTONIC, 1000);
++ ret = ioctl(event_args.event, NTSYNC_IOC_EVENT_RESET, &signaled);
++ EXPECT_EQ(0, ret);
++ EXPECT_EQ(1, signaled);
++
++ wait_args.timeout = get_abs_timeout(1000);
+ ret = pthread_create(&thread, NULL, wait_thread, &thread_args);
+ EXPECT_EQ(0, ret);
+
+ ret = wait_for_thread(thread, 100);
+ EXPECT_EQ(ETIMEDOUT, ret);
+
-+ ret = ioctl(fd, NTSYNC_IOC_PULSE_EVENT, &event_args);
++ ret = ioctl(event_args.event, NTSYNC_IOC_EVENT_PULSE, &signaled);
+ EXPECT_EQ(0, ret);
-+ EXPECT_EQ(0, event_args.signaled);
-+ check_event_state(fd, event_args.event, 0, 0);
++ EXPECT_EQ(0, signaled);
++ check_event_state(event_args.event, 0, 1);
+
+ ret = wait_for_thread(thread, 100);
+ EXPECT_EQ(0, ret);
+ EXPECT_EQ(0, thread_args.ret);
+ EXPECT_EQ(1, wait_args.index);
+
-+ ret = ioctl(fd, NTSYNC_IOC_DELETE, &event_args.event);
-+ EXPECT_EQ(0, ret);
++ close(event_args.event);
+
-+ event_args.manual = true;
-+ event_args.signaled = false;
-+ ret = ioctl(fd, NTSYNC_IOC_CREATE_EVENT, &event_args);
-+ EXPECT_EQ(0, ret);
++ /* delete an object while it's being waited on */
+
-+ objs[1] = event_args.event;
-+ get_abs_timeout(&timeout, CLOCK_MONOTONIC, 1000);
++ wait_args.timeout = get_abs_timeout(200);
++ wait_args.owner = 123;
++ objs[1] = mutex_args.mutex;
+ ret = pthread_create(&thread, NULL, wait_thread, &thread_args);
+ EXPECT_EQ(0, ret);
+
+ ret = wait_for_thread(thread, 100);
+ EXPECT_EQ(ETIMEDOUT, ret);
+
-+ ret = ioctl(fd, NTSYNC_IOC_SET_EVENT, &event_args);
-+ EXPECT_EQ(0, ret);
-+ EXPECT_EQ(0, event_args.signaled);
-+ check_event_state(fd, event_args.event, 1, 1);
-+
-+ ret = wait_for_thread(thread, 100);
-+ EXPECT_EQ(0, ret);
-+ EXPECT_EQ(0, thread_args.ret);
-+ EXPECT_EQ(1, wait_args.index);
++ close(sem_args.sem);
++ close(mutex_args.mutex);
+
-+ ret = ioctl(fd, NTSYNC_IOC_RESET_EVENT, &event_args);
++ ret = wait_for_thread(thread, 200);
+ EXPECT_EQ(0, ret);
-+ EXPECT_EQ(1, event_args.signaled);
++ EXPECT_EQ(-1, thread_args.ret);
++ EXPECT_EQ(ETIMEDOUT, thread_args.err);
+
-+ get_abs_timeout(&timeout, CLOCK_MONOTONIC, 1000);
-+ ret = pthread_create(&thread, NULL, wait_thread, &thread_args);
-+ EXPECT_EQ(0, ret);
++ close(fd);
++}
+
-+ ret = wait_for_thread(thread, 100);
-+ EXPECT_EQ(ETIMEDOUT, ret);
++TEST(wake_all)
++{
++ struct ntsync_event_args manual_event_args = {0};
++ struct ntsync_event_args auto_event_args = {0};
++ struct ntsync_mutex_args mutex_args = {0};
++ struct ntsync_wait_args wait_args = {0};
++ struct ntsync_sem_args sem_args = {0};
++ struct wait_args thread_args;
++ __u32 count, index, signaled;
++ int objs[4], fd, ret;
++ pthread_t thread;
+
-+ ret = ioctl(fd, NTSYNC_IOC_PULSE_EVENT, &event_args);
-+ EXPECT_EQ(0, ret);
-+ EXPECT_EQ(0, event_args.signaled);
-+ check_event_state(fd, event_args.event, 0, 1);
++ fd = open("/dev/ntsync", O_CLOEXEC | O_RDONLY);
++ ASSERT_LE(0, fd);
+
-+ ret = wait_for_thread(thread, 100);
++ sem_args.count = 0;
++ sem_args.max = 3;
++ sem_args.sem = 0xdeadbeef;
++ ret = ioctl(fd, NTSYNC_IOC_CREATE_SEM, &sem_args);
+ EXPECT_EQ(0, ret);
-+ EXPECT_EQ(0, thread_args.ret);
-+ EXPECT_EQ(1, wait_args.index);
++ EXPECT_NE(0xdeadbeef, sem_args.sem);
+
-+ ret = ioctl(fd, NTSYNC_IOC_DELETE, &event_args.event);
++ mutex_args.owner = 123;
++ mutex_args.count = 1;
++ mutex_args.mutex = 0xdeadbeef;
++ ret = ioctl(fd, NTSYNC_IOC_CREATE_MUTEX, &mutex_args);
+ EXPECT_EQ(0, ret);
++ EXPECT_NE(0xdeadbeef, mutex_args.mutex);
+
- /* delete an object while it's being waited on */
-
- get_abs_timeout(&timeout, CLOCK_MONOTONIC, 200);
- wait_args.owner = 123;
-+ objs[1] = mutex_args.mutex;
- ret = pthread_create(&thread, NULL, wait_thread, &thread_args);
- EXPECT_EQ(0, ret);
-
-@@ -943,11 +1053,13 @@ TEST(wake_any)
-
- TEST(wake_all)
- {
-+ struct ntsync_event_args manual_event_args = {0};
-+ struct ntsync_event_args auto_event_args = {0};
- struct ntsync_mutex_args mutex_args = {0};
- struct ntsync_wait_args wait_args = {0};
- struct ntsync_sem_args sem_args = {0};
- struct wait_args thread_args;
-- __u32 objs[2], count, index;
-+ __u32 objs[4], count, index;
- struct timespec timeout;
- pthread_t thread;
- int fd, ret;
-@@ -969,13 +1081,25 @@ TEST(wake_all)
- EXPECT_EQ(0, ret);
- EXPECT_NE(0xdeadbeef, mutex_args.mutex);
-
+ manual_event_args.manual = true;
+ manual_event_args.signaled = true;
+ ret = ioctl(fd, NTSYNC_IOC_CREATE_EVENT, &manual_event_args);
@@ -4000,208 +2795,110 @@ index c158c15fc03e..8f07577cf156 100644
+ ret = ioctl(fd, NTSYNC_IOC_CREATE_EVENT, &auto_event_args);
+ EXPECT_EQ(0, ret);
+
- objs[0] = sem_args.sem;
- objs[1] = mutex_args.mutex;
++ objs[0] = sem_args.sem;
++ objs[1] = mutex_args.mutex;
+ objs[2] = manual_event_args.event;
+ objs[3] = auto_event_args.event;
-
- get_abs_timeout(&timeout, CLOCK_MONOTONIC, 1000);
- wait_args.timeout = (uintptr_t)&timeout;
- wait_args.objs = (uintptr_t)objs;
-- wait_args.count = 2;
++
++ wait_args.timeout = get_abs_timeout(1000);
++ wait_args.objs = (uintptr_t)objs;
+ wait_args.count = 4;
- wait_args.owner = 456;
- thread_args.fd = fd;
- thread_args.args = &wait_args;
-@@ -1009,12 +1133,32 @@ TEST(wake_all)
-
- check_mutex_state(fd, mutex_args.mutex, 0, 0);
-
-+ ret = ioctl(fd, NTSYNC_IOC_RESET_EVENT, &manual_event_args);
++ wait_args.owner = 456;
++ thread_args.fd = fd;
++ thread_args.args = &wait_args;
++ thread_args.request = NTSYNC_IOC_WAIT_ALL;
++ ret = pthread_create(&thread, NULL, wait_thread, &thread_args);
+ EXPECT_EQ(0, ret);
-+ EXPECT_EQ(1, manual_event_args.signaled);
+
- sem_args.count = 2;
- ret = ioctl(fd, NTSYNC_IOC_PUT_SEM, &sem_args);
- EXPECT_EQ(0, ret);
- EXPECT_EQ(0, sem_args.count);
-+ check_sem_state(fd, sem_args.sem, 2, 3);
++ ret = wait_for_thread(thread, 100);
++ EXPECT_EQ(ETIMEDOUT, ret);
+
-+ ret = ioctl(fd, NTSYNC_IOC_RESET_EVENT, &auto_event_args);
++ count = 1;
++ ret = post_sem(sem_args.sem, &count);
+ EXPECT_EQ(0, ret);
-+ EXPECT_EQ(1, auto_event_args.signaled);
++ EXPECT_EQ(0, count);
+
-+ ret = ioctl(fd, NTSYNC_IOC_SET_EVENT, &manual_event_args);
++ ret = pthread_tryjoin_np(thread, NULL);
++ EXPECT_EQ(EBUSY, ret);
++
++ check_sem_state(sem_args.sem, 1, 3);
++
++ ret = wait_any(fd, 1, &sem_args.sem, 123, &index);
+ EXPECT_EQ(0, ret);
-+ EXPECT_EQ(0, manual_event_args.signaled);
++ EXPECT_EQ(0, index);
+
-+ ret = ioctl(fd, NTSYNC_IOC_SET_EVENT, &auto_event_args);
++ ret = unlock_mutex(mutex_args.mutex, 123, &count);
+ EXPECT_EQ(0, ret);
-+ EXPECT_EQ(0, auto_event_args.signaled);
++ EXPECT_EQ(1, count);
+
- check_sem_state(fd, sem_args.sem, 1, 3);
- check_mutex_state(fd, mutex_args.mutex, 1, 456);
-+ check_event_state(fd, manual_event_args.event, 1, 1);
-+ check_event_state(fd, auto_event_args.event, 0, 0);
-
- ret = wait_for_thread(thread, 100);
- EXPECT_EQ(0, ret);
-@@ -1034,6 +1178,10 @@ TEST(wake_all)
- EXPECT_EQ(0, ret);
- ret = ioctl(fd, NTSYNC_IOC_DELETE, &mutex_args.mutex);
- EXPECT_EQ(0, ret);
-+ ret = ioctl(fd, NTSYNC_IOC_DELETE, &manual_event_args.event);
++ ret = pthread_tryjoin_np(thread, NULL);
++ EXPECT_EQ(EBUSY, ret);
++
++ check_mutex_state(mutex_args.mutex, 0, 0);
++
++ ret = ioctl(manual_event_args.event, NTSYNC_IOC_EVENT_RESET, &signaled);
+ EXPECT_EQ(0, ret);
-+ ret = ioctl(fd, NTSYNC_IOC_DELETE, &auto_event_args.event);
++ EXPECT_EQ(1, signaled);
++
++ count = 2;
++ ret = post_sem(sem_args.sem, &count);
+ EXPECT_EQ(0, ret);
-
- ret = wait_for_thread(thread, 200);
- EXPECT_EQ(0, ret);
---
-2.43.0
-
-From 74c862089a6975afeb0a11bfb6e1c632ae231419 Mon Sep 17 00:00:00 2001
-From: Elizabeth Figura <zfigura@codeweavers.com>
-Date: Wed, 19 Jan 2022 21:06:22 -0600
-Subject: [PATCH 28/32] selftests: ntsync: Add some tests for invalid object
- handling with events.
-
----
- .../testing/selftests/drivers/ntsync/ntsync.c | 34 +++++++++++++++++++
- 1 file changed, 34 insertions(+)
-
-diff --git a/tools/testing/selftests/drivers/ntsync/ntsync.c b/tools/testing/selftests/drivers/ntsync/ntsync.c
-index 8f07577cf156..01bd034d4467 100644
---- a/tools/testing/selftests/drivers/ntsync/ntsync.c
-+++ b/tools/testing/selftests/drivers/ntsync/ntsync.c
-@@ -712,6 +712,7 @@ TEST(test_wait_all)
-
- TEST(invalid_objects)
- {
-+ struct ntsync_event_args event_args = {0};
- struct ntsync_mutex_args mutex_args = {0};
- struct ntsync_wait_args wait_args = {0};
- struct ntsync_sem_args sem_args = {0};
-@@ -737,6 +738,22 @@ TEST(invalid_objects)
- EXPECT_EQ(-1, ret);
- EXPECT_EQ(EINVAL, errno);
-
-+ ret = ioctl(fd, NTSYNC_IOC_SET_EVENT, &event_args);
-+ EXPECT_EQ(-1, ret);
-+ EXPECT_EQ(EINVAL, errno);
++ EXPECT_EQ(0, count);
++ check_sem_state(sem_args.sem, 2, 3);
+
-+ ret = ioctl(fd, NTSYNC_IOC_RESET_EVENT, &event_args);
-+ EXPECT_EQ(-1, ret);
-+ EXPECT_EQ(EINVAL, errno);
++ ret = ioctl(auto_event_args.event, NTSYNC_IOC_EVENT_RESET, &signaled);
++ EXPECT_EQ(0, ret);
++ EXPECT_EQ(1, signaled);
+
-+ ret = ioctl(fd, NTSYNC_IOC_PULSE_EVENT, &event_args);
-+ EXPECT_EQ(-1, ret);
-+ EXPECT_EQ(EINVAL, errno);
++ ret = ioctl(manual_event_args.event, NTSYNC_IOC_EVENT_SET, &signaled);
++ EXPECT_EQ(0, ret);
++ EXPECT_EQ(0, signaled);
+
-+ ret = ioctl(fd, NTSYNC_IOC_READ_EVENT, &event_args);
-+ EXPECT_EQ(-1, ret);
-+ EXPECT_EQ(EINVAL, errno);
++ ret = ioctl(auto_event_args.event, NTSYNC_IOC_EVENT_SET, &signaled);
++ EXPECT_EQ(0, ret);
++ EXPECT_EQ(0, signaled);
+
- wait_args.objs = (uintptr_t)objs;
- wait_args.count = 1;
- ret = ioctl(fd, NTSYNC_IOC_WAIT_ANY, &wait_args);
-@@ -763,6 +780,23 @@ TEST(invalid_objects)
- EXPECT_EQ(-1, ret);
- EXPECT_EQ(EINVAL, errno);
-
-+ event_args.event = sem_args.sem;
-+ ret = ioctl(fd, NTSYNC_IOC_SET_EVENT, &event_args);
-+ EXPECT_EQ(-1, ret);
-+ EXPECT_EQ(EINVAL, errno);
++ check_sem_state(sem_args.sem, 1, 3);
++ check_mutex_state(mutex_args.mutex, 1, 456);
++ check_event_state(manual_event_args.event, 1, 1);
++ check_event_state(auto_event_args.event, 0, 0);
+
-+ ret = ioctl(fd, NTSYNC_IOC_RESET_EVENT, &event_args);
-+ EXPECT_EQ(-1, ret);
-+ EXPECT_EQ(EINVAL, errno);
++ ret = wait_for_thread(thread, 100);
++ EXPECT_EQ(0, ret);
++ EXPECT_EQ(0, thread_args.ret);
+
-+ ret = ioctl(fd, NTSYNC_IOC_PULSE_EVENT, &event_args);
-+ EXPECT_EQ(-1, ret);
-+ EXPECT_EQ(EINVAL, errno);
++ /* delete an object while it's being waited on */
+
-+ ret = ioctl(fd, NTSYNC_IOC_READ_EVENT, &event_args);
-+ EXPECT_EQ(-1, ret);
-+ EXPECT_EQ(EINVAL, errno);
++ wait_args.timeout = get_abs_timeout(200);
++ wait_args.owner = 123;
++ ret = pthread_create(&thread, NULL, wait_thread, &thread_args);
++ EXPECT_EQ(0, ret);
+
- objs[0] = sem_args.sem;
- objs[1] = sem_args.sem + 1;
- wait_args.count = 2;
---
-2.43.0
-
-From 8550d7aec916d737b2e81f5916c25da69d0d3de0 Mon Sep 17 00:00:00 2001
-From: Elizabeth Figura <zfigura@codeweavers.com>
-Date: Wed, 20 Apr 2022 18:08:37 -0500
-Subject: [PATCH 29/32] selftests: ntsync: Add tests for alertable waits.
-
----
- .../testing/selftests/drivers/ntsync/ntsync.c | 189 +++++++++++++++++-
- 1 file changed, 186 insertions(+), 3 deletions(-)
-
-diff --git a/tools/testing/selftests/drivers/ntsync/ntsync.c b/tools/testing/selftests/drivers/ntsync/ntsync.c
-index 01bd034d4467..a58387d6744b 100644
---- a/tools/testing/selftests/drivers/ntsync/ntsync.c
-+++ b/tools/testing/selftests/drivers/ntsync/ntsync.c
-@@ -110,7 +110,7 @@ static int read_event_state(int fd, __u32 event, __u32 *signaled, __u32 *manual)
- })
-
- static int wait_objs(int fd, unsigned long request, __u32 count,
-- const __u32 *objs, __u32 owner, __u32 *index)
-+ const __u32 *objs, __u32 owner, __u32 alert, __u32 *index)
- {
- struct ntsync_wait_args args = {0};
- struct timespec timeout;
-@@ -123,6 +123,7 @@ static int wait_objs(int fd, unsigned long request, __u32 count,
- args.objs = (uintptr_t)objs;
- args.owner = owner;
- args.index = 0xdeadbeef;
-+ args.alert = alert;
- ret = ioctl(fd, request, &args);
- *index = args.index;
- return ret;
-@@ -131,13 +132,27 @@ static int wait_objs(int fd, unsigned long request, __u32 count,
- static int wait_any(int fd, __u32 count, const __u32 *objs,
- __u32 owner, __u32 *index)
- {
-- return wait_objs(fd, NTSYNC_IOC_WAIT_ANY, count, objs, owner, index);
-+ return wait_objs(fd, NTSYNC_IOC_WAIT_ANY, count, objs, owner, 0, index);
- }
-
- static int wait_all(int fd, __u32 count, const __u32 *objs,
- __u32 owner, __u32 *index)
- {
-- return wait_objs(fd, NTSYNC_IOC_WAIT_ALL, count, objs, owner, index);
-+ return wait_objs(fd, NTSYNC_IOC_WAIT_ALL, count, objs, owner, 0, index);
-+}
++ ret = wait_for_thread(thread, 100);
++ EXPECT_EQ(ETIMEDOUT, ret);
+
-+static int wait_any_alert(int fd, __u32 count, const __u32 *objs,
-+ __u32 owner, __u32 alert, __u32 *index)
-+{
-+ return wait_objs(fd, NTSYNC_IOC_WAIT_ANY,
-+ count, objs, owner, alert, index);
++ close(sem_args.sem);
++ close(mutex_args.mutex);
++ close(manual_event_args.event);
++ close(auto_event_args.event);
++
++ ret = wait_for_thread(thread, 200);
++ EXPECT_EQ(0, ret);
++ EXPECT_EQ(-1, thread_args.ret);
++ EXPECT_EQ(ETIMEDOUT, thread_args.err);
++
++ close(fd);
+}
+
-+static int wait_all_alert(int fd, __u32 count, const __u32 *objs,
-+ __u32 owner, __u32 alert, __u32 *index)
-+{
-+ return wait_objs(fd, NTSYNC_IOC_WAIT_ALL,
-+ count, objs, owner, alert, index);
- }
-
- TEST(semaphore_state)
-@@ -1225,4 +1240,172 @@ TEST(wake_all)
- close(fd);
- }
-
+TEST(alert_any)
+{
+ struct ntsync_event_args event_args = {0};
++ struct ntsync_wait_args wait_args = {0};
+ struct ntsync_sem_args sem_args = {0};
-+ __u32 objs[2], index;
-+ int fd, ret;
++ __u32 index, count, signaled;
++ struct wait_args thread_args;
++ int objs[2], fd, ret;
++ pthread_t thread;
+
+ fd = open("/dev/ntsync", O_CLOEXEC | O_RDONLY);
+ ASSERT_LE(0, fd);
@@ -4231,14 +2928,14 @@ index 01bd034d4467..a58387d6744b 100644
+ EXPECT_EQ(0, ret);
+ EXPECT_EQ(0, index);
+
-+ ret = ioctl(fd, NTSYNC_IOC_RESET_EVENT, &event_args);
++ ret = ioctl(event_args.event, NTSYNC_IOC_EVENT_RESET, &signaled);
+ EXPECT_EQ(0, ret);
+
+ ret = wait_any_alert(fd, 0, NULL, 123, event_args.event, &index);
+ EXPECT_EQ(-1, ret);
+ EXPECT_EQ(ETIMEDOUT, errno);
+
-+ ret = ioctl(fd, NTSYNC_IOC_SET_EVENT, &event_args);
++ ret = ioctl(event_args.event, NTSYNC_IOC_EVENT_SET, &signaled);
+ EXPECT_EQ(0, ret);
+
+ ret = wait_any_alert(fd, 2, objs, 123, event_args.event, &index);
@@ -4249,9 +2946,36 @@ index 01bd034d4467..a58387d6744b 100644
+ EXPECT_EQ(0, ret);
+ EXPECT_EQ(2, index);
+
-+ ret = ioctl(fd, NTSYNC_IOC_DELETE, &event_args.event);
++ /* test wakeup via alert */
++
++ ret = ioctl(event_args.event, NTSYNC_IOC_EVENT_RESET, &signaled);
+ EXPECT_EQ(0, ret);
+
++ wait_args.timeout = get_abs_timeout(1000);
++ wait_args.objs = (uintptr_t)objs;
++ wait_args.count = 2;
++ wait_args.owner = 123;
++ wait_args.index = 0xdeadbeef;
++ wait_args.alert = event_args.event;
++ thread_args.fd = fd;
++ thread_args.args = &wait_args;
++ thread_args.request = NTSYNC_IOC_WAIT_ANY;
++ ret = pthread_create(&thread, NULL, wait_thread, &thread_args);
++ EXPECT_EQ(0, ret);
++
++ ret = wait_for_thread(thread, 100);
++ EXPECT_EQ(ETIMEDOUT, ret);
++
++ ret = ioctl(event_args.event, NTSYNC_IOC_EVENT_SET, &signaled);
++ EXPECT_EQ(0, ret);
++
++ ret = wait_for_thread(thread, 100);
++ EXPECT_EQ(0, ret);
++ EXPECT_EQ(0, thread_args.ret);
++ EXPECT_EQ(2, wait_args.index);
++
++ close(event_args.event);
++
+ /* test with an auto-reset event */
+
+ event_args.manual = false;
@@ -4259,9 +2983,8 @@ index 01bd034d4467..a58387d6744b 100644
+ ret = ioctl(fd, NTSYNC_IOC_CREATE_EVENT, &event_args);
+ EXPECT_EQ(0, ret);
+
-+ sem_args.sem = objs[0];
-+ sem_args.count = 1;
-+ ret = ioctl(fd, NTSYNC_IOC_PUT_SEM, &sem_args);
++ count = 1;
++ ret = post_sem(objs[0], &count);
+ EXPECT_EQ(0, ret);
+
+ ret = wait_any_alert(fd, 2, objs, 123, event_args.event, &index);
@@ -4276,13 +2999,10 @@ index 01bd034d4467..a58387d6744b 100644
+ EXPECT_EQ(-1, ret);
+ EXPECT_EQ(ETIMEDOUT, errno);
+
-+ ret = ioctl(fd, NTSYNC_IOC_DELETE, &event_args.event);
-+ EXPECT_EQ(0, ret);
++ close(event_args.event);
+
-+ ret = ioctl(fd, NTSYNC_IOC_DELETE, &objs[0]);
-+ EXPECT_EQ(0, ret);
-+ ret = ioctl(fd, NTSYNC_IOC_DELETE, &objs[1]);
-+ EXPECT_EQ(0, ret);
++ close(objs[0]);
++ close(objs[1]);
+
+ close(fd);
+}
@@ -4290,9 +3010,12 @@ index 01bd034d4467..a58387d6744b 100644
+TEST(alert_all)
+{
+ struct ntsync_event_args event_args = {0};
++ struct ntsync_wait_args wait_args = {0};
+ struct ntsync_sem_args sem_args = {0};
-+ __u32 objs[2], index;
-+ int fd, ret;
++ struct wait_args thread_args;
++ __u32 index, count, signaled;
++ int objs[2], fd, ret;
++ pthread_t thread;
+
+ fd = open("/dev/ntsync", O_CLOEXEC | O_RDONLY);
+ ASSERT_LE(0, fd);
@@ -4326,86 +3049,12 @@ index 01bd034d4467..a58387d6744b 100644
+ EXPECT_EQ(0, ret);
+ EXPECT_EQ(2, index);
+
-+ ret = ioctl(fd, NTSYNC_IOC_DELETE, &event_args.event);
-+ EXPECT_EQ(0, ret);
-+
-+ /* test with an auto-reset event */
-+
-+ event_args.manual = false;
-+ event_args.signaled = true;
-+ ret = ioctl(fd, NTSYNC_IOC_CREATE_EVENT, &event_args);
-+ EXPECT_EQ(0, ret);
-+
-+ sem_args.sem = objs[1];
-+ sem_args.count = 2;
-+ ret = ioctl(fd, NTSYNC_IOC_PUT_SEM, &sem_args);
-+ EXPECT_EQ(0, ret);
-+
-+ ret = wait_all_alert(fd, 2, objs, 123, event_args.event, &index);
-+ EXPECT_EQ(0, ret);
-+ EXPECT_EQ(0, index);
-+
-+ ret = wait_all_alert(fd, 2, objs, 123, event_args.event, &index);
-+ EXPECT_EQ(0, ret);
-+ EXPECT_EQ(2, index);
-+
-+ ret = wait_all_alert(fd, 2, objs, 123, event_args.event, &index);
-+ EXPECT_EQ(-1, ret);
-+ EXPECT_EQ(ETIMEDOUT, errno);
-+
-+ ret = ioctl(fd, NTSYNC_IOC_DELETE, &event_args.event);
-+ EXPECT_EQ(0, ret);
-+
-+ ret = ioctl(fd, NTSYNC_IOC_DELETE, &objs[0]);
-+ EXPECT_EQ(0, ret);
-+ ret = ioctl(fd, NTSYNC_IOC_DELETE, &objs[1]);
-+ EXPECT_EQ(0, ret);
-+
-+ close(fd);
-+}
-+
- TEST_HARNESS_MAIN
---
-2.43.0
-
-From 96d776b0b301b8a9f0b2fc27e62ff8b26e407072 Mon Sep 17 00:00:00 2001
-From: Elizabeth Figura <zfigura@codeweavers.com>
-Date: Wed, 20 Apr 2022 18:24:43 -0500
-Subject: [PATCH 30/32] selftests: ntsync: Add some tests for wakeup signaling
- via alerts.
-
----
- .../testing/selftests/drivers/ntsync/ntsync.c | 66 +++++++++++++++++++
- 1 file changed, 66 insertions(+)
-
-diff --git a/tools/testing/selftests/drivers/ntsync/ntsync.c b/tools/testing/selftests/drivers/ntsync/ntsync.c
-index a58387d6744b..fda9f1c5e810 100644
---- a/tools/testing/selftests/drivers/ntsync/ntsync.c
-+++ b/tools/testing/selftests/drivers/ntsync/ntsync.c
-@@ -1243,8 +1243,12 @@ TEST(wake_all)
- TEST(alert_any)
- {
- struct ntsync_event_args event_args = {0};
-+ struct ntsync_wait_args wait_args = {0};
- struct ntsync_sem_args sem_args = {0};
-+ struct wait_args thread_args;
-+ struct timespec timeout;
- __u32 objs[2], index;
-+ pthread_t thread;
- int fd, ret;
-
- fd = open("/dev/ntsync", O_CLOEXEC | O_RDONLY);
-@@ -1293,6 +1297,35 @@ TEST(alert_any)
- EXPECT_EQ(0, ret);
- EXPECT_EQ(2, index);
-
+ /* test wakeup via alert */
+
-+ ret = ioctl(fd, NTSYNC_IOC_RESET_EVENT, &event_args);
++ ret = ioctl(event_args.event, NTSYNC_IOC_EVENT_RESET, &signaled);
+ EXPECT_EQ(0, ret);
+
-+ get_abs_timeout(&timeout, CLOCK_MONOTONIC, 1000);
-+ wait_args.timeout = (uintptr_t)&timeout;
++ wait_args.timeout = get_abs_timeout(1000);
+ wait_args.objs = (uintptr_t)objs;
+ wait_args.count = 2;
+ wait_args.owner = 123;
@@ -4413,14 +3062,14 @@ index a58387d6744b..fda9f1c5e810 100644
+ wait_args.alert = event_args.event;
+ thread_args.fd = fd;
+ thread_args.args = &wait_args;
-+ thread_args.request = NTSYNC_IOC_WAIT_ANY;
++ thread_args.request = NTSYNC_IOC_WAIT_ALL;
+ ret = pthread_create(&thread, NULL, wait_thread, &thread_args);
+ EXPECT_EQ(0, ret);
+
+ ret = wait_for_thread(thread, 100);
+ EXPECT_EQ(ETIMEDOUT, ret);
+
-+ ret = ioctl(fd, NTSYNC_IOC_SET_EVENT, &event_args);
++ ret = ioctl(event_args.event, NTSYNC_IOC_EVENT_SET, &signaled);
+ EXPECT_EQ(0, ret);
+
+ ret = wait_for_thread(thread, 100);
@@ -4428,568 +3077,111 @@ index a58387d6744b..fda9f1c5e810 100644
+ EXPECT_EQ(0, thread_args.ret);
+ EXPECT_EQ(2, wait_args.index);
+
- ret = ioctl(fd, NTSYNC_IOC_DELETE, &event_args.event);
- EXPECT_EQ(0, ret);
-
-@@ -1334,8 +1367,12 @@ TEST(alert_any)
- TEST(alert_all)
- {
- struct ntsync_event_args event_args = {0};
-+ struct ntsync_wait_args wait_args = {0};
- struct ntsync_sem_args sem_args = {0};
-+ struct wait_args thread_args;
-+ struct timespec timeout;
- __u32 objs[2], index;
-+ pthread_t thread;
- int fd, ret;
-
- fd = open("/dev/ntsync", O_CLOEXEC | O_RDONLY);
-@@ -1370,6 +1407,35 @@ TEST(alert_all)
- EXPECT_EQ(0, ret);
- EXPECT_EQ(2, index);
-
-+ /* test wakeup via alert */
++ close(event_args.event);
+
-+ ret = ioctl(fd, NTSYNC_IOC_RESET_EVENT, &event_args);
-+ EXPECT_EQ(0, ret);
++ /* test with an auto-reset event */
+
-+ get_abs_timeout(&timeout, CLOCK_MONOTONIC, 1000);
-+ wait_args.timeout = (uintptr_t)&timeout;
-+ wait_args.objs = (uintptr_t)objs;
-+ wait_args.count = 2;
-+ wait_args.owner = 123;
-+ wait_args.index = 0xdeadbeef;
-+ wait_args.alert = event_args.event;
-+ thread_args.fd = fd;
-+ thread_args.args = &wait_args;
-+ thread_args.request = NTSYNC_IOC_WAIT_ALL;
-+ ret = pthread_create(&thread, NULL, wait_thread, &thread_args);
++ event_args.manual = false;
++ event_args.signaled = true;
++ ret = ioctl(fd, NTSYNC_IOC_CREATE_EVENT, &event_args);
+ EXPECT_EQ(0, ret);
+
-+ ret = wait_for_thread(thread, 100);
-+ EXPECT_EQ(ETIMEDOUT, ret);
-+
-+ ret = ioctl(fd, NTSYNC_IOC_SET_EVENT, &event_args);
++ count = 2;
++ ret = post_sem(objs[1], &count);
+ EXPECT_EQ(0, ret);
+
-+ ret = wait_for_thread(thread, 100);
++ ret = wait_all_alert(fd, 2, objs, 123, event_args.event, &index);
+ EXPECT_EQ(0, ret);
-+ EXPECT_EQ(0, thread_args.ret);
-+ EXPECT_EQ(2, wait_args.index);
-+
- ret = ioctl(fd, NTSYNC_IOC_DELETE, &event_args.event);
- EXPECT_EQ(0, ret);
-
---
-2.43.0
-
-From 5ecf8efc0d4f019edcf4334b54314226bc30bd62 Mon Sep 17 00:00:00 2001
-From: Elizabeth Figura <zfigura@codeweavers.com>
-Date: Fri, 5 Mar 2021 12:22:55 -0600
-Subject: [PATCH 31/32] maintainers: Add an entry for ntsync.
-
----
- MAINTAINERS | 9 +++++++++
- 1 file changed, 9 insertions(+)
-
-diff --git a/MAINTAINERS b/MAINTAINERS
-index a7c4cf8201e0..90e84b768c42 100644
---- a/MAINTAINERS
-+++ b/MAINTAINERS
-@@ -15341,6 +15341,15 @@ T: git https://github.com/Paragon-Software-Group/linux-ntfs3.git
- F: Documentation/filesystems/ntfs3.rst
- F: fs/ntfs3/
-
-+NTSYNC SYNCHRONIZATION PRIMITIVE DRIVER
-+M: Elizabeth Figura <zfigura@codeweavers.com>
-+L: wine-devel@winehq.org
-+S: Supported
-+F: Documentation/userspace-api/ntsync.rst
-+F: drivers/misc/ntsync.c
-+F: include/uapi/linux/ntsync.h
-+F: tools/testing/selftests/drivers/ntsync/
-+
- NUBUS SUBSYSTEM
- M: Finn Thain <fthain@linux-m68k.org>
- L: linux-m68k@lists.linux-m68k.org
---
-2.43.0
-
-From e4db1ebaa7b9b150bcf54a4d57699e746b4d5b75 Mon Sep 17 00:00:00 2001
-From: Peter Jung <admin@ptr1337.dev>
-Date: Wed, 24 Jan 2024 17:37:06 +0100
-Subject: [PATCH 32/32] docs: ntsync: Add documentation for the ntsync uAPI.
-
-Signed-off-by: Peter Jung <admin@ptr1337.dev>
----
- Documentation/userspace-api/index.rst | 1 +
- Documentation/userspace-api/ntsync.rst | 445 +++++++++++++++++++++++++
- 2 files changed, 446 insertions(+)
- create mode 100644 Documentation/userspace-api/ntsync.rst
-
-diff --git a/Documentation/userspace-api/index.rst b/Documentation/userspace-api/index.rst
-index 031df47a7c19..188bf15c4ecf 100644
---- a/Documentation/userspace-api/index.rst
-+++ b/Documentation/userspace-api/index.rst
-@@ -33,6 +33,7 @@ place where this information is gathered.
- sysfs-platform_profile
- vduse
- futex2
-+ ntsync
-
- .. only:: subproject and html
-
-diff --git a/Documentation/userspace-api/ntsync.rst b/Documentation/userspace-api/ntsync.rst
-new file mode 100644
-index 000000000000..45d945b3e246
---- /dev/null
-+++ b/Documentation/userspace-api/ntsync.rst
-@@ -0,0 +1,445 @@
-+===================================
-+NT synchronization primitive driver
-+===================================
-+
-+This page documents the user-space API for the ntsync driver.
-+
-+ntsync is a support driver for emulation of NT synchronization
-+primitives by user-space NT emulators. It exists because implementation
-+in user-space, using existing tools, cannot match Windows performance
-+while offering accurate semantics. It is implemented entirely in
-+software, and does not drive any hardware device.
-+
-+This interface is meant as a compatibility tool only, and should not
-+be used for general synchronization. Instead use generic, versatile
-+interfaces such as futex(2) and poll(2).
-+
-+Synchronization primitives
-+==========================
-+
-+The ntsync driver exposes three types of synchronization primitives:
-+semaphores, mutexes, and events.
-+
-+A semaphore holds a single volatile 32-bit counter, and a static
-+32-bit integer denoting the maximum value. It is considered signaled
-+when the counter is nonzero. The counter is decremented by one when a
-+wait is satisfied. Both the initial and maximum count are established
-+when the semaphore is created.
-+
-+A mutex holds a volatile 32-bit recursion count, and a volatile 32-bit
-+identifier denoting its owner. A mutex is considered signaled when its
-+owner is zero (indicating that it is not owned). The recursion count
-+is incremented when a wait is satisfied, and ownership is set to the
-+given identifier.
-+
-+A mutex also holds an internal flag denoting whether its previous
-+owner has died; such a mutex is said to be inconsistent. Owner death
-+is not tracked automatically based on thread death, but rather must be
-+communicated using ``NTSYNC_IOC_KILL_OWNER``. An inconsistent mutex
-+is inherently considered unowned.
-+
-+Except for the "unowned" semantics of zero, the actual value of the
-+owner identifier is not interpreted by the ntsync driver at all. The
-+intended use is to store a thread identifier; however, the ntsync
-+driver does not actually validate that a calling thread provides
-+consistent or unique identifiers.
-+
-+An event holds a volatile boolean state denoting whether it is
-+signaled or not. There are two types of events, auto-reset and
-+manual-reset. An auto-reset event is designaled when a wait is
-+satisfied; a manual-reset event is not. The event type is specified
-+when the event is created.
-+
-+Unless specified otherwise, all operations on an object are atomic and
-+totally ordered with respect to other operations on the same object.
-+
-+Objects are represented by unsigned 32-bit integers.
-+
-+Char device
-+===========
-+
-+The ntsync driver creates a single char device /dev/ntsync. Each
-+file description opened on the device represents a unique namespace.
-+That is, objects created on one open file description are shared
-+across all its individual descriptors, but are not shared with other
-+open() calls on the same device. The same file description may be
-+shared across multiple processes.
-+
-+ioctl reference
-+===============
-+
-+All operations on the device are done through ioctls. There are four
-+structures used in ioctl calls::
-+
-+ struct ntsync_sem_args {
-+ __u32 sem;
-+ __u32 count;
-+ __u32 max;
-+ };
-+
-+ struct ntsync_mutex_args {
-+ __u32 mutex;
-+ __u32 owner;
-+ __u32 count;
-+ };
-+
-+ struct ntsync_event_args {
-+ __u32 event;
-+ __u32 signaled;
-+ __u32 manual;
-+ };
-+
-+ struct ntsync_wait_args {
-+ __u64 timeout;
-+ __u64 objs;
-+ __u32 count;
-+ __u32 owner;
-+ __u32 index;
-+ __u32 alert;
-+ };
-+
-+Depending on the ioctl, members of the structure may be used as input,
-+output, or not at all. All ioctls return 0 on success.
-+
-+The ioctls are as follows:
-+
-+.. c:macro:: NTSYNC_IOC_CREATE_SEM
-+
-+ Create a semaphore object. Takes a pointer to struct
-+ :c:type:`ntsync_sem_args`, which is used as follows:
-+
-+ .. list-table::
-+
-+ * - ``sem``
-+ - On output, contains the identifier of the created semaphore.
-+ * - ``count``
-+ - Initial count of the semaphore.
-+ * - ``max``
-+ - Maximum count of the semaphore.
-+
-+ Fails with ``EINVAL`` if ``count`` is greater than ``max``.
-+
-+.. c:macro:: NTSYNC_IOC_CREATE_MUTEX
-+
-+ Create a mutex object. Takes a pointer to struct
-+ :c:type:`ntsync_mutex_args`, which is used as follows:
-+
-+ .. list-table::
-+
-+ * - ``mutex``
-+ - On output, contains the identifier of the created mutex.
-+ * - ``count``
-+ - Initial recursion count of the mutex.
-+ * - ``owner``
-+ - Initial owner of the mutex.
-+
-+ If ``owner`` is nonzero and ``count`` is zero, or if ``owner`` is
-+ zero and ``count`` is nonzero, the function fails with ``EINVAL``.
-+
-+.. c:macro:: NTSYNC_IOC_CREATE_EVENT
-+
-+ Create an event object. Takes a pointer to struct
-+ :c:type:`ntsync_event_args`, which is used as follows:
-+
-+ .. list-table::
-+
-+ * - ``event``
-+ - On output, contains the identifier of the created event.
-+ * - ``signaled``
-+ - If nonzero, the event is initially signaled, otherwise
-+ nonsignaled.
-+ * - ``manual``
-+ - If nonzero, the event is a manual-reset event, otherwise
-+ auto-reset.
-+
-+.. c:macro:: NTSYNC_IOC_DELETE
-+
-+ Delete an object of any type. Takes an input-only pointer to a
-+ 32-bit integer denoting the object to delete.
-+
-+ Wait ioctls currently in progress are not interrupted, and behave as
-+ if the object remains valid.
-+
-+.. c:macro:: NTSYNC_IOC_PUT_SEM
-+
-+ Post to a semaphore object. Takes a pointer to struct
-+ :c:type:`ntsync_sem_args`, which is used as follows:
-+
-+ .. list-table::
-+
-+ * - ``sem``
-+ - Semaphore object to post to.
-+ * - ``count``
-+ - Count to add to the semaphore. On output, contains the
-+ previous count of the semaphore.
-+ * - ``max``
-+ - Not used.
-+
-+ If adding ``count`` to the semaphore's current count would raise the
-+ latter past the semaphore's maximum count, the ioctl fails with
-+ ``EOVERFLOW`` and the semaphore is not affected. If raising the
-+ semaphore's count causes it to become signaled, eligible threads
-+ waiting on this semaphore will be woken and the semaphore's count
-+ decremented appropriately.
-+
-+.. c:macro:: NTSYNC_IOC_PUT_MUTEX
-+
-+ Release a mutex object. Takes a pointer to struct
-+ :c:type:`ntsync_mutex_args`, which is used as follows:
-+
-+ .. list-table::
-+
-+ * - ``mutex``
-+ - Mutex object to release.
-+ * - ``owner``
-+ - Mutex owner identifier.
-+ * - ``count``
-+ - On output, contains the previous recursion count.
-+
-+ If ``owner`` is zero, the ioctl fails with ``EINVAL``. If ``owner``
-+ is not the current owner of the mutex, the ioctl fails with
-+ ``EPERM``.
-+
-+ The mutex's count will be decremented by one. If decrementing the
-+ mutex's count causes it to become zero, the mutex is marked as
-+ unowned and signaled, and eligible threads waiting on it will be
-+ woken as appropriate.
-+
-+.. c:macro:: NTSYNC_IOC_SET_EVENT
-+
-+ Signal an event object. Takes a pointer to struct
-+ :c:type:`ntsync_event_args`, which is used as follows:
-+
-+ .. list-table::
-+
-+ * - ``event``
-+ - Event object to set.
-+ * - ``signaled``
-+ - On output, contains the previous state of the event.
-+ * - ``manual``
-+ - Unused.
-+
-+ Eligible threads will be woken, and auto-reset events will be
-+ designaled appropriately.
-+
-+.. c:macro:: NTSYNC_IOC_RESET_EVENT
-+
-+ Designal an event object. Takes a pointer to struct
-+ :c:type:`ntsync_event_args`, which is used as follows:
-+
-+ .. list-table::
-+
-+ * - ``event``
-+ - Event object to reset.
-+ * - ``signaled``
-+ - On output, contains the previous state of the event.
-+ * - ``manual``
-+ - Unused.
-+
-+.. c:macro:: NTSYNC_IOC_PULSE_EVENT
-+
-+ Wake threads waiting on an event object without leaving it in a
-+ signaled state. Takes a pointer to struct
-+ :c:type:`ntsync_event_args`, which is used as follows:
-+
-+ .. list-table::
-+
-+ * - ``event``
-+ - Event object to pulse.
-+ * - ``signaled``
-+ - On output, contains the previous state of the event.
-+ * - ``manual``
-+ - Unused.
-+
-+ A pulse operation can be thought of as a set followed by a reset,
-+ performed as a single atomic operation. If two threads are waiting
-+ on an auto-reset event which is pulsed, only one will be woken. If
-+ two threads are waiting a manual-reset event which is pulsed, both
-+ will be woken. However, in both cases, the event will be unsignaled
-+ afterwards, and a simultaneous read operation will always report the
-+ event as unsignaled.
-+
-+.. c:macro:: NTSYNC_IOC_READ_SEM
-+
-+ Read the current state of a semaphore object. Takes a pointer to
-+ struct :c:type:`ntsync_sem_args`, which is used as follows:
-+
-+ .. list-table::
-+
-+ * - ``sem``
-+ - Semaphore object to read.
-+ * - ``count``
-+ - On output, contains the current count of the semaphore.
-+ * - ``max``
-+ - On output, contains the maximum count of the semaphore.
-+
-+.. c:macro:: NTSYNC_IOC_READ_MUTEX
-+
-+ Read the current state of a mutex object. Takes a pointer to struct
-+ :c:type:`ntsync_mutex_args`, which is used as follows:
++ EXPECT_EQ(0, index);
+
-+ .. list-table::
++ ret = wait_all_alert(fd, 2, objs, 123, event_args.event, &index);
++ EXPECT_EQ(0, ret);
++ EXPECT_EQ(2, index);
+
-+ * - ``mutex``
-+ - Mutex object to read.
-+ * - ``owner``
-+ - On output, contains the current owner of the mutex, or zero
-+ if the mutex is not currently owned.
-+ * - ``count``
-+ - On output, contains the current recursion count of the mutex.
++ ret = wait_all_alert(fd, 2, objs, 123, event_args.event, &index);
++ EXPECT_EQ(-1, ret);
++ EXPECT_EQ(ETIMEDOUT, errno);
+
-+ If the mutex is marked as inconsistent, the function fails with
-+ ``EOWNERDEAD``. In this case, ``count`` and ``owner`` are set to
-+ zero.
++ close(event_args.event);
+
-+.. c:macro:: NTSYNC_IOC_READ_EVENT
++ close(objs[0]);
++ close(objs[1]);
+
-+ Read the current state of an event object. Takes a pointer to struct
-+ :c:type:`ntsync_event_args`, which is used as follows:
++ close(fd);
++}
+
-+ .. list-table::
++#define STRESS_LOOPS 10000
++#define STRESS_THREADS 4
+
-+ * - ``event``
-+ - Event object.
-+ * - ``signaled``
-+ - On output, contains the current state of the event.
-+ * - ``manual``
-+ - On output, contains 1 if the event is a manual-reset event,
-+ and 0 otherwise.
++static unsigned int stress_counter;
++static int stress_device, stress_start_event, stress_mutex;
+
-+.. c:macro:: NTSYNC_IOC_KILL_OWNER
++static void *stress_thread(void *arg)
++{
++ struct ntsync_wait_args wait_args = {0};
++ __u32 index, count, i;
++ int ret;
+
-+ Mark any mutexes owned by the given owner as unowned and
-+ inconsistent. Takes an input-only pointer to a 32-bit integer
-+ denoting the owner. If the owner is zero, the ioctl fails with
-+ ``EINVAL``.
++ 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;
+
-+ For each mutex currently owned by the given owner, eligible threads
-+ waiting on said mutex will be woken as appropriate (and such waits
-+ will fail with ``EOWNERDEAD``, as described below).
++ ioctl(stress_device, NTSYNC_IOC_WAIT_ANY, &wait_args);
+
-+ The operation as a whole is not atomic; however, the modification of
-+ each mutex is atomic and totally ordered with respect to other
-+ operations on the same mutex.
++ wait_args.objs = (uintptr_t)&stress_mutex;
+
-+.. c:macro:: NTSYNC_IOC_WAIT_ANY
++ for (i = 0; i < STRESS_LOOPS; ++i) {
++ ioctl(stress_device, NTSYNC_IOC_WAIT_ANY, &wait_args);
+
-+ Poll on any of a list of objects, atomically acquiring at most one.
-+ Takes a pointer to struct :c:type:`ntsync_wait_args`, which is
-+ used as follows:
++ ++stress_counter;
+
-+ .. list-table::
++ unlock_mutex(stress_mutex, wait_args.owner, &count);
++ }
+
-+ * - ``timeout``
-+ - Optional pointer to a 64-bit struct :c:type:`timespec`
-+ (specified as an integer so that the structure has the same
-+ size regardless of architecture). The timeout is specified in
-+ absolute format, as measured against the MONOTONIC clock. If
-+ the timeout is equal to or earlier than the current time, the
-+ function returns immediately without sleeping. If ``timeout``
-+ is zero, i.e. NULL, the function will sleep until an object
-+ is signaled, and will not fail with ``ETIMEDOUT``.
-+ * - ``objs``
-+ - Pointer to an array of ``count`` 32-bit object identifiers
-+ (specified as an integer so that the structure has the same
-+ size regardless of architecture). If any identifier is
-+ invalid, the function fails with ``EINVAL``.
-+ * - ``count``
-+ - Number of object identifiers specified in the ``objs`` array.
-+ If greater than ``NTSYNC_MAX_WAIT_COUNT``, the function fails
-+ with ``EINVAL``.
-+ * - ``owner``
-+ - Mutex owner identifier. If any object in ``objs`` is a mutex,
-+ the ioctl will attempt to acquire that mutex on behalf of
-+ ``owner``. If ``owner`` is zero, the ioctl fails with
-+ ``EINVAL``.
-+ * - ``index``
-+ - On success, contains the index (into ``objs``) of the object
-+ which was signaled. If ``alert`` was signaled instead,
-+ this contains ``count``.
-+ * - ``alert``
-+ - Optional event object identifier. If nonzero, this specifies
-+ an "alert" event object which, if signaled, will terminate
-+ the wait. If nonzero, the identifier must point to a valid
-+ event.
-+
-+ This function attempts to acquire one of the given objects. If
-+ unable to do so, it sleeps until an object becomes signaled,
-+ subsequently acquiring it, or the timeout expires. In the latter
-+ case the ioctl fails with ``ETIMEDOUT``. The function only acquires
-+ one object, even if multiple objects are signaled.
-+
-+ A semaphore is considered to be signaled if its count is nonzero,
-+ and is acquired by decrementing its count by one. A mutex is
-+ considered to be signaled if it is unowned or if its owner matches
-+ the ``owner`` argument, and is acquired by incrementing its
-+ recursion count by one and setting its owner to the ``owner``
-+ argument. An auto-reset event is acquired by designaling it; a
-+ manual-reset event is not affected by acquisition.
++ return NULL;
++}
+
-+ Acquisition is atomic and totally ordered with respect to other
-+ operations on the same object. If two wait operations (with
-+ different ``owner`` identifiers) are queued on the same mutex, only
-+ one is signaled. If two wait operations are queued on the same
-+ semaphore, and a value of one is posted to it, only one is signaled.
-+ The order in which threads are signaled is not specified.
++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;
+
-+ If an inconsistent mutex is acquired, the ioctl fails with
-+ ``EOWNERDEAD``. Although this is a failure return, the function may
-+ otherwise be considered successful. The mutex is marked as owned by
-+ the given owner (with a recursion count of 1) and as no longer
-+ inconsistent, and ``index`` is still set to the index of the mutex.
++ stress_device = open("/dev/ntsync", O_CLOEXEC | O_RDONLY);
++ ASSERT_LE(0, stress_device);
+
-+ The ``alert`` argument is an "extra" event which can terminate the
-+ wait, independently of all other objects. If members of ``objs`` and
-+ ``alert`` are both simultaneously signaled, a member of ``objs``
-+ will always be given priority and acquired first. Aside from this,
-+ for "any" waits, there is no difference between passing an event as
-+ this parameter, and passing it as an additional object at the end of
-+ the ``objs`` array. For "all" waits, there is an additional
-+ difference, as described below.
++ 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;
+
-+ It is valid to pass the same object more than once, including by
-+ passing the same event in the ``objs`` array and in ``alert``. If a
-+ wakeup occurs due to that object being signaled, ``index`` is set to
-+ the lowest index corresponding to that object.
++ 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;
+
-+ The function may fail with ``EINTR`` if a signal is received.
++ for (i = 0; i < STRESS_THREADS; ++i)
++ pthread_create(&threads[i], NULL, stress_thread, NULL);
+
-+.. c:macro:: NTSYNC_IOC_WAIT_ALL
++ ret = ioctl(stress_start_event, NTSYNC_IOC_EVENT_SET, &signaled);
++ EXPECT_EQ(0, ret);
+
-+ Poll on a list of objects, atomically acquiring all of them. Takes a
-+ pointer to struct :c:type:`ntsync_wait_args`, which is used
-+ identically to ``NTSYNC_IOC_WAIT_ANY``, except that ``index`` is
-+ always filled with zero on success if not woken via alert.
++ for (i = 0; i < STRESS_THREADS; ++i) {
++ ret = pthread_join(threads[i], NULL);
++ EXPECT_EQ(0, ret);
++ }
+
-+ This function attempts to simultaneously acquire all of the given
-+ objects. If unable to do so, it sleeps until all objects become
-+ simultaneously signaled, subsequently acquiring them, or the timeout
-+ expires. In the latter case the ioctl fails with ``ETIMEDOUT`` and
-+ no objects are modified.
++ EXPECT_EQ(STRESS_LOOPS * STRESS_THREADS, stress_counter);
+
-+ Objects may become signaled and subsequently designaled (through
-+ acquisition by other threads) while this thread is sleeping. Only
-+ once all objects are simultaneously signaled does the ioctl acquire
-+ them and return. The entire acquisition is atomic and totally
-+ ordered with respect to other operations on any of the given
-+ objects.
-+
-+ If an inconsistent mutex is acquired, the ioctl fails with
-+ ``EOWNERDEAD``. Similarly to ``NTSYNC_IOC_WAIT_ANY``, all objects
-+ are nevertheless marked as acquired. Note that if multiple mutex
-+ objects are specified, there is no way to know which were marked as
-+ inconsistent.
-+
-+ As with "any" waits, the ``alert`` argument is an "extra" event
-+ which can terminate the wait. Critically, however, an "all" wait
-+ will succeed if all members in ``objs`` are signaled, *or* if
-+ ``alert`` is signaled. In the latter case ``index`` will be set to
-+ ``count``. As with "any" waits, if both conditions are filled, the
-+ former takes priority, and objects in ``objs`` will be acquired.
++ close(stress_start_event);
++ close(stress_mutex);
++ close(stress_device);
++}
+
-+ Unlike ``NTSYNC_IOC_WAIT_ANY``, it is not valid to pass the same
-+ object more than once, nor is it valid to pass the same object in
-+ ``objs`` and in ``alert``. If this is attempted, the function fails
-+ with ``EINVAL``.
---
-2.43.0
-
++TEST_HARNESS_MAIN
diff --git a/SOURCES/0002-drm-i915-add-kernel-parameter-to-disable-async-page-.patch b/SOURCES/0002-drm-i915-add-kernel-parameter-to-disable-async-page-.patch
index c292278..20b095b 100644
--- a/SOURCES/0002-drm-i915-add-kernel-parameter-to-disable-async-page-.patch
+++ b/SOURCES/0002-drm-i915-add-kernel-parameter-to-disable-async-page-.patch
@@ -1,6 +1,6 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Jan200101 <sentrycraft123@gmail.com>
-Date: Mon, 25 Sep 2023 12:29:07 +0200
+Date: Sat, 30 Mar 2024 19:20:48 +0100
Subject: [PATCH] drm/i915: add kernel parameter to disable async page flipping
Signed-off-by: Jan200101 <sentrycraft123@gmail.com>
@@ -8,13 +8,14 @@ Signed-off-by: Jan200101 <sentrycraft123@gmail.com>
drivers/gpu/drm/i915/display/intel_display_driver.c | 2 +-
drivers/gpu/drm/i915/i915_params.c | 4 ++++
drivers/gpu/drm/i915/i915_params.h | 3 ++-
- 3 files changed, 7 insertions(+), 2 deletions(-)
+ drivers/gpu/drm/xe/xe_device_types.h | 1 +
+ 4 files changed, 8 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_display_driver.c b/drivers/gpu/drm/i915/display/intel_display_driver.c
-index b909814ae02b..918b8b589ec7 100644
+index 9df9097a0255..24c084420441 100644
--- a/drivers/gpu/drm/i915/display/intel_display_driver.c
+++ b/drivers/gpu/drm/i915/display/intel_display_driver.c
-@@ -121,7 +121,7 @@ static void intel_mode_config_init(struct drm_i915_private *i915)
+@@ -125,7 +125,7 @@ static void intel_mode_config_init(struct drm_i915_private *i915)
mode_config->funcs = &intel_mode_funcs;
mode_config->helper_private = &intel_mode_config_funcs;
@@ -24,10 +25,10 @@ index b909814ae02b..918b8b589ec7 100644
/*
* Maximum framebuffer dimensions, chosen to match
diff --git a/drivers/gpu/drm/i915/i915_params.c b/drivers/gpu/drm/i915/i915_params.c
-index 0a171b57fd8f..63a23458399f 100644
+index de43048543e8..2c6fe740609e 100644
--- a/drivers/gpu/drm/i915/i915_params.c
+++ b/drivers/gpu/drm/i915/i915_params.c
-@@ -228,6 +228,10 @@ i915_param_named_unsafe(lmem_size, uint, 0400,
+@@ -134,6 +134,10 @@ i915_param_named_unsafe(lmem_size, uint, 0400,
i915_param_named_unsafe(lmem_bar_size, uint, 0400,
"Set the lmem bar size(in MiB).");
@@ -39,16 +40,28 @@ index 0a171b57fd8f..63a23458399f 100644
bool val)
{
diff --git a/drivers/gpu/drm/i915/i915_params.h b/drivers/gpu/drm/i915/i915_params.h
-index 68abf0ad6c00..b24b30666438 100644
+index 1315d7fac850..53d47b1ef79e 100644
--- a/drivers/gpu/drm/i915/i915_params.h
+++ b/drivers/gpu/drm/i915/i915_params.h
-@@ -87,7 +87,8 @@ struct drm_printer;
- param(bool, verbose_state_checks, true, 0) \
- param(bool, nuclear_pageflip, false, 0400) \
- param(bool, enable_dp_mst, true, 0600) \
+@@ -64,7 +64,8 @@ struct drm_printer;
+ /* leave bools at the end to not create holes */ \
+ param(bool, enable_hangcheck, true, 0600) \
+ param(bool, error_capture, true, IS_ENABLED(CONFIG_DRM_I915_CAPTURE_ERROR) ? 0600 : 0) \
- param(bool, enable_gvt, false, IS_ENABLED(CONFIG_DRM_I915_GVT) ? 0400 : 0)
+ param(bool, enable_gvt, false, IS_ENABLED(CONFIG_DRM_I915_GVT) ? 0400 : 0) \
+ param(bool, disable_async_page_flip, false, 0400)
#define MEMBER(T, member, ...) T member;
struct i915_params {
+diff --git a/drivers/gpu/drm/xe/xe_device_types.h b/drivers/gpu/drm/xe/xe_device_types.h
+index e8491979a6f2..4682970746c3 100644
+--- a/drivers/gpu/drm/xe/xe_device_types.h
++++ b/drivers/gpu/drm/xe/xe_device_types.h
+@@ -498,6 +498,7 @@ struct xe_device {
+ };
+ struct {
+ const char *dmc_firmware_path;
++ bool disable_async_page_flip;
+ } params;
+
+ void *pxp;
diff --git a/SOURCES/Patchlist.changelog b/SOURCES/Patchlist.changelog
index e262294..051200b 100644
--- a/SOURCES/Patchlist.changelog
+++ b/SOURCES/Patchlist.changelog
@@ -1,135 +1,99 @@
-"https://gitlab.com/cki-project/kernel-ark/-/commit"/c0412c5250f7bdb2ea61b61f27eada0d8a135692
- c0412c5250f7bdb2ea61b61f27eada0d8a135692 xfs: fix SEEK_HOLE/DATA for regions with active COW extents
+"https://gitlab.com/cki-project/kernel-ark/-/commit"/c7fb6711c80096b45afa7c974abfc5bee31eb1a3
+ c7fb6711c80096b45afa7c974abfc5bee31eb1a3 Revert "cpupower: Bump soname version"
-"https://gitlab.com/cki-project/kernel-ark/-/commit"/fed615a24400369495f10f93cd7f644e7983020a
- fed615a24400369495f10f93cd7f644e7983020a drm/amd: Flush GFXOFF requests in prepare stage
+"https://gitlab.com/cki-project/kernel-ark/-/commit"/fccd579ad79c032dd402f674fd94e80ad52519f6
+ fccd579ad79c032dd402f674fd94e80ad52519f6 xfs: fix SEEK_HOLE/DATA for regions with active COW extents
-"https://gitlab.com/cki-project/kernel-ark/-/commit"/f65fe5e93408aed742291b98358a9873317a59ef
- f65fe5e93408aed742291b98358a9873317a59ef Bluetooth: rfcomm: Fix null-ptr-deref in rfcomm_check_security
+"https://gitlab.com/cki-project/kernel-ark/-/commit"/43f3e284f6c98c0cb6133ac90e0b4bba02975053
+ 43f3e284f6c98c0cb6133ac90e0b4bba02975053 drivers/firmware: skip simpledrm if nvidia-drm.modeset=1 is set
-"https://gitlab.com/cki-project/kernel-ark/-/commit"/11fa2c73bc247b4d40c71e3220ead390202a2043
- 11fa2c73bc247b4d40c71e3220ead390202a2043 selftests: openvswitch: Add validation for the recursion test
+"https://gitlab.com/cki-project/kernel-ark/-/commit"/6a6428d08805f225c5425fc7c2b3c093267cb206
+ 6a6428d08805f225c5425fc7c2b3c093267cb206 drm/amd: Flush GFXOFF requests in prepare stage
-"https://gitlab.com/cki-project/kernel-ark/-/commit"/21fc802bce4938279432d1a4febef04de6354902
- 21fc802bce4938279432d1a4febef04de6354902 net: openvswitch: limit the number of recursions from action sets
+"https://gitlab.com/cki-project/kernel-ark/-/commit"/bbd16c78228ab6d4515fc98bd574a9a213e9428c
+ bbd16c78228ab6d4515fc98bd574a9a213e9428c scsi: sd: Add "probe_type" module parameter to allow synchronous probing
-"https://gitlab.com/cki-project/kernel-ark/-/commit"/78a136fba17f14893a2cdd15bdaf9fcc1f48808f
- 78a136fba17f14893a2cdd15bdaf9fcc1f48808f dm: limit the number of targets and parameter size area
+"https://gitlab.com/cki-project/kernel-ark/-/commit"/4ba4ea03ce77743ecaafe073c13ee9104c8ca035
+ 4ba4ea03ce77743ecaafe073c13ee9104c8ca035 Enable IO_URING for RHEL
-"https://gitlab.com/cki-project/kernel-ark/-/commit"/ab98876014e44b8bad6575d69c9a65342d38f9d4
- ab98876014e44b8bad6575d69c9a65342d38f9d4 btrfs: don't refill whole delayed refs block reserve when starting transaction
+"https://gitlab.com/cki-project/kernel-ark/-/commit"/0cf9bb0b41288aab528f3fbf4086d0c76ce88173
+ 0cf9bb0b41288aab528f3fbf4086d0c76ce88173 redhat: version two of Makefile.rhelver tweaks
-"https://gitlab.com/cki-project/kernel-ark/-/commit"/19a889e3c4589ccfbfc55056651847468054ff83
- 19a889e3c4589ccfbfc55056651847468054ff83 drm/amd: Stop evicting resources on APUs in suspend
+"https://gitlab.com/cki-project/kernel-ark/-/commit"/1ca4785aeb44058d4e5acb99e16be613bf37926a
+ 1ca4785aeb44058d4e5acb99e16be613bf37926a redhat: adapt to upstream Makefile change
-"https://gitlab.com/cki-project/kernel-ark/-/commit"/7fd92c3ac45f07f817b49b20b9f0d4dce0395eb4
- 7fd92c3ac45f07f817b49b20b9f0d4dce0395eb4 Revert "drm/amd: flush any delayed gfxoff on suspend entry"
+"https://gitlab.com/cki-project/kernel-ark/-/commit"/14831277fd82f7f62df986976a4edadef9e43b87
+ 14831277fd82f7f62df986976a4edadef9e43b87 Change acpi_bus_get_acpi_device to acpi_get_acpi_dev
-"https://gitlab.com/cki-project/kernel-ark/-/commit"/1c09c97c739e156ff5a7ce6b3df1173eeebeb3ef
- 1c09c97c739e156ff5a7ce6b3df1173eeebeb3ef smb: client: set correct id, uid and cruid for multiuser automounts
+"https://gitlab.com/cki-project/kernel-ark/-/commit"/69c26425cb8ae9147be185a3ba413b79ac8c4f8f
+ 69c26425cb8ae9147be185a3ba413b79ac8c4f8f RHEL: disable io_uring support
-"https://gitlab.com/cki-project/kernel-ark/-/commit"/4b490493dd82802f8b7f9977e09b4d8f5b5d55be
- 4b490493dd82802f8b7f9977e09b4d8f5b5d55be platform/x86: Support for mode FN key
+"https://gitlab.com/cki-project/kernel-ark/-/commit"/08e9f18744a7a0b5bc84c919ec105fb99d9d2fde
+ 08e9f18744a7a0b5bc84c919ec105fb99d9d2fde REDHAT: coresight: etm4x: Disable coresight on HPE Apollo 70
-"https://gitlab.com/cki-project/kernel-ark/-/commit"/067c5243fae90055e1276c8ba54076f4bbaef253
- 067c5243fae90055e1276c8ba54076f4bbaef253 Input: atkbd - do not skip atkbd_deactivate() when skipping ATKBD_CMD_GETID
+"https://gitlab.com/cki-project/kernel-ark/-/commit"/42d31ca68d9fbb52bff28197a7e696ea30c3035f
+ 42d31ca68d9fbb52bff28197a7e696ea30c3035f KEYS: Make use of platform keyring for module signature verify
-"https://gitlab.com/cki-project/kernel-ark/-/commit"/eed0dfdb91bf9fd3545a8c1a2f926590a34ad7f7
- eed0dfdb91bf9fd3545a8c1a2f926590a34ad7f7 Input: atkbd - skip ATKBD_CMD_SETLEDS when skipping ATKBD_CMD_GETID
+"https://gitlab.com/cki-project/kernel-ark/-/commit"/e67e74e3dffef6782558be57c8d72dfdd0ac8cbc
+ e67e74e3dffef6782558be57c8d72dfdd0ac8cbc Input: rmi4 - remove the need for artificial IRQ in case of HID
-"https://gitlab.com/cki-project/kernel-ark/-/commit"/46a8350ec1068377bdfcd55191012325f85113bb
- 46a8350ec1068377bdfcd55191012325f85113bb Revert "cpupower: Bump soname version"
+"https://gitlab.com/cki-project/kernel-ark/-/commit"/e1bb15a36310bb1ee3efe393aee787b0a4e5da68
+ e1bb15a36310bb1ee3efe393aee787b0a4e5da68 ARM: tegra: usb no reset
-"https://gitlab.com/cki-project/kernel-ark/-/commit"/caef9732dac92b5afac527584a71e0d9fe783c11
- caef9732dac92b5afac527584a71e0d9fe783c11 wifi: ath10k: fix NULL pointer dereference in ath10k_wmi_tlv_op_pull_mgmt_tx_compl_ev()
+"https://gitlab.com/cki-project/kernel-ark/-/commit"/7fd47518d3f5b3cde52cc7f69cfa23c8d9dd9694
+ 7fd47518d3f5b3cde52cc7f69cfa23c8d9dd9694 s390: Lock down the kernel when the IPL secure flag is set
-"https://gitlab.com/cki-project/kernel-ark/-/commit"/e04ed37ee7a38d7b21d8811666ec556c83f55931
- e04ed37ee7a38d7b21d8811666ec556c83f55931 drivers/firmware: skip simpledrm if nvidia-drm.modeset=1 is set
+"https://gitlab.com/cki-project/kernel-ark/-/commit"/e194067631100a35dff56c22c932275cd8f5117a
+ e194067631100a35dff56c22c932275cd8f5117a efi: Lock down the kernel if booted in secure boot mode
-"https://gitlab.com/cki-project/kernel-ark/-/commit"/f6b5c078b94f3e8ad78f8eb246af98a93f715bdb
- f6b5c078b94f3e8ad78f8eb246af98a93f715bdb scsi: sd: Add "probe_type" module parameter to allow synchronous probing
+"https://gitlab.com/cki-project/kernel-ark/-/commit"/05eb3ce5832f61fe1179f97df1edaae7756845e0
+ 05eb3ce5832f61fe1179f97df1edaae7756845e0 efi: Add an EFI_SECURE_BOOT flag to indicate secure boot mode
-"https://gitlab.com/cki-project/kernel-ark/-/commit"/af25a577fcd4af790374718790a7d9e7bace804c
- af25a577fcd4af790374718790a7d9e7bace804c Enable IO_URING for RHEL
+"https://gitlab.com/cki-project/kernel-ark/-/commit"/011d5de9e72565b4907691ca680f7acff3883301
+ 011d5de9e72565b4907691ca680f7acff3883301 security: lockdown: expose a hook to lock the kernel down
-"https://gitlab.com/cki-project/kernel-ark/-/commit"/ad5d1b5ae72b9e8b846f94b4589d8b0430178c66
- ad5d1b5ae72b9e8b846f94b4589d8b0430178c66 redhat: version two of Makefile.rhelver tweaks
+"https://gitlab.com/cki-project/kernel-ark/-/commit"/35aba3c9b506369a785ee7e921250794467c7e76
+ 35aba3c9b506369a785ee7e921250794467c7e76 Make get_cert_list() use efi_status_to_str() to print error messages.
-"https://gitlab.com/cki-project/kernel-ark/-/commit"/fa8ac4aeabd1e76ce80b4016fa3f636507e62a8e
- fa8ac4aeabd1e76ce80b4016fa3f636507e62a8e redhat: adapt to upstream Makefile change
+"https://gitlab.com/cki-project/kernel-ark/-/commit"/45587f041c409279acf4277c952a7e254e2c86c4
+ 45587f041c409279acf4277c952a7e254e2c86c4 Add efi_status_to_str() and rework efi_status_to_err().
-"https://gitlab.com/cki-project/kernel-ark/-/commit"/82f10d50c891e830513a6203c8dfedc9c5fc605d
- 82f10d50c891e830513a6203c8dfedc9c5fc605d Change acpi_bus_get_acpi_device to acpi_get_acpi_dev
+"https://gitlab.com/cki-project/kernel-ark/-/commit"/e8784fbb8ae25ee646dacdfa6d5c42ae0427b9f3
+ e8784fbb8ae25ee646dacdfa6d5c42ae0427b9f3 iommu/arm-smmu: workaround DMA mode issues
-"https://gitlab.com/cki-project/kernel-ark/-/commit"/2e9237134898be1ad28c8ea25deb1c14f7d2cdc6
- 2e9237134898be1ad28c8ea25deb1c14f7d2cdc6 RHEL: disable io_uring support
+"https://gitlab.com/cki-project/kernel-ark/-/commit"/e97750f18aac0903b827a11a2d0eca473c207082
+ e97750f18aac0903b827a11a2d0eca473c207082 ipmi: do not configure ipmi for HPE m400
-"https://gitlab.com/cki-project/kernel-ark/-/commit"/670907cf282993feb5c27387e485baabbed3f82d
- 670907cf282993feb5c27387e485baabbed3f82d REDHAT: coresight: etm4x: Disable coresight on HPE Apollo 70
+"https://gitlab.com/cki-project/kernel-ark/-/commit"/d8dae8587fc775f80a6894f7dc0c3148f1000bb6
+ d8dae8587fc775f80a6894f7dc0c3148f1000bb6 kABI: Add generic kABI macros to use for kABI workarounds
-"https://gitlab.com/cki-project/kernel-ark/-/commit"/4cc4347e9085cb8d6b5b5e203e76737a909bfd6d
- 4cc4347e9085cb8d6b5b5e203e76737a909bfd6d KEYS: Make use of platform keyring for module signature verify
+"https://gitlab.com/cki-project/kernel-ark/-/commit"/6061cfe2ed054bd0cde8d694c8099f2747820e69
+ 6061cfe2ed054bd0cde8d694c8099f2747820e69 ahci: thunderx2: Fix for errata that affects stop engine
-"https://gitlab.com/cki-project/kernel-ark/-/commit"/d818fe69a863c9c9b32bf0afc0fc9ea1a13d1e03
- d818fe69a863c9c9b32bf0afc0fc9ea1a13d1e03 Input: rmi4 - remove the need for artificial IRQ in case of HID
+"https://gitlab.com/cki-project/kernel-ark/-/commit"/19144aca889ee46ca25f3f14266735cbe5de8a06
+ 19144aca889ee46ca25f3f14266735cbe5de8a06 Vulcan: AHCI PCI bar fix for Broadcom Vulcan early silicon
-"https://gitlab.com/cki-project/kernel-ark/-/commit"/54bcbdc93a456a037372861f3c305001d19c1380
- 54bcbdc93a456a037372861f3c305001d19c1380 ARM: tegra: usb no reset
+"https://gitlab.com/cki-project/kernel-ark/-/commit"/e7f519e5398d0dd661b41de5c73c1c099f831829
+ e7f519e5398d0dd661b41de5c73c1c099f831829 tags.sh: Ignore redhat/rpm
-"https://gitlab.com/cki-project/kernel-ark/-/commit"/d53b41ea053ea5dcbc6410262e64e06baa756ab8
- d53b41ea053ea5dcbc6410262e64e06baa756ab8 s390: Lock down the kernel when the IPL secure flag is set
+"https://gitlab.com/cki-project/kernel-ark/-/commit"/8065810fdf3486d1df4c6e887043f4c05fbb40c5
+ 8065810fdf3486d1df4c6e887043f4c05fbb40c5 put RHEL info into generated headers
-"https://gitlab.com/cki-project/kernel-ark/-/commit"/0a47e98dff708b27a6f92034258fe7b4f53a0707
- 0a47e98dff708b27a6f92034258fe7b4f53a0707 efi: Lock down the kernel if booted in secure boot mode
+"https://gitlab.com/cki-project/kernel-ark/-/commit"/a9a02e615b01548ef1472364bc0c924ec9e24ea6
+ a9a02e615b01548ef1472364bc0c924ec9e24ea6 aarch64: acpi scan: Fix regression related to X-Gene UARTs
-"https://gitlab.com/cki-project/kernel-ark/-/commit"/920dfefdd06948d8741fa4846ddc9e35cd50ce65
- 920dfefdd06948d8741fa4846ddc9e35cd50ce65 efi: Add an EFI_SECURE_BOOT flag to indicate secure boot mode
+"https://gitlab.com/cki-project/kernel-ark/-/commit"/20aab9c5cf6c185848dad3b2680365e592060fe3
+ 20aab9c5cf6c185848dad3b2680365e592060fe3 ACPI / irq: Workaround firmware issue on X-Gene based m400
-"https://gitlab.com/cki-project/kernel-ark/-/commit"/b459dd558e0197eb8dd6ca0ebd7f06945f480e78
- b459dd558e0197eb8dd6ca0ebd7f06945f480e78 security: lockdown: expose a hook to lock the kernel down
+"https://gitlab.com/cki-project/kernel-ark/-/commit"/dea39bf98ce0a5d43c19762bfb73fef4c1ecc04a
+ dea39bf98ce0a5d43c19762bfb73fef4c1ecc04a modules: add rhelversion MODULE_INFO tag
-"https://gitlab.com/cki-project/kernel-ark/-/commit"/872668749f5ac08e01bcb2ddf0f33ac935793aac
- 872668749f5ac08e01bcb2ddf0f33ac935793aac Make get_cert_list() use efi_status_to_str() to print error messages.
+"https://gitlab.com/cki-project/kernel-ark/-/commit"/2600fc4c9eae94ae27a1db2e97f48c57981ddc3a
+ 2600fc4c9eae94ae27a1db2e97f48c57981ddc3a ACPI: APEI: arm64: Ignore broken HPE moonshot APEI support
-"https://gitlab.com/cki-project/kernel-ark/-/commit"/485d3acca52183cb0cd8dc62413d83b8ca6d1be9
- 485d3acca52183cb0cd8dc62413d83b8ca6d1be9 Add efi_status_to_str() and rework efi_status_to_err().
+"https://gitlab.com/cki-project/kernel-ark/-/commit"/e74a567e42d4f275a7e2fc18dac9c69990faa6fa
+ e74a567e42d4f275a7e2fc18dac9c69990faa6fa Pull the RHEL version defines out of the Makefile
-"https://gitlab.com/cki-project/kernel-ark/-/commit"/f28b90cbf277b2ae8b2585fbd453dfa0d69ae53d
- f28b90cbf277b2ae8b2585fbd453dfa0d69ae53d iommu/arm-smmu: workaround DMA mode issues
-
-"https://gitlab.com/cki-project/kernel-ark/-/commit"/faf72983b9f33a9ffd8b230496d2314e9b9a826f
- faf72983b9f33a9ffd8b230496d2314e9b9a826f ipmi: do not configure ipmi for HPE m400
-
-"https://gitlab.com/cki-project/kernel-ark/-/commit"/0088681628eecc37b983514b7aa099cb1ff4ce2c
- 0088681628eecc37b983514b7aa099cb1ff4ce2c kABI: Add generic kABI macros to use for kABI workarounds
-
-"https://gitlab.com/cki-project/kernel-ark/-/commit"/eb7070ab5324076a14c90f71f6ed80c6d186aa90
- eb7070ab5324076a14c90f71f6ed80c6d186aa90 ahci: thunderx2: Fix for errata that affects stop engine
-
-"https://gitlab.com/cki-project/kernel-ark/-/commit"/12b80aa03dd87334c9fdbda6a93bd2359a5cf15a
- 12b80aa03dd87334c9fdbda6a93bd2359a5cf15a Vulcan: AHCI PCI bar fix for Broadcom Vulcan early silicon
-
-"https://gitlab.com/cki-project/kernel-ark/-/commit"/59521420421d2bd7341dbcea94bf2c756f95fcac
- 59521420421d2bd7341dbcea94bf2c756f95fcac tags.sh: Ignore redhat/rpm
-
-"https://gitlab.com/cki-project/kernel-ark/-/commit"/d5ab5c4e27530f7a54b6aa9a581d3d45bb9a5b16
- d5ab5c4e27530f7a54b6aa9a581d3d45bb9a5b16 put RHEL info into generated headers
-
-"https://gitlab.com/cki-project/kernel-ark/-/commit"/dc74674e8fced0408caaad1c59abc890ecb8d6f2
- dc74674e8fced0408caaad1c59abc890ecb8d6f2 aarch64: acpi scan: Fix regression related to X-Gene UARTs
-
-"https://gitlab.com/cki-project/kernel-ark/-/commit"/9f7d0c67a3cd2e80b31258a5af096e7ab5d00ea3
- 9f7d0c67a3cd2e80b31258a5af096e7ab5d00ea3 ACPI / irq: Workaround firmware issue on X-Gene based m400
-
-"https://gitlab.com/cki-project/kernel-ark/-/commit"/46a9c575bbde2341f1f550fb8f479935673035f8
- 46a9c575bbde2341f1f550fb8f479935673035f8 modules: add rhelversion MODULE_INFO tag
-
-"https://gitlab.com/cki-project/kernel-ark/-/commit"/bc4896017cc68caa5bd7ead6a06b075b2e17c0e8
- bc4896017cc68caa5bd7ead6a06b075b2e17c0e8 ACPI: APEI: arm64: Ignore broken HPE moonshot APEI support
-
-"https://gitlab.com/cki-project/kernel-ark/-/commit"/0e21b15103c452cf6cd2afe831e32b9ceb6de255
- 0e21b15103c452cf6cd2afe831e32b9ceb6de255 Pull the RHEL version defines out of the Makefile
-
-"https://gitlab.com/cki-project/kernel-ark/-/commit"/1993198591da4482b9721dec18306b6d2c556e17
- 1993198591da4482b9721dec18306b6d2c556e17 [initial commit] Add Red Hat variables in the top level makefile
+"https://gitlab.com/cki-project/kernel-ark/-/commit"/b3c3c4bbd0be73161abaa6279b81a01329db8c56
+ b3c3c4bbd0be73161abaa6279b81a01329db8c56 [initial commit] Add Red Hat variables in the top level makefile
diff --git a/SOURCES/cachy-bore.patch b/SOURCES/cachy-bore.patch
index 9ff833d..711ded8 100644
--- a/SOURCES/cachy-bore.patch
+++ b/SOURCES/cachy-bore.patch
@@ -1,24 +1,24 @@
-From ed828209e2e391d7155e153267df515ffffdefb2 Mon Sep 17 00:00:00 2001
+From c75c12077f2f8dfa7c763f434f746727b8a3b9e6 Mon Sep 17 00:00:00 2001
From: Piotr Gorski <lucjan.lucjanov@gmail.com>
-Date: Mon, 4 Mar 2024 12:48:19 +0100
+Date: Tue, 26 Mar 2024 08:10:41 +0100
Subject: [PATCH] bore
Signed-off-by: Piotr Gorski <lucjan.lucjanov@gmail.com>
---
- include/linux/sched.h | 12 ++
- init/Kconfig | 19 +++
- kernel/sched/core.c | 148 ++++++++++++++++++++
- kernel/sched/debug.c | 61 +++++++-
- kernel/sched/fair.c | 302 ++++++++++++++++++++++++++++++++++++++--
+ include/linux/sched.h | 10 ++
+ init/Kconfig | 17 ++++
+ kernel/sched/core.c | 144 ++++++++++++++++++++++++++
+ kernel/sched/debug.c | 60 ++++++++++-
+ kernel/sched/fair.c | 218 +++++++++++++++++++++++++++++++++++++++-
kernel/sched/features.h | 4 +
- kernel/sched/sched.h | 7 +
- 7 files changed, 538 insertions(+), 15 deletions(-)
+ kernel/sched/sched.h | 7 ++
+ 7 files changed, 457 insertions(+), 3 deletions(-)
diff --git a/include/linux/sched.h b/include/linux/sched.h
-index 292c31697..5abe14fc1 100644
+index ffe8f618a..0ab0b0424 100644
--- a/include/linux/sched.h
+++ b/include/linux/sched.h
-@@ -562,6 +562,18 @@ struct sched_entity {
+@@ -547,6 +547,16 @@ struct sched_entity {
u64 sum_exec_runtime;
u64 prev_sum_exec_runtime;
u64 vruntime;
@@ -28,8 +28,6 @@ index 292c31697..5abe14fc1 100644
+ u8 curr_burst_penalty;
+ u8 burst_penalty;
+ u8 burst_score;
-+ u32 burst_load;
-+ bool on_cfs_rq;
+ u8 child_burst;
+ u32 child_burst_cnt;
+ u64 child_burst_last_cached;
@@ -38,10 +36,10 @@ index 292c31697..5abe14fc1 100644
u64 slice;
diff --git a/init/Kconfig b/init/Kconfig
-index bfde8189c..2258b8ef5 100644
+index bee58f746..13427dbb4 100644
--- a/init/Kconfig
+++ b/init/Kconfig
-@@ -1267,6 +1267,25 @@ config CHECKPOINT_RESTORE
+@@ -1279,6 +1279,23 @@ config CHECKPOINT_RESTORE
If unsure, say N here.
@@ -60,18 +58,16 @@ index bfde8189c..2258b8ef5 100644
+ With a little impact to scheduling fairness, it may improve
+ responsiveness especially under heavy background workload.
+
-+ You can turn it off by setting the sysctl kernel.sched_bore = 0.
-+
+ If unsure, say Y here.
+
config SCHED_AUTOGROUP
bool "Automatic process group scheduling"
select CGROUPS
diff --git a/kernel/sched/core.c b/kernel/sched/core.c
-index a708d225c..31f5e8a73 100644
+index 9116bcc90..fc3d7b48e 100644
--- a/kernel/sched/core.c
+++ b/kernel/sched/core.c
-@@ -4480,6 +4480,143 @@ int wake_up_state(struct task_struct *p, unsigned int state)
+@@ -4507,6 +4507,139 @@ int wake_up_state(struct task_struct *p, unsigned int state)
return try_to_wake_up(p, state, 0);
}
@@ -86,18 +82,14 @@ index a708d225c..31f5e8a73 100644
+ init_task.se.curr_burst_penalty = 0;
+ init_task.se.burst_penalty = 0;
+ init_task.se.burst_score = 0;
-+ init_task.se.on_cfs_rq = false;
+ init_task.se.child_burst_last_cached = 0;
-+ init_task.se.burst_load = 0;
+}
+
+void inline sched_fork_bore(struct task_struct *p) {
+ p->se.burst_time = 0;
+ p->se.curr_burst_penalty = 0;
+ p->se.burst_score = 0;
-+ p->se.on_cfs_rq = false;
+ p->se.child_burst_last_cached = 0;
-+ p->se.burst_load = 0;
+}
+
+static u32 count_child_tasks(struct task_struct *p) {
@@ -206,7 +198,7 @@ index a708d225c..31f5e8a73 100644
+}
+
+static void sched_post_fork_bore(struct task_struct *p) {
-+ if (p->sched_class == &fair_sched_class && likely(sched_bore))
++ if (p->sched_class == &fair_sched_class)
+ inherit_burst(p);
+ p->se.burst_penalty = p->se.prev_burst_penalty;
+}
@@ -215,7 +207,7 @@ index a708d225c..31f5e8a73 100644
/*
* Perform scheduler related setup for a newly forked process p.
* p is forked by current.
-@@ -4496,6 +4633,9 @@ static void __sched_fork(unsigned long clone_flags, struct task_struct *p)
+@@ -4523,6 +4656,9 @@ static void __sched_fork(unsigned long clone_flags, struct task_struct *p)
p->se.prev_sum_exec_runtime = 0;
p->se.nr_migrations = 0;
p->se.vruntime = 0;
@@ -225,7 +217,7 @@ index a708d225c..31f5e8a73 100644
p->se.vlag = 0;
p->se.slice = sysctl_sched_base_slice;
INIT_LIST_HEAD(&p->se.group_node);
-@@ -4815,6 +4955,9 @@ void sched_cgroup_fork(struct task_struct *p, struct kernel_clone_args *kargs)
+@@ -4839,6 +4975,9 @@ void sched_cgroup_fork(struct task_struct *p, struct kernel_clone_args *kargs)
void sched_post_fork(struct task_struct *p)
{
@@ -235,20 +227,20 @@ index a708d225c..31f5e8a73 100644
uclamp_post_fork(p);
}
-@@ -9885,6 +10028,11 @@ void __init sched_init(void)
+@@ -9910,6 +10049,11 @@ void __init sched_init(void)
BUG_ON(&dl_sched_class != &stop_sched_class + 1);
#endif
+#ifdef CONFIG_SCHED_BORE
+ sched_init_bore();
-+ printk(KERN_INFO "BORE (Burst-Oriented Response Enhancer) CPU Scheduler modification 4.5.1 by Masahito Suzuki");
++ printk(KERN_INFO "BORE (Burst-Oriented Response Enhancer) CPU Scheduler modification 5.0.3 by Masahito Suzuki");
+#endif // CONFIG_SCHED_BORE
+
wait_bit_init();
#ifdef CONFIG_FAIR_GROUP_SCHED
diff --git a/kernel/sched/debug.c b/kernel/sched/debug.c
-index 4580a4507..033cbe7d3 100644
+index 8d5d98a58..b17861261 100644
--- a/kernel/sched/debug.c
+++ b/kernel/sched/debug.c
@@ -167,7 +167,52 @@ static const struct file_operations sched_feat_fops = {
@@ -344,19 +336,18 @@ index 4580a4507..033cbe7d3 100644
#ifdef CONFIG_NUMA_BALANCING
SEQ_printf(m, " %d %d", task_node(p), task_numa_group_id(p));
#endif
-@@ -1063,6 +1118,10 @@ void proc_sched_show_task(struct task_struct *p, struct pid_namespace *ns,
+@@ -1068,6 +1123,9 @@ void proc_sched_show_task(struct task_struct *p, struct pid_namespace *ns,
P(se.load.weight);
#ifdef CONFIG_SMP
+#ifdef CONFIG_SCHED_BORE
-+ P(se.burst_load);
+ P(se.burst_score);
+#endif // CONFIG_SCHED_BORE
P(se.avg.load_sum);
P(se.avg.runnable_sum);
P(se.avg.util_sum);
diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
-index 7ac9f4b1d..8f7694f05 100644
+index 533547e3c..ae55f46a8 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -19,6 +19,9 @@
@@ -369,7 +360,7 @@ index 7ac9f4b1d..8f7694f05 100644
*/
#include <linux/energy_model.h>
#include <linux/mmap_lock.h>
-@@ -64,20 +67,129 @@
+@@ -64,20 +67,126 @@
* SCHED_TUNABLESCALING_LOG - scaled logarithmical, *1+ilog(ncpus)
* SCHED_TUNABLESCALING_LINEAR - scaled linear, *ncpus
*
@@ -403,14 +394,12 @@ index 7ac9f4b1d..8f7694f05 100644
+#ifdef CONFIG_SCHED_BORE
+u8 __read_mostly sched_bore = 1;
-+u8 __read_mostly sched_burst_score_rounding = 0;
+u8 __read_mostly sched_burst_smoothness_long = 1;
+u8 __read_mostly sched_burst_smoothness_short = 0;
+u8 __read_mostly sched_burst_fork_atavistic = 2;
+u8 __read_mostly sched_burst_penalty_offset = 22;
+uint __read_mostly sched_burst_penalty_scale = 1280;
+uint __read_mostly sched_burst_cache_lifetime = 60000000;
-+u8 __read_mostly sched_vlag_deviation_limit = 11;
+static int __maybe_unused thirty_two = 32;
+static int __maybe_unused sixty_four = 64;
+static int __maybe_unused maxval_12_bits = 4095;
@@ -447,20 +436,19 @@ index 7ac9f4b1d..8f7694f05 100644
+ return __unscale_slice(delta, se->burst_score);
+}
+
-+static void avg_vruntime_add(struct cfs_rq *cfs_rq, struct sched_entity *se);
-+static void avg_vruntime_sub(struct cfs_rq *cfs_rq, struct sched_entity *se);
++void reweight_task(struct task_struct *p, int prio);
+
+static void update_burst_score(struct sched_entity *se) {
-+ struct cfs_rq *cfs_rq = cfs_rq_of(se);
-+ u8 prev_score = se->burst_score;
-+ u32 penalty = se->burst_penalty;
-+ if (sched_burst_score_rounding) penalty += 0x2U;
-+ se->burst_score = penalty >> 2;
++ if (!entity_is_task(se)) return;
++ struct task_struct *p = task_of(se);
++ u8 prio = p->static_prio - MAX_RT_PRIO;
++ u8 prev_prio = min(39, prio + se->burst_score);
+
-+ if ((se->burst_score != prev_score) && se->on_cfs_rq) {
-+ avg_vruntime_sub(cfs_rq, se);
-+ avg_vruntime_add(cfs_rq, se);
-+ }
++ se->burst_score = se->burst_penalty >> 2;
++
++ u8 new_prio = min(39, prio + se->burst_score);
++ if (new_prio != prev_prio)
++ reweight_task(p, new_prio);
+}
+
+static void update_burst_penalty(struct sched_entity *se) {
@@ -501,7 +489,7 @@ index 7ac9f4b1d..8f7694f05 100644
int sched_thermal_decay_shift;
static int __init setup_sched_thermal_decay_shift(char *str)
{
-@@ -137,6 +249,87 @@ static unsigned int sysctl_numa_balancing_promote_rate_limit = 65536;
+@@ -137,6 +246,69 @@ static unsigned int sysctl_numa_balancing_promote_rate_limit = 65536;
#ifdef CONFIG_SYSCTL
static struct ctl_table sched_fair_sysctls[] = {
@@ -512,16 +500,7 @@ index 7ac9f4b1d..8f7694f05 100644
+ .maxlen = sizeof(u8),
+ .mode = 0644,
+ .proc_handler = proc_dou8vec_minmax,
-+ .extra1 = SYSCTL_ZERO,
-+ .extra2 = SYSCTL_ONE,
-+ },
-+ {
-+ .procname = "sched_burst_score_rounding",
-+ .data = &sched_burst_score_rounding,
-+ .maxlen = sizeof(u8),
-+ .mode = 0644,
-+ .proc_handler = proc_dou8vec_minmax,
-+ .extra1 = SYSCTL_ZERO,
++ .extra1 = SYSCTL_ONE,
+ .extra2 = SYSCTL_ONE,
+ },
+ {
@@ -576,20 +555,11 @@ index 7ac9f4b1d..8f7694f05 100644
+ .mode = 0644,
+ .proc_handler = proc_douintvec,
+ },
-+ {
-+ .procname = "sched_vlag_deviation_limit",
-+ .data = &sched_vlag_deviation_limit,
-+ .maxlen = sizeof(u8),
-+ .mode = 0644,
-+ .proc_handler = proc_dou8vec_minmax,
-+ .extra1 = SYSCTL_ZERO,
-+ .extra2 = &thirty_two,
-+ },
+#endif // CONFIG_SCHED_BORE
#ifdef CONFIG_CFS_BANDWIDTH
{
.procname = "sched_cfs_bandwidth_slice_us",
-@@ -195,6 +388,13 @@ static inline void update_load_set(struct load_weight *lw, unsigned long w)
+@@ -195,6 +367,13 @@ static inline void update_load_set(struct load_weight *lw, unsigned long w)
*
* This idea comes from the SD scheduler of Con Kolivas:
*/
@@ -603,7 +573,7 @@ index 7ac9f4b1d..8f7694f05 100644
static unsigned int get_update_sysctl_factor(void)
{
unsigned int cpus = min_t(unsigned int, num_online_cpus(), 8);
-@@ -225,6 +425,7 @@ static void update_sysctl(void)
+@@ -225,6 +404,7 @@ static void update_sysctl(void)
SET_SYSCTL(sched_base_slice);
#undef SET_SYSCTL
}
@@ -611,130 +581,17 @@ index 7ac9f4b1d..8f7694f05 100644
void __init sched_init_granularity(void)
{
-@@ -298,6 +499,9 @@ static inline u64 calc_delta_fair(u64 delta, struct sched_entity *se)
- if (unlikely(se->load.weight != NICE_0_LOAD))
- delta = __calc_delta(delta, NICE_0_LOAD, &se->load);
-
-+#ifdef CONFIG_SCHED_BORE
-+ if (likely(sched_bore)) delta = scale_slice(delta, se);
-+#endif // CONFIG_SCHED_BORE
- return delta;
- }
-
-@@ -620,10 +824,26 @@ static inline s64 entity_key(struct cfs_rq *cfs_rq, struct sched_entity *se)
- *
- * As measured, the max (key * weight) value was ~44 bits for a kernel build.
- */
-+#if !defined(CONFIG_SCHED_BORE)
-+#define entity_weight(se) scale_load_down(se->load.weight)
-+#else // CONFIG_SCHED_BORE
-+static unsigned long entity_weight(struct sched_entity *se) {
-+ unsigned long weight = se->load.weight;
-+ if (likely(sched_bore)) weight = unscale_slice(weight, se);
-+#ifdef CONFIG_64BIT
-+ weight >>= SCHED_FIXEDPOINT_SHIFT - 3;
-+#endif // CONFIG_64BIT
-+ return weight;
-+}
-+#endif // CONFIG_SCHED_BORE
-+
- static void
- avg_vruntime_add(struct cfs_rq *cfs_rq, struct sched_entity *se)
- {
-- unsigned long weight = scale_load_down(se->load.weight);
-+ unsigned long weight = entity_weight(se);
-+#ifdef CONFIG_SCHED_BORE
-+ se->burst_load = weight;
-+#endif // CONFIG_SCHED_BORE
- s64 key = entity_key(cfs_rq, se);
-
- cfs_rq->avg_vruntime += key * weight;
-@@ -633,7 +853,12 @@ avg_vruntime_add(struct cfs_rq *cfs_rq, struct sched_entity *se)
- static void
- avg_vruntime_sub(struct cfs_rq *cfs_rq, struct sched_entity *se)
- {
-- unsigned long weight = scale_load_down(se->load.weight);
-+#if !defined(CONFIG_SCHED_BORE)
-+ unsigned long weight = entity_weight(se);
-+#else // CONFIG_SCHED_BORE
-+ unsigned long weight = se->burst_load;
-+ se->burst_load = 0;
-+#endif // CONFIG_SCHED_BORE
- s64 key = entity_key(cfs_rq, se);
-
- cfs_rq->avg_vruntime -= key * weight;
-@@ -653,14 +878,14 @@ void avg_vruntime_update(struct cfs_rq *cfs_rq, s64 delta)
- * Specifically: avg_runtime() + 0 must result in entity_eligible() := true
- * For this to be so, the result of this function must have a left bias.
- */
--u64 avg_vruntime(struct cfs_rq *cfs_rq)
-+static u64 avg_key(struct cfs_rq *cfs_rq)
- {
- struct sched_entity *curr = cfs_rq->curr;
- s64 avg = cfs_rq->avg_vruntime;
- long load = cfs_rq->avg_load;
-
- if (curr && curr->on_rq) {
-- unsigned long weight = scale_load_down(curr->load.weight);
-+ unsigned long weight = entity_weight(curr);
-
- avg += entity_key(cfs_rq, curr) * weight;
- load += weight;
-@@ -670,12 +895,15 @@ u64 avg_vruntime(struct cfs_rq *cfs_rq)
- /* sign flips effective floor / ceil */
- if (avg < 0)
- avg -= (load - 1);
-- avg = div_s64(avg, load);
-+ avg = div64_s64(avg, load);
- }
-
-- return cfs_rq->min_vruntime + avg;
-+ return avg;
- }
-
-+u64 avg_vruntime(struct cfs_rq *cfs_rq) {
-+ return cfs_rq->min_vruntime + avg_key(cfs_rq);
-+}
- /*
- * lag_i = S - s_i = w_i * (V - v_i)
- *
-@@ -700,6 +928,9 @@ static void update_entity_lag(struct cfs_rq *cfs_rq, struct sched_entity *se)
+@@ -704,6 +884,9 @@ static void update_entity_lag(struct cfs_rq *cfs_rq, struct sched_entity *se)
lag = avg_vruntime(cfs_rq) - se->vruntime;
limit = calc_delta_fair(max_t(u64, 2*se->slice, TICK_NSEC), se);
+#ifdef CONFIG_SCHED_BORE
-+ if (likely(sched_bore)) limit >>= 1;
++ limit >>= 1;
+#endif // CONFIG_SCHED_BORE
se->vlag = clamp(lag, -limit, limit);
}
-@@ -727,7 +958,7 @@ int entity_eligible(struct cfs_rq *cfs_rq, struct sched_entity *se)
- long load = cfs_rq->avg_load;
-
- if (curr && curr->on_rq) {
-- unsigned long weight = scale_load_down(curr->load.weight);
-+ unsigned long weight = entity_weight(curr);
-
- avg += entity_key(cfs_rq, curr) * weight;
- load += weight;
-@@ -819,10 +1050,16 @@ static void __enqueue_entity(struct cfs_rq *cfs_rq, struct sched_entity *se)
- se->min_deadline = se->deadline;
- rb_add_augmented_cached(&se->run_node, &cfs_rq->tasks_timeline,
- __entity_less, &min_deadline_cb);
-+#ifdef CONFIG_SCHED_BORE
-+ se->on_cfs_rq = true;
-+#endif // CONFIG_SCHED_BORE
- }
-
- static void __dequeue_entity(struct cfs_rq *cfs_rq, struct sched_entity *se)
- {
-+#ifdef CONFIG_SCHED_BORE
-+ se->on_cfs_rq = false;
-+#endif // CONFIG_SCHED_BORE
- rb_erase_augmented_cached(&se->run_node, &cfs_rq->tasks_timeline,
- &min_deadline_cb);
- avg_vruntime_sub(cfs_rq, se);
-@@ -981,6 +1218,7 @@ struct sched_entity *__pick_last_entity(struct cfs_rq *cfs_rq)
+@@ -955,6 +1138,7 @@ struct sched_entity *__pick_last_entity(struct cfs_rq *cfs_rq)
* Scheduling class statistics methods:
*/
#ifdef CONFIG_SMP
@@ -742,7 +599,7 @@ index 7ac9f4b1d..8f7694f05 100644
int sched_update_scaling(void)
{
unsigned int factor = get_update_sysctl_factor();
-@@ -992,6 +1230,7 @@ int sched_update_scaling(void)
+@@ -966,6 +1150,7 @@ int sched_update_scaling(void)
return 0;
}
@@ -750,9 +607,9 @@ index 7ac9f4b1d..8f7694f05 100644
#endif
#endif
-@@ -1158,7 +1397,13 @@ static void update_curr(struct cfs_rq *cfs_rq)
- curr->sum_exec_runtime += delta_exec;
- schedstat_add(cfs_rq->exec_clock, delta_exec);
+@@ -1165,7 +1350,13 @@ static void update_curr(struct cfs_rq *cfs_rq)
+ if (unlikely(delta_exec <= 0))
+ return;
+#ifdef CONFIG_SCHED_BORE
+ curr->burst_time += delta_exec;
@@ -764,50 +621,17 @@ index 7ac9f4b1d..8f7694f05 100644
update_deadline(cfs_rq, curr);
update_min_vruntime(cfs_rq);
-@@ -5164,8 +5409,8 @@ static inline void update_misfit_status(struct task_struct *p, struct rq *rq) {}
- static void
- place_entity(struct cfs_rq *cfs_rq, struct sched_entity *se, int flags)
- {
-- u64 vslice, vruntime = avg_vruntime(cfs_rq);
-- s64 lag = 0;
-+ s64 lag = 0, key = avg_key(cfs_rq);
-+ u64 vslice, vruntime = cfs_rq->min_vruntime + key;
-
- se->slice = sysctl_sched_base_slice;
- vslice = calc_delta_fair(se->slice, se);
-@@ -5178,6 +5423,9 @@ place_entity(struct cfs_rq *cfs_rq, struct sched_entity *se, int flags)
+@@ -5171,6 +5362,9 @@ place_entity(struct cfs_rq *cfs_rq, struct sched_entity *se, int flags)
*
* EEVDF: placement strategy #1 / #2
*/
+#ifdef CONFIG_SCHED_BORE
-+ if (unlikely(!sched_bore) || se->vlag)
++ if (se->vlag)
+#endif // CONFIG_SCHED_BORE
if (sched_feat(PLACE_LAG) && cfs_rq->nr_running) {
struct sched_entity *curr = cfs_rq->curr;
unsigned long load;
-@@ -5238,12 +5486,18 @@ place_entity(struct cfs_rq *cfs_rq, struct sched_entity *se, int flags)
- */
- load = cfs_rq->avg_load;
- if (curr && curr->on_rq)
-- load += scale_load_down(curr->load.weight);
-+ load += entity_weight(curr);
-
-- lag *= load + scale_load_down(se->load.weight);
-+ lag *= load + entity_weight(se);
- if (WARN_ON_ONCE(!load))
- load = 1;
-- lag = div_s64(lag, load);
-+ lag = div64_s64(lag, load);
-+#ifdef CONFIG_SCHED_BORE
-+ if (likely(sched_bore)) {
-+ s64 limit = vslice << sched_vlag_deviation_limit;
-+ lag = clamp(lag, -limit, limit);
-+ }
-+#endif // CONFIG_SCHED_BORE
- }
-
- se->vruntime = vruntime - lag;
-@@ -6810,6 +7064,14 @@ static void dequeue_task_fair(struct rq *rq, struct task_struct *p, int flags)
+@@ -6803,6 +6997,14 @@ static void dequeue_task_fair(struct rq *rq, struct task_struct *p, int flags)
bool was_sched_idle = sched_idle_rq(rq);
util_est_dequeue(&rq->cfs, p);
@@ -822,7 +646,7 @@ index 7ac9f4b1d..8f7694f05 100644
for_each_sched_entity(se) {
cfs_rq = cfs_rq_of(se);
-@@ -8545,16 +8807,25 @@ static void yield_task_fair(struct rq *rq)
+@@ -8552,16 +8754,25 @@ static void yield_task_fair(struct rq *rq)
/*
* Are we the only task in the tree?
*/
@@ -848,7 +672,7 @@ index 7ac9f4b1d..8f7694f05 100644
/*
* Tell update_rq_clock() that we've just updated,
* so we don't do microscopic update in schedule()
-@@ -12644,6 +12915,9 @@ static void task_fork_fair(struct task_struct *p)
+@@ -12651,6 +12862,9 @@ static void task_fork_fair(struct task_struct *p)
curr = cfs_rq->curr;
if (curr)
update_curr(cfs_rq);
@@ -859,7 +683,7 @@ index 7ac9f4b1d..8f7694f05 100644
rq_unlock(rq, &rf);
}
diff --git a/kernel/sched/features.h b/kernel/sched/features.h
-index a3ddf84de..5adea65fa 100644
+index 143f55df8..3f0fe409f 100644
--- a/kernel/sched/features.h
+++ b/kernel/sched/features.h
@@ -6,7 +6,11 @@
@@ -875,10 +699,10 @@ index a3ddf84de..5adea65fa 100644
/*
* Prefer to schedule the task we woke last (assuming it failed
diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h
-index 2e5a95486..fc4ec9ebb 100644
+index 001fe047b..da3ad1d4e 100644
--- a/kernel/sched/sched.h
+++ b/kernel/sched/sched.h
-@@ -1929,7 +1929,11 @@ static inline void dirty_sched_domain_sysctl(int cpu)
+@@ -1965,7 +1965,11 @@ static inline void dirty_sched_domain_sysctl(int cpu)
}
#endif
@@ -890,7 +714,7 @@ index 2e5a95486..fc4ec9ebb 100644
static inline const struct cpumask *task_user_cpus(struct task_struct *p)
{
-@@ -2509,6 +2513,9 @@ extern const_debug unsigned int sysctl_sched_nr_migrate;
+@@ -2552,6 +2556,9 @@ extern const_debug unsigned int sysctl_sched_nr_migrate;
extern const_debug unsigned int sysctl_sched_migration_cost;
extern unsigned int sysctl_sched_base_slice;
diff --git a/SOURCES/dracut-virt.conf b/SOURCES/dracut-virt.conf
index c639fda..da1c17b 100644
--- a/SOURCES/dracut-virt.conf
+++ b/SOURCES/dracut-virt.conf
@@ -12,7 +12,7 @@ dracutmodules+=" base systemd systemd-initrd dracut-systemd dbus dbus-broker usr
dracutmodules+=" dm lvm rootfs-block fs-lib "
# modules: tpm and crypto
-dracutmodules+=" crypt crypt-loop tpm2-tss "
+dracutmodules+=" crypt crypt-loop tpm2-tss systemd-pcrphase "
# modules: support root on virtiofs
dracutmodules+=" virtiofs "
@@ -36,6 +36,3 @@ drivers+=" dm_crypt "
# filesystems
filesystems+=" vfat ext4 xfs overlay "
-
-# systemd-pcrphase
-install_items+=" /lib/systemd/system/systemd-pcrphase-initrd.service /usr/lib/systemd/systemd-pcrphase /usr/lib/systemd/system/initrd.target.wants/systemd-pcrphase-initrd.service "
diff --git a/SOURCES/filter-aarch64.sh.fedora b/SOURCES/filter-aarch64.sh.fedora
index e970310..ce8e7df 100644
--- a/SOURCES/filter-aarch64.sh.fedora
+++ b/SOURCES/filter-aarch64.sh.fedora
@@ -9,6 +9,8 @@
# modifications to the overrides below. If something should be removed across
# all arches, remove it in the default instead of per-arch.
+overrides="aux-bridge aux-hpd-bridge cec"
+
driverdirs="atm auxdisplay bcma bluetooth firewire fpga infiniband leds media memstick message mmc mtd nfc ntb pcmcia power ssb soundwire staging tty uio w1"
ethdrvs="3com adaptec arc alteon atheros broadcom cadence calxeda chelsio cisco dec dlink emulex marvell micrel myricom neterion nvidia packetengines qlogic rdc sfc silan sis smsc stmicro sun tehuti ti via wiznet xircom"
diff --git a/SOURCES/filter-modules.sh.fedora b/SOURCES/filter-modules.sh.fedora
index 7ef7614..6df7bf7 100755
--- a/SOURCES/filter-modules.sh.fedora
+++ b/SOURCES/filter-modules.sh.fedora
@@ -43,9 +43,9 @@ fsdrvs="affs befs coda cramfs dlm ecryptfs hfs hfsplus jfs jffs2 minix nilfs2 oc
netprots="6lowpan appletalk atm ax25 batman-adv bluetooth can dsa ieee802154 l2tp mac80211 mac802154 mpls netrom nfc rds rfkill rose sctp smc wireless"
-drmdrvs="amd ast bridge gma500 i2c i915 mgag200 nouveau panel radeon"
+drmdrvs="amd ast bridge gma500 i2c i915 mgag200 nouveau panel radeon xe"
-singlemods="ntb_netdev iscsi_ibft iscsi_boot_sysfs megaraid pmcraid qedi qla1280 9pnet_rdma rpcrdma nvmet-rdma nvme-rdma hid-picolcd hid-prodikeys hwpoison-inject target_core_user sbp_target cxgbit chcr parport_serial regmap-sdw regmap-sdw-mbq arizona-micsupp hid-asus iTCO_wdt rnbd-client rnbd-server mlx5_vdpa spi-altera-dfl nct6775 hid-playstation hid-nintendo asus_wmi_sensors asus_wmi_ec_sensors mlx5-vfio-pci video int3406_thermal apple_bl ptp_dfl_tod intel-m10-bmc-hwmon intel_rapl_tpmi pds_vdpa hp-wmi-sensors pds-vfio-pci gpio-ljca spi-ljca i2c-ljca"
+singlemods="ntb_netdev iscsi_ibft iscsi_boot_sysfs megaraid pmcraid qedi qla1280 9pnet_rdma rpcrdma nvmet-rdma nvme-rdma hid-picolcd hid-prodikeys hwpoison-inject target_core_user sbp_target cxgbit chcr parport_serial regmap-sdw regmap-sdw-mbq arizona-micsupp hid-asus iTCO_wdt rnbd-client rnbd-server mlx5_vdpa spi-altera-dfl nct6775 hid-playstation hid-nintendo asus_wmi_sensors asus_wmi_ec_sensors mlx5-vfio-pci video int3406_thermal apple_bl ptp_dfl_tod intel-m10-bmc-hwmon intel_rapl_tpmi pds_vdpa hp-wmi-sensors pds-vfio-pci gpio-ljca spi-ljca i2c-ljca dell-smm-hwmon"
# Grab the arch-specific filter list overrides
source ./filter-$2.sh
diff --git a/SOURCES/filter-modules.sh.rhel b/SOURCES/filter-modules.sh.rhel
index d755b52..b899ad6 100755
--- a/SOURCES/filter-modules.sh.rhel
+++ b/SOURCES/filter-modules.sh.rhel
@@ -39,7 +39,7 @@ netprots="6lowpan appletalk atm ax25 batman-adv bluetooth can dccp dsa ieee80215
drmdrvs="amd ast gma500 i2c i915 mgag200 nouveau radeon via "
-singlemods="ntb_netdev iscsi_ibft iscsi_boot_sysfs megaraid pmcraid qedi qla1280 9pnet_rdma rpcrdma nvmet-rdma nvme-rdma hid-picolcd hid-prodikeys hwa-hc hwpoison-inject hid-sensor-hub target_core_user sbp_target cxgbit iw_cxgb3 iw_cxgb4 cxgb3i cxgb3i cxgb3i_ddp cxgb4i chcr chtls parport_serial ism regmap-sdw regmap-sdw-mbq arizona-micsupp hid-asus nct6775 ntc_thermistor video apple_bl kasan_test intel-m10-bmc-hwmon"
+singlemods="ntb_netdev iscsi_ibft iscsi_boot_sysfs megaraid pmcraid qedi qla1280 9pnet_rdma rpcrdma nvmet-rdma nvme-rdma hid-picolcd hid-prodikeys hwa-hc hwpoison-inject hid-sensor-hub target_core_user sbp_target cxgbit iw_cxgb3 iw_cxgb4 cxgb3i cxgb3i cxgb3i_ddp cxgb4i chcr chtls parport_serial ism regmap-sdw regmap-sdw-mbq arizona-micsupp hid-asus nct6775 ntc_thermistor video apple_bl kasan_test intel-m10-bmc-hwmon dell-smm-hwmon"
# Grab the arch-specific filter list overrides
source ./filter-$2.sh
diff --git a/SOURCES/filter-ppc64le.sh.fedora b/SOURCES/filter-ppc64le.sh.fedora
index 5794edd..6e4a999 100644
--- a/SOURCES/filter-ppc64le.sh.fedora
+++ b/SOURCES/filter-ppc64le.sh.fedora
@@ -11,4 +11,4 @@
driverdirs="atm auxdisplay bcma bluetooth firewire fpga infiniband leds media memstick message mmc mtd nfc ntb pcmcia platform power ssb staging tty uio w1"
-singlemods="ntb_netdev iscsi_ibft iscsi_boot_sysfs megaraid pmcraid qedi qla1280 9pnet_rdma rpcrdma nvmet-rdma nvme-rdma hid-picolcd hid-prodikeys hwpoison-inject target_core_user sbp_target cxgbit chcr rnbd-client rnbd-server mlx5_vdpa hid-playstation hid-nintendo mlx5-vfio-pci nvmem_u-boot-env intel-m10-bmc-pmci intel-m10-bmc-hwmon ptp_dfl_tod pds_vdpa pds-vfio-pci"
+singlemods="ntb_netdev iscsi_ibft iscsi_boot_sysfs megaraid pmcraid qedi qla1280 9pnet_rdma rpcrdma nvmet-rdma nvme-rdma hid-picolcd hid-prodikeys hwpoison-inject target_core_user sbp_target cxgbit chcr rnbd-client rnbd-server mlx5_vdpa hid-playstation hid-nintendo mlx5-vfio-pci nvmem_u-boot-env intel-m10-bmc-pmci intel-m10-bmc-hwmon ptp_dfl_tod pds_vdpa pds-vfio-pci nb7vpq904m"
diff --git a/SOURCES/kernel-aarch64-16k-debug-fedora.config b/SOURCES/kernel-aarch64-16k-debug-fedora.config
index 68cad38..f5bef91 100644
--- a/SOURCES/kernel-aarch64-16k-debug-fedora.config
+++ b/SOURCES/kernel-aarch64-16k-debug-fedora.config
@@ -112,6 +112,7 @@ CONFIG_AD5770R=m
# CONFIG_AD5791 is not set
# CONFIG_AD5933 is not set
# CONFIG_AD7091R5 is not set
+CONFIG_AD7091R8=m
CONFIG_AD7124=m
# CONFIG_AD7150 is not set
# CONFIG_AD7192 is not set
@@ -262,6 +263,7 @@ CONFIG_ANDROID_BINDERFS=y
# CONFIG_ANDROID_BINDER_IPC_SELFTEST is not set
CONFIG_ANDROID_BINDER_IPC=y
# CONFIG_ANON_VMA_NAME is not set
+# CONFIG_AOSONG_AGS02MA is not set
# CONFIG_APDS9300 is not set
CONFIG_APDS9802ALS=m
CONFIG_APDS9960=m
@@ -351,14 +353,14 @@ CONFIG_ARCH_R8A774A1=y
CONFIG_ARCH_R9A07G043=y
CONFIG_ARCH_R9A07G044=y
CONFIG_ARCH_R9A07G054=y
-# CONFIG_ARCH_R9A08G045 is not set
-# CONFIG_ARCH_R9A09G011 is not set
+CONFIG_ARCH_R9A08G045=y
+CONFIG_ARCH_R9A09G011=y
CONFIG_ARCH_RANDOM=y
# CONFIG_ARCH_RDA is not set
# CONFIG_ARCH_REALTEK is not set
CONFIG_ARCH_RENESAS=y
CONFIG_ARCH_ROCKCHIP=y
-# CONFIG_ARCH_S32 is not set
+CONFIG_ARCH_S32=y
# CONFIG_ARCH_SA1100 is not set
CONFIG_ARCH_SEATTLE=y
# CONFIG_ARCH_SPARX5 is not set
@@ -693,6 +695,7 @@ CONFIG_BACKLIGHT_LM3630A=m
# CONFIG_BACKLIGHT_LM3639 is not set
CONFIG_BACKLIGHT_LP855X=m
# CONFIG_BACKLIGHT_LV5207LP is not set
+CONFIG_BACKLIGHT_MP3309C=m
CONFIG_BACKLIGHT_MT6370=m
CONFIG_BACKLIGHT_PWM=m
CONFIG_BACKLIGHT_QCOM_WLED=m
@@ -748,6 +751,7 @@ CONFIG_BCACHEFS_LOCK_TIME_STATS=y
# CONFIG_BCACHEFS_NO_LATENCY_ACCT is not set
CONFIG_BCACHEFS_POSIX_ACL=y
CONFIG_BCACHEFS_QUOTA=y
+CONFIG_BCACHEFS_SIX_OPTIMISTIC_SPIN=y
# CONFIG_BCACHEFS_TESTS is not set
CONFIG_BCACHE=m
CONFIG_BCM2711_THERMAL=m
@@ -838,6 +842,7 @@ CONFIG_BLK_DEV_SR=y
CONFIG_BLK_DEV_THROTTLING=y
CONFIG_BLKDEV_UBLK_LEGACY_OPCODES=y
CONFIG_BLK_DEV_UBLK=m
+CONFIG_BLK_DEV_WRITE_MOUNTED=y
CONFIG_BLK_DEV=y
CONFIG_BLK_DEV_ZONED=y
# CONFIG_BLK_INLINE_ENCRYPTION_FALLBACK is not set
@@ -858,6 +863,8 @@ CONFIG_BME680=m
# CONFIG_BMI088_ACCEL is not set
CONFIG_BMI160_I2C=m
CONFIG_BMI160_SPI=m
+CONFIG_BMI323_I2C=m
+CONFIG_BMI323_SPI=m
CONFIG_BMP280=m
CONFIG_BNA=m
CONFIG_BNX2=m
@@ -873,7 +880,6 @@ CONFIG_BONDING=m
# CONFIG_BOOT_CONFIG_FORCE is not set
CONFIG_BOOT_CONFIG=y
# CONFIG_BOOTPARAM_HARDLOCKUP_PANIC is not set
-# CONFIG_BOOTPARAM_HOTPLUG_CPU0 is not set
# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
@@ -1006,7 +1012,7 @@ CONFIG_BUILD_SALT=""
# CONFIG_CACHEFILES_DEBUG is not set
# CONFIG_CACHEFILES_ERROR_INJECTION is not set
CONFIG_CACHEFILES=m
-# CONFIG_CACHEFILES_ONDEMAND is not set
+CONFIG_CACHEFILES_ONDEMAND=y
CONFIG_CACHESTAT_SYSCALL=y
CONFIG_CADENCE_TTC_TIMER=y
CONFIG_CADENCE_WATCHDOG=m
@@ -1049,7 +1055,7 @@ CONFIG_CAN_NETLINK=y
CONFIG_CAN_PEAK_PCIEFD=m
CONFIG_CAN_PEAK_USB=m
CONFIG_CAN_RAW=m
-# CONFIG_CAN_RCAR_CANFD is not set
+CONFIG_CAN_RCAR_CANFD=m
# CONFIG_CAN_RCAR is not set
# CONFIG_CAN_SJA1000 is not set
CONFIG_CAN_SLCAN=m
@@ -1243,6 +1249,7 @@ CONFIG_CLK_SUNXI_CLOCKS=y
CONFIG_CLK_SUNXI_PRCM_SUN9I=y
CONFIG_CLK_SUNXI=y
CONFIG_CLK_VEXPRESS_OSC=y
+CONFIG_CLK_X1E80100_GCC=y
CONFIG_CLOCKSOURCE_WATCHDOG_MAX_SKEW_US=100
CONFIG_CLS_U32_MARK=y
CONFIG_CLS_U32_PERF=y
@@ -1308,7 +1315,7 @@ CONFIG_COMMON_CLK_ROCKCHIP=y
CONFIG_COMMON_CLK_RS9_PCIE=m
CONFIG_COMMON_CLK_S4_PERIPHERALS=y
CONFIG_COMMON_CLK_S4_PLL=y
-CONFIG_COMMON_CLK_SCMI=y
+CONFIG_COMMON_CLK_SCMI=m
CONFIG_COMMON_CLK_SCPI=m
# CONFIG_COMMON_CLK_SI514 is not set
CONFIG_COMMON_CLK_SI521XX=y
@@ -1459,7 +1466,6 @@ CONFIG_CRYPTO_CAST5=m
CONFIG_CRYPTO_CAST6=m
CONFIG_CRYPTO_CBC=y
CONFIG_CRYPTO_CCM=y
-CONFIG_CRYPTO_CFB=y
CONFIG_CRYPTO_CHACHA20=m
CONFIG_CRYPTO_CHACHA20_NEON=y
CONFIG_CRYPTO_CHACHA20POLY1305=m
@@ -1516,6 +1522,7 @@ CONFIG_CRYPTO_DEV_MARVELL_CESA=m
CONFIG_CRYPTO_DEV_NITROX_CNN55XX=m
CONFIG_CRYPTO_DEV_OCTEONTX2_CPT=m
CONFIG_CRYPTO_DEV_OCTEONTX_CPT=m
+CONFIG_CRYPTO_DEV_QAT_420XX=m
CONFIG_CRYPTO_DEV_QAT_4XXX=m
CONFIG_CRYPTO_DEV_QAT_C3XXX=m
CONFIG_CRYPTO_DEV_QAT_C3XXXVF=m
@@ -1597,7 +1604,6 @@ CONFIG_CRYPTO_MD5=y
CONFIG_CRYPTO_MICHAEL_MIC=m
CONFIG_CRYPTO_NHPOLY1305_NEON=m
CONFIG_CRYPTO_NULL=y
-CONFIG_CRYPTO_OFB=y
CONFIG_CRYPTO_PCBC=m
CONFIG_CRYPTO_PCRYPT=m
CONFIG_CRYPTO_POLY1305=m
@@ -1703,7 +1709,6 @@ CONFIG_DEBUG_FS_ALLOW_ALL=y
CONFIG_DEBUG_FS=y
# CONFIG_DEBUG_GPIO is not set
CONFIG_DEBUG_HIGHMEM=y
-# CONFIG_DEBUG_HOTPLUG_CPU0 is not set
CONFIG_DEBUG_INFO_BTF=y
# CONFIG_DEBUG_INFO_COMPRESSED is not set
CONFIG_DEBUG_INFO_COMPRESSED_NONE=y
@@ -1768,7 +1773,7 @@ CONFIG_DEBUG_STACK_USAGE=y
# CONFIG_DEBUG_VM_MAPLE_TREE is not set
CONFIG_DEBUG_VM_PGFLAGS=y
CONFIG_DEBUG_VM_PGTABLE=y
-# CONFIG_DEBUG_VM_RB is not set # revisit this if performance isn't horrible
+# CONFIG_DEBUG_VM_RB is not set
CONFIG_DEBUG_VM_SHOOT_LAZIES=y
# CONFIG_DEBUG_VM_VMACACHE is not set
CONFIG_DEBUG_VM=y
@@ -1892,6 +1897,7 @@ CONFIG_DP83867_PHY=m
CONFIG_DP83869_PHY=m
# CONFIG_DP83TC811_PHY is not set
CONFIG_DP83TD510_PHY=m
+CONFIG_DP83TG720_PHY=m
CONFIG_DPAA2_CONSOLE=m
# CONFIG_DPM_WATCHDOG is not set
CONFIG_DPOT_DAC=m
@@ -2024,6 +2030,7 @@ CONFIG_DRM_MSM_MDP5=y
# CONFIG_DRM_MSM_REGISTER_LOGGING is not set
# CONFIG_DRM_MXSFB is not set
CONFIG_DRM_NOUVEAU_BACKLIGHT=y
+CONFIG_DRM_NOUVEAU_GSP_DEFAULT=y
CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_NOUVEAU_SVM is not set
CONFIG_DRM_NWL_MIPI_DSI=m
@@ -2045,6 +2052,7 @@ CONFIG_DRM_PANEL_FEIYANG_FY07024DI26A30D=m
CONFIG_DRM_PANEL_HIMAX_HX8394=m
CONFIG_DRM_PANEL_ILITEK_IL9322=m
CONFIG_DRM_PANEL_ILITEK_ILI9341=m
+# CONFIG_DRM_PANEL_ILITEK_ILI9805 is not set
CONFIG_DRM_PANEL_ILITEK_ILI9881C=m
CONFIG_DRM_PANEL_ILITEK_ILI9882T=m
CONFIG_DRM_PANEL_INNOLUX_EJ030NA=m
@@ -2107,6 +2115,7 @@ CONFIG_DRM_PANEL_SITRONIX_ST7789V=m
# CONFIG_DRM_PANEL_SONY_TD4353_JDI is not set
CONFIG_DRM_PANEL_SONY_TULIP_TRULY_NT35521=m
CONFIG_DRM_PANEL_STARTEK_KD070FHFID015=m
+# CONFIG_DRM_PANEL_SYNAPTICS_R63353 is not set
# CONFIG_DRM_PANEL_TDO_TL070WSH30 is not set
# CONFIG_DRM_PANEL_TPO_TD028TTEC1 is not set
# CONFIG_DRM_PANEL_TPO_TD043MTEA1 is not set
@@ -2122,6 +2131,7 @@ CONFIG_DRM_PANFROST=m
CONFIG_DRM_PARADE_PS8622=m
CONFIG_DRM_PARADE_PS8640=m
CONFIG_DRM_PL111=m
+CONFIG_DRM_POWERVR=m
CONFIG_DRM_QXL=m
CONFIG_DRM_RADEON=m
CONFIG_DRM_RADEON_USERPTR=y
@@ -2135,7 +2145,7 @@ CONFIG_DRM_ROCKCHIP=m
# CONFIG_DRM_RZG2L_MIPI_DSI is not set
CONFIG_DRM_SAMSUNG_DSIM=m
# CONFIG_DRM_SHMOBILE is not set
-# CONFIG_DRM_SII902X is not set
+CONFIG_DRM_SII902X=m
CONFIG_DRM_SII9234=m
# CONFIG_DRM_SIL_SII8620 is not set
CONFIG_DRM_SIMPLE_BRIDGE=m
@@ -2178,6 +2188,7 @@ CONFIG_DRM_VKMS=m
CONFIG_DRM_VMWGFX_FBCON=y
CONFIG_DRM_VMWGFX=m
# CONFIG_DRM_VMWGFX_MKSSTATS is not set
+# CONFIG_DRM_XE is not set
# CONFIG_DRM_XEN_FRONTEND is not set
CONFIG_DRM=y
CONFIG_DRM_ZYNQMP_DPSUB=m
@@ -2280,6 +2291,7 @@ CONFIG_DVB_USB_VP702X=m
CONFIG_DVB_USB_VP7045=m
CONFIG_DVB_USB_ZD1301=m
CONFIG_DW_AXI_DMAC=m
+CONFIG_DWC_PCIE_PMU=m
CONFIG_DW_DMAC_CORE=m
CONFIG_DW_DMAC=m
CONFIG_DW_DMAC_PCI=m
@@ -2358,8 +2370,10 @@ CONFIG_ELF_CORE=y
CONFIG_EMAC_ROCKCHIP=m
# CONFIG_EMBEDDED is not set
CONFIG_ENA_ETHERNET=m
+# CONFIG_ENC28J60 is not set
CONFIG_ENCLOSURE_SERVICES=m
CONFIG_ENCRYPTED_KEYS=y
+# CONFIG_ENCX24J600 is not set
CONFIG_ENERGY_MODEL=y
CONFIG_ENIC=m
CONFIG_ENVELOPE_DETECTOR=m
@@ -2368,6 +2382,7 @@ CONFIG_EPOLL=y
CONFIG_EQUALIZER=m
# CONFIG_EROFS_FS_DEBUG is not set
CONFIG_EROFS_FS=m
+CONFIG_EROFS_FS_ONDEMAND=y
# CONFIG_EROFS_FS_PCPU_KTHREAD is not set
CONFIG_EROFS_FS_POSIX_ACL=y
CONFIG_EROFS_FS_SECURITY=y
@@ -2454,7 +2469,6 @@ CONFIG_FAULT_INJECTION=y
# CONFIG_FB_3DFX is not set
# CONFIG_FB_ARC is not set
# CONFIG_FB_ARK is not set
-# CONFIG_FB_ARMCLCD is not set
# CONFIG_FB_ASILIANT is not set
# CONFIG_FB_ATY128 is not set
# CONFIG_FB_ATY is not set
@@ -2474,7 +2488,6 @@ CONFIG_FB_EFI=y
# CONFIG_FB_IMSTT is not set
# CONFIG_FB_IMX is not set
# CONFIG_FB_KYRO is not set
-# CONFIG_FB_LE80578 is not set
# CONFIG_FB_MATROX_G is not set
# CONFIG_FB_MATROX_I2C is not set
# CONFIG_FB_MATROX is not set
@@ -2569,8 +2582,8 @@ CONFIG_FRAME_POINTER=y
CONFIG_FRAME_WARN=2048
CONFIG_FRONTSWAP=y
# CONFIG_FSCACHE_DEBUG is not set
-CONFIG_FSCACHE=m
CONFIG_FSCACHE_STATS=y
+CONFIG_FSCACHE=y
CONFIG_FS_DAX=y
CONFIG_FS_ENCRYPTION_INLINE_CRYPT=y
CONFIG_FS_ENCRYPTION=y
@@ -2802,8 +2815,8 @@ CONFIG_HAVE_PERF_USER_STACK_DUMP=y
CONFIG_HD44780=m
CONFIG_HDC100X=m
CONFIG_HDC2010=m
+# CONFIG_HDC3020 is not set
CONFIG_HEADERS_INSTALL=y
-# CONFIG_HERMES is not set
CONFIG_HFS_FS=m
CONFIG_HFSPLUS_FS=m
CONFIG_HI3660_MBOX=y
@@ -2871,6 +2884,7 @@ CONFIG_HID_MACALLY=m
CONFIG_HID_MAGICMOUSE=y
CONFIG_HID_MALTRON=m
CONFIG_HID_MAYFLASH=m
+# CONFIG_HID_MCP2200 is not set
CONFIG_HID_MCP2221=m
CONFIG_HID_MEGAWORLD_FF=m
CONFIG_HID_MICROSOFT=m
@@ -2976,7 +2990,6 @@ CONFIG_HNS3=m
CONFIG_HNS_DSAF=m
CONFIG_HNS_ENET=m
CONFIG_HOLTEK_FF=y
-# CONFIG_HOSTAP is not set
CONFIG_HOTPLUG_CPU=y
CONFIG_HOTPLUG_PCI_ACPI_AMPERE_ALTRA=m
CONFIG_HOTPLUG_PCI_ACPI_IBM=m
@@ -2992,6 +3005,7 @@ CONFIG_HOTPLUG_PCI=y
CONFIG_HP_WATCHDOG=m
CONFIG_HSA_AMD_SVM=y
CONFIG_HSA_AMD=y
+# CONFIG_HSC030PA is not set
# CONFIG_HSI is not set
CONFIG_HSR=m
# CONFIG_HSU_DMA is not set
@@ -3133,7 +3147,7 @@ CONFIG_I2C_QCOM_CCI=m
CONFIG_I2C_QCOM_GENI=m
CONFIG_I2C_QUP=m
# CONFIG_I2C_RCAR is not set
-# CONFIG_I2C_RIIC is not set
+CONFIG_I2C_RIIC=m
CONFIG_I2C_RK3X=y
# CONFIG_I2C_ROBOTFUZZ_OSIF is not set
# CONFIG_I2C_RZV2M is not set
@@ -3172,6 +3186,7 @@ CONFIG_I40EVF=m
CONFIG_I6300ESB_WDT=m
# CONFIG_I8K is not set
# CONFIG_IAQCORE is not set
+CONFIG_ICE_HWMON=y
CONFIG_ICE_HWTS=y
CONFIG_ICE=m
CONFIG_ICE_SWITCHDEV=y
@@ -3482,12 +3497,15 @@ CONFIG_INTERCONNECT_QCOM_SDM845=m
# CONFIG_INTERCONNECT_QCOM_SDX55 is not set
# CONFIG_INTERCONNECT_QCOM_SDX65 is not set
CONFIG_INTERCONNECT_QCOM_SDX75=m
+# CONFIG_INTERCONNECT_QCOM_SM6115 is not set
# CONFIG_INTERCONNECT_QCOM_SM6350 is not set
CONFIG_INTERCONNECT_QCOM_SM8150=m
CONFIG_INTERCONNECT_QCOM_SM8250=m
# CONFIG_INTERCONNECT_QCOM_SM8350 is not set
CONFIG_INTERCONNECT_QCOM_SM8450=m
# CONFIG_INTERCONNECT_QCOM_SM8550 is not set
+# CONFIG_INTERCONNECT_QCOM_SM8650 is not set
+CONFIG_INTERCONNECT_QCOM_X1E80100=m
CONFIG_INTERCONNECT_QCOM=y
CONFIG_INTERCONNECT=y
CONFIG_INTERRUPT_CNT=m
@@ -3717,6 +3735,7 @@ CONFIG_ISL29003=m
CONFIG_ISL29020=m
# CONFIG_ISL29125 is not set
# CONFIG_ISL29501 is not set
+# CONFIG_ISL76682 is not set
CONFIG_ISO9660_FS=m
CONFIG_IS_SIGNED_TYPE_KUNIT_TEST=m
CONFIG_IT8712F_WDT=m
@@ -3789,6 +3808,7 @@ CONFIG_JOYSTICK_PSXPAD_SPI_FF=y
CONFIG_JOYSTICK_PSXPAD_SPI=m
CONFIG_JOYSTICK_PXRC=m
CONFIG_JOYSTICK_QWIIC=m
+# CONFIG_JOYSTICK_SEESAW is not set
CONFIG_JOYSTICK_SENSEHAT=m
CONFIG_JOYSTICK_SIDEWINDER=m
# CONFIG_JOYSTICK_SPACEBALL is not set
@@ -3812,6 +3832,7 @@ CONFIG_KALLSYMS_ALL=y
# CONFIG_KALLSYMS_SELFTEST is not set
CONFIG_KALLSYMS=y
# CONFIG_KARMA_PARTITION is not set
+# CONFIG_KASAN_EXTRA_INFO is not set
CONFIG_KASAN_GENERIC=y
# CONFIG_KASAN_HW_TAGS is not set
CONFIG_KASAN_INLINE=y
@@ -3935,6 +3956,9 @@ CONFIG_L2TP_ETH=m
CONFIG_L2TP_IP=m
CONFIG_L2TP=m
CONFIG_L2TP_V3=y
+CONFIG_LAN743X=m
+CONFIG_LAN966X_DCB=y
+CONFIG_LAN966X_SWITCH=m
# CONFIG_LAPB is not set
CONFIG_LATENCYTOP=y
# CONFIG_LATTICE_ECP3_CONFIG is not set
@@ -3995,6 +4019,7 @@ CONFIG_LEDS_LP50XX=m
# CONFIG_LEDS_LP55XX_COMMON is not set
# CONFIG_LEDS_LP8860 is not set
CONFIG_LEDS_LT3593=m
+CONFIG_LEDS_MAX5970=m
CONFIG_LEDS_MAX77650=m
CONFIG_LEDS_MLXCPLD=m
CONFIG_LEDS_MLXREG=m
@@ -4014,6 +4039,7 @@ CONFIG_LEDS_REGULATOR=m
# CONFIG_LEDS_RT8515 is not set
CONFIG_LEDS_SGM3140=m
# CONFIG_LEDS_SPI_BYTE is not set
+# CONFIG_LEDS_SUN50I_A100 is not set
CONFIG_LEDS_SYSCON=y
# CONFIG_LEDS_TCA6507 is not set
# CONFIG_LEDS_TI_LMU_COMMON is not set
@@ -4118,6 +4144,7 @@ CONFIG_LTC2983=m
# CONFIG_LTO_CLANG_FULL is not set
# CONFIG_LTO_CLANG_THIN is not set
CONFIG_LTO_NONE=y
+# CONFIG_LTR390 is not set
CONFIG_LTR501=m
CONFIG_LTRF216A=m
CONFIG_LV0104CS=m
@@ -4180,6 +4207,7 @@ CONFIG_MAX30208=m
CONFIG_MAX31827=m
CONFIG_MAX31856=m
CONFIG_MAX31865=m
+CONFIG_MAX34408=m
# CONFIG_MAX44000 is not set
CONFIG_MAX44009=m
# CONFIG_MAX517 is not set
@@ -4211,7 +4239,9 @@ CONFIG_MCP41010=m
# CONFIG_MCP4531 is not set
# CONFIG_MCP4725 is not set
CONFIG_MCP4728=m
+CONFIG_MCP4821=m
# CONFIG_MCP4922 is not set
+CONFIG_MCP9600=m
CONFIG_MCTP_SERIAL=m
# CONFIG_MCTP_TRANSPORT_I2C is not set
# CONFIG_MCTP_TRANSPORT_I3C is not set
@@ -4258,7 +4288,6 @@ CONFIG_MEDIA_CAMERA_SUPPORT=y
CONFIG_MEDIA_CEC_RC=y
CONFIG_MEDIA_CEC_SUPPORT=y
CONFIG_MEDIA_CONTROLLER_DVB=y
-CONFIG_MEDIA_CONTROLLER_REQUEST_API=y
CONFIG_MEDIA_CONTROLLER=y
CONFIG_MEDIA_DIGITAL_TV_SUPPORT=y
CONFIG_MEDIA_PCI_SUPPORT=y
@@ -4305,7 +4334,7 @@ CONFIG_MEMTEST=y
# CONFIG_MERAKI_MX100 is not set
CONFIG_MESON_CANVAS=m
# CONFIG_MESON_CLK_MEASURE is not set
-# CONFIG_MESON_DDR_PMU is not set
+CONFIG_MESON_DDR_PMU=m
CONFIG_MESON_EE_PM_DOMAINS=y
CONFIG_MESON_EFUSE=m
CONFIG_MESON_GXBB_WATCHDOG=m
@@ -4523,6 +4552,7 @@ CONFIG_MLX5_VDPA=y
CONFIG_MLX5_VFIO_PCI=m
CONFIG_MLX90614=m
CONFIG_MLX90632=m
+# CONFIG_MLX90635 is not set
CONFIG_MLXBF_BOOTCTL=m
CONFIG_MLXBF_GIGE=m
# CONFIG_MLXBF_PMC is not set
@@ -4825,6 +4855,7 @@ CONFIG_MTD_SST25L=m
CONFIG_MTD_UBI_BEB_LIMIT=20
# CONFIG_MTD_UBI_BLOCK is not set
# CONFIG_MTD_UBI_FASTMAP is not set
+# CONFIG_MTD_UBI_FAULT_INJECTION is not set
# CONFIG_MTD_UBI_GLUEBI is not set
CONFIG_MTD_UBI=m
CONFIG_MTD_UBI_WL_THRESHOLD=4096
@@ -4867,7 +4898,6 @@ CONFIG_NATSEMI=m
CONFIG_NCN26000_PHY=m
CONFIG_NCSI_OEM_CMD_GET_MAC=y
CONFIG_NCSI_OEM_CMD_KEEP_PHY=y
-CONFIG_ND_BLK=m
CONFIG_ND_BTT=m
# CONFIG_NDC_DIS_DYNAMIC_CACHING is not set
CONFIG_NE2K_PCI=m
@@ -5172,7 +5202,7 @@ CONFIG_NET_VENDOR_LITEX=y
CONFIG_NET_VENDOR_MARVELL=y
CONFIG_NET_VENDOR_MELLANOX=y
CONFIG_NET_VENDOR_MICREL=y
-# CONFIG_NET_VENDOR_MICROCHIP is not set
+CONFIG_NET_VENDOR_MICROCHIP=y
# CONFIG_NET_VENDOR_MICROSEMI is not set
CONFIG_NET_VENDOR_MICROSOFT=y
CONFIG_NET_VENDOR_MYRI=y
@@ -5188,7 +5218,7 @@ CONFIG_NET_VENDOR_QLOGIC=y
CONFIG_NET_VENDOR_QUALCOMM=y
CONFIG_NET_VENDOR_RDC=y
CONFIG_NET_VENDOR_REALTEK=y
-# CONFIG_NET_VENDOR_RENESAS is not set
+CONFIG_NET_VENDOR_RENESAS=y
CONFIG_NET_VENDOR_ROCKER=y
# CONFIG_NET_VENDOR_SAMSUNG is not set
# CONFIG_NET_VENDOR_SEEQ is not set
@@ -5297,6 +5327,7 @@ CONFIG_NF_REJECT_IPV6=m
CONFIG_NFSD_BLOCKLAYOUT=y
CONFIG_NFSD_FLEXFILELAYOUT=y
CONFIG_NFS_DISABLE_UDP_SUPPORT=y
+# CONFIG_NFSD_LEGACY_CLIENT_TRACKING is not set
CONFIG_NFSD=m
CONFIG_NFSD_PNFS=y
CONFIG_NFSD_SCSILAYOUT=y
@@ -5445,6 +5476,7 @@ CONFIG_NOUVEAU_PLATFORM_DRIVER=y
CONFIG_NOZOMI=m
CONFIG_NR_CPUS=4096
CONFIG_NS83820=m
+CONFIG_NSM=m
CONFIG_NTB_EPF=m
# CONFIG_NTB is not set
# CONFIG_NTFS3_64BIT_CLUSTER is not set
@@ -5558,7 +5590,6 @@ CONFIG_OPTEE=m
CONFIG_OPTEE_SHM_NUM_PRIV_PAGES=1
CONFIG_OPTPROBES=y
CONFIG_ORANGEFS_FS=m
-CONFIG_ORINOCO_USB=m
CONFIG_OSF_PARTITION=y
CONFIG_OSNOISE_TRACER=y
CONFIG_OVERFLOW_KUNIT_TEST=m
@@ -5569,10 +5600,6 @@ CONFIG_OVERLAY_FS=m
CONFIG_OVERLAY_FS_REDIRECT_ALWAYS_FOLLOW=y
# CONFIG_OVERLAY_FS_REDIRECT_DIR is not set
# CONFIG_OVERLAY_FS_XINO_AUTO is not set
-CONFIG_P54_COMMON=m
-CONFIG_P54_PCI=m
-# CONFIG_P54_SPI is not set
-CONFIG_P54_USB=m
CONFIG_PA12203001=m
CONFIG_PACKET_DIAG=y
CONFIG_PACKET=y
@@ -5851,24 +5878,15 @@ CONFIG_PHY_XILINX_ZYNQMP=m
CONFIG_PID_IN_CONTEXTIDR=y
CONFIG_PID_NS=y
CONFIG_PINCONF=y
-CONFIG_PINCTRL_ALDERLAKE=m
CONFIG_PINCTRL_AMD=y
CONFIG_PINCTRL_AMLOGIC_C3=y
CONFIG_PINCTRL_AMLOGIC_T7=y
CONFIG_PINCTRL_APPLE_GPIO=m
CONFIG_PINCTRL_AS3722=y
CONFIG_PINCTRL_AXP209=m
-# CONFIG_PINCTRL_BAYTRAIL is not set
-# CONFIG_PINCTRL_BROXTON is not set
-# CONFIG_PINCTRL_CANNONLAKE is not set
-CONFIG_PINCTRL_CEDARFORK=m
-# CONFIG_PINCTRL_CHERRYVIEW is not set
CONFIG_PINCTRL_CS42L43=m
CONFIG_PINCTRL_CY8C95X0=m
-CONFIG_PINCTRL_ELKHARTLAKE=m
-CONFIG_PINCTRL_EMMITSBURG=m
# CONFIG_PINCTRL_EQUILIBRIUM is not set
-# CONFIG_PINCTRL_GEMINILAKE is not set
CONFIG_PINCTRL_IMX8DXL=y
CONFIG_PINCTRL_IMX8MM=y
CONFIG_PINCTRL_IMX8MN=y
@@ -5887,10 +5905,7 @@ CONFIG_PINCTRL_IMX93=y
# CONFIG_PINCTRL_IPQ8064 is not set
# CONFIG_PINCTRL_IPQ8074 is not set
# CONFIG_PINCTRL_IPQ9574 is not set
-# CONFIG_PINCTRL_JASPERLAKE is not set
-CONFIG_PINCTRL_LAKEFIELD=m
CONFIG_PINCTRL_LPASS_LPI=m
-# CONFIG_PINCTRL_LYNXPOINT is not set
CONFIG_PINCTRL_MAX77620=y
# CONFIG_PINCTRL_MCP23S08 is not set
# CONFIG_PINCTRL_MDM9607 is not set
@@ -5926,6 +5941,7 @@ CONFIG_PINCTRL_QDF2XXX=m
# CONFIG_PINCTRL_QDU1000 is not set
CONFIG_PINCTRL_RK805=m
CONFIG_PINCTRL_ROCKCHIP=y
+CONFIG_PINCTRL_S32G2=y
CONFIG_PINCTRL_SA8775P=m
CONFIG_PINCTRL_SC7180=y
CONFIG_PINCTRL_SC7280_LPASS_LPI=m
@@ -5940,6 +5956,7 @@ CONFIG_PINCTRL_SDM845=m
# CONFIG_PINCTRL_SDX65 is not set
# CONFIG_PINCTRL_SDX75 is not set
CONFIG_PINCTRL_SINGLE=y
+# CONFIG_PINCTRL_SM4450 is not set
# CONFIG_PINCTRL_SM6115 is not set
# CONFIG_PINCTRL_SM6115_LPASS_LPI is not set
# CONFIG_PINCTRL_SM6125 is not set
@@ -5955,6 +5972,8 @@ CONFIG_PINCTRL_SM8450_LPASS_LPI=m
CONFIG_PINCTRL_SM8450=m
# CONFIG_PINCTRL_SM8550 is not set
# CONFIG_PINCTRL_SM8550_LPASS_LPI is not set
+# CONFIG_PINCTRL_SM8650 is not set
+# CONFIG_PINCTRL_SM8650_LPASS_LPI is not set
# CONFIG_PINCTRL_STMFX is not set
CONFIG_PINCTRL_SUN20I_D1=y
# CONFIG_PINCTRL_SUN4I_A10 is not set
@@ -5982,6 +6001,8 @@ CONFIG_PINCTRL_SUN8I_H3=y
# CONFIG_PINCTRL_SUN9I_A80_R is not set
# CONFIG_PINCTRL_SX150X is not set
CONFIG_PINCTRL_TEGRA234=y
+CONFIG_PINCTRL_TPS6594=m
+CONFIG_PINCTRL_X1E80100=m
CONFIG_PINCTRL=y
CONFIG_PINCTRL_ZYNQMP=y
# CONFIG_PING is not set
@@ -6222,6 +6243,7 @@ CONFIG_QCOM_MPM=m
CONFIG_QCOM_OCMEM=m
CONFIG_QCOM_PDC=y
CONFIG_QCOM_PMIC_GLINK=m
+CONFIG_QCOM_PMIC_PDCHARGER_ULOG=m
CONFIG_QCOM_Q6V5_ADSP=m
CONFIG_QCOM_Q6V5_MSS=m
CONFIG_QCOM_Q6V5_PAS=m
@@ -6262,6 +6284,7 @@ CONFIG_QCOM_WDT=m
CONFIG_QCS_GCC_404=m
# CONFIG_QCS_Q6SSTOP_404 is not set
# CONFIG_QCS_TURING_404 is not set
+# CONFIG_QDU_ECPRICC_1000 is not set
# CONFIG_QDU_GCC_1000 is not set
CONFIG_QEDE=m
CONFIG_QEDF=m
@@ -6335,6 +6358,7 @@ CONFIG_RAPIDIO_TSI721=m
CONFIG_RASPBERRYPI_FIRMWARE=y
CONFIG_RASPBERRYPI_POWER=y
CONFIG_RATIONAL_KUNIT_TEST=m
+CONFIG_RAVB=m
# CONFIG_RAVE_SP_CORE is not set
# CONFIG_RBTREE_TEST is not set
# CONFIG_RCAR_DMAC is not set
@@ -6374,7 +6398,7 @@ CONFIG_RDS_TCP=m
CONFIG_RD_XZ=y
CONFIG_RD_ZSTD=y
# CONFIG_READABLE_ASM is not set
-# CONFIG_READ_ONLY_THP_FOR_FS is not set
+CONFIG_READ_ONLY_THP_FOR_FS=y
CONFIG_REALTEK_AUTOPM=y
CONFIG_REALTEK_PHY=m
# CONFIG_REED_SOLOMON_TEST is not set
@@ -6440,6 +6464,7 @@ CONFIG_REGULATOR_MP886X=m
# CONFIG_REGULATOR_MT6311 is not set
# CONFIG_REGULATOR_MT6315 is not set
CONFIG_REGULATOR_MT6370=m
+# CONFIG_REGULATOR_NETLINK_EVENTS is not set
CONFIG_REGULATOR_PCA9450=m
CONFIG_REGULATOR_PF8X00=m
CONFIG_REGULATOR_PFUZE100=m
@@ -6507,11 +6532,13 @@ CONFIG_RELOCATABLE=y
# CONFIG_REMOTEPROC_CDEV is not set
CONFIG_REMOTEPROC=y
CONFIG_REMOTE_TARGET=m
-# CONFIG_RENESAS_OSTM is not set
+# CONFIG_RENESAS_ETHER_SWITCH is not set
+CONFIG_RENESAS_GEN4_PTP=m
+CONFIG_RENESAS_OSTM=y
# CONFIG_RENESAS_PHY is not set
# CONFIG_RENESAS_RPCIF is not set
# CONFIG_RENESAS_RZAWDT is not set
-# CONFIG_RENESAS_RZG2LWDT is not set
+CONFIG_RENESAS_RZG2LWDT=m
# CONFIG_RENESAS_RZN1WDT is not set
# CONFIG_RENESAS_USB_DMAC is not set
# CONFIG_RENESAS_WDT is not set
@@ -6688,6 +6715,7 @@ CONFIG_RTC_DRV_M41T94=m
CONFIG_RTC_DRV_M48T35=m
CONFIG_RTC_DRV_M48T59=m
# CONFIG_RTC_DRV_M48T86 is not set
+CONFIG_RTC_DRV_MAX31335=m
CONFIG_RTC_DRV_MAX6900=m
CONFIG_RTC_DRV_MAX6902=m
CONFIG_RTC_DRV_MAX6916=m
@@ -6736,6 +6764,7 @@ CONFIG_RTC_DRV_SUN6I=y
CONFIG_RTC_DRV_TEGRA=m
# CONFIG_RTC_DRV_TEST is not set
CONFIG_RTC_DRV_TI_K3=m
+CONFIG_RTC_DRV_TPS6594=m
CONFIG_RTC_DRV_V3020=m
CONFIG_RTC_DRV_X1205=m
CONFIG_RTC_DRV_XGENE=m
@@ -6805,9 +6834,9 @@ CONFIG_RV_REACT_PRINTK=y
CONFIG_RV=y
CONFIG_RXKAD=y
# CONFIG_RXPERF is not set
-# CONFIG_RZ_DMAC is not set
-# CONFIG_RZG2L_ADC is not set
-# CONFIG_RZG2L_THERMAL is not set
+CONFIG_RZ_DMAC=m
+CONFIG_RZG2L_ADC=m
+CONFIG_RZG2L_THERMAL=m
# CONFIG_RZ_MTU3 is not set
CONFIG_S2IO=m
# CONFIG_S390_KPROBES_SANITY_TEST is not set
@@ -6849,6 +6878,7 @@ CONFIG_SC92031=m
CONFIG_SCA3300=m
CONFIG_SC_CAMCC_7180=m
CONFIG_SC_CAMCC_7280=m
+CONFIG_SC_CAMCC_8280XP=m
CONFIG_SCD30_CORE=m
CONFIG_SCD30_I2C=m
CONFIG_SCD30_SERIAL=m
@@ -7099,6 +7129,7 @@ CONFIG_SENSORS_FSP_3Y=m
CONFIG_SENSORS_FTSTEUTATES=m
CONFIG_SENSORS_G760A=m
CONFIG_SENSORS_G762=m
+CONFIG_SENSORS_GIGABYTE_WATERFORCE=m
CONFIG_SENSORS_GL518SM=m
CONFIG_SENSORS_GL520SM=m
CONFIG_SENSORS_GPIO_FAN=m
@@ -7165,6 +7196,7 @@ CONFIG_SENSORS_LTC4222=m
CONFIG_SENSORS_LTC4245=m
CONFIG_SENSORS_LTC4260=m
CONFIG_SENSORS_LTC4261=m
+# CONFIG_SENSORS_LTC4286 is not set
CONFIG_SENSORS_MAX1111=m
# CONFIG_SENSORS_MAX127 is not set
# CONFIG_SENSORS_MAX15301 is not set
@@ -7192,10 +7224,12 @@ CONFIG_SENSORS_MAX8688=m
CONFIG_SENSORS_MC34VR500=m
CONFIG_SENSORS_MCP3021=m
CONFIG_SENSORS_MLXREG_FAN=m
+# CONFIG_SENSORS_MP2856 is not set
CONFIG_SENSORS_MP2888=m
CONFIG_SENSORS_MP2975=m
CONFIG_SENSORS_MP2975_REGULATOR=y
CONFIG_SENSORS_MP5023=m
+# CONFIG_SENSORS_MP5990 is not set
CONFIG_SENSORS_MPQ7932=m
CONFIG_SENSORS_MPQ7932_REGULATOR=y
CONFIG_SENSORS_MR75203=m
@@ -7291,7 +7325,7 @@ CONFIG_SERIAL_8250_CS=m
CONFIG_SERIAL_8250_DFL=m
CONFIG_SERIAL_8250_DMA=y
CONFIG_SERIAL_8250_DW=y
-# CONFIG_SERIAL_8250_EM is not set
+CONFIG_SERIAL_8250_EM=y
CONFIG_SERIAL_8250_EXAR=m
CONFIG_SERIAL_8250_EXTENDED=y
# CONFIG_SERIAL_8250_FINTEK is not set
@@ -7394,6 +7428,7 @@ CONFIG_SFP=m
CONFIG_SGETMASK_SYSCALL=y
CONFIG_SGI_PARTITION=y
# CONFIG_SHADOW_CALL_STACK is not set
+# CONFIG_SH_ETH is not set
CONFIG_SHMEM=y
# CONFIG_SHRINKER_DEBUG is not set
CONFIG_SHUFFLE_PAGE_ALLOCATOR=y
@@ -7413,10 +7448,8 @@ CONFIG_SKGE_GENESIS=y
CONFIG_SKGE=m
# CONFIG_SKY2_DEBUG is not set
CONFIG_SKY2=m
-# CONFIG_SLAB_DEPRECATED is not set
CONFIG_SLAB_FREELIST_HARDENED=y
CONFIG_SLAB_FREELIST_RANDOM=y
-# CONFIG_SLAB is not set
# CONFIG_SLAB_MERGE_DEFAULT is not set
CONFIG_SLIMBUS=m
CONFIG_SLIM_QCOM_CTRL=m
@@ -7444,6 +7477,7 @@ CONFIG_SMC=m
# CONFIG_SM_DISPCC_8250 is not set
CONFIG_SM_DISPCC_8450=m
# CONFIG_SM_DISPCC_8550 is not set
+CONFIG_SM_DISPCC_8650=m
# CONFIG_SM_FTL is not set
# CONFIG_SM_GCC_4450 is not set
# CONFIG_SM_GCC_6115 is not set
@@ -7456,6 +7490,7 @@ CONFIG_SM_GCC_8250=m
CONFIG_SM_GCC_8350=m
CONFIG_SM_GCC_8450=m
CONFIG_SM_GCC_8550=m
+CONFIG_SM_GCC_8650=m
# CONFIG_SM_GPUCC_6115 is not set
# CONFIG_SM_GPUCC_6125 is not set
# CONFIG_SM_GPUCC_6350 is not set
@@ -7465,6 +7500,7 @@ CONFIG_SM_GCC_8550=m
# CONFIG_SM_GPUCC_8350 is not set
# CONFIG_SM_GPUCC_8450 is not set
# CONFIG_SM_GPUCC_8550 is not set
+CONFIG_SM_GPUCC_8650=m
CONFIG_SMPRO_ERRMON=m
CONFIG_SMPRO_MISC=m
CONFIG_SMP=y
@@ -7478,6 +7514,7 @@ CONFIG_SMS_SIANO_MDTV=m
CONFIG_SMS_SIANO_RC=y
CONFIG_SMS_USB_DRV=m
# CONFIG_SM_TCSRCC_8550 is not set
+CONFIG_SM_TCSRCC_8650=m
# CONFIG_SM_VIDEOCC_8150 is not set
# CONFIG_SM_VIDEOCC_8250 is not set
CONFIG_SM_VIDEOCC_8350=m
@@ -7948,7 +7985,7 @@ CONFIG_SND_SOC_RT715_SDW=m
CONFIG_SND_SOC_RT722_SDCA_SDW=m
# CONFIG_SND_SOC_RT9120 is not set
CONFIG_SND_SOC_RTQ9128=m
-# CONFIG_SND_SOC_RZ is not set
+CONFIG_SND_SOC_RZ=m
# CONFIG_SND_SOC_SAMSUNG_ARIES_WM8994 is not set
# CONFIG_SND_SOC_SAMSUNG is not set
CONFIG_SND_SOC_SAMSUNG_MIDAS_WM1811=m
@@ -8117,6 +8154,7 @@ CONFIG_SND_SOC_WM8962=m
# CONFIG_SND_SOC_WSA881X is not set
CONFIG_SND_SOC_WSA883X=m
CONFIG_SND_SOC_WSA884X=m
+CONFIG_SND_SOC_X1E80100=m
CONFIG_SND_SOC_XILINX_AUDIO_FORMATTER=m
CONFIG_SND_SOC_XILINX_I2S=m
CONFIG_SND_SOC_XILINX_SPDIF=m
@@ -8255,7 +8293,7 @@ CONFIG_SPI_QCOM_QSPI=m
CONFIG_SPI_QUP=m
CONFIG_SPI_ROCKCHIP=m
CONFIG_SPI_ROCKCHIP_SFC=m
-# CONFIG_SPI_RSPI is not set
+CONFIG_SPI_RSPI=m
# CONFIG_SPI_RZV2M_CSI is not set
# CONFIG_SPI_SC18IS602 is not set
# CONFIG_SPI_SH_HSPI is not set
@@ -8316,6 +8354,7 @@ CONFIG_SSB_PCIHOST=y
CONFIG_SSB_SDIOHOST=y
# CONFIG_SSFDC is not set
CONFIG_SSIF_IPMI_BMC=m
+CONFIG_STACKDEPOT_MAX_FRAMES=64
CONFIG_STACK_HASH_ORDER=20
CONFIG_STACKINIT_KUNIT_TEST=m
CONFIG_STACKPROTECTOR_STRONG=y
@@ -8515,6 +8554,7 @@ CONFIG_TCP_MD5SIG=y
CONFIG_TCS3472=m
CONFIG_TDX_GUEST_DRIVER=m
CONFIG_TEE=m
+CONFIG_TEE_STMM_EFI=m
CONFIG_TEGRA124_EMC=m
CONFIG_TEGRA186_GPC_DMA=m
CONFIG_TEGRA186_TIMER=y
@@ -8589,6 +8629,7 @@ CONFIG_TEST_STRING_HELPERS=m
# CONFIG_TEST_UUID is not set
CONFIG_TEST_VMALLOC=m
# CONFIG_TEST_XARRAY is not set
+# CONFIG_THERMAL_DEBUGFS is not set
# CONFIG_THERMAL_DEFAULT_GOV_BANG_BANG is not set
# CONFIG_THERMAL_DEFAULT_GOV_FAIR_SHARE is not set
CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y
@@ -8629,6 +8670,7 @@ CONFIG_TI_ADS7924=m
CONFIG_TI_ADS8344=m
# CONFIG_TI_ADS8688 is not set
CONFIG_TI_AM335X_ADC=m
+CONFIG_TI_AM65_CPSW_QOS=y
CONFIG_TI_AM65_CPSW_TAS=y
# CONFIG_TICK_CPU_ACCOUNTING is not set
# CONFIG_TI_CPSW_PHY_SEL is not set
@@ -8819,6 +8861,7 @@ CONFIG_TRACE_EVAL_MAP_FILE=y
CONFIG_TRACER_SNAPSHOT=y
# CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS is not set
CONFIG_TRANSPARENT_HUGEPAGE_MADVISE=y
+# CONFIG_TRANSPARENT_HUGEPAGE_NEVER is not set
CONFIG_TRANSPARENT_HUGEPAGE=y
# CONFIG_TRIM_UNUSED_KSYMS is not set
CONFIG_TRUSTED_FOUNDATIONS=y
@@ -8858,6 +8901,7 @@ CONFIG_TYPEC_MUX_GPIO_SBU=m
CONFIG_TYPEC_MUX_NB7VPQ904M=m
CONFIG_TYPEC_MUX_PI3USB30532=m
CONFIG_TYPEC_MUX_PTN36502=m
+# CONFIG_TYPEC_MUX_WCD939X_USBSS is not set
CONFIG_TYPEC_NVIDIA_ALTMODE=m
CONFIG_TYPEC_QCOM_PMIC=m
# CONFIG_TYPEC_RT1711H is not set
@@ -9183,7 +9227,6 @@ CONFIG_USB_NET_NET1080=m
CONFIG_USB_NET_PLUSB=m
CONFIG_USB_NET_QMI_WWAN=m
CONFIG_USB_NET_RNDIS_HOST=m
-CONFIG_USB_NET_RNDIS_WLAN=m
CONFIG_USB_NET_SMSC75XX=m
CONFIG_USB_NET_SMSC95XX=m
CONFIG_USB_NET_SR9700=m
@@ -9224,6 +9267,7 @@ CONFIG_USB_ROLE_SWITCH=y
CONFIG_USB_RTL8150=m
CONFIG_USB_RTL8152=m
CONFIG_USB_RTL8153_ECM=m
+CONFIG_USB_RZV2M_USB3DRD=m
CONFIG_USB_S2255=m
CONFIG_USB_SERIAL_AIRCABLE=m
CONFIG_USB_SERIAL_ARK3116=m
@@ -9332,11 +9376,11 @@ CONFIG_USB_XHCI_PCI_RENESAS=y
CONFIG_USB_XHCI_PCI=y
CONFIG_USB_XHCI_PLATFORM=m
CONFIG_USB_XHCI_RCAR=m
+CONFIG_USB_XHCI_RZV2M=y
CONFIG_USB_XHCI_TEGRA=m
CONFIG_USB_XUSBATM=m
CONFIG_USB=y
CONFIG_USB_YUREX=m
-# CONFIG_USB_ZD1201 is not set
# CONFIG_USB_ZERO is not set
CONFIG_USB_ZR364XX=m
# CONFIG_USELIB is not set
@@ -9353,6 +9397,7 @@ CONFIG_V4L_MEM2MEM_DRIVERS=y
CONFIG_V4L_PLATFORM_DRIVERS=y
CONFIG_V4L_TEST_DRIVERS=y
CONFIG_VALIDATE_FS_PARSER=y
+CONFIG_VCAP=y
CONFIG_VCHIQ_CDEV=y
CONFIG_VCNL3020=m
CONFIG_VCNL4000=m
@@ -9366,6 +9411,7 @@ CONFIG_VDPA_USER=m
CONFIG_VDSO=y
CONFIG_VEML6030=m
CONFIG_VEML6070=m
+# CONFIG_VEML6075 is not set
CONFIG_VETH=m
CONFIG_VEXPRESS_CONFIG=y
# CONFIG_VF610_ADC is not set
@@ -9374,6 +9420,7 @@ CONFIG_VFAT_FS=m
CONFIG_VFIO_AMBA=m
CONFIG_VFIO_CDX=m
CONFIG_VFIO_CONTAINER=y
+# CONFIG_VFIO_DEBUGFS is not set
# CONFIG_VFIO_DEVICE_CDEV is not set
CONFIG_VFIO_FSL_MC=m
CONFIG_VFIO_GROUP=y
@@ -9416,6 +9463,7 @@ CONFIG_VIDEO_ADV7842=m
CONFIG_VIDEO_AK7375=m
CONFIG_VIDEO_AK881X=m
CONFIG_VIDEO_ALLEGRO_DVT=m
+# CONFIG_VIDEO_ALVIUM_CSI2 is not set
CONFIG_VIDEO_AMPHION_VPU=m
CONFIG_VIDEO_AR0521=m
CONFIG_VIDEO_AU0828=m
@@ -9468,6 +9516,8 @@ CONFIG_VIDEO_EM28XX_V4L2=m
CONFIG_VIDEO_ET8EK8=m
CONFIG_VIDEO_FB_IVTV=m
# CONFIG_VIDEO_FIXED_MINOR_RANGES is not set
+CONFIG_VIDEO_GC0308=m
+CONFIG_VIDEO_GC2145=m
CONFIG_VIDEO_GO7007_LOADER=m
CONFIG_VIDEO_GO7007=m
CONFIG_VIDEO_GO7007_USB=m
@@ -9553,6 +9603,7 @@ CONFIG_VIDEO_OV5670=m
CONFIG_VIDEO_OV5675=m
CONFIG_VIDEO_OV5693=m
CONFIG_VIDEO_OV5695=m
+CONFIG_VIDEO_OV64A40=m
CONFIG_VIDEO_OV6650=m
CONFIG_VIDEO_OV7251=m
CONFIG_VIDEO_OV7640=m
@@ -9577,14 +9628,16 @@ CONFIG_VIDEO_QCOM_VENUS=m
# CONFIG_VIDEO_RCAR_VIN is not set
CONFIG_VIDEO_RDACM20=m
# CONFIG_VIDEO_RDACM21 is not set
-# CONFIG_VIDEO_RENESAS_FCP is not set
+CONFIG_VIDEO_RENESAS_FCP=m
+CONFIG_VIDEO_RENESAS_FDP1=m
# CONFIG_VIDEO_RENESAS_JPU is not set
+CONFIG_VIDEO_RENESAS_VSP1=m
CONFIG_VIDEO_RJ54N1=m
CONFIG_VIDEO_ROCKCHIP_ISP1=m
CONFIG_VIDEO_ROCKCHIP_RGA=m
CONFIG_VIDEO_ROCKCHIP_VDEC=m
-# CONFIG_VIDEO_RZG2L_CRU is not set
-# CONFIG_VIDEO_RZG2L_CSI2 is not set
+CONFIG_VIDEO_RZG2L_CRU=m
+CONFIG_VIDEO_RZG2L_CSI2=m
CONFIG_VIDEO_S5C73M3=m
CONFIG_VIDEO_S5K4ECGX=m
CONFIG_VIDEO_S5K5BAF=m
@@ -9631,6 +9684,7 @@ CONFIG_VIDEO_TEA6420=m
CONFIG_VIDEO_TEGRA=m
# CONFIG_VIDEO_TEGRA_TPG is not set
CONFIG_VIDEO_TEGRA_VDE=m
+# CONFIG_VIDEO_THP7312 is not set
CONFIG_VIDEO_THS7303=m
CONFIG_VIDEO_THS8200=m
CONFIG_VIDEO_TI_CAL=m
@@ -9649,6 +9703,7 @@ CONFIG_VIDEO_TW2804=m
# CONFIG_VIDEO_TW5864 is not set
CONFIG_VIDEO_TW686X=m
# CONFIG_VIDEO_TW68 is not set
+# CONFIG_VIDEO_TW9900 is not set
CONFIG_VIDEO_TW9903=m
CONFIG_VIDEO_TW9906=m
CONFIG_VIDEO_TW9910=m
@@ -9667,6 +9722,7 @@ CONFIG_VIDEO_VIVID=m
CONFIG_VIDEO_VIVID_MAX_DEVS=64
CONFIG_VIDEO_VP27SMPX=m
CONFIG_VIDEO_VPX3220=m
+CONFIG_VIDEO_WAVE_VPU=m
CONFIG_VIDEO_WM8739=m
CONFIG_VIDEO_WM8775=m
# CONFIG_VIDEO_XILINX is not set
@@ -9691,6 +9747,7 @@ CONFIG_VIRTIO_PCI_LEGACY=y
CONFIG_VIRTIO_PCI=y
# CONFIG_VIRTIO_PMEM is not set
CONFIG_VIRTIO_VDPA=m
+CONFIG_VIRTIO_VFIO_PCI=m
CONFIG_VIRTIO_VSOCKETS=m
CONFIG_VIRTIO=y
CONFIG_VIRTUALIZATION=y
@@ -9732,6 +9789,7 @@ CONFIG_VXLAN=m
# CONFIG_VZ89X is not set
CONFIG_W1_CON=y
CONFIG_W1=m
+# CONFIG_W1_MASTER_AMD_AXI is not set
# CONFIG_W1_MASTER_DS1WM is not set
CONFIG_W1_MASTER_DS2482=m
CONFIG_W1_MASTER_DS2490=m
@@ -9809,7 +9867,7 @@ CONFIG_WLAN_VENDOR_ATH=y
CONFIG_WLAN_VENDOR_BROADCOM=y
# CONFIG_WLAN_VENDOR_CISCO is not set
CONFIG_WLAN_VENDOR_INTEL=y
-CONFIG_WLAN_VENDOR_INTERSIL=y
+# CONFIG_WLAN_VENDOR_INTERSIL is not set
CONFIG_WLAN_VENDOR_MARVELL=y
CONFIG_WLAN_VENDOR_MEDIATEK=y
CONFIG_WLAN_VENDOR_MICROCHIP=y
@@ -9883,7 +9941,7 @@ CONFIG_XILINX_PR_DECOUPLER=m
CONFIG_XILINX_SDFEC=m
CONFIG_XILINX_VCU=m
# CONFIG_XILINX_WATCHDOG is not set
-# CONFIG_XILINX_WINDOW_WATCHDOG is not set
+CONFIG_XILINX_WINDOW_WATCHDOG=m
CONFIG_XILINX_XADC=m
CONFIG_XILINX_XDMA=m
CONFIG_XILINX_ZYNQMP_DMA=m
@@ -9934,6 +9992,7 @@ CONFIG_ZRAM_DEF_COMP_LZORLE=y
CONFIG_ZRAM=m
CONFIG_ZRAM_MEMORY_TRACKING=y
CONFIG_ZRAM_MULTI_COMP=y
+CONFIG_ZRAM_TRACK_ENTRY_ACTIME=y
# CONFIG_ZRAM_WRITEBACK is not set
CONFIG_ZSMALLOC_CHAIN_SIZE=8
# CONFIG_ZSMALLOC_STAT is not set
@@ -9946,6 +10005,7 @@ CONFIG_ZSWAP_COMPRESSOR_DEFAULT_LZO=y
# CONFIG_ZSWAP_COMPRESSOR_DEFAULT_ZSTD is not set
# CONFIG_ZSWAP_DEFAULT_ON is not set
CONFIG_ZSWAP_EXCLUSIVE_LOADS_DEFAULT_ON=y
+CONFIG_ZSWAP_SHRINKER_DEFAULT_ON=y
CONFIG_ZSWAP=y
# CONFIG_ZSWAP_ZPOOL_DEFAULT_Z3FOLD is not set
CONFIG_ZSWAP_ZPOOL_DEFAULT_ZBUD=y
@@ -9960,7 +10020,7 @@ CONFIG_ZENIFY=y
CONFIG_NTSYNC=y
CONFIG_USER_NS_UNPRIVILEGED=y
CONFIG_TCP_CONG_BBR2=m
-# CONFIG_SCHED_PDS is not set
+CONFIG_SCHED_BORE=y
CONFIG_HID_IPTS=m
CONFIG_HID_ITHC=m
CONFIG_SURFACE_BOOK1_DGPU_SWITCH=m
@@ -9969,11 +10029,8 @@ CONFIG_LEDS_TPS68470=m
CONFIG_SENSORS_SURFACE_FAN=m
CONFIG_SENSORS_SURFACE_TEMP=m
CONFIG_DRM_AMD_COLOR_STEAMDECK=y
-CONFIG_BMI323_I2C=m
-CONFIG_BMI323_SPI=m
CONFIG_DRM_APPLETBDRM=m
CONFIG_HID_APPLETB_BL=m
CONFIG_HID_APPLETB_KBD=m
CONFIG_HID_APPLE_MAGIC_BACKLIGHT=m
CONFIG_APPLE_BCE=m
-CONFIG_SCHED_BORE=y
diff --git a/SOURCES/kernel-aarch64-16k-fedora.config b/SOURCES/kernel-aarch64-16k-fedora.config
index f5677a4..3532664 100644
--- a/SOURCES/kernel-aarch64-16k-fedora.config
+++ b/SOURCES/kernel-aarch64-16k-fedora.config
@@ -112,6 +112,7 @@ CONFIG_AD5770R=m
# CONFIG_AD5791 is not set
# CONFIG_AD5933 is not set
# CONFIG_AD7091R5 is not set
+CONFIG_AD7091R8=m
CONFIG_AD7124=m
# CONFIG_AD7150 is not set
# CONFIG_AD7192 is not set
@@ -262,6 +263,7 @@ CONFIG_ANDROID_BINDERFS=y
# CONFIG_ANDROID_BINDER_IPC_SELFTEST is not set
CONFIG_ANDROID_BINDER_IPC=y
# CONFIG_ANON_VMA_NAME is not set
+# CONFIG_AOSONG_AGS02MA is not set
# CONFIG_APDS9300 is not set
CONFIG_APDS9802ALS=m
CONFIG_APDS9960=m
@@ -351,14 +353,14 @@ CONFIG_ARCH_R8A774A1=y
CONFIG_ARCH_R9A07G043=y
CONFIG_ARCH_R9A07G044=y
CONFIG_ARCH_R9A07G054=y
-# CONFIG_ARCH_R9A08G045 is not set
-# CONFIG_ARCH_R9A09G011 is not set
+CONFIG_ARCH_R9A08G045=y
+CONFIG_ARCH_R9A09G011=y
CONFIG_ARCH_RANDOM=y
# CONFIG_ARCH_RDA is not set
# CONFIG_ARCH_REALTEK is not set
CONFIG_ARCH_RENESAS=y
CONFIG_ARCH_ROCKCHIP=y
-# CONFIG_ARCH_S32 is not set
+CONFIG_ARCH_S32=y
# CONFIG_ARCH_SA1100 is not set
CONFIG_ARCH_SEATTLE=y
# CONFIG_ARCH_SPARX5 is not set
@@ -693,6 +695,7 @@ CONFIG_BACKLIGHT_LM3630A=m
# CONFIG_BACKLIGHT_LM3639 is not set
CONFIG_BACKLIGHT_LP855X=m
# CONFIG_BACKLIGHT_LV5207LP is not set
+CONFIG_BACKLIGHT_MP3309C=m
CONFIG_BACKLIGHT_MT6370=m
CONFIG_BACKLIGHT_PWM=m
CONFIG_BACKLIGHT_QCOM_WLED=m
@@ -748,6 +751,7 @@ CONFIG_BCACHEFS_FS=m
# CONFIG_BCACHEFS_NO_LATENCY_ACCT is not set
CONFIG_BCACHEFS_POSIX_ACL=y
CONFIG_BCACHEFS_QUOTA=y
+CONFIG_BCACHEFS_SIX_OPTIMISTIC_SPIN=y
# CONFIG_BCACHEFS_TESTS is not set
CONFIG_BCACHE=m
CONFIG_BCM2711_THERMAL=m
@@ -838,6 +842,7 @@ CONFIG_BLK_DEV_SR=y
CONFIG_BLK_DEV_THROTTLING=y
CONFIG_BLKDEV_UBLK_LEGACY_OPCODES=y
CONFIG_BLK_DEV_UBLK=m
+CONFIG_BLK_DEV_WRITE_MOUNTED=y
CONFIG_BLK_DEV=y
CONFIG_BLK_DEV_ZONED=y
# CONFIG_BLK_INLINE_ENCRYPTION_FALLBACK is not set
@@ -858,6 +863,8 @@ CONFIG_BME680=m
# CONFIG_BMI088_ACCEL is not set
CONFIG_BMI160_I2C=m
CONFIG_BMI160_SPI=m
+CONFIG_BMI323_I2C=m
+CONFIG_BMI323_SPI=m
CONFIG_BMP280=m
CONFIG_BNA=m
CONFIG_BNX2=m
@@ -873,7 +880,6 @@ CONFIG_BONDING=m
# CONFIG_BOOT_CONFIG_FORCE is not set
CONFIG_BOOT_CONFIG=y
# CONFIG_BOOTPARAM_HARDLOCKUP_PANIC is not set
-# CONFIG_BOOTPARAM_HOTPLUG_CPU0 is not set
# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
@@ -1006,7 +1012,7 @@ CONFIG_BUILD_SALT=""
# CONFIG_CACHEFILES_DEBUG is not set
# CONFIG_CACHEFILES_ERROR_INJECTION is not set
CONFIG_CACHEFILES=m
-# CONFIG_CACHEFILES_ONDEMAND is not set
+CONFIG_CACHEFILES_ONDEMAND=y
CONFIG_CACHESTAT_SYSCALL=y
CONFIG_CADENCE_TTC_TIMER=y
CONFIG_CADENCE_WATCHDOG=m
@@ -1049,7 +1055,7 @@ CONFIG_CAN_NETLINK=y
CONFIG_CAN_PEAK_PCIEFD=m
CONFIG_CAN_PEAK_USB=m
CONFIG_CAN_RAW=m
-# CONFIG_CAN_RCAR_CANFD is not set
+CONFIG_CAN_RCAR_CANFD=m
# CONFIG_CAN_RCAR is not set
# CONFIG_CAN_SJA1000 is not set
CONFIG_CAN_SLCAN=m
@@ -1243,6 +1249,7 @@ CONFIG_CLK_SUNXI_CLOCKS=y
CONFIG_CLK_SUNXI_PRCM_SUN9I=y
CONFIG_CLK_SUNXI=y
CONFIG_CLK_VEXPRESS_OSC=y
+CONFIG_CLK_X1E80100_GCC=y
CONFIG_CLOCKSOURCE_WATCHDOG_MAX_SKEW_US=100
CONFIG_CLS_U32_MARK=y
CONFIG_CLS_U32_PERF=y
@@ -1308,7 +1315,7 @@ CONFIG_COMMON_CLK_ROCKCHIP=y
CONFIG_COMMON_CLK_RS9_PCIE=m
CONFIG_COMMON_CLK_S4_PERIPHERALS=y
CONFIG_COMMON_CLK_S4_PLL=y
-CONFIG_COMMON_CLK_SCMI=y
+CONFIG_COMMON_CLK_SCMI=m
CONFIG_COMMON_CLK_SCPI=m
# CONFIG_COMMON_CLK_SI514 is not set
CONFIG_COMMON_CLK_SI521XX=y
@@ -1459,7 +1466,6 @@ CONFIG_CRYPTO_CAST5=m
CONFIG_CRYPTO_CAST6=m
CONFIG_CRYPTO_CBC=y
CONFIG_CRYPTO_CCM=y
-CONFIG_CRYPTO_CFB=y
CONFIG_CRYPTO_CHACHA20=m
CONFIG_CRYPTO_CHACHA20_NEON=y
CONFIG_CRYPTO_CHACHA20POLY1305=m
@@ -1516,6 +1522,7 @@ CONFIG_CRYPTO_DEV_MARVELL_CESA=m
CONFIG_CRYPTO_DEV_NITROX_CNN55XX=m
CONFIG_CRYPTO_DEV_OCTEONTX2_CPT=m
CONFIG_CRYPTO_DEV_OCTEONTX_CPT=m
+CONFIG_CRYPTO_DEV_QAT_420XX=m
CONFIG_CRYPTO_DEV_QAT_4XXX=m
CONFIG_CRYPTO_DEV_QAT_C3XXX=m
CONFIG_CRYPTO_DEV_QAT_C3XXXVF=m
@@ -1597,7 +1604,6 @@ CONFIG_CRYPTO_MD5=y
CONFIG_CRYPTO_MICHAEL_MIC=m
CONFIG_CRYPTO_NHPOLY1305_NEON=m
CONFIG_CRYPTO_NULL=y
-CONFIG_CRYPTO_OFB=y
CONFIG_CRYPTO_PCBC=m
CONFIG_CRYPTO_PCRYPT=m
CONFIG_CRYPTO_POLY1305=m
@@ -1703,7 +1709,6 @@ CONFIG_DEBUG_FS_ALLOW_ALL=y
CONFIG_DEBUG_FS=y
# CONFIG_DEBUG_GPIO is not set
# CONFIG_DEBUG_HIGHMEM is not set
-# CONFIG_DEBUG_HOTPLUG_CPU0 is not set
CONFIG_DEBUG_INFO_BTF=y
# CONFIG_DEBUG_INFO_COMPRESSED is not set
CONFIG_DEBUG_INFO_COMPRESSED_NONE=y
@@ -1761,7 +1766,7 @@ CONFIG_DEBUG_SHIRQ=y
# CONFIG_DEBUG_VM_MAPLE_TREE is not set
# CONFIG_DEBUG_VM_PGFLAGS is not set
# CONFIG_DEBUG_VM_PGTABLE is not set
-# CONFIG_DEBUG_VM_RB is not set # revisit this if performance isn't horrible
+# CONFIG_DEBUG_VM_RB is not set
# CONFIG_DEBUG_VM_SHOOT_LAZIES is not set
# CONFIG_DEBUG_VM_VMACACHE is not set
# CONFIG_DEBUG_WQ_FORCE_RR_CPU is not set
@@ -1883,6 +1888,7 @@ CONFIG_DP83867_PHY=m
CONFIG_DP83869_PHY=m
# CONFIG_DP83TC811_PHY is not set
CONFIG_DP83TD510_PHY=m
+CONFIG_DP83TG720_PHY=m
CONFIG_DPAA2_CONSOLE=m
# CONFIG_DPM_WATCHDOG is not set
CONFIG_DPOT_DAC=m
@@ -2015,6 +2021,7 @@ CONFIG_DRM_MSM_MDP5=y
# CONFIG_DRM_MSM_REGISTER_LOGGING is not set
# CONFIG_DRM_MXSFB is not set
CONFIG_DRM_NOUVEAU_BACKLIGHT=y
+CONFIG_DRM_NOUVEAU_GSP_DEFAULT=y
CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_NOUVEAU_SVM is not set
CONFIG_DRM_NWL_MIPI_DSI=m
@@ -2036,6 +2043,7 @@ CONFIG_DRM_PANEL_FEIYANG_FY07024DI26A30D=m
CONFIG_DRM_PANEL_HIMAX_HX8394=m
CONFIG_DRM_PANEL_ILITEK_IL9322=m
CONFIG_DRM_PANEL_ILITEK_ILI9341=m
+# CONFIG_DRM_PANEL_ILITEK_ILI9805 is not set
CONFIG_DRM_PANEL_ILITEK_ILI9881C=m
CONFIG_DRM_PANEL_ILITEK_ILI9882T=m
CONFIG_DRM_PANEL_INNOLUX_EJ030NA=m
@@ -2098,6 +2106,7 @@ CONFIG_DRM_PANEL_SITRONIX_ST7789V=m
# CONFIG_DRM_PANEL_SONY_TD4353_JDI is not set
CONFIG_DRM_PANEL_SONY_TULIP_TRULY_NT35521=m
CONFIG_DRM_PANEL_STARTEK_KD070FHFID015=m
+# CONFIG_DRM_PANEL_SYNAPTICS_R63353 is not set
# CONFIG_DRM_PANEL_TDO_TL070WSH30 is not set
# CONFIG_DRM_PANEL_TPO_TD028TTEC1 is not set
# CONFIG_DRM_PANEL_TPO_TD043MTEA1 is not set
@@ -2113,6 +2122,7 @@ CONFIG_DRM_PANFROST=m
CONFIG_DRM_PARADE_PS8622=m
CONFIG_DRM_PARADE_PS8640=m
CONFIG_DRM_PL111=m
+CONFIG_DRM_POWERVR=m
CONFIG_DRM_QXL=m
CONFIG_DRM_RADEON=m
CONFIG_DRM_RADEON_USERPTR=y
@@ -2126,7 +2136,7 @@ CONFIG_DRM_ROCKCHIP=m
# CONFIG_DRM_RZG2L_MIPI_DSI is not set
CONFIG_DRM_SAMSUNG_DSIM=m
# CONFIG_DRM_SHMOBILE is not set
-# CONFIG_DRM_SII902X is not set
+CONFIG_DRM_SII902X=m
CONFIG_DRM_SII9234=m
# CONFIG_DRM_SIL_SII8620 is not set
CONFIG_DRM_SIMPLE_BRIDGE=m
@@ -2169,6 +2179,7 @@ CONFIG_DRM_VKMS=m
CONFIG_DRM_VMWGFX_FBCON=y
CONFIG_DRM_VMWGFX=m
# CONFIG_DRM_VMWGFX_MKSSTATS is not set
+# CONFIG_DRM_XE is not set
# CONFIG_DRM_XEN_FRONTEND is not set
CONFIG_DRM=y
CONFIG_DRM_ZYNQMP_DPSUB=m
@@ -2271,6 +2282,7 @@ CONFIG_DVB_USB_VP702X=m
CONFIG_DVB_USB_VP7045=m
CONFIG_DVB_USB_ZD1301=m
CONFIG_DW_AXI_DMAC=m
+CONFIG_DWC_PCIE_PMU=m
CONFIG_DW_DMAC_CORE=m
CONFIG_DW_DMAC=m
CONFIG_DW_DMAC_PCI=m
@@ -2349,8 +2361,10 @@ CONFIG_ELF_CORE=y
CONFIG_EMAC_ROCKCHIP=m
# CONFIG_EMBEDDED is not set
CONFIG_ENA_ETHERNET=m
+# CONFIG_ENC28J60 is not set
CONFIG_ENCLOSURE_SERVICES=m
CONFIG_ENCRYPTED_KEYS=y
+# CONFIG_ENCX24J600 is not set
CONFIG_ENERGY_MODEL=y
CONFIG_ENIC=m
CONFIG_ENVELOPE_DETECTOR=m
@@ -2359,6 +2373,7 @@ CONFIG_EPOLL=y
CONFIG_EQUALIZER=m
# CONFIG_EROFS_FS_DEBUG is not set
CONFIG_EROFS_FS=m
+CONFIG_EROFS_FS_ONDEMAND=y
# CONFIG_EROFS_FS_PCPU_KTHREAD is not set
CONFIG_EROFS_FS_POSIX_ACL=y
CONFIG_EROFS_FS_SECURITY=y
@@ -2437,7 +2452,6 @@ CONFIG_FAT_KUNIT_TEST=m
# CONFIG_FB_3DFX is not set
# CONFIG_FB_ARC is not set
# CONFIG_FB_ARK is not set
-# CONFIG_FB_ARMCLCD is not set
# CONFIG_FB_ASILIANT is not set
# CONFIG_FB_ATY128 is not set
# CONFIG_FB_ATY is not set
@@ -2457,7 +2471,6 @@ CONFIG_FB_EFI=y
# CONFIG_FB_IMSTT is not set
# CONFIG_FB_IMX is not set
# CONFIG_FB_KYRO is not set
-# CONFIG_FB_LE80578 is not set
# CONFIG_FB_MATROX_G is not set
# CONFIG_FB_MATROX_I2C is not set
# CONFIG_FB_MATROX is not set
@@ -2552,8 +2565,8 @@ CONFIG_FRAME_POINTER=y
CONFIG_FRAME_WARN=2048
CONFIG_FRONTSWAP=y
# CONFIG_FSCACHE_DEBUG is not set
-CONFIG_FSCACHE=m
CONFIG_FSCACHE_STATS=y
+CONFIG_FSCACHE=y
CONFIG_FS_DAX=y
CONFIG_FS_ENCRYPTION_INLINE_CRYPT=y
CONFIG_FS_ENCRYPTION=y
@@ -2785,8 +2798,8 @@ CONFIG_HAVE_PERF_USER_STACK_DUMP=y
CONFIG_HD44780=m
CONFIG_HDC100X=m
CONFIG_HDC2010=m
+# CONFIG_HDC3020 is not set
CONFIG_HEADERS_INSTALL=y
-# CONFIG_HERMES is not set
CONFIG_HFS_FS=m
CONFIG_HFSPLUS_FS=m
CONFIG_HI3660_MBOX=y
@@ -2854,6 +2867,7 @@ CONFIG_HID_MACALLY=m
CONFIG_HID_MAGICMOUSE=y
CONFIG_HID_MALTRON=m
CONFIG_HID_MAYFLASH=m
+# CONFIG_HID_MCP2200 is not set
CONFIG_HID_MCP2221=m
CONFIG_HID_MEGAWORLD_FF=m
CONFIG_HID_MICROSOFT=m
@@ -2959,7 +2973,6 @@ CONFIG_HNS3=m
CONFIG_HNS_DSAF=m
CONFIG_HNS_ENET=m
CONFIG_HOLTEK_FF=y
-# CONFIG_HOSTAP is not set
CONFIG_HOTPLUG_CPU=y
CONFIG_HOTPLUG_PCI_ACPI_AMPERE_ALTRA=m
CONFIG_HOTPLUG_PCI_ACPI_IBM=m
@@ -2975,6 +2988,7 @@ CONFIG_HOTPLUG_PCI=y
CONFIG_HP_WATCHDOG=m
CONFIG_HSA_AMD_SVM=y
CONFIG_HSA_AMD=y
+# CONFIG_HSC030PA is not set
# CONFIG_HSI is not set
CONFIG_HSR=m
# CONFIG_HSU_DMA is not set
@@ -3116,7 +3130,7 @@ CONFIG_I2C_QCOM_CCI=m
CONFIG_I2C_QCOM_GENI=m
CONFIG_I2C_QUP=m
# CONFIG_I2C_RCAR is not set
-# CONFIG_I2C_RIIC is not set
+CONFIG_I2C_RIIC=m
CONFIG_I2C_RK3X=y
# CONFIG_I2C_ROBOTFUZZ_OSIF is not set
# CONFIG_I2C_RZV2M is not set
@@ -3155,6 +3169,7 @@ CONFIG_I40EVF=m
CONFIG_I6300ESB_WDT=m
# CONFIG_I8K is not set
# CONFIG_IAQCORE is not set
+CONFIG_ICE_HWMON=y
CONFIG_ICE_HWTS=y
CONFIG_ICE=m
CONFIG_ICE_SWITCHDEV=y
@@ -3465,12 +3480,15 @@ CONFIG_INTERCONNECT_QCOM_SDM845=m
# CONFIG_INTERCONNECT_QCOM_SDX55 is not set
# CONFIG_INTERCONNECT_QCOM_SDX65 is not set
CONFIG_INTERCONNECT_QCOM_SDX75=m
+# CONFIG_INTERCONNECT_QCOM_SM6115 is not set
# CONFIG_INTERCONNECT_QCOM_SM6350 is not set
CONFIG_INTERCONNECT_QCOM_SM8150=m
CONFIG_INTERCONNECT_QCOM_SM8250=m
# CONFIG_INTERCONNECT_QCOM_SM8350 is not set
CONFIG_INTERCONNECT_QCOM_SM8450=m
# CONFIG_INTERCONNECT_QCOM_SM8550 is not set
+# CONFIG_INTERCONNECT_QCOM_SM8650 is not set
+CONFIG_INTERCONNECT_QCOM_X1E80100=m
CONFIG_INTERCONNECT_QCOM=y
CONFIG_INTERCONNECT=y
CONFIG_INTERRUPT_CNT=m
@@ -3700,6 +3718,7 @@ CONFIG_ISL29003=m
CONFIG_ISL29020=m
# CONFIG_ISL29125 is not set
# CONFIG_ISL29501 is not set
+# CONFIG_ISL76682 is not set
CONFIG_ISO9660_FS=m
CONFIG_IS_SIGNED_TYPE_KUNIT_TEST=m
CONFIG_IT8712F_WDT=m
@@ -3772,6 +3791,7 @@ CONFIG_JOYSTICK_PSXPAD_SPI_FF=y
CONFIG_JOYSTICK_PSXPAD_SPI=m
CONFIG_JOYSTICK_PXRC=m
CONFIG_JOYSTICK_QWIIC=m
+# CONFIG_JOYSTICK_SEESAW is not set
CONFIG_JOYSTICK_SENSEHAT=m
CONFIG_JOYSTICK_SIDEWINDER=m
# CONFIG_JOYSTICK_SPACEBALL is not set
@@ -3795,6 +3815,7 @@ CONFIG_KALLSYMS_ALL=y
# CONFIG_KALLSYMS_SELFTEST is not set
CONFIG_KALLSYMS=y
# CONFIG_KARMA_PARTITION is not set
+# CONFIG_KASAN_EXTRA_INFO is not set
# CONFIG_KASAN is not set
# CONFIG_KASAN_MODULE_TEST is not set
# CONFIG_KASAN_SW_TAGS is not set
@@ -3911,6 +3932,9 @@ CONFIG_L2TP_ETH=m
CONFIG_L2TP_IP=m
CONFIG_L2TP=m
CONFIG_L2TP_V3=y
+CONFIG_LAN743X=m
+CONFIG_LAN966X_DCB=y
+CONFIG_LAN966X_SWITCH=m
# CONFIG_LAPB is not set
CONFIG_LATENCYTOP=y
# CONFIG_LATTICE_ECP3_CONFIG is not set
@@ -3971,6 +3995,7 @@ CONFIG_LEDS_LP50XX=m
# CONFIG_LEDS_LP55XX_COMMON is not set
# CONFIG_LEDS_LP8860 is not set
CONFIG_LEDS_LT3593=m
+CONFIG_LEDS_MAX5970=m
CONFIG_LEDS_MAX77650=m
CONFIG_LEDS_MLXCPLD=m
CONFIG_LEDS_MLXREG=m
@@ -3990,6 +4015,7 @@ CONFIG_LEDS_REGULATOR=m
# CONFIG_LEDS_RT8515 is not set
CONFIG_LEDS_SGM3140=m
# CONFIG_LEDS_SPI_BYTE is not set
+# CONFIG_LEDS_SUN50I_A100 is not set
CONFIG_LEDS_SYSCON=y
# CONFIG_LEDS_TCA6507 is not set
# CONFIG_LEDS_TI_LMU_COMMON is not set
@@ -4094,6 +4120,7 @@ CONFIG_LTC2983=m
# CONFIG_LTO_CLANG_FULL is not set
# CONFIG_LTO_CLANG_THIN is not set
CONFIG_LTO_NONE=y
+# CONFIG_LTR390 is not set
CONFIG_LTR501=m
CONFIG_LTRF216A=m
CONFIG_LV0104CS=m
@@ -4156,6 +4183,7 @@ CONFIG_MAX30208=m
CONFIG_MAX31827=m
CONFIG_MAX31856=m
CONFIG_MAX31865=m
+CONFIG_MAX34408=m
# CONFIG_MAX44000 is not set
CONFIG_MAX44009=m
# CONFIG_MAX517 is not set
@@ -4186,7 +4214,9 @@ CONFIG_MCP41010=m
# CONFIG_MCP4531 is not set
# CONFIG_MCP4725 is not set
CONFIG_MCP4728=m
+CONFIG_MCP4821=m
# CONFIG_MCP4922 is not set
+CONFIG_MCP9600=m
CONFIG_MCTP_SERIAL=m
# CONFIG_MCTP_TRANSPORT_I2C is not set
# CONFIG_MCTP_TRANSPORT_I3C is not set
@@ -4233,7 +4263,6 @@ CONFIG_MEDIA_CAMERA_SUPPORT=y
CONFIG_MEDIA_CEC_RC=y
CONFIG_MEDIA_CEC_SUPPORT=y
CONFIG_MEDIA_CONTROLLER_DVB=y
-CONFIG_MEDIA_CONTROLLER_REQUEST_API=y
CONFIG_MEDIA_CONTROLLER=y
CONFIG_MEDIA_DIGITAL_TV_SUPPORT=y
CONFIG_MEDIA_PCI_SUPPORT=y
@@ -4280,7 +4309,7 @@ CONFIG_MEMTEST=y
# CONFIG_MERAKI_MX100 is not set
CONFIG_MESON_CANVAS=m
# CONFIG_MESON_CLK_MEASURE is not set
-# CONFIG_MESON_DDR_PMU is not set
+CONFIG_MESON_DDR_PMU=m
CONFIG_MESON_EE_PM_DOMAINS=y
CONFIG_MESON_EFUSE=m
CONFIG_MESON_GXBB_WATCHDOG=m
@@ -4498,6 +4527,7 @@ CONFIG_MLX5_VDPA=y
CONFIG_MLX5_VFIO_PCI=m
CONFIG_MLX90614=m
CONFIG_MLX90632=m
+# CONFIG_MLX90635 is not set
CONFIG_MLXBF_BOOTCTL=m
CONFIG_MLXBF_GIGE=m
# CONFIG_MLXBF_PMC is not set
@@ -4799,6 +4829,7 @@ CONFIG_MTD_SST25L=m
CONFIG_MTD_UBI_BEB_LIMIT=20
# CONFIG_MTD_UBI_BLOCK is not set
# CONFIG_MTD_UBI_FASTMAP is not set
+# CONFIG_MTD_UBI_FAULT_INJECTION is not set
# CONFIG_MTD_UBI_GLUEBI is not set
CONFIG_MTD_UBI=m
CONFIG_MTD_UBI_WL_THRESHOLD=4096
@@ -4841,7 +4872,6 @@ CONFIG_NATSEMI=m
CONFIG_NCN26000_PHY=m
CONFIG_NCSI_OEM_CMD_GET_MAC=y
CONFIG_NCSI_OEM_CMD_KEEP_PHY=y
-CONFIG_ND_BLK=m
CONFIG_ND_BTT=m
# CONFIG_NDC_DIS_DYNAMIC_CACHING is not set
CONFIG_NE2K_PCI=m
@@ -5146,7 +5176,7 @@ CONFIG_NET_VENDOR_LITEX=y
CONFIG_NET_VENDOR_MARVELL=y
CONFIG_NET_VENDOR_MELLANOX=y
CONFIG_NET_VENDOR_MICREL=y
-# CONFIG_NET_VENDOR_MICROCHIP is not set
+CONFIG_NET_VENDOR_MICROCHIP=y
# CONFIG_NET_VENDOR_MICROSEMI is not set
CONFIG_NET_VENDOR_MICROSOFT=y
CONFIG_NET_VENDOR_MYRI=y
@@ -5162,7 +5192,7 @@ CONFIG_NET_VENDOR_QLOGIC=y
CONFIG_NET_VENDOR_QUALCOMM=y
CONFIG_NET_VENDOR_RDC=y
CONFIG_NET_VENDOR_REALTEK=y
-# CONFIG_NET_VENDOR_RENESAS is not set
+CONFIG_NET_VENDOR_RENESAS=y
CONFIG_NET_VENDOR_ROCKER=y
# CONFIG_NET_VENDOR_SAMSUNG is not set
# CONFIG_NET_VENDOR_SEEQ is not set
@@ -5271,6 +5301,7 @@ CONFIG_NF_REJECT_IPV6=m
CONFIG_NFSD_BLOCKLAYOUT=y
CONFIG_NFSD_FLEXFILELAYOUT=y
CONFIG_NFS_DISABLE_UDP_SUPPORT=y
+# CONFIG_NFSD_LEGACY_CLIENT_TRACKING is not set
CONFIG_NFSD=m
CONFIG_NFSD_PNFS=y
CONFIG_NFSD_SCSILAYOUT=y
@@ -5419,6 +5450,7 @@ CONFIG_NOUVEAU_PLATFORM_DRIVER=y
CONFIG_NOZOMI=m
CONFIG_NR_CPUS=4096
CONFIG_NS83820=m
+CONFIG_NSM=m
CONFIG_NTB_EPF=m
# CONFIG_NTB is not set
# CONFIG_NTFS3_64BIT_CLUSTER is not set
@@ -5532,7 +5564,6 @@ CONFIG_OPTEE=m
CONFIG_OPTEE_SHM_NUM_PRIV_PAGES=1
CONFIG_OPTPROBES=y
CONFIG_ORANGEFS_FS=m
-CONFIG_ORINOCO_USB=m
CONFIG_OSF_PARTITION=y
CONFIG_OSNOISE_TRACER=y
CONFIG_OVERFLOW_KUNIT_TEST=m
@@ -5543,10 +5574,6 @@ CONFIG_OVERLAY_FS=m
CONFIG_OVERLAY_FS_REDIRECT_ALWAYS_FOLLOW=y
# CONFIG_OVERLAY_FS_REDIRECT_DIR is not set
# CONFIG_OVERLAY_FS_XINO_AUTO is not set
-CONFIG_P54_COMMON=m
-CONFIG_P54_PCI=m
-# CONFIG_P54_SPI is not set
-CONFIG_P54_USB=m
CONFIG_PA12203001=m
CONFIG_PACKET_DIAG=y
CONFIG_PACKET=y
@@ -5824,24 +5851,15 @@ CONFIG_PHY_XILINX_ZYNQMP=m
CONFIG_PID_IN_CONTEXTIDR=y
CONFIG_PID_NS=y
CONFIG_PINCONF=y
-CONFIG_PINCTRL_ALDERLAKE=m
CONFIG_PINCTRL_AMD=y
CONFIG_PINCTRL_AMLOGIC_C3=y
CONFIG_PINCTRL_AMLOGIC_T7=y
CONFIG_PINCTRL_APPLE_GPIO=m
CONFIG_PINCTRL_AS3722=y
CONFIG_PINCTRL_AXP209=m
-# CONFIG_PINCTRL_BAYTRAIL is not set
-# CONFIG_PINCTRL_BROXTON is not set
-# CONFIG_PINCTRL_CANNONLAKE is not set
-CONFIG_PINCTRL_CEDARFORK=m
-# CONFIG_PINCTRL_CHERRYVIEW is not set
CONFIG_PINCTRL_CS42L43=m
CONFIG_PINCTRL_CY8C95X0=m
-CONFIG_PINCTRL_ELKHARTLAKE=m
-CONFIG_PINCTRL_EMMITSBURG=m
# CONFIG_PINCTRL_EQUILIBRIUM is not set
-# CONFIG_PINCTRL_GEMINILAKE is not set
CONFIG_PINCTRL_IMX8DXL=y
CONFIG_PINCTRL_IMX8MM=y
CONFIG_PINCTRL_IMX8MN=y
@@ -5860,10 +5878,7 @@ CONFIG_PINCTRL_IMX93=y
# CONFIG_PINCTRL_IPQ8064 is not set
# CONFIG_PINCTRL_IPQ8074 is not set
# CONFIG_PINCTRL_IPQ9574 is not set
-# CONFIG_PINCTRL_JASPERLAKE is not set
-CONFIG_PINCTRL_LAKEFIELD=m
CONFIG_PINCTRL_LPASS_LPI=m
-# CONFIG_PINCTRL_LYNXPOINT is not set
CONFIG_PINCTRL_MAX77620=y
# CONFIG_PINCTRL_MCP23S08 is not set
# CONFIG_PINCTRL_MDM9607 is not set
@@ -5899,6 +5914,7 @@ CONFIG_PINCTRL_QDF2XXX=m
# CONFIG_PINCTRL_QDU1000 is not set
CONFIG_PINCTRL_RK805=m
CONFIG_PINCTRL_ROCKCHIP=y
+CONFIG_PINCTRL_S32G2=y
CONFIG_PINCTRL_SA8775P=m
CONFIG_PINCTRL_SC7180=y
CONFIG_PINCTRL_SC7280_LPASS_LPI=m
@@ -5913,6 +5929,7 @@ CONFIG_PINCTRL_SDM845=m
# CONFIG_PINCTRL_SDX65 is not set
# CONFIG_PINCTRL_SDX75 is not set
CONFIG_PINCTRL_SINGLE=y
+# CONFIG_PINCTRL_SM4450 is not set
# CONFIG_PINCTRL_SM6115 is not set
# CONFIG_PINCTRL_SM6115_LPASS_LPI is not set
# CONFIG_PINCTRL_SM6125 is not set
@@ -5928,6 +5945,8 @@ CONFIG_PINCTRL_SM8450_LPASS_LPI=m
CONFIG_PINCTRL_SM8450=m
# CONFIG_PINCTRL_SM8550 is not set
# CONFIG_PINCTRL_SM8550_LPASS_LPI is not set
+# CONFIG_PINCTRL_SM8650 is not set
+# CONFIG_PINCTRL_SM8650_LPASS_LPI is not set
# CONFIG_PINCTRL_STMFX is not set
CONFIG_PINCTRL_SUN20I_D1=y
# CONFIG_PINCTRL_SUN4I_A10 is not set
@@ -5955,6 +5974,8 @@ CONFIG_PINCTRL_SUN8I_H3=y
# CONFIG_PINCTRL_SUN9I_A80_R is not set
# CONFIG_PINCTRL_SX150X is not set
CONFIG_PINCTRL_TEGRA234=y
+CONFIG_PINCTRL_TPS6594=m
+CONFIG_PINCTRL_X1E80100=m
CONFIG_PINCTRL=y
CONFIG_PINCTRL_ZYNQMP=y
# CONFIG_PING is not set
@@ -6195,6 +6216,7 @@ CONFIG_QCOM_MPM=m
CONFIG_QCOM_OCMEM=m
CONFIG_QCOM_PDC=y
CONFIG_QCOM_PMIC_GLINK=m
+CONFIG_QCOM_PMIC_PDCHARGER_ULOG=m
CONFIG_QCOM_Q6V5_ADSP=m
CONFIG_QCOM_Q6V5_MSS=m
CONFIG_QCOM_Q6V5_PAS=m
@@ -6235,6 +6257,7 @@ CONFIG_QCOM_WDT=m
CONFIG_QCS_GCC_404=m
# CONFIG_QCS_Q6SSTOP_404 is not set
# CONFIG_QCS_TURING_404 is not set
+# CONFIG_QDU_ECPRICC_1000 is not set
# CONFIG_QDU_GCC_1000 is not set
CONFIG_QEDE=m
CONFIG_QEDF=m
@@ -6308,6 +6331,7 @@ CONFIG_RAPIDIO_TSI721=m
CONFIG_RASPBERRYPI_FIRMWARE=y
CONFIG_RASPBERRYPI_POWER=y
CONFIG_RATIONAL_KUNIT_TEST=m
+CONFIG_RAVB=m
# CONFIG_RAVE_SP_CORE is not set
# CONFIG_RBTREE_TEST is not set
# CONFIG_RCAR_DMAC is not set
@@ -6347,7 +6371,7 @@ CONFIG_RDS_TCP=m
CONFIG_RD_XZ=y
CONFIG_RD_ZSTD=y
# CONFIG_READABLE_ASM is not set
-# CONFIG_READ_ONLY_THP_FOR_FS is not set
+CONFIG_READ_ONLY_THP_FOR_FS=y
CONFIG_REALTEK_AUTOPM=y
CONFIG_REALTEK_PHY=m
# CONFIG_REED_SOLOMON_TEST is not set
@@ -6413,6 +6437,7 @@ CONFIG_REGULATOR_MP886X=m
# CONFIG_REGULATOR_MT6311 is not set
# CONFIG_REGULATOR_MT6315 is not set
CONFIG_REGULATOR_MT6370=m
+# CONFIG_REGULATOR_NETLINK_EVENTS is not set
CONFIG_REGULATOR_PCA9450=m
CONFIG_REGULATOR_PF8X00=m
CONFIG_REGULATOR_PFUZE100=m
@@ -6480,11 +6505,13 @@ CONFIG_RELOCATABLE=y
# CONFIG_REMOTEPROC_CDEV is not set
CONFIG_REMOTEPROC=y
CONFIG_REMOTE_TARGET=m
-# CONFIG_RENESAS_OSTM is not set
+# CONFIG_RENESAS_ETHER_SWITCH is not set
+CONFIG_RENESAS_GEN4_PTP=m
+CONFIG_RENESAS_OSTM=y
# CONFIG_RENESAS_PHY is not set
# CONFIG_RENESAS_RPCIF is not set
# CONFIG_RENESAS_RZAWDT is not set
-# CONFIG_RENESAS_RZG2LWDT is not set
+CONFIG_RENESAS_RZG2LWDT=m
# CONFIG_RENESAS_RZN1WDT is not set
# CONFIG_RENESAS_USB_DMAC is not set
# CONFIG_RENESAS_WDT is not set
@@ -6661,6 +6688,7 @@ CONFIG_RTC_DRV_M41T94=m
CONFIG_RTC_DRV_M48T35=m
CONFIG_RTC_DRV_M48T59=m
# CONFIG_RTC_DRV_M48T86 is not set
+CONFIG_RTC_DRV_MAX31335=m
CONFIG_RTC_DRV_MAX6900=m
CONFIG_RTC_DRV_MAX6902=m
CONFIG_RTC_DRV_MAX6916=m
@@ -6709,6 +6737,7 @@ CONFIG_RTC_DRV_SUN6I=y
CONFIG_RTC_DRV_TEGRA=m
# CONFIG_RTC_DRV_TEST is not set
CONFIG_RTC_DRV_TI_K3=m
+CONFIG_RTC_DRV_TPS6594=m
CONFIG_RTC_DRV_V3020=m
CONFIG_RTC_DRV_X1205=m
CONFIG_RTC_DRV_XGENE=m
@@ -6778,9 +6807,9 @@ CONFIG_RV_REACT_PRINTK=y
CONFIG_RV=y
CONFIG_RXKAD=y
# CONFIG_RXPERF is not set
-# CONFIG_RZ_DMAC is not set
-# CONFIG_RZG2L_ADC is not set
-# CONFIG_RZG2L_THERMAL is not set
+CONFIG_RZ_DMAC=m
+CONFIG_RZG2L_ADC=m
+CONFIG_RZG2L_THERMAL=m
# CONFIG_RZ_MTU3 is not set
CONFIG_S2IO=m
# CONFIG_S390_KPROBES_SANITY_TEST is not set
@@ -6822,6 +6851,7 @@ CONFIG_SC92031=m
CONFIG_SCA3300=m
CONFIG_SC_CAMCC_7180=m
CONFIG_SC_CAMCC_7280=m
+CONFIG_SC_CAMCC_8280XP=m
CONFIG_SCD30_CORE=m
CONFIG_SCD30_I2C=m
CONFIG_SCD30_SERIAL=m
@@ -7072,6 +7102,7 @@ CONFIG_SENSORS_FSP_3Y=m
CONFIG_SENSORS_FTSTEUTATES=m
CONFIG_SENSORS_G760A=m
CONFIG_SENSORS_G762=m
+CONFIG_SENSORS_GIGABYTE_WATERFORCE=m
CONFIG_SENSORS_GL518SM=m
CONFIG_SENSORS_GL520SM=m
CONFIG_SENSORS_GPIO_FAN=m
@@ -7138,6 +7169,7 @@ CONFIG_SENSORS_LTC4222=m
CONFIG_SENSORS_LTC4245=m
CONFIG_SENSORS_LTC4260=m
CONFIG_SENSORS_LTC4261=m
+# CONFIG_SENSORS_LTC4286 is not set
CONFIG_SENSORS_MAX1111=m
# CONFIG_SENSORS_MAX127 is not set
# CONFIG_SENSORS_MAX15301 is not set
@@ -7165,10 +7197,12 @@ CONFIG_SENSORS_MAX8688=m
CONFIG_SENSORS_MC34VR500=m
CONFIG_SENSORS_MCP3021=m
CONFIG_SENSORS_MLXREG_FAN=m
+# CONFIG_SENSORS_MP2856 is not set
CONFIG_SENSORS_MP2888=m
CONFIG_SENSORS_MP2975=m
CONFIG_SENSORS_MP2975_REGULATOR=y
CONFIG_SENSORS_MP5023=m
+# CONFIG_SENSORS_MP5990 is not set
CONFIG_SENSORS_MPQ7932=m
CONFIG_SENSORS_MPQ7932_REGULATOR=y
CONFIG_SENSORS_MR75203=m
@@ -7264,7 +7298,7 @@ CONFIG_SERIAL_8250_CS=m
CONFIG_SERIAL_8250_DFL=m
CONFIG_SERIAL_8250_DMA=y
CONFIG_SERIAL_8250_DW=y
-# CONFIG_SERIAL_8250_EM is not set
+CONFIG_SERIAL_8250_EM=y
CONFIG_SERIAL_8250_EXAR=m
CONFIG_SERIAL_8250_EXTENDED=y
# CONFIG_SERIAL_8250_FINTEK is not set
@@ -7367,6 +7401,7 @@ CONFIG_SFP=m
CONFIG_SGETMASK_SYSCALL=y
CONFIG_SGI_PARTITION=y
# CONFIG_SHADOW_CALL_STACK is not set
+# CONFIG_SH_ETH is not set
CONFIG_SHMEM=y
# CONFIG_SHRINKER_DEBUG is not set
CONFIG_SHUFFLE_PAGE_ALLOCATOR=y
@@ -7386,10 +7421,8 @@ CONFIG_SKGE_GENESIS=y
CONFIG_SKGE=m
# CONFIG_SKY2_DEBUG is not set
CONFIG_SKY2=m
-# CONFIG_SLAB_DEPRECATED is not set
CONFIG_SLAB_FREELIST_HARDENED=y
CONFIG_SLAB_FREELIST_RANDOM=y
-# CONFIG_SLAB is not set
# CONFIG_SLAB_MERGE_DEFAULT is not set
CONFIG_SLIMBUS=m
CONFIG_SLIM_QCOM_CTRL=m
@@ -7417,6 +7450,7 @@ CONFIG_SMC=m
# CONFIG_SM_DISPCC_8250 is not set
CONFIG_SM_DISPCC_8450=m
# CONFIG_SM_DISPCC_8550 is not set
+CONFIG_SM_DISPCC_8650=m
# CONFIG_SM_FTL is not set
# CONFIG_SM_GCC_4450 is not set
# CONFIG_SM_GCC_6115 is not set
@@ -7429,6 +7463,7 @@ CONFIG_SM_GCC_8250=m
CONFIG_SM_GCC_8350=m
CONFIG_SM_GCC_8450=m
CONFIG_SM_GCC_8550=m
+CONFIG_SM_GCC_8650=m
# CONFIG_SM_GPUCC_6115 is not set
# CONFIG_SM_GPUCC_6125 is not set
# CONFIG_SM_GPUCC_6350 is not set
@@ -7438,6 +7473,7 @@ CONFIG_SM_GCC_8550=m
# CONFIG_SM_GPUCC_8350 is not set
# CONFIG_SM_GPUCC_8450 is not set
# CONFIG_SM_GPUCC_8550 is not set
+CONFIG_SM_GPUCC_8650=m
CONFIG_SMPRO_ERRMON=m
CONFIG_SMPRO_MISC=m
CONFIG_SMP=y
@@ -7451,6 +7487,7 @@ CONFIG_SMS_SIANO_MDTV=m
CONFIG_SMS_SIANO_RC=y
CONFIG_SMS_USB_DRV=m
# CONFIG_SM_TCSRCC_8550 is not set
+CONFIG_SM_TCSRCC_8650=m
# CONFIG_SM_VIDEOCC_8150 is not set
# CONFIG_SM_VIDEOCC_8250 is not set
CONFIG_SM_VIDEOCC_8350=m
@@ -7920,7 +7957,7 @@ CONFIG_SND_SOC_RT715_SDW=m
CONFIG_SND_SOC_RT722_SDCA_SDW=m
# CONFIG_SND_SOC_RT9120 is not set
CONFIG_SND_SOC_RTQ9128=m
-# CONFIG_SND_SOC_RZ is not set
+CONFIG_SND_SOC_RZ=m
# CONFIG_SND_SOC_SAMSUNG_ARIES_WM8994 is not set
# CONFIG_SND_SOC_SAMSUNG is not set
CONFIG_SND_SOC_SAMSUNG_MIDAS_WM1811=m
@@ -8088,6 +8125,7 @@ CONFIG_SND_SOC_WM8962=m
# CONFIG_SND_SOC_WSA881X is not set
CONFIG_SND_SOC_WSA883X=m
CONFIG_SND_SOC_WSA884X=m
+CONFIG_SND_SOC_X1E80100=m
CONFIG_SND_SOC_XILINX_AUDIO_FORMATTER=m
CONFIG_SND_SOC_XILINX_I2S=m
CONFIG_SND_SOC_XILINX_SPDIF=m
@@ -8226,7 +8264,7 @@ CONFIG_SPI_QCOM_QSPI=m
CONFIG_SPI_QUP=m
CONFIG_SPI_ROCKCHIP=m
CONFIG_SPI_ROCKCHIP_SFC=m
-# CONFIG_SPI_RSPI is not set
+CONFIG_SPI_RSPI=m
# CONFIG_SPI_RZV2M_CSI is not set
# CONFIG_SPI_SC18IS602 is not set
# CONFIG_SPI_SH_HSPI is not set
@@ -8287,6 +8325,7 @@ CONFIG_SSB_PCIHOST=y
CONFIG_SSB_SDIOHOST=y
# CONFIG_SSFDC is not set
CONFIG_SSIF_IPMI_BMC=m
+CONFIG_STACKDEPOT_MAX_FRAMES=64
CONFIG_STACK_HASH_ORDER=20
CONFIG_STACKINIT_KUNIT_TEST=m
CONFIG_STACKPROTECTOR_STRONG=y
@@ -8486,6 +8525,7 @@ CONFIG_TCP_MD5SIG=y
CONFIG_TCS3472=m
CONFIG_TDX_GUEST_DRIVER=m
CONFIG_TEE=m
+CONFIG_TEE_STMM_EFI=m
CONFIG_TEGRA124_EMC=m
CONFIG_TEGRA186_GPC_DMA=m
CONFIG_TEGRA186_TIMER=y
@@ -8560,6 +8600,7 @@ CONFIG_TEST_SORT=m
# CONFIG_TEST_UUID is not set
CONFIG_TEST_VMALLOC=m
# CONFIG_TEST_XARRAY is not set
+# CONFIG_THERMAL_DEBUGFS is not set
# CONFIG_THERMAL_DEFAULT_GOV_BANG_BANG is not set
# CONFIG_THERMAL_DEFAULT_GOV_FAIR_SHARE is not set
CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y
@@ -8600,6 +8641,7 @@ CONFIG_TI_ADS7924=m
CONFIG_TI_ADS8344=m
# CONFIG_TI_ADS8688 is not set
CONFIG_TI_AM335X_ADC=m
+CONFIG_TI_AM65_CPSW_QOS=y
CONFIG_TI_AM65_CPSW_TAS=y
# CONFIG_TICK_CPU_ACCOUNTING is not set
# CONFIG_TI_CPSW_PHY_SEL is not set
@@ -8790,6 +8832,7 @@ CONFIG_TRACE_EVAL_MAP_FILE=y
CONFIG_TRACER_SNAPSHOT=y
# CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS is not set
CONFIG_TRANSPARENT_HUGEPAGE_MADVISE=y
+# CONFIG_TRANSPARENT_HUGEPAGE_NEVER is not set
CONFIG_TRANSPARENT_HUGEPAGE=y
# CONFIG_TRIM_UNUSED_KSYMS is not set
CONFIG_TRUSTED_FOUNDATIONS=y
@@ -8829,6 +8872,7 @@ CONFIG_TYPEC_MUX_GPIO_SBU=m
CONFIG_TYPEC_MUX_NB7VPQ904M=m
CONFIG_TYPEC_MUX_PI3USB30532=m
CONFIG_TYPEC_MUX_PTN36502=m
+# CONFIG_TYPEC_MUX_WCD939X_USBSS is not set
CONFIG_TYPEC_NVIDIA_ALTMODE=m
CONFIG_TYPEC_QCOM_PMIC=m
# CONFIG_TYPEC_RT1711H is not set
@@ -9154,7 +9198,6 @@ CONFIG_USB_NET_NET1080=m
CONFIG_USB_NET_PLUSB=m
CONFIG_USB_NET_QMI_WWAN=m
CONFIG_USB_NET_RNDIS_HOST=m
-CONFIG_USB_NET_RNDIS_WLAN=m
CONFIG_USB_NET_SMSC75XX=m
CONFIG_USB_NET_SMSC95XX=m
CONFIG_USB_NET_SR9700=m
@@ -9195,6 +9238,7 @@ CONFIG_USB_ROLE_SWITCH=y
CONFIG_USB_RTL8150=m
CONFIG_USB_RTL8152=m
CONFIG_USB_RTL8153_ECM=m
+CONFIG_USB_RZV2M_USB3DRD=m
CONFIG_USB_S2255=m
CONFIG_USB_SERIAL_AIRCABLE=m
CONFIG_USB_SERIAL_ARK3116=m
@@ -9303,11 +9347,11 @@ CONFIG_USB_XHCI_PCI_RENESAS=y
CONFIG_USB_XHCI_PCI=y
CONFIG_USB_XHCI_PLATFORM=m
CONFIG_USB_XHCI_RCAR=m
+CONFIG_USB_XHCI_RZV2M=y
CONFIG_USB_XHCI_TEGRA=m
CONFIG_USB_XUSBATM=m
CONFIG_USB=y
CONFIG_USB_YUREX=m
-# CONFIG_USB_ZD1201 is not set
# CONFIG_USB_ZERO is not set
CONFIG_USB_ZR364XX=m
# CONFIG_USELIB is not set
@@ -9324,6 +9368,7 @@ CONFIG_V4L_MEM2MEM_DRIVERS=y
CONFIG_V4L_PLATFORM_DRIVERS=y
CONFIG_V4L_TEST_DRIVERS=y
CONFIG_VALIDATE_FS_PARSER=y
+CONFIG_VCAP=y
CONFIG_VCHIQ_CDEV=y
CONFIG_VCNL3020=m
CONFIG_VCNL4000=m
@@ -9337,6 +9382,7 @@ CONFIG_VDPA_USER=m
CONFIG_VDSO=y
CONFIG_VEML6030=m
CONFIG_VEML6070=m
+# CONFIG_VEML6075 is not set
CONFIG_VETH=m
CONFIG_VEXPRESS_CONFIG=y
# CONFIG_VF610_ADC is not set
@@ -9345,6 +9391,7 @@ CONFIG_VFAT_FS=m
CONFIG_VFIO_AMBA=m
CONFIG_VFIO_CDX=m
CONFIG_VFIO_CONTAINER=y
+# CONFIG_VFIO_DEBUGFS is not set
# CONFIG_VFIO_DEVICE_CDEV is not set
CONFIG_VFIO_FSL_MC=m
CONFIG_VFIO_GROUP=y
@@ -9387,6 +9434,7 @@ CONFIG_VIDEO_ADV7842=m
CONFIG_VIDEO_AK7375=m
CONFIG_VIDEO_AK881X=m
CONFIG_VIDEO_ALLEGRO_DVT=m
+# CONFIG_VIDEO_ALVIUM_CSI2 is not set
CONFIG_VIDEO_AMPHION_VPU=m
CONFIG_VIDEO_AR0521=m
CONFIG_VIDEO_AU0828=m
@@ -9439,6 +9487,8 @@ CONFIG_VIDEO_EM28XX_V4L2=m
CONFIG_VIDEO_ET8EK8=m
CONFIG_VIDEO_FB_IVTV=m
# CONFIG_VIDEO_FIXED_MINOR_RANGES is not set
+CONFIG_VIDEO_GC0308=m
+CONFIG_VIDEO_GC2145=m
CONFIG_VIDEO_GO7007_LOADER=m
CONFIG_VIDEO_GO7007=m
CONFIG_VIDEO_GO7007_USB=m
@@ -9524,6 +9574,7 @@ CONFIG_VIDEO_OV5670=m
CONFIG_VIDEO_OV5675=m
CONFIG_VIDEO_OV5693=m
CONFIG_VIDEO_OV5695=m
+CONFIG_VIDEO_OV64A40=m
CONFIG_VIDEO_OV6650=m
CONFIG_VIDEO_OV7251=m
CONFIG_VIDEO_OV7640=m
@@ -9548,14 +9599,16 @@ CONFIG_VIDEO_QCOM_VENUS=m
# CONFIG_VIDEO_RCAR_VIN is not set
CONFIG_VIDEO_RDACM20=m
# CONFIG_VIDEO_RDACM21 is not set
-# CONFIG_VIDEO_RENESAS_FCP is not set
+CONFIG_VIDEO_RENESAS_FCP=m
+CONFIG_VIDEO_RENESAS_FDP1=m
# CONFIG_VIDEO_RENESAS_JPU is not set
+CONFIG_VIDEO_RENESAS_VSP1=m
CONFIG_VIDEO_RJ54N1=m
CONFIG_VIDEO_ROCKCHIP_ISP1=m
CONFIG_VIDEO_ROCKCHIP_RGA=m
CONFIG_VIDEO_ROCKCHIP_VDEC=m
-# CONFIG_VIDEO_RZG2L_CRU is not set
-# CONFIG_VIDEO_RZG2L_CSI2 is not set
+CONFIG_VIDEO_RZG2L_CRU=m
+CONFIG_VIDEO_RZG2L_CSI2=m
CONFIG_VIDEO_S5C73M3=m
CONFIG_VIDEO_S5K4ECGX=m
CONFIG_VIDEO_S5K5BAF=m
@@ -9602,6 +9655,7 @@ CONFIG_VIDEO_TEA6420=m
CONFIG_VIDEO_TEGRA=m
# CONFIG_VIDEO_TEGRA_TPG is not set
CONFIG_VIDEO_TEGRA_VDE=m
+# CONFIG_VIDEO_THP7312 is not set
CONFIG_VIDEO_THS7303=m
CONFIG_VIDEO_THS8200=m
CONFIG_VIDEO_TI_CAL=m
@@ -9620,6 +9674,7 @@ CONFIG_VIDEO_TW2804=m
# CONFIG_VIDEO_TW5864 is not set
CONFIG_VIDEO_TW686X=m
# CONFIG_VIDEO_TW68 is not set
+# CONFIG_VIDEO_TW9900 is not set
CONFIG_VIDEO_TW9903=m
CONFIG_VIDEO_TW9906=m
CONFIG_VIDEO_TW9910=m
@@ -9638,6 +9693,7 @@ CONFIG_VIDEO_VIVID=m
CONFIG_VIDEO_VIVID_MAX_DEVS=64
CONFIG_VIDEO_VP27SMPX=m
CONFIG_VIDEO_VPX3220=m
+CONFIG_VIDEO_WAVE_VPU=m
CONFIG_VIDEO_WM8739=m
CONFIG_VIDEO_WM8775=m
# CONFIG_VIDEO_XILINX is not set
@@ -9662,6 +9718,7 @@ CONFIG_VIRTIO_PCI_LEGACY=y
CONFIG_VIRTIO_PCI=y
# CONFIG_VIRTIO_PMEM is not set
CONFIG_VIRTIO_VDPA=m
+CONFIG_VIRTIO_VFIO_PCI=m
CONFIG_VIRTIO_VSOCKETS=m
CONFIG_VIRTIO=y
CONFIG_VIRTUALIZATION=y
@@ -9703,6 +9760,7 @@ CONFIG_VXLAN=m
# CONFIG_VZ89X is not set
CONFIG_W1_CON=y
CONFIG_W1=m
+# CONFIG_W1_MASTER_AMD_AXI is not set
# CONFIG_W1_MASTER_DS1WM is not set
CONFIG_W1_MASTER_DS2482=m
CONFIG_W1_MASTER_DS2490=m
@@ -9780,7 +9838,7 @@ CONFIG_WLAN_VENDOR_ATH=y
CONFIG_WLAN_VENDOR_BROADCOM=y
# CONFIG_WLAN_VENDOR_CISCO is not set
CONFIG_WLAN_VENDOR_INTEL=y
-CONFIG_WLAN_VENDOR_INTERSIL=y
+# CONFIG_WLAN_VENDOR_INTERSIL is not set
CONFIG_WLAN_VENDOR_MARVELL=y
CONFIG_WLAN_VENDOR_MEDIATEK=y
CONFIG_WLAN_VENDOR_MICROCHIP=y
@@ -9854,7 +9912,7 @@ CONFIG_XILINX_PR_DECOUPLER=m
CONFIG_XILINX_SDFEC=m
CONFIG_XILINX_VCU=m
# CONFIG_XILINX_WATCHDOG is not set
-# CONFIG_XILINX_WINDOW_WATCHDOG is not set
+CONFIG_XILINX_WINDOW_WATCHDOG=m
CONFIG_XILINX_XADC=m
CONFIG_XILINX_XDMA=m
CONFIG_XILINX_ZYNQMP_DMA=m
@@ -9905,6 +9963,7 @@ CONFIG_ZRAM_DEF_COMP_LZORLE=y
CONFIG_ZRAM=m
# CONFIG_ZRAM_MEMORY_TRACKING is not set
CONFIG_ZRAM_MULTI_COMP=y
+# CONFIG_ZRAM_TRACK_ENTRY_ACTIME is not set
# CONFIG_ZRAM_WRITEBACK is not set
CONFIG_ZSMALLOC_CHAIN_SIZE=8
# CONFIG_ZSMALLOC_STAT is not set
@@ -9917,6 +9976,7 @@ CONFIG_ZSWAP_COMPRESSOR_DEFAULT_LZO=y
# CONFIG_ZSWAP_COMPRESSOR_DEFAULT_ZSTD is not set
# CONFIG_ZSWAP_DEFAULT_ON is not set
CONFIG_ZSWAP_EXCLUSIVE_LOADS_DEFAULT_ON=y
+CONFIG_ZSWAP_SHRINKER_DEFAULT_ON=y
CONFIG_ZSWAP=y
# CONFIG_ZSWAP_ZPOOL_DEFAULT_Z3FOLD is not set
CONFIG_ZSWAP_ZPOOL_DEFAULT_ZBUD=y
@@ -9931,7 +9991,7 @@ CONFIG_ZENIFY=y
CONFIG_NTSYNC=y
CONFIG_USER_NS_UNPRIVILEGED=y
CONFIG_TCP_CONG_BBR2=m
-# CONFIG_SCHED_PDS is not set
+CONFIG_SCHED_BORE=y
CONFIG_HID_IPTS=m
CONFIG_HID_ITHC=m
CONFIG_SURFACE_BOOK1_DGPU_SWITCH=m
@@ -9940,11 +10000,8 @@ CONFIG_LEDS_TPS68470=m
CONFIG_SENSORS_SURFACE_FAN=m
CONFIG_SENSORS_SURFACE_TEMP=m
CONFIG_DRM_AMD_COLOR_STEAMDECK=y
-CONFIG_BMI323_I2C=m
-CONFIG_BMI323_SPI=m
CONFIG_DRM_APPLETBDRM=m
CONFIG_HID_APPLETB_BL=m
CONFIG_HID_APPLETB_KBD=m
CONFIG_HID_APPLE_MAGIC_BACKLIGHT=m
CONFIG_APPLE_BCE=m
-CONFIG_SCHED_BORE=y
diff --git a/SOURCES/kernel-aarch64-64k-debug-rhel.config b/SOURCES/kernel-aarch64-64k-debug-rhel.config
index de76f24..f27e970 100644
--- a/SOURCES/kernel-aarch64-64k-debug-rhel.config
+++ b/SOURCES/kernel-aarch64-64k-debug-rhel.config
@@ -91,6 +91,7 @@ CONFIG_ACPI=y
# CONFIG_AD5791 is not set
# CONFIG_AD5933 is not set
# CONFIG_AD7091R5 is not set
+# CONFIG_AD7091R8 is not set
# CONFIG_AD7124 is not set
# CONFIG_AD7150 is not set
# CONFIG_AD7192 is not set
@@ -217,6 +218,7 @@ CONFIG_AMD_PHY=m
CONFIG_AMD_PMC=m
# CONFIG_AMD_PTDMA is not set
# CONFIG_AMDTEE is not set
+# CONFIG_AMD_WBRF is not set
# CONFIG_AMD_XGBE_DCB is not set
CONFIG_AMD_XGBE=m
# CONFIG_AMIGA_PARTITION is not set
@@ -225,6 +227,7 @@ CONFIG_AMPERE_ERRATUM_AC03_CPU_38=y
# CONFIG_AMT is not set
# CONFIG_ANDROID_BINDER_IPC is not set
# CONFIG_ANON_VMA_NAME is not set
+# CONFIG_AOSONG_AGS02MA is not set
# CONFIG_APDS9300 is not set
# CONFIG_APDS9802ALS is not set
# CONFIG_APDS9960 is not set
@@ -506,6 +509,7 @@ CONFIG_BACKLIGHT_LED=m
# CONFIG_BACKLIGHT_LM3639 is not set
CONFIG_BACKLIGHT_LP855X=m
# CONFIG_BACKLIGHT_LV5207LP is not set
+# CONFIG_BACKLIGHT_MP3309C is not set
CONFIG_BACKLIGHT_PWM=m
# CONFIG_BACKLIGHT_QCOM_WLED is not set
# CONFIG_BACKLIGHT_SAHARA is not set
@@ -605,6 +609,7 @@ CONFIG_BLK_DEV_SR=m
# CONFIG_BLK_DEV_THROTTLING_LOW is not set
CONFIG_BLK_DEV_THROTTLING=y
# CONFIG_BLK_DEV_UBLK is not set
+CONFIG_BLK_DEV_WRITE_MOUNTED=y
CONFIG_BLK_DEV=y
CONFIG_BLK_DEV_ZONED=y
# CONFIG_BLK_INLINE_ENCRYPTION is not set
@@ -624,6 +629,8 @@ CONFIG_BLOCK=y
# CONFIG_BMI088_ACCEL is not set
# CONFIG_BMI160_I2C is not set
# CONFIG_BMI160_SPI is not set
+CONFIG_BMI323_I2C=m
+CONFIG_BMI323_SPI=m
# CONFIG_BMP280 is not set
# CONFIG_BNA is not set
CONFIG_BNX2=m
@@ -639,7 +646,6 @@ CONFIG_BONDING=m
# CONFIG_BOOT_CONFIG_FORCE is not set
CONFIG_BOOT_CONFIG=y
# CONFIG_BOOTPARAM_HARDLOCKUP_PANIC is not set
-# CONFIG_BOOTPARAM_HOTPLUG_CPU0 is not set
# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
@@ -1106,7 +1112,6 @@ CONFIG_CRYPTO_CAST5=m
CONFIG_CRYPTO_CAST6=m
CONFIG_CRYPTO_CBC=y
CONFIG_CRYPTO_CCM=y
-CONFIG_CRYPTO_CFB=y
CONFIG_CRYPTO_CHACHA20=m
CONFIG_CRYPTO_CHACHA20_NEON=y
CONFIG_CRYPTO_CHACHA20POLY1305=m
@@ -1158,6 +1163,7 @@ CONFIG_CRYPTO_DEV_HISI_SEC=m
CONFIG_CRYPTO_DEV_NITROX_CNN55XX=m
CONFIG_CRYPTO_DEV_OCTEONTX2_CPT=m
# CONFIG_CRYPTO_DEV_OCTEONTX_CPT is not set
+# CONFIG_CRYPTO_DEV_QAT_420XX is not set
# CONFIG_CRYPTO_DEV_QAT_4XXX is not set
# CONFIG_CRYPTO_DEV_QAT_C3XXX is not set
# CONFIG_CRYPTO_DEV_QAT_C3XXXVF is not set
@@ -1219,7 +1225,6 @@ CONFIG_CRYPTO_MD5=y
CONFIG_CRYPTO_MICHAEL_MIC=m
CONFIG_CRYPTO_NHPOLY1305_NEON=m
CONFIG_CRYPTO_NULL=y
-CONFIG_CRYPTO_OFB=y
CONFIG_CRYPTO_PCBC=m
CONFIG_CRYPTO_PCRYPT=m
CONFIG_CRYPTO_POLY1305=m
@@ -1377,7 +1382,7 @@ CONFIG_DEBUG_STACK_USAGE=y
# CONFIG_DEBUG_VM_MAPLE_TREE is not set
# CONFIG_DEBUG_VM_PGFLAGS is not set
CONFIG_DEBUG_VM_PGTABLE=y
-# CONFIG_DEBUG_VM_RB is not set # revisit this if performance isn't horrible
+# CONFIG_DEBUG_VM_RB is not set
# CONFIG_DEBUG_VM_SHOOT_LAZIES is not set
# CONFIG_DEBUG_VM_VMACACHE is not set
# CONFIG_DEBUG_WQ_FORCE_RR_CPU is not set
@@ -1490,6 +1495,7 @@ CONFIG_DP83867_PHY=m
# CONFIG_DP83869_PHY is not set
CONFIG_DP83TC811_PHY=m
# CONFIG_DP83TD510_PHY is not set
+# CONFIG_DP83TG720_PHY is not set
CONFIG_DPAA2_CONSOLE=m
# CONFIG_DPM_WATCHDOG is not set
# CONFIG_DPOT_DAC is not set
@@ -1548,6 +1554,7 @@ CONFIG_DRM_I915_COMPRESS_ERROR=y
# CONFIG_DRM_I915_DEBUG_MMIO is not set
# CONFIG_DRM_I915_DEBUG_RUNTIME_PM is not set
# CONFIG_DRM_I915_DEBUG_VBLANK_EVADE is not set
+# CONFIG_DRM_I915_DEBUG_WAKEREF is not set
CONFIG_DRM_I915_FENCE_TIMEOUT=10000
CONFIG_DRM_I915_HEARTBEAT_INTERVAL=2500
# CONFIG_DRM_I915_LOW_LEVEL_TRACEPOINTS is not set
@@ -1592,6 +1599,7 @@ CONFIG_DRM_MGAG200=m
# CONFIG_DRM_MSM is not set
# CONFIG_DRM_MXSFB is not set
CONFIG_DRM_NOUVEAU_BACKLIGHT=y
+# CONFIG_DRM_NOUVEAU_GSP_DEFAULT is not set
CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_NWL_MIPI_DSI is not set
# CONFIG_DRM_NXP_PTN3460 is not set
@@ -1612,6 +1620,7 @@ CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_PANEL_HIMAX_HX8394 is not set
# CONFIG_DRM_PANEL_ILITEK_IL9322 is not set
# CONFIG_DRM_PANEL_ILITEK_ILI9341 is not set
+# CONFIG_DRM_PANEL_ILITEK_ILI9805 is not set
# CONFIG_DRM_PANEL_ILITEK_ILI9881C is not set
# CONFIG_DRM_PANEL_ILITEK_ILI9882T is not set
# CONFIG_DRM_PANEL_INNOLUX_EJ030NA is not set
@@ -1674,6 +1683,7 @@ CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_PANEL_SONY_TD4353_JDI is not set
# CONFIG_DRM_PANEL_SONY_TULIP_TRULY_NT35521 is not set
# CONFIG_DRM_PANEL_STARTEK_KD070FHFID015 is not set
+# CONFIG_DRM_PANEL_SYNAPTICS_R63353 is not set
# CONFIG_DRM_PANEL_TDO_TL070WSH30 is not set
# CONFIG_DRM_PANEL_TPO_TD028TTEC1 is not set
# CONFIG_DRM_PANEL_TPO_TD043MTEA1 is not set
@@ -1688,6 +1698,7 @@ CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_PARADE_PS8622 is not set
# CONFIG_DRM_PARADE_PS8640 is not set
# CONFIG_DRM_PL111 is not set
+# CONFIG_DRM_POWERVR is not set
CONFIG_DRM_QXL=m
CONFIG_DRM_RADEON=m
CONFIG_DRM_RADEON_USERPTR=y
@@ -1728,6 +1739,7 @@ CONFIG_DRM_VKMS=m
CONFIG_DRM_VMWGFX_FBCON=y
CONFIG_DRM_VMWGFX=m
# CONFIG_DRM_VMWGFX_MKSSTATS is not set
+# CONFIG_DRM_XE is not set
# CONFIG_DRM_XEN_FRONTEND is not set
CONFIG_DRM=y
# CONFIG_DS1682 is not set
@@ -1826,6 +1838,7 @@ CONFIG_DVB_USB_VP702X=m
CONFIG_DVB_USB_VP7045=m
# CONFIG_DVB_USB_ZD1301 is not set
# CONFIG_DW_AXI_DMAC is not set
+# CONFIG_DWC_PCIE_PMU is not set
CONFIG_DW_DMAC=m
CONFIG_DW_DMAC_PCI=m
# CONFIG_DW_EDMA is not set
@@ -1907,6 +1920,7 @@ CONFIG_EPOLL=y
# CONFIG_EQUALIZER is not set
# CONFIG_EROFS_FS_DEBUG is not set
CONFIG_EROFS_FS=m
+# CONFIG_EROFS_FS_ONDEMAND is not set
CONFIG_EROFS_FS_POSIX_ACL=y
CONFIG_EROFS_FS_SECURITY=y
CONFIG_EROFS_FS_XATTR=y
@@ -1975,7 +1989,6 @@ CONFIG_FAULT_INJECTION=y
# CONFIG_FB_3DFX is not set
# CONFIG_FB_ARC is not set
# CONFIG_FB_ARK is not set
-# CONFIG_FB_ARMCLCD is not set
# CONFIG_FB_ASILIANT is not set
# CONFIG_FB_ATY128 is not set
# CONFIG_FB_ATY is not set
@@ -1995,7 +2008,6 @@ CONFIG_FB_EFI=y
# CONFIG_FB_IMSTT is not set
# CONFIG_FB_IMX is not set
# CONFIG_FB_KYRO is not set
-# CONFIG_FB_LE80578 is not set
# CONFIG_FB_MATROX_G is not set
# CONFIG_FB_MATROX_I2C is not set
# CONFIG_FB_MATROX is not set
@@ -2064,11 +2076,12 @@ CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
CONFIG_FRAMEBUFFER_CONSOLE=y
CONFIG_FRAME_POINTER=y
+# CONFIG_FRAMER is not set
CONFIG_FRAME_WARN=2048
CONFIG_FRONTSWAP=y
# CONFIG_FSCACHE_DEBUG is not set
-CONFIG_FSCACHE=m
CONFIG_FSCACHE_STATS=y
+CONFIG_FSCACHE=y
CONFIG_FS_DAX=y
# CONFIG_FS_ENCRYPTION is not set
# CONFIG_FSI is not set
@@ -2280,6 +2293,7 @@ CONFIG_HASHTABLE_KUNIT_TEST=m
# CONFIG_HD44780 is not set
# CONFIG_HDC100X is not set
# CONFIG_HDC2010 is not set
+# CONFIG_HDC3020 is not set
CONFIG_HDLC_CISCO=m
CONFIG_HDLC_FR=m
CONFIG_HDLC=m
@@ -2354,6 +2368,7 @@ CONFIG_HID_LOGITECH=m
CONFIG_HID_MAGICMOUSE=y
# CONFIG_HID_MALTRON is not set
# CONFIG_HID_MAYFLASH is not set
+# CONFIG_HID_MCP2200 is not set
# CONFIG_HID_MCP2221 is not set
# CONFIG_HID_MEGAWORLD_FF is not set
CONFIG_HID_MICROSOFT=m
@@ -2464,6 +2479,7 @@ CONFIG_HP_WATCHDOG=m
CONFIG_HSA_AMD_P2P=y
CONFIG_HSA_AMD_SVM=y
CONFIG_HSA_AMD=y
+# CONFIG_HSC030PA is not set
# CONFIG_HSI is not set
CONFIG_HSR=m
# CONFIG_HT16K33 is not set
@@ -2619,6 +2635,7 @@ CONFIG_IAVF=m
# CONFIG_IB700_WDT is not set
# CONFIG_IBM_ASM is not set
CONFIG_IBMASR=m
+CONFIG_ICE_HWMON=y
CONFIG_ICE_HWTS=y
CONFIG_ICE=m
CONFIG_ICE_SWITCHDEV=y
@@ -2742,6 +2759,7 @@ CONFIG_INFINIBAND_BNXT_RE=m
CONFIG_INFINIBAND_CXGB4=m
CONFIG_INFINIBAND_EFA=m
# CONFIG_INFINIBAND_ERDMA is not set
+# CONFIG_INFINIBAND_HFI1 is not set
# CONFIG_INFINIBAND_HNS is not set
CONFIG_INFINIBAND_IPOIB_CM=y
# CONFIG_INFINIBAND_IPOIB_DEBUG_DATA is not set
@@ -2756,14 +2774,14 @@ CONFIG_INFINIBAND=m
CONFIG_INFINIBAND_ON_DEMAND_PAGING=y
CONFIG_INFINIBAND_QEDR=m
# CONFIG_INFINIBAND_QIB is not set
-CONFIG_INFINIBAND_RDMAVT=m
+# CONFIG_INFINIBAND_RDMAVT is not set
# CONFIG_INFINIBAND_RTRS_CLIENT is not set
# CONFIG_INFINIBAND_RTRS_SERVER is not set
CONFIG_INFINIBAND_SRP=m
CONFIG_INFINIBAND_SRPT=m
CONFIG_INFINIBAND_USER_ACCESS=m
CONFIG_INFINIBAND_USER_MAD=m
-CONFIG_INFINIBAND_USNIC=m
+# CONFIG_INFINIBAND_USNIC is not set
# CONFIG_INFINIBAND_VMWARE_PVRDMA is not set
# CONFIG_INFTL is not set
# CONFIG_INIT_ON_ALLOC_DEFAULT_ON is not set
@@ -2852,10 +2870,11 @@ CONFIG_INTEL_IOMMU_PERF_EVENTS=y
# CONFIG_INTEL_ISH_FIRMWARE_DOWNLOADER is not set
# CONFIG_INTEL_ISHTP_ECLITE is not set
# CONFIG_INTEL_LDMA is not set
-# CONFIG_INTEL_MEI_GSC_PROXY is not set
+CONFIG_INTEL_MEI_GSC_PROXY=m
# CONFIG_INTEL_MEI_HDCP is not set
# CONFIG_INTEL_MEI_PXP is not set
# CONFIG_INTEL_MEI_TXE is not set
+# CONFIG_INTEL_MEI_VSC_HW is not set
# CONFIG_INTEL_PMC_CORE is not set
# CONFIG_INTEL_PMT_CLASS is not set
# CONFIG_INTEL_PMT_CRASHLOG is not set
@@ -3096,6 +3115,7 @@ CONFIG_ISCSI_TCP=m
# CONFIG_ISL29020 is not set
# CONFIG_ISL29125 is not set
# CONFIG_ISL29501 is not set
+# CONFIG_ISL76682 is not set
CONFIG_ISO9660_FS=m
CONFIG_IS_SIGNED_TYPE_KUNIT_TEST=m
# CONFIG_IT8712F_WDT is not set
@@ -3138,6 +3158,7 @@ CONFIG_KALLSYMS_BASE_RELATIVE=y
# CONFIG_KALLSYMS_SELFTEST is not set
CONFIG_KALLSYMS=y
# CONFIG_KARMA_PARTITION is not set
+# CONFIG_KASAN_EXTRA_INFO is not set
CONFIG_KASAN_GENERIC=y
# CONFIG_KASAN_HW_TAGS is not set
CONFIG_KASAN_INLINE=y
@@ -3234,9 +3255,11 @@ CONFIG_KUNIT_TEST=m
CONFIG_KVM_AMD_SEV=y
# CONFIG_KVM_BOOK3S_HV_P8_TIMING is not set
# CONFIG_KVM_BOOK3S_HV_P9_TIMING is not set
+CONFIG_KVM_HYPERV=y
CONFIG_KVM_MAX_NR_VCPUS=4096
CONFIG_KVM_PROVE_MMU=y
CONFIG_KVM_SMM=y
+CONFIG_KVM_SW_PROTECTED_VM=y
# CONFIG_KVM_WERROR is not set
# CONFIG_KVM_XEN is not set
CONFIG_KVM=y
@@ -3414,6 +3437,7 @@ CONFIG_LSM_MMAP_MIN_ADDR=65535
# CONFIG_LTO_CLANG_FULL is not set
# CONFIG_LTO_CLANG_THIN is not set
CONFIG_LTO_NONE=y
+# CONFIG_LTR390 is not set
# CONFIG_LTR501 is not set
# CONFIG_LTRF216A is not set
# CONFIG_LV0104CS is not set
@@ -3453,7 +3477,7 @@ CONFIG_MAILBOX=y
CONFIG_MANTIS_CORE=m
# CONFIG_MARCH_Z16 is not set
CONFIG_MARVELL_10G_PHY=m
-# CONFIG_MARVELL_88Q2XXX_PHY is not set
+CONFIG_MARVELL_88Q2XXX_PHY=m
# CONFIG_MARVELL_88X2222_PHY is not set
CONFIG_MARVELL_CN10K_DDR_PMU=m
CONFIG_MARVELL_CN10K_TAD_PMU=m
@@ -3473,6 +3497,7 @@ CONFIG_MARVELL_PHY=m
# CONFIG_MAX31827 is not set
# CONFIG_MAX31856 is not set
# CONFIG_MAX31865 is not set
+# CONFIG_MAX34408 is not set
# CONFIG_MAX44000 is not set
# CONFIG_MAX44009 is not set
# CONFIG_MAX517 is not set
@@ -3501,7 +3526,9 @@ CONFIG_MAX_SKB_FRAGS=17
# CONFIG_MCP4531 is not set
# CONFIG_MCP4725 is not set
# CONFIG_MCP4728 is not set
+# CONFIG_MCP4821 is not set
# CONFIG_MCP4922 is not set
+# CONFIG_MCP9600 is not set
# CONFIG_MCTP is not set
CONFIG_MD_AUTODETECT=y
CONFIG_MD_BITMAP_FILE=y
@@ -3731,8 +3758,8 @@ CONFIG_MITIGATE_SPECTRE_BRANCH_HISTORY=y
CONFIG_MLX4_CORE=m
CONFIG_MLX4_DEBUG=y
CONFIG_MLX4_EN_DCB=y
-CONFIG_MLX4_EN=m
-CONFIG_MLX4_INFINIBAND=m
+# CONFIG_MLX4_EN is not set
+# CONFIG_MLX4_INFINIBAND is not set
CONFIG_MLX5_ACCEL=y
CONFIG_MLX5_CLS_ACT=y
CONFIG_MLX5_CORE_EN_DCB=y
@@ -3763,6 +3790,7 @@ CONFIG_MLX5_VDPA_NET=m
CONFIG_MLX5_VFIO_PCI=m
# CONFIG_MLX90614 is not set
# CONFIG_MLX90632 is not set
+# CONFIG_MLX90635 is not set
CONFIG_MLXBF_BOOTCTL=m
CONFIG_MLXBF_GIGE=m
# CONFIG_MLXBF_PMC is not set
@@ -3931,7 +3959,7 @@ CONFIG_MT76x2U=m
CONFIG_MT7921E=m
# CONFIG_MT7921S is not set
# CONFIG_MT7921U is not set
-# CONFIG_MT7925E is not set
+CONFIG_MT7925E=m
# CONFIG_MT7925U is not set
# CONFIG_MT7996E is not set
# CONFIG_MTD_ABSENT is not set
@@ -3994,6 +4022,7 @@ CONFIG_MTD_SPI_NOR_SWP_DISABLE_ON_VOLATILE=y
CONFIG_MTD_UBI_BEB_LIMIT=20
# CONFIG_MTD_UBI_BLOCK is not set
# CONFIG_MTD_UBI_FASTMAP is not set
+# CONFIG_MTD_UBI_FAULT_INJECTION is not set
# CONFIG_MTD_UBI_GLUEBI is not set
CONFIG_MTD_UBI=m
CONFIG_MTD_UBI_WL_THRESHOLD=4096
@@ -4019,7 +4048,6 @@ CONFIG_NAMESPACES=y
CONFIG_NATIONAL_PHY=m
# CONFIG_NAU7802 is not set
# CONFIG_NCN26000_PHY is not set
-CONFIG_ND_BLK=m
CONFIG_ND_BTT=m
# CONFIG_NDC_DIS_DYNAMIC_CACHING is not set
CONFIG_ND_CLAIM=y
@@ -4073,7 +4101,6 @@ CONFIG_NET_DROP_MONITOR=y
# CONFIG_NET_EMATCH is not set
# CONFIG_NET_EMATCH_META is not set
# CONFIG_NET_EMATCH_NBYTE is not set
-# CONFIG_NET_EMATCH_STACK is not set
# CONFIG_NET_EMATCH_TEXT is not set
# CONFIG_NET_EMATCH_U32 is not set
CONFIG_NET_FAILOVER=m
@@ -4355,6 +4382,7 @@ CONFIG_NFS_COMMON=y
CONFIG_NFS_DEBUG=y
# CONFIG_NFSD_FLEXFILELAYOUT is not set
CONFIG_NFS_DISABLE_UDP_SUPPORT=y
+# CONFIG_NFSD_LEGACY_CLIENT_TRACKING is not set
CONFIG_NFSD=m
CONFIG_NFSD_PNFS=y
CONFIG_NFSD_SCSILAYOUT=y
@@ -4504,6 +4532,7 @@ CONFIG_NOUVEAU_DEBUG_PUSH=y
# CONFIG_NOUVEAU_PLATFORM_DRIVER is not set
# CONFIG_NOZOMI is not set
CONFIG_NR_CPUS=4096
+# CONFIG_NSM is not set
# CONFIG_NTB_AMD is not set
# CONFIG_NTB_EPF is not set
# CONFIG_NTB_IDT is not set
@@ -4820,16 +4849,10 @@ CONFIG_PHY_XGENE=y
# CONFIG_PI433 is not set
CONFIG_PID_IN_CONTEXTIDR=y
CONFIG_PID_NS=y
-CONFIG_PINCTRL_ALDERLAKE=m
# CONFIG_PINCTRL_AMD is not set
-# CONFIG_PINCTRL_BROXTON is not set
-# CONFIG_PINCTRL_CHERRYVIEW is not set
# CONFIG_PINCTRL_CS42L43 is not set
# CONFIG_PINCTRL_CY8C95X0 is not set
-CONFIG_PINCTRL_ELKHARTLAKE=m
-CONFIG_PINCTRL_EMMITSBURG=m
# CONFIG_PINCTRL_EQUILIBRIUM is not set
-CONFIG_PINCTRL_ICELAKE=m
CONFIG_PINCTRL_IMX8MM=y
CONFIG_PINCTRL_IMX8MN=y
CONFIG_PINCTRL_IMX8MP=y
@@ -4842,10 +4865,7 @@ CONFIG_PINCTRL_IMX93=y
# CONFIG_PINCTRL_IPQ6018 is not set
# CONFIG_PINCTRL_IPQ8074 is not set
CONFIG_PINCTRL_IPROC_GPIO=y
-# CONFIG_PINCTRL_JASPERLAKE is not set
-CONFIG_PINCTRL_LAKEFIELD=m
# CONFIG_PINCTRL_LPASS_LPI is not set
-# CONFIG_PINCTRL_LYNXPOINT is not set
CONFIG_PINCTRL_MAX77620=y
# CONFIG_PINCTRL_MCP23S08 is not set
# CONFIG_PINCTRL_MDM9615 is not set
@@ -5167,8 +5187,8 @@ CONFIG_RD_GZIP=y
CONFIG_RD_LZ4=y
CONFIG_RD_LZMA=y
CONFIG_RD_LZO=y
-CONFIG_RDMA_RXE=m
-CONFIG_RDMA_SIW=m
+# CONFIG_RDMA_RXE is not set
+# CONFIG_RDMA_SIW is not set
# CONFIG_RDS is not set
CONFIG_RD_XZ=y
CONFIG_RD_ZSTD=y
@@ -5222,6 +5242,7 @@ CONFIG_REGULATOR_MAX77686=m
# CONFIG_REGULATOR_MP886X is not set
# CONFIG_REGULATOR_MPQ7920 is not set
# CONFIG_REGULATOR_MT6311 is not set
+# CONFIG_REGULATOR_NETLINK_EVENTS is not set
# CONFIG_REGULATOR_PCA9450 is not set
# CONFIG_REGULATOR_PF8X00 is not set
CONFIG_REGULATOR_PFUZE100=m
@@ -5396,6 +5417,7 @@ CONFIG_RTC_DRV_M41T94=m
CONFIG_RTC_DRV_M48T35=m
CONFIG_RTC_DRV_M48T59=m
# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_MAX31335 is not set
CONFIG_RTC_DRV_MAX6900=m
CONFIG_RTC_DRV_MAX6902=m
# CONFIG_RTC_DRV_MAX6916 is not set
@@ -5489,7 +5511,7 @@ CONFIG_RTW88=m
# CONFIG_RTW89_8851BE is not set
CONFIG_RTW89_8852AE=m
CONFIG_RTW89_8852BE=m
-# CONFIG_RTW89_8852CE is not set
+CONFIG_RTW89_8852CE=m
CONFIG_RTW89_DEBUGFS=y
CONFIG_RTW89_DEBUGMSG=y
CONFIG_RTW89=m
@@ -5503,6 +5525,7 @@ CONFIG_RXKAD=y
CONFIG_RXPERF=m
# CONFIG_S390_KPROBES_SANITY_TEST is not set
# CONFIG_S390_MODULES_SANITY_TEST is not set
+# CONFIG_SAMPLE_CGROUP is not set
# CONFIG_SAMPLE_FTRACE_OPS is not set
# CONFIG_SAMPLE_KMEMLEAK is not set
# CONFIG_SAMPLES is not set
@@ -5646,7 +5669,7 @@ CONFIG_SECONDARY_TRUSTED_KEYRING=y
CONFIG_SECRETMEM=y
CONFIG_SECTION_MISMATCH_WARN_ONLY=y
# CONFIG_SECURITY_APPARMOR is not set
-# CONFIG_SECURITY_DMESG_RESTRICT is not set
+CONFIG_SECURITY_DMESG_RESTRICT=y
CONFIG_SECURITYFS=y
CONFIG_SECURITY_INFINIBAND=y
# CONFIG_SECURITY_LANDLOCK is not set
@@ -5741,6 +5764,7 @@ CONFIG_SENSORS_FSCHMD=m
# CONFIG_SENSORS_FTSTEUTATES is not set
# CONFIG_SENSORS_G760A is not set
CONFIG_SENSORS_G762=m
+# CONFIG_SENSORS_GIGABYTE_WATERFORCE is not set
# CONFIG_SENSORS_GL518SM is not set
# CONFIG_SENSORS_GL520SM is not set
# CONFIG_SENSORS_GPIO_FAN is not set
@@ -5806,6 +5830,7 @@ CONFIG_SENSORS_LTC4222=m
# CONFIG_SENSORS_LTC4245 is not set
CONFIG_SENSORS_LTC4260=m
# CONFIG_SENSORS_LTC4261 is not set
+# CONFIG_SENSORS_LTC4286 is not set
CONFIG_SENSORS_MAX1111=m
# CONFIG_SENSORS_MAX127 is not set
# CONFIG_SENSORS_MAX15301 is not set
@@ -5833,9 +5858,11 @@ CONFIG_SENSORS_MAX31790=m
# CONFIG_SENSORS_MC34VR500 is not set
# CONFIG_SENSORS_MCP3021 is not set
# CONFIG_SENSORS_MLXREG_FAN is not set
+# CONFIG_SENSORS_MP2856 is not set
# CONFIG_SENSORS_MP2888 is not set
# CONFIG_SENSORS_MP2975 is not set
# CONFIG_SENSORS_MP5023 is not set
+# CONFIG_SENSORS_MP5990 is not set
# CONFIG_SENSORS_MPQ7932 is not set
# CONFIG_SENSORS_MR75203 is not set
# CONFIG_SENSORS_NCT6683 is not set
@@ -6022,10 +6049,8 @@ CONFIG_SIGNED_PE_FILE_VERIFICATION=y
CONFIG_SIPHASH_KUNIT_TEST=m
# CONFIG_SKGE is not set
# CONFIG_SKY2 is not set
-# CONFIG_SLAB_DEPRECATED is not set
CONFIG_SLAB_FREELIST_HARDENED=y
CONFIG_SLAB_FREELIST_RANDOM=y
-# CONFIG_SLAB is not set
# CONFIG_SLAB_MERGE_DEFAULT is not set
# CONFIG_SLIC_DS26522 is not set
# CONFIG_SLIMBUS is not set
@@ -6794,6 +6819,7 @@ CONFIG_SRAM=y
# CONFIG_SSB is not set
# CONFIG_SSFDC is not set
# CONFIG_SSIF_IPMI_BMC is not set
+CONFIG_STACKDEPOT_MAX_FRAMES=64
CONFIG_STACK_HASH_ORDER=20
CONFIG_STACKINIT_KUNIT_TEST=m
CONFIG_STACKPROTECTOR_STRONG=y
@@ -6922,7 +6948,7 @@ CONFIG_TCP_CONG_DCTCP=m
# CONFIG_TCP_CONG_HSTCP is not set
CONFIG_TCP_CONG_HTCP=m
# CONFIG_TCP_CONG_HYBLA is not set
-# CONFIG_TCP_CONG_ILLINOIS is not set
+CONFIG_TCP_CONG_ILLINOIS=m
# CONFIG_TCP_CONG_LP is not set
CONFIG_TCP_CONG_NV=m
# CONFIG_TCP_CONG_SCALABLE is not set
@@ -7001,6 +7027,7 @@ CONFIG_TEST_STRING_HELPERS=m
# CONFIG_TEST_UUID is not set
CONFIG_TEST_VMALLOC=m
# CONFIG_TEST_XARRAY is not set
+# CONFIG_THERMAL_DEBUGFS is not set
# CONFIG_THERMAL_DEFAULT_GOV_FAIR_SHARE is not set
CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y
# CONFIG_THERMAL_DEFAULT_GOV_USER_SPACE is not set
@@ -7184,6 +7211,7 @@ CONFIG_TOUCHSCREEN_WACOM_I2C=m
CONFIG_TRACER_SNAPSHOT=y
CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS=y
# CONFIG_TRANSPARENT_HUGEPAGE_MADVISE is not set
+# CONFIG_TRANSPARENT_HUGEPAGE_NEVER is not set
CONFIG_TRANSPARENT_HUGEPAGE=y
CONFIG_TREE_RCU=y
# CONFIG_TRIM_UNUSED_KSYMS is not set
@@ -7214,6 +7242,7 @@ CONFIG_TYPEC_MUX_FSA4480=m
# CONFIG_TYPEC_MUX_NB7VPQ904M is not set
CONFIG_TYPEC_MUX_PI3USB30532=m
# CONFIG_TYPEC_MUX_PTN36502 is not set
+# CONFIG_TYPEC_MUX_WCD939X_USBSS is not set
# CONFIG_TYPEC_NVIDIA_ALTMODE is not set
# CONFIG_TYPEC_QCOM_PMIC is not set
# CONFIG_TYPEC_RT1711H is not set
@@ -7585,6 +7614,7 @@ CONFIG_VDPA_SIM_NET=m
# CONFIG_VDPA_USER is not set
# CONFIG_VEML6030 is not set
# CONFIG_VEML6070 is not set
+# CONFIG_VEML6075 is not set
CONFIG_VETH=m
CONFIG_VEXPRESS_CONFIG=y
# CONFIG_VF610_ADC is not set
@@ -7592,6 +7622,7 @@ CONFIG_VEXPRESS_CONFIG=y
CONFIG_VFAT_FS=m
# CONFIG_VFIO_AMBA is not set
CONFIG_VFIO_CONTAINER=y
+# CONFIG_VFIO_DEBUGFS is not set
CONFIG_VFIO_DEVICE_CDEV=y
CONFIG_VFIO_FSL_MC=m
CONFIG_VFIO_GROUP=y
@@ -7628,6 +7659,7 @@ CONFIG_VHOST_VSOCK=m
# CONFIG_VIDEO_ADV_DEBUG is not set
# CONFIG_VIDEO_AK7375 is not set
# CONFIG_VIDEO_AK881X is not set
+# CONFIG_VIDEO_ALVIUM_CSI2 is not set
# CONFIG_VIDEO_AR0521 is not set
CONFIG_VIDEO_AU0828=m
# CONFIG_VIDEO_AU0828_RC is not set
@@ -7676,6 +7708,8 @@ CONFIG_VIDEO_EM28XX_RC=m
# CONFIG_VIDEO_FB_IVTV_FORCE_PAT is not set
CONFIG_VIDEO_FB_IVTV=m
# CONFIG_VIDEO_FIXED_MINOR_RANGES is not set
+# CONFIG_VIDEO_GC0308 is not set
+# CONFIG_VIDEO_GC2145 is not set
# CONFIG_VIDEO_GO7007 is not set
# CONFIG_VIDEO_GS1662 is not set
CONFIG_VIDEO_HDPVR=m
@@ -7745,6 +7779,7 @@ CONFIG_VIDEO_IVTV=m
# CONFIG_VIDEO_OV5675 is not set
# CONFIG_VIDEO_OV5693 is not set
# CONFIG_VIDEO_OV5695 is not set
+# CONFIG_VIDEO_OV64A40 is not set
# CONFIG_VIDEO_OV6650 is not set
# CONFIG_VIDEO_OV7251 is not set
# CONFIG_VIDEO_OV7640 is not set
@@ -7797,6 +7832,7 @@ CONFIG_VIDEO_SAA7164=m
# CONFIG_VIDEO_TDA9840 is not set
# CONFIG_VIDEO_TEA6415C is not set
# CONFIG_VIDEO_TEA6420 is not set
+# CONFIG_VIDEO_THP7312 is not set
# CONFIG_VIDEO_THS7303 is not set
# CONFIG_VIDEO_THS8200 is not set
# CONFIG_VIDEO_TLV320AIC23B is not set
@@ -7812,6 +7848,7 @@ CONFIG_VIDEO_TUNER=m
# CONFIG_VIDEO_TW5864 is not set
# CONFIG_VIDEO_TW686X is not set
# CONFIG_VIDEO_TW68 is not set
+# CONFIG_VIDEO_TW9900 is not set
# CONFIG_VIDEO_TW9903 is not set
# CONFIG_VIDEO_TW9906 is not set
# CONFIG_VIDEO_TW9910 is not set
@@ -7847,6 +7884,7 @@ CONFIG_VIRTIO_PCI_LEGACY=y
CONFIG_VIRTIO_PCI=y
# CONFIG_VIRTIO_PMEM is not set
CONFIG_VIRTIO_VDPA=m
+# CONFIG_VIRTIO_VFIO_PCI is not set
CONFIG_VIRTIO_VSOCKETS=m
CONFIG_VIRTIO=y
CONFIG_VIRTUALIZATION=y
@@ -7970,7 +8008,7 @@ CONFIG_XFS_POSIX_ACL=y
CONFIG_XFS_QUOTA=y
# CONFIG_XFS_RT is not set
# CONFIG_XFS_SUPPORT_ASCII_CI is not set
-CONFIG_XFS_SUPPORT_V4=y
+# CONFIG_XFS_SUPPORT_V4 is not set
CONFIG_XFS_WARN=y
# CONFIG_XGENE_DMA is not set
CONFIG_XGENE_PMU=y
@@ -8029,6 +8067,7 @@ CONFIG_ZRAM_DEF_COMP_LZORLE=y
CONFIG_ZRAM=m
CONFIG_ZRAM_MEMORY_TRACKING=y
# CONFIG_ZRAM_MULTI_COMP is not set
+CONFIG_ZRAM_TRACK_ENTRY_ACTIME=y
CONFIG_ZRAM_WRITEBACK=y
CONFIG_ZSMALLOC_CHAIN_SIZE=8
CONFIG_ZSMALLOC_STAT=y
@@ -8041,6 +8080,7 @@ CONFIG_ZSWAP_COMPRESSOR_DEFAULT_LZO=y
# CONFIG_ZSWAP_COMPRESSOR_DEFAULT_ZSTD is not set
# CONFIG_ZSWAP_DEFAULT_ON is not set
# CONFIG_ZSWAP_EXCLUSIVE_LOADS_DEFAULT_ON is not set
+# CONFIG_ZSWAP_SHRINKER_DEFAULT_ON is not set
CONFIG_ZSWAP=y
# CONFIG_ZSWAP_ZPOOL_DEFAULT_Z3FOLD is not set
CONFIG_ZSWAP_ZPOOL_DEFAULT_ZBUD=y
@@ -8050,7 +8090,7 @@ CONFIG_ZENIFY=y
CONFIG_NTSYNC=y
CONFIG_USER_NS_UNPRIVILEGED=y
CONFIG_TCP_CONG_BBR2=m
-# CONFIG_SCHED_PDS is not set
+CONFIG_SCHED_BORE=y
CONFIG_HID_IPTS=m
CONFIG_HID_ITHC=m
CONFIG_SURFACE_BOOK1_DGPU_SWITCH=m
@@ -8059,11 +8099,8 @@ CONFIG_LEDS_TPS68470=m
CONFIG_SENSORS_SURFACE_FAN=m
CONFIG_SENSORS_SURFACE_TEMP=m
CONFIG_DRM_AMD_COLOR_STEAMDECK=y
-CONFIG_BMI323_I2C=m
-CONFIG_BMI323_SPI=m
CONFIG_DRM_APPLETBDRM=m
CONFIG_HID_APPLETB_BL=m
CONFIG_HID_APPLETB_KBD=m
CONFIG_HID_APPLE_MAGIC_BACKLIGHT=m
CONFIG_APPLE_BCE=m
-CONFIG_SCHED_BORE=y
diff --git a/SOURCES/kernel-aarch64-64k-rhel.config b/SOURCES/kernel-aarch64-64k-rhel.config
index 52acb35..70e042f 100644
--- a/SOURCES/kernel-aarch64-64k-rhel.config
+++ b/SOURCES/kernel-aarch64-64k-rhel.config
@@ -91,6 +91,7 @@ CONFIG_ACPI=y
# CONFIG_AD5791 is not set
# CONFIG_AD5933 is not set
# CONFIG_AD7091R5 is not set
+# CONFIG_AD7091R8 is not set
# CONFIG_AD7124 is not set
# CONFIG_AD7150 is not set
# CONFIG_AD7192 is not set
@@ -217,6 +218,7 @@ CONFIG_AMD_PHY=m
CONFIG_AMD_PMC=m
# CONFIG_AMD_PTDMA is not set
# CONFIG_AMDTEE is not set
+# CONFIG_AMD_WBRF is not set
# CONFIG_AMD_XGBE_DCB is not set
CONFIG_AMD_XGBE=m
# CONFIG_AMIGA_PARTITION is not set
@@ -225,6 +227,7 @@ CONFIG_AMPERE_ERRATUM_AC03_CPU_38=y
# CONFIG_AMT is not set
# CONFIG_ANDROID_BINDER_IPC is not set
# CONFIG_ANON_VMA_NAME is not set
+# CONFIG_AOSONG_AGS02MA is not set
# CONFIG_APDS9300 is not set
# CONFIG_APDS9802ALS is not set
# CONFIG_APDS9960 is not set
@@ -506,6 +509,7 @@ CONFIG_BACKLIGHT_LED=m
# CONFIG_BACKLIGHT_LM3639 is not set
CONFIG_BACKLIGHT_LP855X=m
# CONFIG_BACKLIGHT_LV5207LP is not set
+# CONFIG_BACKLIGHT_MP3309C is not set
CONFIG_BACKLIGHT_PWM=m
# CONFIG_BACKLIGHT_QCOM_WLED is not set
# CONFIG_BACKLIGHT_SAHARA is not set
@@ -605,6 +609,7 @@ CONFIG_BLK_DEV_SR=m
# CONFIG_BLK_DEV_THROTTLING_LOW is not set
CONFIG_BLK_DEV_THROTTLING=y
# CONFIG_BLK_DEV_UBLK is not set
+CONFIG_BLK_DEV_WRITE_MOUNTED=y
CONFIG_BLK_DEV=y
CONFIG_BLK_DEV_ZONED=y
# CONFIG_BLK_INLINE_ENCRYPTION is not set
@@ -624,6 +629,8 @@ CONFIG_BLOCK=y
# CONFIG_BMI088_ACCEL is not set
# CONFIG_BMI160_I2C is not set
# CONFIG_BMI160_SPI is not set
+CONFIG_BMI323_I2C=m
+CONFIG_BMI323_SPI=m
# CONFIG_BMP280 is not set
# CONFIG_BNA is not set
CONFIG_BNX2=m
@@ -639,7 +646,6 @@ CONFIG_BONDING=m
# CONFIG_BOOT_CONFIG_FORCE is not set
CONFIG_BOOT_CONFIG=y
# CONFIG_BOOTPARAM_HARDLOCKUP_PANIC is not set
-# CONFIG_BOOTPARAM_HOTPLUG_CPU0 is not set
# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
@@ -1106,7 +1112,6 @@ CONFIG_CRYPTO_CAST5=m
CONFIG_CRYPTO_CAST6=m
CONFIG_CRYPTO_CBC=y
CONFIG_CRYPTO_CCM=y
-CONFIG_CRYPTO_CFB=y
CONFIG_CRYPTO_CHACHA20=m
CONFIG_CRYPTO_CHACHA20_NEON=y
CONFIG_CRYPTO_CHACHA20POLY1305=m
@@ -1158,6 +1163,7 @@ CONFIG_CRYPTO_DEV_HISI_SEC=m
CONFIG_CRYPTO_DEV_NITROX_CNN55XX=m
CONFIG_CRYPTO_DEV_OCTEONTX2_CPT=m
# CONFIG_CRYPTO_DEV_OCTEONTX_CPT is not set
+# CONFIG_CRYPTO_DEV_QAT_420XX is not set
# CONFIG_CRYPTO_DEV_QAT_4XXX is not set
# CONFIG_CRYPTO_DEV_QAT_C3XXX is not set
# CONFIG_CRYPTO_DEV_QAT_C3XXXVF is not set
@@ -1219,7 +1225,6 @@ CONFIG_CRYPTO_MD5=y
CONFIG_CRYPTO_MICHAEL_MIC=m
CONFIG_CRYPTO_NHPOLY1305_NEON=m
CONFIG_CRYPTO_NULL=y
-CONFIG_CRYPTO_OFB=y
CONFIG_CRYPTO_PCBC=m
CONFIG_CRYPTO_PCRYPT=m
CONFIG_CRYPTO_POLY1305=m
@@ -1369,7 +1374,7 @@ CONFIG_DEBUG_SHIRQ=y
# CONFIG_DEBUG_VM_MAPLE_TREE is not set
# CONFIG_DEBUG_VM_PGFLAGS is not set
# CONFIG_DEBUG_VM_PGTABLE is not set
-# CONFIG_DEBUG_VM_RB is not set # revisit this if performance isn't horrible
+# CONFIG_DEBUG_VM_RB is not set
# CONFIG_DEBUG_VM_SHOOT_LAZIES is not set
# CONFIG_DEBUG_VM_VMACACHE is not set
# CONFIG_DEBUG_WQ_FORCE_RR_CPU is not set
@@ -1482,6 +1487,7 @@ CONFIG_DP83867_PHY=m
# CONFIG_DP83869_PHY is not set
CONFIG_DP83TC811_PHY=m
# CONFIG_DP83TD510_PHY is not set
+# CONFIG_DP83TG720_PHY is not set
CONFIG_DPAA2_CONSOLE=m
# CONFIG_DPM_WATCHDOG is not set
# CONFIG_DPOT_DAC is not set
@@ -1540,6 +1546,7 @@ CONFIG_DRM_I915_COMPRESS_ERROR=y
# CONFIG_DRM_I915_DEBUG_MMIO is not set
# CONFIG_DRM_I915_DEBUG_RUNTIME_PM is not set
# CONFIG_DRM_I915_DEBUG_VBLANK_EVADE is not set
+# CONFIG_DRM_I915_DEBUG_WAKEREF is not set
CONFIG_DRM_I915_FENCE_TIMEOUT=10000
CONFIG_DRM_I915_HEARTBEAT_INTERVAL=2500
# CONFIG_DRM_I915_LOW_LEVEL_TRACEPOINTS is not set
@@ -1584,6 +1591,7 @@ CONFIG_DRM_MGAG200=m
# CONFIG_DRM_MSM is not set
# CONFIG_DRM_MXSFB is not set
CONFIG_DRM_NOUVEAU_BACKLIGHT=y
+# CONFIG_DRM_NOUVEAU_GSP_DEFAULT is not set
CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_NWL_MIPI_DSI is not set
# CONFIG_DRM_NXP_PTN3460 is not set
@@ -1604,6 +1612,7 @@ CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_PANEL_HIMAX_HX8394 is not set
# CONFIG_DRM_PANEL_ILITEK_IL9322 is not set
# CONFIG_DRM_PANEL_ILITEK_ILI9341 is not set
+# CONFIG_DRM_PANEL_ILITEK_ILI9805 is not set
# CONFIG_DRM_PANEL_ILITEK_ILI9881C is not set
# CONFIG_DRM_PANEL_ILITEK_ILI9882T is not set
# CONFIG_DRM_PANEL_INNOLUX_EJ030NA is not set
@@ -1666,6 +1675,7 @@ CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_PANEL_SONY_TD4353_JDI is not set
# CONFIG_DRM_PANEL_SONY_TULIP_TRULY_NT35521 is not set
# CONFIG_DRM_PANEL_STARTEK_KD070FHFID015 is not set
+# CONFIG_DRM_PANEL_SYNAPTICS_R63353 is not set
# CONFIG_DRM_PANEL_TDO_TL070WSH30 is not set
# CONFIG_DRM_PANEL_TPO_TD028TTEC1 is not set
# CONFIG_DRM_PANEL_TPO_TD043MTEA1 is not set
@@ -1680,6 +1690,7 @@ CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_PARADE_PS8622 is not set
# CONFIG_DRM_PARADE_PS8640 is not set
# CONFIG_DRM_PL111 is not set
+# CONFIG_DRM_POWERVR is not set
CONFIG_DRM_QXL=m
CONFIG_DRM_RADEON=m
CONFIG_DRM_RADEON_USERPTR=y
@@ -1720,6 +1731,7 @@ CONFIG_DRM_VKMS=m
CONFIG_DRM_VMWGFX_FBCON=y
CONFIG_DRM_VMWGFX=m
# CONFIG_DRM_VMWGFX_MKSSTATS is not set
+# CONFIG_DRM_XE is not set
# CONFIG_DRM_XEN_FRONTEND is not set
CONFIG_DRM=y
# CONFIG_DS1682 is not set
@@ -1818,6 +1830,7 @@ CONFIG_DVB_USB_VP702X=m
CONFIG_DVB_USB_VP7045=m
# CONFIG_DVB_USB_ZD1301 is not set
# CONFIG_DW_AXI_DMAC is not set
+# CONFIG_DWC_PCIE_PMU is not set
CONFIG_DW_DMAC=m
CONFIG_DW_DMAC_PCI=m
# CONFIG_DW_EDMA is not set
@@ -1899,6 +1912,7 @@ CONFIG_EPOLL=y
# CONFIG_EQUALIZER is not set
# CONFIG_EROFS_FS_DEBUG is not set
CONFIG_EROFS_FS=m
+# CONFIG_EROFS_FS_ONDEMAND is not set
CONFIG_EROFS_FS_POSIX_ACL=y
CONFIG_EROFS_FS_SECURITY=y
CONFIG_EROFS_FS_XATTR=y
@@ -1959,7 +1973,6 @@ CONFIG_FAT_KUNIT_TEST=m
# CONFIG_FB_3DFX is not set
# CONFIG_FB_ARC is not set
# CONFIG_FB_ARK is not set
-# CONFIG_FB_ARMCLCD is not set
# CONFIG_FB_ASILIANT is not set
# CONFIG_FB_ATY128 is not set
# CONFIG_FB_ATY is not set
@@ -1979,7 +1992,6 @@ CONFIG_FB_EFI=y
# CONFIG_FB_IMSTT is not set
# CONFIG_FB_IMX is not set
# CONFIG_FB_KYRO is not set
-# CONFIG_FB_LE80578 is not set
# CONFIG_FB_MATROX_G is not set
# CONFIG_FB_MATROX_I2C is not set
# CONFIG_FB_MATROX is not set
@@ -2048,11 +2060,12 @@ CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
CONFIG_FRAMEBUFFER_CONSOLE=y
CONFIG_FRAME_POINTER=y
+# CONFIG_FRAMER is not set
CONFIG_FRAME_WARN=2048
CONFIG_FRONTSWAP=y
# CONFIG_FSCACHE_DEBUG is not set
-CONFIG_FSCACHE=m
CONFIG_FSCACHE_STATS=y
+CONFIG_FSCACHE=y
CONFIG_FS_DAX=y
# CONFIG_FS_ENCRYPTION is not set
# CONFIG_FSI is not set
@@ -2264,6 +2277,7 @@ CONFIG_HASHTABLE_KUNIT_TEST=m
# CONFIG_HD44780 is not set
# CONFIG_HDC100X is not set
# CONFIG_HDC2010 is not set
+# CONFIG_HDC3020 is not set
CONFIG_HDLC_CISCO=m
CONFIG_HDLC_FR=m
CONFIG_HDLC=m
@@ -2338,6 +2352,7 @@ CONFIG_HID_LOGITECH=m
CONFIG_HID_MAGICMOUSE=y
# CONFIG_HID_MALTRON is not set
# CONFIG_HID_MAYFLASH is not set
+# CONFIG_HID_MCP2200 is not set
# CONFIG_HID_MCP2221 is not set
# CONFIG_HID_MEGAWORLD_FF is not set
CONFIG_HID_MICROSOFT=m
@@ -2448,6 +2463,7 @@ CONFIG_HP_WATCHDOG=m
CONFIG_HSA_AMD_P2P=y
CONFIG_HSA_AMD_SVM=y
CONFIG_HSA_AMD=y
+# CONFIG_HSC030PA is not set
# CONFIG_HSI is not set
CONFIG_HSR=m
# CONFIG_HT16K33 is not set
@@ -2603,6 +2619,7 @@ CONFIG_IAVF=m
# CONFIG_IB700_WDT is not set
# CONFIG_IBM_ASM is not set
CONFIG_IBMASR=m
+CONFIG_ICE_HWMON=y
CONFIG_ICE_HWTS=y
CONFIG_ICE=m
CONFIG_ICE_SWITCHDEV=y
@@ -2726,6 +2743,7 @@ CONFIG_INFINIBAND_BNXT_RE=m
CONFIG_INFINIBAND_CXGB4=m
CONFIG_INFINIBAND_EFA=m
# CONFIG_INFINIBAND_ERDMA is not set
+# CONFIG_INFINIBAND_HFI1 is not set
# CONFIG_INFINIBAND_HNS is not set
CONFIG_INFINIBAND_IPOIB_CM=y
# CONFIG_INFINIBAND_IPOIB_DEBUG_DATA is not set
@@ -2740,14 +2758,14 @@ CONFIG_INFINIBAND=m
CONFIG_INFINIBAND_ON_DEMAND_PAGING=y
CONFIG_INFINIBAND_QEDR=m
# CONFIG_INFINIBAND_QIB is not set
-CONFIG_INFINIBAND_RDMAVT=m
+# CONFIG_INFINIBAND_RDMAVT is not set
# CONFIG_INFINIBAND_RTRS_CLIENT is not set
# CONFIG_INFINIBAND_RTRS_SERVER is not set
CONFIG_INFINIBAND_SRP=m
CONFIG_INFINIBAND_SRPT=m
CONFIG_INFINIBAND_USER_ACCESS=m
CONFIG_INFINIBAND_USER_MAD=m
-CONFIG_INFINIBAND_USNIC=m
+# CONFIG_INFINIBAND_USNIC is not set
# CONFIG_INFINIBAND_VMWARE_PVRDMA is not set
# CONFIG_INFTL is not set
# CONFIG_INIT_ON_ALLOC_DEFAULT_ON is not set
@@ -2836,10 +2854,11 @@ CONFIG_INTEL_IOMMU_PERF_EVENTS=y
# CONFIG_INTEL_ISH_FIRMWARE_DOWNLOADER is not set
# CONFIG_INTEL_ISHTP_ECLITE is not set
# CONFIG_INTEL_LDMA is not set
-# CONFIG_INTEL_MEI_GSC_PROXY is not set
+CONFIG_INTEL_MEI_GSC_PROXY=m
# CONFIG_INTEL_MEI_HDCP is not set
# CONFIG_INTEL_MEI_PXP is not set
# CONFIG_INTEL_MEI_TXE is not set
+# CONFIG_INTEL_MEI_VSC_HW is not set
# CONFIG_INTEL_PMC_CORE is not set
# CONFIG_INTEL_PMT_CLASS is not set
# CONFIG_INTEL_PMT_CRASHLOG is not set
@@ -3080,6 +3099,7 @@ CONFIG_ISCSI_TCP=m
# CONFIG_ISL29020 is not set
# CONFIG_ISL29125 is not set
# CONFIG_ISL29501 is not set
+# CONFIG_ISL76682 is not set
CONFIG_ISO9660_FS=m
CONFIG_IS_SIGNED_TYPE_KUNIT_TEST=m
# CONFIG_IT8712F_WDT is not set
@@ -3122,6 +3142,7 @@ CONFIG_KALLSYMS_BASE_RELATIVE=y
# CONFIG_KALLSYMS_SELFTEST is not set
CONFIG_KALLSYMS=y
# CONFIG_KARMA_PARTITION is not set
+# CONFIG_KASAN_EXTRA_INFO is not set
# CONFIG_KASAN is not set
# CONFIG_KASAN_MODULE_TEST is not set
# CONFIG_KASAN_SW_TAGS is not set
@@ -3213,9 +3234,11 @@ CONFIG_KUNIT_TEST=m
CONFIG_KVM_AMD_SEV=y
# CONFIG_KVM_BOOK3S_HV_P8_TIMING is not set
# CONFIG_KVM_BOOK3S_HV_P9_TIMING is not set
+CONFIG_KVM_HYPERV=y
CONFIG_KVM_MAX_NR_VCPUS=4096
# CONFIG_KVM_PROVE_MMU is not set
CONFIG_KVM_SMM=y
+CONFIG_KVM_SW_PROTECTED_VM=y
# CONFIG_KVM_WERROR is not set
# CONFIG_KVM_XEN is not set
CONFIG_KVM=y
@@ -3393,6 +3416,7 @@ CONFIG_LSM_MMAP_MIN_ADDR=65535
# CONFIG_LTO_CLANG_FULL is not set
# CONFIG_LTO_CLANG_THIN is not set
CONFIG_LTO_NONE=y
+# CONFIG_LTR390 is not set
# CONFIG_LTR501 is not set
# CONFIG_LTRF216A is not set
# CONFIG_LV0104CS is not set
@@ -3432,7 +3456,7 @@ CONFIG_MAILBOX=y
CONFIG_MANTIS_CORE=m
# CONFIG_MARCH_Z16 is not set
CONFIG_MARVELL_10G_PHY=m
-# CONFIG_MARVELL_88Q2XXX_PHY is not set
+CONFIG_MARVELL_88Q2XXX_PHY=m
# CONFIG_MARVELL_88X2222_PHY is not set
CONFIG_MARVELL_CN10K_DDR_PMU=m
CONFIG_MARVELL_CN10K_TAD_PMU=m
@@ -3452,6 +3476,7 @@ CONFIG_MARVELL_PHY=m
# CONFIG_MAX31827 is not set
# CONFIG_MAX31856 is not set
# CONFIG_MAX31865 is not set
+# CONFIG_MAX34408 is not set
# CONFIG_MAX44000 is not set
# CONFIG_MAX44009 is not set
# CONFIG_MAX517 is not set
@@ -3480,7 +3505,9 @@ CONFIG_MAX_SKB_FRAGS=17
# CONFIG_MCP4531 is not set
# CONFIG_MCP4725 is not set
# CONFIG_MCP4728 is not set
+# CONFIG_MCP4821 is not set
# CONFIG_MCP4922 is not set
+# CONFIG_MCP9600 is not set
# CONFIG_MCTP is not set
CONFIG_MD_AUTODETECT=y
CONFIG_MD_BITMAP_FILE=y
@@ -3710,8 +3737,8 @@ CONFIG_MITIGATE_SPECTRE_BRANCH_HISTORY=y
CONFIG_MLX4_CORE=m
CONFIG_MLX4_DEBUG=y
CONFIG_MLX4_EN_DCB=y
-CONFIG_MLX4_EN=m
-CONFIG_MLX4_INFINIBAND=m
+# CONFIG_MLX4_EN is not set
+# CONFIG_MLX4_INFINIBAND is not set
CONFIG_MLX5_ACCEL=y
CONFIG_MLX5_CLS_ACT=y
CONFIG_MLX5_CORE_EN_DCB=y
@@ -3742,6 +3769,7 @@ CONFIG_MLX5_VDPA_NET=m
CONFIG_MLX5_VFIO_PCI=m
# CONFIG_MLX90614 is not set
# CONFIG_MLX90632 is not set
+# CONFIG_MLX90635 is not set
CONFIG_MLXBF_BOOTCTL=m
CONFIG_MLXBF_GIGE=m
# CONFIG_MLXBF_PMC is not set
@@ -3910,7 +3938,7 @@ CONFIG_MT76x2U=m
CONFIG_MT7921E=m
# CONFIG_MT7921S is not set
# CONFIG_MT7921U is not set
-# CONFIG_MT7925E is not set
+CONFIG_MT7925E=m
# CONFIG_MT7925U is not set
# CONFIG_MT7996E is not set
# CONFIG_MTD_ABSENT is not set
@@ -3973,6 +4001,7 @@ CONFIG_MTD_SPI_NOR_SWP_DISABLE_ON_VOLATILE=y
CONFIG_MTD_UBI_BEB_LIMIT=20
# CONFIG_MTD_UBI_BLOCK is not set
# CONFIG_MTD_UBI_FASTMAP is not set
+# CONFIG_MTD_UBI_FAULT_INJECTION is not set
# CONFIG_MTD_UBI_GLUEBI is not set
CONFIG_MTD_UBI=m
CONFIG_MTD_UBI_WL_THRESHOLD=4096
@@ -3998,7 +4027,6 @@ CONFIG_NAMESPACES=y
CONFIG_NATIONAL_PHY=m
# CONFIG_NAU7802 is not set
# CONFIG_NCN26000_PHY is not set
-CONFIG_ND_BLK=m
CONFIG_ND_BTT=m
# CONFIG_NDC_DIS_DYNAMIC_CACHING is not set
CONFIG_ND_CLAIM=y
@@ -4052,7 +4080,6 @@ CONFIG_NET_DROP_MONITOR=y
# CONFIG_NET_EMATCH is not set
# CONFIG_NET_EMATCH_META is not set
# CONFIG_NET_EMATCH_NBYTE is not set
-# CONFIG_NET_EMATCH_STACK is not set
# CONFIG_NET_EMATCH_TEXT is not set
# CONFIG_NET_EMATCH_U32 is not set
CONFIG_NET_FAILOVER=m
@@ -4334,6 +4361,7 @@ CONFIG_NFS_COMMON=y
CONFIG_NFS_DEBUG=y
# CONFIG_NFSD_FLEXFILELAYOUT is not set
CONFIG_NFS_DISABLE_UDP_SUPPORT=y
+# CONFIG_NFSD_LEGACY_CLIENT_TRACKING is not set
CONFIG_NFSD=m
CONFIG_NFSD_PNFS=y
CONFIG_NFSD_SCSILAYOUT=y
@@ -4483,6 +4511,7 @@ CONFIG_NOUVEAU_DEBUG_DEFAULT=3
# CONFIG_NOUVEAU_PLATFORM_DRIVER is not set
# CONFIG_NOZOMI is not set
CONFIG_NR_CPUS=4096
+# CONFIG_NSM is not set
# CONFIG_NTB_AMD is not set
# CONFIG_NTB_EPF is not set
# CONFIG_NTB_IDT is not set
@@ -4797,16 +4826,10 @@ CONFIG_PHY_XGENE=y
# CONFIG_PI433 is not set
CONFIG_PID_IN_CONTEXTIDR=y
CONFIG_PID_NS=y
-CONFIG_PINCTRL_ALDERLAKE=m
# CONFIG_PINCTRL_AMD is not set
-# CONFIG_PINCTRL_BROXTON is not set
-# CONFIG_PINCTRL_CHERRYVIEW is not set
# CONFIG_PINCTRL_CS42L43 is not set
# CONFIG_PINCTRL_CY8C95X0 is not set
-CONFIG_PINCTRL_ELKHARTLAKE=m
-CONFIG_PINCTRL_EMMITSBURG=m
# CONFIG_PINCTRL_EQUILIBRIUM is not set
-CONFIG_PINCTRL_ICELAKE=m
CONFIG_PINCTRL_IMX8MM=y
CONFIG_PINCTRL_IMX8MN=y
CONFIG_PINCTRL_IMX8MP=y
@@ -4819,10 +4842,7 @@ CONFIG_PINCTRL_IMX93=y
# CONFIG_PINCTRL_IPQ6018 is not set
# CONFIG_PINCTRL_IPQ8074 is not set
CONFIG_PINCTRL_IPROC_GPIO=y
-# CONFIG_PINCTRL_JASPERLAKE is not set
-CONFIG_PINCTRL_LAKEFIELD=m
# CONFIG_PINCTRL_LPASS_LPI is not set
-# CONFIG_PINCTRL_LYNXPOINT is not set
CONFIG_PINCTRL_MAX77620=y
# CONFIG_PINCTRL_MCP23S08 is not set
# CONFIG_PINCTRL_MDM9615 is not set
@@ -5144,8 +5164,8 @@ CONFIG_RD_GZIP=y
CONFIG_RD_LZ4=y
CONFIG_RD_LZMA=y
CONFIG_RD_LZO=y
-CONFIG_RDMA_RXE=m
-CONFIG_RDMA_SIW=m
+# CONFIG_RDMA_RXE is not set
+# CONFIG_RDMA_SIW is not set
# CONFIG_RDS is not set
CONFIG_RD_XZ=y
CONFIG_RD_ZSTD=y
@@ -5199,6 +5219,7 @@ CONFIG_REGULATOR_MAX77686=m
# CONFIG_REGULATOR_MP886X is not set
# CONFIG_REGULATOR_MPQ7920 is not set
# CONFIG_REGULATOR_MT6311 is not set
+# CONFIG_REGULATOR_NETLINK_EVENTS is not set
# CONFIG_REGULATOR_PCA9450 is not set
# CONFIG_REGULATOR_PF8X00 is not set
CONFIG_REGULATOR_PFUZE100=m
@@ -5373,6 +5394,7 @@ CONFIG_RTC_DRV_M41T94=m
CONFIG_RTC_DRV_M48T35=m
CONFIG_RTC_DRV_M48T59=m
# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_MAX31335 is not set
CONFIG_RTC_DRV_MAX6900=m
CONFIG_RTC_DRV_MAX6902=m
# CONFIG_RTC_DRV_MAX6916 is not set
@@ -5466,7 +5488,7 @@ CONFIG_RTW88=m
# CONFIG_RTW89_8851BE is not set
CONFIG_RTW89_8852AE=m
CONFIG_RTW89_8852BE=m
-# CONFIG_RTW89_8852CE is not set
+CONFIG_RTW89_8852CE=m
# CONFIG_RTW89_DEBUGFS is not set
# CONFIG_RTW89_DEBUGMSG is not set
CONFIG_RTW89=m
@@ -5480,6 +5502,7 @@ CONFIG_RXKAD=y
CONFIG_RXPERF=m
# CONFIG_S390_KPROBES_SANITY_TEST is not set
# CONFIG_S390_MODULES_SANITY_TEST is not set
+# CONFIG_SAMPLE_CGROUP is not set
# CONFIG_SAMPLE_FTRACE_OPS is not set
# CONFIG_SAMPLE_KMEMLEAK is not set
# CONFIG_SAMPLES is not set
@@ -5623,7 +5646,7 @@ CONFIG_SECONDARY_TRUSTED_KEYRING=y
CONFIG_SECRETMEM=y
CONFIG_SECTION_MISMATCH_WARN_ONLY=y
# CONFIG_SECURITY_APPARMOR is not set
-# CONFIG_SECURITY_DMESG_RESTRICT is not set
+CONFIG_SECURITY_DMESG_RESTRICT=y
CONFIG_SECURITYFS=y
CONFIG_SECURITY_INFINIBAND=y
# CONFIG_SECURITY_LANDLOCK is not set
@@ -5718,6 +5741,7 @@ CONFIG_SENSORS_FSCHMD=m
# CONFIG_SENSORS_FTSTEUTATES is not set
# CONFIG_SENSORS_G760A is not set
CONFIG_SENSORS_G762=m
+# CONFIG_SENSORS_GIGABYTE_WATERFORCE is not set
# CONFIG_SENSORS_GL518SM is not set
# CONFIG_SENSORS_GL520SM is not set
# CONFIG_SENSORS_GPIO_FAN is not set
@@ -5783,6 +5807,7 @@ CONFIG_SENSORS_LTC4222=m
# CONFIG_SENSORS_LTC4245 is not set
CONFIG_SENSORS_LTC4260=m
# CONFIG_SENSORS_LTC4261 is not set
+# CONFIG_SENSORS_LTC4286 is not set
CONFIG_SENSORS_MAX1111=m
# CONFIG_SENSORS_MAX127 is not set
# CONFIG_SENSORS_MAX15301 is not set
@@ -5810,9 +5835,11 @@ CONFIG_SENSORS_MAX31790=m
# CONFIG_SENSORS_MC34VR500 is not set
# CONFIG_SENSORS_MCP3021 is not set
# CONFIG_SENSORS_MLXREG_FAN is not set
+# CONFIG_SENSORS_MP2856 is not set
# CONFIG_SENSORS_MP2888 is not set
# CONFIG_SENSORS_MP2975 is not set
# CONFIG_SENSORS_MP5023 is not set
+# CONFIG_SENSORS_MP5990 is not set
# CONFIG_SENSORS_MPQ7932 is not set
# CONFIG_SENSORS_MR75203 is not set
# CONFIG_SENSORS_NCT6683 is not set
@@ -5999,10 +6026,8 @@ CONFIG_SIGNED_PE_FILE_VERIFICATION=y
CONFIG_SIPHASH_KUNIT_TEST=m
# CONFIG_SKGE is not set
# CONFIG_SKY2 is not set
-# CONFIG_SLAB_DEPRECATED is not set
CONFIG_SLAB_FREELIST_HARDENED=y
CONFIG_SLAB_FREELIST_RANDOM=y
-# CONFIG_SLAB is not set
# CONFIG_SLAB_MERGE_DEFAULT is not set
# CONFIG_SLIC_DS26522 is not set
# CONFIG_SLIMBUS is not set
@@ -6769,6 +6794,7 @@ CONFIG_SRAM=y
# CONFIG_SSB is not set
# CONFIG_SSFDC is not set
# CONFIG_SSIF_IPMI_BMC is not set
+CONFIG_STACKDEPOT_MAX_FRAMES=64
CONFIG_STACK_HASH_ORDER=20
CONFIG_STACKINIT_KUNIT_TEST=m
CONFIG_STACKPROTECTOR_STRONG=y
@@ -6897,7 +6923,7 @@ CONFIG_TCP_CONG_DCTCP=m
# CONFIG_TCP_CONG_HSTCP is not set
CONFIG_TCP_CONG_HTCP=m
# CONFIG_TCP_CONG_HYBLA is not set
-# CONFIG_TCP_CONG_ILLINOIS is not set
+CONFIG_TCP_CONG_ILLINOIS=m
# CONFIG_TCP_CONG_LP is not set
CONFIG_TCP_CONG_NV=m
# CONFIG_TCP_CONG_SCALABLE is not set
@@ -6976,6 +7002,7 @@ CONFIG_TEST_SORT=m
# CONFIG_TEST_UUID is not set
CONFIG_TEST_VMALLOC=m
# CONFIG_TEST_XARRAY is not set
+# CONFIG_THERMAL_DEBUGFS is not set
# CONFIG_THERMAL_DEFAULT_GOV_FAIR_SHARE is not set
CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y
# CONFIG_THERMAL_DEFAULT_GOV_USER_SPACE is not set
@@ -7159,6 +7186,7 @@ CONFIG_TOUCHSCREEN_WACOM_I2C=m
CONFIG_TRACER_SNAPSHOT=y
CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS=y
# CONFIG_TRANSPARENT_HUGEPAGE_MADVISE is not set
+# CONFIG_TRANSPARENT_HUGEPAGE_NEVER is not set
CONFIG_TRANSPARENT_HUGEPAGE=y
CONFIG_TREE_RCU=y
# CONFIG_TRIM_UNUSED_KSYMS is not set
@@ -7189,6 +7217,7 @@ CONFIG_TYPEC_MUX_FSA4480=m
# CONFIG_TYPEC_MUX_NB7VPQ904M is not set
CONFIG_TYPEC_MUX_PI3USB30532=m
# CONFIG_TYPEC_MUX_PTN36502 is not set
+# CONFIG_TYPEC_MUX_WCD939X_USBSS is not set
# CONFIG_TYPEC_NVIDIA_ALTMODE is not set
# CONFIG_TYPEC_QCOM_PMIC is not set
# CONFIG_TYPEC_RT1711H is not set
@@ -7560,6 +7589,7 @@ CONFIG_VDPA_SIM_NET=m
# CONFIG_VDPA_USER is not set
# CONFIG_VEML6030 is not set
# CONFIG_VEML6070 is not set
+# CONFIG_VEML6075 is not set
CONFIG_VETH=m
CONFIG_VEXPRESS_CONFIG=y
# CONFIG_VF610_ADC is not set
@@ -7567,6 +7597,7 @@ CONFIG_VEXPRESS_CONFIG=y
CONFIG_VFAT_FS=m
# CONFIG_VFIO_AMBA is not set
CONFIG_VFIO_CONTAINER=y
+# CONFIG_VFIO_DEBUGFS is not set
CONFIG_VFIO_DEVICE_CDEV=y
CONFIG_VFIO_FSL_MC=m
CONFIG_VFIO_GROUP=y
@@ -7603,6 +7634,7 @@ CONFIG_VHOST_VSOCK=m
# CONFIG_VIDEO_ADV_DEBUG is not set
# CONFIG_VIDEO_AK7375 is not set
# CONFIG_VIDEO_AK881X is not set
+# CONFIG_VIDEO_ALVIUM_CSI2 is not set
# CONFIG_VIDEO_AR0521 is not set
CONFIG_VIDEO_AU0828=m
# CONFIG_VIDEO_AU0828_RC is not set
@@ -7651,6 +7683,8 @@ CONFIG_VIDEO_EM28XX_RC=m
# CONFIG_VIDEO_FB_IVTV_FORCE_PAT is not set
CONFIG_VIDEO_FB_IVTV=m
# CONFIG_VIDEO_FIXED_MINOR_RANGES is not set
+# CONFIG_VIDEO_GC0308 is not set
+# CONFIG_VIDEO_GC2145 is not set
# CONFIG_VIDEO_GO7007 is not set
# CONFIG_VIDEO_GS1662 is not set
CONFIG_VIDEO_HDPVR=m
@@ -7720,6 +7754,7 @@ CONFIG_VIDEO_IVTV=m
# CONFIG_VIDEO_OV5675 is not set
# CONFIG_VIDEO_OV5693 is not set
# CONFIG_VIDEO_OV5695 is not set
+# CONFIG_VIDEO_OV64A40 is not set
# CONFIG_VIDEO_OV6650 is not set
# CONFIG_VIDEO_OV7251 is not set
# CONFIG_VIDEO_OV7640 is not set
@@ -7772,6 +7807,7 @@ CONFIG_VIDEO_SAA7164=m
# CONFIG_VIDEO_TDA9840 is not set
# CONFIG_VIDEO_TEA6415C is not set
# CONFIG_VIDEO_TEA6420 is not set
+# CONFIG_VIDEO_THP7312 is not set
# CONFIG_VIDEO_THS7303 is not set
# CONFIG_VIDEO_THS8200 is not set
# CONFIG_VIDEO_TLV320AIC23B is not set
@@ -7787,6 +7823,7 @@ CONFIG_VIDEO_TUNER=m
# CONFIG_VIDEO_TW5864 is not set
# CONFIG_VIDEO_TW686X is not set
# CONFIG_VIDEO_TW68 is not set
+# CONFIG_VIDEO_TW9900 is not set
# CONFIG_VIDEO_TW9903 is not set
# CONFIG_VIDEO_TW9906 is not set
# CONFIG_VIDEO_TW9910 is not set
@@ -7822,6 +7859,7 @@ CONFIG_VIRTIO_PCI_LEGACY=y
CONFIG_VIRTIO_PCI=y
# CONFIG_VIRTIO_PMEM is not set
CONFIG_VIRTIO_VDPA=m
+# CONFIG_VIRTIO_VFIO_PCI is not set
CONFIG_VIRTIO_VSOCKETS=m
CONFIG_VIRTIO=y
CONFIG_VIRTUALIZATION=y
@@ -7945,7 +7983,7 @@ CONFIG_XFS_POSIX_ACL=y
CONFIG_XFS_QUOTA=y
# CONFIG_XFS_RT is not set
# CONFIG_XFS_SUPPORT_ASCII_CI is not set
-CONFIG_XFS_SUPPORT_V4=y
+# CONFIG_XFS_SUPPORT_V4 is not set
# CONFIG_XFS_WARN is not set
# CONFIG_XGENE_DMA is not set
CONFIG_XGENE_PMU=y
@@ -8004,6 +8042,7 @@ CONFIG_ZRAM_DEF_COMP_LZORLE=y
CONFIG_ZRAM=m
# CONFIG_ZRAM_MEMORY_TRACKING is not set
# CONFIG_ZRAM_MULTI_COMP is not set
+# CONFIG_ZRAM_TRACK_ENTRY_ACTIME is not set
CONFIG_ZRAM_WRITEBACK=y
CONFIG_ZSMALLOC_CHAIN_SIZE=8
CONFIG_ZSMALLOC_STAT=y
@@ -8016,6 +8055,7 @@ CONFIG_ZSWAP_COMPRESSOR_DEFAULT_LZO=y
# CONFIG_ZSWAP_COMPRESSOR_DEFAULT_ZSTD is not set
# CONFIG_ZSWAP_DEFAULT_ON is not set
# CONFIG_ZSWAP_EXCLUSIVE_LOADS_DEFAULT_ON is not set
+# CONFIG_ZSWAP_SHRINKER_DEFAULT_ON is not set
CONFIG_ZSWAP=y
# CONFIG_ZSWAP_ZPOOL_DEFAULT_Z3FOLD is not set
CONFIG_ZSWAP_ZPOOL_DEFAULT_ZBUD=y
@@ -8025,7 +8065,7 @@ CONFIG_ZENIFY=y
CONFIG_NTSYNC=y
CONFIG_USER_NS_UNPRIVILEGED=y
CONFIG_TCP_CONG_BBR2=m
-# CONFIG_SCHED_PDS is not set
+CONFIG_SCHED_BORE=y
CONFIG_HID_IPTS=m
CONFIG_HID_ITHC=m
CONFIG_SURFACE_BOOK1_DGPU_SWITCH=m
@@ -8034,11 +8074,8 @@ CONFIG_LEDS_TPS68470=m
CONFIG_SENSORS_SURFACE_FAN=m
CONFIG_SENSORS_SURFACE_TEMP=m
CONFIG_DRM_AMD_COLOR_STEAMDECK=y
-CONFIG_BMI323_I2C=m
-CONFIG_BMI323_SPI=m
CONFIG_DRM_APPLETBDRM=m
CONFIG_HID_APPLETB_BL=m
CONFIG_HID_APPLETB_KBD=m
CONFIG_HID_APPLE_MAGIC_BACKLIGHT=m
CONFIG_APPLE_BCE=m
-CONFIG_SCHED_BORE=y
diff --git a/SOURCES/kernel-aarch64-debug-fedora.config b/SOURCES/kernel-aarch64-debug-fedora.config
index 665cc4c..be56ee8 100644
--- a/SOURCES/kernel-aarch64-debug-fedora.config
+++ b/SOURCES/kernel-aarch64-debug-fedora.config
@@ -112,6 +112,7 @@ CONFIG_AD5770R=m
# CONFIG_AD5791 is not set
# CONFIG_AD5933 is not set
# CONFIG_AD7091R5 is not set
+CONFIG_AD7091R8=m
CONFIG_AD7124=m
# CONFIG_AD7150 is not set
# CONFIG_AD7192 is not set
@@ -262,6 +263,7 @@ CONFIG_ANDROID_BINDERFS=y
# CONFIG_ANDROID_BINDER_IPC_SELFTEST is not set
CONFIG_ANDROID_BINDER_IPC=y
# CONFIG_ANON_VMA_NAME is not set
+# CONFIG_AOSONG_AGS02MA is not set
# CONFIG_APDS9300 is not set
CONFIG_APDS9802ALS=m
CONFIG_APDS9960=m
@@ -351,14 +353,14 @@ CONFIG_ARCH_R8A774A1=y
CONFIG_ARCH_R9A07G043=y
CONFIG_ARCH_R9A07G044=y
CONFIG_ARCH_R9A07G054=y
-# CONFIG_ARCH_R9A08G045 is not set
-# CONFIG_ARCH_R9A09G011 is not set
+CONFIG_ARCH_R9A08G045=y
+CONFIG_ARCH_R9A09G011=y
CONFIG_ARCH_RANDOM=y
# CONFIG_ARCH_RDA is not set
# CONFIG_ARCH_REALTEK is not set
CONFIG_ARCH_RENESAS=y
CONFIG_ARCH_ROCKCHIP=y
-# CONFIG_ARCH_S32 is not set
+CONFIG_ARCH_S32=y
# CONFIG_ARCH_SA1100 is not set
CONFIG_ARCH_SEATTLE=y
# CONFIG_ARCH_SPARX5 is not set
@@ -693,6 +695,7 @@ CONFIG_BACKLIGHT_LM3630A=m
# CONFIG_BACKLIGHT_LM3639 is not set
CONFIG_BACKLIGHT_LP855X=m
# CONFIG_BACKLIGHT_LV5207LP is not set
+CONFIG_BACKLIGHT_MP3309C=m
CONFIG_BACKLIGHT_MT6370=m
CONFIG_BACKLIGHT_PWM=m
CONFIG_BACKLIGHT_QCOM_WLED=m
@@ -748,6 +751,7 @@ CONFIG_BCACHEFS_LOCK_TIME_STATS=y
# CONFIG_BCACHEFS_NO_LATENCY_ACCT is not set
CONFIG_BCACHEFS_POSIX_ACL=y
CONFIG_BCACHEFS_QUOTA=y
+CONFIG_BCACHEFS_SIX_OPTIMISTIC_SPIN=y
# CONFIG_BCACHEFS_TESTS is not set
CONFIG_BCACHE=m
CONFIG_BCM2711_THERMAL=m
@@ -838,6 +842,7 @@ CONFIG_BLK_DEV_SR=y
CONFIG_BLK_DEV_THROTTLING=y
CONFIG_BLKDEV_UBLK_LEGACY_OPCODES=y
CONFIG_BLK_DEV_UBLK=m
+CONFIG_BLK_DEV_WRITE_MOUNTED=y
CONFIG_BLK_DEV=y
CONFIG_BLK_DEV_ZONED=y
# CONFIG_BLK_INLINE_ENCRYPTION_FALLBACK is not set
@@ -858,6 +863,8 @@ CONFIG_BME680=m
# CONFIG_BMI088_ACCEL is not set
CONFIG_BMI160_I2C=m
CONFIG_BMI160_SPI=m
+CONFIG_BMI323_I2C=m
+CONFIG_BMI323_SPI=m
CONFIG_BMP280=m
CONFIG_BNA=m
CONFIG_BNX2=m
@@ -873,7 +880,6 @@ CONFIG_BONDING=m
# CONFIG_BOOT_CONFIG_FORCE is not set
CONFIG_BOOT_CONFIG=y
# CONFIG_BOOTPARAM_HARDLOCKUP_PANIC is not set
-# CONFIG_BOOTPARAM_HOTPLUG_CPU0 is not set
# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
@@ -1006,7 +1012,7 @@ CONFIG_BUILD_SALT=""
# CONFIG_CACHEFILES_DEBUG is not set
# CONFIG_CACHEFILES_ERROR_INJECTION is not set
CONFIG_CACHEFILES=m
-# CONFIG_CACHEFILES_ONDEMAND is not set
+CONFIG_CACHEFILES_ONDEMAND=y
CONFIG_CACHESTAT_SYSCALL=y
CONFIG_CADENCE_TTC_TIMER=y
CONFIG_CADENCE_WATCHDOG=m
@@ -1049,7 +1055,7 @@ CONFIG_CAN_NETLINK=y
CONFIG_CAN_PEAK_PCIEFD=m
CONFIG_CAN_PEAK_USB=m
CONFIG_CAN_RAW=m
-# CONFIG_CAN_RCAR_CANFD is not set
+CONFIG_CAN_RCAR_CANFD=m
# CONFIG_CAN_RCAR is not set
# CONFIG_CAN_SJA1000 is not set
CONFIG_CAN_SLCAN=m
@@ -1243,6 +1249,7 @@ CONFIG_CLK_SUNXI_CLOCKS=y
CONFIG_CLK_SUNXI_PRCM_SUN9I=y
CONFIG_CLK_SUNXI=y
CONFIG_CLK_VEXPRESS_OSC=y
+CONFIG_CLK_X1E80100_GCC=y
CONFIG_CLOCKSOURCE_WATCHDOG_MAX_SKEW_US=100
CONFIG_CLS_U32_MARK=y
CONFIG_CLS_U32_PERF=y
@@ -1308,7 +1315,7 @@ CONFIG_COMMON_CLK_ROCKCHIP=y
CONFIG_COMMON_CLK_RS9_PCIE=m
CONFIG_COMMON_CLK_S4_PERIPHERALS=y
CONFIG_COMMON_CLK_S4_PLL=y
-CONFIG_COMMON_CLK_SCMI=y
+CONFIG_COMMON_CLK_SCMI=m
CONFIG_COMMON_CLK_SCPI=m
# CONFIG_COMMON_CLK_SI514 is not set
CONFIG_COMMON_CLK_SI521XX=y
@@ -1459,7 +1466,6 @@ CONFIG_CRYPTO_CAST5=m
CONFIG_CRYPTO_CAST6=m
CONFIG_CRYPTO_CBC=y
CONFIG_CRYPTO_CCM=y
-CONFIG_CRYPTO_CFB=y
CONFIG_CRYPTO_CHACHA20=m
CONFIG_CRYPTO_CHACHA20_NEON=y
CONFIG_CRYPTO_CHACHA20POLY1305=m
@@ -1516,6 +1522,7 @@ CONFIG_CRYPTO_DEV_MARVELL_CESA=m
CONFIG_CRYPTO_DEV_NITROX_CNN55XX=m
CONFIG_CRYPTO_DEV_OCTEONTX2_CPT=m
CONFIG_CRYPTO_DEV_OCTEONTX_CPT=m
+CONFIG_CRYPTO_DEV_QAT_420XX=m
CONFIG_CRYPTO_DEV_QAT_4XXX=m
CONFIG_CRYPTO_DEV_QAT_C3XXX=m
CONFIG_CRYPTO_DEV_QAT_C3XXXVF=m
@@ -1597,7 +1604,6 @@ CONFIG_CRYPTO_MD5=y
CONFIG_CRYPTO_MICHAEL_MIC=m
CONFIG_CRYPTO_NHPOLY1305_NEON=m
CONFIG_CRYPTO_NULL=y
-CONFIG_CRYPTO_OFB=y
CONFIG_CRYPTO_PCBC=m
CONFIG_CRYPTO_PCRYPT=m
CONFIG_CRYPTO_POLY1305=m
@@ -1703,7 +1709,6 @@ CONFIG_DEBUG_FS_ALLOW_ALL=y
CONFIG_DEBUG_FS=y
# CONFIG_DEBUG_GPIO is not set
CONFIG_DEBUG_HIGHMEM=y
-# CONFIG_DEBUG_HOTPLUG_CPU0 is not set
CONFIG_DEBUG_INFO_BTF=y
# CONFIG_DEBUG_INFO_COMPRESSED is not set
CONFIG_DEBUG_INFO_COMPRESSED_NONE=y
@@ -1768,7 +1773,7 @@ CONFIG_DEBUG_STACK_USAGE=y
# CONFIG_DEBUG_VM_MAPLE_TREE is not set
CONFIG_DEBUG_VM_PGFLAGS=y
CONFIG_DEBUG_VM_PGTABLE=y
-# CONFIG_DEBUG_VM_RB is not set # revisit this if performance isn't horrible
+# CONFIG_DEBUG_VM_RB is not set
CONFIG_DEBUG_VM_SHOOT_LAZIES=y
# CONFIG_DEBUG_VM_VMACACHE is not set
CONFIG_DEBUG_VM=y
@@ -1892,6 +1897,7 @@ CONFIG_DP83867_PHY=m
CONFIG_DP83869_PHY=m
# CONFIG_DP83TC811_PHY is not set
CONFIG_DP83TD510_PHY=m
+CONFIG_DP83TG720_PHY=m
CONFIG_DPAA2_CONSOLE=m
# CONFIG_DPM_WATCHDOG is not set
CONFIG_DPOT_DAC=m
@@ -2024,6 +2030,7 @@ CONFIG_DRM_MSM_MDP5=y
# CONFIG_DRM_MSM_REGISTER_LOGGING is not set
# CONFIG_DRM_MXSFB is not set
CONFIG_DRM_NOUVEAU_BACKLIGHT=y
+CONFIG_DRM_NOUVEAU_GSP_DEFAULT=y
CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_NOUVEAU_SVM is not set
CONFIG_DRM_NWL_MIPI_DSI=m
@@ -2045,6 +2052,7 @@ CONFIG_DRM_PANEL_FEIYANG_FY07024DI26A30D=m
CONFIG_DRM_PANEL_HIMAX_HX8394=m
CONFIG_DRM_PANEL_ILITEK_IL9322=m
CONFIG_DRM_PANEL_ILITEK_ILI9341=m
+# CONFIG_DRM_PANEL_ILITEK_ILI9805 is not set
CONFIG_DRM_PANEL_ILITEK_ILI9881C=m
CONFIG_DRM_PANEL_ILITEK_ILI9882T=m
CONFIG_DRM_PANEL_INNOLUX_EJ030NA=m
@@ -2107,6 +2115,7 @@ CONFIG_DRM_PANEL_SITRONIX_ST7789V=m
# CONFIG_DRM_PANEL_SONY_TD4353_JDI is not set
CONFIG_DRM_PANEL_SONY_TULIP_TRULY_NT35521=m
CONFIG_DRM_PANEL_STARTEK_KD070FHFID015=m
+# CONFIG_DRM_PANEL_SYNAPTICS_R63353 is not set
# CONFIG_DRM_PANEL_TDO_TL070WSH30 is not set
# CONFIG_DRM_PANEL_TPO_TD028TTEC1 is not set
# CONFIG_DRM_PANEL_TPO_TD043MTEA1 is not set
@@ -2122,6 +2131,7 @@ CONFIG_DRM_PANFROST=m
CONFIG_DRM_PARADE_PS8622=m
CONFIG_DRM_PARADE_PS8640=m
CONFIG_DRM_PL111=m
+CONFIG_DRM_POWERVR=m
CONFIG_DRM_QXL=m
CONFIG_DRM_RADEON=m
CONFIG_DRM_RADEON_USERPTR=y
@@ -2135,7 +2145,7 @@ CONFIG_DRM_ROCKCHIP=m
# CONFIG_DRM_RZG2L_MIPI_DSI is not set
CONFIG_DRM_SAMSUNG_DSIM=m
# CONFIG_DRM_SHMOBILE is not set
-# CONFIG_DRM_SII902X is not set
+CONFIG_DRM_SII902X=m
CONFIG_DRM_SII9234=m
# CONFIG_DRM_SIL_SII8620 is not set
CONFIG_DRM_SIMPLE_BRIDGE=m
@@ -2178,6 +2188,7 @@ CONFIG_DRM_VKMS=m
CONFIG_DRM_VMWGFX_FBCON=y
CONFIG_DRM_VMWGFX=m
# CONFIG_DRM_VMWGFX_MKSSTATS is not set
+# CONFIG_DRM_XE is not set
# CONFIG_DRM_XEN_FRONTEND is not set
CONFIG_DRM=y
CONFIG_DRM_ZYNQMP_DPSUB=m
@@ -2280,6 +2291,7 @@ CONFIG_DVB_USB_VP702X=m
CONFIG_DVB_USB_VP7045=m
CONFIG_DVB_USB_ZD1301=m
CONFIG_DW_AXI_DMAC=m
+CONFIG_DWC_PCIE_PMU=m
CONFIG_DW_DMAC_CORE=m
CONFIG_DW_DMAC=m
CONFIG_DW_DMAC_PCI=m
@@ -2358,8 +2370,10 @@ CONFIG_ELF_CORE=y
CONFIG_EMAC_ROCKCHIP=m
# CONFIG_EMBEDDED is not set
CONFIG_ENA_ETHERNET=m
+# CONFIG_ENC28J60 is not set
CONFIG_ENCLOSURE_SERVICES=m
CONFIG_ENCRYPTED_KEYS=y
+# CONFIG_ENCX24J600 is not set
CONFIG_ENERGY_MODEL=y
CONFIG_ENIC=m
CONFIG_ENVELOPE_DETECTOR=m
@@ -2368,6 +2382,7 @@ CONFIG_EPOLL=y
CONFIG_EQUALIZER=m
# CONFIG_EROFS_FS_DEBUG is not set
CONFIG_EROFS_FS=m
+CONFIG_EROFS_FS_ONDEMAND=y
# CONFIG_EROFS_FS_PCPU_KTHREAD is not set
CONFIG_EROFS_FS_POSIX_ACL=y
CONFIG_EROFS_FS_SECURITY=y
@@ -2454,7 +2469,6 @@ CONFIG_FAULT_INJECTION=y
# CONFIG_FB_3DFX is not set
# CONFIG_FB_ARC is not set
# CONFIG_FB_ARK is not set
-# CONFIG_FB_ARMCLCD is not set
# CONFIG_FB_ASILIANT is not set
# CONFIG_FB_ATY128 is not set
# CONFIG_FB_ATY is not set
@@ -2474,7 +2488,6 @@ CONFIG_FB_EFI=y
# CONFIG_FB_IMSTT is not set
# CONFIG_FB_IMX is not set
# CONFIG_FB_KYRO is not set
-# CONFIG_FB_LE80578 is not set
# CONFIG_FB_MATROX_G is not set
# CONFIG_FB_MATROX_I2C is not set
# CONFIG_FB_MATROX is not set
@@ -2569,8 +2582,8 @@ CONFIG_FRAME_POINTER=y
CONFIG_FRAME_WARN=2048
CONFIG_FRONTSWAP=y
# CONFIG_FSCACHE_DEBUG is not set
-CONFIG_FSCACHE=m
CONFIG_FSCACHE_STATS=y
+CONFIG_FSCACHE=y
CONFIG_FS_DAX=y
CONFIG_FS_ENCRYPTION_INLINE_CRYPT=y
CONFIG_FS_ENCRYPTION=y
@@ -2802,8 +2815,8 @@ CONFIG_HAVE_PERF_USER_STACK_DUMP=y
CONFIG_HD44780=m
CONFIG_HDC100X=m
CONFIG_HDC2010=m
+# CONFIG_HDC3020 is not set
CONFIG_HEADERS_INSTALL=y
-# CONFIG_HERMES is not set
CONFIG_HFS_FS=m
CONFIG_HFSPLUS_FS=m
CONFIG_HI3660_MBOX=y
@@ -2871,6 +2884,7 @@ CONFIG_HID_MACALLY=m
CONFIG_HID_MAGICMOUSE=y
CONFIG_HID_MALTRON=m
CONFIG_HID_MAYFLASH=m
+# CONFIG_HID_MCP2200 is not set
CONFIG_HID_MCP2221=m
CONFIG_HID_MEGAWORLD_FF=m
CONFIG_HID_MICROSOFT=m
@@ -2976,7 +2990,6 @@ CONFIG_HNS3=m
CONFIG_HNS_DSAF=m
CONFIG_HNS_ENET=m
CONFIG_HOLTEK_FF=y
-# CONFIG_HOSTAP is not set
CONFIG_HOTPLUG_CPU=y
CONFIG_HOTPLUG_PCI_ACPI_AMPERE_ALTRA=m
CONFIG_HOTPLUG_PCI_ACPI_IBM=m
@@ -2992,6 +3005,7 @@ CONFIG_HOTPLUG_PCI=y
CONFIG_HP_WATCHDOG=m
CONFIG_HSA_AMD_SVM=y
CONFIG_HSA_AMD=y
+# CONFIG_HSC030PA is not set
# CONFIG_HSI is not set
CONFIG_HSR=m
# CONFIG_HSU_DMA is not set
@@ -3133,7 +3147,7 @@ CONFIG_I2C_QCOM_CCI=m
CONFIG_I2C_QCOM_GENI=m
CONFIG_I2C_QUP=m
# CONFIG_I2C_RCAR is not set
-# CONFIG_I2C_RIIC is not set
+CONFIG_I2C_RIIC=m
CONFIG_I2C_RK3X=y
# CONFIG_I2C_ROBOTFUZZ_OSIF is not set
# CONFIG_I2C_RZV2M is not set
@@ -3172,6 +3186,7 @@ CONFIG_I40EVF=m
CONFIG_I6300ESB_WDT=m
# CONFIG_I8K is not set
# CONFIG_IAQCORE is not set
+CONFIG_ICE_HWMON=y
CONFIG_ICE_HWTS=y
CONFIG_ICE=m
CONFIG_ICE_SWITCHDEV=y
@@ -3482,12 +3497,15 @@ CONFIG_INTERCONNECT_QCOM_SDM845=m
# CONFIG_INTERCONNECT_QCOM_SDX55 is not set
# CONFIG_INTERCONNECT_QCOM_SDX65 is not set
CONFIG_INTERCONNECT_QCOM_SDX75=m
+# CONFIG_INTERCONNECT_QCOM_SM6115 is not set
# CONFIG_INTERCONNECT_QCOM_SM6350 is not set
CONFIG_INTERCONNECT_QCOM_SM8150=m
CONFIG_INTERCONNECT_QCOM_SM8250=m
# CONFIG_INTERCONNECT_QCOM_SM8350 is not set
CONFIG_INTERCONNECT_QCOM_SM8450=m
# CONFIG_INTERCONNECT_QCOM_SM8550 is not set
+# CONFIG_INTERCONNECT_QCOM_SM8650 is not set
+CONFIG_INTERCONNECT_QCOM_X1E80100=m
CONFIG_INTERCONNECT_QCOM=y
CONFIG_INTERCONNECT=y
CONFIG_INTERRUPT_CNT=m
@@ -3717,6 +3735,7 @@ CONFIG_ISL29003=m
CONFIG_ISL29020=m
# CONFIG_ISL29125 is not set
# CONFIG_ISL29501 is not set
+# CONFIG_ISL76682 is not set
CONFIG_ISO9660_FS=m
CONFIG_IS_SIGNED_TYPE_KUNIT_TEST=m
CONFIG_IT8712F_WDT=m
@@ -3789,6 +3808,7 @@ CONFIG_JOYSTICK_PSXPAD_SPI_FF=y
CONFIG_JOYSTICK_PSXPAD_SPI=m
CONFIG_JOYSTICK_PXRC=m
CONFIG_JOYSTICK_QWIIC=m
+# CONFIG_JOYSTICK_SEESAW is not set
CONFIG_JOYSTICK_SENSEHAT=m
CONFIG_JOYSTICK_SIDEWINDER=m
# CONFIG_JOYSTICK_SPACEBALL is not set
@@ -3812,6 +3832,7 @@ CONFIG_KALLSYMS_ALL=y
# CONFIG_KALLSYMS_SELFTEST is not set
CONFIG_KALLSYMS=y
# CONFIG_KARMA_PARTITION is not set
+# CONFIG_KASAN_EXTRA_INFO is not set
CONFIG_KASAN_GENERIC=y
# CONFIG_KASAN_HW_TAGS is not set
CONFIG_KASAN_INLINE=y
@@ -3935,6 +3956,9 @@ CONFIG_L2TP_ETH=m
CONFIG_L2TP_IP=m
CONFIG_L2TP=m
CONFIG_L2TP_V3=y
+CONFIG_LAN743X=m
+CONFIG_LAN966X_DCB=y
+CONFIG_LAN966X_SWITCH=m
# CONFIG_LAPB is not set
CONFIG_LATENCYTOP=y
# CONFIG_LATTICE_ECP3_CONFIG is not set
@@ -3995,6 +4019,7 @@ CONFIG_LEDS_LP50XX=m
# CONFIG_LEDS_LP55XX_COMMON is not set
# CONFIG_LEDS_LP8860 is not set
CONFIG_LEDS_LT3593=m
+CONFIG_LEDS_MAX5970=m
CONFIG_LEDS_MAX77650=m
CONFIG_LEDS_MLXCPLD=m
CONFIG_LEDS_MLXREG=m
@@ -4014,6 +4039,7 @@ CONFIG_LEDS_REGULATOR=m
# CONFIG_LEDS_RT8515 is not set
CONFIG_LEDS_SGM3140=m
# CONFIG_LEDS_SPI_BYTE is not set
+# CONFIG_LEDS_SUN50I_A100 is not set
CONFIG_LEDS_SYSCON=y
# CONFIG_LEDS_TCA6507 is not set
# CONFIG_LEDS_TI_LMU_COMMON is not set
@@ -4118,6 +4144,7 @@ CONFIG_LTC2983=m
# CONFIG_LTO_CLANG_FULL is not set
# CONFIG_LTO_CLANG_THIN is not set
CONFIG_LTO_NONE=y
+# CONFIG_LTR390 is not set
CONFIG_LTR501=m
CONFIG_LTRF216A=m
CONFIG_LV0104CS=m
@@ -4180,6 +4207,7 @@ CONFIG_MAX30208=m
CONFIG_MAX31827=m
CONFIG_MAX31856=m
CONFIG_MAX31865=m
+CONFIG_MAX34408=m
# CONFIG_MAX44000 is not set
CONFIG_MAX44009=m
# CONFIG_MAX517 is not set
@@ -4211,7 +4239,9 @@ CONFIG_MCP41010=m
# CONFIG_MCP4531 is not set
# CONFIG_MCP4725 is not set
CONFIG_MCP4728=m
+CONFIG_MCP4821=m
# CONFIG_MCP4922 is not set
+CONFIG_MCP9600=m
CONFIG_MCTP_SERIAL=m
# CONFIG_MCTP_TRANSPORT_I2C is not set
# CONFIG_MCTP_TRANSPORT_I3C is not set
@@ -4258,7 +4288,6 @@ CONFIG_MEDIA_CAMERA_SUPPORT=y
CONFIG_MEDIA_CEC_RC=y
CONFIG_MEDIA_CEC_SUPPORT=y
CONFIG_MEDIA_CONTROLLER_DVB=y
-CONFIG_MEDIA_CONTROLLER_REQUEST_API=y
CONFIG_MEDIA_CONTROLLER=y
CONFIG_MEDIA_DIGITAL_TV_SUPPORT=y
CONFIG_MEDIA_PCI_SUPPORT=y
@@ -4305,7 +4334,7 @@ CONFIG_MEMTEST=y
# CONFIG_MERAKI_MX100 is not set
CONFIG_MESON_CANVAS=m
# CONFIG_MESON_CLK_MEASURE is not set
-# CONFIG_MESON_DDR_PMU is not set
+CONFIG_MESON_DDR_PMU=m
CONFIG_MESON_EE_PM_DOMAINS=y
CONFIG_MESON_EFUSE=m
CONFIG_MESON_GXBB_WATCHDOG=m
@@ -4523,6 +4552,7 @@ CONFIG_MLX5_VDPA=y
CONFIG_MLX5_VFIO_PCI=m
CONFIG_MLX90614=m
CONFIG_MLX90632=m
+# CONFIG_MLX90635 is not set
CONFIG_MLXBF_BOOTCTL=m
CONFIG_MLXBF_GIGE=m
# CONFIG_MLXBF_PMC is not set
@@ -4825,6 +4855,7 @@ CONFIG_MTD_SST25L=m
CONFIG_MTD_UBI_BEB_LIMIT=20
# CONFIG_MTD_UBI_BLOCK is not set
# CONFIG_MTD_UBI_FASTMAP is not set
+# CONFIG_MTD_UBI_FAULT_INJECTION is not set
# CONFIG_MTD_UBI_GLUEBI is not set
CONFIG_MTD_UBI=m
CONFIG_MTD_UBI_WL_THRESHOLD=4096
@@ -4867,7 +4898,6 @@ CONFIG_NATSEMI=m
CONFIG_NCN26000_PHY=m
CONFIG_NCSI_OEM_CMD_GET_MAC=y
CONFIG_NCSI_OEM_CMD_KEEP_PHY=y
-CONFIG_ND_BLK=m
CONFIG_ND_BTT=m
# CONFIG_NDC_DIS_DYNAMIC_CACHING is not set
CONFIG_NE2K_PCI=m
@@ -5172,7 +5202,7 @@ CONFIG_NET_VENDOR_LITEX=y
CONFIG_NET_VENDOR_MARVELL=y
CONFIG_NET_VENDOR_MELLANOX=y
CONFIG_NET_VENDOR_MICREL=y
-# CONFIG_NET_VENDOR_MICROCHIP is not set
+CONFIG_NET_VENDOR_MICROCHIP=y
# CONFIG_NET_VENDOR_MICROSEMI is not set
CONFIG_NET_VENDOR_MICROSOFT=y
CONFIG_NET_VENDOR_MYRI=y
@@ -5188,7 +5218,7 @@ CONFIG_NET_VENDOR_QLOGIC=y
CONFIG_NET_VENDOR_QUALCOMM=y
CONFIG_NET_VENDOR_RDC=y
CONFIG_NET_VENDOR_REALTEK=y
-# CONFIG_NET_VENDOR_RENESAS is not set
+CONFIG_NET_VENDOR_RENESAS=y
CONFIG_NET_VENDOR_ROCKER=y
# CONFIG_NET_VENDOR_SAMSUNG is not set
# CONFIG_NET_VENDOR_SEEQ is not set
@@ -5297,6 +5327,7 @@ CONFIG_NF_REJECT_IPV6=m
CONFIG_NFSD_BLOCKLAYOUT=y
CONFIG_NFSD_FLEXFILELAYOUT=y
CONFIG_NFS_DISABLE_UDP_SUPPORT=y
+# CONFIG_NFSD_LEGACY_CLIENT_TRACKING is not set
CONFIG_NFSD=m
CONFIG_NFSD_PNFS=y
CONFIG_NFSD_SCSILAYOUT=y
@@ -5445,6 +5476,7 @@ CONFIG_NOUVEAU_PLATFORM_DRIVER=y
CONFIG_NOZOMI=m
CONFIG_NR_CPUS=4096
CONFIG_NS83820=m
+CONFIG_NSM=m
CONFIG_NTB_EPF=m
# CONFIG_NTB is not set
# CONFIG_NTFS3_64BIT_CLUSTER is not set
@@ -5558,7 +5590,6 @@ CONFIG_OPTEE=m
CONFIG_OPTEE_SHM_NUM_PRIV_PAGES=1
CONFIG_OPTPROBES=y
CONFIG_ORANGEFS_FS=m
-CONFIG_ORINOCO_USB=m
CONFIG_OSF_PARTITION=y
CONFIG_OSNOISE_TRACER=y
CONFIG_OVERFLOW_KUNIT_TEST=m
@@ -5569,10 +5600,6 @@ CONFIG_OVERLAY_FS=m
CONFIG_OVERLAY_FS_REDIRECT_ALWAYS_FOLLOW=y
# CONFIG_OVERLAY_FS_REDIRECT_DIR is not set
# CONFIG_OVERLAY_FS_XINO_AUTO is not set
-CONFIG_P54_COMMON=m
-CONFIG_P54_PCI=m
-# CONFIG_P54_SPI is not set
-CONFIG_P54_USB=m
CONFIG_PA12203001=m
CONFIG_PACKET_DIAG=y
CONFIG_PACKET=y
@@ -5851,24 +5878,15 @@ CONFIG_PHY_XILINX_ZYNQMP=m
CONFIG_PID_IN_CONTEXTIDR=y
CONFIG_PID_NS=y
CONFIG_PINCONF=y
-CONFIG_PINCTRL_ALDERLAKE=m
CONFIG_PINCTRL_AMD=y
CONFIG_PINCTRL_AMLOGIC_C3=y
CONFIG_PINCTRL_AMLOGIC_T7=y
CONFIG_PINCTRL_APPLE_GPIO=m
CONFIG_PINCTRL_AS3722=y
CONFIG_PINCTRL_AXP209=m
-# CONFIG_PINCTRL_BAYTRAIL is not set
-# CONFIG_PINCTRL_BROXTON is not set
-# CONFIG_PINCTRL_CANNONLAKE is not set
-CONFIG_PINCTRL_CEDARFORK=m
-# CONFIG_PINCTRL_CHERRYVIEW is not set
CONFIG_PINCTRL_CS42L43=m
CONFIG_PINCTRL_CY8C95X0=m
-CONFIG_PINCTRL_ELKHARTLAKE=m
-CONFIG_PINCTRL_EMMITSBURG=m
# CONFIG_PINCTRL_EQUILIBRIUM is not set
-# CONFIG_PINCTRL_GEMINILAKE is not set
CONFIG_PINCTRL_IMX8DXL=y
CONFIG_PINCTRL_IMX8MM=y
CONFIG_PINCTRL_IMX8MN=y
@@ -5887,10 +5905,7 @@ CONFIG_PINCTRL_IMX93=y
# CONFIG_PINCTRL_IPQ8064 is not set
# CONFIG_PINCTRL_IPQ8074 is not set
# CONFIG_PINCTRL_IPQ9574 is not set
-# CONFIG_PINCTRL_JASPERLAKE is not set
-CONFIG_PINCTRL_LAKEFIELD=m
CONFIG_PINCTRL_LPASS_LPI=m
-# CONFIG_PINCTRL_LYNXPOINT is not set
CONFIG_PINCTRL_MAX77620=y
# CONFIG_PINCTRL_MCP23S08 is not set
# CONFIG_PINCTRL_MDM9607 is not set
@@ -5926,6 +5941,7 @@ CONFIG_PINCTRL_QDF2XXX=m
# CONFIG_PINCTRL_QDU1000 is not set
CONFIG_PINCTRL_RK805=m
CONFIG_PINCTRL_ROCKCHIP=y
+CONFIG_PINCTRL_S32G2=y
CONFIG_PINCTRL_SA8775P=m
CONFIG_PINCTRL_SC7180=y
CONFIG_PINCTRL_SC7280_LPASS_LPI=m
@@ -5940,6 +5956,7 @@ CONFIG_PINCTRL_SDM845=m
# CONFIG_PINCTRL_SDX65 is not set
# CONFIG_PINCTRL_SDX75 is not set
CONFIG_PINCTRL_SINGLE=y
+# CONFIG_PINCTRL_SM4450 is not set
# CONFIG_PINCTRL_SM6115 is not set
# CONFIG_PINCTRL_SM6115_LPASS_LPI is not set
# CONFIG_PINCTRL_SM6125 is not set
@@ -5955,6 +5972,8 @@ CONFIG_PINCTRL_SM8450_LPASS_LPI=m
CONFIG_PINCTRL_SM8450=m
# CONFIG_PINCTRL_SM8550 is not set
# CONFIG_PINCTRL_SM8550_LPASS_LPI is not set
+# CONFIG_PINCTRL_SM8650 is not set
+# CONFIG_PINCTRL_SM8650_LPASS_LPI is not set
# CONFIG_PINCTRL_STMFX is not set
CONFIG_PINCTRL_SUN20I_D1=y
# CONFIG_PINCTRL_SUN4I_A10 is not set
@@ -5982,6 +6001,8 @@ CONFIG_PINCTRL_SUN8I_H3=y
# CONFIG_PINCTRL_SUN9I_A80_R is not set
# CONFIG_PINCTRL_SX150X is not set
CONFIG_PINCTRL_TEGRA234=y
+CONFIG_PINCTRL_TPS6594=m
+CONFIG_PINCTRL_X1E80100=m
CONFIG_PINCTRL=y
CONFIG_PINCTRL_ZYNQMP=y
# CONFIG_PING is not set
@@ -6222,6 +6243,7 @@ CONFIG_QCOM_MPM=m
CONFIG_QCOM_OCMEM=m
CONFIG_QCOM_PDC=y
CONFIG_QCOM_PMIC_GLINK=m
+CONFIG_QCOM_PMIC_PDCHARGER_ULOG=m
CONFIG_QCOM_Q6V5_ADSP=m
CONFIG_QCOM_Q6V5_MSS=m
CONFIG_QCOM_Q6V5_PAS=m
@@ -6262,6 +6284,7 @@ CONFIG_QCOM_WDT=m
CONFIG_QCS_GCC_404=m
# CONFIG_QCS_Q6SSTOP_404 is not set
# CONFIG_QCS_TURING_404 is not set
+# CONFIG_QDU_ECPRICC_1000 is not set
# CONFIG_QDU_GCC_1000 is not set
CONFIG_QEDE=m
CONFIG_QEDF=m
@@ -6335,6 +6358,7 @@ CONFIG_RAPIDIO_TSI721=m
CONFIG_RASPBERRYPI_FIRMWARE=y
CONFIG_RASPBERRYPI_POWER=y
CONFIG_RATIONAL_KUNIT_TEST=m
+CONFIG_RAVB=m
# CONFIG_RAVE_SP_CORE is not set
# CONFIG_RBTREE_TEST is not set
# CONFIG_RCAR_DMAC is not set
@@ -6374,7 +6398,7 @@ CONFIG_RDS_TCP=m
CONFIG_RD_XZ=y
CONFIG_RD_ZSTD=y
# CONFIG_READABLE_ASM is not set
-# CONFIG_READ_ONLY_THP_FOR_FS is not set
+CONFIG_READ_ONLY_THP_FOR_FS=y
CONFIG_REALTEK_AUTOPM=y
CONFIG_REALTEK_PHY=m
# CONFIG_REED_SOLOMON_TEST is not set
@@ -6440,6 +6464,7 @@ CONFIG_REGULATOR_MP886X=m
# CONFIG_REGULATOR_MT6311 is not set
# CONFIG_REGULATOR_MT6315 is not set
CONFIG_REGULATOR_MT6370=m
+# CONFIG_REGULATOR_NETLINK_EVENTS is not set
CONFIG_REGULATOR_PCA9450=m
CONFIG_REGULATOR_PF8X00=m
CONFIG_REGULATOR_PFUZE100=m
@@ -6507,11 +6532,13 @@ CONFIG_RELOCATABLE=y
# CONFIG_REMOTEPROC_CDEV is not set
CONFIG_REMOTEPROC=y
CONFIG_REMOTE_TARGET=m
-# CONFIG_RENESAS_OSTM is not set
+# CONFIG_RENESAS_ETHER_SWITCH is not set
+CONFIG_RENESAS_GEN4_PTP=m
+CONFIG_RENESAS_OSTM=y
# CONFIG_RENESAS_PHY is not set
# CONFIG_RENESAS_RPCIF is not set
# CONFIG_RENESAS_RZAWDT is not set
-# CONFIG_RENESAS_RZG2LWDT is not set
+CONFIG_RENESAS_RZG2LWDT=m
# CONFIG_RENESAS_RZN1WDT is not set
# CONFIG_RENESAS_USB_DMAC is not set
# CONFIG_RENESAS_WDT is not set
@@ -6688,6 +6715,7 @@ CONFIG_RTC_DRV_M41T94=m
CONFIG_RTC_DRV_M48T35=m
CONFIG_RTC_DRV_M48T59=m
# CONFIG_RTC_DRV_M48T86 is not set
+CONFIG_RTC_DRV_MAX31335=m
CONFIG_RTC_DRV_MAX6900=m
CONFIG_RTC_DRV_MAX6902=m
CONFIG_RTC_DRV_MAX6916=m
@@ -6736,6 +6764,7 @@ CONFIG_RTC_DRV_SUN6I=y
CONFIG_RTC_DRV_TEGRA=m
# CONFIG_RTC_DRV_TEST is not set
CONFIG_RTC_DRV_TI_K3=m
+CONFIG_RTC_DRV_TPS6594=m
CONFIG_RTC_DRV_V3020=m
CONFIG_RTC_DRV_X1205=m
CONFIG_RTC_DRV_XGENE=m
@@ -6805,9 +6834,9 @@ CONFIG_RV_REACT_PRINTK=y
CONFIG_RV=y
CONFIG_RXKAD=y
# CONFIG_RXPERF is not set
-# CONFIG_RZ_DMAC is not set
-# CONFIG_RZG2L_ADC is not set
-# CONFIG_RZG2L_THERMAL is not set
+CONFIG_RZ_DMAC=m
+CONFIG_RZG2L_ADC=m
+CONFIG_RZG2L_THERMAL=m
# CONFIG_RZ_MTU3 is not set
CONFIG_S2IO=m
# CONFIG_S390_KPROBES_SANITY_TEST is not set
@@ -6849,6 +6878,7 @@ CONFIG_SC92031=m
CONFIG_SCA3300=m
CONFIG_SC_CAMCC_7180=m
CONFIG_SC_CAMCC_7280=m
+CONFIG_SC_CAMCC_8280XP=m
CONFIG_SCD30_CORE=m
CONFIG_SCD30_I2C=m
CONFIG_SCD30_SERIAL=m
@@ -7099,6 +7129,7 @@ CONFIG_SENSORS_FSP_3Y=m
CONFIG_SENSORS_FTSTEUTATES=m
CONFIG_SENSORS_G760A=m
CONFIG_SENSORS_G762=m
+CONFIG_SENSORS_GIGABYTE_WATERFORCE=m
CONFIG_SENSORS_GL518SM=m
CONFIG_SENSORS_GL520SM=m
CONFIG_SENSORS_GPIO_FAN=m
@@ -7165,6 +7196,7 @@ CONFIG_SENSORS_LTC4222=m
CONFIG_SENSORS_LTC4245=m
CONFIG_SENSORS_LTC4260=m
CONFIG_SENSORS_LTC4261=m
+# CONFIG_SENSORS_LTC4286 is not set
CONFIG_SENSORS_MAX1111=m
# CONFIG_SENSORS_MAX127 is not set
# CONFIG_SENSORS_MAX15301 is not set
@@ -7192,10 +7224,12 @@ CONFIG_SENSORS_MAX8688=m
CONFIG_SENSORS_MC34VR500=m
CONFIG_SENSORS_MCP3021=m
CONFIG_SENSORS_MLXREG_FAN=m
+# CONFIG_SENSORS_MP2856 is not set
CONFIG_SENSORS_MP2888=m
CONFIG_SENSORS_MP2975=m
CONFIG_SENSORS_MP2975_REGULATOR=y
CONFIG_SENSORS_MP5023=m
+# CONFIG_SENSORS_MP5990 is not set
CONFIG_SENSORS_MPQ7932=m
CONFIG_SENSORS_MPQ7932_REGULATOR=y
CONFIG_SENSORS_MR75203=m
@@ -7291,7 +7325,7 @@ CONFIG_SERIAL_8250_CS=m
CONFIG_SERIAL_8250_DFL=m
CONFIG_SERIAL_8250_DMA=y
CONFIG_SERIAL_8250_DW=y
-# CONFIG_SERIAL_8250_EM is not set
+CONFIG_SERIAL_8250_EM=y
CONFIG_SERIAL_8250_EXAR=m
CONFIG_SERIAL_8250_EXTENDED=y
# CONFIG_SERIAL_8250_FINTEK is not set
@@ -7394,6 +7428,7 @@ CONFIG_SFP=m
CONFIG_SGETMASK_SYSCALL=y
CONFIG_SGI_PARTITION=y
# CONFIG_SHADOW_CALL_STACK is not set
+# CONFIG_SH_ETH is not set
CONFIG_SHMEM=y
# CONFIG_SHRINKER_DEBUG is not set
CONFIG_SHUFFLE_PAGE_ALLOCATOR=y
@@ -7413,10 +7448,8 @@ CONFIG_SKGE_GENESIS=y
CONFIG_SKGE=m
# CONFIG_SKY2_DEBUG is not set
CONFIG_SKY2=m
-# CONFIG_SLAB_DEPRECATED is not set
CONFIG_SLAB_FREELIST_HARDENED=y
CONFIG_SLAB_FREELIST_RANDOM=y
-# CONFIG_SLAB is not set
# CONFIG_SLAB_MERGE_DEFAULT is not set
CONFIG_SLIMBUS=m
CONFIG_SLIM_QCOM_CTRL=m
@@ -7444,6 +7477,7 @@ CONFIG_SMC=m
# CONFIG_SM_DISPCC_8250 is not set
CONFIG_SM_DISPCC_8450=m
# CONFIG_SM_DISPCC_8550 is not set
+CONFIG_SM_DISPCC_8650=m
# CONFIG_SM_FTL is not set
# CONFIG_SM_GCC_4450 is not set
# CONFIG_SM_GCC_6115 is not set
@@ -7456,6 +7490,7 @@ CONFIG_SM_GCC_8250=m
CONFIG_SM_GCC_8350=m
CONFIG_SM_GCC_8450=m
CONFIG_SM_GCC_8550=m
+CONFIG_SM_GCC_8650=m
# CONFIG_SM_GPUCC_6115 is not set
# CONFIG_SM_GPUCC_6125 is not set
# CONFIG_SM_GPUCC_6350 is not set
@@ -7465,6 +7500,7 @@ CONFIG_SM_GCC_8550=m
# CONFIG_SM_GPUCC_8350 is not set
# CONFIG_SM_GPUCC_8450 is not set
# CONFIG_SM_GPUCC_8550 is not set
+CONFIG_SM_GPUCC_8650=m
CONFIG_SMPRO_ERRMON=m
CONFIG_SMPRO_MISC=m
CONFIG_SMP=y
@@ -7478,6 +7514,7 @@ CONFIG_SMS_SIANO_MDTV=m
CONFIG_SMS_SIANO_RC=y
CONFIG_SMS_USB_DRV=m
# CONFIG_SM_TCSRCC_8550 is not set
+CONFIG_SM_TCSRCC_8650=m
# CONFIG_SM_VIDEOCC_8150 is not set
# CONFIG_SM_VIDEOCC_8250 is not set
CONFIG_SM_VIDEOCC_8350=m
@@ -7948,7 +7985,7 @@ CONFIG_SND_SOC_RT715_SDW=m
CONFIG_SND_SOC_RT722_SDCA_SDW=m
# CONFIG_SND_SOC_RT9120 is not set
CONFIG_SND_SOC_RTQ9128=m
-# CONFIG_SND_SOC_RZ is not set
+CONFIG_SND_SOC_RZ=m
# CONFIG_SND_SOC_SAMSUNG_ARIES_WM8994 is not set
# CONFIG_SND_SOC_SAMSUNG is not set
CONFIG_SND_SOC_SAMSUNG_MIDAS_WM1811=m
@@ -8117,6 +8154,7 @@ CONFIG_SND_SOC_WM8962=m
# CONFIG_SND_SOC_WSA881X is not set
CONFIG_SND_SOC_WSA883X=m
CONFIG_SND_SOC_WSA884X=m
+CONFIG_SND_SOC_X1E80100=m
CONFIG_SND_SOC_XILINX_AUDIO_FORMATTER=m
CONFIG_SND_SOC_XILINX_I2S=m
CONFIG_SND_SOC_XILINX_SPDIF=m
@@ -8255,7 +8293,7 @@ CONFIG_SPI_QCOM_QSPI=m
CONFIG_SPI_QUP=m
CONFIG_SPI_ROCKCHIP=m
CONFIG_SPI_ROCKCHIP_SFC=m
-# CONFIG_SPI_RSPI is not set
+CONFIG_SPI_RSPI=m
# CONFIG_SPI_RZV2M_CSI is not set
# CONFIG_SPI_SC18IS602 is not set
# CONFIG_SPI_SH_HSPI is not set
@@ -8316,6 +8354,7 @@ CONFIG_SSB_PCIHOST=y
CONFIG_SSB_SDIOHOST=y
# CONFIG_SSFDC is not set
CONFIG_SSIF_IPMI_BMC=m
+CONFIG_STACKDEPOT_MAX_FRAMES=64
CONFIG_STACK_HASH_ORDER=20
CONFIG_STACKINIT_KUNIT_TEST=m
CONFIG_STACKPROTECTOR_STRONG=y
@@ -8515,6 +8554,7 @@ CONFIG_TCP_MD5SIG=y
CONFIG_TCS3472=m
CONFIG_TDX_GUEST_DRIVER=m
CONFIG_TEE=m
+CONFIG_TEE_STMM_EFI=m
CONFIG_TEGRA124_EMC=m
CONFIG_TEGRA186_GPC_DMA=m
CONFIG_TEGRA186_TIMER=y
@@ -8589,6 +8629,7 @@ CONFIG_TEST_STRING_HELPERS=m
# CONFIG_TEST_UUID is not set
CONFIG_TEST_VMALLOC=m
# CONFIG_TEST_XARRAY is not set
+# CONFIG_THERMAL_DEBUGFS is not set
# CONFIG_THERMAL_DEFAULT_GOV_BANG_BANG is not set
# CONFIG_THERMAL_DEFAULT_GOV_FAIR_SHARE is not set
CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y
@@ -8629,6 +8670,7 @@ CONFIG_TI_ADS7924=m
CONFIG_TI_ADS8344=m
# CONFIG_TI_ADS8688 is not set
CONFIG_TI_AM335X_ADC=m
+CONFIG_TI_AM65_CPSW_QOS=y
CONFIG_TI_AM65_CPSW_TAS=y
# CONFIG_TICK_CPU_ACCOUNTING is not set
# CONFIG_TI_CPSW_PHY_SEL is not set
@@ -8819,6 +8861,7 @@ CONFIG_TRACE_EVAL_MAP_FILE=y
CONFIG_TRACER_SNAPSHOT=y
# CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS is not set
CONFIG_TRANSPARENT_HUGEPAGE_MADVISE=y
+# CONFIG_TRANSPARENT_HUGEPAGE_NEVER is not set
CONFIG_TRANSPARENT_HUGEPAGE=y
# CONFIG_TRIM_UNUSED_KSYMS is not set
CONFIG_TRUSTED_FOUNDATIONS=y
@@ -8858,6 +8901,7 @@ CONFIG_TYPEC_MUX_GPIO_SBU=m
CONFIG_TYPEC_MUX_NB7VPQ904M=m
CONFIG_TYPEC_MUX_PI3USB30532=m
CONFIG_TYPEC_MUX_PTN36502=m
+# CONFIG_TYPEC_MUX_WCD939X_USBSS is not set
CONFIG_TYPEC_NVIDIA_ALTMODE=m
CONFIG_TYPEC_QCOM_PMIC=m
# CONFIG_TYPEC_RT1711H is not set
@@ -9183,7 +9227,6 @@ CONFIG_USB_NET_NET1080=m
CONFIG_USB_NET_PLUSB=m
CONFIG_USB_NET_QMI_WWAN=m
CONFIG_USB_NET_RNDIS_HOST=m
-CONFIG_USB_NET_RNDIS_WLAN=m
CONFIG_USB_NET_SMSC75XX=m
CONFIG_USB_NET_SMSC95XX=m
CONFIG_USB_NET_SR9700=m
@@ -9224,6 +9267,7 @@ CONFIG_USB_ROLE_SWITCH=y
CONFIG_USB_RTL8150=m
CONFIG_USB_RTL8152=m
CONFIG_USB_RTL8153_ECM=m
+CONFIG_USB_RZV2M_USB3DRD=m
CONFIG_USB_S2255=m
CONFIG_USB_SERIAL_AIRCABLE=m
CONFIG_USB_SERIAL_ARK3116=m
@@ -9332,11 +9376,11 @@ CONFIG_USB_XHCI_PCI_RENESAS=y
CONFIG_USB_XHCI_PCI=y
CONFIG_USB_XHCI_PLATFORM=m
CONFIG_USB_XHCI_RCAR=m
+CONFIG_USB_XHCI_RZV2M=y
CONFIG_USB_XHCI_TEGRA=m
CONFIG_USB_XUSBATM=m
CONFIG_USB=y
CONFIG_USB_YUREX=m
-# CONFIG_USB_ZD1201 is not set
# CONFIG_USB_ZERO is not set
CONFIG_USB_ZR364XX=m
# CONFIG_USELIB is not set
@@ -9353,6 +9397,7 @@ CONFIG_V4L_MEM2MEM_DRIVERS=y
CONFIG_V4L_PLATFORM_DRIVERS=y
CONFIG_V4L_TEST_DRIVERS=y
CONFIG_VALIDATE_FS_PARSER=y
+CONFIG_VCAP=y
CONFIG_VCHIQ_CDEV=y
CONFIG_VCNL3020=m
CONFIG_VCNL4000=m
@@ -9366,6 +9411,7 @@ CONFIG_VDPA_USER=m
CONFIG_VDSO=y
CONFIG_VEML6030=m
CONFIG_VEML6070=m
+# CONFIG_VEML6075 is not set
CONFIG_VETH=m
CONFIG_VEXPRESS_CONFIG=y
# CONFIG_VF610_ADC is not set
@@ -9374,6 +9420,7 @@ CONFIG_VFAT_FS=m
CONFIG_VFIO_AMBA=m
CONFIG_VFIO_CDX=m
CONFIG_VFIO_CONTAINER=y
+# CONFIG_VFIO_DEBUGFS is not set
# CONFIG_VFIO_DEVICE_CDEV is not set
CONFIG_VFIO_FSL_MC=m
CONFIG_VFIO_GROUP=y
@@ -9416,6 +9463,7 @@ CONFIG_VIDEO_ADV7842=m
CONFIG_VIDEO_AK7375=m
CONFIG_VIDEO_AK881X=m
CONFIG_VIDEO_ALLEGRO_DVT=m
+# CONFIG_VIDEO_ALVIUM_CSI2 is not set
CONFIG_VIDEO_AMPHION_VPU=m
CONFIG_VIDEO_AR0521=m
CONFIG_VIDEO_AU0828=m
@@ -9468,6 +9516,8 @@ CONFIG_VIDEO_EM28XX_V4L2=m
CONFIG_VIDEO_ET8EK8=m
CONFIG_VIDEO_FB_IVTV=m
# CONFIG_VIDEO_FIXED_MINOR_RANGES is not set
+CONFIG_VIDEO_GC0308=m
+CONFIG_VIDEO_GC2145=m
CONFIG_VIDEO_GO7007_LOADER=m
CONFIG_VIDEO_GO7007=m
CONFIG_VIDEO_GO7007_USB=m
@@ -9553,6 +9603,7 @@ CONFIG_VIDEO_OV5670=m
CONFIG_VIDEO_OV5675=m
CONFIG_VIDEO_OV5693=m
CONFIG_VIDEO_OV5695=m
+CONFIG_VIDEO_OV64A40=m
CONFIG_VIDEO_OV6650=m
CONFIG_VIDEO_OV7251=m
CONFIG_VIDEO_OV7640=m
@@ -9577,14 +9628,16 @@ CONFIG_VIDEO_QCOM_VENUS=m
# CONFIG_VIDEO_RCAR_VIN is not set
CONFIG_VIDEO_RDACM20=m
# CONFIG_VIDEO_RDACM21 is not set
-# CONFIG_VIDEO_RENESAS_FCP is not set
+CONFIG_VIDEO_RENESAS_FCP=m
+CONFIG_VIDEO_RENESAS_FDP1=m
# CONFIG_VIDEO_RENESAS_JPU is not set
+CONFIG_VIDEO_RENESAS_VSP1=m
CONFIG_VIDEO_RJ54N1=m
CONFIG_VIDEO_ROCKCHIP_ISP1=m
CONFIG_VIDEO_ROCKCHIP_RGA=m
CONFIG_VIDEO_ROCKCHIP_VDEC=m
-# CONFIG_VIDEO_RZG2L_CRU is not set
-# CONFIG_VIDEO_RZG2L_CSI2 is not set
+CONFIG_VIDEO_RZG2L_CRU=m
+CONFIG_VIDEO_RZG2L_CSI2=m
CONFIG_VIDEO_S5C73M3=m
CONFIG_VIDEO_S5K4ECGX=m
CONFIG_VIDEO_S5K5BAF=m
@@ -9631,6 +9684,7 @@ CONFIG_VIDEO_TEA6420=m
CONFIG_VIDEO_TEGRA=m
# CONFIG_VIDEO_TEGRA_TPG is not set
CONFIG_VIDEO_TEGRA_VDE=m
+# CONFIG_VIDEO_THP7312 is not set
CONFIG_VIDEO_THS7303=m
CONFIG_VIDEO_THS8200=m
CONFIG_VIDEO_TI_CAL=m
@@ -9649,6 +9703,7 @@ CONFIG_VIDEO_TW2804=m
# CONFIG_VIDEO_TW5864 is not set
CONFIG_VIDEO_TW686X=m
# CONFIG_VIDEO_TW68 is not set
+# CONFIG_VIDEO_TW9900 is not set
CONFIG_VIDEO_TW9903=m
CONFIG_VIDEO_TW9906=m
CONFIG_VIDEO_TW9910=m
@@ -9667,6 +9722,7 @@ CONFIG_VIDEO_VIVID=m
CONFIG_VIDEO_VIVID_MAX_DEVS=64
CONFIG_VIDEO_VP27SMPX=m
CONFIG_VIDEO_VPX3220=m
+CONFIG_VIDEO_WAVE_VPU=m
CONFIG_VIDEO_WM8739=m
CONFIG_VIDEO_WM8775=m
# CONFIG_VIDEO_XILINX is not set
@@ -9691,6 +9747,7 @@ CONFIG_VIRTIO_PCI_LEGACY=y
CONFIG_VIRTIO_PCI=y
# CONFIG_VIRTIO_PMEM is not set
CONFIG_VIRTIO_VDPA=m
+CONFIG_VIRTIO_VFIO_PCI=m
CONFIG_VIRTIO_VSOCKETS=m
CONFIG_VIRTIO=y
CONFIG_VIRTUALIZATION=y
@@ -9732,6 +9789,7 @@ CONFIG_VXLAN=m
# CONFIG_VZ89X is not set
CONFIG_W1_CON=y
CONFIG_W1=m
+# CONFIG_W1_MASTER_AMD_AXI is not set
# CONFIG_W1_MASTER_DS1WM is not set
CONFIG_W1_MASTER_DS2482=m
CONFIG_W1_MASTER_DS2490=m
@@ -9809,7 +9867,7 @@ CONFIG_WLAN_VENDOR_ATH=y
CONFIG_WLAN_VENDOR_BROADCOM=y
# CONFIG_WLAN_VENDOR_CISCO is not set
CONFIG_WLAN_VENDOR_INTEL=y
-CONFIG_WLAN_VENDOR_INTERSIL=y
+# CONFIG_WLAN_VENDOR_INTERSIL is not set
CONFIG_WLAN_VENDOR_MARVELL=y
CONFIG_WLAN_VENDOR_MEDIATEK=y
CONFIG_WLAN_VENDOR_MICROCHIP=y
@@ -9883,7 +9941,7 @@ CONFIG_XILINX_PR_DECOUPLER=m
CONFIG_XILINX_SDFEC=m
CONFIG_XILINX_VCU=m
# CONFIG_XILINX_WATCHDOG is not set
-# CONFIG_XILINX_WINDOW_WATCHDOG is not set
+CONFIG_XILINX_WINDOW_WATCHDOG=m
CONFIG_XILINX_XADC=m
CONFIG_XILINX_XDMA=m
CONFIG_XILINX_ZYNQMP_DMA=m
@@ -9934,6 +9992,7 @@ CONFIG_ZRAM_DEF_COMP_LZORLE=y
CONFIG_ZRAM=m
CONFIG_ZRAM_MEMORY_TRACKING=y
CONFIG_ZRAM_MULTI_COMP=y
+CONFIG_ZRAM_TRACK_ENTRY_ACTIME=y
# CONFIG_ZRAM_WRITEBACK is not set
CONFIG_ZSMALLOC_CHAIN_SIZE=8
# CONFIG_ZSMALLOC_STAT is not set
@@ -9946,6 +10005,7 @@ CONFIG_ZSWAP_COMPRESSOR_DEFAULT_LZO=y
# CONFIG_ZSWAP_COMPRESSOR_DEFAULT_ZSTD is not set
# CONFIG_ZSWAP_DEFAULT_ON is not set
CONFIG_ZSWAP_EXCLUSIVE_LOADS_DEFAULT_ON=y
+CONFIG_ZSWAP_SHRINKER_DEFAULT_ON=y
CONFIG_ZSWAP=y
# CONFIG_ZSWAP_ZPOOL_DEFAULT_Z3FOLD is not set
CONFIG_ZSWAP_ZPOOL_DEFAULT_ZBUD=y
@@ -9960,7 +10020,7 @@ CONFIG_ZENIFY=y
CONFIG_NTSYNC=y
CONFIG_USER_NS_UNPRIVILEGED=y
CONFIG_TCP_CONG_BBR2=m
-# CONFIG_SCHED_PDS is not set
+CONFIG_SCHED_BORE=y
CONFIG_HID_IPTS=m
CONFIG_HID_ITHC=m
CONFIG_SURFACE_BOOK1_DGPU_SWITCH=m
@@ -9969,11 +10029,8 @@ CONFIG_LEDS_TPS68470=m
CONFIG_SENSORS_SURFACE_FAN=m
CONFIG_SENSORS_SURFACE_TEMP=m
CONFIG_DRM_AMD_COLOR_STEAMDECK=y
-CONFIG_BMI323_I2C=m
-CONFIG_BMI323_SPI=m
CONFIG_DRM_APPLETBDRM=m
CONFIG_HID_APPLETB_BL=m
CONFIG_HID_APPLETB_KBD=m
CONFIG_HID_APPLE_MAGIC_BACKLIGHT=m
CONFIG_APPLE_BCE=m
-CONFIG_SCHED_BORE=y
diff --git a/SOURCES/kernel-aarch64-debug-rhel.config b/SOURCES/kernel-aarch64-debug-rhel.config
index b58273c..eb4dcef 100644
--- a/SOURCES/kernel-aarch64-debug-rhel.config
+++ b/SOURCES/kernel-aarch64-debug-rhel.config
@@ -91,6 +91,7 @@ CONFIG_ACPI=y
# CONFIG_AD5791 is not set
# CONFIG_AD5933 is not set
# CONFIG_AD7091R5 is not set
+# CONFIG_AD7091R8 is not set
# CONFIG_AD7124 is not set
# CONFIG_AD7150 is not set
# CONFIG_AD7192 is not set
@@ -217,6 +218,7 @@ CONFIG_AMD_PHY=m
CONFIG_AMD_PMC=m
# CONFIG_AMD_PTDMA is not set
# CONFIG_AMDTEE is not set
+# CONFIG_AMD_WBRF is not set
# CONFIG_AMD_XGBE_DCB is not set
CONFIG_AMD_XGBE=m
# CONFIG_AMIGA_PARTITION is not set
@@ -225,6 +227,7 @@ CONFIG_AMPERE_ERRATUM_AC03_CPU_38=y
# CONFIG_AMT is not set
# CONFIG_ANDROID_BINDER_IPC is not set
# CONFIG_ANON_VMA_NAME is not set
+# CONFIG_AOSONG_AGS02MA is not set
# CONFIG_APDS9300 is not set
# CONFIG_APDS9802ALS is not set
# CONFIG_APDS9960 is not set
@@ -503,6 +506,7 @@ CONFIG_BACKLIGHT_LED=m
# CONFIG_BACKLIGHT_LM3639 is not set
CONFIG_BACKLIGHT_LP855X=m
# CONFIG_BACKLIGHT_LV5207LP is not set
+# CONFIG_BACKLIGHT_MP3309C is not set
CONFIG_BACKLIGHT_PWM=m
# CONFIG_BACKLIGHT_QCOM_WLED is not set
# CONFIG_BACKLIGHT_SAHARA is not set
@@ -602,6 +606,7 @@ CONFIG_BLK_DEV_SR=m
# CONFIG_BLK_DEV_THROTTLING_LOW is not set
CONFIG_BLK_DEV_THROTTLING=y
# CONFIG_BLK_DEV_UBLK is not set
+CONFIG_BLK_DEV_WRITE_MOUNTED=y
CONFIG_BLK_DEV=y
CONFIG_BLK_DEV_ZONED=y
# CONFIG_BLK_INLINE_ENCRYPTION is not set
@@ -621,6 +626,8 @@ CONFIG_BLOCK=y
# CONFIG_BMI088_ACCEL is not set
# CONFIG_BMI160_I2C is not set
# CONFIG_BMI160_SPI is not set
+CONFIG_BMI323_I2C=m
+CONFIG_BMI323_SPI=m
# CONFIG_BMP280 is not set
# CONFIG_BNA is not set
CONFIG_BNX2=m
@@ -636,7 +643,6 @@ CONFIG_BONDING=m
# CONFIG_BOOT_CONFIG_FORCE is not set
CONFIG_BOOT_CONFIG=y
# CONFIG_BOOTPARAM_HARDLOCKUP_PANIC is not set
-# CONFIG_BOOTPARAM_HOTPLUG_CPU0 is not set
# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
@@ -1103,7 +1109,6 @@ CONFIG_CRYPTO_CAST5=m
CONFIG_CRYPTO_CAST6=m
CONFIG_CRYPTO_CBC=y
CONFIG_CRYPTO_CCM=y
-CONFIG_CRYPTO_CFB=y
CONFIG_CRYPTO_CHACHA20=m
CONFIG_CRYPTO_CHACHA20_NEON=y
CONFIG_CRYPTO_CHACHA20POLY1305=m
@@ -1155,6 +1160,7 @@ CONFIG_CRYPTO_DEV_HISI_SEC=m
CONFIG_CRYPTO_DEV_NITROX_CNN55XX=m
CONFIG_CRYPTO_DEV_OCTEONTX2_CPT=m
# CONFIG_CRYPTO_DEV_OCTEONTX_CPT is not set
+# CONFIG_CRYPTO_DEV_QAT_420XX is not set
# CONFIG_CRYPTO_DEV_QAT_4XXX is not set
# CONFIG_CRYPTO_DEV_QAT_C3XXX is not set
# CONFIG_CRYPTO_DEV_QAT_C3XXXVF is not set
@@ -1216,7 +1222,6 @@ CONFIG_CRYPTO_MD5=y
CONFIG_CRYPTO_MICHAEL_MIC=m
CONFIG_CRYPTO_NHPOLY1305_NEON=m
CONFIG_CRYPTO_NULL=y
-CONFIG_CRYPTO_OFB=y
CONFIG_CRYPTO_PCBC=m
CONFIG_CRYPTO_PCRYPT=m
CONFIG_CRYPTO_POLY1305=m
@@ -1374,7 +1379,7 @@ CONFIG_DEBUG_STACK_USAGE=y
# CONFIG_DEBUG_VM_MAPLE_TREE is not set
# CONFIG_DEBUG_VM_PGFLAGS is not set
CONFIG_DEBUG_VM_PGTABLE=y
-# CONFIG_DEBUG_VM_RB is not set # revisit this if performance isn't horrible
+# CONFIG_DEBUG_VM_RB is not set
# CONFIG_DEBUG_VM_SHOOT_LAZIES is not set
# CONFIG_DEBUG_VM_VMACACHE is not set
# CONFIG_DEBUG_WQ_FORCE_RR_CPU is not set
@@ -1487,6 +1492,7 @@ CONFIG_DP83867_PHY=m
# CONFIG_DP83869_PHY is not set
CONFIG_DP83TC811_PHY=m
# CONFIG_DP83TD510_PHY is not set
+# CONFIG_DP83TG720_PHY is not set
CONFIG_DPAA2_CONSOLE=m
# CONFIG_DPM_WATCHDOG is not set
# CONFIG_DPOT_DAC is not set
@@ -1545,6 +1551,7 @@ CONFIG_DRM_I915_COMPRESS_ERROR=y
# CONFIG_DRM_I915_DEBUG_MMIO is not set
# CONFIG_DRM_I915_DEBUG_RUNTIME_PM is not set
# CONFIG_DRM_I915_DEBUG_VBLANK_EVADE is not set
+# CONFIG_DRM_I915_DEBUG_WAKEREF is not set
CONFIG_DRM_I915_FENCE_TIMEOUT=10000
CONFIG_DRM_I915_HEARTBEAT_INTERVAL=2500
# CONFIG_DRM_I915_LOW_LEVEL_TRACEPOINTS is not set
@@ -1589,6 +1596,7 @@ CONFIG_DRM_MGAG200=m
# CONFIG_DRM_MSM is not set
# CONFIG_DRM_MXSFB is not set
CONFIG_DRM_NOUVEAU_BACKLIGHT=y
+# CONFIG_DRM_NOUVEAU_GSP_DEFAULT is not set
CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_NWL_MIPI_DSI is not set
# CONFIG_DRM_NXP_PTN3460 is not set
@@ -1609,6 +1617,7 @@ CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_PANEL_HIMAX_HX8394 is not set
# CONFIG_DRM_PANEL_ILITEK_IL9322 is not set
# CONFIG_DRM_PANEL_ILITEK_ILI9341 is not set
+# CONFIG_DRM_PANEL_ILITEK_ILI9805 is not set
# CONFIG_DRM_PANEL_ILITEK_ILI9881C is not set
# CONFIG_DRM_PANEL_ILITEK_ILI9882T is not set
# CONFIG_DRM_PANEL_INNOLUX_EJ030NA is not set
@@ -1671,6 +1680,7 @@ CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_PANEL_SONY_TD4353_JDI is not set
# CONFIG_DRM_PANEL_SONY_TULIP_TRULY_NT35521 is not set
# CONFIG_DRM_PANEL_STARTEK_KD070FHFID015 is not set
+# CONFIG_DRM_PANEL_SYNAPTICS_R63353 is not set
# CONFIG_DRM_PANEL_TDO_TL070WSH30 is not set
# CONFIG_DRM_PANEL_TPO_TD028TTEC1 is not set
# CONFIG_DRM_PANEL_TPO_TD043MTEA1 is not set
@@ -1685,6 +1695,7 @@ CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_PARADE_PS8622 is not set
# CONFIG_DRM_PARADE_PS8640 is not set
# CONFIG_DRM_PL111 is not set
+# CONFIG_DRM_POWERVR is not set
CONFIG_DRM_QXL=m
CONFIG_DRM_RADEON=m
CONFIG_DRM_RADEON_USERPTR=y
@@ -1725,6 +1736,7 @@ CONFIG_DRM_VKMS=m
CONFIG_DRM_VMWGFX_FBCON=y
CONFIG_DRM_VMWGFX=m
# CONFIG_DRM_VMWGFX_MKSSTATS is not set
+# CONFIG_DRM_XE is not set
# CONFIG_DRM_XEN_FRONTEND is not set
CONFIG_DRM=y
# CONFIG_DS1682 is not set
@@ -1823,6 +1835,7 @@ CONFIG_DVB_USB_VP702X=m
CONFIG_DVB_USB_VP7045=m
# CONFIG_DVB_USB_ZD1301 is not set
# CONFIG_DW_AXI_DMAC is not set
+# CONFIG_DWC_PCIE_PMU is not set
CONFIG_DW_DMAC=m
CONFIG_DW_DMAC_PCI=m
# CONFIG_DW_EDMA is not set
@@ -1904,6 +1917,7 @@ CONFIG_EPOLL=y
# CONFIG_EQUALIZER is not set
# CONFIG_EROFS_FS_DEBUG is not set
CONFIG_EROFS_FS=m
+# CONFIG_EROFS_FS_ONDEMAND is not set
CONFIG_EROFS_FS_POSIX_ACL=y
CONFIG_EROFS_FS_SECURITY=y
CONFIG_EROFS_FS_XATTR=y
@@ -1972,7 +1986,6 @@ CONFIG_FAULT_INJECTION=y
# CONFIG_FB_3DFX is not set
# CONFIG_FB_ARC is not set
# CONFIG_FB_ARK is not set
-# CONFIG_FB_ARMCLCD is not set
# CONFIG_FB_ASILIANT is not set
# CONFIG_FB_ATY128 is not set
# CONFIG_FB_ATY is not set
@@ -1992,7 +2005,6 @@ CONFIG_FB_EFI=y
# CONFIG_FB_IMSTT is not set
# CONFIG_FB_IMX is not set
# CONFIG_FB_KYRO is not set
-# CONFIG_FB_LE80578 is not set
# CONFIG_FB_MATROX_G is not set
# CONFIG_FB_MATROX_I2C is not set
# CONFIG_FB_MATROX is not set
@@ -2060,11 +2072,12 @@ CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
CONFIG_FRAMEBUFFER_CONSOLE=y
CONFIG_FRAME_POINTER=y
+# CONFIG_FRAMER is not set
CONFIG_FRAME_WARN=2048
CONFIG_FRONTSWAP=y
# CONFIG_FSCACHE_DEBUG is not set
-CONFIG_FSCACHE=m
CONFIG_FSCACHE_STATS=y
+CONFIG_FSCACHE=y
CONFIG_FS_DAX=y
# CONFIG_FS_ENCRYPTION is not set
# CONFIG_FSI is not set
@@ -2276,6 +2289,7 @@ CONFIG_HASHTABLE_KUNIT_TEST=m
# CONFIG_HD44780 is not set
# CONFIG_HDC100X is not set
# CONFIG_HDC2010 is not set
+# CONFIG_HDC3020 is not set
CONFIG_HDLC_CISCO=m
CONFIG_HDLC_FR=m
CONFIG_HDLC=m
@@ -2350,6 +2364,7 @@ CONFIG_HID_LOGITECH=m
CONFIG_HID_MAGICMOUSE=y
# CONFIG_HID_MALTRON is not set
# CONFIG_HID_MAYFLASH is not set
+# CONFIG_HID_MCP2200 is not set
# CONFIG_HID_MCP2221 is not set
# CONFIG_HID_MEGAWORLD_FF is not set
CONFIG_HID_MICROSOFT=m
@@ -2460,6 +2475,7 @@ CONFIG_HP_WATCHDOG=m
CONFIG_HSA_AMD_P2P=y
CONFIG_HSA_AMD_SVM=y
CONFIG_HSA_AMD=y
+# CONFIG_HSC030PA is not set
# CONFIG_HSI is not set
CONFIG_HSR=m
# CONFIG_HT16K33 is not set
@@ -2615,6 +2631,7 @@ CONFIG_IAVF=m
# CONFIG_IB700_WDT is not set
# CONFIG_IBM_ASM is not set
CONFIG_IBMASR=m
+CONFIG_ICE_HWMON=y
CONFIG_ICE_HWTS=y
CONFIG_ICE=m
CONFIG_ICE_SWITCHDEV=y
@@ -2738,6 +2755,7 @@ CONFIG_INFINIBAND_BNXT_RE=m
CONFIG_INFINIBAND_CXGB4=m
CONFIG_INFINIBAND_EFA=m
# CONFIG_INFINIBAND_ERDMA is not set
+# CONFIG_INFINIBAND_HFI1 is not set
# CONFIG_INFINIBAND_HNS is not set
CONFIG_INFINIBAND_IPOIB_CM=y
# CONFIG_INFINIBAND_IPOIB_DEBUG_DATA is not set
@@ -2752,14 +2770,14 @@ CONFIG_INFINIBAND=m
CONFIG_INFINIBAND_ON_DEMAND_PAGING=y
CONFIG_INFINIBAND_QEDR=m
# CONFIG_INFINIBAND_QIB is not set
-CONFIG_INFINIBAND_RDMAVT=m
+# CONFIG_INFINIBAND_RDMAVT is not set
# CONFIG_INFINIBAND_RTRS_CLIENT is not set
# CONFIG_INFINIBAND_RTRS_SERVER is not set
CONFIG_INFINIBAND_SRP=m
CONFIG_INFINIBAND_SRPT=m
CONFIG_INFINIBAND_USER_ACCESS=m
CONFIG_INFINIBAND_USER_MAD=m
-CONFIG_INFINIBAND_USNIC=m
+# CONFIG_INFINIBAND_USNIC is not set
# CONFIG_INFINIBAND_VMWARE_PVRDMA is not set
# CONFIG_INFTL is not set
# CONFIG_INIT_ON_ALLOC_DEFAULT_ON is not set
@@ -2848,10 +2866,11 @@ CONFIG_INTEL_IOMMU_PERF_EVENTS=y
# CONFIG_INTEL_ISH_FIRMWARE_DOWNLOADER is not set
# CONFIG_INTEL_ISHTP_ECLITE is not set
# CONFIG_INTEL_LDMA is not set
-# CONFIG_INTEL_MEI_GSC_PROXY is not set
+CONFIG_INTEL_MEI_GSC_PROXY=m
# CONFIG_INTEL_MEI_HDCP is not set
# CONFIG_INTEL_MEI_PXP is not set
# CONFIG_INTEL_MEI_TXE is not set
+# CONFIG_INTEL_MEI_VSC_HW is not set
# CONFIG_INTEL_PMC_CORE is not set
# CONFIG_INTEL_PMT_CLASS is not set
# CONFIG_INTEL_PMT_CRASHLOG is not set
@@ -3092,6 +3111,7 @@ CONFIG_ISCSI_TCP=m
# CONFIG_ISL29020 is not set
# CONFIG_ISL29125 is not set
# CONFIG_ISL29501 is not set
+# CONFIG_ISL76682 is not set
CONFIG_ISO9660_FS=m
CONFIG_IS_SIGNED_TYPE_KUNIT_TEST=m
# CONFIG_IT8712F_WDT is not set
@@ -3134,6 +3154,7 @@ CONFIG_KALLSYMS_BASE_RELATIVE=y
# CONFIG_KALLSYMS_SELFTEST is not set
CONFIG_KALLSYMS=y
# CONFIG_KARMA_PARTITION is not set
+# CONFIG_KASAN_EXTRA_INFO is not set
CONFIG_KASAN_GENERIC=y
# CONFIG_KASAN_HW_TAGS is not set
CONFIG_KASAN_INLINE=y
@@ -3230,9 +3251,11 @@ CONFIG_KUNIT_TEST=m
CONFIG_KVM_AMD_SEV=y
# CONFIG_KVM_BOOK3S_HV_P8_TIMING is not set
# CONFIG_KVM_BOOK3S_HV_P9_TIMING is not set
+CONFIG_KVM_HYPERV=y
CONFIG_KVM_MAX_NR_VCPUS=4096
CONFIG_KVM_PROVE_MMU=y
CONFIG_KVM_SMM=y
+CONFIG_KVM_SW_PROTECTED_VM=y
# CONFIG_KVM_WERROR is not set
# CONFIG_KVM_XEN is not set
CONFIG_KVM=y
@@ -3410,6 +3433,7 @@ CONFIG_LSM_MMAP_MIN_ADDR=65535
# CONFIG_LTO_CLANG_FULL is not set
# CONFIG_LTO_CLANG_THIN is not set
CONFIG_LTO_NONE=y
+# CONFIG_LTR390 is not set
# CONFIG_LTR501 is not set
# CONFIG_LTRF216A is not set
# CONFIG_LV0104CS is not set
@@ -3449,7 +3473,7 @@ CONFIG_MAILBOX=y
CONFIG_MANTIS_CORE=m
# CONFIG_MARCH_Z16 is not set
CONFIG_MARVELL_10G_PHY=m
-# CONFIG_MARVELL_88Q2XXX_PHY is not set
+CONFIG_MARVELL_88Q2XXX_PHY=m
# CONFIG_MARVELL_88X2222_PHY is not set
CONFIG_MARVELL_CN10K_DDR_PMU=m
CONFIG_MARVELL_CN10K_TAD_PMU=m
@@ -3469,6 +3493,7 @@ CONFIG_MARVELL_PHY=m
# CONFIG_MAX31827 is not set
# CONFIG_MAX31856 is not set
# CONFIG_MAX31865 is not set
+# CONFIG_MAX34408 is not set
# CONFIG_MAX44000 is not set
# CONFIG_MAX44009 is not set
# CONFIG_MAX517 is not set
@@ -3497,7 +3522,9 @@ CONFIG_MAX_SKB_FRAGS=17
# CONFIG_MCP4531 is not set
# CONFIG_MCP4725 is not set
# CONFIG_MCP4728 is not set
+# CONFIG_MCP4821 is not set
# CONFIG_MCP4922 is not set
+# CONFIG_MCP9600 is not set
# CONFIG_MCTP is not set
CONFIG_MD_AUTODETECT=y
CONFIG_MD_BITMAP_FILE=y
@@ -3727,8 +3754,8 @@ CONFIG_MITIGATE_SPECTRE_BRANCH_HISTORY=y
CONFIG_MLX4_CORE=m
CONFIG_MLX4_DEBUG=y
CONFIG_MLX4_EN_DCB=y
-CONFIG_MLX4_EN=m
-CONFIG_MLX4_INFINIBAND=m
+# CONFIG_MLX4_EN is not set
+# CONFIG_MLX4_INFINIBAND is not set
CONFIG_MLX5_ACCEL=y
CONFIG_MLX5_CLS_ACT=y
CONFIG_MLX5_CORE_EN_DCB=y
@@ -3759,6 +3786,7 @@ CONFIG_MLX5_VDPA_NET=m
CONFIG_MLX5_VFIO_PCI=m
# CONFIG_MLX90614 is not set
# CONFIG_MLX90632 is not set
+# CONFIG_MLX90635 is not set
CONFIG_MLXBF_BOOTCTL=m
CONFIG_MLXBF_GIGE=m
# CONFIG_MLXBF_PMC is not set
@@ -3927,7 +3955,7 @@ CONFIG_MT76x2U=m
CONFIG_MT7921E=m
# CONFIG_MT7921S is not set
# CONFIG_MT7921U is not set
-# CONFIG_MT7925E is not set
+CONFIG_MT7925E=m
# CONFIG_MT7925U is not set
# CONFIG_MT7996E is not set
# CONFIG_MTD_ABSENT is not set
@@ -3990,6 +4018,7 @@ CONFIG_MTD_SPI_NOR_SWP_DISABLE_ON_VOLATILE=y
CONFIG_MTD_UBI_BEB_LIMIT=20
# CONFIG_MTD_UBI_BLOCK is not set
# CONFIG_MTD_UBI_FASTMAP is not set
+# CONFIG_MTD_UBI_FAULT_INJECTION is not set
# CONFIG_MTD_UBI_GLUEBI is not set
CONFIG_MTD_UBI=m
CONFIG_MTD_UBI_WL_THRESHOLD=4096
@@ -4015,7 +4044,6 @@ CONFIG_NAMESPACES=y
CONFIG_NATIONAL_PHY=m
# CONFIG_NAU7802 is not set
# CONFIG_NCN26000_PHY is not set
-CONFIG_ND_BLK=m
CONFIG_ND_BTT=m
# CONFIG_NDC_DIS_DYNAMIC_CACHING is not set
CONFIG_ND_CLAIM=y
@@ -4069,7 +4097,6 @@ CONFIG_NET_DROP_MONITOR=y
# CONFIG_NET_EMATCH is not set
# CONFIG_NET_EMATCH_META is not set
# CONFIG_NET_EMATCH_NBYTE is not set
-# CONFIG_NET_EMATCH_STACK is not set
# CONFIG_NET_EMATCH_TEXT is not set
# CONFIG_NET_EMATCH_U32 is not set
CONFIG_NET_FAILOVER=m
@@ -4351,6 +4378,7 @@ CONFIG_NFS_COMMON=y
CONFIG_NFS_DEBUG=y
# CONFIG_NFSD_FLEXFILELAYOUT is not set
CONFIG_NFS_DISABLE_UDP_SUPPORT=y
+# CONFIG_NFSD_LEGACY_CLIENT_TRACKING is not set
CONFIG_NFSD=m
CONFIG_NFSD_PNFS=y
CONFIG_NFSD_SCSILAYOUT=y
@@ -4500,6 +4528,7 @@ CONFIG_NOUVEAU_DEBUG_PUSH=y
# CONFIG_NOUVEAU_PLATFORM_DRIVER is not set
# CONFIG_NOZOMI is not set
CONFIG_NR_CPUS=4096
+# CONFIG_NSM is not set
# CONFIG_NTB_AMD is not set
# CONFIG_NTB_EPF is not set
# CONFIG_NTB_IDT is not set
@@ -4816,16 +4845,10 @@ CONFIG_PHY_XGENE=y
# CONFIG_PI433 is not set
CONFIG_PID_IN_CONTEXTIDR=y
CONFIG_PID_NS=y
-CONFIG_PINCTRL_ALDERLAKE=m
# CONFIG_PINCTRL_AMD is not set
-# CONFIG_PINCTRL_BROXTON is not set
-# CONFIG_PINCTRL_CHERRYVIEW is not set
# CONFIG_PINCTRL_CS42L43 is not set
# CONFIG_PINCTRL_CY8C95X0 is not set
-CONFIG_PINCTRL_ELKHARTLAKE=m
-CONFIG_PINCTRL_EMMITSBURG=m
# CONFIG_PINCTRL_EQUILIBRIUM is not set
-CONFIG_PINCTRL_ICELAKE=m
CONFIG_PINCTRL_IMX8MM=y
CONFIG_PINCTRL_IMX8MN=y
CONFIG_PINCTRL_IMX8MP=y
@@ -4838,10 +4861,7 @@ CONFIG_PINCTRL_IMX93=y
# CONFIG_PINCTRL_IPQ6018 is not set
# CONFIG_PINCTRL_IPQ8074 is not set
CONFIG_PINCTRL_IPROC_GPIO=y
-# CONFIG_PINCTRL_JASPERLAKE is not set
-CONFIG_PINCTRL_LAKEFIELD=m
# CONFIG_PINCTRL_LPASS_LPI is not set
-# CONFIG_PINCTRL_LYNXPOINT is not set
CONFIG_PINCTRL_MAX77620=y
# CONFIG_PINCTRL_MCP23S08 is not set
# CONFIG_PINCTRL_MDM9615 is not set
@@ -5163,8 +5183,8 @@ CONFIG_RD_GZIP=y
CONFIG_RD_LZ4=y
CONFIG_RD_LZMA=y
CONFIG_RD_LZO=y
-CONFIG_RDMA_RXE=m
-CONFIG_RDMA_SIW=m
+# CONFIG_RDMA_RXE is not set
+# CONFIG_RDMA_SIW is not set
# CONFIG_RDS is not set
CONFIG_RD_XZ=y
CONFIG_RD_ZSTD=y
@@ -5218,6 +5238,7 @@ CONFIG_REGULATOR_MAX77686=m
# CONFIG_REGULATOR_MP886X is not set
# CONFIG_REGULATOR_MPQ7920 is not set
# CONFIG_REGULATOR_MT6311 is not set
+# CONFIG_REGULATOR_NETLINK_EVENTS is not set
# CONFIG_REGULATOR_PCA9450 is not set
# CONFIG_REGULATOR_PF8X00 is not set
CONFIG_REGULATOR_PFUZE100=m
@@ -5392,6 +5413,7 @@ CONFIG_RTC_DRV_M41T94=m
CONFIG_RTC_DRV_M48T35=m
CONFIG_RTC_DRV_M48T59=m
# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_MAX31335 is not set
CONFIG_RTC_DRV_MAX6900=m
CONFIG_RTC_DRV_MAX6902=m
# CONFIG_RTC_DRV_MAX6916 is not set
@@ -5485,7 +5507,7 @@ CONFIG_RTW88=m
# CONFIG_RTW89_8851BE is not set
CONFIG_RTW89_8852AE=m
CONFIG_RTW89_8852BE=m
-# CONFIG_RTW89_8852CE is not set
+CONFIG_RTW89_8852CE=m
CONFIG_RTW89_DEBUGFS=y
CONFIG_RTW89_DEBUGMSG=y
CONFIG_RTW89=m
@@ -5499,6 +5521,7 @@ CONFIG_RXKAD=y
CONFIG_RXPERF=m
# CONFIG_S390_KPROBES_SANITY_TEST is not set
# CONFIG_S390_MODULES_SANITY_TEST is not set
+# CONFIG_SAMPLE_CGROUP is not set
# CONFIG_SAMPLE_FTRACE_OPS is not set
# CONFIG_SAMPLE_KMEMLEAK is not set
# CONFIG_SAMPLES is not set
@@ -5642,7 +5665,7 @@ CONFIG_SECONDARY_TRUSTED_KEYRING=y
CONFIG_SECRETMEM=y
CONFIG_SECTION_MISMATCH_WARN_ONLY=y
# CONFIG_SECURITY_APPARMOR is not set
-# CONFIG_SECURITY_DMESG_RESTRICT is not set
+CONFIG_SECURITY_DMESG_RESTRICT=y
CONFIG_SECURITYFS=y
CONFIG_SECURITY_INFINIBAND=y
# CONFIG_SECURITY_LANDLOCK is not set
@@ -5737,6 +5760,7 @@ CONFIG_SENSORS_FSCHMD=m
# CONFIG_SENSORS_FTSTEUTATES is not set
# CONFIG_SENSORS_G760A is not set
CONFIG_SENSORS_G762=m
+# CONFIG_SENSORS_GIGABYTE_WATERFORCE is not set
# CONFIG_SENSORS_GL518SM is not set
# CONFIG_SENSORS_GL520SM is not set
# CONFIG_SENSORS_GPIO_FAN is not set
@@ -5802,6 +5826,7 @@ CONFIG_SENSORS_LTC4222=m
# CONFIG_SENSORS_LTC4245 is not set
CONFIG_SENSORS_LTC4260=m
# CONFIG_SENSORS_LTC4261 is not set
+# CONFIG_SENSORS_LTC4286 is not set
CONFIG_SENSORS_MAX1111=m
# CONFIG_SENSORS_MAX127 is not set
# CONFIG_SENSORS_MAX15301 is not set
@@ -5829,9 +5854,11 @@ CONFIG_SENSORS_MAX31790=m
# CONFIG_SENSORS_MC34VR500 is not set
# CONFIG_SENSORS_MCP3021 is not set
# CONFIG_SENSORS_MLXREG_FAN is not set
+# CONFIG_SENSORS_MP2856 is not set
# CONFIG_SENSORS_MP2888 is not set
# CONFIG_SENSORS_MP2975 is not set
# CONFIG_SENSORS_MP5023 is not set
+# CONFIG_SENSORS_MP5990 is not set
# CONFIG_SENSORS_MPQ7932 is not set
# CONFIG_SENSORS_MR75203 is not set
# CONFIG_SENSORS_NCT6683 is not set
@@ -6018,10 +6045,8 @@ CONFIG_SIGNED_PE_FILE_VERIFICATION=y
CONFIG_SIPHASH_KUNIT_TEST=m
# CONFIG_SKGE is not set
# CONFIG_SKY2 is not set
-# CONFIG_SLAB_DEPRECATED is not set
CONFIG_SLAB_FREELIST_HARDENED=y
CONFIG_SLAB_FREELIST_RANDOM=y
-# CONFIG_SLAB is not set
# CONFIG_SLAB_MERGE_DEFAULT is not set
# CONFIG_SLIC_DS26522 is not set
# CONFIG_SLIMBUS is not set
@@ -6790,6 +6815,7 @@ CONFIG_SRAM=y
# CONFIG_SSB is not set
# CONFIG_SSFDC is not set
# CONFIG_SSIF_IPMI_BMC is not set
+CONFIG_STACKDEPOT_MAX_FRAMES=64
CONFIG_STACK_HASH_ORDER=20
CONFIG_STACKINIT_KUNIT_TEST=m
CONFIG_STACKPROTECTOR_STRONG=y
@@ -6918,7 +6944,7 @@ CONFIG_TCP_CONG_DCTCP=m
# CONFIG_TCP_CONG_HSTCP is not set
CONFIG_TCP_CONG_HTCP=m
# CONFIG_TCP_CONG_HYBLA is not set
-# CONFIG_TCP_CONG_ILLINOIS is not set
+CONFIG_TCP_CONG_ILLINOIS=m
# CONFIG_TCP_CONG_LP is not set
CONFIG_TCP_CONG_NV=m
# CONFIG_TCP_CONG_SCALABLE is not set
@@ -6997,6 +7023,7 @@ CONFIG_TEST_STRING_HELPERS=m
# CONFIG_TEST_UUID is not set
CONFIG_TEST_VMALLOC=m
# CONFIG_TEST_XARRAY is not set
+# CONFIG_THERMAL_DEBUGFS is not set
# CONFIG_THERMAL_DEFAULT_GOV_FAIR_SHARE is not set
CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y
# CONFIG_THERMAL_DEFAULT_GOV_USER_SPACE is not set
@@ -7180,6 +7207,7 @@ CONFIG_TOUCHSCREEN_WACOM_I2C=m
CONFIG_TRACER_SNAPSHOT=y
CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS=y
# CONFIG_TRANSPARENT_HUGEPAGE_MADVISE is not set
+# CONFIG_TRANSPARENT_HUGEPAGE_NEVER is not set
CONFIG_TRANSPARENT_HUGEPAGE=y
CONFIG_TREE_RCU=y
# CONFIG_TRIM_UNUSED_KSYMS is not set
@@ -7210,6 +7238,7 @@ CONFIG_TYPEC_MUX_FSA4480=m
# CONFIG_TYPEC_MUX_NB7VPQ904M is not set
CONFIG_TYPEC_MUX_PI3USB30532=m
# CONFIG_TYPEC_MUX_PTN36502 is not set
+# CONFIG_TYPEC_MUX_WCD939X_USBSS is not set
# CONFIG_TYPEC_NVIDIA_ALTMODE is not set
# CONFIG_TYPEC_QCOM_PMIC is not set
# CONFIG_TYPEC_RT1711H is not set
@@ -7581,6 +7610,7 @@ CONFIG_VDPA_SIM_NET=m
# CONFIG_VDPA_USER is not set
# CONFIG_VEML6030 is not set
# CONFIG_VEML6070 is not set
+# CONFIG_VEML6075 is not set
CONFIG_VETH=m
CONFIG_VEXPRESS_CONFIG=y
# CONFIG_VF610_ADC is not set
@@ -7588,6 +7618,7 @@ CONFIG_VEXPRESS_CONFIG=y
CONFIG_VFAT_FS=m
# CONFIG_VFIO_AMBA is not set
CONFIG_VFIO_CONTAINER=y
+# CONFIG_VFIO_DEBUGFS is not set
CONFIG_VFIO_DEVICE_CDEV=y
CONFIG_VFIO_FSL_MC=m
CONFIG_VFIO_GROUP=y
@@ -7624,6 +7655,7 @@ CONFIG_VHOST_VSOCK=m
# CONFIG_VIDEO_ADV_DEBUG is not set
# CONFIG_VIDEO_AK7375 is not set
# CONFIG_VIDEO_AK881X is not set
+# CONFIG_VIDEO_ALVIUM_CSI2 is not set
# CONFIG_VIDEO_AR0521 is not set
CONFIG_VIDEO_AU0828=m
# CONFIG_VIDEO_AU0828_RC is not set
@@ -7672,6 +7704,8 @@ CONFIG_VIDEO_EM28XX_RC=m
# CONFIG_VIDEO_FB_IVTV_FORCE_PAT is not set
CONFIG_VIDEO_FB_IVTV=m
# CONFIG_VIDEO_FIXED_MINOR_RANGES is not set
+# CONFIG_VIDEO_GC0308 is not set
+# CONFIG_VIDEO_GC2145 is not set
# CONFIG_VIDEO_GO7007 is not set
# CONFIG_VIDEO_GS1662 is not set
CONFIG_VIDEO_HDPVR=m
@@ -7741,6 +7775,7 @@ CONFIG_VIDEO_IVTV=m
# CONFIG_VIDEO_OV5675 is not set
# CONFIG_VIDEO_OV5693 is not set
# CONFIG_VIDEO_OV5695 is not set
+# CONFIG_VIDEO_OV64A40 is not set
# CONFIG_VIDEO_OV6650 is not set
# CONFIG_VIDEO_OV7251 is not set
# CONFIG_VIDEO_OV7640 is not set
@@ -7793,6 +7828,7 @@ CONFIG_VIDEO_SAA7164=m
# CONFIG_VIDEO_TDA9840 is not set
# CONFIG_VIDEO_TEA6415C is not set
# CONFIG_VIDEO_TEA6420 is not set
+# CONFIG_VIDEO_THP7312 is not set
# CONFIG_VIDEO_THS7303 is not set
# CONFIG_VIDEO_THS8200 is not set
# CONFIG_VIDEO_TLV320AIC23B is not set
@@ -7808,6 +7844,7 @@ CONFIG_VIDEO_TUNER=m
# CONFIG_VIDEO_TW5864 is not set
# CONFIG_VIDEO_TW686X is not set
# CONFIG_VIDEO_TW68 is not set
+# CONFIG_VIDEO_TW9900 is not set
# CONFIG_VIDEO_TW9903 is not set
# CONFIG_VIDEO_TW9906 is not set
# CONFIG_VIDEO_TW9910 is not set
@@ -7843,6 +7880,7 @@ CONFIG_VIRTIO_PCI_LEGACY=y
CONFIG_VIRTIO_PCI=y
# CONFIG_VIRTIO_PMEM is not set
CONFIG_VIRTIO_VDPA=m
+# CONFIG_VIRTIO_VFIO_PCI is not set
CONFIG_VIRTIO_VSOCKETS=m
CONFIG_VIRTIO=y
CONFIG_VIRTUALIZATION=y
@@ -7966,7 +8004,7 @@ CONFIG_XFS_POSIX_ACL=y
CONFIG_XFS_QUOTA=y
# CONFIG_XFS_RT is not set
# CONFIG_XFS_SUPPORT_ASCII_CI is not set
-CONFIG_XFS_SUPPORT_V4=y
+# CONFIG_XFS_SUPPORT_V4 is not set
CONFIG_XFS_WARN=y
# CONFIG_XGENE_DMA is not set
CONFIG_XGENE_PMU=y
@@ -8025,6 +8063,7 @@ CONFIG_ZRAM_DEF_COMP_LZORLE=y
CONFIG_ZRAM=m
CONFIG_ZRAM_MEMORY_TRACKING=y
# CONFIG_ZRAM_MULTI_COMP is not set
+CONFIG_ZRAM_TRACK_ENTRY_ACTIME=y
CONFIG_ZRAM_WRITEBACK=y
CONFIG_ZSMALLOC_CHAIN_SIZE=8
CONFIG_ZSMALLOC_STAT=y
@@ -8037,6 +8076,7 @@ CONFIG_ZSWAP_COMPRESSOR_DEFAULT_LZO=y
# CONFIG_ZSWAP_COMPRESSOR_DEFAULT_ZSTD is not set
# CONFIG_ZSWAP_DEFAULT_ON is not set
# CONFIG_ZSWAP_EXCLUSIVE_LOADS_DEFAULT_ON is not set
+# CONFIG_ZSWAP_SHRINKER_DEFAULT_ON is not set
CONFIG_ZSWAP=y
# CONFIG_ZSWAP_ZPOOL_DEFAULT_Z3FOLD is not set
CONFIG_ZSWAP_ZPOOL_DEFAULT_ZBUD=y
@@ -8046,7 +8086,7 @@ CONFIG_ZENIFY=y
CONFIG_NTSYNC=y
CONFIG_USER_NS_UNPRIVILEGED=y
CONFIG_TCP_CONG_BBR2=m
-# CONFIG_SCHED_PDS is not set
+CONFIG_SCHED_BORE=y
CONFIG_HID_IPTS=m
CONFIG_HID_ITHC=m
CONFIG_SURFACE_BOOK1_DGPU_SWITCH=m
@@ -8055,11 +8095,8 @@ CONFIG_LEDS_TPS68470=m
CONFIG_SENSORS_SURFACE_FAN=m
CONFIG_SENSORS_SURFACE_TEMP=m
CONFIG_DRM_AMD_COLOR_STEAMDECK=y
-CONFIG_BMI323_I2C=m
-CONFIG_BMI323_SPI=m
CONFIG_DRM_APPLETBDRM=m
CONFIG_HID_APPLETB_BL=m
CONFIG_HID_APPLETB_KBD=m
CONFIG_HID_APPLE_MAGIC_BACKLIGHT=m
CONFIG_APPLE_BCE=m
-CONFIG_SCHED_BORE=y
diff --git a/SOURCES/kernel-aarch64-fedora.config b/SOURCES/kernel-aarch64-fedora.config
index 4aa47b9..f358517 100644
--- a/SOURCES/kernel-aarch64-fedora.config
+++ b/SOURCES/kernel-aarch64-fedora.config
@@ -112,6 +112,7 @@ CONFIG_AD5770R=m
# CONFIG_AD5791 is not set
# CONFIG_AD5933 is not set
# CONFIG_AD7091R5 is not set
+CONFIG_AD7091R8=m
CONFIG_AD7124=m
# CONFIG_AD7150 is not set
# CONFIG_AD7192 is not set
@@ -262,6 +263,7 @@ CONFIG_ANDROID_BINDERFS=y
# CONFIG_ANDROID_BINDER_IPC_SELFTEST is not set
CONFIG_ANDROID_BINDER_IPC=y
# CONFIG_ANON_VMA_NAME is not set
+# CONFIG_AOSONG_AGS02MA is not set
# CONFIG_APDS9300 is not set
CONFIG_APDS9802ALS=m
CONFIG_APDS9960=m
@@ -351,14 +353,14 @@ CONFIG_ARCH_R8A774A1=y
CONFIG_ARCH_R9A07G043=y
CONFIG_ARCH_R9A07G044=y
CONFIG_ARCH_R9A07G054=y
-# CONFIG_ARCH_R9A08G045 is not set
-# CONFIG_ARCH_R9A09G011 is not set
+CONFIG_ARCH_R9A08G045=y
+CONFIG_ARCH_R9A09G011=y
CONFIG_ARCH_RANDOM=y
# CONFIG_ARCH_RDA is not set
# CONFIG_ARCH_REALTEK is not set
CONFIG_ARCH_RENESAS=y
CONFIG_ARCH_ROCKCHIP=y
-# CONFIG_ARCH_S32 is not set
+CONFIG_ARCH_S32=y
# CONFIG_ARCH_SA1100 is not set
CONFIG_ARCH_SEATTLE=y
# CONFIG_ARCH_SPARX5 is not set
@@ -693,6 +695,7 @@ CONFIG_BACKLIGHT_LM3630A=m
# CONFIG_BACKLIGHT_LM3639 is not set
CONFIG_BACKLIGHT_LP855X=m
# CONFIG_BACKLIGHT_LV5207LP is not set
+CONFIG_BACKLIGHT_MP3309C=m
CONFIG_BACKLIGHT_MT6370=m
CONFIG_BACKLIGHT_PWM=m
CONFIG_BACKLIGHT_QCOM_WLED=m
@@ -748,6 +751,7 @@ CONFIG_BCACHEFS_FS=m
# CONFIG_BCACHEFS_NO_LATENCY_ACCT is not set
CONFIG_BCACHEFS_POSIX_ACL=y
CONFIG_BCACHEFS_QUOTA=y
+CONFIG_BCACHEFS_SIX_OPTIMISTIC_SPIN=y
# CONFIG_BCACHEFS_TESTS is not set
CONFIG_BCACHE=m
CONFIG_BCM2711_THERMAL=m
@@ -838,6 +842,7 @@ CONFIG_BLK_DEV_SR=y
CONFIG_BLK_DEV_THROTTLING=y
CONFIG_BLKDEV_UBLK_LEGACY_OPCODES=y
CONFIG_BLK_DEV_UBLK=m
+CONFIG_BLK_DEV_WRITE_MOUNTED=y
CONFIG_BLK_DEV=y
CONFIG_BLK_DEV_ZONED=y
# CONFIG_BLK_INLINE_ENCRYPTION_FALLBACK is not set
@@ -858,6 +863,8 @@ CONFIG_BME680=m
# CONFIG_BMI088_ACCEL is not set
CONFIG_BMI160_I2C=m
CONFIG_BMI160_SPI=m
+CONFIG_BMI323_I2C=m
+CONFIG_BMI323_SPI=m
CONFIG_BMP280=m
CONFIG_BNA=m
CONFIG_BNX2=m
@@ -873,7 +880,6 @@ CONFIG_BONDING=m
# CONFIG_BOOT_CONFIG_FORCE is not set
CONFIG_BOOT_CONFIG=y
# CONFIG_BOOTPARAM_HARDLOCKUP_PANIC is not set
-# CONFIG_BOOTPARAM_HOTPLUG_CPU0 is not set
# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
@@ -1006,7 +1012,7 @@ CONFIG_BUILD_SALT=""
# CONFIG_CACHEFILES_DEBUG is not set
# CONFIG_CACHEFILES_ERROR_INJECTION is not set
CONFIG_CACHEFILES=m
-# CONFIG_CACHEFILES_ONDEMAND is not set
+CONFIG_CACHEFILES_ONDEMAND=y
CONFIG_CACHESTAT_SYSCALL=y
CONFIG_CADENCE_TTC_TIMER=y
CONFIG_CADENCE_WATCHDOG=m
@@ -1049,7 +1055,7 @@ CONFIG_CAN_NETLINK=y
CONFIG_CAN_PEAK_PCIEFD=m
CONFIG_CAN_PEAK_USB=m
CONFIG_CAN_RAW=m
-# CONFIG_CAN_RCAR_CANFD is not set
+CONFIG_CAN_RCAR_CANFD=m
# CONFIG_CAN_RCAR is not set
# CONFIG_CAN_SJA1000 is not set
CONFIG_CAN_SLCAN=m
@@ -1243,6 +1249,7 @@ CONFIG_CLK_SUNXI_CLOCKS=y
CONFIG_CLK_SUNXI_PRCM_SUN9I=y
CONFIG_CLK_SUNXI=y
CONFIG_CLK_VEXPRESS_OSC=y
+CONFIG_CLK_X1E80100_GCC=y
CONFIG_CLOCKSOURCE_WATCHDOG_MAX_SKEW_US=100
CONFIG_CLS_U32_MARK=y
CONFIG_CLS_U32_PERF=y
@@ -1308,7 +1315,7 @@ CONFIG_COMMON_CLK_ROCKCHIP=y
CONFIG_COMMON_CLK_RS9_PCIE=m
CONFIG_COMMON_CLK_S4_PERIPHERALS=y
CONFIG_COMMON_CLK_S4_PLL=y
-CONFIG_COMMON_CLK_SCMI=y
+CONFIG_COMMON_CLK_SCMI=m
CONFIG_COMMON_CLK_SCPI=m
# CONFIG_COMMON_CLK_SI514 is not set
CONFIG_COMMON_CLK_SI521XX=y
@@ -1459,7 +1466,6 @@ CONFIG_CRYPTO_CAST5=m
CONFIG_CRYPTO_CAST6=m
CONFIG_CRYPTO_CBC=y
CONFIG_CRYPTO_CCM=y
-CONFIG_CRYPTO_CFB=y
CONFIG_CRYPTO_CHACHA20=m
CONFIG_CRYPTO_CHACHA20_NEON=y
CONFIG_CRYPTO_CHACHA20POLY1305=m
@@ -1516,6 +1522,7 @@ CONFIG_CRYPTO_DEV_MARVELL_CESA=m
CONFIG_CRYPTO_DEV_NITROX_CNN55XX=m
CONFIG_CRYPTO_DEV_OCTEONTX2_CPT=m
CONFIG_CRYPTO_DEV_OCTEONTX_CPT=m
+CONFIG_CRYPTO_DEV_QAT_420XX=m
CONFIG_CRYPTO_DEV_QAT_4XXX=m
CONFIG_CRYPTO_DEV_QAT_C3XXX=m
CONFIG_CRYPTO_DEV_QAT_C3XXXVF=m
@@ -1597,7 +1604,6 @@ CONFIG_CRYPTO_MD5=y
CONFIG_CRYPTO_MICHAEL_MIC=m
CONFIG_CRYPTO_NHPOLY1305_NEON=m
CONFIG_CRYPTO_NULL=y
-CONFIG_CRYPTO_OFB=y
CONFIG_CRYPTO_PCBC=m
CONFIG_CRYPTO_PCRYPT=m
CONFIG_CRYPTO_POLY1305=m
@@ -1703,7 +1709,6 @@ CONFIG_DEBUG_FS_ALLOW_ALL=y
CONFIG_DEBUG_FS=y
# CONFIG_DEBUG_GPIO is not set
# CONFIG_DEBUG_HIGHMEM is not set
-# CONFIG_DEBUG_HOTPLUG_CPU0 is not set
CONFIG_DEBUG_INFO_BTF=y
# CONFIG_DEBUG_INFO_COMPRESSED is not set
CONFIG_DEBUG_INFO_COMPRESSED_NONE=y
@@ -1761,7 +1766,7 @@ CONFIG_DEBUG_SHIRQ=y
# CONFIG_DEBUG_VM_MAPLE_TREE is not set
# CONFIG_DEBUG_VM_PGFLAGS is not set
# CONFIG_DEBUG_VM_PGTABLE is not set
-# CONFIG_DEBUG_VM_RB is not set # revisit this if performance isn't horrible
+# CONFIG_DEBUG_VM_RB is not set
# CONFIG_DEBUG_VM_SHOOT_LAZIES is not set
# CONFIG_DEBUG_VM_VMACACHE is not set
# CONFIG_DEBUG_WQ_FORCE_RR_CPU is not set
@@ -1883,6 +1888,7 @@ CONFIG_DP83867_PHY=m
CONFIG_DP83869_PHY=m
# CONFIG_DP83TC811_PHY is not set
CONFIG_DP83TD510_PHY=m
+CONFIG_DP83TG720_PHY=m
CONFIG_DPAA2_CONSOLE=m
# CONFIG_DPM_WATCHDOG is not set
CONFIG_DPOT_DAC=m
@@ -2015,6 +2021,7 @@ CONFIG_DRM_MSM_MDP5=y
# CONFIG_DRM_MSM_REGISTER_LOGGING is not set
# CONFIG_DRM_MXSFB is not set
CONFIG_DRM_NOUVEAU_BACKLIGHT=y
+CONFIG_DRM_NOUVEAU_GSP_DEFAULT=y
CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_NOUVEAU_SVM is not set
CONFIG_DRM_NWL_MIPI_DSI=m
@@ -2036,6 +2043,7 @@ CONFIG_DRM_PANEL_FEIYANG_FY07024DI26A30D=m
CONFIG_DRM_PANEL_HIMAX_HX8394=m
CONFIG_DRM_PANEL_ILITEK_IL9322=m
CONFIG_DRM_PANEL_ILITEK_ILI9341=m
+# CONFIG_DRM_PANEL_ILITEK_ILI9805 is not set
CONFIG_DRM_PANEL_ILITEK_ILI9881C=m
CONFIG_DRM_PANEL_ILITEK_ILI9882T=m
CONFIG_DRM_PANEL_INNOLUX_EJ030NA=m
@@ -2098,6 +2106,7 @@ CONFIG_DRM_PANEL_SITRONIX_ST7789V=m
# CONFIG_DRM_PANEL_SONY_TD4353_JDI is not set
CONFIG_DRM_PANEL_SONY_TULIP_TRULY_NT35521=m
CONFIG_DRM_PANEL_STARTEK_KD070FHFID015=m
+# CONFIG_DRM_PANEL_SYNAPTICS_R63353 is not set
# CONFIG_DRM_PANEL_TDO_TL070WSH30 is not set
# CONFIG_DRM_PANEL_TPO_TD028TTEC1 is not set
# CONFIG_DRM_PANEL_TPO_TD043MTEA1 is not set
@@ -2113,6 +2122,7 @@ CONFIG_DRM_PANFROST=m
CONFIG_DRM_PARADE_PS8622=m
CONFIG_DRM_PARADE_PS8640=m
CONFIG_DRM_PL111=m
+CONFIG_DRM_POWERVR=m
CONFIG_DRM_QXL=m
CONFIG_DRM_RADEON=m
CONFIG_DRM_RADEON_USERPTR=y
@@ -2126,7 +2136,7 @@ CONFIG_DRM_ROCKCHIP=m
# CONFIG_DRM_RZG2L_MIPI_DSI is not set
CONFIG_DRM_SAMSUNG_DSIM=m
# CONFIG_DRM_SHMOBILE is not set
-# CONFIG_DRM_SII902X is not set
+CONFIG_DRM_SII902X=m
CONFIG_DRM_SII9234=m
# CONFIG_DRM_SIL_SII8620 is not set
CONFIG_DRM_SIMPLE_BRIDGE=m
@@ -2169,6 +2179,7 @@ CONFIG_DRM_VKMS=m
CONFIG_DRM_VMWGFX_FBCON=y
CONFIG_DRM_VMWGFX=m
# CONFIG_DRM_VMWGFX_MKSSTATS is not set
+# CONFIG_DRM_XE is not set
# CONFIG_DRM_XEN_FRONTEND is not set
CONFIG_DRM=y
CONFIG_DRM_ZYNQMP_DPSUB=m
@@ -2271,6 +2282,7 @@ CONFIG_DVB_USB_VP702X=m
CONFIG_DVB_USB_VP7045=m
CONFIG_DVB_USB_ZD1301=m
CONFIG_DW_AXI_DMAC=m
+CONFIG_DWC_PCIE_PMU=m
CONFIG_DW_DMAC_CORE=m
CONFIG_DW_DMAC=m
CONFIG_DW_DMAC_PCI=m
@@ -2349,8 +2361,10 @@ CONFIG_ELF_CORE=y
CONFIG_EMAC_ROCKCHIP=m
# CONFIG_EMBEDDED is not set
CONFIG_ENA_ETHERNET=m
+# CONFIG_ENC28J60 is not set
CONFIG_ENCLOSURE_SERVICES=m
CONFIG_ENCRYPTED_KEYS=y
+# CONFIG_ENCX24J600 is not set
CONFIG_ENERGY_MODEL=y
CONFIG_ENIC=m
CONFIG_ENVELOPE_DETECTOR=m
@@ -2359,6 +2373,7 @@ CONFIG_EPOLL=y
CONFIG_EQUALIZER=m
# CONFIG_EROFS_FS_DEBUG is not set
CONFIG_EROFS_FS=m
+CONFIG_EROFS_FS_ONDEMAND=y
# CONFIG_EROFS_FS_PCPU_KTHREAD is not set
CONFIG_EROFS_FS_POSIX_ACL=y
CONFIG_EROFS_FS_SECURITY=y
@@ -2437,7 +2452,6 @@ CONFIG_FAT_KUNIT_TEST=m
# CONFIG_FB_3DFX is not set
# CONFIG_FB_ARC is not set
# CONFIG_FB_ARK is not set
-# CONFIG_FB_ARMCLCD is not set
# CONFIG_FB_ASILIANT is not set
# CONFIG_FB_ATY128 is not set
# CONFIG_FB_ATY is not set
@@ -2457,7 +2471,6 @@ CONFIG_FB_EFI=y
# CONFIG_FB_IMSTT is not set
# CONFIG_FB_IMX is not set
# CONFIG_FB_KYRO is not set
-# CONFIG_FB_LE80578 is not set
# CONFIG_FB_MATROX_G is not set
# CONFIG_FB_MATROX_I2C is not set
# CONFIG_FB_MATROX is not set
@@ -2552,8 +2565,8 @@ CONFIG_FRAME_POINTER=y
CONFIG_FRAME_WARN=2048
CONFIG_FRONTSWAP=y
# CONFIG_FSCACHE_DEBUG is not set
-CONFIG_FSCACHE=m
CONFIG_FSCACHE_STATS=y
+CONFIG_FSCACHE=y
CONFIG_FS_DAX=y
CONFIG_FS_ENCRYPTION_INLINE_CRYPT=y
CONFIG_FS_ENCRYPTION=y
@@ -2785,8 +2798,8 @@ CONFIG_HAVE_PERF_USER_STACK_DUMP=y
CONFIG_HD44780=m
CONFIG_HDC100X=m
CONFIG_HDC2010=m
+# CONFIG_HDC3020 is not set
CONFIG_HEADERS_INSTALL=y
-# CONFIG_HERMES is not set
CONFIG_HFS_FS=m
CONFIG_HFSPLUS_FS=m
CONFIG_HI3660_MBOX=y
@@ -2854,6 +2867,7 @@ CONFIG_HID_MACALLY=m
CONFIG_HID_MAGICMOUSE=y
CONFIG_HID_MALTRON=m
CONFIG_HID_MAYFLASH=m
+# CONFIG_HID_MCP2200 is not set
CONFIG_HID_MCP2221=m
CONFIG_HID_MEGAWORLD_FF=m
CONFIG_HID_MICROSOFT=m
@@ -2959,7 +2973,6 @@ CONFIG_HNS3=m
CONFIG_HNS_DSAF=m
CONFIG_HNS_ENET=m
CONFIG_HOLTEK_FF=y
-# CONFIG_HOSTAP is not set
CONFIG_HOTPLUG_CPU=y
CONFIG_HOTPLUG_PCI_ACPI_AMPERE_ALTRA=m
CONFIG_HOTPLUG_PCI_ACPI_IBM=m
@@ -2975,6 +2988,7 @@ CONFIG_HOTPLUG_PCI=y
CONFIG_HP_WATCHDOG=m
CONFIG_HSA_AMD_SVM=y
CONFIG_HSA_AMD=y
+# CONFIG_HSC030PA is not set
# CONFIG_HSI is not set
CONFIG_HSR=m
# CONFIG_HSU_DMA is not set
@@ -3116,7 +3130,7 @@ CONFIG_I2C_QCOM_CCI=m
CONFIG_I2C_QCOM_GENI=m
CONFIG_I2C_QUP=m
# CONFIG_I2C_RCAR is not set
-# CONFIG_I2C_RIIC is not set
+CONFIG_I2C_RIIC=m
CONFIG_I2C_RK3X=y
# CONFIG_I2C_ROBOTFUZZ_OSIF is not set
# CONFIG_I2C_RZV2M is not set
@@ -3155,6 +3169,7 @@ CONFIG_I40EVF=m
CONFIG_I6300ESB_WDT=m
# CONFIG_I8K is not set
# CONFIG_IAQCORE is not set
+CONFIG_ICE_HWMON=y
CONFIG_ICE_HWTS=y
CONFIG_ICE=m
CONFIG_ICE_SWITCHDEV=y
@@ -3465,12 +3480,15 @@ CONFIG_INTERCONNECT_QCOM_SDM845=m
# CONFIG_INTERCONNECT_QCOM_SDX55 is not set
# CONFIG_INTERCONNECT_QCOM_SDX65 is not set
CONFIG_INTERCONNECT_QCOM_SDX75=m
+# CONFIG_INTERCONNECT_QCOM_SM6115 is not set
# CONFIG_INTERCONNECT_QCOM_SM6350 is not set
CONFIG_INTERCONNECT_QCOM_SM8150=m
CONFIG_INTERCONNECT_QCOM_SM8250=m
# CONFIG_INTERCONNECT_QCOM_SM8350 is not set
CONFIG_INTERCONNECT_QCOM_SM8450=m
# CONFIG_INTERCONNECT_QCOM_SM8550 is not set
+# CONFIG_INTERCONNECT_QCOM_SM8650 is not set
+CONFIG_INTERCONNECT_QCOM_X1E80100=m
CONFIG_INTERCONNECT_QCOM=y
CONFIG_INTERCONNECT=y
CONFIG_INTERRUPT_CNT=m
@@ -3700,6 +3718,7 @@ CONFIG_ISL29003=m
CONFIG_ISL29020=m
# CONFIG_ISL29125 is not set
# CONFIG_ISL29501 is not set
+# CONFIG_ISL76682 is not set
CONFIG_ISO9660_FS=m
CONFIG_IS_SIGNED_TYPE_KUNIT_TEST=m
CONFIG_IT8712F_WDT=m
@@ -3772,6 +3791,7 @@ CONFIG_JOYSTICK_PSXPAD_SPI_FF=y
CONFIG_JOYSTICK_PSXPAD_SPI=m
CONFIG_JOYSTICK_PXRC=m
CONFIG_JOYSTICK_QWIIC=m
+# CONFIG_JOYSTICK_SEESAW is not set
CONFIG_JOYSTICK_SENSEHAT=m
CONFIG_JOYSTICK_SIDEWINDER=m
# CONFIG_JOYSTICK_SPACEBALL is not set
@@ -3795,6 +3815,7 @@ CONFIG_KALLSYMS_ALL=y
# CONFIG_KALLSYMS_SELFTEST is not set
CONFIG_KALLSYMS=y
# CONFIG_KARMA_PARTITION is not set
+# CONFIG_KASAN_EXTRA_INFO is not set
# CONFIG_KASAN is not set
# CONFIG_KASAN_MODULE_TEST is not set
# CONFIG_KASAN_SW_TAGS is not set
@@ -3911,6 +3932,9 @@ CONFIG_L2TP_ETH=m
CONFIG_L2TP_IP=m
CONFIG_L2TP=m
CONFIG_L2TP_V3=y
+CONFIG_LAN743X=m
+CONFIG_LAN966X_DCB=y
+CONFIG_LAN966X_SWITCH=m
# CONFIG_LAPB is not set
CONFIG_LATENCYTOP=y
# CONFIG_LATTICE_ECP3_CONFIG is not set
@@ -3971,6 +3995,7 @@ CONFIG_LEDS_LP50XX=m
# CONFIG_LEDS_LP55XX_COMMON is not set
# CONFIG_LEDS_LP8860 is not set
CONFIG_LEDS_LT3593=m
+CONFIG_LEDS_MAX5970=m
CONFIG_LEDS_MAX77650=m
CONFIG_LEDS_MLXCPLD=m
CONFIG_LEDS_MLXREG=m
@@ -3990,6 +4015,7 @@ CONFIG_LEDS_REGULATOR=m
# CONFIG_LEDS_RT8515 is not set
CONFIG_LEDS_SGM3140=m
# CONFIG_LEDS_SPI_BYTE is not set
+# CONFIG_LEDS_SUN50I_A100 is not set
CONFIG_LEDS_SYSCON=y
# CONFIG_LEDS_TCA6507 is not set
# CONFIG_LEDS_TI_LMU_COMMON is not set
@@ -4094,6 +4120,7 @@ CONFIG_LTC2983=m
# CONFIG_LTO_CLANG_FULL is not set
# CONFIG_LTO_CLANG_THIN is not set
CONFIG_LTO_NONE=y
+# CONFIG_LTR390 is not set
CONFIG_LTR501=m
CONFIG_LTRF216A=m
CONFIG_LV0104CS=m
@@ -4156,6 +4183,7 @@ CONFIG_MAX30208=m
CONFIG_MAX31827=m
CONFIG_MAX31856=m
CONFIG_MAX31865=m
+CONFIG_MAX34408=m
# CONFIG_MAX44000 is not set
CONFIG_MAX44009=m
# CONFIG_MAX517 is not set
@@ -4186,7 +4214,9 @@ CONFIG_MCP41010=m
# CONFIG_MCP4531 is not set
# CONFIG_MCP4725 is not set
CONFIG_MCP4728=m
+CONFIG_MCP4821=m
# CONFIG_MCP4922 is not set
+CONFIG_MCP9600=m
CONFIG_MCTP_SERIAL=m
# CONFIG_MCTP_TRANSPORT_I2C is not set
# CONFIG_MCTP_TRANSPORT_I3C is not set
@@ -4233,7 +4263,6 @@ CONFIG_MEDIA_CAMERA_SUPPORT=y
CONFIG_MEDIA_CEC_RC=y
CONFIG_MEDIA_CEC_SUPPORT=y
CONFIG_MEDIA_CONTROLLER_DVB=y
-CONFIG_MEDIA_CONTROLLER_REQUEST_API=y
CONFIG_MEDIA_CONTROLLER=y
CONFIG_MEDIA_DIGITAL_TV_SUPPORT=y
CONFIG_MEDIA_PCI_SUPPORT=y
@@ -4280,7 +4309,7 @@ CONFIG_MEMTEST=y
# CONFIG_MERAKI_MX100 is not set
CONFIG_MESON_CANVAS=m
# CONFIG_MESON_CLK_MEASURE is not set
-# CONFIG_MESON_DDR_PMU is not set
+CONFIG_MESON_DDR_PMU=m
CONFIG_MESON_EE_PM_DOMAINS=y
CONFIG_MESON_EFUSE=m
CONFIG_MESON_GXBB_WATCHDOG=m
@@ -4498,6 +4527,7 @@ CONFIG_MLX5_VDPA=y
CONFIG_MLX5_VFIO_PCI=m
CONFIG_MLX90614=m
CONFIG_MLX90632=m
+# CONFIG_MLX90635 is not set
CONFIG_MLXBF_BOOTCTL=m
CONFIG_MLXBF_GIGE=m
# CONFIG_MLXBF_PMC is not set
@@ -4799,6 +4829,7 @@ CONFIG_MTD_SST25L=m
CONFIG_MTD_UBI_BEB_LIMIT=20
# CONFIG_MTD_UBI_BLOCK is not set
# CONFIG_MTD_UBI_FASTMAP is not set
+# CONFIG_MTD_UBI_FAULT_INJECTION is not set
# CONFIG_MTD_UBI_GLUEBI is not set
CONFIG_MTD_UBI=m
CONFIG_MTD_UBI_WL_THRESHOLD=4096
@@ -4841,7 +4872,6 @@ CONFIG_NATSEMI=m
CONFIG_NCN26000_PHY=m
CONFIG_NCSI_OEM_CMD_GET_MAC=y
CONFIG_NCSI_OEM_CMD_KEEP_PHY=y
-CONFIG_ND_BLK=m
CONFIG_ND_BTT=m
# CONFIG_NDC_DIS_DYNAMIC_CACHING is not set
CONFIG_NE2K_PCI=m
@@ -5146,7 +5176,7 @@ CONFIG_NET_VENDOR_LITEX=y
CONFIG_NET_VENDOR_MARVELL=y
CONFIG_NET_VENDOR_MELLANOX=y
CONFIG_NET_VENDOR_MICREL=y
-# CONFIG_NET_VENDOR_MICROCHIP is not set
+CONFIG_NET_VENDOR_MICROCHIP=y
# CONFIG_NET_VENDOR_MICROSEMI is not set
CONFIG_NET_VENDOR_MICROSOFT=y
CONFIG_NET_VENDOR_MYRI=y
@@ -5162,7 +5192,7 @@ CONFIG_NET_VENDOR_QLOGIC=y
CONFIG_NET_VENDOR_QUALCOMM=y
CONFIG_NET_VENDOR_RDC=y
CONFIG_NET_VENDOR_REALTEK=y
-# CONFIG_NET_VENDOR_RENESAS is not set
+CONFIG_NET_VENDOR_RENESAS=y
CONFIG_NET_VENDOR_ROCKER=y
# CONFIG_NET_VENDOR_SAMSUNG is not set
# CONFIG_NET_VENDOR_SEEQ is not set
@@ -5271,6 +5301,7 @@ CONFIG_NF_REJECT_IPV6=m
CONFIG_NFSD_BLOCKLAYOUT=y
CONFIG_NFSD_FLEXFILELAYOUT=y
CONFIG_NFS_DISABLE_UDP_SUPPORT=y
+# CONFIG_NFSD_LEGACY_CLIENT_TRACKING is not set
CONFIG_NFSD=m
CONFIG_NFSD_PNFS=y
CONFIG_NFSD_SCSILAYOUT=y
@@ -5419,6 +5450,7 @@ CONFIG_NOUVEAU_PLATFORM_DRIVER=y
CONFIG_NOZOMI=m
CONFIG_NR_CPUS=4096
CONFIG_NS83820=m
+CONFIG_NSM=m
CONFIG_NTB_EPF=m
# CONFIG_NTB is not set
# CONFIG_NTFS3_64BIT_CLUSTER is not set
@@ -5532,7 +5564,6 @@ CONFIG_OPTEE=m
CONFIG_OPTEE_SHM_NUM_PRIV_PAGES=1
CONFIG_OPTPROBES=y
CONFIG_ORANGEFS_FS=m
-CONFIG_ORINOCO_USB=m
CONFIG_OSF_PARTITION=y
CONFIG_OSNOISE_TRACER=y
CONFIG_OVERFLOW_KUNIT_TEST=m
@@ -5543,10 +5574,6 @@ CONFIG_OVERLAY_FS=m
CONFIG_OVERLAY_FS_REDIRECT_ALWAYS_FOLLOW=y
# CONFIG_OVERLAY_FS_REDIRECT_DIR is not set
# CONFIG_OVERLAY_FS_XINO_AUTO is not set
-CONFIG_P54_COMMON=m
-CONFIG_P54_PCI=m
-# CONFIG_P54_SPI is not set
-CONFIG_P54_USB=m
CONFIG_PA12203001=m
CONFIG_PACKET_DIAG=y
CONFIG_PACKET=y
@@ -5824,24 +5851,15 @@ CONFIG_PHY_XILINX_ZYNQMP=m
CONFIG_PID_IN_CONTEXTIDR=y
CONFIG_PID_NS=y
CONFIG_PINCONF=y
-CONFIG_PINCTRL_ALDERLAKE=m
CONFIG_PINCTRL_AMD=y
CONFIG_PINCTRL_AMLOGIC_C3=y
CONFIG_PINCTRL_AMLOGIC_T7=y
CONFIG_PINCTRL_APPLE_GPIO=m
CONFIG_PINCTRL_AS3722=y
CONFIG_PINCTRL_AXP209=m
-# CONFIG_PINCTRL_BAYTRAIL is not set
-# CONFIG_PINCTRL_BROXTON is not set
-# CONFIG_PINCTRL_CANNONLAKE is not set
-CONFIG_PINCTRL_CEDARFORK=m
-# CONFIG_PINCTRL_CHERRYVIEW is not set
CONFIG_PINCTRL_CS42L43=m
CONFIG_PINCTRL_CY8C95X0=m
-CONFIG_PINCTRL_ELKHARTLAKE=m
-CONFIG_PINCTRL_EMMITSBURG=m
# CONFIG_PINCTRL_EQUILIBRIUM is not set
-# CONFIG_PINCTRL_GEMINILAKE is not set
CONFIG_PINCTRL_IMX8DXL=y
CONFIG_PINCTRL_IMX8MM=y
CONFIG_PINCTRL_IMX8MN=y
@@ -5860,10 +5878,7 @@ CONFIG_PINCTRL_IMX93=y
# CONFIG_PINCTRL_IPQ8064 is not set
# CONFIG_PINCTRL_IPQ8074 is not set
# CONFIG_PINCTRL_IPQ9574 is not set
-# CONFIG_PINCTRL_JASPERLAKE is not set
-CONFIG_PINCTRL_LAKEFIELD=m
CONFIG_PINCTRL_LPASS_LPI=m
-# CONFIG_PINCTRL_LYNXPOINT is not set
CONFIG_PINCTRL_MAX77620=y
# CONFIG_PINCTRL_MCP23S08 is not set
# CONFIG_PINCTRL_MDM9607 is not set
@@ -5899,6 +5914,7 @@ CONFIG_PINCTRL_QDF2XXX=m
# CONFIG_PINCTRL_QDU1000 is not set
CONFIG_PINCTRL_RK805=m
CONFIG_PINCTRL_ROCKCHIP=y
+CONFIG_PINCTRL_S32G2=y
CONFIG_PINCTRL_SA8775P=m
CONFIG_PINCTRL_SC7180=y
CONFIG_PINCTRL_SC7280_LPASS_LPI=m
@@ -5913,6 +5929,7 @@ CONFIG_PINCTRL_SDM845=m
# CONFIG_PINCTRL_SDX65 is not set
# CONFIG_PINCTRL_SDX75 is not set
CONFIG_PINCTRL_SINGLE=y
+# CONFIG_PINCTRL_SM4450 is not set
# CONFIG_PINCTRL_SM6115 is not set
# CONFIG_PINCTRL_SM6115_LPASS_LPI is not set
# CONFIG_PINCTRL_SM6125 is not set
@@ -5928,6 +5945,8 @@ CONFIG_PINCTRL_SM8450_LPASS_LPI=m
CONFIG_PINCTRL_SM8450=m
# CONFIG_PINCTRL_SM8550 is not set
# CONFIG_PINCTRL_SM8550_LPASS_LPI is not set
+# CONFIG_PINCTRL_SM8650 is not set
+# CONFIG_PINCTRL_SM8650_LPASS_LPI is not set
# CONFIG_PINCTRL_STMFX is not set
CONFIG_PINCTRL_SUN20I_D1=y
# CONFIG_PINCTRL_SUN4I_A10 is not set
@@ -5955,6 +5974,8 @@ CONFIG_PINCTRL_SUN8I_H3=y
# CONFIG_PINCTRL_SUN9I_A80_R is not set
# CONFIG_PINCTRL_SX150X is not set
CONFIG_PINCTRL_TEGRA234=y
+CONFIG_PINCTRL_TPS6594=m
+CONFIG_PINCTRL_X1E80100=m
CONFIG_PINCTRL=y
CONFIG_PINCTRL_ZYNQMP=y
# CONFIG_PING is not set
@@ -6195,6 +6216,7 @@ CONFIG_QCOM_MPM=m
CONFIG_QCOM_OCMEM=m
CONFIG_QCOM_PDC=y
CONFIG_QCOM_PMIC_GLINK=m
+CONFIG_QCOM_PMIC_PDCHARGER_ULOG=m
CONFIG_QCOM_Q6V5_ADSP=m
CONFIG_QCOM_Q6V5_MSS=m
CONFIG_QCOM_Q6V5_PAS=m
@@ -6235,6 +6257,7 @@ CONFIG_QCOM_WDT=m
CONFIG_QCS_GCC_404=m
# CONFIG_QCS_Q6SSTOP_404 is not set
# CONFIG_QCS_TURING_404 is not set
+# CONFIG_QDU_ECPRICC_1000 is not set
# CONFIG_QDU_GCC_1000 is not set
CONFIG_QEDE=m
CONFIG_QEDF=m
@@ -6308,6 +6331,7 @@ CONFIG_RAPIDIO_TSI721=m
CONFIG_RASPBERRYPI_FIRMWARE=y
CONFIG_RASPBERRYPI_POWER=y
CONFIG_RATIONAL_KUNIT_TEST=m
+CONFIG_RAVB=m
# CONFIG_RAVE_SP_CORE is not set
# CONFIG_RBTREE_TEST is not set
# CONFIG_RCAR_DMAC is not set
@@ -6347,7 +6371,7 @@ CONFIG_RDS_TCP=m
CONFIG_RD_XZ=y
CONFIG_RD_ZSTD=y
# CONFIG_READABLE_ASM is not set
-# CONFIG_READ_ONLY_THP_FOR_FS is not set
+CONFIG_READ_ONLY_THP_FOR_FS=y
CONFIG_REALTEK_AUTOPM=y
CONFIG_REALTEK_PHY=m
# CONFIG_REED_SOLOMON_TEST is not set
@@ -6413,6 +6437,7 @@ CONFIG_REGULATOR_MP886X=m
# CONFIG_REGULATOR_MT6311 is not set
# CONFIG_REGULATOR_MT6315 is not set
CONFIG_REGULATOR_MT6370=m
+# CONFIG_REGULATOR_NETLINK_EVENTS is not set
CONFIG_REGULATOR_PCA9450=m
CONFIG_REGULATOR_PF8X00=m
CONFIG_REGULATOR_PFUZE100=m
@@ -6480,11 +6505,13 @@ CONFIG_RELOCATABLE=y
# CONFIG_REMOTEPROC_CDEV is not set
CONFIG_REMOTEPROC=y
CONFIG_REMOTE_TARGET=m
-# CONFIG_RENESAS_OSTM is not set
+# CONFIG_RENESAS_ETHER_SWITCH is not set
+CONFIG_RENESAS_GEN4_PTP=m
+CONFIG_RENESAS_OSTM=y
# CONFIG_RENESAS_PHY is not set
# CONFIG_RENESAS_RPCIF is not set
# CONFIG_RENESAS_RZAWDT is not set
-# CONFIG_RENESAS_RZG2LWDT is not set
+CONFIG_RENESAS_RZG2LWDT=m
# CONFIG_RENESAS_RZN1WDT is not set
# CONFIG_RENESAS_USB_DMAC is not set
# CONFIG_RENESAS_WDT is not set
@@ -6661,6 +6688,7 @@ CONFIG_RTC_DRV_M41T94=m
CONFIG_RTC_DRV_M48T35=m
CONFIG_RTC_DRV_M48T59=m
# CONFIG_RTC_DRV_M48T86 is not set
+CONFIG_RTC_DRV_MAX31335=m
CONFIG_RTC_DRV_MAX6900=m
CONFIG_RTC_DRV_MAX6902=m
CONFIG_RTC_DRV_MAX6916=m
@@ -6709,6 +6737,7 @@ CONFIG_RTC_DRV_SUN6I=y
CONFIG_RTC_DRV_TEGRA=m
# CONFIG_RTC_DRV_TEST is not set
CONFIG_RTC_DRV_TI_K3=m
+CONFIG_RTC_DRV_TPS6594=m
CONFIG_RTC_DRV_V3020=m
CONFIG_RTC_DRV_X1205=m
CONFIG_RTC_DRV_XGENE=m
@@ -6778,9 +6807,9 @@ CONFIG_RV_REACT_PRINTK=y
CONFIG_RV=y
CONFIG_RXKAD=y
# CONFIG_RXPERF is not set
-# CONFIG_RZ_DMAC is not set
-# CONFIG_RZG2L_ADC is not set
-# CONFIG_RZG2L_THERMAL is not set
+CONFIG_RZ_DMAC=m
+CONFIG_RZG2L_ADC=m
+CONFIG_RZG2L_THERMAL=m
# CONFIG_RZ_MTU3 is not set
CONFIG_S2IO=m
# CONFIG_S390_KPROBES_SANITY_TEST is not set
@@ -6822,6 +6851,7 @@ CONFIG_SC92031=m
CONFIG_SCA3300=m
CONFIG_SC_CAMCC_7180=m
CONFIG_SC_CAMCC_7280=m
+CONFIG_SC_CAMCC_8280XP=m
CONFIG_SCD30_CORE=m
CONFIG_SCD30_I2C=m
CONFIG_SCD30_SERIAL=m
@@ -7072,6 +7102,7 @@ CONFIG_SENSORS_FSP_3Y=m
CONFIG_SENSORS_FTSTEUTATES=m
CONFIG_SENSORS_G760A=m
CONFIG_SENSORS_G762=m
+CONFIG_SENSORS_GIGABYTE_WATERFORCE=m
CONFIG_SENSORS_GL518SM=m
CONFIG_SENSORS_GL520SM=m
CONFIG_SENSORS_GPIO_FAN=m
@@ -7138,6 +7169,7 @@ CONFIG_SENSORS_LTC4222=m
CONFIG_SENSORS_LTC4245=m
CONFIG_SENSORS_LTC4260=m
CONFIG_SENSORS_LTC4261=m
+# CONFIG_SENSORS_LTC4286 is not set
CONFIG_SENSORS_MAX1111=m
# CONFIG_SENSORS_MAX127 is not set
# CONFIG_SENSORS_MAX15301 is not set
@@ -7165,10 +7197,12 @@ CONFIG_SENSORS_MAX8688=m
CONFIG_SENSORS_MC34VR500=m
CONFIG_SENSORS_MCP3021=m
CONFIG_SENSORS_MLXREG_FAN=m
+# CONFIG_SENSORS_MP2856 is not set
CONFIG_SENSORS_MP2888=m
CONFIG_SENSORS_MP2975=m
CONFIG_SENSORS_MP2975_REGULATOR=y
CONFIG_SENSORS_MP5023=m
+# CONFIG_SENSORS_MP5990 is not set
CONFIG_SENSORS_MPQ7932=m
CONFIG_SENSORS_MPQ7932_REGULATOR=y
CONFIG_SENSORS_MR75203=m
@@ -7264,7 +7298,7 @@ CONFIG_SERIAL_8250_CS=m
CONFIG_SERIAL_8250_DFL=m
CONFIG_SERIAL_8250_DMA=y
CONFIG_SERIAL_8250_DW=y
-# CONFIG_SERIAL_8250_EM is not set
+CONFIG_SERIAL_8250_EM=y
CONFIG_SERIAL_8250_EXAR=m
CONFIG_SERIAL_8250_EXTENDED=y
# CONFIG_SERIAL_8250_FINTEK is not set
@@ -7367,6 +7401,7 @@ CONFIG_SFP=m
CONFIG_SGETMASK_SYSCALL=y
CONFIG_SGI_PARTITION=y
# CONFIG_SHADOW_CALL_STACK is not set
+# CONFIG_SH_ETH is not set
CONFIG_SHMEM=y
# CONFIG_SHRINKER_DEBUG is not set
CONFIG_SHUFFLE_PAGE_ALLOCATOR=y
@@ -7386,10 +7421,8 @@ CONFIG_SKGE_GENESIS=y
CONFIG_SKGE=m
# CONFIG_SKY2_DEBUG is not set
CONFIG_SKY2=m
-# CONFIG_SLAB_DEPRECATED is not set
CONFIG_SLAB_FREELIST_HARDENED=y
CONFIG_SLAB_FREELIST_RANDOM=y
-# CONFIG_SLAB is not set
# CONFIG_SLAB_MERGE_DEFAULT is not set
CONFIG_SLIMBUS=m
CONFIG_SLIM_QCOM_CTRL=m
@@ -7417,6 +7450,7 @@ CONFIG_SMC=m
# CONFIG_SM_DISPCC_8250 is not set
CONFIG_SM_DISPCC_8450=m
# CONFIG_SM_DISPCC_8550 is not set
+CONFIG_SM_DISPCC_8650=m
# CONFIG_SM_FTL is not set
# CONFIG_SM_GCC_4450 is not set
# CONFIG_SM_GCC_6115 is not set
@@ -7429,6 +7463,7 @@ CONFIG_SM_GCC_8250=m
CONFIG_SM_GCC_8350=m
CONFIG_SM_GCC_8450=m
CONFIG_SM_GCC_8550=m
+CONFIG_SM_GCC_8650=m
# CONFIG_SM_GPUCC_6115 is not set
# CONFIG_SM_GPUCC_6125 is not set
# CONFIG_SM_GPUCC_6350 is not set
@@ -7438,6 +7473,7 @@ CONFIG_SM_GCC_8550=m
# CONFIG_SM_GPUCC_8350 is not set
# CONFIG_SM_GPUCC_8450 is not set
# CONFIG_SM_GPUCC_8550 is not set
+CONFIG_SM_GPUCC_8650=m
CONFIG_SMPRO_ERRMON=m
CONFIG_SMPRO_MISC=m
CONFIG_SMP=y
@@ -7451,6 +7487,7 @@ CONFIG_SMS_SIANO_MDTV=m
CONFIG_SMS_SIANO_RC=y
CONFIG_SMS_USB_DRV=m
# CONFIG_SM_TCSRCC_8550 is not set
+CONFIG_SM_TCSRCC_8650=m
# CONFIG_SM_VIDEOCC_8150 is not set
# CONFIG_SM_VIDEOCC_8250 is not set
CONFIG_SM_VIDEOCC_8350=m
@@ -7920,7 +7957,7 @@ CONFIG_SND_SOC_RT715_SDW=m
CONFIG_SND_SOC_RT722_SDCA_SDW=m
# CONFIG_SND_SOC_RT9120 is not set
CONFIG_SND_SOC_RTQ9128=m
-# CONFIG_SND_SOC_RZ is not set
+CONFIG_SND_SOC_RZ=m
# CONFIG_SND_SOC_SAMSUNG_ARIES_WM8994 is not set
# CONFIG_SND_SOC_SAMSUNG is not set
CONFIG_SND_SOC_SAMSUNG_MIDAS_WM1811=m
@@ -8088,6 +8125,7 @@ CONFIG_SND_SOC_WM8962=m
# CONFIG_SND_SOC_WSA881X is not set
CONFIG_SND_SOC_WSA883X=m
CONFIG_SND_SOC_WSA884X=m
+CONFIG_SND_SOC_X1E80100=m
CONFIG_SND_SOC_XILINX_AUDIO_FORMATTER=m
CONFIG_SND_SOC_XILINX_I2S=m
CONFIG_SND_SOC_XILINX_SPDIF=m
@@ -8226,7 +8264,7 @@ CONFIG_SPI_QCOM_QSPI=m
CONFIG_SPI_QUP=m
CONFIG_SPI_ROCKCHIP=m
CONFIG_SPI_ROCKCHIP_SFC=m
-# CONFIG_SPI_RSPI is not set
+CONFIG_SPI_RSPI=m
# CONFIG_SPI_RZV2M_CSI is not set
# CONFIG_SPI_SC18IS602 is not set
# CONFIG_SPI_SH_HSPI is not set
@@ -8287,6 +8325,7 @@ CONFIG_SSB_PCIHOST=y
CONFIG_SSB_SDIOHOST=y
# CONFIG_SSFDC is not set
CONFIG_SSIF_IPMI_BMC=m
+CONFIG_STACKDEPOT_MAX_FRAMES=64
CONFIG_STACK_HASH_ORDER=20
CONFIG_STACKINIT_KUNIT_TEST=m
CONFIG_STACKPROTECTOR_STRONG=y
@@ -8486,6 +8525,7 @@ CONFIG_TCP_MD5SIG=y
CONFIG_TCS3472=m
CONFIG_TDX_GUEST_DRIVER=m
CONFIG_TEE=m
+CONFIG_TEE_STMM_EFI=m
CONFIG_TEGRA124_EMC=m
CONFIG_TEGRA186_GPC_DMA=m
CONFIG_TEGRA186_TIMER=y
@@ -8560,6 +8600,7 @@ CONFIG_TEST_SORT=m
# CONFIG_TEST_UUID is not set
CONFIG_TEST_VMALLOC=m
# CONFIG_TEST_XARRAY is not set
+# CONFIG_THERMAL_DEBUGFS is not set
# CONFIG_THERMAL_DEFAULT_GOV_BANG_BANG is not set
# CONFIG_THERMAL_DEFAULT_GOV_FAIR_SHARE is not set
CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y
@@ -8600,6 +8641,7 @@ CONFIG_TI_ADS7924=m
CONFIG_TI_ADS8344=m
# CONFIG_TI_ADS8688 is not set
CONFIG_TI_AM335X_ADC=m
+CONFIG_TI_AM65_CPSW_QOS=y
CONFIG_TI_AM65_CPSW_TAS=y
# CONFIG_TICK_CPU_ACCOUNTING is not set
# CONFIG_TI_CPSW_PHY_SEL is not set
@@ -8790,6 +8832,7 @@ CONFIG_TRACE_EVAL_MAP_FILE=y
CONFIG_TRACER_SNAPSHOT=y
# CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS is not set
CONFIG_TRANSPARENT_HUGEPAGE_MADVISE=y
+# CONFIG_TRANSPARENT_HUGEPAGE_NEVER is not set
CONFIG_TRANSPARENT_HUGEPAGE=y
# CONFIG_TRIM_UNUSED_KSYMS is not set
CONFIG_TRUSTED_FOUNDATIONS=y
@@ -8829,6 +8872,7 @@ CONFIG_TYPEC_MUX_GPIO_SBU=m
CONFIG_TYPEC_MUX_NB7VPQ904M=m
CONFIG_TYPEC_MUX_PI3USB30532=m
CONFIG_TYPEC_MUX_PTN36502=m
+# CONFIG_TYPEC_MUX_WCD939X_USBSS is not set
CONFIG_TYPEC_NVIDIA_ALTMODE=m
CONFIG_TYPEC_QCOM_PMIC=m
# CONFIG_TYPEC_RT1711H is not set
@@ -9154,7 +9198,6 @@ CONFIG_USB_NET_NET1080=m
CONFIG_USB_NET_PLUSB=m
CONFIG_USB_NET_QMI_WWAN=m
CONFIG_USB_NET_RNDIS_HOST=m
-CONFIG_USB_NET_RNDIS_WLAN=m
CONFIG_USB_NET_SMSC75XX=m
CONFIG_USB_NET_SMSC95XX=m
CONFIG_USB_NET_SR9700=m
@@ -9195,6 +9238,7 @@ CONFIG_USB_ROLE_SWITCH=y
CONFIG_USB_RTL8150=m
CONFIG_USB_RTL8152=m
CONFIG_USB_RTL8153_ECM=m
+CONFIG_USB_RZV2M_USB3DRD=m
CONFIG_USB_S2255=m
CONFIG_USB_SERIAL_AIRCABLE=m
CONFIG_USB_SERIAL_ARK3116=m
@@ -9303,11 +9347,11 @@ CONFIG_USB_XHCI_PCI_RENESAS=y
CONFIG_USB_XHCI_PCI=y
CONFIG_USB_XHCI_PLATFORM=m
CONFIG_USB_XHCI_RCAR=m
+CONFIG_USB_XHCI_RZV2M=y
CONFIG_USB_XHCI_TEGRA=m
CONFIG_USB_XUSBATM=m
CONFIG_USB=y
CONFIG_USB_YUREX=m
-# CONFIG_USB_ZD1201 is not set
# CONFIG_USB_ZERO is not set
CONFIG_USB_ZR364XX=m
# CONFIG_USELIB is not set
@@ -9324,6 +9368,7 @@ CONFIG_V4L_MEM2MEM_DRIVERS=y
CONFIG_V4L_PLATFORM_DRIVERS=y
CONFIG_V4L_TEST_DRIVERS=y
CONFIG_VALIDATE_FS_PARSER=y
+CONFIG_VCAP=y
CONFIG_VCHIQ_CDEV=y
CONFIG_VCNL3020=m
CONFIG_VCNL4000=m
@@ -9337,6 +9382,7 @@ CONFIG_VDPA_USER=m
CONFIG_VDSO=y
CONFIG_VEML6030=m
CONFIG_VEML6070=m
+# CONFIG_VEML6075 is not set
CONFIG_VETH=m
CONFIG_VEXPRESS_CONFIG=y
# CONFIG_VF610_ADC is not set
@@ -9345,6 +9391,7 @@ CONFIG_VFAT_FS=m
CONFIG_VFIO_AMBA=m
CONFIG_VFIO_CDX=m
CONFIG_VFIO_CONTAINER=y
+# CONFIG_VFIO_DEBUGFS is not set
# CONFIG_VFIO_DEVICE_CDEV is not set
CONFIG_VFIO_FSL_MC=m
CONFIG_VFIO_GROUP=y
@@ -9387,6 +9434,7 @@ CONFIG_VIDEO_ADV7842=m
CONFIG_VIDEO_AK7375=m
CONFIG_VIDEO_AK881X=m
CONFIG_VIDEO_ALLEGRO_DVT=m
+# CONFIG_VIDEO_ALVIUM_CSI2 is not set
CONFIG_VIDEO_AMPHION_VPU=m
CONFIG_VIDEO_AR0521=m
CONFIG_VIDEO_AU0828=m
@@ -9439,6 +9487,8 @@ CONFIG_VIDEO_EM28XX_V4L2=m
CONFIG_VIDEO_ET8EK8=m
CONFIG_VIDEO_FB_IVTV=m
# CONFIG_VIDEO_FIXED_MINOR_RANGES is not set
+CONFIG_VIDEO_GC0308=m
+CONFIG_VIDEO_GC2145=m
CONFIG_VIDEO_GO7007_LOADER=m
CONFIG_VIDEO_GO7007=m
CONFIG_VIDEO_GO7007_USB=m
@@ -9524,6 +9574,7 @@ CONFIG_VIDEO_OV5670=m
CONFIG_VIDEO_OV5675=m
CONFIG_VIDEO_OV5693=m
CONFIG_VIDEO_OV5695=m
+CONFIG_VIDEO_OV64A40=m
CONFIG_VIDEO_OV6650=m
CONFIG_VIDEO_OV7251=m
CONFIG_VIDEO_OV7640=m
@@ -9548,14 +9599,16 @@ CONFIG_VIDEO_QCOM_VENUS=m
# CONFIG_VIDEO_RCAR_VIN is not set
CONFIG_VIDEO_RDACM20=m
# CONFIG_VIDEO_RDACM21 is not set
-# CONFIG_VIDEO_RENESAS_FCP is not set
+CONFIG_VIDEO_RENESAS_FCP=m
+CONFIG_VIDEO_RENESAS_FDP1=m
# CONFIG_VIDEO_RENESAS_JPU is not set
+CONFIG_VIDEO_RENESAS_VSP1=m
CONFIG_VIDEO_RJ54N1=m
CONFIG_VIDEO_ROCKCHIP_ISP1=m
CONFIG_VIDEO_ROCKCHIP_RGA=m
CONFIG_VIDEO_ROCKCHIP_VDEC=m
-# CONFIG_VIDEO_RZG2L_CRU is not set
-# CONFIG_VIDEO_RZG2L_CSI2 is not set
+CONFIG_VIDEO_RZG2L_CRU=m
+CONFIG_VIDEO_RZG2L_CSI2=m
CONFIG_VIDEO_S5C73M3=m
CONFIG_VIDEO_S5K4ECGX=m
CONFIG_VIDEO_S5K5BAF=m
@@ -9602,6 +9655,7 @@ CONFIG_VIDEO_TEA6420=m
CONFIG_VIDEO_TEGRA=m
# CONFIG_VIDEO_TEGRA_TPG is not set
CONFIG_VIDEO_TEGRA_VDE=m
+# CONFIG_VIDEO_THP7312 is not set
CONFIG_VIDEO_THS7303=m
CONFIG_VIDEO_THS8200=m
CONFIG_VIDEO_TI_CAL=m
@@ -9620,6 +9674,7 @@ CONFIG_VIDEO_TW2804=m
# CONFIG_VIDEO_TW5864 is not set
CONFIG_VIDEO_TW686X=m
# CONFIG_VIDEO_TW68 is not set
+# CONFIG_VIDEO_TW9900 is not set
CONFIG_VIDEO_TW9903=m
CONFIG_VIDEO_TW9906=m
CONFIG_VIDEO_TW9910=m
@@ -9638,6 +9693,7 @@ CONFIG_VIDEO_VIVID=m
CONFIG_VIDEO_VIVID_MAX_DEVS=64
CONFIG_VIDEO_VP27SMPX=m
CONFIG_VIDEO_VPX3220=m
+CONFIG_VIDEO_WAVE_VPU=m
CONFIG_VIDEO_WM8739=m
CONFIG_VIDEO_WM8775=m
# CONFIG_VIDEO_XILINX is not set
@@ -9662,6 +9718,7 @@ CONFIG_VIRTIO_PCI_LEGACY=y
CONFIG_VIRTIO_PCI=y
# CONFIG_VIRTIO_PMEM is not set
CONFIG_VIRTIO_VDPA=m
+CONFIG_VIRTIO_VFIO_PCI=m
CONFIG_VIRTIO_VSOCKETS=m
CONFIG_VIRTIO=y
CONFIG_VIRTUALIZATION=y
@@ -9703,6 +9760,7 @@ CONFIG_VXLAN=m
# CONFIG_VZ89X is not set
CONFIG_W1_CON=y
CONFIG_W1=m
+# CONFIG_W1_MASTER_AMD_AXI is not set
# CONFIG_W1_MASTER_DS1WM is not set
CONFIG_W1_MASTER_DS2482=m
CONFIG_W1_MASTER_DS2490=m
@@ -9780,7 +9838,7 @@ CONFIG_WLAN_VENDOR_ATH=y
CONFIG_WLAN_VENDOR_BROADCOM=y
# CONFIG_WLAN_VENDOR_CISCO is not set
CONFIG_WLAN_VENDOR_INTEL=y
-CONFIG_WLAN_VENDOR_INTERSIL=y
+# CONFIG_WLAN_VENDOR_INTERSIL is not set
CONFIG_WLAN_VENDOR_MARVELL=y
CONFIG_WLAN_VENDOR_MEDIATEK=y
CONFIG_WLAN_VENDOR_MICROCHIP=y
@@ -9854,7 +9912,7 @@ CONFIG_XILINX_PR_DECOUPLER=m
CONFIG_XILINX_SDFEC=m
CONFIG_XILINX_VCU=m
# CONFIG_XILINX_WATCHDOG is not set
-# CONFIG_XILINX_WINDOW_WATCHDOG is not set
+CONFIG_XILINX_WINDOW_WATCHDOG=m
CONFIG_XILINX_XADC=m
CONFIG_XILINX_XDMA=m
CONFIG_XILINX_ZYNQMP_DMA=m
@@ -9905,6 +9963,7 @@ CONFIG_ZRAM_DEF_COMP_LZORLE=y
CONFIG_ZRAM=m
# CONFIG_ZRAM_MEMORY_TRACKING is not set
CONFIG_ZRAM_MULTI_COMP=y
+# CONFIG_ZRAM_TRACK_ENTRY_ACTIME is not set
# CONFIG_ZRAM_WRITEBACK is not set
CONFIG_ZSMALLOC_CHAIN_SIZE=8
# CONFIG_ZSMALLOC_STAT is not set
@@ -9917,6 +9976,7 @@ CONFIG_ZSWAP_COMPRESSOR_DEFAULT_LZO=y
# CONFIG_ZSWAP_COMPRESSOR_DEFAULT_ZSTD is not set
# CONFIG_ZSWAP_DEFAULT_ON is not set
CONFIG_ZSWAP_EXCLUSIVE_LOADS_DEFAULT_ON=y
+CONFIG_ZSWAP_SHRINKER_DEFAULT_ON=y
CONFIG_ZSWAP=y
# CONFIG_ZSWAP_ZPOOL_DEFAULT_Z3FOLD is not set
CONFIG_ZSWAP_ZPOOL_DEFAULT_ZBUD=y
@@ -9931,7 +9991,7 @@ CONFIG_ZENIFY=y
CONFIG_NTSYNC=y
CONFIG_USER_NS_UNPRIVILEGED=y
CONFIG_TCP_CONG_BBR2=m
-# CONFIG_SCHED_PDS is not set
+CONFIG_SCHED_BORE=y
CONFIG_HID_IPTS=m
CONFIG_HID_ITHC=m
CONFIG_SURFACE_BOOK1_DGPU_SWITCH=m
@@ -9940,11 +10000,8 @@ CONFIG_LEDS_TPS68470=m
CONFIG_SENSORS_SURFACE_FAN=m
CONFIG_SENSORS_SURFACE_TEMP=m
CONFIG_DRM_AMD_COLOR_STEAMDECK=y
-CONFIG_BMI323_I2C=m
-CONFIG_BMI323_SPI=m
CONFIG_DRM_APPLETBDRM=m
CONFIG_HID_APPLETB_BL=m
CONFIG_HID_APPLETB_KBD=m
CONFIG_HID_APPLE_MAGIC_BACKLIGHT=m
CONFIG_APPLE_BCE=m
-CONFIG_SCHED_BORE=y
diff --git a/SOURCES/kernel-aarch64-rhel.config b/SOURCES/kernel-aarch64-rhel.config
index 2a51386..cf8144c 100644
--- a/SOURCES/kernel-aarch64-rhel.config
+++ b/SOURCES/kernel-aarch64-rhel.config
@@ -91,6 +91,7 @@ CONFIG_ACPI=y
# CONFIG_AD5791 is not set
# CONFIG_AD5933 is not set
# CONFIG_AD7091R5 is not set
+# CONFIG_AD7091R8 is not set
# CONFIG_AD7124 is not set
# CONFIG_AD7150 is not set
# CONFIG_AD7192 is not set
@@ -217,6 +218,7 @@ CONFIG_AMD_PHY=m
CONFIG_AMD_PMC=m
# CONFIG_AMD_PTDMA is not set
# CONFIG_AMDTEE is not set
+# CONFIG_AMD_WBRF is not set
# CONFIG_AMD_XGBE_DCB is not set
CONFIG_AMD_XGBE=m
# CONFIG_AMIGA_PARTITION is not set
@@ -225,6 +227,7 @@ CONFIG_AMPERE_ERRATUM_AC03_CPU_38=y
# CONFIG_AMT is not set
# CONFIG_ANDROID_BINDER_IPC is not set
# CONFIG_ANON_VMA_NAME is not set
+# CONFIG_AOSONG_AGS02MA is not set
# CONFIG_APDS9300 is not set
# CONFIG_APDS9802ALS is not set
# CONFIG_APDS9960 is not set
@@ -503,6 +506,7 @@ CONFIG_BACKLIGHT_LED=m
# CONFIG_BACKLIGHT_LM3639 is not set
CONFIG_BACKLIGHT_LP855X=m
# CONFIG_BACKLIGHT_LV5207LP is not set
+# CONFIG_BACKLIGHT_MP3309C is not set
CONFIG_BACKLIGHT_PWM=m
# CONFIG_BACKLIGHT_QCOM_WLED is not set
# CONFIG_BACKLIGHT_SAHARA is not set
@@ -602,6 +606,7 @@ CONFIG_BLK_DEV_SR=m
# CONFIG_BLK_DEV_THROTTLING_LOW is not set
CONFIG_BLK_DEV_THROTTLING=y
# CONFIG_BLK_DEV_UBLK is not set
+CONFIG_BLK_DEV_WRITE_MOUNTED=y
CONFIG_BLK_DEV=y
CONFIG_BLK_DEV_ZONED=y
# CONFIG_BLK_INLINE_ENCRYPTION is not set
@@ -621,6 +626,8 @@ CONFIG_BLOCK=y
# CONFIG_BMI088_ACCEL is not set
# CONFIG_BMI160_I2C is not set
# CONFIG_BMI160_SPI is not set
+CONFIG_BMI323_I2C=m
+CONFIG_BMI323_SPI=m
# CONFIG_BMP280 is not set
# CONFIG_BNA is not set
CONFIG_BNX2=m
@@ -636,7 +643,6 @@ CONFIG_BONDING=m
# CONFIG_BOOT_CONFIG_FORCE is not set
CONFIG_BOOT_CONFIG=y
# CONFIG_BOOTPARAM_HARDLOCKUP_PANIC is not set
-# CONFIG_BOOTPARAM_HOTPLUG_CPU0 is not set
# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
@@ -1103,7 +1109,6 @@ CONFIG_CRYPTO_CAST5=m
CONFIG_CRYPTO_CAST6=m
CONFIG_CRYPTO_CBC=y
CONFIG_CRYPTO_CCM=y
-CONFIG_CRYPTO_CFB=y
CONFIG_CRYPTO_CHACHA20=m
CONFIG_CRYPTO_CHACHA20_NEON=y
CONFIG_CRYPTO_CHACHA20POLY1305=m
@@ -1155,6 +1160,7 @@ CONFIG_CRYPTO_DEV_HISI_SEC=m
CONFIG_CRYPTO_DEV_NITROX_CNN55XX=m
CONFIG_CRYPTO_DEV_OCTEONTX2_CPT=m
# CONFIG_CRYPTO_DEV_OCTEONTX_CPT is not set
+# CONFIG_CRYPTO_DEV_QAT_420XX is not set
# CONFIG_CRYPTO_DEV_QAT_4XXX is not set
# CONFIG_CRYPTO_DEV_QAT_C3XXX is not set
# CONFIG_CRYPTO_DEV_QAT_C3XXXVF is not set
@@ -1216,7 +1222,6 @@ CONFIG_CRYPTO_MD5=y
CONFIG_CRYPTO_MICHAEL_MIC=m
CONFIG_CRYPTO_NHPOLY1305_NEON=m
CONFIG_CRYPTO_NULL=y
-CONFIG_CRYPTO_OFB=y
CONFIG_CRYPTO_PCBC=m
CONFIG_CRYPTO_PCRYPT=m
CONFIG_CRYPTO_POLY1305=m
@@ -1366,7 +1371,7 @@ CONFIG_DEBUG_SHIRQ=y
# CONFIG_DEBUG_VM_MAPLE_TREE is not set
# CONFIG_DEBUG_VM_PGFLAGS is not set
# CONFIG_DEBUG_VM_PGTABLE is not set
-# CONFIG_DEBUG_VM_RB is not set # revisit this if performance isn't horrible
+# CONFIG_DEBUG_VM_RB is not set
# CONFIG_DEBUG_VM_SHOOT_LAZIES is not set
# CONFIG_DEBUG_VM_VMACACHE is not set
# CONFIG_DEBUG_WQ_FORCE_RR_CPU is not set
@@ -1479,6 +1484,7 @@ CONFIG_DP83867_PHY=m
# CONFIG_DP83869_PHY is not set
CONFIG_DP83TC811_PHY=m
# CONFIG_DP83TD510_PHY is not set
+# CONFIG_DP83TG720_PHY is not set
CONFIG_DPAA2_CONSOLE=m
# CONFIG_DPM_WATCHDOG is not set
# CONFIG_DPOT_DAC is not set
@@ -1537,6 +1543,7 @@ CONFIG_DRM_I915_COMPRESS_ERROR=y
# CONFIG_DRM_I915_DEBUG_MMIO is not set
# CONFIG_DRM_I915_DEBUG_RUNTIME_PM is not set
# CONFIG_DRM_I915_DEBUG_VBLANK_EVADE is not set
+# CONFIG_DRM_I915_DEBUG_WAKEREF is not set
CONFIG_DRM_I915_FENCE_TIMEOUT=10000
CONFIG_DRM_I915_HEARTBEAT_INTERVAL=2500
# CONFIG_DRM_I915_LOW_LEVEL_TRACEPOINTS is not set
@@ -1581,6 +1588,7 @@ CONFIG_DRM_MGAG200=m
# CONFIG_DRM_MSM is not set
# CONFIG_DRM_MXSFB is not set
CONFIG_DRM_NOUVEAU_BACKLIGHT=y
+# CONFIG_DRM_NOUVEAU_GSP_DEFAULT is not set
CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_NWL_MIPI_DSI is not set
# CONFIG_DRM_NXP_PTN3460 is not set
@@ -1601,6 +1609,7 @@ CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_PANEL_HIMAX_HX8394 is not set
# CONFIG_DRM_PANEL_ILITEK_IL9322 is not set
# CONFIG_DRM_PANEL_ILITEK_ILI9341 is not set
+# CONFIG_DRM_PANEL_ILITEK_ILI9805 is not set
# CONFIG_DRM_PANEL_ILITEK_ILI9881C is not set
# CONFIG_DRM_PANEL_ILITEK_ILI9882T is not set
# CONFIG_DRM_PANEL_INNOLUX_EJ030NA is not set
@@ -1663,6 +1672,7 @@ CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_PANEL_SONY_TD4353_JDI is not set
# CONFIG_DRM_PANEL_SONY_TULIP_TRULY_NT35521 is not set
# CONFIG_DRM_PANEL_STARTEK_KD070FHFID015 is not set
+# CONFIG_DRM_PANEL_SYNAPTICS_R63353 is not set
# CONFIG_DRM_PANEL_TDO_TL070WSH30 is not set
# CONFIG_DRM_PANEL_TPO_TD028TTEC1 is not set
# CONFIG_DRM_PANEL_TPO_TD043MTEA1 is not set
@@ -1677,6 +1687,7 @@ CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_PARADE_PS8622 is not set
# CONFIG_DRM_PARADE_PS8640 is not set
# CONFIG_DRM_PL111 is not set
+# CONFIG_DRM_POWERVR is not set
CONFIG_DRM_QXL=m
CONFIG_DRM_RADEON=m
CONFIG_DRM_RADEON_USERPTR=y
@@ -1717,6 +1728,7 @@ CONFIG_DRM_VKMS=m
CONFIG_DRM_VMWGFX_FBCON=y
CONFIG_DRM_VMWGFX=m
# CONFIG_DRM_VMWGFX_MKSSTATS is not set
+# CONFIG_DRM_XE is not set
# CONFIG_DRM_XEN_FRONTEND is not set
CONFIG_DRM=y
# CONFIG_DS1682 is not set
@@ -1815,6 +1827,7 @@ CONFIG_DVB_USB_VP702X=m
CONFIG_DVB_USB_VP7045=m
# CONFIG_DVB_USB_ZD1301 is not set
# CONFIG_DW_AXI_DMAC is not set
+# CONFIG_DWC_PCIE_PMU is not set
CONFIG_DW_DMAC=m
CONFIG_DW_DMAC_PCI=m
# CONFIG_DW_EDMA is not set
@@ -1896,6 +1909,7 @@ CONFIG_EPOLL=y
# CONFIG_EQUALIZER is not set
# CONFIG_EROFS_FS_DEBUG is not set
CONFIG_EROFS_FS=m
+# CONFIG_EROFS_FS_ONDEMAND is not set
CONFIG_EROFS_FS_POSIX_ACL=y
CONFIG_EROFS_FS_SECURITY=y
CONFIG_EROFS_FS_XATTR=y
@@ -1956,7 +1970,6 @@ CONFIG_FAT_KUNIT_TEST=m
# CONFIG_FB_3DFX is not set
# CONFIG_FB_ARC is not set
# CONFIG_FB_ARK is not set
-# CONFIG_FB_ARMCLCD is not set
# CONFIG_FB_ASILIANT is not set
# CONFIG_FB_ATY128 is not set
# CONFIG_FB_ATY is not set
@@ -1976,7 +1989,6 @@ CONFIG_FB_EFI=y
# CONFIG_FB_IMSTT is not set
# CONFIG_FB_IMX is not set
# CONFIG_FB_KYRO is not set
-# CONFIG_FB_LE80578 is not set
# CONFIG_FB_MATROX_G is not set
# CONFIG_FB_MATROX_I2C is not set
# CONFIG_FB_MATROX is not set
@@ -2044,11 +2056,12 @@ CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
CONFIG_FRAMEBUFFER_CONSOLE=y
CONFIG_FRAME_POINTER=y
+# CONFIG_FRAMER is not set
CONFIG_FRAME_WARN=2048
CONFIG_FRONTSWAP=y
# CONFIG_FSCACHE_DEBUG is not set
-CONFIG_FSCACHE=m
CONFIG_FSCACHE_STATS=y
+CONFIG_FSCACHE=y
CONFIG_FS_DAX=y
# CONFIG_FS_ENCRYPTION is not set
# CONFIG_FSI is not set
@@ -2260,6 +2273,7 @@ CONFIG_HASHTABLE_KUNIT_TEST=m
# CONFIG_HD44780 is not set
# CONFIG_HDC100X is not set
# CONFIG_HDC2010 is not set
+# CONFIG_HDC3020 is not set
CONFIG_HDLC_CISCO=m
CONFIG_HDLC_FR=m
CONFIG_HDLC=m
@@ -2334,6 +2348,7 @@ CONFIG_HID_LOGITECH=m
CONFIG_HID_MAGICMOUSE=y
# CONFIG_HID_MALTRON is not set
# CONFIG_HID_MAYFLASH is not set
+# CONFIG_HID_MCP2200 is not set
# CONFIG_HID_MCP2221 is not set
# CONFIG_HID_MEGAWORLD_FF is not set
CONFIG_HID_MICROSOFT=m
@@ -2444,6 +2459,7 @@ CONFIG_HP_WATCHDOG=m
CONFIG_HSA_AMD_P2P=y
CONFIG_HSA_AMD_SVM=y
CONFIG_HSA_AMD=y
+# CONFIG_HSC030PA is not set
# CONFIG_HSI is not set
CONFIG_HSR=m
# CONFIG_HT16K33 is not set
@@ -2599,6 +2615,7 @@ CONFIG_IAVF=m
# CONFIG_IB700_WDT is not set
# CONFIG_IBM_ASM is not set
CONFIG_IBMASR=m
+CONFIG_ICE_HWMON=y
CONFIG_ICE_HWTS=y
CONFIG_ICE=m
CONFIG_ICE_SWITCHDEV=y
@@ -2722,6 +2739,7 @@ CONFIG_INFINIBAND_BNXT_RE=m
CONFIG_INFINIBAND_CXGB4=m
CONFIG_INFINIBAND_EFA=m
# CONFIG_INFINIBAND_ERDMA is not set
+# CONFIG_INFINIBAND_HFI1 is not set
# CONFIG_INFINIBAND_HNS is not set
CONFIG_INFINIBAND_IPOIB_CM=y
# CONFIG_INFINIBAND_IPOIB_DEBUG_DATA is not set
@@ -2736,14 +2754,14 @@ CONFIG_INFINIBAND=m
CONFIG_INFINIBAND_ON_DEMAND_PAGING=y
CONFIG_INFINIBAND_QEDR=m
# CONFIG_INFINIBAND_QIB is not set
-CONFIG_INFINIBAND_RDMAVT=m
+# CONFIG_INFINIBAND_RDMAVT is not set
# CONFIG_INFINIBAND_RTRS_CLIENT is not set
# CONFIG_INFINIBAND_RTRS_SERVER is not set
CONFIG_INFINIBAND_SRP=m
CONFIG_INFINIBAND_SRPT=m
CONFIG_INFINIBAND_USER_ACCESS=m
CONFIG_INFINIBAND_USER_MAD=m
-CONFIG_INFINIBAND_USNIC=m
+# CONFIG_INFINIBAND_USNIC is not set
# CONFIG_INFINIBAND_VMWARE_PVRDMA is not set
# CONFIG_INFTL is not set
# CONFIG_INIT_ON_ALLOC_DEFAULT_ON is not set
@@ -2832,10 +2850,11 @@ CONFIG_INTEL_IOMMU_PERF_EVENTS=y
# CONFIG_INTEL_ISH_FIRMWARE_DOWNLOADER is not set
# CONFIG_INTEL_ISHTP_ECLITE is not set
# CONFIG_INTEL_LDMA is not set
-# CONFIG_INTEL_MEI_GSC_PROXY is not set
+CONFIG_INTEL_MEI_GSC_PROXY=m
# CONFIG_INTEL_MEI_HDCP is not set
# CONFIG_INTEL_MEI_PXP is not set
# CONFIG_INTEL_MEI_TXE is not set
+# CONFIG_INTEL_MEI_VSC_HW is not set
# CONFIG_INTEL_PMC_CORE is not set
# CONFIG_INTEL_PMT_CLASS is not set
# CONFIG_INTEL_PMT_CRASHLOG is not set
@@ -3076,6 +3095,7 @@ CONFIG_ISCSI_TCP=m
# CONFIG_ISL29020 is not set
# CONFIG_ISL29125 is not set
# CONFIG_ISL29501 is not set
+# CONFIG_ISL76682 is not set
CONFIG_ISO9660_FS=m
CONFIG_IS_SIGNED_TYPE_KUNIT_TEST=m
# CONFIG_IT8712F_WDT is not set
@@ -3118,6 +3138,7 @@ CONFIG_KALLSYMS_BASE_RELATIVE=y
# CONFIG_KALLSYMS_SELFTEST is not set
CONFIG_KALLSYMS=y
# CONFIG_KARMA_PARTITION is not set
+# CONFIG_KASAN_EXTRA_INFO is not set
# CONFIG_KASAN is not set
# CONFIG_KASAN_MODULE_TEST is not set
# CONFIG_KASAN_SW_TAGS is not set
@@ -3209,9 +3230,11 @@ CONFIG_KUNIT_TEST=m
CONFIG_KVM_AMD_SEV=y
# CONFIG_KVM_BOOK3S_HV_P8_TIMING is not set
# CONFIG_KVM_BOOK3S_HV_P9_TIMING is not set
+CONFIG_KVM_HYPERV=y
CONFIG_KVM_MAX_NR_VCPUS=4096
# CONFIG_KVM_PROVE_MMU is not set
CONFIG_KVM_SMM=y
+CONFIG_KVM_SW_PROTECTED_VM=y
# CONFIG_KVM_WERROR is not set
# CONFIG_KVM_XEN is not set
CONFIG_KVM=y
@@ -3389,6 +3412,7 @@ CONFIG_LSM_MMAP_MIN_ADDR=65535
# CONFIG_LTO_CLANG_FULL is not set
# CONFIG_LTO_CLANG_THIN is not set
CONFIG_LTO_NONE=y
+# CONFIG_LTR390 is not set
# CONFIG_LTR501 is not set
# CONFIG_LTRF216A is not set
# CONFIG_LV0104CS is not set
@@ -3428,7 +3452,7 @@ CONFIG_MAILBOX=y
CONFIG_MANTIS_CORE=m
# CONFIG_MARCH_Z16 is not set
CONFIG_MARVELL_10G_PHY=m
-# CONFIG_MARVELL_88Q2XXX_PHY is not set
+CONFIG_MARVELL_88Q2XXX_PHY=m
# CONFIG_MARVELL_88X2222_PHY is not set
CONFIG_MARVELL_CN10K_DDR_PMU=m
CONFIG_MARVELL_CN10K_TAD_PMU=m
@@ -3448,6 +3472,7 @@ CONFIG_MARVELL_PHY=m
# CONFIG_MAX31827 is not set
# CONFIG_MAX31856 is not set
# CONFIG_MAX31865 is not set
+# CONFIG_MAX34408 is not set
# CONFIG_MAX44000 is not set
# CONFIG_MAX44009 is not set
# CONFIG_MAX517 is not set
@@ -3476,7 +3501,9 @@ CONFIG_MAX_SKB_FRAGS=17
# CONFIG_MCP4531 is not set
# CONFIG_MCP4725 is not set
# CONFIG_MCP4728 is not set
+# CONFIG_MCP4821 is not set
# CONFIG_MCP4922 is not set
+# CONFIG_MCP9600 is not set
# CONFIG_MCTP is not set
CONFIG_MD_AUTODETECT=y
CONFIG_MD_BITMAP_FILE=y
@@ -3706,8 +3733,8 @@ CONFIG_MITIGATE_SPECTRE_BRANCH_HISTORY=y
CONFIG_MLX4_CORE=m
CONFIG_MLX4_DEBUG=y
CONFIG_MLX4_EN_DCB=y
-CONFIG_MLX4_EN=m
-CONFIG_MLX4_INFINIBAND=m
+# CONFIG_MLX4_EN is not set
+# CONFIG_MLX4_INFINIBAND is not set
CONFIG_MLX5_ACCEL=y
CONFIG_MLX5_CLS_ACT=y
CONFIG_MLX5_CORE_EN_DCB=y
@@ -3738,6 +3765,7 @@ CONFIG_MLX5_VDPA_NET=m
CONFIG_MLX5_VFIO_PCI=m
# CONFIG_MLX90614 is not set
# CONFIG_MLX90632 is not set
+# CONFIG_MLX90635 is not set
CONFIG_MLXBF_BOOTCTL=m
CONFIG_MLXBF_GIGE=m
# CONFIG_MLXBF_PMC is not set
@@ -3906,7 +3934,7 @@ CONFIG_MT76x2U=m
CONFIG_MT7921E=m
# CONFIG_MT7921S is not set
# CONFIG_MT7921U is not set
-# CONFIG_MT7925E is not set
+CONFIG_MT7925E=m
# CONFIG_MT7925U is not set
# CONFIG_MT7996E is not set
# CONFIG_MTD_ABSENT is not set
@@ -3969,6 +3997,7 @@ CONFIG_MTD_SPI_NOR_SWP_DISABLE_ON_VOLATILE=y
CONFIG_MTD_UBI_BEB_LIMIT=20
# CONFIG_MTD_UBI_BLOCK is not set
# CONFIG_MTD_UBI_FASTMAP is not set
+# CONFIG_MTD_UBI_FAULT_INJECTION is not set
# CONFIG_MTD_UBI_GLUEBI is not set
CONFIG_MTD_UBI=m
CONFIG_MTD_UBI_WL_THRESHOLD=4096
@@ -3994,7 +4023,6 @@ CONFIG_NAMESPACES=y
CONFIG_NATIONAL_PHY=m
# CONFIG_NAU7802 is not set
# CONFIG_NCN26000_PHY is not set
-CONFIG_ND_BLK=m
CONFIG_ND_BTT=m
# CONFIG_NDC_DIS_DYNAMIC_CACHING is not set
CONFIG_ND_CLAIM=y
@@ -4048,7 +4076,6 @@ CONFIG_NET_DROP_MONITOR=y
# CONFIG_NET_EMATCH is not set
# CONFIG_NET_EMATCH_META is not set
# CONFIG_NET_EMATCH_NBYTE is not set
-# CONFIG_NET_EMATCH_STACK is not set
# CONFIG_NET_EMATCH_TEXT is not set
# CONFIG_NET_EMATCH_U32 is not set
CONFIG_NET_FAILOVER=m
@@ -4330,6 +4357,7 @@ CONFIG_NFS_COMMON=y
CONFIG_NFS_DEBUG=y
# CONFIG_NFSD_FLEXFILELAYOUT is not set
CONFIG_NFS_DISABLE_UDP_SUPPORT=y
+# CONFIG_NFSD_LEGACY_CLIENT_TRACKING is not set
CONFIG_NFSD=m
CONFIG_NFSD_PNFS=y
CONFIG_NFSD_SCSILAYOUT=y
@@ -4479,6 +4507,7 @@ CONFIG_NOUVEAU_DEBUG_DEFAULT=3
# CONFIG_NOUVEAU_PLATFORM_DRIVER is not set
# CONFIG_NOZOMI is not set
CONFIG_NR_CPUS=4096
+# CONFIG_NSM is not set
# CONFIG_NTB_AMD is not set
# CONFIG_NTB_EPF is not set
# CONFIG_NTB_IDT is not set
@@ -4793,16 +4822,10 @@ CONFIG_PHY_XGENE=y
# CONFIG_PI433 is not set
CONFIG_PID_IN_CONTEXTIDR=y
CONFIG_PID_NS=y
-CONFIG_PINCTRL_ALDERLAKE=m
# CONFIG_PINCTRL_AMD is not set
-# CONFIG_PINCTRL_BROXTON is not set
-# CONFIG_PINCTRL_CHERRYVIEW is not set
# CONFIG_PINCTRL_CS42L43 is not set
# CONFIG_PINCTRL_CY8C95X0 is not set
-CONFIG_PINCTRL_ELKHARTLAKE=m
-CONFIG_PINCTRL_EMMITSBURG=m
# CONFIG_PINCTRL_EQUILIBRIUM is not set
-CONFIG_PINCTRL_ICELAKE=m
CONFIG_PINCTRL_IMX8MM=y
CONFIG_PINCTRL_IMX8MN=y
CONFIG_PINCTRL_IMX8MP=y
@@ -4815,10 +4838,7 @@ CONFIG_PINCTRL_IMX93=y
# CONFIG_PINCTRL_IPQ6018 is not set
# CONFIG_PINCTRL_IPQ8074 is not set
CONFIG_PINCTRL_IPROC_GPIO=y
-# CONFIG_PINCTRL_JASPERLAKE is not set
-CONFIG_PINCTRL_LAKEFIELD=m
# CONFIG_PINCTRL_LPASS_LPI is not set
-# CONFIG_PINCTRL_LYNXPOINT is not set
CONFIG_PINCTRL_MAX77620=y
# CONFIG_PINCTRL_MCP23S08 is not set
# CONFIG_PINCTRL_MDM9615 is not set
@@ -5140,8 +5160,8 @@ CONFIG_RD_GZIP=y
CONFIG_RD_LZ4=y
CONFIG_RD_LZMA=y
CONFIG_RD_LZO=y
-CONFIG_RDMA_RXE=m
-CONFIG_RDMA_SIW=m
+# CONFIG_RDMA_RXE is not set
+# CONFIG_RDMA_SIW is not set
# CONFIG_RDS is not set
CONFIG_RD_XZ=y
CONFIG_RD_ZSTD=y
@@ -5195,6 +5215,7 @@ CONFIG_REGULATOR_MAX77686=m
# CONFIG_REGULATOR_MP886X is not set
# CONFIG_REGULATOR_MPQ7920 is not set
# CONFIG_REGULATOR_MT6311 is not set
+# CONFIG_REGULATOR_NETLINK_EVENTS is not set
# CONFIG_REGULATOR_PCA9450 is not set
# CONFIG_REGULATOR_PF8X00 is not set
CONFIG_REGULATOR_PFUZE100=m
@@ -5369,6 +5390,7 @@ CONFIG_RTC_DRV_M41T94=m
CONFIG_RTC_DRV_M48T35=m
CONFIG_RTC_DRV_M48T59=m
# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_MAX31335 is not set
CONFIG_RTC_DRV_MAX6900=m
CONFIG_RTC_DRV_MAX6902=m
# CONFIG_RTC_DRV_MAX6916 is not set
@@ -5462,7 +5484,7 @@ CONFIG_RTW88=m
# CONFIG_RTW89_8851BE is not set
CONFIG_RTW89_8852AE=m
CONFIG_RTW89_8852BE=m
-# CONFIG_RTW89_8852CE is not set
+CONFIG_RTW89_8852CE=m
# CONFIG_RTW89_DEBUGFS is not set
# CONFIG_RTW89_DEBUGMSG is not set
CONFIG_RTW89=m
@@ -5476,6 +5498,7 @@ CONFIG_RXKAD=y
CONFIG_RXPERF=m
# CONFIG_S390_KPROBES_SANITY_TEST is not set
# CONFIG_S390_MODULES_SANITY_TEST is not set
+# CONFIG_SAMPLE_CGROUP is not set
# CONFIG_SAMPLE_FTRACE_OPS is not set
# CONFIG_SAMPLE_KMEMLEAK is not set
# CONFIG_SAMPLES is not set
@@ -5619,7 +5642,7 @@ CONFIG_SECONDARY_TRUSTED_KEYRING=y
CONFIG_SECRETMEM=y
CONFIG_SECTION_MISMATCH_WARN_ONLY=y
# CONFIG_SECURITY_APPARMOR is not set
-# CONFIG_SECURITY_DMESG_RESTRICT is not set
+CONFIG_SECURITY_DMESG_RESTRICT=y
CONFIG_SECURITYFS=y
CONFIG_SECURITY_INFINIBAND=y
# CONFIG_SECURITY_LANDLOCK is not set
@@ -5714,6 +5737,7 @@ CONFIG_SENSORS_FSCHMD=m
# CONFIG_SENSORS_FTSTEUTATES is not set
# CONFIG_SENSORS_G760A is not set
CONFIG_SENSORS_G762=m
+# CONFIG_SENSORS_GIGABYTE_WATERFORCE is not set
# CONFIG_SENSORS_GL518SM is not set
# CONFIG_SENSORS_GL520SM is not set
# CONFIG_SENSORS_GPIO_FAN is not set
@@ -5779,6 +5803,7 @@ CONFIG_SENSORS_LTC4222=m
# CONFIG_SENSORS_LTC4245 is not set
CONFIG_SENSORS_LTC4260=m
# CONFIG_SENSORS_LTC4261 is not set
+# CONFIG_SENSORS_LTC4286 is not set
CONFIG_SENSORS_MAX1111=m
# CONFIG_SENSORS_MAX127 is not set
# CONFIG_SENSORS_MAX15301 is not set
@@ -5806,9 +5831,11 @@ CONFIG_SENSORS_MAX31790=m
# CONFIG_SENSORS_MC34VR500 is not set
# CONFIG_SENSORS_MCP3021 is not set
# CONFIG_SENSORS_MLXREG_FAN is not set
+# CONFIG_SENSORS_MP2856 is not set
# CONFIG_SENSORS_MP2888 is not set
# CONFIG_SENSORS_MP2975 is not set
# CONFIG_SENSORS_MP5023 is not set
+# CONFIG_SENSORS_MP5990 is not set
# CONFIG_SENSORS_MPQ7932 is not set
# CONFIG_SENSORS_MR75203 is not set
# CONFIG_SENSORS_NCT6683 is not set
@@ -5995,10 +6022,8 @@ CONFIG_SIGNED_PE_FILE_VERIFICATION=y
CONFIG_SIPHASH_KUNIT_TEST=m
# CONFIG_SKGE is not set
# CONFIG_SKY2 is not set
-# CONFIG_SLAB_DEPRECATED is not set
CONFIG_SLAB_FREELIST_HARDENED=y
CONFIG_SLAB_FREELIST_RANDOM=y
-# CONFIG_SLAB is not set
# CONFIG_SLAB_MERGE_DEFAULT is not set
# CONFIG_SLIC_DS26522 is not set
# CONFIG_SLIMBUS is not set
@@ -6765,6 +6790,7 @@ CONFIG_SRAM=y
# CONFIG_SSB is not set
# CONFIG_SSFDC is not set
# CONFIG_SSIF_IPMI_BMC is not set
+CONFIG_STACKDEPOT_MAX_FRAMES=64
CONFIG_STACK_HASH_ORDER=20
CONFIG_STACKINIT_KUNIT_TEST=m
CONFIG_STACKPROTECTOR_STRONG=y
@@ -6893,7 +6919,7 @@ CONFIG_TCP_CONG_DCTCP=m
# CONFIG_TCP_CONG_HSTCP is not set
CONFIG_TCP_CONG_HTCP=m
# CONFIG_TCP_CONG_HYBLA is not set
-# CONFIG_TCP_CONG_ILLINOIS is not set
+CONFIG_TCP_CONG_ILLINOIS=m
# CONFIG_TCP_CONG_LP is not set
CONFIG_TCP_CONG_NV=m
# CONFIG_TCP_CONG_SCALABLE is not set
@@ -6972,6 +6998,7 @@ CONFIG_TEST_SORT=m
# CONFIG_TEST_UUID is not set
CONFIG_TEST_VMALLOC=m
# CONFIG_TEST_XARRAY is not set
+# CONFIG_THERMAL_DEBUGFS is not set
# CONFIG_THERMAL_DEFAULT_GOV_FAIR_SHARE is not set
CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y
# CONFIG_THERMAL_DEFAULT_GOV_USER_SPACE is not set
@@ -7155,6 +7182,7 @@ CONFIG_TOUCHSCREEN_WACOM_I2C=m
CONFIG_TRACER_SNAPSHOT=y
CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS=y
# CONFIG_TRANSPARENT_HUGEPAGE_MADVISE is not set
+# CONFIG_TRANSPARENT_HUGEPAGE_NEVER is not set
CONFIG_TRANSPARENT_HUGEPAGE=y
CONFIG_TREE_RCU=y
# CONFIG_TRIM_UNUSED_KSYMS is not set
@@ -7185,6 +7213,7 @@ CONFIG_TYPEC_MUX_FSA4480=m
# CONFIG_TYPEC_MUX_NB7VPQ904M is not set
CONFIG_TYPEC_MUX_PI3USB30532=m
# CONFIG_TYPEC_MUX_PTN36502 is not set
+# CONFIG_TYPEC_MUX_WCD939X_USBSS is not set
# CONFIG_TYPEC_NVIDIA_ALTMODE is not set
# CONFIG_TYPEC_QCOM_PMIC is not set
# CONFIG_TYPEC_RT1711H is not set
@@ -7556,6 +7585,7 @@ CONFIG_VDPA_SIM_NET=m
# CONFIG_VDPA_USER is not set
# CONFIG_VEML6030 is not set
# CONFIG_VEML6070 is not set
+# CONFIG_VEML6075 is not set
CONFIG_VETH=m
CONFIG_VEXPRESS_CONFIG=y
# CONFIG_VF610_ADC is not set
@@ -7563,6 +7593,7 @@ CONFIG_VEXPRESS_CONFIG=y
CONFIG_VFAT_FS=m
# CONFIG_VFIO_AMBA is not set
CONFIG_VFIO_CONTAINER=y
+# CONFIG_VFIO_DEBUGFS is not set
CONFIG_VFIO_DEVICE_CDEV=y
CONFIG_VFIO_FSL_MC=m
CONFIG_VFIO_GROUP=y
@@ -7599,6 +7630,7 @@ CONFIG_VHOST_VSOCK=m
# CONFIG_VIDEO_ADV_DEBUG is not set
# CONFIG_VIDEO_AK7375 is not set
# CONFIG_VIDEO_AK881X is not set
+# CONFIG_VIDEO_ALVIUM_CSI2 is not set
# CONFIG_VIDEO_AR0521 is not set
CONFIG_VIDEO_AU0828=m
# CONFIG_VIDEO_AU0828_RC is not set
@@ -7647,6 +7679,8 @@ CONFIG_VIDEO_EM28XX_RC=m
# CONFIG_VIDEO_FB_IVTV_FORCE_PAT is not set
CONFIG_VIDEO_FB_IVTV=m
# CONFIG_VIDEO_FIXED_MINOR_RANGES is not set
+# CONFIG_VIDEO_GC0308 is not set
+# CONFIG_VIDEO_GC2145 is not set
# CONFIG_VIDEO_GO7007 is not set
# CONFIG_VIDEO_GS1662 is not set
CONFIG_VIDEO_HDPVR=m
@@ -7716,6 +7750,7 @@ CONFIG_VIDEO_IVTV=m
# CONFIG_VIDEO_OV5675 is not set
# CONFIG_VIDEO_OV5693 is not set
# CONFIG_VIDEO_OV5695 is not set
+# CONFIG_VIDEO_OV64A40 is not set
# CONFIG_VIDEO_OV6650 is not set
# CONFIG_VIDEO_OV7251 is not set
# CONFIG_VIDEO_OV7640 is not set
@@ -7768,6 +7803,7 @@ CONFIG_VIDEO_SAA7164=m
# CONFIG_VIDEO_TDA9840 is not set
# CONFIG_VIDEO_TEA6415C is not set
# CONFIG_VIDEO_TEA6420 is not set
+# CONFIG_VIDEO_THP7312 is not set
# CONFIG_VIDEO_THS7303 is not set
# CONFIG_VIDEO_THS8200 is not set
# CONFIG_VIDEO_TLV320AIC23B is not set
@@ -7783,6 +7819,7 @@ CONFIG_VIDEO_TUNER=m
# CONFIG_VIDEO_TW5864 is not set
# CONFIG_VIDEO_TW686X is not set
# CONFIG_VIDEO_TW68 is not set
+# CONFIG_VIDEO_TW9900 is not set
# CONFIG_VIDEO_TW9903 is not set
# CONFIG_VIDEO_TW9906 is not set
# CONFIG_VIDEO_TW9910 is not set
@@ -7818,6 +7855,7 @@ CONFIG_VIRTIO_PCI_LEGACY=y
CONFIG_VIRTIO_PCI=y
# CONFIG_VIRTIO_PMEM is not set
CONFIG_VIRTIO_VDPA=m
+# CONFIG_VIRTIO_VFIO_PCI is not set
CONFIG_VIRTIO_VSOCKETS=m
CONFIG_VIRTIO=y
CONFIG_VIRTUALIZATION=y
@@ -7941,7 +7979,7 @@ CONFIG_XFS_POSIX_ACL=y
CONFIG_XFS_QUOTA=y
# CONFIG_XFS_RT is not set
# CONFIG_XFS_SUPPORT_ASCII_CI is not set
-CONFIG_XFS_SUPPORT_V4=y
+# CONFIG_XFS_SUPPORT_V4 is not set
# CONFIG_XFS_WARN is not set
# CONFIG_XGENE_DMA is not set
CONFIG_XGENE_PMU=y
@@ -8000,6 +8038,7 @@ CONFIG_ZRAM_DEF_COMP_LZORLE=y
CONFIG_ZRAM=m
# CONFIG_ZRAM_MEMORY_TRACKING is not set
# CONFIG_ZRAM_MULTI_COMP is not set
+# CONFIG_ZRAM_TRACK_ENTRY_ACTIME is not set
CONFIG_ZRAM_WRITEBACK=y
CONFIG_ZSMALLOC_CHAIN_SIZE=8
CONFIG_ZSMALLOC_STAT=y
@@ -8012,6 +8051,7 @@ CONFIG_ZSWAP_COMPRESSOR_DEFAULT_LZO=y
# CONFIG_ZSWAP_COMPRESSOR_DEFAULT_ZSTD is not set
# CONFIG_ZSWAP_DEFAULT_ON is not set
# CONFIG_ZSWAP_EXCLUSIVE_LOADS_DEFAULT_ON is not set
+# CONFIG_ZSWAP_SHRINKER_DEFAULT_ON is not set
CONFIG_ZSWAP=y
# CONFIG_ZSWAP_ZPOOL_DEFAULT_Z3FOLD is not set
CONFIG_ZSWAP_ZPOOL_DEFAULT_ZBUD=y
@@ -8021,7 +8061,7 @@ CONFIG_ZENIFY=y
CONFIG_NTSYNC=y
CONFIG_USER_NS_UNPRIVILEGED=y
CONFIG_TCP_CONG_BBR2=m
-# CONFIG_SCHED_PDS is not set
+CONFIG_SCHED_BORE=y
CONFIG_HID_IPTS=m
CONFIG_HID_ITHC=m
CONFIG_SURFACE_BOOK1_DGPU_SWITCH=m
@@ -8030,11 +8070,8 @@ CONFIG_LEDS_TPS68470=m
CONFIG_SENSORS_SURFACE_FAN=m
CONFIG_SENSORS_SURFACE_TEMP=m
CONFIG_DRM_AMD_COLOR_STEAMDECK=y
-CONFIG_BMI323_I2C=m
-CONFIG_BMI323_SPI=m
CONFIG_DRM_APPLETBDRM=m
CONFIG_HID_APPLETB_BL=m
CONFIG_HID_APPLETB_KBD=m
CONFIG_HID_APPLE_MAGIC_BACKLIGHT=m
CONFIG_APPLE_BCE=m
-CONFIG_SCHED_BORE=y
diff --git a/SOURCES/kernel-aarch64-rt-debug-rhel.config b/SOURCES/kernel-aarch64-rt-debug-rhel.config
index 5077a07..cc59834 100644
--- a/SOURCES/kernel-aarch64-rt-debug-rhel.config
+++ b/SOURCES/kernel-aarch64-rt-debug-rhel.config
@@ -91,6 +91,7 @@ CONFIG_ACPI=y
# CONFIG_AD5791 is not set
# CONFIG_AD5933 is not set
# CONFIG_AD7091R5 is not set
+# CONFIG_AD7091R8 is not set
# CONFIG_AD7124 is not set
# CONFIG_AD7150 is not set
# CONFIG_AD7192 is not set
@@ -217,6 +218,7 @@ CONFIG_AMD_PHY=m
CONFIG_AMD_PMC=m
# CONFIG_AMD_PTDMA is not set
# CONFIG_AMDTEE is not set
+# CONFIG_AMD_WBRF is not set
# CONFIG_AMD_XGBE_DCB is not set
CONFIG_AMD_XGBE=m
# CONFIG_AMIGA_PARTITION is not set
@@ -225,6 +227,7 @@ CONFIG_AMPERE_ERRATUM_AC03_CPU_38=y
# CONFIG_AMT is not set
# CONFIG_ANDROID_BINDER_IPC is not set
# CONFIG_ANON_VMA_NAME is not set
+# CONFIG_AOSONG_AGS02MA is not set
# CONFIG_APDS9300 is not set
# CONFIG_APDS9802ALS is not set
# CONFIG_APDS9960 is not set
@@ -503,6 +506,7 @@ CONFIG_BACKLIGHT_LED=m
# CONFIG_BACKLIGHT_LM3639 is not set
CONFIG_BACKLIGHT_LP855X=m
# CONFIG_BACKLIGHT_LV5207LP is not set
+# CONFIG_BACKLIGHT_MP3309C is not set
CONFIG_BACKLIGHT_PWM=m
# CONFIG_BACKLIGHT_QCOM_WLED is not set
# CONFIG_BACKLIGHT_SAHARA is not set
@@ -602,6 +606,7 @@ CONFIG_BLK_DEV_SR=m
# CONFIG_BLK_DEV_THROTTLING_LOW is not set
CONFIG_BLK_DEV_THROTTLING=y
# CONFIG_BLK_DEV_UBLK is not set
+CONFIG_BLK_DEV_WRITE_MOUNTED=y
CONFIG_BLK_DEV=y
CONFIG_BLK_DEV_ZONED=y
# CONFIG_BLK_INLINE_ENCRYPTION is not set
@@ -621,6 +626,8 @@ CONFIG_BLOCK=y
# CONFIG_BMI088_ACCEL is not set
# CONFIG_BMI160_I2C is not set
# CONFIG_BMI160_SPI is not set
+CONFIG_BMI323_I2C=m
+CONFIG_BMI323_SPI=m
# CONFIG_BMP280 is not set
# CONFIG_BNA is not set
CONFIG_BNX2=m
@@ -636,7 +643,6 @@ CONFIG_BONDING=m
# CONFIG_BOOT_CONFIG_FORCE is not set
CONFIG_BOOT_CONFIG=y
# CONFIG_BOOTPARAM_HARDLOCKUP_PANIC is not set
-# CONFIG_BOOTPARAM_HOTPLUG_CPU0 is not set
# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
@@ -1104,7 +1110,6 @@ CONFIG_CRYPTO_CAST5=m
CONFIG_CRYPTO_CAST6=m
CONFIG_CRYPTO_CBC=y
CONFIG_CRYPTO_CCM=y
-CONFIG_CRYPTO_CFB=y
CONFIG_CRYPTO_CHACHA20=m
CONFIG_CRYPTO_CHACHA20_NEON=y
CONFIG_CRYPTO_CHACHA20POLY1305=m
@@ -1156,6 +1161,7 @@ CONFIG_CRYPTO_DEV_HISI_SEC=m
CONFIG_CRYPTO_DEV_NITROX_CNN55XX=m
CONFIG_CRYPTO_DEV_OCTEONTX2_CPT=m
# CONFIG_CRYPTO_DEV_OCTEONTX_CPT is not set
+# CONFIG_CRYPTO_DEV_QAT_420XX is not set
# CONFIG_CRYPTO_DEV_QAT_4XXX is not set
# CONFIG_CRYPTO_DEV_QAT_C3XXX is not set
# CONFIG_CRYPTO_DEV_QAT_C3XXXVF is not set
@@ -1217,7 +1223,6 @@ CONFIG_CRYPTO_MD5=y
CONFIG_CRYPTO_MICHAEL_MIC=m
CONFIG_CRYPTO_NHPOLY1305_NEON=m
CONFIG_CRYPTO_NULL=y
-CONFIG_CRYPTO_OFB=y
CONFIG_CRYPTO_PCBC=m
CONFIG_CRYPTO_PCRYPT=m
CONFIG_CRYPTO_POLY1305=m
@@ -1376,7 +1381,7 @@ CONFIG_DEBUG_STACK_USAGE=y
# CONFIG_DEBUG_VM_MAPLE_TREE is not set
# CONFIG_DEBUG_VM_PGFLAGS is not set
CONFIG_DEBUG_VM_PGTABLE=y
-# CONFIG_DEBUG_VM_RB is not set # revisit this if performance isn't horrible
+# CONFIG_DEBUG_VM_RB is not set
# CONFIG_DEBUG_VM_SHOOT_LAZIES is not set
# CONFIG_DEBUG_VM_VMACACHE is not set
# CONFIG_DEBUG_WQ_FORCE_RR_CPU is not set
@@ -1489,6 +1494,7 @@ CONFIG_DP83867_PHY=m
# CONFIG_DP83869_PHY is not set
CONFIG_DP83TC811_PHY=m
# CONFIG_DP83TD510_PHY is not set
+# CONFIG_DP83TG720_PHY is not set
CONFIG_DPAA2_CONSOLE=m
# CONFIG_DPM_WATCHDOG is not set
# CONFIG_DPOT_DAC is not set
@@ -1547,6 +1553,7 @@ CONFIG_DRM_I915_COMPRESS_ERROR=y
# CONFIG_DRM_I915_DEBUG_MMIO is not set
# CONFIG_DRM_I915_DEBUG_RUNTIME_PM is not set
# CONFIG_DRM_I915_DEBUG_VBLANK_EVADE is not set
+# CONFIG_DRM_I915_DEBUG_WAKEREF is not set
CONFIG_DRM_I915_FENCE_TIMEOUT=10000
CONFIG_DRM_I915_HEARTBEAT_INTERVAL=2500
# CONFIG_DRM_I915_LOW_LEVEL_TRACEPOINTS is not set
@@ -1591,6 +1598,7 @@ CONFIG_DRM_MGAG200=m
# CONFIG_DRM_MSM is not set
# CONFIG_DRM_MXSFB is not set
CONFIG_DRM_NOUVEAU_BACKLIGHT=y
+# CONFIG_DRM_NOUVEAU_GSP_DEFAULT is not set
CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_NWL_MIPI_DSI is not set
# CONFIG_DRM_NXP_PTN3460 is not set
@@ -1611,6 +1619,7 @@ CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_PANEL_HIMAX_HX8394 is not set
# CONFIG_DRM_PANEL_ILITEK_IL9322 is not set
# CONFIG_DRM_PANEL_ILITEK_ILI9341 is not set
+# CONFIG_DRM_PANEL_ILITEK_ILI9805 is not set
# CONFIG_DRM_PANEL_ILITEK_ILI9881C is not set
# CONFIG_DRM_PANEL_ILITEK_ILI9882T is not set
# CONFIG_DRM_PANEL_INNOLUX_EJ030NA is not set
@@ -1673,6 +1682,7 @@ CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_PANEL_SONY_TD4353_JDI is not set
# CONFIG_DRM_PANEL_SONY_TULIP_TRULY_NT35521 is not set
# CONFIG_DRM_PANEL_STARTEK_KD070FHFID015 is not set
+# CONFIG_DRM_PANEL_SYNAPTICS_R63353 is not set
# CONFIG_DRM_PANEL_TDO_TL070WSH30 is not set
# CONFIG_DRM_PANEL_TPO_TD028TTEC1 is not set
# CONFIG_DRM_PANEL_TPO_TD043MTEA1 is not set
@@ -1687,6 +1697,7 @@ CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_PARADE_PS8622 is not set
# CONFIG_DRM_PARADE_PS8640 is not set
# CONFIG_DRM_PL111 is not set
+# CONFIG_DRM_POWERVR is not set
CONFIG_DRM_QXL=m
CONFIG_DRM_RADEON=m
CONFIG_DRM_RADEON_USERPTR=y
@@ -1727,6 +1738,7 @@ CONFIG_DRM_VKMS=m
CONFIG_DRM_VMWGFX_FBCON=y
CONFIG_DRM_VMWGFX=m
# CONFIG_DRM_VMWGFX_MKSSTATS is not set
+# CONFIG_DRM_XE is not set
# CONFIG_DRM_XEN_FRONTEND is not set
CONFIG_DRM=y
# CONFIG_DS1682 is not set
@@ -1861,6 +1873,7 @@ CONFIG_DVB_USB_VP7045=m
# CONFIG_DVB_USB_ZD1301 is not set
# CONFIG_DVB_ZD1301_DEMOD is not set
# CONFIG_DW_AXI_DMAC is not set
+# CONFIG_DWC_PCIE_PMU is not set
CONFIG_DW_DMAC=m
CONFIG_DW_DMAC_PCI=m
# CONFIG_DW_EDMA is not set
@@ -1942,6 +1955,7 @@ CONFIG_EPOLL=y
# CONFIG_EQUALIZER is not set
# CONFIG_EROFS_FS_DEBUG is not set
CONFIG_EROFS_FS=m
+# CONFIG_EROFS_FS_ONDEMAND is not set
CONFIG_EROFS_FS_POSIX_ACL=y
CONFIG_EROFS_FS_SECURITY=y
CONFIG_EROFS_FS_XATTR=y
@@ -2010,7 +2024,6 @@ CONFIG_FAULT_INJECTION=y
# CONFIG_FB_3DFX is not set
# CONFIG_FB_ARC is not set
# CONFIG_FB_ARK is not set
-# CONFIG_FB_ARMCLCD is not set
# CONFIG_FB_ASILIANT is not set
# CONFIG_FB_ATY128 is not set
# CONFIG_FB_ATY is not set
@@ -2030,7 +2043,6 @@ CONFIG_FB_EFI=y
# CONFIG_FB_IMSTT is not set
# CONFIG_FB_IMX is not set
# CONFIG_FB_KYRO is not set
-# CONFIG_FB_LE80578 is not set
# CONFIG_FB_MATROX_G is not set
# CONFIG_FB_MATROX_I2C is not set
# CONFIG_FB_MATROX is not set
@@ -2098,11 +2110,12 @@ CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
CONFIG_FRAMEBUFFER_CONSOLE=y
CONFIG_FRAME_POINTER=y
+# CONFIG_FRAMER is not set
CONFIG_FRAME_WARN=2048
CONFIG_FRONTSWAP=y
# CONFIG_FSCACHE_DEBUG is not set
-CONFIG_FSCACHE=m
CONFIG_FSCACHE_STATS=y
+CONFIG_FSCACHE=y
CONFIG_FS_DAX=y
# CONFIG_FS_ENCRYPTION is not set
# CONFIG_FSI is not set
@@ -2316,6 +2329,7 @@ CONFIG_HASHTABLE_KUNIT_TEST=m
# CONFIG_HD44780 is not set
# CONFIG_HDC100X is not set
# CONFIG_HDC2010 is not set
+# CONFIG_HDC3020 is not set
CONFIG_HDLC_CISCO=m
CONFIG_HDLC_FR=m
CONFIG_HDLC=m
@@ -2390,6 +2404,7 @@ CONFIG_HID_LOGITECH=m
CONFIG_HID_MAGICMOUSE=y
# CONFIG_HID_MALTRON is not set
# CONFIG_HID_MAYFLASH is not set
+# CONFIG_HID_MCP2200 is not set
# CONFIG_HID_MCP2221 is not set
# CONFIG_HID_MEGAWORLD_FF is not set
CONFIG_HID_MICROSOFT=m
@@ -2500,6 +2515,7 @@ CONFIG_HP_WATCHDOG=m
CONFIG_HSA_AMD_P2P=y
CONFIG_HSA_AMD_SVM=y
CONFIG_HSA_AMD=y
+# CONFIG_HSC030PA is not set
# CONFIG_HSI is not set
CONFIG_HSR=m
# CONFIG_HT16K33 is not set
@@ -2655,6 +2671,7 @@ CONFIG_IAVF=m
# CONFIG_IB700_WDT is not set
# CONFIG_IBM_ASM is not set
CONFIG_IBMASR=m
+CONFIG_ICE_HWMON=y
CONFIG_ICE_HWTS=y
CONFIG_ICE=m
CONFIG_ICE_SWITCHDEV=y
@@ -2778,6 +2795,7 @@ CONFIG_INFINIBAND_BNXT_RE=m
CONFIG_INFINIBAND_CXGB4=m
CONFIG_INFINIBAND_EFA=m
# CONFIG_INFINIBAND_ERDMA is not set
+# CONFIG_INFINIBAND_HFI1 is not set
# CONFIG_INFINIBAND_HNS is not set
CONFIG_INFINIBAND_IPOIB_CM=y
# CONFIG_INFINIBAND_IPOIB_DEBUG_DATA is not set
@@ -2792,14 +2810,14 @@ CONFIG_INFINIBAND=m
CONFIG_INFINIBAND_ON_DEMAND_PAGING=y
CONFIG_INFINIBAND_QEDR=m
# CONFIG_INFINIBAND_QIB is not set
-CONFIG_INFINIBAND_RDMAVT=m
+# CONFIG_INFINIBAND_RDMAVT is not set
# CONFIG_INFINIBAND_RTRS_CLIENT is not set
# CONFIG_INFINIBAND_RTRS_SERVER is not set
CONFIG_INFINIBAND_SRP=m
CONFIG_INFINIBAND_SRPT=m
CONFIG_INFINIBAND_USER_ACCESS=m
CONFIG_INFINIBAND_USER_MAD=m
-CONFIG_INFINIBAND_USNIC=m
+# CONFIG_INFINIBAND_USNIC is not set
# CONFIG_INFINIBAND_VMWARE_PVRDMA is not set
# CONFIG_INFTL is not set
# CONFIG_INIT_ON_ALLOC_DEFAULT_ON is not set
@@ -2888,10 +2906,11 @@ CONFIG_INTEL_IOMMU_PERF_EVENTS=y
# CONFIG_INTEL_ISH_FIRMWARE_DOWNLOADER is not set
# CONFIG_INTEL_ISHTP_ECLITE is not set
# CONFIG_INTEL_LDMA is not set
-# CONFIG_INTEL_MEI_GSC_PROXY is not set
+CONFIG_INTEL_MEI_GSC_PROXY=m
# CONFIG_INTEL_MEI_HDCP is not set
# CONFIG_INTEL_MEI_PXP is not set
# CONFIG_INTEL_MEI_TXE is not set
+# CONFIG_INTEL_MEI_VSC_HW is not set
# CONFIG_INTEL_PMC_CORE is not set
# CONFIG_INTEL_PMT_CLASS is not set
# CONFIG_INTEL_PMT_CRASHLOG is not set
@@ -3132,6 +3151,7 @@ CONFIG_ISCSI_TCP=m
# CONFIG_ISL29020 is not set
# CONFIG_ISL29125 is not set
# CONFIG_ISL29501 is not set
+# CONFIG_ISL76682 is not set
CONFIG_ISO9660_FS=m
CONFIG_IS_SIGNED_TYPE_KUNIT_TEST=m
# CONFIG_IT8712F_WDT is not set
@@ -3174,6 +3194,7 @@ CONFIG_KALLSYMS_BASE_RELATIVE=y
# CONFIG_KALLSYMS_SELFTEST is not set
CONFIG_KALLSYMS=y
# CONFIG_KARMA_PARTITION is not set
+# CONFIG_KASAN_EXTRA_INFO is not set
CONFIG_KASAN_GENERIC=y
# CONFIG_KASAN_HW_TAGS is not set
# CONFIG_KASAN_INLINE is not set
@@ -3270,9 +3291,11 @@ CONFIG_KUNIT_TEST=m
CONFIG_KVM_AMD_SEV=y
# CONFIG_KVM_BOOK3S_HV_P8_TIMING is not set
# CONFIG_KVM_BOOK3S_HV_P9_TIMING is not set
+CONFIG_KVM_HYPERV=y
CONFIG_KVM_MAX_NR_VCPUS=4096
CONFIG_KVM_PROVE_MMU=y
CONFIG_KVM_SMM=y
+CONFIG_KVM_SW_PROTECTED_VM=y
# CONFIG_KVM_WERROR is not set
# CONFIG_KVM_XEN is not set
CONFIG_KVM=y
@@ -3450,6 +3473,7 @@ CONFIG_LSM_MMAP_MIN_ADDR=65535
# CONFIG_LTO_CLANG_FULL is not set
# CONFIG_LTO_CLANG_THIN is not set
CONFIG_LTO_NONE=y
+# CONFIG_LTR390 is not set
# CONFIG_LTR501 is not set
# CONFIG_LTRF216A is not set
# CONFIG_LV0104CS is not set
@@ -3489,7 +3513,7 @@ CONFIG_MAILBOX=y
CONFIG_MANTIS_CORE=m
# CONFIG_MARCH_Z16 is not set
CONFIG_MARVELL_10G_PHY=m
-# CONFIG_MARVELL_88Q2XXX_PHY is not set
+CONFIG_MARVELL_88Q2XXX_PHY=m
# CONFIG_MARVELL_88X2222_PHY is not set
CONFIG_MARVELL_CN10K_DDR_PMU=m
CONFIG_MARVELL_CN10K_TAD_PMU=m
@@ -3509,6 +3533,7 @@ CONFIG_MARVELL_PHY=m
# CONFIG_MAX31827 is not set
# CONFIG_MAX31856 is not set
# CONFIG_MAX31865 is not set
+# CONFIG_MAX34408 is not set
# CONFIG_MAX44000 is not set
# CONFIG_MAX44009 is not set
# CONFIG_MAX517 is not set
@@ -3537,7 +3562,9 @@ CONFIG_MAX_SKB_FRAGS=17
# CONFIG_MCP4531 is not set
# CONFIG_MCP4725 is not set
# CONFIG_MCP4728 is not set
+# CONFIG_MCP4821 is not set
# CONFIG_MCP4922 is not set
+# CONFIG_MCP9600 is not set
# CONFIG_MCTP is not set
CONFIG_MD_AUTODETECT=y
CONFIG_MD_BITMAP_FILE=y
@@ -3772,8 +3799,8 @@ CONFIG_MITIGATE_SPECTRE_BRANCH_HISTORY=y
CONFIG_MLX4_CORE=m
CONFIG_MLX4_DEBUG=y
CONFIG_MLX4_EN_DCB=y
-CONFIG_MLX4_EN=m
-CONFIG_MLX4_INFINIBAND=m
+# CONFIG_MLX4_EN is not set
+# CONFIG_MLX4_INFINIBAND is not set
CONFIG_MLX5_ACCEL=y
CONFIG_MLX5_CLS_ACT=y
CONFIG_MLX5_CORE_EN_DCB=y
@@ -3804,6 +3831,7 @@ CONFIG_MLX5_VDPA_NET=m
CONFIG_MLX5_VFIO_PCI=m
# CONFIG_MLX90614 is not set
# CONFIG_MLX90632 is not set
+# CONFIG_MLX90635 is not set
CONFIG_MLXBF_BOOTCTL=m
CONFIG_MLXBF_GIGE=m
# CONFIG_MLXBF_PMC is not set
@@ -3972,7 +4000,7 @@ CONFIG_MT76x2U=m
CONFIG_MT7921E=m
# CONFIG_MT7921S is not set
# CONFIG_MT7921U is not set
-# CONFIG_MT7925E is not set
+CONFIG_MT7925E=m
# CONFIG_MT7925U is not set
# CONFIG_MT7996E is not set
# CONFIG_MTD_ABSENT is not set
@@ -4035,6 +4063,7 @@ CONFIG_MTD_SPI_NOR_SWP_DISABLE_ON_VOLATILE=y
CONFIG_MTD_UBI_BEB_LIMIT=20
# CONFIG_MTD_UBI_BLOCK is not set
# CONFIG_MTD_UBI_FASTMAP is not set
+# CONFIG_MTD_UBI_FAULT_INJECTION is not set
# CONFIG_MTD_UBI_GLUEBI is not set
CONFIG_MTD_UBI=m
CONFIG_MTD_UBI_WL_THRESHOLD=4096
@@ -4060,7 +4089,6 @@ CONFIG_NAMESPACES=y
CONFIG_NATIONAL_PHY=m
# CONFIG_NAU7802 is not set
# CONFIG_NCN26000_PHY is not set
-CONFIG_ND_BLK=m
CONFIG_ND_BTT=m
# CONFIG_NDC_DIS_DYNAMIC_CACHING is not set
CONFIG_ND_CLAIM=y
@@ -4114,7 +4142,6 @@ CONFIG_NET_DROP_MONITOR=y
# CONFIG_NET_EMATCH is not set
# CONFIG_NET_EMATCH_META is not set
# CONFIG_NET_EMATCH_NBYTE is not set
-# CONFIG_NET_EMATCH_STACK is not set
# CONFIG_NET_EMATCH_TEXT is not set
# CONFIG_NET_EMATCH_U32 is not set
CONFIG_NET_FAILOVER=m
@@ -4396,6 +4423,7 @@ CONFIG_NFS_COMMON=y
CONFIG_NFS_DEBUG=y
# CONFIG_NFSD_FLEXFILELAYOUT is not set
CONFIG_NFS_DISABLE_UDP_SUPPORT=y
+# CONFIG_NFSD_LEGACY_CLIENT_TRACKING is not set
CONFIG_NFSD=m
CONFIG_NFSD_PNFS=y
CONFIG_NFSD_SCSILAYOUT=y
@@ -4545,6 +4573,7 @@ CONFIG_NOUVEAU_DEBUG_PUSH=y
# CONFIG_NOUVEAU_PLATFORM_DRIVER is not set
# CONFIG_NOZOMI is not set
CONFIG_NR_CPUS=4096
+# CONFIG_NSM is not set
# CONFIG_NTB_AMD is not set
# CONFIG_NTB_EPF is not set
# CONFIG_NTB_IDT is not set
@@ -4861,16 +4890,10 @@ CONFIG_PHY_XGENE=y
# CONFIG_PI433 is not set
CONFIG_PID_IN_CONTEXTIDR=y
CONFIG_PID_NS=y
-CONFIG_PINCTRL_ALDERLAKE=m
# CONFIG_PINCTRL_AMD is not set
-# CONFIG_PINCTRL_BROXTON is not set
-# CONFIG_PINCTRL_CHERRYVIEW is not set
# CONFIG_PINCTRL_CS42L43 is not set
# CONFIG_PINCTRL_CY8C95X0 is not set
-CONFIG_PINCTRL_ELKHARTLAKE=m
-CONFIG_PINCTRL_EMMITSBURG=m
# CONFIG_PINCTRL_EQUILIBRIUM is not set
-CONFIG_PINCTRL_ICELAKE=m
CONFIG_PINCTRL_IMX8MM=y
CONFIG_PINCTRL_IMX8MN=y
CONFIG_PINCTRL_IMX8MP=y
@@ -4883,10 +4906,7 @@ CONFIG_PINCTRL_IMX93=y
# CONFIG_PINCTRL_IPQ6018 is not set
# CONFIG_PINCTRL_IPQ8074 is not set
CONFIG_PINCTRL_IPROC_GPIO=y
-# CONFIG_PINCTRL_JASPERLAKE is not set
-CONFIG_PINCTRL_LAKEFIELD=m
# CONFIG_PINCTRL_LPASS_LPI is not set
-# CONFIG_PINCTRL_LYNXPOINT is not set
CONFIG_PINCTRL_MAX77620=y
# CONFIG_PINCTRL_MCP23S08 is not set
# CONFIG_PINCTRL_MDM9615 is not set
@@ -5172,7 +5192,7 @@ CONFIG_RADIO_TEA575X=m
CONFIG_RAID_ATTRS=m
# CONFIG_RANDOM32_SELFTEST is not set
CONFIG_RANDOMIZE_BASE=y
-CONFIG_RANDOMIZE_KSTACK_OFFSET_DEFAULT=y
+# CONFIG_RANDOMIZE_KSTACK_OFFSET_DEFAULT is not set
CONFIG_RANDOMIZE_KSTACK_OFFSET=y
CONFIG_RANDOMIZE_MEMORY_PHYSICAL_PADDING=0xa
CONFIG_RANDOMIZE_MEMORY=y
@@ -5215,8 +5235,8 @@ CONFIG_RD_GZIP=y
CONFIG_RD_LZ4=y
CONFIG_RD_LZMA=y
CONFIG_RD_LZO=y
-CONFIG_RDMA_RXE=m
-CONFIG_RDMA_SIW=m
+# CONFIG_RDMA_RXE is not set
+# CONFIG_RDMA_SIW is not set
# CONFIG_RDS is not set
CONFIG_RD_XZ=y
CONFIG_RD_ZSTD=y
@@ -5270,6 +5290,7 @@ CONFIG_REGULATOR_MAX77686=m
# CONFIG_REGULATOR_MP886X is not set
# CONFIG_REGULATOR_MPQ7920 is not set
# CONFIG_REGULATOR_MT6311 is not set
+# CONFIG_REGULATOR_NETLINK_EVENTS is not set
# CONFIG_REGULATOR_PCA9450 is not set
# CONFIG_REGULATOR_PF8X00 is not set
CONFIG_REGULATOR_PFUZE100=m
@@ -5444,6 +5465,7 @@ CONFIG_RTC_DRV_M41T94=m
CONFIG_RTC_DRV_M48T35=m
CONFIG_RTC_DRV_M48T59=m
# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_MAX31335 is not set
CONFIG_RTC_DRV_MAX6900=m
CONFIG_RTC_DRV_MAX6902=m
# CONFIG_RTC_DRV_MAX6916 is not set
@@ -5537,7 +5559,7 @@ CONFIG_RTW88=m
# CONFIG_RTW89_8851BE is not set
CONFIG_RTW89_8852AE=m
CONFIG_RTW89_8852BE=m
-# CONFIG_RTW89_8852CE is not set
+CONFIG_RTW89_8852CE=m
CONFIG_RTW89_DEBUGFS=y
CONFIG_RTW89_DEBUGMSG=y
CONFIG_RTW89=m
@@ -5551,6 +5573,7 @@ CONFIG_RXKAD=y
CONFIG_RXPERF=m
# CONFIG_S390_KPROBES_SANITY_TEST is not set
# CONFIG_S390_MODULES_SANITY_TEST is not set
+# CONFIG_SAMPLE_CGROUP is not set
# CONFIG_SAMPLE_FTRACE_OPS is not set
# CONFIG_SAMPLE_KMEMLEAK is not set
# CONFIG_SAMPLES is not set
@@ -5694,7 +5717,7 @@ CONFIG_SECONDARY_TRUSTED_KEYRING=y
CONFIG_SECRETMEM=y
CONFIG_SECTION_MISMATCH_WARN_ONLY=y
# CONFIG_SECURITY_APPARMOR is not set
-# CONFIG_SECURITY_DMESG_RESTRICT is not set
+CONFIG_SECURITY_DMESG_RESTRICT=y
CONFIG_SECURITYFS=y
CONFIG_SECURITY_INFINIBAND=y
# CONFIG_SECURITY_LANDLOCK is not set
@@ -5789,6 +5812,7 @@ CONFIG_SENSORS_FSCHMD=m
# CONFIG_SENSORS_FTSTEUTATES is not set
# CONFIG_SENSORS_G760A is not set
CONFIG_SENSORS_G762=m
+# CONFIG_SENSORS_GIGABYTE_WATERFORCE is not set
# CONFIG_SENSORS_GL518SM is not set
# CONFIG_SENSORS_GL520SM is not set
# CONFIG_SENSORS_GPIO_FAN is not set
@@ -5854,6 +5878,7 @@ CONFIG_SENSORS_LTC4222=m
# CONFIG_SENSORS_LTC4245 is not set
CONFIG_SENSORS_LTC4260=m
# CONFIG_SENSORS_LTC4261 is not set
+# CONFIG_SENSORS_LTC4286 is not set
CONFIG_SENSORS_MAX1111=m
# CONFIG_SENSORS_MAX127 is not set
# CONFIG_SENSORS_MAX15301 is not set
@@ -5881,9 +5906,11 @@ CONFIG_SENSORS_MAX31790=m
# CONFIG_SENSORS_MC34VR500 is not set
# CONFIG_SENSORS_MCP3021 is not set
# CONFIG_SENSORS_MLXREG_FAN is not set
+# CONFIG_SENSORS_MP2856 is not set
# CONFIG_SENSORS_MP2888 is not set
# CONFIG_SENSORS_MP2975 is not set
# CONFIG_SENSORS_MP5023 is not set
+# CONFIG_SENSORS_MP5990 is not set
# CONFIG_SENSORS_MPQ7932 is not set
# CONFIG_SENSORS_MR75203 is not set
# CONFIG_SENSORS_NCT6683 is not set
@@ -6070,10 +6097,8 @@ CONFIG_SIGNED_PE_FILE_VERIFICATION=y
CONFIG_SIPHASH_KUNIT_TEST=m
# CONFIG_SKGE is not set
# CONFIG_SKY2 is not set
-# CONFIG_SLAB_DEPRECATED is not set
CONFIG_SLAB_FREELIST_HARDENED=y
CONFIG_SLAB_FREELIST_RANDOM=y
-# CONFIG_SLAB is not set
# CONFIG_SLAB_MERGE_DEFAULT is not set
# CONFIG_SLIC_DS26522 is not set
# CONFIG_SLIMBUS is not set
@@ -6843,6 +6868,7 @@ CONFIG_SRAM=y
# CONFIG_SSB is not set
# CONFIG_SSFDC is not set
# CONFIG_SSIF_IPMI_BMC is not set
+CONFIG_STACKDEPOT_MAX_FRAMES=64
CONFIG_STACK_HASH_ORDER=20
CONFIG_STACKINIT_KUNIT_TEST=m
CONFIG_STACKPROTECTOR_STRONG=y
@@ -6971,7 +6997,7 @@ CONFIG_TCP_CONG_DCTCP=m
# CONFIG_TCP_CONG_HSTCP is not set
CONFIG_TCP_CONG_HTCP=m
# CONFIG_TCP_CONG_HYBLA is not set
-# CONFIG_TCP_CONG_ILLINOIS is not set
+CONFIG_TCP_CONG_ILLINOIS=m
# CONFIG_TCP_CONG_LP is not set
CONFIG_TCP_CONG_NV=m
# CONFIG_TCP_CONG_SCALABLE is not set
@@ -7050,6 +7076,7 @@ CONFIG_TEST_STRING_HELPERS=m
# CONFIG_TEST_UUID is not set
CONFIG_TEST_VMALLOC=m
# CONFIG_TEST_XARRAY is not set
+# CONFIG_THERMAL_DEBUGFS is not set
# CONFIG_THERMAL_DEFAULT_GOV_FAIR_SHARE is not set
CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y
# CONFIG_THERMAL_DEFAULT_GOV_USER_SPACE is not set
@@ -7233,6 +7260,7 @@ CONFIG_TOUCHSCREEN_WACOM_I2C=m
CONFIG_TRACER_SNAPSHOT=y
CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS=y
# CONFIG_TRANSPARENT_HUGEPAGE_MADVISE is not set
+# CONFIG_TRANSPARENT_HUGEPAGE_NEVER is not set
CONFIG_TRANSPARENT_HUGEPAGE=y
CONFIG_TREE_RCU=y
# CONFIG_TRIM_UNUSED_KSYMS is not set
@@ -7263,6 +7291,7 @@ CONFIG_TYPEC_MUX_FSA4480=m
# CONFIG_TYPEC_MUX_NB7VPQ904M is not set
CONFIG_TYPEC_MUX_PI3USB30532=m
# CONFIG_TYPEC_MUX_PTN36502 is not set
+# CONFIG_TYPEC_MUX_WCD939X_USBSS is not set
# CONFIG_TYPEC_NVIDIA_ALTMODE is not set
# CONFIG_TYPEC_QCOM_PMIC is not set
# CONFIG_TYPEC_RT1711H is not set
@@ -7635,6 +7664,7 @@ CONFIG_VDPA_SIM_NET=m
# CONFIG_VDPA_USER is not set
# CONFIG_VEML6030 is not set
# CONFIG_VEML6070 is not set
+# CONFIG_VEML6075 is not set
CONFIG_VETH=m
CONFIG_VEXPRESS_CONFIG=y
# CONFIG_VF610_ADC is not set
@@ -7642,6 +7672,7 @@ CONFIG_VEXPRESS_CONFIG=y
CONFIG_VFAT_FS=m
# CONFIG_VFIO_AMBA is not set
CONFIG_VFIO_CONTAINER=y
+# CONFIG_VFIO_DEBUGFS is not set
CONFIG_VFIO_DEVICE_CDEV=y
CONFIG_VFIO_FSL_MC=m
CONFIG_VFIO_GROUP=y
@@ -7678,6 +7709,7 @@ CONFIG_VHOST_VSOCK=m
# CONFIG_VIDEO_ADV_DEBUG is not set
# CONFIG_VIDEO_AK7375 is not set
# CONFIG_VIDEO_AK881X is not set
+# CONFIG_VIDEO_ALVIUM_CSI2 is not set
# CONFIG_VIDEO_AR0521 is not set
CONFIG_VIDEO_AU0828=m
# CONFIG_VIDEO_AU0828_RC is not set
@@ -7726,6 +7758,8 @@ CONFIG_VIDEO_EM28XX_RC=m
# CONFIG_VIDEO_FB_IVTV_FORCE_PAT is not set
CONFIG_VIDEO_FB_IVTV=m
# CONFIG_VIDEO_FIXED_MINOR_RANGES is not set
+# CONFIG_VIDEO_GC0308 is not set
+# CONFIG_VIDEO_GC2145 is not set
# CONFIG_VIDEO_GO7007 is not set
# CONFIG_VIDEO_GS1662 is not set
CONFIG_VIDEO_HDPVR=m
@@ -7795,6 +7829,7 @@ CONFIG_VIDEO_IVTV=m
# CONFIG_VIDEO_OV5675 is not set
# CONFIG_VIDEO_OV5693 is not set
# CONFIG_VIDEO_OV5695 is not set
+# CONFIG_VIDEO_OV64A40 is not set
# CONFIG_VIDEO_OV6650 is not set
# CONFIG_VIDEO_OV7251 is not set
# CONFIG_VIDEO_OV7640 is not set
@@ -7847,6 +7882,7 @@ CONFIG_VIDEO_SAA7164=m
# CONFIG_VIDEO_TDA9840 is not set
# CONFIG_VIDEO_TEA6415C is not set
# CONFIG_VIDEO_TEA6420 is not set
+# CONFIG_VIDEO_THP7312 is not set
# CONFIG_VIDEO_THS7303 is not set
# CONFIG_VIDEO_THS8200 is not set
# CONFIG_VIDEO_TLV320AIC23B is not set
@@ -7862,6 +7898,7 @@ CONFIG_VIDEO_TUNER=m
# CONFIG_VIDEO_TW5864 is not set
# CONFIG_VIDEO_TW686X is not set
# CONFIG_VIDEO_TW68 is not set
+# CONFIG_VIDEO_TW9900 is not set
# CONFIG_VIDEO_TW9903 is not set
# CONFIG_VIDEO_TW9906 is not set
# CONFIG_VIDEO_TW9910 is not set
@@ -7897,6 +7934,7 @@ CONFIG_VIRTIO_PCI_LEGACY=y
CONFIG_VIRTIO_PCI=y
# CONFIG_VIRTIO_PMEM is not set
CONFIG_VIRTIO_VDPA=m
+# CONFIG_VIRTIO_VFIO_PCI is not set
CONFIG_VIRTIO_VSOCKETS=m
CONFIG_VIRTIO=y
CONFIG_VIRTUALIZATION=y
@@ -8021,7 +8059,7 @@ CONFIG_XFS_POSIX_ACL=y
CONFIG_XFS_QUOTA=y
# CONFIG_XFS_RT is not set
# CONFIG_XFS_SUPPORT_ASCII_CI is not set
-CONFIG_XFS_SUPPORT_V4=y
+# CONFIG_XFS_SUPPORT_V4 is not set
CONFIG_XFS_WARN=y
# CONFIG_XGENE_DMA is not set
CONFIG_XGENE_PMU=y
@@ -8085,6 +8123,7 @@ CONFIG_ZRAM_DEF_COMP_LZORLE=y
CONFIG_ZRAM=m
CONFIG_ZRAM_MEMORY_TRACKING=y
# CONFIG_ZRAM_MULTI_COMP is not set
+CONFIG_ZRAM_TRACK_ENTRY_ACTIME=y
CONFIG_ZRAM_WRITEBACK=y
CONFIG_ZSMALLOC_CHAIN_SIZE=8
CONFIG_ZSMALLOC_STAT=y
@@ -8097,6 +8136,7 @@ CONFIG_ZSWAP_COMPRESSOR_DEFAULT_LZO=y
# CONFIG_ZSWAP_COMPRESSOR_DEFAULT_ZSTD is not set
# CONFIG_ZSWAP_DEFAULT_ON is not set
# CONFIG_ZSWAP_EXCLUSIVE_LOADS_DEFAULT_ON is not set
+# CONFIG_ZSWAP_SHRINKER_DEFAULT_ON is not set
CONFIG_ZSWAP=y
# CONFIG_ZSWAP_ZPOOL_DEFAULT_Z3FOLD is not set
CONFIG_ZSWAP_ZPOOL_DEFAULT_ZBUD=y
@@ -8106,7 +8146,7 @@ CONFIG_ZENIFY=y
CONFIG_NTSYNC=y
CONFIG_USER_NS_UNPRIVILEGED=y
CONFIG_TCP_CONG_BBR2=m
-# CONFIG_SCHED_PDS is not set
+CONFIG_SCHED_BORE=y
CONFIG_HID_IPTS=m
CONFIG_HID_ITHC=m
CONFIG_SURFACE_BOOK1_DGPU_SWITCH=m
@@ -8115,11 +8155,8 @@ CONFIG_LEDS_TPS68470=m
CONFIG_SENSORS_SURFACE_FAN=m
CONFIG_SENSORS_SURFACE_TEMP=m
CONFIG_DRM_AMD_COLOR_STEAMDECK=y
-CONFIG_BMI323_I2C=m
-CONFIG_BMI323_SPI=m
CONFIG_DRM_APPLETBDRM=m
CONFIG_HID_APPLETB_BL=m
CONFIG_HID_APPLETB_KBD=m
CONFIG_HID_APPLE_MAGIC_BACKLIGHT=m
CONFIG_APPLE_BCE=m
-CONFIG_SCHED_BORE=y
diff --git a/SOURCES/kernel-aarch64-rt-rhel.config b/SOURCES/kernel-aarch64-rt-rhel.config
index 24d323d..926bb69 100644
--- a/SOURCES/kernel-aarch64-rt-rhel.config
+++ b/SOURCES/kernel-aarch64-rt-rhel.config
@@ -91,6 +91,7 @@ CONFIG_ACPI=y
# CONFIG_AD5791 is not set
# CONFIG_AD5933 is not set
# CONFIG_AD7091R5 is not set
+# CONFIG_AD7091R8 is not set
# CONFIG_AD7124 is not set
# CONFIG_AD7150 is not set
# CONFIG_AD7192 is not set
@@ -217,6 +218,7 @@ CONFIG_AMD_PHY=m
CONFIG_AMD_PMC=m
# CONFIG_AMD_PTDMA is not set
# CONFIG_AMDTEE is not set
+# CONFIG_AMD_WBRF is not set
# CONFIG_AMD_XGBE_DCB is not set
CONFIG_AMD_XGBE=m
# CONFIG_AMIGA_PARTITION is not set
@@ -225,6 +227,7 @@ CONFIG_AMPERE_ERRATUM_AC03_CPU_38=y
# CONFIG_AMT is not set
# CONFIG_ANDROID_BINDER_IPC is not set
# CONFIG_ANON_VMA_NAME is not set
+# CONFIG_AOSONG_AGS02MA is not set
# CONFIG_APDS9300 is not set
# CONFIG_APDS9802ALS is not set
# CONFIG_APDS9960 is not set
@@ -503,6 +506,7 @@ CONFIG_BACKLIGHT_LED=m
# CONFIG_BACKLIGHT_LM3639 is not set
CONFIG_BACKLIGHT_LP855X=m
# CONFIG_BACKLIGHT_LV5207LP is not set
+# CONFIG_BACKLIGHT_MP3309C is not set
CONFIG_BACKLIGHT_PWM=m
# CONFIG_BACKLIGHT_QCOM_WLED is not set
# CONFIG_BACKLIGHT_SAHARA is not set
@@ -602,6 +606,7 @@ CONFIG_BLK_DEV_SR=m
# CONFIG_BLK_DEV_THROTTLING_LOW is not set
CONFIG_BLK_DEV_THROTTLING=y
# CONFIG_BLK_DEV_UBLK is not set
+CONFIG_BLK_DEV_WRITE_MOUNTED=y
CONFIG_BLK_DEV=y
CONFIG_BLK_DEV_ZONED=y
# CONFIG_BLK_INLINE_ENCRYPTION is not set
@@ -621,6 +626,8 @@ CONFIG_BLOCK=y
# CONFIG_BMI088_ACCEL is not set
# CONFIG_BMI160_I2C is not set
# CONFIG_BMI160_SPI is not set
+CONFIG_BMI323_I2C=m
+CONFIG_BMI323_SPI=m
# CONFIG_BMP280 is not set
# CONFIG_BNA is not set
CONFIG_BNX2=m
@@ -636,7 +643,6 @@ CONFIG_BONDING=m
# CONFIG_BOOT_CONFIG_FORCE is not set
CONFIG_BOOT_CONFIG=y
# CONFIG_BOOTPARAM_HARDLOCKUP_PANIC is not set
-# CONFIG_BOOTPARAM_HOTPLUG_CPU0 is not set
# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
@@ -1104,7 +1110,6 @@ CONFIG_CRYPTO_CAST5=m
CONFIG_CRYPTO_CAST6=m
CONFIG_CRYPTO_CBC=y
CONFIG_CRYPTO_CCM=y
-CONFIG_CRYPTO_CFB=y
CONFIG_CRYPTO_CHACHA20=m
CONFIG_CRYPTO_CHACHA20_NEON=y
CONFIG_CRYPTO_CHACHA20POLY1305=m
@@ -1156,6 +1161,7 @@ CONFIG_CRYPTO_DEV_HISI_SEC=m
CONFIG_CRYPTO_DEV_NITROX_CNN55XX=m
CONFIG_CRYPTO_DEV_OCTEONTX2_CPT=m
# CONFIG_CRYPTO_DEV_OCTEONTX_CPT is not set
+# CONFIG_CRYPTO_DEV_QAT_420XX is not set
# CONFIG_CRYPTO_DEV_QAT_4XXX is not set
# CONFIG_CRYPTO_DEV_QAT_C3XXX is not set
# CONFIG_CRYPTO_DEV_QAT_C3XXXVF is not set
@@ -1217,7 +1223,6 @@ CONFIG_CRYPTO_MD5=y
CONFIG_CRYPTO_MICHAEL_MIC=m
CONFIG_CRYPTO_NHPOLY1305_NEON=m
CONFIG_CRYPTO_NULL=y
-CONFIG_CRYPTO_OFB=y
CONFIG_CRYPTO_PCBC=m
CONFIG_CRYPTO_PCRYPT=m
CONFIG_CRYPTO_POLY1305=m
@@ -1368,7 +1373,7 @@ CONFIG_DEBUG_SHIRQ=y
# CONFIG_DEBUG_VM_MAPLE_TREE is not set
# CONFIG_DEBUG_VM_PGFLAGS is not set
# CONFIG_DEBUG_VM_PGTABLE is not set
-# CONFIG_DEBUG_VM_RB is not set # revisit this if performance isn't horrible
+# CONFIG_DEBUG_VM_RB is not set
# CONFIG_DEBUG_VM_SHOOT_LAZIES is not set
# CONFIG_DEBUG_VM_VMACACHE is not set
# CONFIG_DEBUG_WQ_FORCE_RR_CPU is not set
@@ -1481,6 +1486,7 @@ CONFIG_DP83867_PHY=m
# CONFIG_DP83869_PHY is not set
CONFIG_DP83TC811_PHY=m
# CONFIG_DP83TD510_PHY is not set
+# CONFIG_DP83TG720_PHY is not set
CONFIG_DPAA2_CONSOLE=m
# CONFIG_DPM_WATCHDOG is not set
# CONFIG_DPOT_DAC is not set
@@ -1539,6 +1545,7 @@ CONFIG_DRM_I915_COMPRESS_ERROR=y
# CONFIG_DRM_I915_DEBUG_MMIO is not set
# CONFIG_DRM_I915_DEBUG_RUNTIME_PM is not set
# CONFIG_DRM_I915_DEBUG_VBLANK_EVADE is not set
+# CONFIG_DRM_I915_DEBUG_WAKEREF is not set
CONFIG_DRM_I915_FENCE_TIMEOUT=10000
CONFIG_DRM_I915_HEARTBEAT_INTERVAL=2500
# CONFIG_DRM_I915_LOW_LEVEL_TRACEPOINTS is not set
@@ -1583,6 +1590,7 @@ CONFIG_DRM_MGAG200=m
# CONFIG_DRM_MSM is not set
# CONFIG_DRM_MXSFB is not set
CONFIG_DRM_NOUVEAU_BACKLIGHT=y
+# CONFIG_DRM_NOUVEAU_GSP_DEFAULT is not set
CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_NWL_MIPI_DSI is not set
# CONFIG_DRM_NXP_PTN3460 is not set
@@ -1603,6 +1611,7 @@ CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_PANEL_HIMAX_HX8394 is not set
# CONFIG_DRM_PANEL_ILITEK_IL9322 is not set
# CONFIG_DRM_PANEL_ILITEK_ILI9341 is not set
+# CONFIG_DRM_PANEL_ILITEK_ILI9805 is not set
# CONFIG_DRM_PANEL_ILITEK_ILI9881C is not set
# CONFIG_DRM_PANEL_ILITEK_ILI9882T is not set
# CONFIG_DRM_PANEL_INNOLUX_EJ030NA is not set
@@ -1665,6 +1674,7 @@ CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_PANEL_SONY_TD4353_JDI is not set
# CONFIG_DRM_PANEL_SONY_TULIP_TRULY_NT35521 is not set
# CONFIG_DRM_PANEL_STARTEK_KD070FHFID015 is not set
+# CONFIG_DRM_PANEL_SYNAPTICS_R63353 is not set
# CONFIG_DRM_PANEL_TDO_TL070WSH30 is not set
# CONFIG_DRM_PANEL_TPO_TD028TTEC1 is not set
# CONFIG_DRM_PANEL_TPO_TD043MTEA1 is not set
@@ -1679,6 +1689,7 @@ CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_PARADE_PS8622 is not set
# CONFIG_DRM_PARADE_PS8640 is not set
# CONFIG_DRM_PL111 is not set
+# CONFIG_DRM_POWERVR is not set
CONFIG_DRM_QXL=m
CONFIG_DRM_RADEON=m
CONFIG_DRM_RADEON_USERPTR=y
@@ -1719,6 +1730,7 @@ CONFIG_DRM_VKMS=m
CONFIG_DRM_VMWGFX_FBCON=y
CONFIG_DRM_VMWGFX=m
# CONFIG_DRM_VMWGFX_MKSSTATS is not set
+# CONFIG_DRM_XE is not set
# CONFIG_DRM_XEN_FRONTEND is not set
CONFIG_DRM=y
# CONFIG_DS1682 is not set
@@ -1853,6 +1865,7 @@ CONFIG_DVB_USB_VP7045=m
# CONFIG_DVB_USB_ZD1301 is not set
# CONFIG_DVB_ZD1301_DEMOD is not set
# CONFIG_DW_AXI_DMAC is not set
+# CONFIG_DWC_PCIE_PMU is not set
CONFIG_DW_DMAC=m
CONFIG_DW_DMAC_PCI=m
# CONFIG_DW_EDMA is not set
@@ -1934,6 +1947,7 @@ CONFIG_EPOLL=y
# CONFIG_EQUALIZER is not set
# CONFIG_EROFS_FS_DEBUG is not set
CONFIG_EROFS_FS=m
+# CONFIG_EROFS_FS_ONDEMAND is not set
CONFIG_EROFS_FS_POSIX_ACL=y
CONFIG_EROFS_FS_SECURITY=y
CONFIG_EROFS_FS_XATTR=y
@@ -1994,7 +2008,6 @@ CONFIG_FAT_KUNIT_TEST=m
# CONFIG_FB_3DFX is not set
# CONFIG_FB_ARC is not set
# CONFIG_FB_ARK is not set
-# CONFIG_FB_ARMCLCD is not set
# CONFIG_FB_ASILIANT is not set
# CONFIG_FB_ATY128 is not set
# CONFIG_FB_ATY is not set
@@ -2014,7 +2027,6 @@ CONFIG_FB_EFI=y
# CONFIG_FB_IMSTT is not set
# CONFIG_FB_IMX is not set
# CONFIG_FB_KYRO is not set
-# CONFIG_FB_LE80578 is not set
# CONFIG_FB_MATROX_G is not set
# CONFIG_FB_MATROX_I2C is not set
# CONFIG_FB_MATROX is not set
@@ -2082,11 +2094,12 @@ CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
CONFIG_FRAMEBUFFER_CONSOLE=y
CONFIG_FRAME_POINTER=y
+# CONFIG_FRAMER is not set
CONFIG_FRAME_WARN=2048
CONFIG_FRONTSWAP=y
# CONFIG_FSCACHE_DEBUG is not set
-CONFIG_FSCACHE=m
CONFIG_FSCACHE_STATS=y
+CONFIG_FSCACHE=y
CONFIG_FS_DAX=y
# CONFIG_FS_ENCRYPTION is not set
# CONFIG_FSI is not set
@@ -2300,6 +2313,7 @@ CONFIG_HASHTABLE_KUNIT_TEST=m
# CONFIG_HD44780 is not set
# CONFIG_HDC100X is not set
# CONFIG_HDC2010 is not set
+# CONFIG_HDC3020 is not set
CONFIG_HDLC_CISCO=m
CONFIG_HDLC_FR=m
CONFIG_HDLC=m
@@ -2374,6 +2388,7 @@ CONFIG_HID_LOGITECH=m
CONFIG_HID_MAGICMOUSE=y
# CONFIG_HID_MALTRON is not set
# CONFIG_HID_MAYFLASH is not set
+# CONFIG_HID_MCP2200 is not set
# CONFIG_HID_MCP2221 is not set
# CONFIG_HID_MEGAWORLD_FF is not set
CONFIG_HID_MICROSOFT=m
@@ -2484,6 +2499,7 @@ CONFIG_HP_WATCHDOG=m
CONFIG_HSA_AMD_P2P=y
CONFIG_HSA_AMD_SVM=y
CONFIG_HSA_AMD=y
+# CONFIG_HSC030PA is not set
# CONFIG_HSI is not set
CONFIG_HSR=m
# CONFIG_HT16K33 is not set
@@ -2639,6 +2655,7 @@ CONFIG_IAVF=m
# CONFIG_IB700_WDT is not set
# CONFIG_IBM_ASM is not set
CONFIG_IBMASR=m
+CONFIG_ICE_HWMON=y
CONFIG_ICE_HWTS=y
CONFIG_ICE=m
CONFIG_ICE_SWITCHDEV=y
@@ -2762,6 +2779,7 @@ CONFIG_INFINIBAND_BNXT_RE=m
CONFIG_INFINIBAND_CXGB4=m
CONFIG_INFINIBAND_EFA=m
# CONFIG_INFINIBAND_ERDMA is not set
+# CONFIG_INFINIBAND_HFI1 is not set
# CONFIG_INFINIBAND_HNS is not set
CONFIG_INFINIBAND_IPOIB_CM=y
# CONFIG_INFINIBAND_IPOIB_DEBUG_DATA is not set
@@ -2776,14 +2794,14 @@ CONFIG_INFINIBAND=m
CONFIG_INFINIBAND_ON_DEMAND_PAGING=y
CONFIG_INFINIBAND_QEDR=m
# CONFIG_INFINIBAND_QIB is not set
-CONFIG_INFINIBAND_RDMAVT=m
+# CONFIG_INFINIBAND_RDMAVT is not set
# CONFIG_INFINIBAND_RTRS_CLIENT is not set
# CONFIG_INFINIBAND_RTRS_SERVER is not set
CONFIG_INFINIBAND_SRP=m
CONFIG_INFINIBAND_SRPT=m
CONFIG_INFINIBAND_USER_ACCESS=m
CONFIG_INFINIBAND_USER_MAD=m
-CONFIG_INFINIBAND_USNIC=m
+# CONFIG_INFINIBAND_USNIC is not set
# CONFIG_INFINIBAND_VMWARE_PVRDMA is not set
# CONFIG_INFTL is not set
# CONFIG_INIT_ON_ALLOC_DEFAULT_ON is not set
@@ -2872,10 +2890,11 @@ CONFIG_INTEL_IOMMU_PERF_EVENTS=y
# CONFIG_INTEL_ISH_FIRMWARE_DOWNLOADER is not set
# CONFIG_INTEL_ISHTP_ECLITE is not set
# CONFIG_INTEL_LDMA is not set
-# CONFIG_INTEL_MEI_GSC_PROXY is not set
+CONFIG_INTEL_MEI_GSC_PROXY=m
# CONFIG_INTEL_MEI_HDCP is not set
# CONFIG_INTEL_MEI_PXP is not set
# CONFIG_INTEL_MEI_TXE is not set
+# CONFIG_INTEL_MEI_VSC_HW is not set
# CONFIG_INTEL_PMC_CORE is not set
# CONFIG_INTEL_PMT_CLASS is not set
# CONFIG_INTEL_PMT_CRASHLOG is not set
@@ -3116,6 +3135,7 @@ CONFIG_ISCSI_TCP=m
# CONFIG_ISL29020 is not set
# CONFIG_ISL29125 is not set
# CONFIG_ISL29501 is not set
+# CONFIG_ISL76682 is not set
CONFIG_ISO9660_FS=m
CONFIG_IS_SIGNED_TYPE_KUNIT_TEST=m
# CONFIG_IT8712F_WDT is not set
@@ -3158,6 +3178,7 @@ CONFIG_KALLSYMS_BASE_RELATIVE=y
# CONFIG_KALLSYMS_SELFTEST is not set
CONFIG_KALLSYMS=y
# CONFIG_KARMA_PARTITION is not set
+# CONFIG_KASAN_EXTRA_INFO is not set
# CONFIG_KASAN is not set
# CONFIG_KASAN_MODULE_TEST is not set
# CONFIG_KASAN_SW_TAGS is not set
@@ -3249,9 +3270,11 @@ CONFIG_KUNIT_TEST=m
CONFIG_KVM_AMD_SEV=y
# CONFIG_KVM_BOOK3S_HV_P8_TIMING is not set
# CONFIG_KVM_BOOK3S_HV_P9_TIMING is not set
+CONFIG_KVM_HYPERV=y
CONFIG_KVM_MAX_NR_VCPUS=4096
# CONFIG_KVM_PROVE_MMU is not set
CONFIG_KVM_SMM=y
+CONFIG_KVM_SW_PROTECTED_VM=y
# CONFIG_KVM_WERROR is not set
# CONFIG_KVM_XEN is not set
CONFIG_KVM=y
@@ -3429,6 +3452,7 @@ CONFIG_LSM_MMAP_MIN_ADDR=65535
# CONFIG_LTO_CLANG_FULL is not set
# CONFIG_LTO_CLANG_THIN is not set
CONFIG_LTO_NONE=y
+# CONFIG_LTR390 is not set
# CONFIG_LTR501 is not set
# CONFIG_LTRF216A is not set
# CONFIG_LV0104CS is not set
@@ -3468,7 +3492,7 @@ CONFIG_MAILBOX=y
CONFIG_MANTIS_CORE=m
# CONFIG_MARCH_Z16 is not set
CONFIG_MARVELL_10G_PHY=m
-# CONFIG_MARVELL_88Q2XXX_PHY is not set
+CONFIG_MARVELL_88Q2XXX_PHY=m
# CONFIG_MARVELL_88X2222_PHY is not set
CONFIG_MARVELL_CN10K_DDR_PMU=m
CONFIG_MARVELL_CN10K_TAD_PMU=m
@@ -3488,6 +3512,7 @@ CONFIG_MARVELL_PHY=m
# CONFIG_MAX31827 is not set
# CONFIG_MAX31856 is not set
# CONFIG_MAX31865 is not set
+# CONFIG_MAX34408 is not set
# CONFIG_MAX44000 is not set
# CONFIG_MAX44009 is not set
# CONFIG_MAX517 is not set
@@ -3516,7 +3541,9 @@ CONFIG_MAX_SKB_FRAGS=17
# CONFIG_MCP4531 is not set
# CONFIG_MCP4725 is not set
# CONFIG_MCP4728 is not set
+# CONFIG_MCP4821 is not set
# CONFIG_MCP4922 is not set
+# CONFIG_MCP9600 is not set
# CONFIG_MCTP is not set
CONFIG_MD_AUTODETECT=y
CONFIG_MD_BITMAP_FILE=y
@@ -3751,8 +3778,8 @@ CONFIG_MITIGATE_SPECTRE_BRANCH_HISTORY=y
CONFIG_MLX4_CORE=m
CONFIG_MLX4_DEBUG=y
CONFIG_MLX4_EN_DCB=y
-CONFIG_MLX4_EN=m
-CONFIG_MLX4_INFINIBAND=m
+# CONFIG_MLX4_EN is not set
+# CONFIG_MLX4_INFINIBAND is not set
CONFIG_MLX5_ACCEL=y
CONFIG_MLX5_CLS_ACT=y
CONFIG_MLX5_CORE_EN_DCB=y
@@ -3783,6 +3810,7 @@ CONFIG_MLX5_VDPA_NET=m
CONFIG_MLX5_VFIO_PCI=m
# CONFIG_MLX90614 is not set
# CONFIG_MLX90632 is not set
+# CONFIG_MLX90635 is not set
CONFIG_MLXBF_BOOTCTL=m
CONFIG_MLXBF_GIGE=m
# CONFIG_MLXBF_PMC is not set
@@ -3951,7 +3979,7 @@ CONFIG_MT76x2U=m
CONFIG_MT7921E=m
# CONFIG_MT7921S is not set
# CONFIG_MT7921U is not set
-# CONFIG_MT7925E is not set
+CONFIG_MT7925E=m
# CONFIG_MT7925U is not set
# CONFIG_MT7996E is not set
# CONFIG_MTD_ABSENT is not set
@@ -4014,6 +4042,7 @@ CONFIG_MTD_SPI_NOR_SWP_DISABLE_ON_VOLATILE=y
CONFIG_MTD_UBI_BEB_LIMIT=20
# CONFIG_MTD_UBI_BLOCK is not set
# CONFIG_MTD_UBI_FASTMAP is not set
+# CONFIG_MTD_UBI_FAULT_INJECTION is not set
# CONFIG_MTD_UBI_GLUEBI is not set
CONFIG_MTD_UBI=m
CONFIG_MTD_UBI_WL_THRESHOLD=4096
@@ -4039,7 +4068,6 @@ CONFIG_NAMESPACES=y
CONFIG_NATIONAL_PHY=m
# CONFIG_NAU7802 is not set
# CONFIG_NCN26000_PHY is not set
-CONFIG_ND_BLK=m
CONFIG_ND_BTT=m
# CONFIG_NDC_DIS_DYNAMIC_CACHING is not set
CONFIG_ND_CLAIM=y
@@ -4093,7 +4121,6 @@ CONFIG_NET_DROP_MONITOR=y
# CONFIG_NET_EMATCH is not set
# CONFIG_NET_EMATCH_META is not set
# CONFIG_NET_EMATCH_NBYTE is not set
-# CONFIG_NET_EMATCH_STACK is not set
# CONFIG_NET_EMATCH_TEXT is not set
# CONFIG_NET_EMATCH_U32 is not set
CONFIG_NET_FAILOVER=m
@@ -4375,6 +4402,7 @@ CONFIG_NFS_COMMON=y
CONFIG_NFS_DEBUG=y
# CONFIG_NFSD_FLEXFILELAYOUT is not set
CONFIG_NFS_DISABLE_UDP_SUPPORT=y
+# CONFIG_NFSD_LEGACY_CLIENT_TRACKING is not set
CONFIG_NFSD=m
CONFIG_NFSD_PNFS=y
CONFIG_NFSD_SCSILAYOUT=y
@@ -4524,6 +4552,7 @@ CONFIG_NOUVEAU_DEBUG_DEFAULT=3
# CONFIG_NOUVEAU_PLATFORM_DRIVER is not set
# CONFIG_NOZOMI is not set
CONFIG_NR_CPUS=4096
+# CONFIG_NSM is not set
# CONFIG_NTB_AMD is not set
# CONFIG_NTB_EPF is not set
# CONFIG_NTB_IDT is not set
@@ -4838,16 +4867,10 @@ CONFIG_PHY_XGENE=y
# CONFIG_PI433 is not set
CONFIG_PID_IN_CONTEXTIDR=y
CONFIG_PID_NS=y
-CONFIG_PINCTRL_ALDERLAKE=m
# CONFIG_PINCTRL_AMD is not set
-# CONFIG_PINCTRL_BROXTON is not set
-# CONFIG_PINCTRL_CHERRYVIEW is not set
# CONFIG_PINCTRL_CS42L43 is not set
# CONFIG_PINCTRL_CY8C95X0 is not set
-CONFIG_PINCTRL_ELKHARTLAKE=m
-CONFIG_PINCTRL_EMMITSBURG=m
# CONFIG_PINCTRL_EQUILIBRIUM is not set
-CONFIG_PINCTRL_ICELAKE=m
CONFIG_PINCTRL_IMX8MM=y
CONFIG_PINCTRL_IMX8MN=y
CONFIG_PINCTRL_IMX8MP=y
@@ -4860,10 +4883,7 @@ CONFIG_PINCTRL_IMX93=y
# CONFIG_PINCTRL_IPQ6018 is not set
# CONFIG_PINCTRL_IPQ8074 is not set
CONFIG_PINCTRL_IPROC_GPIO=y
-# CONFIG_PINCTRL_JASPERLAKE is not set
-CONFIG_PINCTRL_LAKEFIELD=m
# CONFIG_PINCTRL_LPASS_LPI is not set
-# CONFIG_PINCTRL_LYNXPOINT is not set
CONFIG_PINCTRL_MAX77620=y
# CONFIG_PINCTRL_MCP23S08 is not set
# CONFIG_PINCTRL_MDM9615 is not set
@@ -5149,7 +5169,7 @@ CONFIG_RADIO_TEA575X=m
CONFIG_RAID_ATTRS=m
# CONFIG_RANDOM32_SELFTEST is not set
CONFIG_RANDOMIZE_BASE=y
-CONFIG_RANDOMIZE_KSTACK_OFFSET_DEFAULT=y
+# CONFIG_RANDOMIZE_KSTACK_OFFSET_DEFAULT is not set
CONFIG_RANDOMIZE_KSTACK_OFFSET=y
CONFIG_RANDOMIZE_MEMORY_PHYSICAL_PADDING=0xa
CONFIG_RANDOMIZE_MEMORY=y
@@ -5192,8 +5212,8 @@ CONFIG_RD_GZIP=y
CONFIG_RD_LZ4=y
CONFIG_RD_LZMA=y
CONFIG_RD_LZO=y
-CONFIG_RDMA_RXE=m
-CONFIG_RDMA_SIW=m
+# CONFIG_RDMA_RXE is not set
+# CONFIG_RDMA_SIW is not set
# CONFIG_RDS is not set
CONFIG_RD_XZ=y
CONFIG_RD_ZSTD=y
@@ -5247,6 +5267,7 @@ CONFIG_REGULATOR_MAX77686=m
# CONFIG_REGULATOR_MP886X is not set
# CONFIG_REGULATOR_MPQ7920 is not set
# CONFIG_REGULATOR_MT6311 is not set
+# CONFIG_REGULATOR_NETLINK_EVENTS is not set
# CONFIG_REGULATOR_PCA9450 is not set
# CONFIG_REGULATOR_PF8X00 is not set
CONFIG_REGULATOR_PFUZE100=m
@@ -5421,6 +5442,7 @@ CONFIG_RTC_DRV_M41T94=m
CONFIG_RTC_DRV_M48T35=m
CONFIG_RTC_DRV_M48T59=m
# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_MAX31335 is not set
CONFIG_RTC_DRV_MAX6900=m
CONFIG_RTC_DRV_MAX6902=m
# CONFIG_RTC_DRV_MAX6916 is not set
@@ -5514,7 +5536,7 @@ CONFIG_RTW88=m
# CONFIG_RTW89_8851BE is not set
CONFIG_RTW89_8852AE=m
CONFIG_RTW89_8852BE=m
-# CONFIG_RTW89_8852CE is not set
+CONFIG_RTW89_8852CE=m
# CONFIG_RTW89_DEBUGFS is not set
# CONFIG_RTW89_DEBUGMSG is not set
CONFIG_RTW89=m
@@ -5528,6 +5550,7 @@ CONFIG_RXKAD=y
CONFIG_RXPERF=m
# CONFIG_S390_KPROBES_SANITY_TEST is not set
# CONFIG_S390_MODULES_SANITY_TEST is not set
+# CONFIG_SAMPLE_CGROUP is not set
# CONFIG_SAMPLE_FTRACE_OPS is not set
# CONFIG_SAMPLE_KMEMLEAK is not set
# CONFIG_SAMPLES is not set
@@ -5671,7 +5694,7 @@ CONFIG_SECONDARY_TRUSTED_KEYRING=y
CONFIG_SECRETMEM=y
CONFIG_SECTION_MISMATCH_WARN_ONLY=y
# CONFIG_SECURITY_APPARMOR is not set
-# CONFIG_SECURITY_DMESG_RESTRICT is not set
+CONFIG_SECURITY_DMESG_RESTRICT=y
CONFIG_SECURITYFS=y
CONFIG_SECURITY_INFINIBAND=y
# CONFIG_SECURITY_LANDLOCK is not set
@@ -5766,6 +5789,7 @@ CONFIG_SENSORS_FSCHMD=m
# CONFIG_SENSORS_FTSTEUTATES is not set
# CONFIG_SENSORS_G760A is not set
CONFIG_SENSORS_G762=m
+# CONFIG_SENSORS_GIGABYTE_WATERFORCE is not set
# CONFIG_SENSORS_GL518SM is not set
# CONFIG_SENSORS_GL520SM is not set
# CONFIG_SENSORS_GPIO_FAN is not set
@@ -5831,6 +5855,7 @@ CONFIG_SENSORS_LTC4222=m
# CONFIG_SENSORS_LTC4245 is not set
CONFIG_SENSORS_LTC4260=m
# CONFIG_SENSORS_LTC4261 is not set
+# CONFIG_SENSORS_LTC4286 is not set
CONFIG_SENSORS_MAX1111=m
# CONFIG_SENSORS_MAX127 is not set
# CONFIG_SENSORS_MAX15301 is not set
@@ -5858,9 +5883,11 @@ CONFIG_SENSORS_MAX31790=m
# CONFIG_SENSORS_MC34VR500 is not set
# CONFIG_SENSORS_MCP3021 is not set
# CONFIG_SENSORS_MLXREG_FAN is not set
+# CONFIG_SENSORS_MP2856 is not set
# CONFIG_SENSORS_MP2888 is not set
# CONFIG_SENSORS_MP2975 is not set
# CONFIG_SENSORS_MP5023 is not set
+# CONFIG_SENSORS_MP5990 is not set
# CONFIG_SENSORS_MPQ7932 is not set
# CONFIG_SENSORS_MR75203 is not set
# CONFIG_SENSORS_NCT6683 is not set
@@ -6047,10 +6074,8 @@ CONFIG_SIGNED_PE_FILE_VERIFICATION=y
CONFIG_SIPHASH_KUNIT_TEST=m
# CONFIG_SKGE is not set
# CONFIG_SKY2 is not set
-# CONFIG_SLAB_DEPRECATED is not set
CONFIG_SLAB_FREELIST_HARDENED=y
CONFIG_SLAB_FREELIST_RANDOM=y
-# CONFIG_SLAB is not set
# CONFIG_SLAB_MERGE_DEFAULT is not set
# CONFIG_SLIC_DS26522 is not set
# CONFIG_SLIMBUS is not set
@@ -6818,6 +6843,7 @@ CONFIG_SRAM=y
# CONFIG_SSB is not set
# CONFIG_SSFDC is not set
# CONFIG_SSIF_IPMI_BMC is not set
+CONFIG_STACKDEPOT_MAX_FRAMES=64
CONFIG_STACK_HASH_ORDER=20
CONFIG_STACKINIT_KUNIT_TEST=m
CONFIG_STACKPROTECTOR_STRONG=y
@@ -6946,7 +6972,7 @@ CONFIG_TCP_CONG_DCTCP=m
# CONFIG_TCP_CONG_HSTCP is not set
CONFIG_TCP_CONG_HTCP=m
# CONFIG_TCP_CONG_HYBLA is not set
-# CONFIG_TCP_CONG_ILLINOIS is not set
+CONFIG_TCP_CONG_ILLINOIS=m
# CONFIG_TCP_CONG_LP is not set
CONFIG_TCP_CONG_NV=m
# CONFIG_TCP_CONG_SCALABLE is not set
@@ -7025,6 +7051,7 @@ CONFIG_TEST_SORT=m
# CONFIG_TEST_UUID is not set
CONFIG_TEST_VMALLOC=m
# CONFIG_TEST_XARRAY is not set
+# CONFIG_THERMAL_DEBUGFS is not set
# CONFIG_THERMAL_DEFAULT_GOV_FAIR_SHARE is not set
CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y
# CONFIG_THERMAL_DEFAULT_GOV_USER_SPACE is not set
@@ -7208,6 +7235,7 @@ CONFIG_TOUCHSCREEN_WACOM_I2C=m
CONFIG_TRACER_SNAPSHOT=y
CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS=y
# CONFIG_TRANSPARENT_HUGEPAGE_MADVISE is not set
+# CONFIG_TRANSPARENT_HUGEPAGE_NEVER is not set
CONFIG_TRANSPARENT_HUGEPAGE=y
CONFIG_TREE_RCU=y
# CONFIG_TRIM_UNUSED_KSYMS is not set
@@ -7238,6 +7266,7 @@ CONFIG_TYPEC_MUX_FSA4480=m
# CONFIG_TYPEC_MUX_NB7VPQ904M is not set
CONFIG_TYPEC_MUX_PI3USB30532=m
# CONFIG_TYPEC_MUX_PTN36502 is not set
+# CONFIG_TYPEC_MUX_WCD939X_USBSS is not set
# CONFIG_TYPEC_NVIDIA_ALTMODE is not set
# CONFIG_TYPEC_QCOM_PMIC is not set
# CONFIG_TYPEC_RT1711H is not set
@@ -7610,6 +7639,7 @@ CONFIG_VDPA_SIM_NET=m
# CONFIG_VDPA_USER is not set
# CONFIG_VEML6030 is not set
# CONFIG_VEML6070 is not set
+# CONFIG_VEML6075 is not set
CONFIG_VETH=m
CONFIG_VEXPRESS_CONFIG=y
# CONFIG_VF610_ADC is not set
@@ -7617,6 +7647,7 @@ CONFIG_VEXPRESS_CONFIG=y
CONFIG_VFAT_FS=m
# CONFIG_VFIO_AMBA is not set
CONFIG_VFIO_CONTAINER=y
+# CONFIG_VFIO_DEBUGFS is not set
CONFIG_VFIO_DEVICE_CDEV=y
CONFIG_VFIO_FSL_MC=m
CONFIG_VFIO_GROUP=y
@@ -7653,6 +7684,7 @@ CONFIG_VHOST_VSOCK=m
# CONFIG_VIDEO_ADV_DEBUG is not set
# CONFIG_VIDEO_AK7375 is not set
# CONFIG_VIDEO_AK881X is not set
+# CONFIG_VIDEO_ALVIUM_CSI2 is not set
# CONFIG_VIDEO_AR0521 is not set
CONFIG_VIDEO_AU0828=m
# CONFIG_VIDEO_AU0828_RC is not set
@@ -7701,6 +7733,8 @@ CONFIG_VIDEO_EM28XX_RC=m
# CONFIG_VIDEO_FB_IVTV_FORCE_PAT is not set
CONFIG_VIDEO_FB_IVTV=m
# CONFIG_VIDEO_FIXED_MINOR_RANGES is not set
+# CONFIG_VIDEO_GC0308 is not set
+# CONFIG_VIDEO_GC2145 is not set
# CONFIG_VIDEO_GO7007 is not set
# CONFIG_VIDEO_GS1662 is not set
CONFIG_VIDEO_HDPVR=m
@@ -7770,6 +7804,7 @@ CONFIG_VIDEO_IVTV=m
# CONFIG_VIDEO_OV5675 is not set
# CONFIG_VIDEO_OV5693 is not set
# CONFIG_VIDEO_OV5695 is not set
+# CONFIG_VIDEO_OV64A40 is not set
# CONFIG_VIDEO_OV6650 is not set
# CONFIG_VIDEO_OV7251 is not set
# CONFIG_VIDEO_OV7640 is not set
@@ -7822,6 +7857,7 @@ CONFIG_VIDEO_SAA7164=m
# CONFIG_VIDEO_TDA9840 is not set
# CONFIG_VIDEO_TEA6415C is not set
# CONFIG_VIDEO_TEA6420 is not set
+# CONFIG_VIDEO_THP7312 is not set
# CONFIG_VIDEO_THS7303 is not set
# CONFIG_VIDEO_THS8200 is not set
# CONFIG_VIDEO_TLV320AIC23B is not set
@@ -7837,6 +7873,7 @@ CONFIG_VIDEO_TUNER=m
# CONFIG_VIDEO_TW5864 is not set
# CONFIG_VIDEO_TW686X is not set
# CONFIG_VIDEO_TW68 is not set
+# CONFIG_VIDEO_TW9900 is not set
# CONFIG_VIDEO_TW9903 is not set
# CONFIG_VIDEO_TW9906 is not set
# CONFIG_VIDEO_TW9910 is not set
@@ -7872,6 +7909,7 @@ CONFIG_VIRTIO_PCI_LEGACY=y
CONFIG_VIRTIO_PCI=y
# CONFIG_VIRTIO_PMEM is not set
CONFIG_VIRTIO_VDPA=m
+# CONFIG_VIRTIO_VFIO_PCI is not set
CONFIG_VIRTIO_VSOCKETS=m
CONFIG_VIRTIO=y
CONFIG_VIRTUALIZATION=y
@@ -7996,7 +8034,7 @@ CONFIG_XFS_POSIX_ACL=y
CONFIG_XFS_QUOTA=y
# CONFIG_XFS_RT is not set
# CONFIG_XFS_SUPPORT_ASCII_CI is not set
-CONFIG_XFS_SUPPORT_V4=y
+# CONFIG_XFS_SUPPORT_V4 is not set
# CONFIG_XFS_WARN is not set
# CONFIG_XGENE_DMA is not set
CONFIG_XGENE_PMU=y
@@ -8060,6 +8098,7 @@ CONFIG_ZRAM_DEF_COMP_LZORLE=y
CONFIG_ZRAM=m
# CONFIG_ZRAM_MEMORY_TRACKING is not set
# CONFIG_ZRAM_MULTI_COMP is not set
+# CONFIG_ZRAM_TRACK_ENTRY_ACTIME is not set
CONFIG_ZRAM_WRITEBACK=y
CONFIG_ZSMALLOC_CHAIN_SIZE=8
CONFIG_ZSMALLOC_STAT=y
@@ -8072,6 +8111,7 @@ CONFIG_ZSWAP_COMPRESSOR_DEFAULT_LZO=y
# CONFIG_ZSWAP_COMPRESSOR_DEFAULT_ZSTD is not set
# CONFIG_ZSWAP_DEFAULT_ON is not set
# CONFIG_ZSWAP_EXCLUSIVE_LOADS_DEFAULT_ON is not set
+# CONFIG_ZSWAP_SHRINKER_DEFAULT_ON is not set
CONFIG_ZSWAP=y
# CONFIG_ZSWAP_ZPOOL_DEFAULT_Z3FOLD is not set
CONFIG_ZSWAP_ZPOOL_DEFAULT_ZBUD=y
@@ -8081,7 +8121,7 @@ CONFIG_ZENIFY=y
CONFIG_NTSYNC=y
CONFIG_USER_NS_UNPRIVILEGED=y
CONFIG_TCP_CONG_BBR2=m
-# CONFIG_SCHED_PDS is not set
+CONFIG_SCHED_BORE=y
CONFIG_HID_IPTS=m
CONFIG_HID_ITHC=m
CONFIG_SURFACE_BOOK1_DGPU_SWITCH=m
@@ -8090,11 +8130,8 @@ CONFIG_LEDS_TPS68470=m
CONFIG_SENSORS_SURFACE_FAN=m
CONFIG_SENSORS_SURFACE_TEMP=m
CONFIG_DRM_AMD_COLOR_STEAMDECK=y
-CONFIG_BMI323_I2C=m
-CONFIG_BMI323_SPI=m
CONFIG_DRM_APPLETBDRM=m
CONFIG_HID_APPLETB_BL=m
CONFIG_HID_APPLETB_KBD=m
CONFIG_HID_APPLE_MAGIC_BACKLIGHT=m
CONFIG_APPLE_BCE=m
-CONFIG_SCHED_BORE=y
diff --git a/SOURCES/kernel-ppc64le-debug-fedora.config b/SOURCES/kernel-ppc64le-debug-fedora.config
index 347edeb..6ee2096 100644
--- a/SOURCES/kernel-ppc64le-debug-fedora.config
+++ b/SOURCES/kernel-ppc64le-debug-fedora.config
@@ -103,6 +103,7 @@ CONFIG_AD5770R=m
# CONFIG_AD5791 is not set
# CONFIG_AD5933 is not set
# CONFIG_AD7091R5 is not set
+CONFIG_AD7091R8=m
CONFIG_AD7124=m
# CONFIG_AD7150 is not set
# CONFIG_AD7192 is not set
@@ -244,6 +245,7 @@ CONFIG_ANDROID_BINDERFS=y
# CONFIG_ANDROID_BINDER_IPC is not set
# CONFIG_ANDROID_BINDER_IPC_SELFTEST is not set
# CONFIG_ANON_VMA_NAME is not set
+# CONFIG_AOSONG_AGS02MA is not set
# CONFIG_APDS9300 is not set
CONFIG_APDS9802ALS=m
# CONFIG_APDS9960 is not set
@@ -285,7 +287,6 @@ CONFIG_ARM64_ERRATUM_2119858=y
CONFIG_ARM64_ERRATUM_2139208=y
CONFIG_ARM64_ERRATUM_2224489=y
CONFIG_ARM64_ERRATUM_2253138=y
-CONFIG_ARM64_ERRATUM_858921=y
CONFIG_ARM64_USE_LSE_ATOMICS=y
CONFIG_ARM_CMN=m
# CONFIG_ARM_MHU_V2 is not set
@@ -440,6 +441,7 @@ CONFIG_BACKLIGHT_LED=m
# CONFIG_BACKLIGHT_LM3639 is not set
CONFIG_BACKLIGHT_LP855X=m
# CONFIG_BACKLIGHT_LV5207LP is not set
+CONFIG_BACKLIGHT_MP3309C=m
CONFIG_BACKLIGHT_MT6370=m
CONFIG_BACKLIGHT_PWM=m
# CONFIG_BACKLIGHT_QCOM_WLED is not set
@@ -489,6 +491,7 @@ CONFIG_BCACHEFS_LOCK_TIME_STATS=y
# CONFIG_BCACHEFS_NO_LATENCY_ACCT is not set
CONFIG_BCACHEFS_POSIX_ACL=y
CONFIG_BCACHEFS_QUOTA=y
+CONFIG_BCACHEFS_SIX_OPTIMISTIC_SPIN=y
# CONFIG_BCACHEFS_TESTS is not set
CONFIG_BCACHE=m
CONFIG_BCM54140_PHY=m
@@ -568,6 +571,7 @@ CONFIG_BLK_DEV_SX8=m
CONFIG_BLK_DEV_THROTTLING=y
CONFIG_BLKDEV_UBLK_LEGACY_OPCODES=y
CONFIG_BLK_DEV_UBLK=m
+CONFIG_BLK_DEV_WRITE_MOUNTED=y
CONFIG_BLK_DEV=y
CONFIG_BLK_DEV_ZONED=y
# CONFIG_BLK_INLINE_ENCRYPTION_FALLBACK is not set
@@ -588,6 +592,8 @@ CONFIG_BME680=m
# CONFIG_BMI088_ACCEL is not set
CONFIG_BMI160_I2C=m
CONFIG_BMI160_SPI=m
+CONFIG_BMI323_I2C=m
+CONFIG_BMI323_SPI=m
CONFIG_BMP280=m
CONFIG_BNA=m
CONFIG_BNX2=m
@@ -603,7 +609,6 @@ CONFIG_BONDING=m
# CONFIG_BOOT_CONFIG_FORCE is not set
CONFIG_BOOT_CONFIG=y
# CONFIG_BOOTPARAM_HARDLOCKUP_PANIC is not set
-# CONFIG_BOOTPARAM_HOTPLUG_CPU0 is not set
# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
CONFIG_BOOT_PRINTK_DELAY=y
@@ -732,7 +737,7 @@ CONFIG_BUILD_SALT=""
# CONFIG_CACHEFILES_DEBUG is not set
# CONFIG_CACHEFILES_ERROR_INJECTION is not set
CONFIG_CACHEFILES=m
-# CONFIG_CACHEFILES_ONDEMAND is not set
+CONFIG_CACHEFILES_ONDEMAND=y
CONFIG_CACHESTAT_SYSCALL=y
# CONFIG_CADENCE_WATCHDOG is not set
# CONFIG_CAIF is not set
@@ -1068,7 +1073,6 @@ CONFIG_CRYPTO_CAST5=m
CONFIG_CRYPTO_CAST6=m
CONFIG_CRYPTO_CBC=y
CONFIG_CRYPTO_CCM=y
-CONFIG_CRYPTO_CFB=y
CONFIG_CRYPTO_CHACHA20=m
# CONFIG_CRYPTO_CHACHA20_P10 is not set
CONFIG_CRYPTO_CHACHA20POLY1305=m
@@ -1097,12 +1101,13 @@ CONFIG_CRYPTO_DEV_HIFN_795X_RNG=y
# CONFIG_CRYPTO_DEV_HISI_SEC2 is not set
# CONFIG_CRYPTO_DEV_HISI_SEC is not set
# CONFIG_CRYPTO_DEV_HISI_TRNG is not set
-# CONFIG_CRYPTO_DEV_NITROX_CNN55XX is not set
+CONFIG_CRYPTO_DEV_NITROX_CNN55XX=m
CONFIG_CRYPTO_DEV_NX_COMPRESS_POWERNV=y
CONFIG_CRYPTO_DEV_NX_COMPRESS_PSERIES=y
CONFIG_CRYPTO_DEV_NX_COMPRESS=y
CONFIG_CRYPTO_DEV_NX=y
# CONFIG_CRYPTO_DEV_OCTEONTX_CPT is not set
+CONFIG_CRYPTO_DEV_QAT_420XX=m
CONFIG_CRYPTO_DEV_QAT_4XXX=m
CONFIG_CRYPTO_DEV_QAT_C3XXX=m
CONFIG_CRYPTO_DEV_QAT_C3XXXVF=m
@@ -1160,7 +1165,6 @@ CONFIG_CRYPTO_MD4=m
CONFIG_CRYPTO_MD5=y
CONFIG_CRYPTO_MICHAEL_MIC=m
CONFIG_CRYPTO_NULL=y
-CONFIG_CRYPTO_OFB=y
CONFIG_CRYPTO_PCBC=m
CONFIG_CRYPTO_PCRYPT=m
CONFIG_CRYPTO_POLY1305=m
@@ -1253,7 +1257,6 @@ CONFIG_DEBUG_FS=y
CONFIG_DEBUGGER=y
# CONFIG_DEBUG_GPIO is not set
CONFIG_DEBUG_HIGHMEM=y
-# CONFIG_DEBUG_HOTPLUG_CPU0 is not set
CONFIG_DEBUG_INFO_BTF=y
# CONFIG_DEBUG_INFO_COMPRESSED is not set
CONFIG_DEBUG_INFO_COMPRESSED_NONE=y
@@ -1319,7 +1322,7 @@ CONFIG_DEBUG_STACK_USAGE=y
# CONFIG_DEBUG_VM_MAPLE_TREE is not set
CONFIG_DEBUG_VM_PGFLAGS=y
CONFIG_DEBUG_VM_PGTABLE=y
-# CONFIG_DEBUG_VM_RB is not set # revisit this if performance isn't horrible
+# CONFIG_DEBUG_VM_RB is not set
CONFIG_DEBUG_VM_SHOOT_LAZIES=y
# CONFIG_DEBUG_VM_VMACACHE is not set
CONFIG_DEBUG_VM=y
@@ -1431,6 +1434,7 @@ CONFIG_DP83867_PHY=m
CONFIG_DP83869_PHY=m
# CONFIG_DP83TC811_PHY is not set
# CONFIG_DP83TD510_PHY is not set
+CONFIG_DP83TG720_PHY=m
# CONFIG_DPM_WATCHDOG is not set
CONFIG_DPOT_DAC=m
# CONFIG_DPS310 is not set
@@ -1520,6 +1524,7 @@ CONFIG_DRM_MGAG200=m
# CONFIG_DRM_MSM_GPU_SUDO is not set
# CONFIG_DRM_MXSFB is not set
CONFIG_DRM_NOUVEAU_BACKLIGHT=y
+CONFIG_DRM_NOUVEAU_GSP_DEFAULT=y
CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_NOUVEAU_SVM is not set
# CONFIG_DRM_NWL_MIPI_DSI is not set
@@ -1542,6 +1547,7 @@ CONFIG_DRM_PANEL_FEIYANG_FY07024DI26A30D=m
# CONFIG_DRM_PANEL_HIMAX_HX8394 is not set
# CONFIG_DRM_PANEL_ILITEK_IL9322 is not set
# CONFIG_DRM_PANEL_ILITEK_ILI9341 is not set
+# CONFIG_DRM_PANEL_ILITEK_ILI9805 is not set
# CONFIG_DRM_PANEL_ILITEK_ILI9881C is not set
CONFIG_DRM_PANEL_ILITEK_ILI9882T=m
CONFIG_DRM_PANEL_INNOLUX_EJ030NA=m
@@ -1604,6 +1610,7 @@ CONFIG_DRM_PANEL_SEIKO_43WVF1G=m
# CONFIG_DRM_PANEL_SONY_TD4353_JDI is not set
CONFIG_DRM_PANEL_SONY_TULIP_TRULY_NT35521=m
CONFIG_DRM_PANEL_STARTEK_KD070FHFID015=m
+# CONFIG_DRM_PANEL_SYNAPTICS_R63353 is not set
# CONFIG_DRM_PANEL_TDO_TL070WSH30 is not set
# CONFIG_DRM_PANEL_TPO_TD028TTEC1 is not set
# CONFIG_DRM_PANEL_TPO_TD043MTEA1 is not set
@@ -1626,7 +1633,7 @@ CONFIG_DRM_RADEON_USERPTR=y
# CONFIG_DRM_RCAR_USE_LVDS is not set
# CONFIG_DRM_RCAR_USE_MIPI_DSI is not set
CONFIG_DRM_SAMSUNG_DSIM=m
-# CONFIG_DRM_SII902X is not set
+CONFIG_DRM_SII902X=m
CONFIG_DRM_SII9234=m
# CONFIG_DRM_SIL_SII8620 is not set
CONFIG_DRM_SIMPLE_BRIDGE=m
@@ -1657,6 +1664,7 @@ CONFIG_DRM_VKMS=m
CONFIG_DRM_VMWGFX_FBCON=y
CONFIG_DRM_VMWGFX=m
# CONFIG_DRM_VMWGFX_MKSSTATS is not set
+# CONFIG_DRM_XE is not set
# CONFIG_DRM_XEN_FRONTEND is not set
CONFIG_DRM=y
# CONFIG_DS1682 is not set
@@ -1761,6 +1769,7 @@ CONFIG_DVB_USB_VP702X=m
CONFIG_DVB_USB_VP7045=m
CONFIG_DVB_USB_ZD1301=m
# CONFIG_DW_AXI_DMAC is not set
+CONFIG_DWC_PCIE_PMU=m
CONFIG_DW_DMAC_CORE=m
CONFIG_DW_DMAC=m
CONFIG_DW_DMAC_PCI=m
@@ -1814,8 +1823,10 @@ CONFIG_EFI_ZBOOT=y
CONFIG_ELF_CORE=y
# CONFIG_EMBEDDED is not set
# CONFIG_ENA_ETHERNET is not set
+# CONFIG_ENC28J60 is not set
CONFIG_ENCLOSURE_SERVICES=m
CONFIG_ENCRYPTED_KEYS=y
+# CONFIG_ENCX24J600 is not set
CONFIG_ENERGY_MODEL=y
CONFIG_ENIC=m
CONFIG_ENVELOPE_DETECTOR=m
@@ -1824,6 +1835,7 @@ CONFIG_EPOLL=y
CONFIG_EQUALIZER=m
# CONFIG_EROFS_FS_DEBUG is not set
CONFIG_EROFS_FS=m
+CONFIG_EROFS_FS_ONDEMAND=y
# CONFIG_EROFS_FS_PCPU_KTHREAD is not set
CONFIG_EROFS_FS_POSIX_ACL=y
CONFIG_EROFS_FS_SECURITY=y
@@ -1908,7 +1920,6 @@ CONFIG_FAULT_INJECTION=y
# CONFIG_FB_3DFX is not set
# CONFIG_FB_ARC is not set
# CONFIG_FB_ARK is not set
-# CONFIG_FB_ARMCLCD is not set
# CONFIG_FB_ASILIANT is not set
# CONFIG_FB_ATY128 is not set
# CONFIG_FB_ATY is not set
@@ -1928,7 +1939,6 @@ CONFIG_FB_EFI=y
# CONFIG_FB_IMSTT is not set
# CONFIG_FB_IMX is not set
# CONFIG_FB_KYRO is not set
-# CONFIG_FB_LE80578 is not set
# CONFIG_FB_MATROX_G is not set
# CONFIG_FB_MATROX_I2C is not set
# CONFIG_FB_MATROX is not set
@@ -2020,8 +2030,8 @@ CONFIG_FRAME_POINTER=y
CONFIG_FRAME_WARN=2048
CONFIG_FRONTSWAP=y
# CONFIG_FSCACHE_DEBUG is not set
-CONFIG_FSCACHE=m
CONFIG_FSCACHE_STATS=y
+CONFIG_FSCACHE=y
CONFIG_FS_DAX=y
CONFIG_FS_ENCRYPTION_INLINE_CRYPT=y
CONFIG_FS_ENCRYPTION=y
@@ -2213,8 +2223,8 @@ CONFIG_HAVE_BOOTMEM_INFO_NODE=y
CONFIG_HD44780=m
# CONFIG_HDC100X is not set
CONFIG_HDC2010=m
+# CONFIG_HDC3020 is not set
CONFIG_HEADERS_INSTALL=y
-# CONFIG_HERMES is not set
CONFIG_HFS_FS=m
CONFIG_HFSPLUS_FS=m
CONFIG_HI6421V600_IRQ=m
@@ -2280,6 +2290,7 @@ CONFIG_HID_MACALLY=m
CONFIG_HID_MAGICMOUSE=y
CONFIG_HID_MALTRON=m
CONFIG_HID_MAYFLASH=m
+# CONFIG_HID_MCP2200 is not set
CONFIG_HID_MCP2221=m
CONFIG_HID_MEGAWORLD_FF=m
CONFIG_HID_MICROSOFT=m
@@ -2368,7 +2379,6 @@ CONFIG_HMC425=m
# CONFIG_HMC6352 is not set
CONFIG_HMM_MIRROR=y
CONFIG_HOLTEK_FF=y
-# CONFIG_HOSTAP is not set
CONFIG_HOTPLUG_CPU=y
CONFIG_HOTPLUG_PCI_ACPI_IBM=m
CONFIG_HOTPLUG_PCI_ACPI=y
@@ -2385,6 +2395,7 @@ CONFIG_HOTPLUG_PCI=y
# CONFIG_HP_ILO is not set
CONFIG_HSA_AMD_SVM=y
CONFIG_HSA_AMD=y
+# CONFIG_HSC030PA is not set
# CONFIG_HSI is not set
CONFIG_HSR=m
# CONFIG_HSU_DMA is not set
@@ -2533,6 +2544,7 @@ CONFIG_IBM_BSR=m
CONFIG_IBMVETH=m
CONFIG_IBMVMC=m
CONFIG_IBMVNIC=m
+CONFIG_ICE_HWMON=y
CONFIG_ICE_HWTS=y
CONFIG_ICE=m
CONFIG_ICE_SWITCHDEV=y
@@ -2993,6 +3005,7 @@ CONFIG_ISL29003=m
CONFIG_ISL29020=m
# CONFIG_ISL29125 is not set
# CONFIG_ISL29501 is not set
+# CONFIG_ISL76682 is not set
CONFIG_ISO9660_FS=m
CONFIG_IS_SIGNED_TYPE_KUNIT_TEST=m
CONFIG_IT8712F_WDT=m
@@ -3064,6 +3077,7 @@ CONFIG_JOYSTICK_PSXPAD_SPI_FF=y
CONFIG_JOYSTICK_PSXPAD_SPI=m
CONFIG_JOYSTICK_PXRC=m
CONFIG_JOYSTICK_QWIIC=m
+# CONFIG_JOYSTICK_SEESAW is not set
# CONFIG_JOYSTICK_SENSEHAT is not set
CONFIG_JOYSTICK_SIDEWINDER=m
# CONFIG_JOYSTICK_SPACEBALL is not set
@@ -3085,6 +3099,7 @@ CONFIG_KALLSYMS_ALL=y
# CONFIG_KALLSYMS_SELFTEST is not set
CONFIG_KALLSYMS=y
# CONFIG_KARMA_PARTITION is not set
+# CONFIG_KASAN_EXTRA_INFO is not set
CONFIG_KASAN_GENERIC=y
# CONFIG_KASAN_INLINE is not set
CONFIG_KASAN_KUNIT_TEST=m
@@ -3199,6 +3214,9 @@ CONFIG_L2TP_ETH=m
CONFIG_L2TP_IP=m
CONFIG_L2TP=m
CONFIG_L2TP_V3=y
+CONFIG_LAN743X=m
+CONFIG_LAN966X_DCB=y
+CONFIG_LAN966X_SWITCH=m
# CONFIG_LAPB is not set
CONFIG_LATENCYTOP=y
# CONFIG_LATTICE_ECP3_CONFIG is not set
@@ -3261,6 +3279,7 @@ CONFIG_LEDS_LP50XX=m
# CONFIG_LEDS_LP55XX_COMMON is not set
# CONFIG_LEDS_LP8860 is not set
CONFIG_LEDS_LT3593=m
+CONFIG_LEDS_MAX5970=m
CONFIG_LEDS_MAX77650=m
CONFIG_LEDS_MLXCPLD=m
CONFIG_LEDS_MLXREG=m
@@ -3384,6 +3403,7 @@ CONFIG_LTC2983=m
# CONFIG_LTO_CLANG_FULL is not set
# CONFIG_LTO_CLANG_THIN is not set
CONFIG_LTO_NONE=y
+# CONFIG_LTR390 is not set
CONFIG_LTR501=m
CONFIG_LTRF216A=m
CONFIG_LV0104CS=m
@@ -3443,6 +3463,7 @@ CONFIG_MAX30208=m
CONFIG_MAX31827=m
CONFIG_MAX31856=m
CONFIG_MAX31865=m
+CONFIG_MAX34408=m
# CONFIG_MAX44000 is not set
CONFIG_MAX44009=m
# CONFIG_MAX517 is not set
@@ -3472,7 +3493,9 @@ CONFIG_MCP41010=m
# CONFIG_MCP4531 is not set
# CONFIG_MCP4725 is not set
CONFIG_MCP4728=m
+CONFIG_MCP4821=m
# CONFIG_MCP4922 is not set
+CONFIG_MCP9600=m
CONFIG_MCTP_SERIAL=m
# CONFIG_MCTP_TRANSPORT_I2C is not set
# CONFIG_MCTP_TRANSPORT_I3C is not set
@@ -3513,7 +3536,6 @@ CONFIG_MEDIA_CAMERA_SUPPORT=y
CONFIG_MEDIA_CEC_RC=y
CONFIG_MEDIA_CEC_SUPPORT=y
CONFIG_MEDIA_CONTROLLER_DVB=y
-CONFIG_MEDIA_CONTROLLER_REQUEST_API=y
CONFIG_MEDIA_CONTROLLER=y
CONFIG_MEDIA_DIGITAL_TV_SUPPORT=y
CONFIG_MEDIA_PCI_SUPPORT=y
@@ -3748,6 +3770,7 @@ CONFIG_MLX5_VDPA=y
CONFIG_MLX5_VFIO_PCI=m
CONFIG_MLX90614=m
CONFIG_MLX90632=m
+# CONFIG_MLX90635 is not set
# CONFIG_MLXBF_BOOTCTL is not set
# CONFIG_MLXBF_GIGE is not set
# CONFIG_MLXBF_PMC is not set
@@ -3993,6 +4016,7 @@ CONFIG_MTD_SPI_NOR_SWP_DISABLE_ON_VOLATILE=y
CONFIG_MTD_UBI_BEB_LIMIT=20
# CONFIG_MTD_UBI_BLOCK is not set
# CONFIG_MTD_UBI_FASTMAP is not set
+# CONFIG_MTD_UBI_FAULT_INJECTION is not set
# CONFIG_MTD_UBI_GLUEBI is not set
CONFIG_MTD_UBI=m
CONFIG_MTD_UBI_WL_THRESHOLD=4096
@@ -4023,7 +4047,6 @@ CONFIG_NATSEMI=m
CONFIG_NCN26000_PHY=m
CONFIG_NCSI_OEM_CMD_GET_MAC=y
CONFIG_NCSI_OEM_CMD_KEEP_PHY=y
-# CONFIG_ND_BLK is not set
# CONFIG_NDC_DIS_DYNAMIC_CACHING is not set
CONFIG_NE2K_PCI=m
# CONFIG_NET_9P_DEBUG is not set
@@ -4325,7 +4348,7 @@ CONFIG_NET_VENDOR_LITEX=y
CONFIG_NET_VENDOR_MARVELL=y
CONFIG_NET_VENDOR_MELLANOX=y
CONFIG_NET_VENDOR_MICREL=y
-# CONFIG_NET_VENDOR_MICROCHIP is not set
+CONFIG_NET_VENDOR_MICROCHIP=y
# CONFIG_NET_VENDOR_MICROSEMI is not set
CONFIG_NET_VENDOR_MICROSOFT=y
CONFIG_NET_VENDOR_MYRI=y
@@ -4448,6 +4471,7 @@ CONFIG_NF_REJECT_IPV6=m
CONFIG_NFSD_BLOCKLAYOUT=y
CONFIG_NFSD_FLEXFILELAYOUT=y
CONFIG_NFS_DISABLE_UDP_SUPPORT=y
+# CONFIG_NFSD_LEGACY_CLIENT_TRACKING is not set
CONFIG_NFSD=m
CONFIG_NFSD_PNFS=y
CONFIG_NFSD_SCSILAYOUT=y
@@ -4595,6 +4619,7 @@ CONFIG_NOZOMI=m
CONFIG_NR_CPUS=2048
CONFIG_NR_IRQS=512
CONFIG_NS83820=m
+CONFIG_NSM=m
CONFIG_NTB_EPF=m
# CONFIG_NTB is not set
# CONFIG_NTFS3_64BIT_CLUSTER is not set
@@ -4668,7 +4693,6 @@ CONFIG_OPT3001=m
CONFIG_OPT4001=m
CONFIG_OPTPROBES=y
CONFIG_ORANGEFS_FS=m
-CONFIG_ORINOCO_USB=m
CONFIG_OSF_PARTITION=y
CONFIG_OSNOISE_TRACER=y
CONFIG_OVERFLOW_KUNIT_TEST=m
@@ -4679,10 +4703,6 @@ CONFIG_OVERLAY_FS=m
CONFIG_OVERLAY_FS_REDIRECT_ALWAYS_FOLLOW=y
# CONFIG_OVERLAY_FS_REDIRECT_DIR is not set
# CONFIG_OVERLAY_FS_XINO_AUTO is not set
-CONFIG_P54_COMMON=m
-CONFIG_P54_PCI=m
-# CONFIG_P54_SPI is not set
-CONFIG_P54_USB=m
CONFIG_PA12203001=m
CONFIG_PACKET_DIAG=y
CONFIG_PACKET=y
@@ -4856,21 +4876,13 @@ CONFIG_PHY_RTK_RTD_USB3PHY=m
# CONFIG_PI433 is not set
CONFIG_PID_NS=y
# CONFIG_PINCONF is not set
-CONFIG_PINCTRL_ALDERLAKE=m
-# CONFIG_PINCTRL_CANNONLAKE is not set
-CONFIG_PINCTRL_CEDARFORK=m
CONFIG_PINCTRL_CS42L43=m
CONFIG_PINCTRL_CY8C95X0=m
-CONFIG_PINCTRL_ELKHARTLAKE=m
-CONFIG_PINCTRL_EMMITSBURG=m
# CONFIG_PINCTRL_EQUILIBRIUM is not set
# CONFIG_PINCTRL_IPQ6018 is not set
# CONFIG_PINCTRL_IPQ8074 is not set
# CONFIG_PINCTRL is not set
-# CONFIG_PINCTRL_JASPERLAKE is not set
-CONFIG_PINCTRL_LAKEFIELD=m
# CONFIG_PINCTRL_LPASS_LPI is not set
-# CONFIG_PINCTRL_LYNXPOINT is not set
# CONFIG_PINCTRL_MCP23S08 is not set
CONFIG_PINCTRL_MESON=y
# CONFIG_PINCTRL_MICROCHIP_SGPIO is not set
@@ -4891,6 +4903,7 @@ CONFIG_PINCTRL_SM8350_LPASS_LPI=m
# CONFIG_PINCTRL_SM8450 is not set
# CONFIG_PINCTRL_STMFX is not set
# CONFIG_PINCTRL_SX150X is not set
+CONFIG_PINCTRL_TPS6594=m
# CONFIG_PING is not set
# CONFIG_PINMUX is not set
CONFIG_PKCS7_MESSAGE_PARSER=y
@@ -5212,7 +5225,7 @@ CONFIG_RDS_TCP=m
CONFIG_RD_XZ=y
CONFIG_RD_ZSTD=y
# CONFIG_READABLE_ASM is not set
-# CONFIG_READ_ONLY_THP_FOR_FS is not set
+CONFIG_READ_ONLY_THP_FOR_FS=y
CONFIG_REALTEK_AUTOPM=y
CONFIG_REALTEK_PHY=m
# CONFIG_REED_SOLOMON_TEST is not set
@@ -5261,6 +5274,7 @@ CONFIG_REGULATOR_MP886X=m
# CONFIG_REGULATOR_MPQ7920 is not set
# CONFIG_REGULATOR_MT6311 is not set
CONFIG_REGULATOR_MT6370=m
+# CONFIG_REGULATOR_NETLINK_EVENTS is not set
# CONFIG_REGULATOR_PCA9450 is not set
# CONFIG_REGULATOR_PF8X00 is not set
# CONFIG_REGULATOR_PFUZE100 is not set
@@ -5449,6 +5463,7 @@ CONFIG_RTC_DRV_M41T94=m
CONFIG_RTC_DRV_M48T35=m
CONFIG_RTC_DRV_M48T59=m
# CONFIG_RTC_DRV_M48T86 is not set
+CONFIG_RTC_DRV_MAX31335=m
CONFIG_RTC_DRV_MAX6900=m
CONFIG_RTC_DRV_MAX6902=m
CONFIG_RTC_DRV_MAX6916=m
@@ -5486,6 +5501,7 @@ CONFIG_RTC_DRV_SD3078=m
# CONFIG_RTC_DRV_SNVS is not set
CONFIG_RTC_DRV_STK17TA8=m
# CONFIG_RTC_DRV_TEST is not set
+CONFIG_RTC_DRV_TPS6594=m
CONFIG_RTC_DRV_V3020=m
CONFIG_RTC_DRV_X1205=m
# CONFIG_RTC_DRV_ZYNQMP is not set
@@ -5806,6 +5822,7 @@ CONFIG_SENSORS_FSP_3Y=m
CONFIG_SENSORS_FTSTEUTATES=m
CONFIG_SENSORS_G760A=m
CONFIG_SENSORS_G762=m
+CONFIG_SENSORS_GIGABYTE_WATERFORCE=m
CONFIG_SENSORS_GL518SM=m
CONFIG_SENSORS_GL520SM=m
# CONFIG_SENSORS_GPIO_FAN is not set
@@ -5873,6 +5890,7 @@ CONFIG_SENSORS_LTC4222=m
CONFIG_SENSORS_LTC4245=m
CONFIG_SENSORS_LTC4260=m
CONFIG_SENSORS_LTC4261=m
+# CONFIG_SENSORS_LTC4286 is not set
CONFIG_SENSORS_MAX1111=m
# CONFIG_SENSORS_MAX127 is not set
# CONFIG_SENSORS_MAX15301 is not set
@@ -5900,10 +5918,12 @@ CONFIG_SENSORS_MAX8688=m
CONFIG_SENSORS_MC34VR500=m
CONFIG_SENSORS_MCP3021=m
CONFIG_SENSORS_MLXREG_FAN=m
+# CONFIG_SENSORS_MP2856 is not set
CONFIG_SENSORS_MP2888=m
CONFIG_SENSORS_MP2975=m
CONFIG_SENSORS_MP2975_REGULATOR=y
CONFIG_SENSORS_MP5023=m
+# CONFIG_SENSORS_MP5990 is not set
CONFIG_SENSORS_MPQ7932=m
CONFIG_SENSORS_MPQ7932_REGULATOR=y
CONFIG_SENSORS_MR75203=m
@@ -6086,10 +6106,8 @@ CONFIG_SKGE_GENESIS=y
CONFIG_SKGE=m
# CONFIG_SKY2_DEBUG is not set
CONFIG_SKY2=m
-# CONFIG_SLAB_DEPRECATED is not set
CONFIG_SLAB_FREELIST_HARDENED=y
CONFIG_SLAB_FREELIST_RANDOM=y
-# CONFIG_SLAB is not set
# CONFIG_SLAB_MERGE_DEFAULT is not set
# CONFIG_SLIMBUS is not set
CONFIG_SLIP_COMPRESSED=y
@@ -6864,6 +6882,7 @@ CONFIG_SSB_PCIHOST=y
CONFIG_SSB_SDIOHOST=y
# CONFIG_SSFDC is not set
CONFIG_SSIF_IPMI_BMC=m
+CONFIG_STACKDEPOT_MAX_FRAMES=64
CONFIG_STACK_HASH_ORDER=20
CONFIG_STACKINIT_KUNIT_TEST=m
CONFIG_STACKPROTECTOR_STRONG=y
@@ -7075,6 +7094,7 @@ CONFIG_TEST_STRING_HELPERS=m
# CONFIG_TEST_UUID is not set
CONFIG_TEST_VMALLOC=m
# CONFIG_TEST_XARRAY is not set
+# CONFIG_THERMAL_DEBUGFS is not set
# CONFIG_THERMAL_DEFAULT_GOV_BANG_BANG is not set
# CONFIG_THERMAL_DEFAULT_GOV_FAIR_SHARE is not set
CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y
@@ -7272,6 +7292,7 @@ CONFIG_TRACE_EVAL_MAP_FILE=y
CONFIG_TRACER_SNAPSHOT=y
# CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS is not set
CONFIG_TRANSPARENT_HUGEPAGE_MADVISE=y
+# CONFIG_TRANSPARENT_HUGEPAGE_NEVER is not set
CONFIG_TRANSPARENT_HUGEPAGE=y
# CONFIG_TRIM_UNUSED_KSYMS is not set
CONFIG_TRUSTED_KEYS_TEE=y
@@ -7308,6 +7329,7 @@ CONFIG_TYPEC_MUX_GPIO_SBU=m
CONFIG_TYPEC_MUX_NB7VPQ904M=m
CONFIG_TYPEC_MUX_PI3USB30532=m
CONFIG_TYPEC_MUX_PTN36502=m
+# CONFIG_TYPEC_MUX_WCD939X_USBSS is not set
CONFIG_TYPEC_NVIDIA_ALTMODE=m
# CONFIG_TYPEC_QCOM_PMIC is not set
# CONFIG_TYPEC_RT1711H is not set
@@ -7564,7 +7586,6 @@ CONFIG_USB_NET_NET1080=m
CONFIG_USB_NET_PLUSB=m
CONFIG_USB_NET_QMI_WWAN=m
CONFIG_USB_NET_RNDIS_HOST=m
-CONFIG_USB_NET_RNDIS_WLAN=m
CONFIG_USB_NET_SMSC75XX=m
CONFIG_USB_NET_SMSC95XX=m
CONFIG_USB_NET_SR9700=m
@@ -7707,7 +7728,6 @@ CONFIG_USB_XHCI_PCI=y
CONFIG_USB_XUSBATM=m
CONFIG_USB=y
CONFIG_USB_YUREX=m
-# CONFIG_USB_ZD1201 is not set
# CONFIG_USB_ZERO is not set
CONFIG_USB_ZR364XX=m
# CONFIG_USELIB is not set
@@ -7723,6 +7743,7 @@ CONFIG_V4L_MEM2MEM_DRIVERS=y
# CONFIG_V4L_PLATFORM_DRIVERS is not set
CONFIG_V4L_TEST_DRIVERS=y
CONFIG_VALIDATE_FS_PARSER=y
+CONFIG_VCAP=y
CONFIG_VCHIQ_CDEV=y
CONFIG_VCNL3020=m
# CONFIG_VCNL4000 is not set
@@ -7735,11 +7756,13 @@ CONFIG_VDPA_SIM_NET=m
CONFIG_VDPA_USER=m
CONFIG_VEML6030=m
# CONFIG_VEML6070 is not set
+# CONFIG_VEML6075 is not set
CONFIG_VETH=m
# CONFIG_VF610_ADC is not set
# CONFIG_VF610_DAC is not set
CONFIG_VFAT_FS=m
CONFIG_VFIO_CONTAINER=y
+# CONFIG_VFIO_DEBUGFS is not set
# CONFIG_VFIO_DEVICE_CDEV is not set
CONFIG_VFIO_GROUP=y
# CONFIG_VFIO_IOMMU_TYPE1 is not set
@@ -7778,6 +7801,7 @@ CONFIG_VIDEO_ADV7842=m
# CONFIG_VIDEO_ADV_DEBUG is not set
CONFIG_VIDEO_AK7375=m
CONFIG_VIDEO_AK881X=m
+# CONFIG_VIDEO_ALVIUM_CSI2 is not set
CONFIG_VIDEO_AR0521=m
CONFIG_VIDEO_AU0828=m
# CONFIG_VIDEO_AU0828_RC is not set
@@ -7826,6 +7850,8 @@ CONFIG_VIDEO_EM28XX_V4L2=m
CONFIG_VIDEO_ET8EK8=m
CONFIG_VIDEO_FB_IVTV=m
# CONFIG_VIDEO_FIXED_MINOR_RANGES is not set
+CONFIG_VIDEO_GC0308=m
+CONFIG_VIDEO_GC2145=m
CONFIG_VIDEO_GO7007_LOADER=m
CONFIG_VIDEO_GO7007=m
CONFIG_VIDEO_GO7007_USB=m
@@ -7896,6 +7922,7 @@ CONFIG_VIDEO_OV5670=m
CONFIG_VIDEO_OV5675=m
CONFIG_VIDEO_OV5693=m
CONFIG_VIDEO_OV5695=m
+CONFIG_VIDEO_OV64A40=m
CONFIG_VIDEO_OV6650=m
CONFIG_VIDEO_OV7251=m
CONFIG_VIDEO_OV7640=m
@@ -7952,6 +7979,7 @@ CONFIG_VIDEO_TDA9840=m
CONFIG_VIDEO_TEA6415C=m
CONFIG_VIDEO_TEA6420=m
# CONFIG_VIDEO_TEGRA_TPG is not set
+# CONFIG_VIDEO_THP7312 is not set
CONFIG_VIDEO_THS7303=m
CONFIG_VIDEO_THS8200=m
CONFIG_VIDEO_TLV320AIC23B=m
@@ -7967,6 +7995,7 @@ CONFIG_VIDEO_TW2804=m
# CONFIG_VIDEO_TW5864 is not set
CONFIG_VIDEO_TW686X=m
# CONFIG_VIDEO_TW68 is not set
+# CONFIG_VIDEO_TW9900 is not set
CONFIG_VIDEO_TW9903=m
CONFIG_VIDEO_TW9906=m
CONFIG_VIDEO_TW9910=m
@@ -8009,6 +8038,7 @@ CONFIG_VIRTIO_PCI_LEGACY=y
CONFIG_VIRTIO_PCI=y
# CONFIG_VIRTIO_PMEM is not set
CONFIG_VIRTIO_VDPA=m
+CONFIG_VIRTIO_VFIO_PCI=m
CONFIG_VIRTIO_VSOCKETS=m
CONFIG_VIRTIO=y
CONFIG_VIRTUALIZATION=y
@@ -8049,6 +8079,7 @@ CONFIG_VXLAN=m
# CONFIG_VZ89X is not set
CONFIG_W1_CON=y
CONFIG_W1=m
+# CONFIG_W1_MASTER_AMD_AXI is not set
# CONFIG_W1_MASTER_DS1WM is not set
CONFIG_W1_MASTER_DS2482=m
CONFIG_W1_MASTER_DS2490=m
@@ -8126,7 +8157,7 @@ CONFIG_WLAN_VENDOR_ATH=y
CONFIG_WLAN_VENDOR_BROADCOM=y
# CONFIG_WLAN_VENDOR_CISCO is not set
CONFIG_WLAN_VENDOR_INTEL=y
-CONFIG_WLAN_VENDOR_INTERSIL=y
+# CONFIG_WLAN_VENDOR_INTERSIL is not set
CONFIG_WLAN_VENDOR_MARVELL=y
CONFIG_WLAN_VENDOR_MEDIATEK=y
CONFIG_WLAN_VENDOR_MICROCHIP=y
@@ -8245,6 +8276,7 @@ CONFIG_ZRAM_DEF_COMP_LZORLE=y
CONFIG_ZRAM=m
CONFIG_ZRAM_MEMORY_TRACKING=y
CONFIG_ZRAM_MULTI_COMP=y
+CONFIG_ZRAM_TRACK_ENTRY_ACTIME=y
# CONFIG_ZRAM_WRITEBACK is not set
CONFIG_ZSMALLOC_CHAIN_SIZE=8
# CONFIG_ZSMALLOC_STAT is not set
@@ -8257,6 +8289,7 @@ CONFIG_ZSWAP_COMPRESSOR_DEFAULT_LZO=y
# CONFIG_ZSWAP_COMPRESSOR_DEFAULT_ZSTD is not set
# CONFIG_ZSWAP_DEFAULT_ON is not set
CONFIG_ZSWAP_EXCLUSIVE_LOADS_DEFAULT_ON=y
+CONFIG_ZSWAP_SHRINKER_DEFAULT_ON=y
CONFIG_ZSWAP=y
# CONFIG_ZSWAP_ZPOOL_DEFAULT_Z3FOLD is not set
CONFIG_ZSWAP_ZPOOL_DEFAULT_ZBUD=y
@@ -8266,7 +8299,7 @@ CONFIG_ZENIFY=y
CONFIG_NTSYNC=y
CONFIG_USER_NS_UNPRIVILEGED=y
CONFIG_TCP_CONG_BBR2=m
-# CONFIG_SCHED_PDS is not set
+CONFIG_SCHED_BORE=y
CONFIG_HID_IPTS=m
CONFIG_HID_ITHC=m
CONFIG_SURFACE_BOOK1_DGPU_SWITCH=m
@@ -8275,11 +8308,8 @@ CONFIG_LEDS_TPS68470=m
CONFIG_SENSORS_SURFACE_FAN=m
CONFIG_SENSORS_SURFACE_TEMP=m
CONFIG_DRM_AMD_COLOR_STEAMDECK=y
-CONFIG_BMI323_I2C=m
-CONFIG_BMI323_SPI=m
CONFIG_DRM_APPLETBDRM=m
CONFIG_HID_APPLETB_BL=m
CONFIG_HID_APPLETB_KBD=m
CONFIG_HID_APPLE_MAGIC_BACKLIGHT=m
CONFIG_APPLE_BCE=m
-CONFIG_SCHED_BORE=y
diff --git a/SOURCES/kernel-ppc64le-debug-rhel.config b/SOURCES/kernel-ppc64le-debug-rhel.config
index c73a4bc..b57a082 100644
--- a/SOURCES/kernel-ppc64le-debug-rhel.config
+++ b/SOURCES/kernel-ppc64le-debug-rhel.config
@@ -85,6 +85,7 @@ CONFIG_ACPI_VIDEO=m
# CONFIG_AD5791 is not set
# CONFIG_AD5933 is not set
# CONFIG_AD7091R5 is not set
+# CONFIG_AD7091R8 is not set
# CONFIG_AD7124 is not set
# CONFIG_AD7150 is not set
# CONFIG_AD7192 is not set
@@ -208,11 +209,13 @@ CONFIG_AMD_PHY=m
CONFIG_AMD_PMC=m
# CONFIG_AMD_PTDMA is not set
# CONFIG_AMDTEE is not set
+# CONFIG_AMD_WBRF is not set
# CONFIG_AMIGA_PARTITION is not set
CONFIG_AMPERE_ERRATUM_AC03_CPU_38=y
# CONFIG_AMT is not set
# CONFIG_ANDROID_BINDER_IPC is not set
# CONFIG_ANON_VMA_NAME is not set
+# CONFIG_AOSONG_AGS02MA is not set
# CONFIG_APDS9300 is not set
CONFIG_APDS9802ALS=m
# CONFIG_APDS9960 is not set
@@ -366,6 +369,7 @@ CONFIG_BACKLIGHT_LED=m
# CONFIG_BACKLIGHT_LM3639 is not set
CONFIG_BACKLIGHT_LP855X=m
# CONFIG_BACKLIGHT_LV5207LP is not set
+# CONFIG_BACKLIGHT_MP3309C is not set
CONFIG_BACKLIGHT_PWM=m
# CONFIG_BACKLIGHT_QCOM_WLED is not set
# CONFIG_BACKLIGHT_SAHARA is not set
@@ -459,6 +463,7 @@ CONFIG_BLK_DEV_SR=m
# CONFIG_BLK_DEV_THROTTLING_LOW is not set
CONFIG_BLK_DEV_THROTTLING=y
# CONFIG_BLK_DEV_UBLK is not set
+CONFIG_BLK_DEV_WRITE_MOUNTED=y
CONFIG_BLK_DEV=y
CONFIG_BLK_DEV_ZONED=y
# CONFIG_BLK_INLINE_ENCRYPTION is not set
@@ -478,6 +483,8 @@ CONFIG_BLOCK=y
# CONFIG_BMI088_ACCEL is not set
# CONFIG_BMI160_I2C is not set
# CONFIG_BMI160_SPI is not set
+CONFIG_BMI323_I2C=m
+CONFIG_BMI323_SPI=m
# CONFIG_BMP280 is not set
# CONFIG_BNA is not set
CONFIG_BNX2=m
@@ -493,7 +500,6 @@ CONFIG_BONDING=m
# CONFIG_BOOT_CONFIG_FORCE is not set
CONFIG_BOOT_CONFIG=y
# CONFIG_BOOTPARAM_HARDLOCKUP_PANIC is not set
-# CONFIG_BOOTPARAM_HOTPLUG_CPU0 is not set
# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
CONFIG_BOOT_PRINTK_DELAY=y
@@ -910,7 +916,6 @@ CONFIG_CRYPTO_CAST5=m
CONFIG_CRYPTO_CAST6=m
CONFIG_CRYPTO_CBC=y
CONFIG_CRYPTO_CCM=y
-CONFIG_CRYPTO_CFB=y
CONFIG_CRYPTO_CHACHA20=m
# CONFIG_CRYPTO_CHACHA20_P10 is not set
CONFIG_CRYPTO_CHACHA20POLY1305=m
@@ -944,6 +949,7 @@ CONFIG_CRYPTO_DEV_NX_COMPRESS_PSERIES=y
CONFIG_CRYPTO_DEV_NX_COMPRESS=y
CONFIG_CRYPTO_DEV_NX=y
# CONFIG_CRYPTO_DEV_OCTEONTX_CPT is not set
+# CONFIG_CRYPTO_DEV_QAT_420XX is not set
# CONFIG_CRYPTO_DEV_QAT_4XXX is not set
# CONFIG_CRYPTO_DEV_QAT_C3XXX is not set
# CONFIG_CRYPTO_DEV_QAT_C3XXXVF is not set
@@ -1003,7 +1009,6 @@ CONFIG_CRYPTO_MD4=m
CONFIG_CRYPTO_MD5=y
CONFIG_CRYPTO_MICHAEL_MIC=m
CONFIG_CRYPTO_NULL=y
-CONFIG_CRYPTO_OFB=y
CONFIG_CRYPTO_PCBC=m
CONFIG_CRYPTO_PCRYPT=m
CONFIG_CRYPTO_POLY1305=m
@@ -1154,7 +1159,7 @@ CONFIG_DEBUG_STACK_USAGE=y
# CONFIG_DEBUG_VM_MAPLE_TREE is not set
# CONFIG_DEBUG_VM_PGFLAGS is not set
CONFIG_DEBUG_VM_PGTABLE=y
-# CONFIG_DEBUG_VM_RB is not set # revisit this if performance isn't horrible
+# CONFIG_DEBUG_VM_RB is not set
# CONFIG_DEBUG_VM_SHOOT_LAZIES is not set
# CONFIG_DEBUG_VM_VMACACHE is not set
CONFIG_DEBUG_VM=y
@@ -1269,6 +1274,7 @@ CONFIG_DP83867_PHY=m
# CONFIG_DP83869_PHY is not set
CONFIG_DP83TC811_PHY=m
# CONFIG_DP83TD510_PHY is not set
+# CONFIG_DP83TG720_PHY is not set
# CONFIG_DPM_WATCHDOG is not set
# CONFIG_DPOT_DAC is not set
# CONFIG_DPS310 is not set
@@ -1326,6 +1332,7 @@ CONFIG_DRM_I915_COMPRESS_ERROR=y
# CONFIG_DRM_I915_DEBUG_MMIO is not set
# CONFIG_DRM_I915_DEBUG_RUNTIME_PM is not set
# CONFIG_DRM_I915_DEBUG_VBLANK_EVADE is not set
+# CONFIG_DRM_I915_DEBUG_WAKEREF is not set
CONFIG_DRM_I915_FENCE_TIMEOUT=10000
CONFIG_DRM_I915_HEARTBEAT_INTERVAL=2500
# CONFIG_DRM_I915_LOW_LEVEL_TRACEPOINTS is not set
@@ -1367,6 +1374,7 @@ CONFIG_DRM_LOAD_EDID_FIRMWARE=y
CONFIG_DRM_MGAG200=m
# CONFIG_DRM_MXSFB is not set
CONFIG_DRM_NOUVEAU_BACKLIGHT=y
+# CONFIG_DRM_NOUVEAU_GSP_DEFAULT is not set
CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_NWL_MIPI_DSI is not set
# CONFIG_DRM_NXP_PTN3460 is not set
@@ -1387,6 +1395,7 @@ CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_PANEL_HIMAX_HX8394 is not set
# CONFIG_DRM_PANEL_ILITEK_IL9322 is not set
# CONFIG_DRM_PANEL_ILITEK_ILI9341 is not set
+# CONFIG_DRM_PANEL_ILITEK_ILI9805 is not set
# CONFIG_DRM_PANEL_ILITEK_ILI9881C is not set
# CONFIG_DRM_PANEL_ILITEK_ILI9882T is not set
# CONFIG_DRM_PANEL_INNOLUX_EJ030NA is not set
@@ -1447,6 +1456,7 @@ CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_PANEL_SONY_TD4353_JDI is not set
# CONFIG_DRM_PANEL_SONY_TULIP_TRULY_NT35521 is not set
# CONFIG_DRM_PANEL_STARTEK_KD070FHFID015 is not set
+# CONFIG_DRM_PANEL_SYNAPTICS_R63353 is not set
# CONFIG_DRM_PANEL_TDO_TL070WSH30 is not set
# CONFIG_DRM_PANEL_TPO_TD028TTEC1 is not set
# CONFIG_DRM_PANEL_TPO_TD043MTEA1 is not set
@@ -1461,6 +1471,7 @@ CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_PARADE_PS8622 is not set
# CONFIG_DRM_PARADE_PS8640 is not set
# CONFIG_DRM_PL111 is not set
+# CONFIG_DRM_POWERVR is not set
CONFIG_DRM_QXL=m
CONFIG_DRM_RADEON=m
CONFIG_DRM_RADEON_USERPTR=y
@@ -1499,6 +1510,7 @@ CONFIG_DRM_VKMS=m
CONFIG_DRM_VMWGFX_FBCON=y
CONFIG_DRM_VMWGFX=m
# CONFIG_DRM_VMWGFX_MKSSTATS is not set
+# CONFIG_DRM_XE is not set
# CONFIG_DRM_XEN_FRONTEND is not set
CONFIG_DRM=y
# CONFIG_DS1682 is not set
@@ -1598,6 +1610,7 @@ CONFIG_DVB_USB_VP702X=m
CONFIG_DVB_USB_VP7045=m
# CONFIG_DVB_USB_ZD1301 is not set
# CONFIG_DW_AXI_DMAC is not set
+# CONFIG_DWC_PCIE_PMU is not set
CONFIG_DW_DMAC=m
# CONFIG_DW_DMAC_PCI is not set
# CONFIG_DW_EDMA is not set
@@ -1664,6 +1677,7 @@ CONFIG_EPOLL=y
# CONFIG_EQUALIZER is not set
# CONFIG_EROFS_FS_DEBUG is not set
CONFIG_EROFS_FS=m
+# CONFIG_EROFS_FS_ONDEMAND is not set
CONFIG_EROFS_FS_POSIX_ACL=y
CONFIG_EROFS_FS_SECURITY=y
CONFIG_EROFS_FS_XATTR=y
@@ -1733,7 +1747,6 @@ CONFIG_FAULT_INJECTION=y
# CONFIG_FB_3DFX is not set
# CONFIG_FB_ARC is not set
# CONFIG_FB_ARK is not set
-# CONFIG_FB_ARMCLCD is not set
# CONFIG_FB_ASILIANT is not set
# CONFIG_FB_ATY128 is not set
# CONFIG_FB_ATY is not set
@@ -1753,7 +1766,6 @@ CONFIG_FB_EFI=y
# CONFIG_FB_IMSTT is not set
# CONFIG_FB_IMX is not set
# CONFIG_FB_KYRO is not set
-# CONFIG_FB_LE80578 is not set
# CONFIG_FB_MATROX_G is not set
# CONFIG_FB_MATROX_I2C is not set
# CONFIG_FB_MATROX is not set
@@ -1820,11 +1832,12 @@ CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
CONFIG_FRAMEBUFFER_CONSOLE=y
# CONFIG_FRAME_POINTER is not set
+# CONFIG_FRAMER is not set
CONFIG_FRAME_WARN=2048
CONFIG_FRONTSWAP=y
# CONFIG_FSCACHE_DEBUG is not set
-CONFIG_FSCACHE=m
CONFIG_FSCACHE_STATS=y
+CONFIG_FSCACHE=y
CONFIG_FS_DAX=y
# CONFIG_FS_ENCRYPTION is not set
# CONFIG_FSI is not set
@@ -2005,6 +2018,7 @@ CONFIG_HASHTABLE_KUNIT_TEST=m
# CONFIG_HD44780 is not set
# CONFIG_HDC100X is not set
# CONFIG_HDC2010 is not set
+# CONFIG_HDC3020 is not set
CONFIG_HDLC_CISCO=m
CONFIG_HDLC_FR=m
CONFIG_HDLC=m
@@ -2077,6 +2091,7 @@ CONFIG_HID_LOGITECH=m
CONFIG_HID_MAGICMOUSE=y
# CONFIG_HID_MALTRON is not set
# CONFIG_HID_MAYFLASH is not set
+# CONFIG_HID_MCP2200 is not set
# CONFIG_HID_MCP2221 is not set
# CONFIG_HID_MEGAWORLD_FF is not set
CONFIG_HID_MICROSOFT=m
@@ -2179,6 +2194,7 @@ CONFIG_HOTPLUG_PCI=y
CONFIG_HSA_AMD_P2P=y
CONFIG_HSA_AMD_SVM=y
CONFIG_HSA_AMD=y
+# CONFIG_HSC030PA is not set
# CONFIG_HSI is not set
CONFIG_HSR=m
# CONFIG_HT16K33 is not set
@@ -2323,6 +2339,7 @@ CONFIG_IBM_BSR=m
CONFIG_IBMVETH=m
CONFIG_IBMVMC=m
CONFIG_IBMVNIC=m
+CONFIG_ICE_HWMON=y
CONFIG_ICE_HWTS=y
CONFIG_ICE=m
CONFIG_ICE_SWITCHDEV=y
@@ -2431,6 +2448,7 @@ CONFIG_INFINIBAND_BNXT_RE=m
CONFIG_INFINIBAND_CXGB4=m
CONFIG_INFINIBAND_EFA=m
# CONFIG_INFINIBAND_ERDMA is not set
+# CONFIG_INFINIBAND_HFI1 is not set
# CONFIG_INFINIBAND_HNS is not set
CONFIG_INFINIBAND_IPOIB_CM=y
# CONFIG_INFINIBAND_IPOIB_DEBUG_DATA is not set
@@ -2445,14 +2463,15 @@ CONFIG_INFINIBAND=m
CONFIG_INFINIBAND_ON_DEMAND_PAGING=y
CONFIG_INFINIBAND_QEDR=m
# CONFIG_INFINIBAND_QIB is not set
-CONFIG_INFINIBAND_RDMAVT=m
+# CONFIG_INFINIBAND_RDMAVT is not set
# CONFIG_INFINIBAND_RTRS_CLIENT is not set
# CONFIG_INFINIBAND_RTRS_SERVER is not set
CONFIG_INFINIBAND_SRP=m
CONFIG_INFINIBAND_SRPT=m
CONFIG_INFINIBAND_USER_ACCESS=m
CONFIG_INFINIBAND_USER_MAD=m
-CONFIG_INFINIBAND_USNIC=m
+# CONFIG_INFINIBAND_USNIC is not set
+# CONFIG_INFINIBAND_VMWARE_PVRDMA is not set
# CONFIG_INFTL is not set
# CONFIG_INIT_ON_ALLOC_DEFAULT_ON is not set
# CONFIG_INIT_ON_FREE_DEFAULT_ON is not set
@@ -2537,10 +2556,11 @@ CONFIG_INTEL_IOMMU_PERF_EVENTS=y
# CONFIG_INTEL_ISH_FIRMWARE_DOWNLOADER is not set
# CONFIG_INTEL_ISHTP_ECLITE is not set
# CONFIG_INTEL_LDMA is not set
-# CONFIG_INTEL_MEI_GSC_PROXY is not set
+CONFIG_INTEL_MEI_GSC_PROXY=m
# CONFIG_INTEL_MEI_HDCP is not set
# CONFIG_INTEL_MEI_PXP is not set
# CONFIG_INTEL_MEI_TXE is not set
+# CONFIG_INTEL_MEI_VSC_HW is not set
# CONFIG_INTEL_PMC_CORE is not set
# CONFIG_INTEL_PMT_CLASS is not set
# CONFIG_INTEL_PMT_CRASHLOG is not set
@@ -2777,6 +2797,7 @@ CONFIG_ISL29003=m
CONFIG_ISL29020=m
# CONFIG_ISL29125 is not set
# CONFIG_ISL29501 is not set
+# CONFIG_ISL76682 is not set
CONFIG_ISO9660_FS=m
CONFIG_IS_SIGNED_TYPE_KUNIT_TEST=m
# CONFIG_IT8712F_WDT is not set
@@ -2819,6 +2840,7 @@ CONFIG_KALLSYMS_BASE_RELATIVE=y
# CONFIG_KALLSYMS_SELFTEST is not set
CONFIG_KALLSYMS=y
# CONFIG_KARMA_PARTITION is not set
+# CONFIG_KASAN_EXTRA_INFO is not set
CONFIG_KASAN_GENERIC=y
# CONFIG_KASAN_INLINE is not set
CONFIG_KASAN_KUNIT_TEST=m
@@ -2918,9 +2940,11 @@ CONFIG_KVM_BOOK3S_HV_NESTED_PMU_WORKAROUND=y
# CONFIG_KVM_BOOK3S_HV_P9_TIMING is not set
CONFIG_KVM_BOOK3S_PR_POSSIBLE=y
CONFIG_KVM_GUEST=y
+CONFIG_KVM_HYPERV=y
CONFIG_KVM_MAX_NR_VCPUS=4096
CONFIG_KVM_PROVE_MMU=y
CONFIG_KVM_SMM=y
+CONFIG_KVM_SW_PROTECTED_VM=y
# CONFIG_KVM_WERROR is not set
# CONFIG_KVM_XEN is not set
CONFIG_KVM_XICS=y
@@ -3100,6 +3124,7 @@ CONFIG_LSM_MMAP_MIN_ADDR=65535
# CONFIG_LTO_CLANG_FULL is not set
# CONFIG_LTO_CLANG_THIN is not set
CONFIG_LTO_NONE=y
+# CONFIG_LTR390 is not set
# CONFIG_LTR501 is not set
# CONFIG_LTRF216A is not set
# CONFIG_LV0104CS is not set
@@ -3139,7 +3164,7 @@ CONFIG_MAGIC_SYSRQ=y
CONFIG_MANTIS_CORE=m
# CONFIG_MARCH_Z16 is not set
CONFIG_MARVELL_10G_PHY=m
-# CONFIG_MARVELL_88Q2XXX_PHY is not set
+CONFIG_MARVELL_88Q2XXX_PHY=m
# CONFIG_MARVELL_88X2222_PHY is not set
CONFIG_MARVELL_PHY=m
# CONFIG_MATOM is not set
@@ -3156,6 +3181,7 @@ CONFIG_MARVELL_PHY=m
# CONFIG_MAX31827 is not set
# CONFIG_MAX31856 is not set
# CONFIG_MAX31865 is not set
+# CONFIG_MAX34408 is not set
# CONFIG_MAX44000 is not set
# CONFIG_MAX44009 is not set
# CONFIG_MAX517 is not set
@@ -3182,7 +3208,9 @@ CONFIG_MAX_SKB_FRAGS=17
# CONFIG_MCP4531 is not set
# CONFIG_MCP4725 is not set
# CONFIG_MCP4728 is not set
+# CONFIG_MCP4821 is not set
# CONFIG_MCP4922 is not set
+# CONFIG_MCP9600 is not set
# CONFIG_MCTP is not set
CONFIG_MD_AUTODETECT=y
CONFIG_MD_BITMAP_FILE=y
@@ -3402,10 +3430,11 @@ CONFIG_MISC_FILESYSTEMS=y
CONFIG_MISC_RTSX_PCI=m
CONFIG_MISC_RTSX_USB=m
# CONFIG_MLX4_CORE_GEN2 is not set
+# CONFIG_MLX4_CORE is not set
CONFIG_MLX4_DEBUG=y
CONFIG_MLX4_EN_DCB=y
-CONFIG_MLX4_EN=m
-CONFIG_MLX4_INFINIBAND=m
+# CONFIG_MLX4_EN is not set
+# CONFIG_MLX4_INFINIBAND is not set
CONFIG_MLX5_ACCEL=y
CONFIG_MLX5_CLS_ACT=y
CONFIG_MLX5_CORE_EN_DCB=y
@@ -3436,6 +3465,7 @@ CONFIG_MLX5_VDPA_NET=m
CONFIG_MLX5_VFIO_PCI=m
# CONFIG_MLX90614 is not set
# CONFIG_MLX90632 is not set
+# CONFIG_MLX90635 is not set
# CONFIG_MLXBF_BOOTCTL is not set
# CONFIG_MLXBF_GIGE is not set
# CONFIG_MLXBF_PMC is not set
@@ -3599,7 +3629,7 @@ CONFIG_MT76x2U=m
CONFIG_MT7921E=m
# CONFIG_MT7921S is not set
# CONFIG_MT7921U is not set
-# CONFIG_MT7925E is not set
+CONFIG_MT7925E=m
# CONFIG_MT7925U is not set
# CONFIG_MT7996E is not set
# CONFIG_MTD_ABSENT is not set
@@ -3651,6 +3681,7 @@ CONFIG_MTD_POWERNV_FLASH=m
CONFIG_MTD_UBI_BEB_LIMIT=20
# CONFIG_MTD_UBI_BLOCK is not set
# CONFIG_MTD_UBI_FASTMAP is not set
+# CONFIG_MTD_UBI_FAULT_INJECTION is not set
# CONFIG_MTD_UBI_GLUEBI is not set
CONFIG_MTD_UBI=m
CONFIG_MTD_UBI_WL_THRESHOLD=4096
@@ -3672,7 +3703,6 @@ CONFIG_NAMESPACES=y
CONFIG_NATIONAL_PHY=m
# CONFIG_NAU7802 is not set
# CONFIG_NCN26000_PHY is not set
-CONFIG_ND_BLK=m
CONFIG_ND_BTT=m
# CONFIG_NDC_DIS_DYNAMIC_CACHING is not set
CONFIG_ND_CLAIM=y
@@ -3726,7 +3756,6 @@ CONFIG_NET_DROP_MONITOR=y
# CONFIG_NET_EMATCH is not set
# CONFIG_NET_EMATCH_META is not set
# CONFIG_NET_EMATCH_NBYTE is not set
-# CONFIG_NET_EMATCH_STACK is not set
# CONFIG_NET_EMATCH_TEXT is not set
# CONFIG_NET_EMATCH_U32 is not set
CONFIG_NET_FAILOVER=m
@@ -3911,6 +3940,7 @@ CONFIG_NET_VENDOR_IBM=y
CONFIG_NET_VENDOR_INTEL=y
# CONFIG_NET_VENDOR_LITEX is not set
CONFIG_NET_VENDOR_MARVELL=y
+CONFIG_NET_VENDOR_MELLANOX=y
# CONFIG_NET_VENDOR_MICREL is not set
# CONFIG_NET_VENDOR_MICROCHIP is not set
# CONFIG_NET_VENDOR_MICROSEMI is not set
@@ -4002,6 +4032,7 @@ CONFIG_NF_REJECT_IPV6=m
# CONFIG_NFSD_BLOCKLAYOUT is not set
# CONFIG_NFSD_FLEXFILELAYOUT is not set
CONFIG_NFS_DISABLE_UDP_SUPPORT=y
+# CONFIG_NFSD_LEGACY_CLIENT_TRACKING is not set
CONFIG_NFSD=m
CONFIG_NFSD_PNFS=y
CONFIG_NFSD_SCSILAYOUT=y
@@ -4149,6 +4180,7 @@ CONFIG_NOUVEAU_DEBUG_PUSH=y
CONFIG_NOZOMI=m
CONFIG_NR_CPUS=2048
CONFIG_NR_IRQS=512
+# CONFIG_NSM is not set
# CONFIG_NTB_AMD is not set
# CONFIG_NTB_EPF is not set
# CONFIG_NTB_IDT is not set
@@ -4408,22 +4440,13 @@ CONFIG_PHYSICAL_ALIGN=0x200000
# CONFIG_PHY_TUSB1210 is not set
# CONFIG_PI433 is not set
CONFIG_PID_NS=y
-CONFIG_PINCTRL_ALDERLAKE=m
-# CONFIG_PINCTRL_BROXTON is not set
-# CONFIG_PINCTRL_CHERRYVIEW is not set
# CONFIG_PINCTRL_CS42L43 is not set
# CONFIG_PINCTRL_CY8C95X0 is not set
-CONFIG_PINCTRL_ELKHARTLAKE=m
-CONFIG_PINCTRL_EMMITSBURG=m
# CONFIG_PINCTRL_EQUILIBRIUM is not set
-CONFIG_PINCTRL_ICELAKE=m
# CONFIG_PINCTRL_IPQ6018 is not set
# CONFIG_PINCTRL_IPQ8074 is not set
# CONFIG_PINCTRL is not set
-# CONFIG_PINCTRL_JASPERLAKE is not set
-CONFIG_PINCTRL_LAKEFIELD=m
# CONFIG_PINCTRL_LPASS_LPI is not set
-# CONFIG_PINCTRL_LYNXPOINT is not set
# CONFIG_PINCTRL_MCP23S08 is not set
# CONFIG_PINCTRL_MDM9615 is not set
# CONFIG_PINCTRL_MICROCHIP_SGPIO is not set
@@ -4749,8 +4772,8 @@ CONFIG_RD_GZIP=y
CONFIG_RD_LZ4=y
CONFIG_RD_LZMA=y
CONFIG_RD_LZO=y
-CONFIG_RDMA_RXE=m
-CONFIG_RDMA_SIW=m
+# CONFIG_RDMA_RXE is not set
+# CONFIG_RDMA_SIW is not set
# CONFIG_RDS is not set
CONFIG_RD_XZ=y
CONFIG_RD_ZSTD=y
@@ -4791,6 +4814,7 @@ CONFIG_REGULATOR_FIXED_VOLTAGE=m
# CONFIG_REGULATOR_MAX8973 is not set
# CONFIG_REGULATOR_MCP16502 is not set
# CONFIG_REGULATOR_MT6311 is not set
+# CONFIG_REGULATOR_NETLINK_EVENTS is not set
# CONFIG_REGULATOR_PF8X00 is not set
# CONFIG_REGULATOR_PFUZE100 is not set
# CONFIG_REGULATOR_PV88060 is not set
@@ -4943,6 +4967,7 @@ CONFIG_RTC_DRV_M41T80_WDT=y
CONFIG_RTC_DRV_M48T35=m
CONFIG_RTC_DRV_M48T59=m
# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_MAX31335 is not set
CONFIG_RTC_DRV_MAX6900=m
# CONFIG_RTC_DRV_MAX6902 is not set
# CONFIG_RTC_DRV_MAX6916 is not set
@@ -5029,7 +5054,7 @@ CONFIG_RTW88=m
# CONFIG_RTW89_8851BE is not set
CONFIG_RTW89_8852AE=m
CONFIG_RTW89_8852BE=m
-# CONFIG_RTW89_8852CE is not set
+CONFIG_RTW89_8852CE=m
CONFIG_RTW89_DEBUGFS=y
CONFIG_RTW89_DEBUGMSG=y
CONFIG_RTW89=m
@@ -5043,6 +5068,7 @@ CONFIG_RXKAD=y
CONFIG_RXPERF=m
# CONFIG_S390_KPROBES_SANITY_TEST is not set
# CONFIG_S390_MODULES_SANITY_TEST is not set
+# CONFIG_SAMPLE_CGROUP is not set
# CONFIG_SAMPLE_FTRACE_OPS is not set
# CONFIG_SAMPLE_KMEMLEAK is not set
# CONFIG_SAMPLES is not set
@@ -5189,7 +5215,7 @@ CONFIG_SECONDARY_TRUSTED_KEYRING=y
CONFIG_SECRETMEM=y
CONFIG_SECTION_MISMATCH_WARN_ONLY=y
# CONFIG_SECURITY_APPARMOR is not set
-# CONFIG_SECURITY_DMESG_RESTRICT is not set
+CONFIG_SECURITY_DMESG_RESTRICT=y
CONFIG_SECURITYFS=y
CONFIG_SECURITY_INFINIBAND=y
# CONFIG_SECURITY_LANDLOCK is not set
@@ -5282,6 +5308,7 @@ CONFIG_SENSORS_FSCHMD=m
# CONFIG_SENSORS_FTSTEUTATES is not set
CONFIG_SENSORS_G760A=m
# CONFIG_SENSORS_G762 is not set
+# CONFIG_SENSORS_GIGABYTE_WATERFORCE is not set
CONFIG_SENSORS_GL518SM=m
CONFIG_SENSORS_GL520SM=m
# CONFIG_SENSORS_GPIO_FAN is not set
@@ -5348,6 +5375,7 @@ CONFIG_SENSORS_LTC4215=m
CONFIG_SENSORS_LTC4245=m
# CONFIG_SENSORS_LTC4260 is not set
CONFIG_SENSORS_LTC4261=m
+# CONFIG_SENSORS_LTC4286 is not set
# CONFIG_SENSORS_MAX1111 is not set
# CONFIG_SENSORS_MAX127 is not set
# CONFIG_SENSORS_MAX15301 is not set
@@ -5375,9 +5403,11 @@ CONFIG_SENSORS_MAX8688=m
# CONFIG_SENSORS_MC34VR500 is not set
CONFIG_SENSORS_MCP3021=m
# CONFIG_SENSORS_MLXREG_FAN is not set
+# CONFIG_SENSORS_MP2856 is not set
# CONFIG_SENSORS_MP2888 is not set
# CONFIG_SENSORS_MP2975 is not set
# CONFIG_SENSORS_MP5023 is not set
+# CONFIG_SENSORS_MP5990 is not set
# CONFIG_SENSORS_MPQ7932 is not set
# CONFIG_SENSORS_MR75203 is not set
# CONFIG_SENSORS_NCT6683 is not set
@@ -5557,10 +5587,8 @@ CONFIG_SIGNATURE=y
CONFIG_SIPHASH_KUNIT_TEST=m
# CONFIG_SKGE is not set
# CONFIG_SKY2 is not set
-# CONFIG_SLAB_DEPRECATED is not set
CONFIG_SLAB_FREELIST_HARDENED=y
CONFIG_SLAB_FREELIST_RANDOM=y
-# CONFIG_SLAB is not set
# CONFIG_SLAB_MERGE_DEFAULT is not set
# CONFIG_SLIMBUS is not set
CONFIG_SLIP_COMPRESSED=y
@@ -6305,6 +6333,7 @@ CONFIG_SQUASHFS_ZSTD=y
# CONFIG_SSB is not set
# CONFIG_SSFDC is not set
# CONFIG_SSIF_IPMI_BMC is not set
+CONFIG_STACKDEPOT_MAX_FRAMES=64
CONFIG_STACK_HASH_ORDER=20
CONFIG_STACKINIT_KUNIT_TEST=m
CONFIG_STACKPROTECTOR_STRONG=y
@@ -6423,7 +6452,7 @@ CONFIG_TCP_CONG_DCTCP=m
# CONFIG_TCP_CONG_HSTCP is not set
CONFIG_TCP_CONG_HTCP=m
# CONFIG_TCP_CONG_HYBLA is not set
-# CONFIG_TCP_CONG_ILLINOIS is not set
+CONFIG_TCP_CONG_ILLINOIS=m
# CONFIG_TCP_CONG_LP is not set
CONFIG_TCP_CONG_NV=m
# CONFIG_TCP_CONG_SCALABLE is not set
@@ -6487,6 +6516,7 @@ CONFIG_TEST_STRING_HELPERS=m
# CONFIG_TEST_UUID is not set
CONFIG_TEST_VMALLOC=m
# CONFIG_TEST_XARRAY is not set
+# CONFIG_THERMAL_DEBUGFS is not set
# CONFIG_THERMAL_DEFAULT_GOV_FAIR_SHARE is not set
CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y
# CONFIG_THERMAL_DEFAULT_GOV_USER_SPACE is not set
@@ -6659,6 +6689,7 @@ CONFIG_TOUCHSCREEN_WACOM_I2C=m
CONFIG_TRACER_SNAPSHOT=y
# CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS is not set
CONFIG_TRANSPARENT_HUGEPAGE_MADVISE=y
+# CONFIG_TRANSPARENT_HUGEPAGE_NEVER is not set
CONFIG_TRANSPARENT_HUGEPAGE=y
CONFIG_TREE_RCU=y
# CONFIG_TRIM_UNUSED_KSYMS is not set
@@ -6689,6 +6720,7 @@ CONFIG_TYPEC_MUX_FSA4480=m
# CONFIG_TYPEC_MUX_NB7VPQ904M is not set
CONFIG_TYPEC_MUX_PI3USB30532=m
# CONFIG_TYPEC_MUX_PTN36502 is not set
+# CONFIG_TYPEC_MUX_WCD939X_USBSS is not set
# CONFIG_TYPEC_NVIDIA_ALTMODE is not set
# CONFIG_TYPEC_QCOM_PMIC is not set
# CONFIG_TYPEC_RT1711H is not set
@@ -7050,12 +7082,14 @@ CONFIG_VDPA_SIM_NET=m
# CONFIG_VDPA_USER is not set
# CONFIG_VEML6030 is not set
# CONFIG_VEML6070 is not set
+# CONFIG_VEML6075 is not set
CONFIG_VETH=m
# CONFIG_VF610_ADC is not set
# CONFIG_VF610_DAC is not set
CONFIG_VFAT_FS=m
# CONFIG_VFIO_AMBA is not set
CONFIG_VFIO_CONTAINER=y
+# CONFIG_VFIO_DEBUGFS is not set
CONFIG_VFIO_DEVICE_CDEV=y
CONFIG_VFIO_GROUP=y
CONFIG_VFIO_IOMMU_TYPE1=m
@@ -7090,6 +7124,7 @@ CONFIG_VHOST_VSOCK=m
# CONFIG_VIDEO_ADV_DEBUG is not set
# CONFIG_VIDEO_AK7375 is not set
# CONFIG_VIDEO_AK881X is not set
+# CONFIG_VIDEO_ALVIUM_CSI2 is not set
# CONFIG_VIDEO_AR0521 is not set
CONFIG_VIDEO_AU0828=m
# CONFIG_VIDEO_AU0828_RC is not set
@@ -7138,6 +7173,8 @@ CONFIG_VIDEO_EM28XX_RC=m
# CONFIG_VIDEO_FB_IVTV_FORCE_PAT is not set
CONFIG_VIDEO_FB_IVTV=m
# CONFIG_VIDEO_FIXED_MINOR_RANGES is not set
+# CONFIG_VIDEO_GC0308 is not set
+# CONFIG_VIDEO_GC2145 is not set
# CONFIG_VIDEO_GO7007 is not set
# CONFIG_VIDEO_GS1662 is not set
CONFIG_VIDEO_HDPVR=m
@@ -7207,6 +7244,7 @@ CONFIG_VIDEO_IVTV=m
# CONFIG_VIDEO_OV5675 is not set
# CONFIG_VIDEO_OV5693 is not set
# CONFIG_VIDEO_OV5695 is not set
+# CONFIG_VIDEO_OV64A40 is not set
# CONFIG_VIDEO_OV6650 is not set
# CONFIG_VIDEO_OV7251 is not set
# CONFIG_VIDEO_OV7640 is not set
@@ -7259,6 +7297,7 @@ CONFIG_VIDEO_SAA7164=m
# CONFIG_VIDEO_TDA9840 is not set
# CONFIG_VIDEO_TEA6415C is not set
# CONFIG_VIDEO_TEA6420 is not set
+# CONFIG_VIDEO_THP7312 is not set
# CONFIG_VIDEO_THS7303 is not set
# CONFIG_VIDEO_THS8200 is not set
# CONFIG_VIDEO_TLV320AIC23B is not set
@@ -7274,6 +7313,7 @@ CONFIG_VIDEO_TUNER=m
# CONFIG_VIDEO_TW5864 is not set
# CONFIG_VIDEO_TW686X is not set
# CONFIG_VIDEO_TW68 is not set
+# CONFIG_VIDEO_TW9900 is not set
# CONFIG_VIDEO_TW9903 is not set
# CONFIG_VIDEO_TW9906 is not set
# CONFIG_VIDEO_TW9910 is not set
@@ -7308,6 +7348,7 @@ CONFIG_VIRTIO_PCI_LEGACY=y
CONFIG_VIRTIO_PCI=y
# CONFIG_VIRTIO_PMEM is not set
CONFIG_VIRTIO_VDPA=m
+# CONFIG_VIRTIO_VFIO_PCI is not set
CONFIG_VIRTIO_VSOCKETS=m
CONFIG_VIRTIO=y
CONFIG_VIRTUALIZATION=y
@@ -7432,7 +7473,7 @@ CONFIG_XFS_POSIX_ACL=y
CONFIG_XFS_QUOTA=y
# CONFIG_XFS_RT is not set
# CONFIG_XFS_SUPPORT_ASCII_CI is not set
-CONFIG_XFS_SUPPORT_V4=y
+# CONFIG_XFS_SUPPORT_V4 is not set
CONFIG_XFS_WARN=y
# CONFIG_XGENE_DMA is not set
# CONFIG_XILINX_DMA is not set
@@ -7491,6 +7532,7 @@ CONFIG_ZRAM_DEF_COMP_LZORLE=y
CONFIG_ZRAM=m
CONFIG_ZRAM_MEMORY_TRACKING=y
# CONFIG_ZRAM_MULTI_COMP is not set
+CONFIG_ZRAM_TRACK_ENTRY_ACTIME=y
CONFIG_ZRAM_WRITEBACK=y
CONFIG_ZSMALLOC_CHAIN_SIZE=8
CONFIG_ZSMALLOC_STAT=y
@@ -7503,6 +7545,7 @@ CONFIG_ZSWAP_COMPRESSOR_DEFAULT_LZO=y
# CONFIG_ZSWAP_COMPRESSOR_DEFAULT_ZSTD is not set
# CONFIG_ZSWAP_DEFAULT_ON is not set
# CONFIG_ZSWAP_EXCLUSIVE_LOADS_DEFAULT_ON is not set
+# CONFIG_ZSWAP_SHRINKER_DEFAULT_ON is not set
CONFIG_ZSWAP=y
# CONFIG_ZSWAP_ZPOOL_DEFAULT_Z3FOLD is not set
CONFIG_ZSWAP_ZPOOL_DEFAULT_ZBUD=y
@@ -7512,7 +7555,7 @@ CONFIG_ZENIFY=y
CONFIG_NTSYNC=y
CONFIG_USER_NS_UNPRIVILEGED=y
CONFIG_TCP_CONG_BBR2=m
-# CONFIG_SCHED_PDS is not set
+CONFIG_SCHED_BORE=y
CONFIG_HID_IPTS=m
CONFIG_HID_ITHC=m
CONFIG_SURFACE_BOOK1_DGPU_SWITCH=m
@@ -7521,11 +7564,8 @@ CONFIG_LEDS_TPS68470=m
CONFIG_SENSORS_SURFACE_FAN=m
CONFIG_SENSORS_SURFACE_TEMP=m
CONFIG_DRM_AMD_COLOR_STEAMDECK=y
-CONFIG_BMI323_I2C=m
-CONFIG_BMI323_SPI=m
CONFIG_DRM_APPLETBDRM=m
CONFIG_HID_APPLETB_BL=m
CONFIG_HID_APPLETB_KBD=m
CONFIG_HID_APPLE_MAGIC_BACKLIGHT=m
CONFIG_APPLE_BCE=m
-CONFIG_SCHED_BORE=y
diff --git a/SOURCES/kernel-ppc64le-fedora.config b/SOURCES/kernel-ppc64le-fedora.config
index aad0b77..429dfd7 100644
--- a/SOURCES/kernel-ppc64le-fedora.config
+++ b/SOURCES/kernel-ppc64le-fedora.config
@@ -103,6 +103,7 @@ CONFIG_AD5770R=m
# CONFIG_AD5791 is not set
# CONFIG_AD5933 is not set
# CONFIG_AD7091R5 is not set
+CONFIG_AD7091R8=m
CONFIG_AD7124=m
# CONFIG_AD7150 is not set
# CONFIG_AD7192 is not set
@@ -244,6 +245,7 @@ CONFIG_ANDROID_BINDERFS=y
# CONFIG_ANDROID_BINDER_IPC is not set
# CONFIG_ANDROID_BINDER_IPC_SELFTEST is not set
# CONFIG_ANON_VMA_NAME is not set
+# CONFIG_AOSONG_AGS02MA is not set
# CONFIG_APDS9300 is not set
CONFIG_APDS9802ALS=m
# CONFIG_APDS9960 is not set
@@ -285,7 +287,6 @@ CONFIG_ARM64_ERRATUM_2119858=y
CONFIG_ARM64_ERRATUM_2139208=y
CONFIG_ARM64_ERRATUM_2224489=y
CONFIG_ARM64_ERRATUM_2253138=y
-CONFIG_ARM64_ERRATUM_858921=y
CONFIG_ARM64_USE_LSE_ATOMICS=y
CONFIG_ARM_CMN=m
# CONFIG_ARM_MHU_V2 is not set
@@ -438,6 +439,7 @@ CONFIG_BACKLIGHT_LED=m
# CONFIG_BACKLIGHT_LM3639 is not set
CONFIG_BACKLIGHT_LP855X=m
# CONFIG_BACKLIGHT_LV5207LP is not set
+CONFIG_BACKLIGHT_MP3309C=m
CONFIG_BACKLIGHT_MT6370=m
CONFIG_BACKLIGHT_PWM=m
# CONFIG_BACKLIGHT_QCOM_WLED is not set
@@ -487,6 +489,7 @@ CONFIG_BCACHEFS_FS=m
# CONFIG_BCACHEFS_NO_LATENCY_ACCT is not set
CONFIG_BCACHEFS_POSIX_ACL=y
CONFIG_BCACHEFS_QUOTA=y
+CONFIG_BCACHEFS_SIX_OPTIMISTIC_SPIN=y
# CONFIG_BCACHEFS_TESTS is not set
CONFIG_BCACHE=m
CONFIG_BCM54140_PHY=m
@@ -566,6 +569,7 @@ CONFIG_BLK_DEV_SX8=m
CONFIG_BLK_DEV_THROTTLING=y
CONFIG_BLKDEV_UBLK_LEGACY_OPCODES=y
CONFIG_BLK_DEV_UBLK=m
+CONFIG_BLK_DEV_WRITE_MOUNTED=y
CONFIG_BLK_DEV=y
CONFIG_BLK_DEV_ZONED=y
# CONFIG_BLK_INLINE_ENCRYPTION_FALLBACK is not set
@@ -586,6 +590,8 @@ CONFIG_BME680=m
# CONFIG_BMI088_ACCEL is not set
CONFIG_BMI160_I2C=m
CONFIG_BMI160_SPI=m
+CONFIG_BMI323_I2C=m
+CONFIG_BMI323_SPI=m
CONFIG_BMP280=m
CONFIG_BNA=m
CONFIG_BNX2=m
@@ -601,7 +607,6 @@ CONFIG_BONDING=m
# CONFIG_BOOT_CONFIG_FORCE is not set
CONFIG_BOOT_CONFIG=y
# CONFIG_BOOTPARAM_HARDLOCKUP_PANIC is not set
-# CONFIG_BOOTPARAM_HOTPLUG_CPU0 is not set
# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
CONFIG_BOOT_PRINTK_DELAY=y
@@ -730,7 +735,7 @@ CONFIG_BUILD_SALT=""
# CONFIG_CACHEFILES_DEBUG is not set
# CONFIG_CACHEFILES_ERROR_INJECTION is not set
CONFIG_CACHEFILES=m
-# CONFIG_CACHEFILES_ONDEMAND is not set
+CONFIG_CACHEFILES_ONDEMAND=y
CONFIG_CACHESTAT_SYSCALL=y
# CONFIG_CADENCE_WATCHDOG is not set
# CONFIG_CAIF is not set
@@ -1066,7 +1071,6 @@ CONFIG_CRYPTO_CAST5=m
CONFIG_CRYPTO_CAST6=m
CONFIG_CRYPTO_CBC=y
CONFIG_CRYPTO_CCM=y
-CONFIG_CRYPTO_CFB=y
CONFIG_CRYPTO_CHACHA20=m
# CONFIG_CRYPTO_CHACHA20_P10 is not set
CONFIG_CRYPTO_CHACHA20POLY1305=m
@@ -1095,12 +1099,13 @@ CONFIG_CRYPTO_DEV_HIFN_795X_RNG=y
# CONFIG_CRYPTO_DEV_HISI_SEC2 is not set
# CONFIG_CRYPTO_DEV_HISI_SEC is not set
# CONFIG_CRYPTO_DEV_HISI_TRNG is not set
-# CONFIG_CRYPTO_DEV_NITROX_CNN55XX is not set
+CONFIG_CRYPTO_DEV_NITROX_CNN55XX=m
CONFIG_CRYPTO_DEV_NX_COMPRESS_POWERNV=y
CONFIG_CRYPTO_DEV_NX_COMPRESS_PSERIES=y
CONFIG_CRYPTO_DEV_NX_COMPRESS=y
CONFIG_CRYPTO_DEV_NX=y
# CONFIG_CRYPTO_DEV_OCTEONTX_CPT is not set
+CONFIG_CRYPTO_DEV_QAT_420XX=m
CONFIG_CRYPTO_DEV_QAT_4XXX=m
CONFIG_CRYPTO_DEV_QAT_C3XXX=m
CONFIG_CRYPTO_DEV_QAT_C3XXXVF=m
@@ -1158,7 +1163,6 @@ CONFIG_CRYPTO_MD4=m
CONFIG_CRYPTO_MD5=y
CONFIG_CRYPTO_MICHAEL_MIC=m
CONFIG_CRYPTO_NULL=y
-CONFIG_CRYPTO_OFB=y
CONFIG_CRYPTO_PCBC=m
CONFIG_CRYPTO_PCRYPT=m
CONFIG_CRYPTO_POLY1305=m
@@ -1251,7 +1255,6 @@ CONFIG_DEBUG_FS=y
CONFIG_DEBUGGER=y
# CONFIG_DEBUG_GPIO is not set
# CONFIG_DEBUG_HIGHMEM is not set
-# CONFIG_DEBUG_HOTPLUG_CPU0 is not set
CONFIG_DEBUG_INFO_BTF=y
# CONFIG_DEBUG_INFO_COMPRESSED is not set
CONFIG_DEBUG_INFO_COMPRESSED_NONE=y
@@ -1310,7 +1313,7 @@ CONFIG_DEBUG_STACKOVERFLOW=y
# CONFIG_DEBUG_VM_MAPLE_TREE is not set
# CONFIG_DEBUG_VM_PGFLAGS is not set
# CONFIG_DEBUG_VM_PGTABLE is not set
-# CONFIG_DEBUG_VM_RB is not set # revisit this if performance isn't horrible
+# CONFIG_DEBUG_VM_RB is not set
# CONFIG_DEBUG_VM_SHOOT_LAZIES is not set
# CONFIG_DEBUG_VM_VMACACHE is not set
# CONFIG_DEBUG_WQ_FORCE_RR_CPU is not set
@@ -1420,6 +1423,7 @@ CONFIG_DP83867_PHY=m
CONFIG_DP83869_PHY=m
# CONFIG_DP83TC811_PHY is not set
# CONFIG_DP83TD510_PHY is not set
+CONFIG_DP83TG720_PHY=m
# CONFIG_DPM_WATCHDOG is not set
CONFIG_DPOT_DAC=m
# CONFIG_DPS310 is not set
@@ -1509,6 +1513,7 @@ CONFIG_DRM_MGAG200=m
# CONFIG_DRM_MSM_GPU_SUDO is not set
# CONFIG_DRM_MXSFB is not set
CONFIG_DRM_NOUVEAU_BACKLIGHT=y
+CONFIG_DRM_NOUVEAU_GSP_DEFAULT=y
CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_NOUVEAU_SVM is not set
# CONFIG_DRM_NWL_MIPI_DSI is not set
@@ -1531,6 +1536,7 @@ CONFIG_DRM_PANEL_FEIYANG_FY07024DI26A30D=m
# CONFIG_DRM_PANEL_HIMAX_HX8394 is not set
# CONFIG_DRM_PANEL_ILITEK_IL9322 is not set
# CONFIG_DRM_PANEL_ILITEK_ILI9341 is not set
+# CONFIG_DRM_PANEL_ILITEK_ILI9805 is not set
# CONFIG_DRM_PANEL_ILITEK_ILI9881C is not set
CONFIG_DRM_PANEL_ILITEK_ILI9882T=m
CONFIG_DRM_PANEL_INNOLUX_EJ030NA=m
@@ -1593,6 +1599,7 @@ CONFIG_DRM_PANEL_SEIKO_43WVF1G=m
# CONFIG_DRM_PANEL_SONY_TD4353_JDI is not set
CONFIG_DRM_PANEL_SONY_TULIP_TRULY_NT35521=m
CONFIG_DRM_PANEL_STARTEK_KD070FHFID015=m
+# CONFIG_DRM_PANEL_SYNAPTICS_R63353 is not set
# CONFIG_DRM_PANEL_TDO_TL070WSH30 is not set
# CONFIG_DRM_PANEL_TPO_TD028TTEC1 is not set
# CONFIG_DRM_PANEL_TPO_TD043MTEA1 is not set
@@ -1615,7 +1622,7 @@ CONFIG_DRM_RADEON_USERPTR=y
# CONFIG_DRM_RCAR_USE_LVDS is not set
# CONFIG_DRM_RCAR_USE_MIPI_DSI is not set
CONFIG_DRM_SAMSUNG_DSIM=m
-# CONFIG_DRM_SII902X is not set
+CONFIG_DRM_SII902X=m
CONFIG_DRM_SII9234=m
# CONFIG_DRM_SIL_SII8620 is not set
CONFIG_DRM_SIMPLE_BRIDGE=m
@@ -1646,6 +1653,7 @@ CONFIG_DRM_VKMS=m
CONFIG_DRM_VMWGFX_FBCON=y
CONFIG_DRM_VMWGFX=m
# CONFIG_DRM_VMWGFX_MKSSTATS is not set
+# CONFIG_DRM_XE is not set
# CONFIG_DRM_XEN_FRONTEND is not set
CONFIG_DRM=y
# CONFIG_DS1682 is not set
@@ -1750,6 +1758,7 @@ CONFIG_DVB_USB_VP702X=m
CONFIG_DVB_USB_VP7045=m
CONFIG_DVB_USB_ZD1301=m
# CONFIG_DW_AXI_DMAC is not set
+CONFIG_DWC_PCIE_PMU=m
CONFIG_DW_DMAC_CORE=m
CONFIG_DW_DMAC=m
CONFIG_DW_DMAC_PCI=m
@@ -1803,8 +1812,10 @@ CONFIG_EFI_ZBOOT=y
CONFIG_ELF_CORE=y
# CONFIG_EMBEDDED is not set
# CONFIG_ENA_ETHERNET is not set
+# CONFIG_ENC28J60 is not set
CONFIG_ENCLOSURE_SERVICES=m
CONFIG_ENCRYPTED_KEYS=y
+# CONFIG_ENCX24J600 is not set
CONFIG_ENERGY_MODEL=y
CONFIG_ENIC=m
CONFIG_ENVELOPE_DETECTOR=m
@@ -1813,6 +1824,7 @@ CONFIG_EPOLL=y
CONFIG_EQUALIZER=m
# CONFIG_EROFS_FS_DEBUG is not set
CONFIG_EROFS_FS=m
+CONFIG_EROFS_FS_ONDEMAND=y
# CONFIG_EROFS_FS_PCPU_KTHREAD is not set
CONFIG_EROFS_FS_POSIX_ACL=y
CONFIG_EROFS_FS_SECURITY=y
@@ -1889,7 +1901,6 @@ CONFIG_FAT_KUNIT_TEST=m
# CONFIG_FB_3DFX is not set
# CONFIG_FB_ARC is not set
# CONFIG_FB_ARK is not set
-# CONFIG_FB_ARMCLCD is not set
# CONFIG_FB_ASILIANT is not set
# CONFIG_FB_ATY128 is not set
# CONFIG_FB_ATY is not set
@@ -1909,7 +1920,6 @@ CONFIG_FB_EFI=y
# CONFIG_FB_IMSTT is not set
# CONFIG_FB_IMX is not set
# CONFIG_FB_KYRO is not set
-# CONFIG_FB_LE80578 is not set
# CONFIG_FB_MATROX_G is not set
# CONFIG_FB_MATROX_I2C is not set
# CONFIG_FB_MATROX is not set
@@ -2001,8 +2011,8 @@ CONFIG_FRAME_POINTER=y
CONFIG_FRAME_WARN=2048
CONFIG_FRONTSWAP=y
# CONFIG_FSCACHE_DEBUG is not set
-CONFIG_FSCACHE=m
CONFIG_FSCACHE_STATS=y
+CONFIG_FSCACHE=y
CONFIG_FS_DAX=y
CONFIG_FS_ENCRYPTION_INLINE_CRYPT=y
CONFIG_FS_ENCRYPTION=y
@@ -2194,8 +2204,8 @@ CONFIG_HAVE_BOOTMEM_INFO_NODE=y
CONFIG_HD44780=m
# CONFIG_HDC100X is not set
CONFIG_HDC2010=m
+# CONFIG_HDC3020 is not set
CONFIG_HEADERS_INSTALL=y
-# CONFIG_HERMES is not set
CONFIG_HFS_FS=m
CONFIG_HFSPLUS_FS=m
CONFIG_HI6421V600_IRQ=m
@@ -2261,6 +2271,7 @@ CONFIG_HID_MACALLY=m
CONFIG_HID_MAGICMOUSE=y
CONFIG_HID_MALTRON=m
CONFIG_HID_MAYFLASH=m
+# CONFIG_HID_MCP2200 is not set
CONFIG_HID_MCP2221=m
CONFIG_HID_MEGAWORLD_FF=m
CONFIG_HID_MICROSOFT=m
@@ -2349,7 +2360,6 @@ CONFIG_HMC425=m
# CONFIG_HMC6352 is not set
CONFIG_HMM_MIRROR=y
CONFIG_HOLTEK_FF=y
-# CONFIG_HOSTAP is not set
CONFIG_HOTPLUG_CPU=y
CONFIG_HOTPLUG_PCI_ACPI_IBM=m
CONFIG_HOTPLUG_PCI_ACPI=y
@@ -2366,6 +2376,7 @@ CONFIG_HOTPLUG_PCI=y
# CONFIG_HP_ILO is not set
CONFIG_HSA_AMD_SVM=y
CONFIG_HSA_AMD=y
+# CONFIG_HSC030PA is not set
# CONFIG_HSI is not set
CONFIG_HSR=m
# CONFIG_HSU_DMA is not set
@@ -2513,6 +2524,7 @@ CONFIG_IBM_BSR=m
CONFIG_IBMVETH=m
CONFIG_IBMVMC=m
CONFIG_IBMVNIC=m
+CONFIG_ICE_HWMON=y
CONFIG_ICE_HWTS=y
CONFIG_ICE=m
CONFIG_ICE_SWITCHDEV=y
@@ -2973,6 +2985,7 @@ CONFIG_ISL29003=m
CONFIG_ISL29020=m
# CONFIG_ISL29125 is not set
# CONFIG_ISL29501 is not set
+# CONFIG_ISL76682 is not set
CONFIG_ISO9660_FS=m
CONFIG_IS_SIGNED_TYPE_KUNIT_TEST=m
CONFIG_IT8712F_WDT=m
@@ -3044,6 +3057,7 @@ CONFIG_JOYSTICK_PSXPAD_SPI_FF=y
CONFIG_JOYSTICK_PSXPAD_SPI=m
CONFIG_JOYSTICK_PXRC=m
CONFIG_JOYSTICK_QWIIC=m
+# CONFIG_JOYSTICK_SEESAW is not set
# CONFIG_JOYSTICK_SENSEHAT is not set
CONFIG_JOYSTICK_SIDEWINDER=m
# CONFIG_JOYSTICK_SPACEBALL is not set
@@ -3065,6 +3079,7 @@ CONFIG_KALLSYMS_ALL=y
# CONFIG_KALLSYMS_SELFTEST is not set
CONFIG_KALLSYMS=y
# CONFIG_KARMA_PARTITION is not set
+# CONFIG_KASAN_EXTRA_INFO is not set
# CONFIG_KASAN is not set
# CONFIG_KASAN_MODULE_TEST is not set
# CONFIG_KASAN_VMALLOC is not set
@@ -3173,6 +3188,9 @@ CONFIG_L2TP_ETH=m
CONFIG_L2TP_IP=m
CONFIG_L2TP=m
CONFIG_L2TP_V3=y
+CONFIG_LAN743X=m
+CONFIG_LAN966X_DCB=y
+CONFIG_LAN966X_SWITCH=m
# CONFIG_LAPB is not set
CONFIG_LATENCYTOP=y
# CONFIG_LATTICE_ECP3_CONFIG is not set
@@ -3235,6 +3253,7 @@ CONFIG_LEDS_LP50XX=m
# CONFIG_LEDS_LP55XX_COMMON is not set
# CONFIG_LEDS_LP8860 is not set
CONFIG_LEDS_LT3593=m
+CONFIG_LEDS_MAX5970=m
CONFIG_LEDS_MAX77650=m
CONFIG_LEDS_MLXCPLD=m
CONFIG_LEDS_MLXREG=m
@@ -3358,6 +3377,7 @@ CONFIG_LTC2983=m
# CONFIG_LTO_CLANG_FULL is not set
# CONFIG_LTO_CLANG_THIN is not set
CONFIG_LTO_NONE=y
+# CONFIG_LTR390 is not set
CONFIG_LTR501=m
CONFIG_LTRF216A=m
CONFIG_LV0104CS=m
@@ -3417,6 +3437,7 @@ CONFIG_MAX30208=m
CONFIG_MAX31827=m
CONFIG_MAX31856=m
CONFIG_MAX31865=m
+CONFIG_MAX34408=m
# CONFIG_MAX44000 is not set
CONFIG_MAX44009=m
# CONFIG_MAX517 is not set
@@ -3445,7 +3466,9 @@ CONFIG_MCP41010=m
# CONFIG_MCP4531 is not set
# CONFIG_MCP4725 is not set
CONFIG_MCP4728=m
+CONFIG_MCP4821=m
# CONFIG_MCP4922 is not set
+CONFIG_MCP9600=m
CONFIG_MCTP_SERIAL=m
# CONFIG_MCTP_TRANSPORT_I2C is not set
# CONFIG_MCTP_TRANSPORT_I3C is not set
@@ -3486,7 +3509,6 @@ CONFIG_MEDIA_CAMERA_SUPPORT=y
CONFIG_MEDIA_CEC_RC=y
CONFIG_MEDIA_CEC_SUPPORT=y
CONFIG_MEDIA_CONTROLLER_DVB=y
-CONFIG_MEDIA_CONTROLLER_REQUEST_API=y
CONFIG_MEDIA_CONTROLLER=y
CONFIG_MEDIA_DIGITAL_TV_SUPPORT=y
CONFIG_MEDIA_PCI_SUPPORT=y
@@ -3721,6 +3743,7 @@ CONFIG_MLX5_VDPA=y
CONFIG_MLX5_VFIO_PCI=m
CONFIG_MLX90614=m
CONFIG_MLX90632=m
+# CONFIG_MLX90635 is not set
# CONFIG_MLXBF_BOOTCTL is not set
# CONFIG_MLXBF_GIGE is not set
# CONFIG_MLXBF_PMC is not set
@@ -3965,6 +3988,7 @@ CONFIG_MTD_SPI_NOR_SWP_DISABLE_ON_VOLATILE=y
CONFIG_MTD_UBI_BEB_LIMIT=20
# CONFIG_MTD_UBI_BLOCK is not set
# CONFIG_MTD_UBI_FASTMAP is not set
+# CONFIG_MTD_UBI_FAULT_INJECTION is not set
# CONFIG_MTD_UBI_GLUEBI is not set
CONFIG_MTD_UBI=m
CONFIG_MTD_UBI_WL_THRESHOLD=4096
@@ -3995,7 +4019,6 @@ CONFIG_NATSEMI=m
CONFIG_NCN26000_PHY=m
CONFIG_NCSI_OEM_CMD_GET_MAC=y
CONFIG_NCSI_OEM_CMD_KEEP_PHY=y
-# CONFIG_ND_BLK is not set
# CONFIG_NDC_DIS_DYNAMIC_CACHING is not set
CONFIG_NE2K_PCI=m
# CONFIG_NET_9P_DEBUG is not set
@@ -4297,7 +4320,7 @@ CONFIG_NET_VENDOR_LITEX=y
CONFIG_NET_VENDOR_MARVELL=y
CONFIG_NET_VENDOR_MELLANOX=y
CONFIG_NET_VENDOR_MICREL=y
-# CONFIG_NET_VENDOR_MICROCHIP is not set
+CONFIG_NET_VENDOR_MICROCHIP=y
# CONFIG_NET_VENDOR_MICROSEMI is not set
CONFIG_NET_VENDOR_MICROSOFT=y
CONFIG_NET_VENDOR_MYRI=y
@@ -4420,6 +4443,7 @@ CONFIG_NF_REJECT_IPV6=m
CONFIG_NFSD_BLOCKLAYOUT=y
CONFIG_NFSD_FLEXFILELAYOUT=y
CONFIG_NFS_DISABLE_UDP_SUPPORT=y
+# CONFIG_NFSD_LEGACY_CLIENT_TRACKING is not set
CONFIG_NFSD=m
CONFIG_NFSD_PNFS=y
CONFIG_NFSD_SCSILAYOUT=y
@@ -4567,6 +4591,7 @@ CONFIG_NOZOMI=m
CONFIG_NR_CPUS=2048
CONFIG_NR_IRQS=512
CONFIG_NS83820=m
+CONFIG_NSM=m
CONFIG_NTB_EPF=m
# CONFIG_NTB is not set
# CONFIG_NTFS3_64BIT_CLUSTER is not set
@@ -4640,7 +4665,6 @@ CONFIG_OPT3001=m
CONFIG_OPT4001=m
CONFIG_OPTPROBES=y
CONFIG_ORANGEFS_FS=m
-CONFIG_ORINOCO_USB=m
CONFIG_OSF_PARTITION=y
CONFIG_OSNOISE_TRACER=y
CONFIG_OVERFLOW_KUNIT_TEST=m
@@ -4651,10 +4675,6 @@ CONFIG_OVERLAY_FS=m
CONFIG_OVERLAY_FS_REDIRECT_ALWAYS_FOLLOW=y
# CONFIG_OVERLAY_FS_REDIRECT_DIR is not set
# CONFIG_OVERLAY_FS_XINO_AUTO is not set
-CONFIG_P54_COMMON=m
-CONFIG_P54_PCI=m
-# CONFIG_P54_SPI is not set
-CONFIG_P54_USB=m
CONFIG_PA12203001=m
CONFIG_PACKET_DIAG=y
CONFIG_PACKET=y
@@ -4827,21 +4847,13 @@ CONFIG_PHY_RTK_RTD_USB3PHY=m
# CONFIG_PI433 is not set
CONFIG_PID_NS=y
# CONFIG_PINCONF is not set
-CONFIG_PINCTRL_ALDERLAKE=m
-# CONFIG_PINCTRL_CANNONLAKE is not set
-CONFIG_PINCTRL_CEDARFORK=m
CONFIG_PINCTRL_CS42L43=m
CONFIG_PINCTRL_CY8C95X0=m
-CONFIG_PINCTRL_ELKHARTLAKE=m
-CONFIG_PINCTRL_EMMITSBURG=m
# CONFIG_PINCTRL_EQUILIBRIUM is not set
# CONFIG_PINCTRL_IPQ6018 is not set
# CONFIG_PINCTRL_IPQ8074 is not set
# CONFIG_PINCTRL is not set
-# CONFIG_PINCTRL_JASPERLAKE is not set
-CONFIG_PINCTRL_LAKEFIELD=m
# CONFIG_PINCTRL_LPASS_LPI is not set
-# CONFIG_PINCTRL_LYNXPOINT is not set
# CONFIG_PINCTRL_MCP23S08 is not set
CONFIG_PINCTRL_MESON=y
# CONFIG_PINCTRL_MICROCHIP_SGPIO is not set
@@ -4862,6 +4874,7 @@ CONFIG_PINCTRL_SM8350_LPASS_LPI=m
# CONFIG_PINCTRL_SM8450 is not set
# CONFIG_PINCTRL_STMFX is not set
# CONFIG_PINCTRL_SX150X is not set
+CONFIG_PINCTRL_TPS6594=m
# CONFIG_PING is not set
# CONFIG_PINMUX is not set
CONFIG_PKCS7_MESSAGE_PARSER=y
@@ -5183,7 +5196,7 @@ CONFIG_RDS_TCP=m
CONFIG_RD_XZ=y
CONFIG_RD_ZSTD=y
# CONFIG_READABLE_ASM is not set
-# CONFIG_READ_ONLY_THP_FOR_FS is not set
+CONFIG_READ_ONLY_THP_FOR_FS=y
CONFIG_REALTEK_AUTOPM=y
CONFIG_REALTEK_PHY=m
# CONFIG_REED_SOLOMON_TEST is not set
@@ -5232,6 +5245,7 @@ CONFIG_REGULATOR_MP886X=m
# CONFIG_REGULATOR_MPQ7920 is not set
# CONFIG_REGULATOR_MT6311 is not set
CONFIG_REGULATOR_MT6370=m
+# CONFIG_REGULATOR_NETLINK_EVENTS is not set
# CONFIG_REGULATOR_PCA9450 is not set
# CONFIG_REGULATOR_PF8X00 is not set
# CONFIG_REGULATOR_PFUZE100 is not set
@@ -5420,6 +5434,7 @@ CONFIG_RTC_DRV_M41T94=m
CONFIG_RTC_DRV_M48T35=m
CONFIG_RTC_DRV_M48T59=m
# CONFIG_RTC_DRV_M48T86 is not set
+CONFIG_RTC_DRV_MAX31335=m
CONFIG_RTC_DRV_MAX6900=m
CONFIG_RTC_DRV_MAX6902=m
CONFIG_RTC_DRV_MAX6916=m
@@ -5457,6 +5472,7 @@ CONFIG_RTC_DRV_SD3078=m
# CONFIG_RTC_DRV_SNVS is not set
CONFIG_RTC_DRV_STK17TA8=m
# CONFIG_RTC_DRV_TEST is not set
+CONFIG_RTC_DRV_TPS6594=m
CONFIG_RTC_DRV_V3020=m
CONFIG_RTC_DRV_X1205=m
# CONFIG_RTC_DRV_ZYNQMP is not set
@@ -5777,6 +5793,7 @@ CONFIG_SENSORS_FSP_3Y=m
CONFIG_SENSORS_FTSTEUTATES=m
CONFIG_SENSORS_G760A=m
CONFIG_SENSORS_G762=m
+CONFIG_SENSORS_GIGABYTE_WATERFORCE=m
CONFIG_SENSORS_GL518SM=m
CONFIG_SENSORS_GL520SM=m
# CONFIG_SENSORS_GPIO_FAN is not set
@@ -5844,6 +5861,7 @@ CONFIG_SENSORS_LTC4222=m
CONFIG_SENSORS_LTC4245=m
CONFIG_SENSORS_LTC4260=m
CONFIG_SENSORS_LTC4261=m
+# CONFIG_SENSORS_LTC4286 is not set
CONFIG_SENSORS_MAX1111=m
# CONFIG_SENSORS_MAX127 is not set
# CONFIG_SENSORS_MAX15301 is not set
@@ -5871,10 +5889,12 @@ CONFIG_SENSORS_MAX8688=m
CONFIG_SENSORS_MC34VR500=m
CONFIG_SENSORS_MCP3021=m
CONFIG_SENSORS_MLXREG_FAN=m
+# CONFIG_SENSORS_MP2856 is not set
CONFIG_SENSORS_MP2888=m
CONFIG_SENSORS_MP2975=m
CONFIG_SENSORS_MP2975_REGULATOR=y
CONFIG_SENSORS_MP5023=m
+# CONFIG_SENSORS_MP5990 is not set
CONFIG_SENSORS_MPQ7932=m
CONFIG_SENSORS_MPQ7932_REGULATOR=y
CONFIG_SENSORS_MR75203=m
@@ -6057,10 +6077,8 @@ CONFIG_SKGE_GENESIS=y
CONFIG_SKGE=m
# CONFIG_SKY2_DEBUG is not set
CONFIG_SKY2=m
-# CONFIG_SLAB_DEPRECATED is not set
CONFIG_SLAB_FREELIST_HARDENED=y
CONFIG_SLAB_FREELIST_RANDOM=y
-# CONFIG_SLAB is not set
# CONFIG_SLAB_MERGE_DEFAULT is not set
# CONFIG_SLIMBUS is not set
CONFIG_SLIP_COMPRESSED=y
@@ -6833,6 +6851,7 @@ CONFIG_SSB_PCIHOST=y
CONFIG_SSB_SDIOHOST=y
# CONFIG_SSFDC is not set
CONFIG_SSIF_IPMI_BMC=m
+CONFIG_STACKDEPOT_MAX_FRAMES=64
CONFIG_STACK_HASH_ORDER=20
CONFIG_STACKINIT_KUNIT_TEST=m
CONFIG_STACKPROTECTOR_STRONG=y
@@ -7044,6 +7063,7 @@ CONFIG_TEST_SORT=m
# CONFIG_TEST_UUID is not set
CONFIG_TEST_VMALLOC=m
# CONFIG_TEST_XARRAY is not set
+# CONFIG_THERMAL_DEBUGFS is not set
# CONFIG_THERMAL_DEFAULT_GOV_BANG_BANG is not set
# CONFIG_THERMAL_DEFAULT_GOV_FAIR_SHARE is not set
CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y
@@ -7241,6 +7261,7 @@ CONFIG_TRACE_EVAL_MAP_FILE=y
CONFIG_TRACER_SNAPSHOT=y
# CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS is not set
CONFIG_TRANSPARENT_HUGEPAGE_MADVISE=y
+# CONFIG_TRANSPARENT_HUGEPAGE_NEVER is not set
CONFIG_TRANSPARENT_HUGEPAGE=y
# CONFIG_TRIM_UNUSED_KSYMS is not set
CONFIG_TRUSTED_KEYS_TEE=y
@@ -7277,6 +7298,7 @@ CONFIG_TYPEC_MUX_GPIO_SBU=m
CONFIG_TYPEC_MUX_NB7VPQ904M=m
CONFIG_TYPEC_MUX_PI3USB30532=m
CONFIG_TYPEC_MUX_PTN36502=m
+# CONFIG_TYPEC_MUX_WCD939X_USBSS is not set
CONFIG_TYPEC_NVIDIA_ALTMODE=m
# CONFIG_TYPEC_QCOM_PMIC is not set
# CONFIG_TYPEC_RT1711H is not set
@@ -7533,7 +7555,6 @@ CONFIG_USB_NET_NET1080=m
CONFIG_USB_NET_PLUSB=m
CONFIG_USB_NET_QMI_WWAN=m
CONFIG_USB_NET_RNDIS_HOST=m
-CONFIG_USB_NET_RNDIS_WLAN=m
CONFIG_USB_NET_SMSC75XX=m
CONFIG_USB_NET_SMSC95XX=m
CONFIG_USB_NET_SR9700=m
@@ -7676,7 +7697,6 @@ CONFIG_USB_XHCI_PCI=y
CONFIG_USB_XUSBATM=m
CONFIG_USB=y
CONFIG_USB_YUREX=m
-# CONFIG_USB_ZD1201 is not set
# CONFIG_USB_ZERO is not set
CONFIG_USB_ZR364XX=m
# CONFIG_USELIB is not set
@@ -7692,6 +7712,7 @@ CONFIG_V4L_MEM2MEM_DRIVERS=y
# CONFIG_V4L_PLATFORM_DRIVERS is not set
CONFIG_V4L_TEST_DRIVERS=y
CONFIG_VALIDATE_FS_PARSER=y
+CONFIG_VCAP=y
CONFIG_VCHIQ_CDEV=y
CONFIG_VCNL3020=m
# CONFIG_VCNL4000 is not set
@@ -7704,11 +7725,13 @@ CONFIG_VDPA_SIM_NET=m
CONFIG_VDPA_USER=m
CONFIG_VEML6030=m
# CONFIG_VEML6070 is not set
+# CONFIG_VEML6075 is not set
CONFIG_VETH=m
# CONFIG_VF610_ADC is not set
# CONFIG_VF610_DAC is not set
CONFIG_VFAT_FS=m
CONFIG_VFIO_CONTAINER=y
+# CONFIG_VFIO_DEBUGFS is not set
# CONFIG_VFIO_DEVICE_CDEV is not set
CONFIG_VFIO_GROUP=y
# CONFIG_VFIO_IOMMU_TYPE1 is not set
@@ -7747,6 +7770,7 @@ CONFIG_VIDEO_ADV7842=m
# CONFIG_VIDEO_ADV_DEBUG is not set
CONFIG_VIDEO_AK7375=m
CONFIG_VIDEO_AK881X=m
+# CONFIG_VIDEO_ALVIUM_CSI2 is not set
CONFIG_VIDEO_AR0521=m
CONFIG_VIDEO_AU0828=m
# CONFIG_VIDEO_AU0828_RC is not set
@@ -7795,6 +7819,8 @@ CONFIG_VIDEO_EM28XX_V4L2=m
CONFIG_VIDEO_ET8EK8=m
CONFIG_VIDEO_FB_IVTV=m
# CONFIG_VIDEO_FIXED_MINOR_RANGES is not set
+CONFIG_VIDEO_GC0308=m
+CONFIG_VIDEO_GC2145=m
CONFIG_VIDEO_GO7007_LOADER=m
CONFIG_VIDEO_GO7007=m
CONFIG_VIDEO_GO7007_USB=m
@@ -7865,6 +7891,7 @@ CONFIG_VIDEO_OV5670=m
CONFIG_VIDEO_OV5675=m
CONFIG_VIDEO_OV5693=m
CONFIG_VIDEO_OV5695=m
+CONFIG_VIDEO_OV64A40=m
CONFIG_VIDEO_OV6650=m
CONFIG_VIDEO_OV7251=m
CONFIG_VIDEO_OV7640=m
@@ -7921,6 +7948,7 @@ CONFIG_VIDEO_TDA9840=m
CONFIG_VIDEO_TEA6415C=m
CONFIG_VIDEO_TEA6420=m
# CONFIG_VIDEO_TEGRA_TPG is not set
+# CONFIG_VIDEO_THP7312 is not set
CONFIG_VIDEO_THS7303=m
CONFIG_VIDEO_THS8200=m
CONFIG_VIDEO_TLV320AIC23B=m
@@ -7936,6 +7964,7 @@ CONFIG_VIDEO_TW2804=m
# CONFIG_VIDEO_TW5864 is not set
CONFIG_VIDEO_TW686X=m
# CONFIG_VIDEO_TW68 is not set
+# CONFIG_VIDEO_TW9900 is not set
CONFIG_VIDEO_TW9903=m
CONFIG_VIDEO_TW9906=m
CONFIG_VIDEO_TW9910=m
@@ -7978,6 +8007,7 @@ CONFIG_VIRTIO_PCI_LEGACY=y
CONFIG_VIRTIO_PCI=y
# CONFIG_VIRTIO_PMEM is not set
CONFIG_VIRTIO_VDPA=m
+CONFIG_VIRTIO_VFIO_PCI=m
CONFIG_VIRTIO_VSOCKETS=m
CONFIG_VIRTIO=y
CONFIG_VIRTUALIZATION=y
@@ -8018,6 +8048,7 @@ CONFIG_VXLAN=m
# CONFIG_VZ89X is not set
CONFIG_W1_CON=y
CONFIG_W1=m
+# CONFIG_W1_MASTER_AMD_AXI is not set
# CONFIG_W1_MASTER_DS1WM is not set
CONFIG_W1_MASTER_DS2482=m
CONFIG_W1_MASTER_DS2490=m
@@ -8095,7 +8126,7 @@ CONFIG_WLAN_VENDOR_ATH=y
CONFIG_WLAN_VENDOR_BROADCOM=y
# CONFIG_WLAN_VENDOR_CISCO is not set
CONFIG_WLAN_VENDOR_INTEL=y
-CONFIG_WLAN_VENDOR_INTERSIL=y
+# CONFIG_WLAN_VENDOR_INTERSIL is not set
CONFIG_WLAN_VENDOR_MARVELL=y
CONFIG_WLAN_VENDOR_MEDIATEK=y
CONFIG_WLAN_VENDOR_MICROCHIP=y
@@ -8214,6 +8245,7 @@ CONFIG_ZRAM_DEF_COMP_LZORLE=y
CONFIG_ZRAM=m
# CONFIG_ZRAM_MEMORY_TRACKING is not set
CONFIG_ZRAM_MULTI_COMP=y
+# CONFIG_ZRAM_TRACK_ENTRY_ACTIME is not set
# CONFIG_ZRAM_WRITEBACK is not set
CONFIG_ZSMALLOC_CHAIN_SIZE=8
# CONFIG_ZSMALLOC_STAT is not set
@@ -8226,6 +8258,7 @@ CONFIG_ZSWAP_COMPRESSOR_DEFAULT_LZO=y
# CONFIG_ZSWAP_COMPRESSOR_DEFAULT_ZSTD is not set
# CONFIG_ZSWAP_DEFAULT_ON is not set
CONFIG_ZSWAP_EXCLUSIVE_LOADS_DEFAULT_ON=y
+CONFIG_ZSWAP_SHRINKER_DEFAULT_ON=y
CONFIG_ZSWAP=y
# CONFIG_ZSWAP_ZPOOL_DEFAULT_Z3FOLD is not set
CONFIG_ZSWAP_ZPOOL_DEFAULT_ZBUD=y
@@ -8235,7 +8268,7 @@ CONFIG_ZENIFY=y
CONFIG_NTSYNC=y
CONFIG_USER_NS_UNPRIVILEGED=y
CONFIG_TCP_CONG_BBR2=m
-# CONFIG_SCHED_PDS is not set
+CONFIG_SCHED_BORE=y
CONFIG_HID_IPTS=m
CONFIG_HID_ITHC=m
CONFIG_SURFACE_BOOK1_DGPU_SWITCH=m
@@ -8244,11 +8277,8 @@ CONFIG_LEDS_TPS68470=m
CONFIG_SENSORS_SURFACE_FAN=m
CONFIG_SENSORS_SURFACE_TEMP=m
CONFIG_DRM_AMD_COLOR_STEAMDECK=y
-CONFIG_BMI323_I2C=m
-CONFIG_BMI323_SPI=m
CONFIG_DRM_APPLETBDRM=m
CONFIG_HID_APPLETB_BL=m
CONFIG_HID_APPLETB_KBD=m
CONFIG_HID_APPLE_MAGIC_BACKLIGHT=m
CONFIG_APPLE_BCE=m
-CONFIG_SCHED_BORE=y
diff --git a/SOURCES/kernel-ppc64le-rhel.config b/SOURCES/kernel-ppc64le-rhel.config
index 460e46c..da1a6c6 100644
--- a/SOURCES/kernel-ppc64le-rhel.config
+++ b/SOURCES/kernel-ppc64le-rhel.config
@@ -85,6 +85,7 @@ CONFIG_ACPI_VIDEO=m
# CONFIG_AD5791 is not set
# CONFIG_AD5933 is not set
# CONFIG_AD7091R5 is not set
+# CONFIG_AD7091R8 is not set
# CONFIG_AD7124 is not set
# CONFIG_AD7150 is not set
# CONFIG_AD7192 is not set
@@ -208,11 +209,13 @@ CONFIG_AMD_PHY=m
CONFIG_AMD_PMC=m
# CONFIG_AMD_PTDMA is not set
# CONFIG_AMDTEE is not set
+# CONFIG_AMD_WBRF is not set
# CONFIG_AMIGA_PARTITION is not set
CONFIG_AMPERE_ERRATUM_AC03_CPU_38=y
# CONFIG_AMT is not set
# CONFIG_ANDROID_BINDER_IPC is not set
# CONFIG_ANON_VMA_NAME is not set
+# CONFIG_AOSONG_AGS02MA is not set
# CONFIG_APDS9300 is not set
CONFIG_APDS9802ALS=m
# CONFIG_APDS9960 is not set
@@ -366,6 +369,7 @@ CONFIG_BACKLIGHT_LED=m
# CONFIG_BACKLIGHT_LM3639 is not set
CONFIG_BACKLIGHT_LP855X=m
# CONFIG_BACKLIGHT_LV5207LP is not set
+# CONFIG_BACKLIGHT_MP3309C is not set
CONFIG_BACKLIGHT_PWM=m
# CONFIG_BACKLIGHT_QCOM_WLED is not set
# CONFIG_BACKLIGHT_SAHARA is not set
@@ -459,6 +463,7 @@ CONFIG_BLK_DEV_SR=m
# CONFIG_BLK_DEV_THROTTLING_LOW is not set
CONFIG_BLK_DEV_THROTTLING=y
# CONFIG_BLK_DEV_UBLK is not set
+CONFIG_BLK_DEV_WRITE_MOUNTED=y
CONFIG_BLK_DEV=y
CONFIG_BLK_DEV_ZONED=y
# CONFIG_BLK_INLINE_ENCRYPTION is not set
@@ -478,6 +483,8 @@ CONFIG_BLOCK=y
# CONFIG_BMI088_ACCEL is not set
# CONFIG_BMI160_I2C is not set
# CONFIG_BMI160_SPI is not set
+CONFIG_BMI323_I2C=m
+CONFIG_BMI323_SPI=m
# CONFIG_BMP280 is not set
# CONFIG_BNA is not set
CONFIG_BNX2=m
@@ -493,7 +500,6 @@ CONFIG_BONDING=m
# CONFIG_BOOT_CONFIG_FORCE is not set
CONFIG_BOOT_CONFIG=y
# CONFIG_BOOTPARAM_HARDLOCKUP_PANIC is not set
-# CONFIG_BOOTPARAM_HOTPLUG_CPU0 is not set
# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
CONFIG_BOOT_PRINTK_DELAY=y
@@ -910,7 +916,6 @@ CONFIG_CRYPTO_CAST5=m
CONFIG_CRYPTO_CAST6=m
CONFIG_CRYPTO_CBC=y
CONFIG_CRYPTO_CCM=y
-CONFIG_CRYPTO_CFB=y
CONFIG_CRYPTO_CHACHA20=m
# CONFIG_CRYPTO_CHACHA20_P10 is not set
CONFIG_CRYPTO_CHACHA20POLY1305=m
@@ -944,6 +949,7 @@ CONFIG_CRYPTO_DEV_NX_COMPRESS_PSERIES=y
CONFIG_CRYPTO_DEV_NX_COMPRESS=y
CONFIG_CRYPTO_DEV_NX=y
# CONFIG_CRYPTO_DEV_OCTEONTX_CPT is not set
+# CONFIG_CRYPTO_DEV_QAT_420XX is not set
# CONFIG_CRYPTO_DEV_QAT_4XXX is not set
# CONFIG_CRYPTO_DEV_QAT_C3XXX is not set
# CONFIG_CRYPTO_DEV_QAT_C3XXXVF is not set
@@ -1003,7 +1009,6 @@ CONFIG_CRYPTO_MD4=m
CONFIG_CRYPTO_MD5=y
CONFIG_CRYPTO_MICHAEL_MIC=m
CONFIG_CRYPTO_NULL=y
-CONFIG_CRYPTO_OFB=y
CONFIG_CRYPTO_PCBC=m
CONFIG_CRYPTO_PCRYPT=m
CONFIG_CRYPTO_POLY1305=m
@@ -1147,7 +1152,7 @@ CONFIG_DEBUG_STACKOVERFLOW=y
# CONFIG_DEBUG_VM_MAPLE_TREE is not set
# CONFIG_DEBUG_VM_PGFLAGS is not set
# CONFIG_DEBUG_VM_PGTABLE is not set
-# CONFIG_DEBUG_VM_RB is not set # revisit this if performance isn't horrible
+# CONFIG_DEBUG_VM_RB is not set
# CONFIG_DEBUG_VM_SHOOT_LAZIES is not set
# CONFIG_DEBUG_VM_VMACACHE is not set
# CONFIG_DEBUG_WQ_FORCE_RR_CPU is not set
@@ -1261,6 +1266,7 @@ CONFIG_DP83867_PHY=m
# CONFIG_DP83869_PHY is not set
CONFIG_DP83TC811_PHY=m
# CONFIG_DP83TD510_PHY is not set
+# CONFIG_DP83TG720_PHY is not set
# CONFIG_DPM_WATCHDOG is not set
# CONFIG_DPOT_DAC is not set
# CONFIG_DPS310 is not set
@@ -1318,6 +1324,7 @@ CONFIG_DRM_I915_COMPRESS_ERROR=y
# CONFIG_DRM_I915_DEBUG_MMIO is not set
# CONFIG_DRM_I915_DEBUG_RUNTIME_PM is not set
# CONFIG_DRM_I915_DEBUG_VBLANK_EVADE is not set
+# CONFIG_DRM_I915_DEBUG_WAKEREF is not set
CONFIG_DRM_I915_FENCE_TIMEOUT=10000
CONFIG_DRM_I915_HEARTBEAT_INTERVAL=2500
# CONFIG_DRM_I915_LOW_LEVEL_TRACEPOINTS is not set
@@ -1359,6 +1366,7 @@ CONFIG_DRM_LOAD_EDID_FIRMWARE=y
CONFIG_DRM_MGAG200=m
# CONFIG_DRM_MXSFB is not set
CONFIG_DRM_NOUVEAU_BACKLIGHT=y
+# CONFIG_DRM_NOUVEAU_GSP_DEFAULT is not set
CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_NWL_MIPI_DSI is not set
# CONFIG_DRM_NXP_PTN3460 is not set
@@ -1379,6 +1387,7 @@ CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_PANEL_HIMAX_HX8394 is not set
# CONFIG_DRM_PANEL_ILITEK_IL9322 is not set
# CONFIG_DRM_PANEL_ILITEK_ILI9341 is not set
+# CONFIG_DRM_PANEL_ILITEK_ILI9805 is not set
# CONFIG_DRM_PANEL_ILITEK_ILI9881C is not set
# CONFIG_DRM_PANEL_ILITEK_ILI9882T is not set
# CONFIG_DRM_PANEL_INNOLUX_EJ030NA is not set
@@ -1439,6 +1448,7 @@ CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_PANEL_SONY_TD4353_JDI is not set
# CONFIG_DRM_PANEL_SONY_TULIP_TRULY_NT35521 is not set
# CONFIG_DRM_PANEL_STARTEK_KD070FHFID015 is not set
+# CONFIG_DRM_PANEL_SYNAPTICS_R63353 is not set
# CONFIG_DRM_PANEL_TDO_TL070WSH30 is not set
# CONFIG_DRM_PANEL_TPO_TD028TTEC1 is not set
# CONFIG_DRM_PANEL_TPO_TD043MTEA1 is not set
@@ -1453,6 +1463,7 @@ CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_PARADE_PS8622 is not set
# CONFIG_DRM_PARADE_PS8640 is not set
# CONFIG_DRM_PL111 is not set
+# CONFIG_DRM_POWERVR is not set
CONFIG_DRM_QXL=m
CONFIG_DRM_RADEON=m
CONFIG_DRM_RADEON_USERPTR=y
@@ -1491,6 +1502,7 @@ CONFIG_DRM_VKMS=m
CONFIG_DRM_VMWGFX_FBCON=y
CONFIG_DRM_VMWGFX=m
# CONFIG_DRM_VMWGFX_MKSSTATS is not set
+# CONFIG_DRM_XE is not set
# CONFIG_DRM_XEN_FRONTEND is not set
CONFIG_DRM=y
# CONFIG_DS1682 is not set
@@ -1590,6 +1602,7 @@ CONFIG_DVB_USB_VP702X=m
CONFIG_DVB_USB_VP7045=m
# CONFIG_DVB_USB_ZD1301 is not set
# CONFIG_DW_AXI_DMAC is not set
+# CONFIG_DWC_PCIE_PMU is not set
CONFIG_DW_DMAC=m
# CONFIG_DW_DMAC_PCI is not set
# CONFIG_DW_EDMA is not set
@@ -1656,6 +1669,7 @@ CONFIG_EPOLL=y
# CONFIG_EQUALIZER is not set
# CONFIG_EROFS_FS_DEBUG is not set
CONFIG_EROFS_FS=m
+# CONFIG_EROFS_FS_ONDEMAND is not set
CONFIG_EROFS_FS_POSIX_ACL=y
CONFIG_EROFS_FS_SECURITY=y
CONFIG_EROFS_FS_XATTR=y
@@ -1717,7 +1731,6 @@ CONFIG_FAT_KUNIT_TEST=m
# CONFIG_FB_3DFX is not set
# CONFIG_FB_ARC is not set
# CONFIG_FB_ARK is not set
-# CONFIG_FB_ARMCLCD is not set
# CONFIG_FB_ASILIANT is not set
# CONFIG_FB_ATY128 is not set
# CONFIG_FB_ATY is not set
@@ -1737,7 +1750,6 @@ CONFIG_FB_EFI=y
# CONFIG_FB_IMSTT is not set
# CONFIG_FB_IMX is not set
# CONFIG_FB_KYRO is not set
-# CONFIG_FB_LE80578 is not set
# CONFIG_FB_MATROX_G is not set
# CONFIG_FB_MATROX_I2C is not set
# CONFIG_FB_MATROX is not set
@@ -1804,11 +1816,12 @@ CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
CONFIG_FRAMEBUFFER_CONSOLE=y
# CONFIG_FRAME_POINTER is not set
+# CONFIG_FRAMER is not set
CONFIG_FRAME_WARN=2048
CONFIG_FRONTSWAP=y
# CONFIG_FSCACHE_DEBUG is not set
-CONFIG_FSCACHE=m
CONFIG_FSCACHE_STATS=y
+CONFIG_FSCACHE=y
CONFIG_FS_DAX=y
# CONFIG_FS_ENCRYPTION is not set
# CONFIG_FSI is not set
@@ -1989,6 +2002,7 @@ CONFIG_HASHTABLE_KUNIT_TEST=m
# CONFIG_HD44780 is not set
# CONFIG_HDC100X is not set
# CONFIG_HDC2010 is not set
+# CONFIG_HDC3020 is not set
CONFIG_HDLC_CISCO=m
CONFIG_HDLC_FR=m
CONFIG_HDLC=m
@@ -2061,6 +2075,7 @@ CONFIG_HID_LOGITECH=m
CONFIG_HID_MAGICMOUSE=y
# CONFIG_HID_MALTRON is not set
# CONFIG_HID_MAYFLASH is not set
+# CONFIG_HID_MCP2200 is not set
# CONFIG_HID_MCP2221 is not set
# CONFIG_HID_MEGAWORLD_FF is not set
CONFIG_HID_MICROSOFT=m
@@ -2163,6 +2178,7 @@ CONFIG_HOTPLUG_PCI=y
CONFIG_HSA_AMD_P2P=y
CONFIG_HSA_AMD_SVM=y
CONFIG_HSA_AMD=y
+# CONFIG_HSC030PA is not set
# CONFIG_HSI is not set
CONFIG_HSR=m
# CONFIG_HT16K33 is not set
@@ -2307,6 +2323,7 @@ CONFIG_IBM_BSR=m
CONFIG_IBMVETH=m
CONFIG_IBMVMC=m
CONFIG_IBMVNIC=m
+CONFIG_ICE_HWMON=y
CONFIG_ICE_HWTS=y
CONFIG_ICE=m
CONFIG_ICE_SWITCHDEV=y
@@ -2415,6 +2432,7 @@ CONFIG_INFINIBAND_BNXT_RE=m
CONFIG_INFINIBAND_CXGB4=m
CONFIG_INFINIBAND_EFA=m
# CONFIG_INFINIBAND_ERDMA is not set
+# CONFIG_INFINIBAND_HFI1 is not set
# CONFIG_INFINIBAND_HNS is not set
CONFIG_INFINIBAND_IPOIB_CM=y
# CONFIG_INFINIBAND_IPOIB_DEBUG_DATA is not set
@@ -2429,14 +2447,15 @@ CONFIG_INFINIBAND=m
CONFIG_INFINIBAND_ON_DEMAND_PAGING=y
CONFIG_INFINIBAND_QEDR=m
# CONFIG_INFINIBAND_QIB is not set
-CONFIG_INFINIBAND_RDMAVT=m
+# CONFIG_INFINIBAND_RDMAVT is not set
# CONFIG_INFINIBAND_RTRS_CLIENT is not set
# CONFIG_INFINIBAND_RTRS_SERVER is not set
CONFIG_INFINIBAND_SRP=m
CONFIG_INFINIBAND_SRPT=m
CONFIG_INFINIBAND_USER_ACCESS=m
CONFIG_INFINIBAND_USER_MAD=m
-CONFIG_INFINIBAND_USNIC=m
+# CONFIG_INFINIBAND_USNIC is not set
+# CONFIG_INFINIBAND_VMWARE_PVRDMA is not set
# CONFIG_INFTL is not set
# CONFIG_INIT_ON_ALLOC_DEFAULT_ON is not set
# CONFIG_INIT_ON_FREE_DEFAULT_ON is not set
@@ -2521,10 +2540,11 @@ CONFIG_INTEL_IOMMU_PERF_EVENTS=y
# CONFIG_INTEL_ISH_FIRMWARE_DOWNLOADER is not set
# CONFIG_INTEL_ISHTP_ECLITE is not set
# CONFIG_INTEL_LDMA is not set
-# CONFIG_INTEL_MEI_GSC_PROXY is not set
+CONFIG_INTEL_MEI_GSC_PROXY=m
# CONFIG_INTEL_MEI_HDCP is not set
# CONFIG_INTEL_MEI_PXP is not set
# CONFIG_INTEL_MEI_TXE is not set
+# CONFIG_INTEL_MEI_VSC_HW is not set
# CONFIG_INTEL_PMC_CORE is not set
# CONFIG_INTEL_PMT_CLASS is not set
# CONFIG_INTEL_PMT_CRASHLOG is not set
@@ -2761,6 +2781,7 @@ CONFIG_ISL29003=m
CONFIG_ISL29020=m
# CONFIG_ISL29125 is not set
# CONFIG_ISL29501 is not set
+# CONFIG_ISL76682 is not set
CONFIG_ISO9660_FS=m
CONFIG_IS_SIGNED_TYPE_KUNIT_TEST=m
# CONFIG_IT8712F_WDT is not set
@@ -2803,6 +2824,7 @@ CONFIG_KALLSYMS_BASE_RELATIVE=y
# CONFIG_KALLSYMS_SELFTEST is not set
CONFIG_KALLSYMS=y
# CONFIG_KARMA_PARTITION is not set
+# CONFIG_KASAN_EXTRA_INFO is not set
# CONFIG_KASAN is not set
# CONFIG_KASAN_MODULE_TEST is not set
# CONFIG_KASAN_VMALLOC is not set
@@ -2898,9 +2920,11 @@ CONFIG_KVM_BOOK3S_HV_NESTED_PMU_WORKAROUND=y
# CONFIG_KVM_BOOK3S_HV_P9_TIMING is not set
CONFIG_KVM_BOOK3S_PR_POSSIBLE=y
CONFIG_KVM_GUEST=y
+CONFIG_KVM_HYPERV=y
CONFIG_KVM_MAX_NR_VCPUS=4096
# CONFIG_KVM_PROVE_MMU is not set
CONFIG_KVM_SMM=y
+CONFIG_KVM_SW_PROTECTED_VM=y
# CONFIG_KVM_WERROR is not set
# CONFIG_KVM_XEN is not set
CONFIG_KVM_XICS=y
@@ -3080,6 +3104,7 @@ CONFIG_LSM_MMAP_MIN_ADDR=65535
# CONFIG_LTO_CLANG_FULL is not set
# CONFIG_LTO_CLANG_THIN is not set
CONFIG_LTO_NONE=y
+# CONFIG_LTR390 is not set
# CONFIG_LTR501 is not set
# CONFIG_LTRF216A is not set
# CONFIG_LV0104CS is not set
@@ -3119,7 +3144,7 @@ CONFIG_MAGIC_SYSRQ=y
CONFIG_MANTIS_CORE=m
# CONFIG_MARCH_Z16 is not set
CONFIG_MARVELL_10G_PHY=m
-# CONFIG_MARVELL_88Q2XXX_PHY is not set
+CONFIG_MARVELL_88Q2XXX_PHY=m
# CONFIG_MARVELL_88X2222_PHY is not set
CONFIG_MARVELL_PHY=m
# CONFIG_MATOM is not set
@@ -3136,6 +3161,7 @@ CONFIG_MARVELL_PHY=m
# CONFIG_MAX31827 is not set
# CONFIG_MAX31856 is not set
# CONFIG_MAX31865 is not set
+# CONFIG_MAX34408 is not set
# CONFIG_MAX44000 is not set
# CONFIG_MAX44009 is not set
# CONFIG_MAX517 is not set
@@ -3162,7 +3188,9 @@ CONFIG_MAX_SKB_FRAGS=17
# CONFIG_MCP4531 is not set
# CONFIG_MCP4725 is not set
# CONFIG_MCP4728 is not set
+# CONFIG_MCP4821 is not set
# CONFIG_MCP4922 is not set
+# CONFIG_MCP9600 is not set
# CONFIG_MCTP is not set
CONFIG_MD_AUTODETECT=y
CONFIG_MD_BITMAP_FILE=y
@@ -3382,10 +3410,11 @@ CONFIG_MISC_FILESYSTEMS=y
CONFIG_MISC_RTSX_PCI=m
CONFIG_MISC_RTSX_USB=m
# CONFIG_MLX4_CORE_GEN2 is not set
+# CONFIG_MLX4_CORE is not set
CONFIG_MLX4_DEBUG=y
CONFIG_MLX4_EN_DCB=y
-CONFIG_MLX4_EN=m
-CONFIG_MLX4_INFINIBAND=m
+# CONFIG_MLX4_EN is not set
+# CONFIG_MLX4_INFINIBAND is not set
CONFIG_MLX5_ACCEL=y
CONFIG_MLX5_CLS_ACT=y
CONFIG_MLX5_CORE_EN_DCB=y
@@ -3416,6 +3445,7 @@ CONFIG_MLX5_VDPA_NET=m
CONFIG_MLX5_VFIO_PCI=m
# CONFIG_MLX90614 is not set
# CONFIG_MLX90632 is not set
+# CONFIG_MLX90635 is not set
# CONFIG_MLXBF_BOOTCTL is not set
# CONFIG_MLXBF_GIGE is not set
# CONFIG_MLXBF_PMC is not set
@@ -3579,7 +3609,7 @@ CONFIG_MT76x2U=m
CONFIG_MT7921E=m
# CONFIG_MT7921S is not set
# CONFIG_MT7921U is not set
-# CONFIG_MT7925E is not set
+CONFIG_MT7925E=m
# CONFIG_MT7925U is not set
# CONFIG_MT7996E is not set
# CONFIG_MTD_ABSENT is not set
@@ -3631,6 +3661,7 @@ CONFIG_MTD_POWERNV_FLASH=m
CONFIG_MTD_UBI_BEB_LIMIT=20
# CONFIG_MTD_UBI_BLOCK is not set
# CONFIG_MTD_UBI_FASTMAP is not set
+# CONFIG_MTD_UBI_FAULT_INJECTION is not set
# CONFIG_MTD_UBI_GLUEBI is not set
CONFIG_MTD_UBI=m
CONFIG_MTD_UBI_WL_THRESHOLD=4096
@@ -3652,7 +3683,6 @@ CONFIG_NAMESPACES=y
CONFIG_NATIONAL_PHY=m
# CONFIG_NAU7802 is not set
# CONFIG_NCN26000_PHY is not set
-CONFIG_ND_BLK=m
CONFIG_ND_BTT=m
# CONFIG_NDC_DIS_DYNAMIC_CACHING is not set
CONFIG_ND_CLAIM=y
@@ -3706,7 +3736,6 @@ CONFIG_NET_DROP_MONITOR=y
# CONFIG_NET_EMATCH is not set
# CONFIG_NET_EMATCH_META is not set
# CONFIG_NET_EMATCH_NBYTE is not set
-# CONFIG_NET_EMATCH_STACK is not set
# CONFIG_NET_EMATCH_TEXT is not set
# CONFIG_NET_EMATCH_U32 is not set
CONFIG_NET_FAILOVER=m
@@ -3891,6 +3920,7 @@ CONFIG_NET_VENDOR_IBM=y
CONFIG_NET_VENDOR_INTEL=y
# CONFIG_NET_VENDOR_LITEX is not set
CONFIG_NET_VENDOR_MARVELL=y
+CONFIG_NET_VENDOR_MELLANOX=y
# CONFIG_NET_VENDOR_MICREL is not set
# CONFIG_NET_VENDOR_MICROCHIP is not set
# CONFIG_NET_VENDOR_MICROSEMI is not set
@@ -3982,6 +4012,7 @@ CONFIG_NF_REJECT_IPV6=m
# CONFIG_NFSD_BLOCKLAYOUT is not set
# CONFIG_NFSD_FLEXFILELAYOUT is not set
CONFIG_NFS_DISABLE_UDP_SUPPORT=y
+# CONFIG_NFSD_LEGACY_CLIENT_TRACKING is not set
CONFIG_NFSD=m
CONFIG_NFSD_PNFS=y
CONFIG_NFSD_SCSILAYOUT=y
@@ -4129,6 +4160,7 @@ CONFIG_NOUVEAU_DEBUG_DEFAULT=3
CONFIG_NOZOMI=m
CONFIG_NR_CPUS=2048
CONFIG_NR_IRQS=512
+# CONFIG_NSM is not set
# CONFIG_NTB_AMD is not set
# CONFIG_NTB_EPF is not set
# CONFIG_NTB_IDT is not set
@@ -4387,22 +4419,13 @@ CONFIG_PHYSICAL_ALIGN=0x200000
# CONFIG_PHY_TUSB1210 is not set
# CONFIG_PI433 is not set
CONFIG_PID_NS=y
-CONFIG_PINCTRL_ALDERLAKE=m
-# CONFIG_PINCTRL_BROXTON is not set
-# CONFIG_PINCTRL_CHERRYVIEW is not set
# CONFIG_PINCTRL_CS42L43 is not set
# CONFIG_PINCTRL_CY8C95X0 is not set
-CONFIG_PINCTRL_ELKHARTLAKE=m
-CONFIG_PINCTRL_EMMITSBURG=m
# CONFIG_PINCTRL_EQUILIBRIUM is not set
-CONFIG_PINCTRL_ICELAKE=m
# CONFIG_PINCTRL_IPQ6018 is not set
# CONFIG_PINCTRL_IPQ8074 is not set
# CONFIG_PINCTRL is not set
-# CONFIG_PINCTRL_JASPERLAKE is not set
-CONFIG_PINCTRL_LAKEFIELD=m
# CONFIG_PINCTRL_LPASS_LPI is not set
-# CONFIG_PINCTRL_LYNXPOINT is not set
# CONFIG_PINCTRL_MCP23S08 is not set
# CONFIG_PINCTRL_MDM9615 is not set
# CONFIG_PINCTRL_MICROCHIP_SGPIO is not set
@@ -4728,8 +4751,8 @@ CONFIG_RD_GZIP=y
CONFIG_RD_LZ4=y
CONFIG_RD_LZMA=y
CONFIG_RD_LZO=y
-CONFIG_RDMA_RXE=m
-CONFIG_RDMA_SIW=m
+# CONFIG_RDMA_RXE is not set
+# CONFIG_RDMA_SIW is not set
# CONFIG_RDS is not set
CONFIG_RD_XZ=y
CONFIG_RD_ZSTD=y
@@ -4770,6 +4793,7 @@ CONFIG_REGULATOR_FIXED_VOLTAGE=m
# CONFIG_REGULATOR_MAX8973 is not set
# CONFIG_REGULATOR_MCP16502 is not set
# CONFIG_REGULATOR_MT6311 is not set
+# CONFIG_REGULATOR_NETLINK_EVENTS is not set
# CONFIG_REGULATOR_PF8X00 is not set
# CONFIG_REGULATOR_PFUZE100 is not set
# CONFIG_REGULATOR_PV88060 is not set
@@ -4922,6 +4946,7 @@ CONFIG_RTC_DRV_M41T80_WDT=y
CONFIG_RTC_DRV_M48T35=m
CONFIG_RTC_DRV_M48T59=m
# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_MAX31335 is not set
CONFIG_RTC_DRV_MAX6900=m
# CONFIG_RTC_DRV_MAX6902 is not set
# CONFIG_RTC_DRV_MAX6916 is not set
@@ -5008,7 +5033,7 @@ CONFIG_RTW88=m
# CONFIG_RTW89_8851BE is not set
CONFIG_RTW89_8852AE=m
CONFIG_RTW89_8852BE=m
-# CONFIG_RTW89_8852CE is not set
+CONFIG_RTW89_8852CE=m
# CONFIG_RTW89_DEBUGFS is not set
# CONFIG_RTW89_DEBUGMSG is not set
CONFIG_RTW89=m
@@ -5022,6 +5047,7 @@ CONFIG_RXKAD=y
CONFIG_RXPERF=m
# CONFIG_S390_KPROBES_SANITY_TEST is not set
# CONFIG_S390_MODULES_SANITY_TEST is not set
+# CONFIG_SAMPLE_CGROUP is not set
# CONFIG_SAMPLE_FTRACE_OPS is not set
# CONFIG_SAMPLE_KMEMLEAK is not set
# CONFIG_SAMPLES is not set
@@ -5168,7 +5194,7 @@ CONFIG_SECONDARY_TRUSTED_KEYRING=y
CONFIG_SECRETMEM=y
CONFIG_SECTION_MISMATCH_WARN_ONLY=y
# CONFIG_SECURITY_APPARMOR is not set
-# CONFIG_SECURITY_DMESG_RESTRICT is not set
+CONFIG_SECURITY_DMESG_RESTRICT=y
CONFIG_SECURITYFS=y
CONFIG_SECURITY_INFINIBAND=y
# CONFIG_SECURITY_LANDLOCK is not set
@@ -5261,6 +5287,7 @@ CONFIG_SENSORS_FSCHMD=m
# CONFIG_SENSORS_FTSTEUTATES is not set
CONFIG_SENSORS_G760A=m
# CONFIG_SENSORS_G762 is not set
+# CONFIG_SENSORS_GIGABYTE_WATERFORCE is not set
CONFIG_SENSORS_GL518SM=m
CONFIG_SENSORS_GL520SM=m
# CONFIG_SENSORS_GPIO_FAN is not set
@@ -5327,6 +5354,7 @@ CONFIG_SENSORS_LTC4215=m
CONFIG_SENSORS_LTC4245=m
# CONFIG_SENSORS_LTC4260 is not set
CONFIG_SENSORS_LTC4261=m
+# CONFIG_SENSORS_LTC4286 is not set
# CONFIG_SENSORS_MAX1111 is not set
# CONFIG_SENSORS_MAX127 is not set
# CONFIG_SENSORS_MAX15301 is not set
@@ -5354,9 +5382,11 @@ CONFIG_SENSORS_MAX8688=m
# CONFIG_SENSORS_MC34VR500 is not set
CONFIG_SENSORS_MCP3021=m
# CONFIG_SENSORS_MLXREG_FAN is not set
+# CONFIG_SENSORS_MP2856 is not set
# CONFIG_SENSORS_MP2888 is not set
# CONFIG_SENSORS_MP2975 is not set
# CONFIG_SENSORS_MP5023 is not set
+# CONFIG_SENSORS_MP5990 is not set
# CONFIG_SENSORS_MPQ7932 is not set
# CONFIG_SENSORS_MR75203 is not set
# CONFIG_SENSORS_NCT6683 is not set
@@ -5536,10 +5566,8 @@ CONFIG_SIGNATURE=y
CONFIG_SIPHASH_KUNIT_TEST=m
# CONFIG_SKGE is not set
# CONFIG_SKY2 is not set
-# CONFIG_SLAB_DEPRECATED is not set
CONFIG_SLAB_FREELIST_HARDENED=y
CONFIG_SLAB_FREELIST_RANDOM=y
-# CONFIG_SLAB is not set
# CONFIG_SLAB_MERGE_DEFAULT is not set
# CONFIG_SLIMBUS is not set
CONFIG_SLIP_COMPRESSED=y
@@ -6282,6 +6310,7 @@ CONFIG_SQUASHFS_ZSTD=y
# CONFIG_SSB is not set
# CONFIG_SSFDC is not set
# CONFIG_SSIF_IPMI_BMC is not set
+CONFIG_STACKDEPOT_MAX_FRAMES=64
CONFIG_STACK_HASH_ORDER=20
CONFIG_STACKINIT_KUNIT_TEST=m
CONFIG_STACKPROTECTOR_STRONG=y
@@ -6400,7 +6429,7 @@ CONFIG_TCP_CONG_DCTCP=m
# CONFIG_TCP_CONG_HSTCP is not set
CONFIG_TCP_CONG_HTCP=m
# CONFIG_TCP_CONG_HYBLA is not set
-# CONFIG_TCP_CONG_ILLINOIS is not set
+CONFIG_TCP_CONG_ILLINOIS=m
# CONFIG_TCP_CONG_LP is not set
CONFIG_TCP_CONG_NV=m
# CONFIG_TCP_CONG_SCALABLE is not set
@@ -6464,6 +6493,7 @@ CONFIG_TEST_SORT=m
# CONFIG_TEST_UUID is not set
CONFIG_TEST_VMALLOC=m
# CONFIG_TEST_XARRAY is not set
+# CONFIG_THERMAL_DEBUGFS is not set
# CONFIG_THERMAL_DEFAULT_GOV_FAIR_SHARE is not set
CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y
# CONFIG_THERMAL_DEFAULT_GOV_USER_SPACE is not set
@@ -6636,6 +6666,7 @@ CONFIG_TOUCHSCREEN_WACOM_I2C=m
CONFIG_TRACER_SNAPSHOT=y
# CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS is not set
CONFIG_TRANSPARENT_HUGEPAGE_MADVISE=y
+# CONFIG_TRANSPARENT_HUGEPAGE_NEVER is not set
CONFIG_TRANSPARENT_HUGEPAGE=y
CONFIG_TREE_RCU=y
# CONFIG_TRIM_UNUSED_KSYMS is not set
@@ -6666,6 +6697,7 @@ CONFIG_TYPEC_MUX_FSA4480=m
# CONFIG_TYPEC_MUX_NB7VPQ904M is not set
CONFIG_TYPEC_MUX_PI3USB30532=m
# CONFIG_TYPEC_MUX_PTN36502 is not set
+# CONFIG_TYPEC_MUX_WCD939X_USBSS is not set
# CONFIG_TYPEC_NVIDIA_ALTMODE is not set
# CONFIG_TYPEC_QCOM_PMIC is not set
# CONFIG_TYPEC_RT1711H is not set
@@ -7027,12 +7059,14 @@ CONFIG_VDPA_SIM_NET=m
# CONFIG_VDPA_USER is not set
# CONFIG_VEML6030 is not set
# CONFIG_VEML6070 is not set
+# CONFIG_VEML6075 is not set
CONFIG_VETH=m
# CONFIG_VF610_ADC is not set
# CONFIG_VF610_DAC is not set
CONFIG_VFAT_FS=m
# CONFIG_VFIO_AMBA is not set
CONFIG_VFIO_CONTAINER=y
+# CONFIG_VFIO_DEBUGFS is not set
CONFIG_VFIO_DEVICE_CDEV=y
CONFIG_VFIO_GROUP=y
CONFIG_VFIO_IOMMU_TYPE1=m
@@ -7067,6 +7101,7 @@ CONFIG_VHOST_VSOCK=m
# CONFIG_VIDEO_ADV_DEBUG is not set
# CONFIG_VIDEO_AK7375 is not set
# CONFIG_VIDEO_AK881X is not set
+# CONFIG_VIDEO_ALVIUM_CSI2 is not set
# CONFIG_VIDEO_AR0521 is not set
CONFIG_VIDEO_AU0828=m
# CONFIG_VIDEO_AU0828_RC is not set
@@ -7115,6 +7150,8 @@ CONFIG_VIDEO_EM28XX_RC=m
# CONFIG_VIDEO_FB_IVTV_FORCE_PAT is not set
CONFIG_VIDEO_FB_IVTV=m
# CONFIG_VIDEO_FIXED_MINOR_RANGES is not set
+# CONFIG_VIDEO_GC0308 is not set
+# CONFIG_VIDEO_GC2145 is not set
# CONFIG_VIDEO_GO7007 is not set
# CONFIG_VIDEO_GS1662 is not set
CONFIG_VIDEO_HDPVR=m
@@ -7184,6 +7221,7 @@ CONFIG_VIDEO_IVTV=m
# CONFIG_VIDEO_OV5675 is not set
# CONFIG_VIDEO_OV5693 is not set
# CONFIG_VIDEO_OV5695 is not set
+# CONFIG_VIDEO_OV64A40 is not set
# CONFIG_VIDEO_OV6650 is not set
# CONFIG_VIDEO_OV7251 is not set
# CONFIG_VIDEO_OV7640 is not set
@@ -7236,6 +7274,7 @@ CONFIG_VIDEO_SAA7164=m
# CONFIG_VIDEO_TDA9840 is not set
# CONFIG_VIDEO_TEA6415C is not set
# CONFIG_VIDEO_TEA6420 is not set
+# CONFIG_VIDEO_THP7312 is not set
# CONFIG_VIDEO_THS7303 is not set
# CONFIG_VIDEO_THS8200 is not set
# CONFIG_VIDEO_TLV320AIC23B is not set
@@ -7251,6 +7290,7 @@ CONFIG_VIDEO_TUNER=m
# CONFIG_VIDEO_TW5864 is not set
# CONFIG_VIDEO_TW686X is not set
# CONFIG_VIDEO_TW68 is not set
+# CONFIG_VIDEO_TW9900 is not set
# CONFIG_VIDEO_TW9903 is not set
# CONFIG_VIDEO_TW9906 is not set
# CONFIG_VIDEO_TW9910 is not set
@@ -7285,6 +7325,7 @@ CONFIG_VIRTIO_PCI_LEGACY=y
CONFIG_VIRTIO_PCI=y
# CONFIG_VIRTIO_PMEM is not set
CONFIG_VIRTIO_VDPA=m
+# CONFIG_VIRTIO_VFIO_PCI is not set
CONFIG_VIRTIO_VSOCKETS=m
CONFIG_VIRTIO=y
CONFIG_VIRTUALIZATION=y
@@ -7409,7 +7450,7 @@ CONFIG_XFS_POSIX_ACL=y
CONFIG_XFS_QUOTA=y
# CONFIG_XFS_RT is not set
# CONFIG_XFS_SUPPORT_ASCII_CI is not set
-CONFIG_XFS_SUPPORT_V4=y
+# CONFIG_XFS_SUPPORT_V4 is not set
# CONFIG_XFS_WARN is not set
# CONFIG_XGENE_DMA is not set
# CONFIG_XILINX_DMA is not set
@@ -7468,6 +7509,7 @@ CONFIG_ZRAM_DEF_COMP_LZORLE=y
CONFIG_ZRAM=m
# CONFIG_ZRAM_MEMORY_TRACKING is not set
# CONFIG_ZRAM_MULTI_COMP is not set
+# CONFIG_ZRAM_TRACK_ENTRY_ACTIME is not set
CONFIG_ZRAM_WRITEBACK=y
CONFIG_ZSMALLOC_CHAIN_SIZE=8
CONFIG_ZSMALLOC_STAT=y
@@ -7480,6 +7522,7 @@ CONFIG_ZSWAP_COMPRESSOR_DEFAULT_LZO=y
# CONFIG_ZSWAP_COMPRESSOR_DEFAULT_ZSTD is not set
# CONFIG_ZSWAP_DEFAULT_ON is not set
# CONFIG_ZSWAP_EXCLUSIVE_LOADS_DEFAULT_ON is not set
+# CONFIG_ZSWAP_SHRINKER_DEFAULT_ON is not set
CONFIG_ZSWAP=y
# CONFIG_ZSWAP_ZPOOL_DEFAULT_Z3FOLD is not set
CONFIG_ZSWAP_ZPOOL_DEFAULT_ZBUD=y
@@ -7489,7 +7532,7 @@ CONFIG_ZENIFY=y
CONFIG_NTSYNC=y
CONFIG_USER_NS_UNPRIVILEGED=y
CONFIG_TCP_CONG_BBR2=m
-# CONFIG_SCHED_PDS is not set
+CONFIG_SCHED_BORE=y
CONFIG_HID_IPTS=m
CONFIG_HID_ITHC=m
CONFIG_SURFACE_BOOK1_DGPU_SWITCH=m
@@ -7498,11 +7541,8 @@ CONFIG_LEDS_TPS68470=m
CONFIG_SENSORS_SURFACE_FAN=m
CONFIG_SENSORS_SURFACE_TEMP=m
CONFIG_DRM_AMD_COLOR_STEAMDECK=y
-CONFIG_BMI323_I2C=m
-CONFIG_BMI323_SPI=m
CONFIG_DRM_APPLETBDRM=m
CONFIG_HID_APPLETB_BL=m
CONFIG_HID_APPLETB_KBD=m
CONFIG_HID_APPLE_MAGIC_BACKLIGHT=m
CONFIG_APPLE_BCE=m
-CONFIG_SCHED_BORE=y
diff --git a/SOURCES/kernel-s390x-debug-fedora.config b/SOURCES/kernel-s390x-debug-fedora.config
index 973c382..e1693b6 100644
--- a/SOURCES/kernel-s390x-debug-fedora.config
+++ b/SOURCES/kernel-s390x-debug-fedora.config
@@ -104,6 +104,7 @@ CONFIG_AD5770R=m
# CONFIG_AD5791 is not set
# CONFIG_AD5933 is not set
# CONFIG_AD7091R5 is not set
+CONFIG_AD7091R8=m
CONFIG_AD7124=m
# CONFIG_AD7150 is not set
# CONFIG_AD7192 is not set
@@ -244,6 +245,7 @@ CONFIG_ANDROID_BINDERFS=y
# CONFIG_ANDROID_BINDER_IPC is not set
# CONFIG_ANDROID_BINDER_IPC_SELFTEST is not set
# CONFIG_ANON_VMA_NAME is not set
+# CONFIG_AOSONG_AGS02MA is not set
# CONFIG_APDS9300 is not set
# CONFIG_APDS9802ALS is not set
# CONFIG_APDS9960 is not set
@@ -288,7 +290,6 @@ CONFIG_ARM64_ERRATUM_2119858=y
CONFIG_ARM64_ERRATUM_2139208=y
CONFIG_ARM64_ERRATUM_2224489=y
CONFIG_ARM64_ERRATUM_2253138=y
-CONFIG_ARM64_ERRATUM_858921=y
CONFIG_ARM64_USE_LSE_ATOMICS=y
CONFIG_ARM_CMN=m
# CONFIG_ARM_MHU_V2 is not set
@@ -443,6 +444,7 @@ CONFIG_BACKLIGHT_LED=m
# CONFIG_BACKLIGHT_LM3639 is not set
CONFIG_BACKLIGHT_LP855X=m
# CONFIG_BACKLIGHT_LV5207LP is not set
+CONFIG_BACKLIGHT_MP3309C=m
CONFIG_BACKLIGHT_MT6370=m
# CONFIG_BACKLIGHT_PWM is not set
# CONFIG_BACKLIGHT_QCOM_WLED is not set
@@ -492,6 +494,7 @@ CONFIG_BCACHEFS_LOCK_TIME_STATS=y
# CONFIG_BCACHEFS_NO_LATENCY_ACCT is not set
CONFIG_BCACHEFS_POSIX_ACL=y
CONFIG_BCACHEFS_QUOTA=y
+CONFIG_BCACHEFS_SIX_OPTIMISTIC_SPIN=y
# CONFIG_BCACHEFS_TESTS is not set
CONFIG_BCACHE=m
CONFIG_BCM54140_PHY=m
@@ -571,6 +574,7 @@ CONFIG_BLK_DEV_SR=y
CONFIG_BLK_DEV_THROTTLING=y
CONFIG_BLKDEV_UBLK_LEGACY_OPCODES=y
CONFIG_BLK_DEV_UBLK=m
+CONFIG_BLK_DEV_WRITE_MOUNTED=y
CONFIG_BLK_DEV=y
CONFIG_BLK_DEV_ZONED=y
# CONFIG_BLK_INLINE_ENCRYPTION_FALLBACK is not set
@@ -591,6 +595,8 @@ CONFIG_BME680=m
# CONFIG_BMI088_ACCEL is not set
CONFIG_BMI160_I2C=m
CONFIG_BMI160_SPI=m
+CONFIG_BMI323_I2C=m
+CONFIG_BMI323_SPI=m
CONFIG_BMP280=m
CONFIG_BNA=m
CONFIG_BNX2=m
@@ -606,7 +612,6 @@ CONFIG_BONDING=m
# CONFIG_BOOT_CONFIG_FORCE is not set
CONFIG_BOOT_CONFIG=y
# CONFIG_BOOTPARAM_HARDLOCKUP_PANIC is not set
-# CONFIG_BOOTPARAM_HOTPLUG_CPU0 is not set
# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
CONFIG_BOOT_PRINTK_DELAY=y
@@ -734,7 +739,7 @@ CONFIG_BUILD_SALT=""
# CONFIG_CACHEFILES_DEBUG is not set
# CONFIG_CACHEFILES_ERROR_INJECTION is not set
CONFIG_CACHEFILES=m
-# CONFIG_CACHEFILES_ONDEMAND is not set
+CONFIG_CACHEFILES_ONDEMAND=y
CONFIG_CACHESTAT_SYSCALL=y
# CONFIG_CADENCE_WATCHDOG is not set
# CONFIG_CAIF is not set
@@ -1074,7 +1079,6 @@ CONFIG_CRYPTO_CAST5=m
CONFIG_CRYPTO_CAST6=m
CONFIG_CRYPTO_CBC=y
CONFIG_CRYPTO_CCM=y
-CONFIG_CRYPTO_CFB=y
CONFIG_CRYPTO_CHACHA20=m
CONFIG_CRYPTO_CHACHA20POLY1305=m
CONFIG_CRYPTO_CHACHA_S390=y
@@ -1103,8 +1107,9 @@ CONFIG_CRYPTO_DEV_HIFN_795X_RNG=y
# CONFIG_CRYPTO_DEV_HISI_SEC2 is not set
# CONFIG_CRYPTO_DEV_HISI_SEC is not set
# CONFIG_CRYPTO_DEV_HISI_TRNG is not set
-# CONFIG_CRYPTO_DEV_NITROX_CNN55XX is not set
+CONFIG_CRYPTO_DEV_NITROX_CNN55XX=m
# CONFIG_CRYPTO_DEV_OCTEONTX_CPT is not set
+CONFIG_CRYPTO_DEV_QAT_420XX=m
CONFIG_CRYPTO_DEV_QAT_4XXX=m
CONFIG_CRYPTO_DEV_QAT_C3XXX=m
CONFIG_CRYPTO_DEV_QAT_C3XXXVF=m
@@ -1160,7 +1165,6 @@ CONFIG_CRYPTO_MD4=m
CONFIG_CRYPTO_MD5=y
CONFIG_CRYPTO_MICHAEL_MIC=m
CONFIG_CRYPTO_NULL=y
-CONFIG_CRYPTO_OFB=y
CONFIG_CRYPTO_PAES_S390=m
CONFIG_CRYPTO_PCBC=m
CONFIG_CRYPTO_PCRYPT=m
@@ -1261,7 +1265,6 @@ CONFIG_DEBUG_FS_ALLOW_ALL=y
CONFIG_DEBUG_FS=y
# CONFIG_DEBUG_GPIO is not set
CONFIG_DEBUG_HIGHMEM=y
-# CONFIG_DEBUG_HOTPLUG_CPU0 is not set
CONFIG_DEBUG_INFO_BTF=y
# CONFIG_DEBUG_INFO_COMPRESSED is not set
CONFIG_DEBUG_INFO_COMPRESSED_NONE=y
@@ -1326,7 +1329,7 @@ CONFIG_DEBUG_STACK_USAGE=y
# CONFIG_DEBUG_VM_MAPLE_TREE is not set
CONFIG_DEBUG_VM_PGFLAGS=y
CONFIG_DEBUG_VM_PGTABLE=y
-# CONFIG_DEBUG_VM_RB is not set # revisit this if performance isn't horrible
+# CONFIG_DEBUG_VM_RB is not set
CONFIG_DEBUG_VM_SHOOT_LAZIES=y
# CONFIG_DEBUG_VM_VMACACHE is not set
CONFIG_DEBUG_VM=y
@@ -1436,6 +1439,7 @@ CONFIG_DP83867_PHY=m
CONFIG_DP83869_PHY=m
# CONFIG_DP83TC811_PHY is not set
# CONFIG_DP83TD510_PHY is not set
+CONFIG_DP83TG720_PHY=m
# CONFIG_DPM_WATCHDOG is not set
CONFIG_DPOT_DAC=m
# CONFIG_DPS310 is not set
@@ -1525,6 +1529,7 @@ CONFIG_DRM_LONTIUM_LT9611UXC=m
# CONFIG_DRM_MSM_GPU_SUDO is not set
# CONFIG_DRM_MXSFB is not set
CONFIG_DRM_NOUVEAU_BACKLIGHT=y
+CONFIG_DRM_NOUVEAU_GSP_DEFAULT=y
# CONFIG_DRM_NOUVEAU is not set
# CONFIG_DRM_NOUVEAU_SVM is not set
# CONFIG_DRM_NWL_MIPI_DSI is not set
@@ -1546,6 +1551,7 @@ CONFIG_DRM_PANEL_FEIYANG_FY07024DI26A30D=m
# CONFIG_DRM_PANEL_HIMAX_HX8394 is not set
# CONFIG_DRM_PANEL_ILITEK_IL9322 is not set
# CONFIG_DRM_PANEL_ILITEK_ILI9341 is not set
+# CONFIG_DRM_PANEL_ILITEK_ILI9805 is not set
# CONFIG_DRM_PANEL_ILITEK_ILI9881C is not set
CONFIG_DRM_PANEL_ILITEK_ILI9882T=m
CONFIG_DRM_PANEL_INNOLUX_EJ030NA=m
@@ -1608,6 +1614,7 @@ CONFIG_DRM_PANEL_SEIKO_43WVF1G=m
# CONFIG_DRM_PANEL_SONY_TD4353_JDI is not set
CONFIG_DRM_PANEL_SONY_TULIP_TRULY_NT35521=m
CONFIG_DRM_PANEL_STARTEK_KD070FHFID015=m
+# CONFIG_DRM_PANEL_SYNAPTICS_R63353 is not set
# CONFIG_DRM_PANEL_TDO_TL070WSH30 is not set
# CONFIG_DRM_PANEL_TPO_TD028TTEC1 is not set
# CONFIG_DRM_PANEL_TPO_TD043MTEA1 is not set
@@ -1630,7 +1637,7 @@ CONFIG_DRM_RADEON_USERPTR=y
# CONFIG_DRM_RCAR_USE_LVDS is not set
# CONFIG_DRM_RCAR_USE_MIPI_DSI is not set
CONFIG_DRM_SAMSUNG_DSIM=m
-# CONFIG_DRM_SII902X is not set
+CONFIG_DRM_SII902X=m
CONFIG_DRM_SII9234=m
# CONFIG_DRM_SIL_SII8620 is not set
CONFIG_DRM_SIMPLE_BRIDGE=m
@@ -1661,6 +1668,7 @@ CONFIG_DRM_VKMS=m
CONFIG_DRM_VMWGFX_FBCON=y
CONFIG_DRM_VMWGFX=m
# CONFIG_DRM_VMWGFX_MKSSTATS is not set
+# CONFIG_DRM_XE is not set
# CONFIG_DRM_XEN_FRONTEND is not set
CONFIG_DRM=y
# CONFIG_DS1682 is not set
@@ -1761,6 +1769,7 @@ CONFIG_DVB_USB_VP702X=m
CONFIG_DVB_USB_VP7045=m
CONFIG_DVB_USB_ZD1301=m
# CONFIG_DW_AXI_DMAC is not set
+CONFIG_DWC_PCIE_PMU=m
CONFIG_DW_DMAC_CORE=m
# CONFIG_DW_DMAC is not set
CONFIG_DW_DMAC_PCI=m
@@ -1814,8 +1823,10 @@ CONFIG_EFI_ZBOOT=y
CONFIG_ELF_CORE=y
# CONFIG_EMBEDDED is not set
# CONFIG_ENA_ETHERNET is not set
+# CONFIG_ENC28J60 is not set
# CONFIG_ENCLOSURE_SERVICES is not set
CONFIG_ENCRYPTED_KEYS=y
+# CONFIG_ENCX24J600 is not set
CONFIG_ENERGY_MODEL=y
CONFIG_ENIC=m
CONFIG_ENVELOPE_DETECTOR=m
@@ -1824,6 +1835,7 @@ CONFIG_EPOLL=y
CONFIG_EQUALIZER=m
# CONFIG_EROFS_FS_DEBUG is not set
CONFIG_EROFS_FS=m
+CONFIG_EROFS_FS_ONDEMAND=y
# CONFIG_EROFS_FS_PCPU_KTHREAD is not set
CONFIG_EROFS_FS_POSIX_ACL=y
CONFIG_EROFS_FS_SECURITY=y
@@ -1910,7 +1922,6 @@ CONFIG_FAULT_INJECTION=y
# CONFIG_FB_3DFX is not set
# CONFIG_FB_ARC is not set
# CONFIG_FB_ARK is not set
-# CONFIG_FB_ARMCLCD is not set
# CONFIG_FB_ASILIANT is not set
# CONFIG_FB_ATY128 is not set
# CONFIG_FB_ATY is not set
@@ -1931,7 +1942,6 @@ CONFIG_FB_EFI=y
# CONFIG_FB_IMX is not set
# CONFIG_FB is not set
# CONFIG_FB_KYRO is not set
-# CONFIG_FB_LE80578 is not set
# CONFIG_FB_MATROX_G is not set
# CONFIG_FB_MATROX_I2C is not set
# CONFIG_FB_MATROX is not set
@@ -2022,8 +2032,8 @@ CONFIG_FRAME_POINTER=y
CONFIG_FRAME_WARN=2048
CONFIG_FRONTSWAP=y
# CONFIG_FSCACHE_DEBUG is not set
-CONFIG_FSCACHE=m
CONFIG_FSCACHE_STATS=y
+CONFIG_FSCACHE=y
CONFIG_FS_DAX=y
CONFIG_FS_ENCRYPTION_INLINE_CRYPT=y
CONFIG_FS_ENCRYPTION=y
@@ -2201,8 +2211,8 @@ CONFIG_HASHTABLE_KUNIT_TEST=m
CONFIG_HD44780=m
# CONFIG_HDC100X is not set
CONFIG_HDC2010=m
+# CONFIG_HDC3020 is not set
CONFIG_HEADERS_INSTALL=y
-# CONFIG_HERMES is not set
CONFIG_HFS_FS=m
CONFIG_HFSPLUS_FS=m
CONFIG_HI6421V600_IRQ=m
@@ -2269,6 +2279,7 @@ CONFIG_HID_MACALLY=m
CONFIG_HID_MAGICMOUSE=m
CONFIG_HID_MALTRON=m
CONFIG_HID_MAYFLASH=m
+# CONFIG_HID_MCP2200 is not set
CONFIG_HID_MCP2221=m
CONFIG_HID_MEGAWORLD_FF=m
CONFIG_HID_MICROSOFT=m
@@ -2356,7 +2367,6 @@ CONFIG_HMC425=m
# CONFIG_HMC6352 is not set
CONFIG_HMC_DRV=m
CONFIG_HOLTEK_FF=y
-# CONFIG_HOSTAP is not set
CONFIG_HOTPLUG_CPU=y
CONFIG_HOTPLUG_PCI_ACPI_IBM=m
CONFIG_HOTPLUG_PCI_ACPI=y
@@ -2371,6 +2381,7 @@ CONFIG_HOTPLUG_PCI=y
# CONFIG_HP_ILO is not set
CONFIG_HSA_AMD_SVM=y
CONFIG_HSA_AMD=y
+# CONFIG_HSC030PA is not set
# CONFIG_HSI is not set
CONFIG_HSR=m
# CONFIG_HSU_DMA is not set
@@ -2506,6 +2517,7 @@ CONFIG_I40EVF=m
# CONFIG_I8K is not set
# CONFIG_IAQCORE is not set
CONFIG_IBM_PARTITION=y
+CONFIG_ICE_HWMON=y
CONFIG_ICE_HWTS=y
CONFIG_ICE=m
CONFIG_ICE_SWITCHDEV=y
@@ -2961,6 +2973,7 @@ CONFIG_ISCSI_TCP=m
# CONFIG_ISL29020 is not set
# CONFIG_ISL29125 is not set
# CONFIG_ISL29501 is not set
+# CONFIG_ISL76682 is not set
# CONFIG_ISM is not set
CONFIG_ISO9660_FS=m
CONFIG_IS_SIGNED_TYPE_KUNIT_TEST=m
@@ -3034,6 +3047,7 @@ CONFIG_JOYSTICK_PSXPAD_SPI_FF=y
CONFIG_JOYSTICK_PSXPAD_SPI=m
CONFIG_JOYSTICK_PXRC=m
CONFIG_JOYSTICK_QWIIC=m
+# CONFIG_JOYSTICK_SEESAW is not set
# CONFIG_JOYSTICK_SENSEHAT is not set
CONFIG_JOYSTICK_SIDEWINDER=m
# CONFIG_JOYSTICK_SPACEBALL is not set
@@ -3054,6 +3068,7 @@ CONFIG_KALLSYMS_ALL=y
# CONFIG_KALLSYMS_SELFTEST is not set
CONFIG_KALLSYMS=y
# CONFIG_KARMA_PARTITION is not set
+# CONFIG_KASAN_EXTRA_INFO is not set
CONFIG_KASAN_GENERIC=y
CONFIG_KASAN_INLINE=y
CONFIG_KASAN_KUNIT_TEST=m
@@ -3163,6 +3178,9 @@ CONFIG_L2TP_ETH=m
CONFIG_L2TP_IP=m
CONFIG_L2TP=m
CONFIG_L2TP_V3=y
+CONFIG_LAN743X=m
+CONFIG_LAN966X_DCB=y
+CONFIG_LAN966X_SWITCH=m
# CONFIG_LAPB is not set
CONFIG_LATENCYTOP=y
# CONFIG_LATTICE_ECP3_CONFIG is not set
@@ -3224,6 +3242,7 @@ CONFIG_LEDS_LP50XX=m
# CONFIG_LEDS_LP55XX_COMMON is not set
# CONFIG_LEDS_LP8860 is not set
CONFIG_LEDS_LT3593=m
+CONFIG_LEDS_MAX5970=m
CONFIG_LEDS_MAX77650=m
CONFIG_LEDS_MLXCPLD=m
CONFIG_LEDS_MLXREG=m
@@ -3345,6 +3364,7 @@ CONFIG_LTC2983=m
# CONFIG_LTO_CLANG_FULL is not set
# CONFIG_LTO_CLANG_THIN is not set
CONFIG_LTO_NONE=y
+# CONFIG_LTR390 is not set
CONFIG_LTR501=m
CONFIG_LTRF216A=m
CONFIG_LV0104CS=m
@@ -3413,6 +3433,7 @@ CONFIG_MAX30208=m
CONFIG_MAX31827=m
CONFIG_MAX31856=m
CONFIG_MAX31865=m
+CONFIG_MAX34408=m
# CONFIG_MAX44000 is not set
CONFIG_MAX44009=m
# CONFIG_MAX517 is not set
@@ -3443,7 +3464,9 @@ CONFIG_MCP41010=m
# CONFIG_MCP4531 is not set
# CONFIG_MCP4725 is not set
CONFIG_MCP4728=m
+CONFIG_MCP4821=m
# CONFIG_MCP4922 is not set
+CONFIG_MCP9600=m
CONFIG_MCTP_SERIAL=m
# CONFIG_MCTP_TRANSPORT_I2C is not set
# CONFIG_MCTP_TRANSPORT_I3C is not set
@@ -3484,7 +3507,6 @@ CONFIG_MEDIA_CAMERA_SUPPORT=y
CONFIG_MEDIA_CEC_RC=y
CONFIG_MEDIA_CEC_SUPPORT=y
CONFIG_MEDIA_CONTROLLER_DVB=y
-CONFIG_MEDIA_CONTROLLER_REQUEST_API=y
CONFIG_MEDIA_CONTROLLER=y
CONFIG_MEDIA_DIGITAL_TV_SUPPORT=y
CONFIG_MEDIA_PCI_SUPPORT=y
@@ -3719,6 +3741,7 @@ CONFIG_MLX5_VDPA=y
CONFIG_MLX5_VFIO_PCI=m
CONFIG_MLX90614=m
CONFIG_MLX90632=m
+# CONFIG_MLX90635 is not set
# CONFIG_MLXBF_BOOTCTL is not set
# CONFIG_MLXBF_GIGE is not set
# CONFIG_MLXBF_PMC is not set
@@ -3961,6 +3984,7 @@ CONFIG_MTD_SPI_NOR_SWP_DISABLE_ON_VOLATILE=y
CONFIG_MTD_UBI_BEB_LIMIT=20
# CONFIG_MTD_UBI_BLOCK is not set
# CONFIG_MTD_UBI_FASTMAP is not set
+# CONFIG_MTD_UBI_FAULT_INJECTION is not set
# CONFIG_MTD_UBI_GLUEBI is not set
CONFIG_MTD_UBI=m
CONFIG_MTD_UBI_WL_THRESHOLD=4096
@@ -3991,7 +4015,6 @@ CONFIG_NATSEMI=m
CONFIG_NCN26000_PHY=m
CONFIG_NCSI_OEM_CMD_GET_MAC=y
CONFIG_NCSI_OEM_CMD_KEEP_PHY=y
-# CONFIG_ND_BLK is not set
# CONFIG_NDC_DIS_DYNAMIC_CACHING is not set
CONFIG_NE2K_PCI=m
# CONFIG_NET_9P_DEBUG is not set
@@ -4293,7 +4316,7 @@ CONFIG_NET_VENDOR_LITEX=y
# CONFIG_NET_VENDOR_MARVELL is not set
CONFIG_NET_VENDOR_MELLANOX=y
# CONFIG_NET_VENDOR_MICREL is not set
-# CONFIG_NET_VENDOR_MICROCHIP is not set
+CONFIG_NET_VENDOR_MICROCHIP=y
# CONFIG_NET_VENDOR_MICROSEMI is not set
CONFIG_NET_VENDOR_MICROSOFT=y
# CONFIG_NET_VENDOR_MYRI is not set
@@ -4416,6 +4439,7 @@ CONFIG_NF_REJECT_IPV6=m
CONFIG_NFSD_BLOCKLAYOUT=y
CONFIG_NFSD_FLEXFILELAYOUT=y
CONFIG_NFS_DISABLE_UDP_SUPPORT=y
+# CONFIG_NFSD_LEGACY_CLIENT_TRACKING is not set
CONFIG_NFSD=m
CONFIG_NFSD_PNFS=y
CONFIG_NFSD_SCSILAYOUT=y
@@ -4563,6 +4587,7 @@ CONFIG_NOUVEAU_DEBUG_PUSH=y
# CONFIG_NOZOMI is not set
CONFIG_NR_CPUS=512
CONFIG_NS83820=m
+CONFIG_NSM=m
CONFIG_NTB_EPF=m
# CONFIG_NTB is not set
# CONFIG_NTFS3_64BIT_CLUSTER is not set
@@ -4630,7 +4655,6 @@ CONFIG_OPT3001=m
CONFIG_OPT4001=m
CONFIG_OPTPROBES=y
CONFIG_ORANGEFS_FS=m
-CONFIG_ORINOCO_USB=m
# CONFIG_OSF_PARTITION is not set
CONFIG_OSNOISE_TRACER=y
CONFIG_OVERFLOW_KUNIT_TEST=m
@@ -4641,10 +4665,6 @@ CONFIG_OVERLAY_FS=m
CONFIG_OVERLAY_FS_REDIRECT_ALWAYS_FOLLOW=y
# CONFIG_OVERLAY_FS_REDIRECT_DIR is not set
# CONFIG_OVERLAY_FS_XINO_AUTO is not set
-CONFIG_P54_COMMON=m
-CONFIG_P54_PCI=m
-# CONFIG_P54_SPI is not set
-CONFIG_P54_USB=m
CONFIG_PA12203001=m
CONFIG_PACKET_DIAG=y
CONFIG_PACKET=y
@@ -4819,21 +4839,13 @@ CONFIG_PHY_RTK_RTD_USB3PHY=m
# CONFIG_PI433 is not set
CONFIG_PID_NS=y
# CONFIG_PINCONF is not set
-CONFIG_PINCTRL_ALDERLAKE=m
-# CONFIG_PINCTRL_CANNONLAKE is not set
-CONFIG_PINCTRL_CEDARFORK=m
CONFIG_PINCTRL_CS42L43=m
CONFIG_PINCTRL_CY8C95X0=m
-CONFIG_PINCTRL_ELKHARTLAKE=m
-CONFIG_PINCTRL_EMMITSBURG=m
# CONFIG_PINCTRL_EQUILIBRIUM is not set
# CONFIG_PINCTRL_IPQ6018 is not set
# CONFIG_PINCTRL_IPQ8074 is not set
# CONFIG_PINCTRL is not set
-# CONFIG_PINCTRL_JASPERLAKE is not set
-CONFIG_PINCTRL_LAKEFIELD=m
# CONFIG_PINCTRL_LPASS_LPI is not set
-# CONFIG_PINCTRL_LYNXPOINT is not set
# CONFIG_PINCTRL_MCP23S08 is not set
CONFIG_PINCTRL_MESON=y
# CONFIG_PINCTRL_MICROCHIP_SGPIO is not set
@@ -4854,6 +4866,7 @@ CONFIG_PINCTRL_SM8350_LPASS_LPI=m
# CONFIG_PINCTRL_SM8450 is not set
# CONFIG_PINCTRL_STMFX is not set
# CONFIG_PINCTRL_SX150X is not set
+CONFIG_PINCTRL_TPS6594=m
# CONFIG_PING is not set
# CONFIG_PINMUX is not set
CONFIG_PKCS7_MESSAGE_PARSER=y
@@ -5133,7 +5146,7 @@ CONFIG_RDS_TCP=m
CONFIG_RD_XZ=y
CONFIG_RD_ZSTD=y
# CONFIG_READABLE_ASM is not set
-# CONFIG_READ_ONLY_THP_FOR_FS is not set
+CONFIG_READ_ONLY_THP_FOR_FS=y
CONFIG_REALTEK_AUTOPM=y
CONFIG_REALTEK_PHY=m
# CONFIG_REED_SOLOMON_TEST is not set
@@ -5182,6 +5195,7 @@ CONFIG_REGULATOR_MP886X=m
# CONFIG_REGULATOR_MPQ7920 is not set
# CONFIG_REGULATOR_MT6311 is not set
CONFIG_REGULATOR_MT6370=m
+# CONFIG_REGULATOR_NETLINK_EVENTS is not set
# CONFIG_REGULATOR_PCA9450 is not set
# CONFIG_REGULATOR_PF8X00 is not set
# CONFIG_REGULATOR_PFUZE100 is not set
@@ -5368,6 +5382,7 @@ CONFIG_RTC_DRV_M41T94=m
CONFIG_RTC_DRV_M48T35=m
CONFIG_RTC_DRV_M48T59=m
# CONFIG_RTC_DRV_M48T86 is not set
+CONFIG_RTC_DRV_MAX31335=m
CONFIG_RTC_DRV_MAX6900=m
CONFIG_RTC_DRV_MAX6902=m
CONFIG_RTC_DRV_MAX6916=m
@@ -5404,6 +5419,7 @@ CONFIG_RTC_DRV_SD3078=m
# CONFIG_RTC_DRV_SNVS is not set
CONFIG_RTC_DRV_STK17TA8=m
# CONFIG_RTC_DRV_TEST is not set
+CONFIG_RTC_DRV_TPS6594=m
CONFIG_RTC_DRV_V3020=m
CONFIG_RTC_DRV_X1205=m
# CONFIG_RTC_DRV_ZYNQMP is not set
@@ -5737,6 +5753,7 @@ CONFIG_SENSORS_FSP_3Y=m
CONFIG_SENSORS_FTSTEUTATES=m
CONFIG_SENSORS_G760A=m
CONFIG_SENSORS_G762=m
+CONFIG_SENSORS_GIGABYTE_WATERFORCE=m
CONFIG_SENSORS_GL518SM=m
CONFIG_SENSORS_GL520SM=m
# CONFIG_SENSORS_GPIO_FAN is not set
@@ -5803,6 +5820,7 @@ CONFIG_SENSORS_LTC4222=m
CONFIG_SENSORS_LTC4245=m
CONFIG_SENSORS_LTC4260=m
CONFIG_SENSORS_LTC4261=m
+# CONFIG_SENSORS_LTC4286 is not set
CONFIG_SENSORS_MAX1111=m
# CONFIG_SENSORS_MAX127 is not set
# CONFIG_SENSORS_MAX15301 is not set
@@ -5830,10 +5848,12 @@ CONFIG_SENSORS_MAX8688=m
CONFIG_SENSORS_MC34VR500=m
CONFIG_SENSORS_MCP3021=m
CONFIG_SENSORS_MLXREG_FAN=m
+# CONFIG_SENSORS_MP2856 is not set
CONFIG_SENSORS_MP2888=m
CONFIG_SENSORS_MP2975=m
CONFIG_SENSORS_MP2975_REGULATOR=y
CONFIG_SENSORS_MP5023=m
+# CONFIG_SENSORS_MP5990 is not set
CONFIG_SENSORS_MPQ7932=m
CONFIG_SENSORS_MPQ7932_REGULATOR=y
CONFIG_SENSORS_MR75203=m
@@ -6013,10 +6033,8 @@ CONFIG_SKGE_GENESIS=y
CONFIG_SKGE=m
# CONFIG_SKY2_DEBUG is not set
CONFIG_SKY2=m
-# CONFIG_SLAB_DEPRECATED is not set
CONFIG_SLAB_FREELIST_HARDENED=y
CONFIG_SLAB_FREELIST_RANDOM=y
-# CONFIG_SLAB is not set
# CONFIG_SLAB_MERGE_DEFAULT is not set
# CONFIG_SLIMBUS is not set
CONFIG_SLIP_COMPRESSED=y
@@ -6790,6 +6808,7 @@ CONFIG_SSB_PCIHOST=y
CONFIG_SSB_SDIOHOST=y
# CONFIG_SSFDC is not set
CONFIG_SSIF_IPMI_BMC=m
+CONFIG_STACKDEPOT_MAX_FRAMES=64
CONFIG_STACK_HASH_ORDER=20
CONFIG_STACKINIT_KUNIT_TEST=m
CONFIG_STACKPROTECTOR_STRONG=y
@@ -7000,6 +7019,7 @@ CONFIG_TEST_STRING_HELPERS=m
# CONFIG_TEST_UUID is not set
CONFIG_TEST_VMALLOC=m
# CONFIG_TEST_XARRAY is not set
+# CONFIG_THERMAL_DEBUGFS is not set
# CONFIG_THERMAL_DEFAULT_GOV_BANG_BANG is not set
# CONFIG_THERMAL_DEFAULT_GOV_FAIR_SHARE is not set
CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y
@@ -7201,6 +7221,7 @@ CONFIG_TRACE_EVAL_MAP_FILE=y
CONFIG_TRACER_SNAPSHOT=y
# CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS is not set
# CONFIG_TRANSPARENT_HUGEPAGE is not set
+# CONFIG_TRANSPARENT_HUGEPAGE_NEVER is not set
# CONFIG_TRIM_UNUSED_KSYMS is not set
CONFIG_TRUSTED_KEYS_TEE=y
CONFIG_TRUSTED_KEYS_TPM=y
@@ -7247,6 +7268,7 @@ CONFIG_TYPEC_MUX_GPIO_SBU=m
CONFIG_TYPEC_MUX_NB7VPQ904M=m
CONFIG_TYPEC_MUX_PI3USB30532=m
CONFIG_TYPEC_MUX_PTN36502=m
+# CONFIG_TYPEC_MUX_WCD939X_USBSS is not set
CONFIG_TYPEC_NVIDIA_ALTMODE=m
# CONFIG_TYPEC_QCOM_PMIC is not set
# CONFIG_TYPEC_RT1711H is not set
@@ -7501,7 +7523,6 @@ CONFIG_USB_NET_NET1080=m
CONFIG_USB_NET_PLUSB=m
CONFIG_USB_NET_QMI_WWAN=m
CONFIG_USB_NET_RNDIS_HOST=m
-CONFIG_USB_NET_RNDIS_WLAN=m
CONFIG_USB_NET_SMSC75XX=m
CONFIG_USB_NET_SMSC95XX=m
CONFIG_USB_NET_SR9700=m
@@ -7641,7 +7662,6 @@ CONFIG_USB_XHCI_PCI=y
CONFIG_USB_XUSBATM=m
CONFIG_USB=y
CONFIG_USB_YUREX=m
-# CONFIG_USB_ZD1201 is not set
# CONFIG_USB_ZERO is not set
CONFIG_USB_ZR364XX=m
# CONFIG_USELIB is not set
@@ -7657,6 +7677,7 @@ CONFIG_V4L_MEM2MEM_DRIVERS=y
# CONFIG_V4L_PLATFORM_DRIVERS is not set
CONFIG_V4L_TEST_DRIVERS=y
CONFIG_VALIDATE_FS_PARSER=y
+CONFIG_VCAP=y
CONFIG_VCHIQ_CDEV=y
CONFIG_VCNL3020=m
# CONFIG_VCNL4000 is not set
@@ -7669,6 +7690,7 @@ CONFIG_VDPA_SIM_NET=m
CONFIG_VDPA_USER=m
CONFIG_VEML6030=m
# CONFIG_VEML6070 is not set
+# CONFIG_VEML6075 is not set
CONFIG_VETH=m
# CONFIG_VF610_ADC is not set
# CONFIG_VF610_DAC is not set
@@ -7676,6 +7698,7 @@ CONFIG_VFAT_FS=m
CONFIG_VFIO_AP=m
CONFIG_VFIO_CCW=m
CONFIG_VFIO_CONTAINER=y
+# CONFIG_VFIO_DEBUGFS is not set
# CONFIG_VFIO_DEVICE_CDEV is not set
CONFIG_VFIO_GROUP=y
CONFIG_VFIO_IOMMU_TYPE1=m
@@ -7714,6 +7737,7 @@ CONFIG_VIDEO_ADV7842=m
# CONFIG_VIDEO_ADV_DEBUG is not set
CONFIG_VIDEO_AK7375=m
CONFIG_VIDEO_AK881X=m
+# CONFIG_VIDEO_ALVIUM_CSI2 is not set
CONFIG_VIDEO_AR0521=m
CONFIG_VIDEO_AU0828=m
# CONFIG_VIDEO_AU0828_RC is not set
@@ -7762,6 +7786,8 @@ CONFIG_VIDEO_EM28XX_V4L2=m
CONFIG_VIDEO_ET8EK8=m
CONFIG_VIDEO_FB_IVTV=m
# CONFIG_VIDEO_FIXED_MINOR_RANGES is not set
+CONFIG_VIDEO_GC0308=m
+CONFIG_VIDEO_GC2145=m
CONFIG_VIDEO_GO7007_LOADER=m
CONFIG_VIDEO_GO7007=m
CONFIG_VIDEO_GO7007_USB=m
@@ -7832,6 +7858,7 @@ CONFIG_VIDEO_OV5670=m
CONFIG_VIDEO_OV5675=m
CONFIG_VIDEO_OV5693=m
CONFIG_VIDEO_OV5695=m
+CONFIG_VIDEO_OV64A40=m
CONFIG_VIDEO_OV6650=m
CONFIG_VIDEO_OV7251=m
CONFIG_VIDEO_OV7640=m
@@ -7888,6 +7915,7 @@ CONFIG_VIDEO_TDA9840=m
CONFIG_VIDEO_TEA6415C=m
CONFIG_VIDEO_TEA6420=m
# CONFIG_VIDEO_TEGRA_TPG is not set
+# CONFIG_VIDEO_THP7312 is not set
CONFIG_VIDEO_THS7303=m
CONFIG_VIDEO_THS8200=m
CONFIG_VIDEO_TLV320AIC23B=m
@@ -7903,6 +7931,7 @@ CONFIG_VIDEO_TW2804=m
# CONFIG_VIDEO_TW5864 is not set
CONFIG_VIDEO_TW686X=m
# CONFIG_VIDEO_TW68 is not set
+# CONFIG_VIDEO_TW9900 is not set
CONFIG_VIDEO_TW9903=m
CONFIG_VIDEO_TW9906=m
CONFIG_VIDEO_TW9910=m
@@ -7945,6 +7974,7 @@ CONFIG_VIRTIO_PCI_LEGACY=y
CONFIG_VIRTIO_PCI=y
# CONFIG_VIRTIO_PMEM is not set
CONFIG_VIRTIO_VDPA=m
+CONFIG_VIRTIO_VFIO_PCI=m
CONFIG_VIRTIO_VSOCKETS=m
CONFIG_VIRTIO=y
CONFIG_VIRTUALIZATION=y
@@ -7987,6 +8017,7 @@ CONFIG_VXLAN=m
# CONFIG_VZ89X is not set
CONFIG_W1_CON=y
# CONFIG_W1 is not set
+# CONFIG_W1_MASTER_AMD_AXI is not set
# CONFIG_W1_MASTER_DS1WM is not set
CONFIG_W1_MASTER_DS2482=m
CONFIG_W1_MASTER_DS2490=m
@@ -8063,7 +8094,7 @@ CONFIG_WLAN_VENDOR_ATH=y
CONFIG_WLAN_VENDOR_BROADCOM=y
# CONFIG_WLAN_VENDOR_CISCO is not set
CONFIG_WLAN_VENDOR_INTEL=y
-CONFIG_WLAN_VENDOR_INTERSIL=y
+# CONFIG_WLAN_VENDOR_INTERSIL is not set
CONFIG_WLAN_VENDOR_MARVELL=y
CONFIG_WLAN_VENDOR_MEDIATEK=y
CONFIG_WLAN_VENDOR_MICROCHIP=y
@@ -8181,6 +8212,7 @@ CONFIG_ZRAM_DEF_COMP_LZORLE=y
CONFIG_ZRAM=m
CONFIG_ZRAM_MEMORY_TRACKING=y
CONFIG_ZRAM_MULTI_COMP=y
+CONFIG_ZRAM_TRACK_ENTRY_ACTIME=y
# CONFIG_ZRAM_WRITEBACK is not set
CONFIG_ZSMALLOC_CHAIN_SIZE=8
# CONFIG_ZSMALLOC_STAT is not set
@@ -8193,6 +8225,7 @@ CONFIG_ZSWAP_COMPRESSOR_DEFAULT_LZO=y
# CONFIG_ZSWAP_COMPRESSOR_DEFAULT_ZSTD is not set
# CONFIG_ZSWAP_DEFAULT_ON is not set
CONFIG_ZSWAP_EXCLUSIVE_LOADS_DEFAULT_ON=y
+CONFIG_ZSWAP_SHRINKER_DEFAULT_ON=y
CONFIG_ZSWAP=y
# CONFIG_ZSWAP_ZPOOL_DEFAULT_Z3FOLD is not set
CONFIG_ZSWAP_ZPOOL_DEFAULT_ZBUD=y
@@ -8202,7 +8235,7 @@ CONFIG_ZENIFY=y
CONFIG_NTSYNC=y
CONFIG_USER_NS_UNPRIVILEGED=y
CONFIG_TCP_CONG_BBR2=m
-# CONFIG_SCHED_PDS is not set
+CONFIG_SCHED_BORE=y
CONFIG_HID_IPTS=m
CONFIG_HID_ITHC=m
CONFIG_SURFACE_BOOK1_DGPU_SWITCH=m
@@ -8211,11 +8244,8 @@ CONFIG_LEDS_TPS68470=m
CONFIG_SENSORS_SURFACE_FAN=m
CONFIG_SENSORS_SURFACE_TEMP=m
CONFIG_DRM_AMD_COLOR_STEAMDECK=y
-CONFIG_BMI323_I2C=m
-CONFIG_BMI323_SPI=m
CONFIG_DRM_APPLETBDRM=m
CONFIG_HID_APPLETB_BL=m
CONFIG_HID_APPLETB_KBD=m
CONFIG_HID_APPLE_MAGIC_BACKLIGHT=m
CONFIG_APPLE_BCE=m
-CONFIG_SCHED_BORE=y
diff --git a/SOURCES/kernel-s390x-debug-rhel.config b/SOURCES/kernel-s390x-debug-rhel.config
index b48a0e3..1dfc5f2 100644
--- a/SOURCES/kernel-s390x-debug-rhel.config
+++ b/SOURCES/kernel-s390x-debug-rhel.config
@@ -84,6 +84,7 @@ CONFIG_ACPI_VIDEO=m
# CONFIG_AD5791 is not set
# CONFIG_AD5933 is not set
# CONFIG_AD7091R5 is not set
+# CONFIG_AD7091R8 is not set
# CONFIG_AD7124 is not set
# CONFIG_AD7150 is not set
# CONFIG_AD7192 is not set
@@ -205,11 +206,13 @@ CONFIG_AMD_HSMP=m
CONFIG_AMD_PMC=m
# CONFIG_AMD_PTDMA is not set
# CONFIG_AMDTEE is not set
+# CONFIG_AMD_WBRF is not set
# CONFIG_AMIGA_PARTITION is not set
CONFIG_AMPERE_ERRATUM_AC03_CPU_38=y
# CONFIG_AMT is not set
# CONFIG_ANDROID_BINDER_IPC is not set
# CONFIG_ANON_VMA_NAME is not set
+# CONFIG_AOSONG_AGS02MA is not set
# CONFIG_APDS9300 is not set
# CONFIG_APDS9802ALS is not set
# CONFIG_APDS9960 is not set
@@ -365,6 +368,7 @@ CONFIG_BACKLIGHT_LED=m
# CONFIG_BACKLIGHT_LM3639 is not set
CONFIG_BACKLIGHT_LP855X=m
# CONFIG_BACKLIGHT_LV5207LP is not set
+# CONFIG_BACKLIGHT_MP3309C is not set
# CONFIG_BACKLIGHT_PWM is not set
# CONFIG_BACKLIGHT_QCOM_WLED is not set
# CONFIG_BACKLIGHT_SAHARA is not set
@@ -458,6 +462,7 @@ CONFIG_BLK_DEV_SR=m
# CONFIG_BLK_DEV_THROTTLING_LOW is not set
CONFIG_BLK_DEV_THROTTLING=y
# CONFIG_BLK_DEV_UBLK is not set
+CONFIG_BLK_DEV_WRITE_MOUNTED=y
CONFIG_BLK_DEV=y
CONFIG_BLK_DEV_ZONED=y
# CONFIG_BLK_INLINE_ENCRYPTION is not set
@@ -477,6 +482,8 @@ CONFIG_BLOCK=y
# CONFIG_BMI088_ACCEL is not set
# CONFIG_BMI160_I2C is not set
# CONFIG_BMI160_SPI is not set
+CONFIG_BMI323_I2C=m
+CONFIG_BMI323_SPI=m
# CONFIG_BMP280 is not set
# CONFIG_BNA is not set
CONFIG_BNX2=m
@@ -492,7 +499,6 @@ CONFIG_BONDING=m
# CONFIG_BOOT_CONFIG_FORCE is not set
CONFIG_BOOT_CONFIG=y
# CONFIG_BOOTPARAM_HARDLOCKUP_PANIC is not set
-# CONFIG_BOOTPARAM_HOTPLUG_CPU0 is not set
# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
CONFIG_BOOT_PRINTK_DELAY=y
@@ -909,7 +915,6 @@ CONFIG_CRYPTO_CAST5=m
CONFIG_CRYPTO_CAST6=m
CONFIG_CRYPTO_CBC=y
CONFIG_CRYPTO_CCM=y
-CONFIG_CRYPTO_CFB=y
CONFIG_CRYPTO_CHACHA20=m
CONFIG_CRYPTO_CHACHA20POLY1305=m
CONFIG_CRYPTO_CHACHA_S390=y
@@ -941,6 +946,7 @@ CONFIG_CRYPTO_DEV_HISI_SEC=m
# CONFIG_CRYPTO_DEV_HISTB_TRNG is not set
CONFIG_CRYPTO_DEV_NITROX_CNN55XX=m
# CONFIG_CRYPTO_DEV_OCTEONTX_CPT is not set
+# CONFIG_CRYPTO_DEV_QAT_420XX is not set
# CONFIG_CRYPTO_DEV_QAT_4XXX is not set
# CONFIG_CRYPTO_DEV_QAT_C3XXX is not set
# CONFIG_CRYPTO_DEV_QAT_C3XXXVF is not set
@@ -998,7 +1004,6 @@ CONFIG_CRYPTO_MD4=m
CONFIG_CRYPTO_MD5=y
CONFIG_CRYPTO_MICHAEL_MIC=m
CONFIG_CRYPTO_NULL=y
-CONFIG_CRYPTO_OFB=y
CONFIG_CRYPTO_PAES_S390=m
CONFIG_CRYPTO_PCBC=m
CONFIG_CRYPTO_PCRYPT=m
@@ -1157,7 +1162,7 @@ CONFIG_DEBUG_STACK_USAGE=y
# CONFIG_DEBUG_VM_MAPLE_TREE is not set
# CONFIG_DEBUG_VM_PGFLAGS is not set
CONFIG_DEBUG_VM_PGTABLE=y
-# CONFIG_DEBUG_VM_RB is not set # revisit this if performance isn't horrible
+# CONFIG_DEBUG_VM_RB is not set
# CONFIG_DEBUG_VM_SHOOT_LAZIES is not set
# CONFIG_DEBUG_VM_VMACACHE is not set
CONFIG_DEBUG_VM=y
@@ -1272,6 +1277,7 @@ CONFIG_DP83867_PHY=m
# CONFIG_DP83869_PHY is not set
CONFIG_DP83TC811_PHY=m
# CONFIG_DP83TD510_PHY is not set
+# CONFIG_DP83TG720_PHY is not set
# CONFIG_DPM_WATCHDOG is not set
# CONFIG_DPOT_DAC is not set
# CONFIG_DPS310 is not set
@@ -1329,6 +1335,7 @@ CONFIG_DRM_I915_COMPRESS_ERROR=y
# CONFIG_DRM_I915_DEBUG_MMIO is not set
# CONFIG_DRM_I915_DEBUG_RUNTIME_PM is not set
# CONFIG_DRM_I915_DEBUG_VBLANK_EVADE is not set
+# CONFIG_DRM_I915_DEBUG_WAKEREF is not set
CONFIG_DRM_I915_FENCE_TIMEOUT=10000
CONFIG_DRM_I915_HEARTBEAT_INTERVAL=2500
# CONFIG_DRM_I915_LOW_LEVEL_TRACEPOINTS is not set
@@ -1371,6 +1378,7 @@ CONFIG_DRM=m
# CONFIG_DRM_MGAG200 is not set
# CONFIG_DRM_MXSFB is not set
CONFIG_DRM_NOUVEAU_BACKLIGHT=y
+# CONFIG_DRM_NOUVEAU_GSP_DEFAULT is not set
# CONFIG_DRM_NOUVEAU is not set
# CONFIG_DRM_NWL_MIPI_DSI is not set
# CONFIG_DRM_NXP_PTN3460 is not set
@@ -1391,6 +1399,7 @@ CONFIG_DRM_NOUVEAU_BACKLIGHT=y
# CONFIG_DRM_PANEL_HIMAX_HX8394 is not set
# CONFIG_DRM_PANEL_ILITEK_IL9322 is not set
# CONFIG_DRM_PANEL_ILITEK_ILI9341 is not set
+# CONFIG_DRM_PANEL_ILITEK_ILI9805 is not set
# CONFIG_DRM_PANEL_ILITEK_ILI9881C is not set
# CONFIG_DRM_PANEL_ILITEK_ILI9882T is not set
# CONFIG_DRM_PANEL_INNOLUX_EJ030NA is not set
@@ -1451,6 +1460,7 @@ CONFIG_DRM_NOUVEAU_BACKLIGHT=y
# CONFIG_DRM_PANEL_SONY_TD4353_JDI is not set
# CONFIG_DRM_PANEL_SONY_TULIP_TRULY_NT35521 is not set
# CONFIG_DRM_PANEL_STARTEK_KD070FHFID015 is not set
+# CONFIG_DRM_PANEL_SYNAPTICS_R63353 is not set
# CONFIG_DRM_PANEL_TDO_TL070WSH30 is not set
# CONFIG_DRM_PANEL_TPO_TD028TTEC1 is not set
# CONFIG_DRM_PANEL_TPO_TD043MTEA1 is not set
@@ -1465,6 +1475,7 @@ CONFIG_DRM_NOUVEAU_BACKLIGHT=y
# CONFIG_DRM_PARADE_PS8622 is not set
# CONFIG_DRM_PARADE_PS8640 is not set
# CONFIG_DRM_PL111 is not set
+# CONFIG_DRM_POWERVR is not set
# CONFIG_DRM_QXL is not set
# CONFIG_DRM_RADEON is not set
CONFIG_DRM_RADEON_USERPTR=y
@@ -1503,6 +1514,7 @@ CONFIG_DRM_VKMS=m
CONFIG_DRM_VMWGFX_FBCON=y
CONFIG_DRM_VMWGFX=m
# CONFIG_DRM_VMWGFX_MKSSTATS is not set
+# CONFIG_DRM_XE is not set
# CONFIG_DRM_XEN_FRONTEND is not set
# CONFIG_DS1682 is not set
# CONFIG_DS1803 is not set
@@ -1600,6 +1612,7 @@ CONFIG_DVB_USB_VP702X=m
CONFIG_DVB_USB_VP7045=m
# CONFIG_DVB_USB_ZD1301 is not set
# CONFIG_DW_AXI_DMAC is not set
+# CONFIG_DWC_PCIE_PMU is not set
# CONFIG_DW_DMAC is not set
# CONFIG_DW_DMAC_PCI is not set
# CONFIG_DW_EDMA is not set
@@ -1666,6 +1679,7 @@ CONFIG_EPOLL=y
# CONFIG_EQUALIZER is not set
# CONFIG_EROFS_FS_DEBUG is not set
CONFIG_EROFS_FS=m
+# CONFIG_EROFS_FS_ONDEMAND is not set
CONFIG_EROFS_FS_POSIX_ACL=y
CONFIG_EROFS_FS_SECURITY=y
CONFIG_EROFS_FS_XATTR=y
@@ -1737,7 +1751,6 @@ CONFIG_FAULT_INJECTION=y
# CONFIG_FB_3DFX is not set
# CONFIG_FB_ARC is not set
# CONFIG_FB_ARK is not set
-# CONFIG_FB_ARMCLCD is not set
# CONFIG_FB_ASILIANT is not set
# CONFIG_FB_ATY128 is not set
# CONFIG_FB_ATY is not set
@@ -1758,7 +1771,6 @@ CONFIG_FB_EFI=y
# CONFIG_FB_IMX is not set
# CONFIG_FB is not set
# CONFIG_FB_KYRO is not set
-# CONFIG_FB_LE80578 is not set
# CONFIG_FB_MATROX_G is not set
# CONFIG_FB_MATROX_I2C is not set
# CONFIG_FB_MATROX is not set
@@ -1824,11 +1836,12 @@ CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
CONFIG_FRAMEBUFFER_CONSOLE=y
# CONFIG_FRAME_POINTER is not set
+# CONFIG_FRAMER is not set
CONFIG_FRAME_WARN=2048
CONFIG_FRONTSWAP=y
# CONFIG_FSCACHE_DEBUG is not set
-CONFIG_FSCACHE=m
CONFIG_FSCACHE_STATS=y
+CONFIG_FSCACHE=y
CONFIG_FS_DAX=y
# CONFIG_FS_ENCRYPTION is not set
# CONFIG_FSI is not set
@@ -2004,6 +2017,7 @@ CONFIG_HASHTABLE_KUNIT_TEST=m
# CONFIG_HD44780 is not set
# CONFIG_HDC100X is not set
# CONFIG_HDC2010 is not set
+# CONFIG_HDC3020 is not set
CONFIG_HDLC_CISCO=m
CONFIG_HDLC_FR=m
CONFIG_HDLC=m
@@ -2077,6 +2091,7 @@ CONFIG_HID_LOGITECH=m
CONFIG_HID_MAGICMOUSE=y
# CONFIG_HID_MALTRON is not set
# CONFIG_HID_MAYFLASH is not set
+# CONFIG_HID_MCP2200 is not set
# CONFIG_HID_MCP2221 is not set
# CONFIG_HID_MEGAWORLD_FF is not set
CONFIG_HID_MICROSOFT=m
@@ -2176,6 +2191,7 @@ CONFIG_HOTPLUG_PCI=y
CONFIG_HSA_AMD_P2P=y
CONFIG_HSA_AMD_SVM=y
CONFIG_HSA_AMD=y
+# CONFIG_HSC030PA is not set
# CONFIG_HSI is not set
CONFIG_HSR=m
# CONFIG_HT16K33 is not set
@@ -2308,6 +2324,7 @@ CONFIG_IAVF=m
# CONFIG_IBM_ASM is not set
CONFIG_IBMASR=m
CONFIG_IBM_PARTITION=y
+CONFIG_ICE_HWMON=y
CONFIG_ICE_HWTS=y
CONFIG_ICE=m
CONFIG_ICE_SWITCHDEV=y
@@ -2415,6 +2432,7 @@ CONFIG_INFINIBAND_ADDR_TRANS=y
CONFIG_INFINIBAND_CXGB4=m
CONFIG_INFINIBAND_EFA=m
# CONFIG_INFINIBAND_ERDMA is not set
+# CONFIG_INFINIBAND_HFI1 is not set
# CONFIG_INFINIBAND_HNS is not set
CONFIG_INFINIBAND_IPOIB_CM=y
# CONFIG_INFINIBAND_IPOIB_DEBUG_DATA is not set
@@ -2429,14 +2447,15 @@ CONFIG_INFINIBAND=m
# CONFIG_INFINIBAND_ON_DEMAND_PAGING is not set
CONFIG_INFINIBAND_QEDR=m
# CONFIG_INFINIBAND_QIB is not set
-CONFIG_INFINIBAND_RDMAVT=m
+# CONFIG_INFINIBAND_RDMAVT is not set
# CONFIG_INFINIBAND_RTRS_CLIENT is not set
# CONFIG_INFINIBAND_RTRS_SERVER is not set
# CONFIG_INFINIBAND_SRP is not set
# CONFIG_INFINIBAND_SRPT is not set
CONFIG_INFINIBAND_USER_ACCESS=m
# CONFIG_INFINIBAND_USER_MAD is not set
-CONFIG_INFINIBAND_USNIC=m
+# CONFIG_INFINIBAND_USNIC is not set
+# CONFIG_INFINIBAND_VMWARE_PVRDMA is not set
# CONFIG_INFTL is not set
# CONFIG_INIT_ON_ALLOC_DEFAULT_ON is not set
# CONFIG_INIT_ON_FREE_DEFAULT_ON is not set
@@ -2521,10 +2540,11 @@ CONFIG_INTEL_IOMMU_PERF_EVENTS=y
# CONFIG_INTEL_ISH_FIRMWARE_DOWNLOADER is not set
# CONFIG_INTEL_ISHTP_ECLITE is not set
# CONFIG_INTEL_LDMA is not set
-# CONFIG_INTEL_MEI_GSC_PROXY is not set
+CONFIG_INTEL_MEI_GSC_PROXY=m
# CONFIG_INTEL_MEI_HDCP is not set
# CONFIG_INTEL_MEI_PXP is not set
# CONFIG_INTEL_MEI_TXE is not set
+# CONFIG_INTEL_MEI_VSC_HW is not set
# CONFIG_INTEL_PMC_CORE is not set
# CONFIG_INTEL_PMT_CLASS is not set
# CONFIG_INTEL_PMT_CRASHLOG is not set
@@ -2758,6 +2778,7 @@ CONFIG_ISCSI_TCP=m
# CONFIG_ISL29020 is not set
# CONFIG_ISL29125 is not set
# CONFIG_ISL29501 is not set
+# CONFIG_ISL76682 is not set
CONFIG_ISM=m
CONFIG_ISO9660_FS=m
CONFIG_IS_SIGNED_TYPE_KUNIT_TEST=m
@@ -2800,6 +2821,7 @@ CONFIG_KALLSYMS_BASE_RELATIVE=y
# CONFIG_KALLSYMS_SELFTEST is not set
CONFIG_KALLSYMS=y
# CONFIG_KARMA_PARTITION is not set
+# CONFIG_KASAN_EXTRA_INFO is not set
CONFIG_KASAN_GENERIC=y
CONFIG_KASAN_INLINE=y
CONFIG_KASAN_KUNIT_TEST=m
@@ -2894,11 +2916,13 @@ CONFIG_KUNIT_TEST=m
CONFIG_KVM_AMD_SEV=y
# CONFIG_KVM_BOOK3S_HV_P8_TIMING is not set
# CONFIG_KVM_BOOK3S_HV_P9_TIMING is not set
+CONFIG_KVM_HYPERV=y
CONFIG_KVM=m
CONFIG_KVM_MAX_NR_VCPUS=4096
CONFIG_KVM_PROVE_MMU=y
# CONFIG_KVM_S390_UCONTROL is not set
CONFIG_KVM_SMM=y
+CONFIG_KVM_SW_PROTECTED_VM=y
# CONFIG_KVM_WERROR is not set
# CONFIG_KVM_XEN is not set
# CONFIG_KXCJK1013 is not set
@@ -3074,6 +3098,7 @@ CONFIG_LSM_MMAP_MIN_ADDR=65535
# CONFIG_LTO_CLANG_FULL is not set
# CONFIG_LTO_CLANG_THIN is not set
CONFIG_LTO_NONE=y
+# CONFIG_LTR390 is not set
# CONFIG_LTR501 is not set
# CONFIG_LTRF216A is not set
# CONFIG_LV0104CS is not set
@@ -3122,7 +3147,7 @@ CONFIG_MARCH_Z14=y
# CONFIG_MARCH_Z990 is not set
# CONFIG_MARCH_ZEC12 is not set
CONFIG_MARVELL_10G_PHY=m
-# CONFIG_MARVELL_88Q2XXX_PHY is not set
+CONFIG_MARVELL_88Q2XXX_PHY=m
# CONFIG_MARVELL_88X2222_PHY is not set
# CONFIG_MARVELL_PHY is not set
# CONFIG_MATOM is not set
@@ -3139,6 +3164,7 @@ CONFIG_MARVELL_10G_PHY=m
# CONFIG_MAX31827 is not set
# CONFIG_MAX31856 is not set
# CONFIG_MAX31865 is not set
+# CONFIG_MAX34408 is not set
# CONFIG_MAX44000 is not set
# CONFIG_MAX44009 is not set
# CONFIG_MAX517 is not set
@@ -3166,7 +3192,9 @@ CONFIG_MAX_SKB_FRAGS=17
# CONFIG_MCP4531 is not set
# CONFIG_MCP4725 is not set
# CONFIG_MCP4728 is not set
+# CONFIG_MCP4821 is not set
# CONFIG_MCP4922 is not set
+# CONFIG_MCP9600 is not set
# CONFIG_MCTP is not set
CONFIG_MD_AUTODETECT=y
CONFIG_MD_BITMAP_FILE=y
@@ -3384,10 +3412,11 @@ CONFIG_MISC_FILESYSTEMS=y
# CONFIG_MISC_RTSX_PCI is not set
CONFIG_MISC_RTSX_USB=m
# CONFIG_MLX4_CORE_GEN2 is not set
+# CONFIG_MLX4_CORE is not set
CONFIG_MLX4_DEBUG=y
CONFIG_MLX4_EN_DCB=y
-CONFIG_MLX4_EN=m
-CONFIG_MLX4_INFINIBAND=m
+# CONFIG_MLX4_EN is not set
+# CONFIG_MLX4_INFINIBAND is not set
CONFIG_MLX5_ACCEL=y
CONFIG_MLX5_CLS_ACT=y
CONFIG_MLX5_CORE_EN_DCB=y
@@ -3418,6 +3447,7 @@ CONFIG_MLX5_VDPA_NET=m
CONFIG_MLX5_VFIO_PCI=m
# CONFIG_MLX90614 is not set
# CONFIG_MLX90632 is not set
+# CONFIG_MLX90635 is not set
# CONFIG_MLXBF_BOOTCTL is not set
# CONFIG_MLXBF_GIGE is not set
# CONFIG_MLXBF_PMC is not set
@@ -3580,7 +3610,7 @@ CONFIG_MT76x2U=m
CONFIG_MT7921E=m
# CONFIG_MT7921S is not set
# CONFIG_MT7921U is not set
-# CONFIG_MT7925E is not set
+CONFIG_MT7925E=m
# CONFIG_MT7925U is not set
# CONFIG_MT7996E is not set
# CONFIG_MTD_ABSENT is not set
@@ -3631,6 +3661,7 @@ CONFIG_MTD_OF_PARTS=m
CONFIG_MTD_UBI_BEB_LIMIT=20
# CONFIG_MTD_UBI_BLOCK is not set
# CONFIG_MTD_UBI_FASTMAP is not set
+# CONFIG_MTD_UBI_FAULT_INJECTION is not set
# CONFIG_MTD_UBI_GLUEBI is not set
CONFIG_MTD_UBI=m
CONFIG_MTD_UBI_WL_THRESHOLD=4096
@@ -3652,7 +3683,6 @@ CONFIG_NAMESPACES=y
# CONFIG_NATIONAL_PHY is not set
# CONFIG_NAU7802 is not set
# CONFIG_NCN26000_PHY is not set
-CONFIG_ND_BLK=m
CONFIG_ND_BTT=m
# CONFIG_NDC_DIS_DYNAMIC_CACHING is not set
CONFIG_ND_CLAIM=y
@@ -3706,7 +3736,6 @@ CONFIG_NET_DROP_MONITOR=y
# CONFIG_NET_EMATCH is not set
# CONFIG_NET_EMATCH_META is not set
# CONFIG_NET_EMATCH_NBYTE is not set
-# CONFIG_NET_EMATCH_STACK is not set
# CONFIG_NET_EMATCH_TEXT is not set
# CONFIG_NET_EMATCH_U32 is not set
CONFIG_NET_FAILOVER=m
@@ -3891,6 +3920,7 @@ CONFIG_NET_VENDOR_GOOGLE=y
# CONFIG_NET_VENDOR_INTEL is not set
# CONFIG_NET_VENDOR_LITEX is not set
# CONFIG_NET_VENDOR_MARVELL is not set
+CONFIG_NET_VENDOR_MELLANOX=y
# CONFIG_NET_VENDOR_MICREL is not set
# CONFIG_NET_VENDOR_MICROCHIP is not set
# CONFIG_NET_VENDOR_MICROSEMI is not set
@@ -3982,6 +4012,7 @@ CONFIG_NF_REJECT_IPV6=m
# CONFIG_NFSD_BLOCKLAYOUT is not set
# CONFIG_NFSD_FLEXFILELAYOUT is not set
CONFIG_NFS_DISABLE_UDP_SUPPORT=y
+# CONFIG_NFSD_LEGACY_CLIENT_TRACKING is not set
CONFIG_NFSD=m
CONFIG_NFSD_PNFS=y
CONFIG_NFSD_SCSILAYOUT=y
@@ -4128,6 +4159,7 @@ CONFIG_NOUVEAU_DEBUG_PUSH=y
# CONFIG_NOUVEAU_LEGACY_CTX_SUPPORT is not set
# CONFIG_NOZOMI is not set
CONFIG_NR_CPUS=512
+# CONFIG_NSM is not set
# CONFIG_NTB_AMD is not set
# CONFIG_NTB_EPF is not set
# CONFIG_NTB_IDT is not set
@@ -4387,22 +4419,13 @@ CONFIG_PHY_BCM_SR_USB=m
# CONFIG_PHY_TUSB1210 is not set
# CONFIG_PI433 is not set
CONFIG_PID_NS=y
-CONFIG_PINCTRL_ALDERLAKE=m
-# CONFIG_PINCTRL_BROXTON is not set
-# CONFIG_PINCTRL_CHERRYVIEW is not set
# CONFIG_PINCTRL_CS42L43 is not set
# CONFIG_PINCTRL_CY8C95X0 is not set
-CONFIG_PINCTRL_ELKHARTLAKE=m
-CONFIG_PINCTRL_EMMITSBURG=m
# CONFIG_PINCTRL_EQUILIBRIUM is not set
-CONFIG_PINCTRL_ICELAKE=m
# CONFIG_PINCTRL_IPQ6018 is not set
# CONFIG_PINCTRL_IPQ8074 is not set
# CONFIG_PINCTRL is not set
-# CONFIG_PINCTRL_JASPERLAKE is not set
-CONFIG_PINCTRL_LAKEFIELD=m
# CONFIG_PINCTRL_LPASS_LPI is not set
-# CONFIG_PINCTRL_LYNXPOINT is not set
# CONFIG_PINCTRL_MCP23S08 is not set
# CONFIG_PINCTRL_MDM9615 is not set
# CONFIG_PINCTRL_MICROCHIP_SGPIO is not set
@@ -4688,8 +4711,8 @@ CONFIG_RD_GZIP=y
CONFIG_RD_LZ4=y
CONFIG_RD_LZMA=y
CONFIG_RD_LZO=y
-CONFIG_RDMA_RXE=m
-CONFIG_RDMA_SIW=m
+# CONFIG_RDMA_RXE is not set
+# CONFIG_RDMA_SIW is not set
# CONFIG_RDS is not set
CONFIG_RD_XZ=y
CONFIG_RD_ZSTD=y
@@ -4730,6 +4753,7 @@ CONFIG_REGULATOR_FIXED_VOLTAGE=m
# CONFIG_REGULATOR_MAX8973 is not set
# CONFIG_REGULATOR_MCP16502 is not set
# CONFIG_REGULATOR_MT6311 is not set
+# CONFIG_REGULATOR_NETLINK_EVENTS is not set
# CONFIG_REGULATOR_PF8X00 is not set
# CONFIG_REGULATOR_PFUZE100 is not set
# CONFIG_REGULATOR_PV88060 is not set
@@ -4878,6 +4902,7 @@ CONFIG_RTC_DRV_M41T80_WDT=y
CONFIG_RTC_DRV_M48T35=m
CONFIG_RTC_DRV_M48T59=m
# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_MAX31335 is not set
CONFIG_RTC_DRV_MAX6900=m
# CONFIG_RTC_DRV_MAX6902 is not set
# CONFIG_RTC_DRV_MAX6916 is not set
@@ -4963,7 +4988,7 @@ CONFIG_RTW88=m
# CONFIG_RTW89_8851BE is not set
CONFIG_RTW89_8852AE=m
CONFIG_RTW89_8852BE=m
-# CONFIG_RTW89_8852CE is not set
+CONFIG_RTW89_8852CE=m
CONFIG_RTW89_DEBUGFS=y
CONFIG_RTW89_DEBUGMSG=y
CONFIG_RTW89=m
@@ -4989,6 +5014,7 @@ CONFIG_S390_UV_UAPI=y
CONFIG_S390_VMUR=m
# CONFIG_SAMPLE_ANDROID_BINDERFS is not set
# CONFIG_SAMPLE_AUXDISPLAY is not set
+# CONFIG_SAMPLE_CGROUP is not set
# CONFIG_SAMPLE_CONFIGFS is not set
# CONFIG_SAMPLE_CONNECTOR is not set
# CONFIG_SAMPLE_FANOTIFY_ERROR is not set
@@ -5168,7 +5194,7 @@ CONFIG_SECONDARY_TRUSTED_KEYRING=y
CONFIG_SECRETMEM=y
CONFIG_SECTION_MISMATCH_WARN_ONLY=y
# CONFIG_SECURITY_APPARMOR is not set
-# CONFIG_SECURITY_DMESG_RESTRICT is not set
+CONFIG_SECURITY_DMESG_RESTRICT=y
CONFIG_SECURITYFS=y
CONFIG_SECURITY_INFINIBAND=y
# CONFIG_SECURITY_LANDLOCK is not set
@@ -5261,6 +5287,7 @@ CONFIG_SENSORS_FSCHMD=m
# CONFIG_SENSORS_FTSTEUTATES is not set
CONFIG_SENSORS_G760A=m
# CONFIG_SENSORS_G762 is not set
+# CONFIG_SENSORS_GIGABYTE_WATERFORCE is not set
CONFIG_SENSORS_GL518SM=m
CONFIG_SENSORS_GL520SM=m
# CONFIG_SENSORS_GPIO_FAN is not set
@@ -5327,6 +5354,7 @@ CONFIG_SENSORS_LTC4215=m
CONFIG_SENSORS_LTC4245=m
# CONFIG_SENSORS_LTC4260 is not set
CONFIG_SENSORS_LTC4261=m
+# CONFIG_SENSORS_LTC4286 is not set
# CONFIG_SENSORS_MAX1111 is not set
# CONFIG_SENSORS_MAX127 is not set
# CONFIG_SENSORS_MAX15301 is not set
@@ -5354,9 +5382,11 @@ CONFIG_SENSORS_MAX8688=m
# CONFIG_SENSORS_MC34VR500 is not set
CONFIG_SENSORS_MCP3021=m
# CONFIG_SENSORS_MLXREG_FAN is not set
+# CONFIG_SENSORS_MP2856 is not set
# CONFIG_SENSORS_MP2888 is not set
# CONFIG_SENSORS_MP2975 is not set
# CONFIG_SENSORS_MP5023 is not set
+# CONFIG_SENSORS_MP5990 is not set
# CONFIG_SENSORS_MPQ7932 is not set
# CONFIG_SENSORS_MR75203 is not set
# CONFIG_SENSORS_NCT6683 is not set
@@ -5526,10 +5556,8 @@ CONFIG_SIGNATURE=y
CONFIG_SIPHASH_KUNIT_TEST=m
# CONFIG_SKGE is not set
# CONFIG_SKY2 is not set
-# CONFIG_SLAB_DEPRECATED is not set
CONFIG_SLAB_FREELIST_HARDENED=y
CONFIG_SLAB_FREELIST_RANDOM=y
-# CONFIG_SLAB is not set
# CONFIG_SLAB_MERGE_DEFAULT is not set
# CONFIG_SLIMBUS is not set
CONFIG_SLIP_COMPRESSED=y
@@ -6276,6 +6304,7 @@ CONFIG_SQUASHFS_ZSTD=y
# CONFIG_SSB is not set
# CONFIG_SSFDC is not set
# CONFIG_SSIF_IPMI_BMC is not set
+CONFIG_STACKDEPOT_MAX_FRAMES=64
CONFIG_STACK_HASH_ORDER=20
CONFIG_STACKINIT_KUNIT_TEST=m
CONFIG_STACKPROTECTOR_STRONG=y
@@ -6392,7 +6421,7 @@ CONFIG_TCP_CONG_DCTCP=m
# CONFIG_TCP_CONG_HSTCP is not set
CONFIG_TCP_CONG_HTCP=m
# CONFIG_TCP_CONG_HYBLA is not set
-# CONFIG_TCP_CONG_ILLINOIS is not set
+CONFIG_TCP_CONG_ILLINOIS=m
# CONFIG_TCP_CONG_LP is not set
CONFIG_TCP_CONG_NV=m
# CONFIG_TCP_CONG_SCALABLE is not set
@@ -6456,6 +6485,7 @@ CONFIG_TEST_STRING_HELPERS=m
# CONFIG_TEST_UUID is not set
CONFIG_TEST_VMALLOC=m
# CONFIG_TEST_XARRAY is not set
+# CONFIG_THERMAL_DEBUGFS is not set
# CONFIG_THERMAL_DEFAULT_GOV_FAIR_SHARE is not set
# CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE is not set
# CONFIG_THERMAL_DEFAULT_GOV_USER_SPACE is not set
@@ -6632,6 +6662,7 @@ CONFIG_TOUCHSCREEN_WACOM_I2C=m
CONFIG_TRACER_SNAPSHOT=y
CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS=y
# CONFIG_TRANSPARENT_HUGEPAGE_MADVISE is not set
+# CONFIG_TRANSPARENT_HUGEPAGE_NEVER is not set
CONFIG_TRANSPARENT_HUGEPAGE=y
CONFIG_TREE_RCU=y
# CONFIG_TRIM_UNUSED_KSYMS is not set
@@ -6672,6 +6703,7 @@ CONFIG_TYPEC_MUX_FSA4480=m
# CONFIG_TYPEC_MUX_NB7VPQ904M is not set
CONFIG_TYPEC_MUX_PI3USB30532=m
# CONFIG_TYPEC_MUX_PTN36502 is not set
+# CONFIG_TYPEC_MUX_WCD939X_USBSS is not set
# CONFIG_TYPEC_NVIDIA_ALTMODE is not set
# CONFIG_TYPEC_QCOM_PMIC is not set
# CONFIG_TYPEC_RT1711H is not set
@@ -7028,6 +7060,7 @@ CONFIG_VDPA_SIM_NET=m
# CONFIG_VDPA_USER is not set
# CONFIG_VEML6030 is not set
# CONFIG_VEML6070 is not set
+# CONFIG_VEML6075 is not set
CONFIG_VETH=m
# CONFIG_VF610_ADC is not set
# CONFIG_VF610_DAC is not set
@@ -7036,6 +7069,7 @@ CONFIG_VFAT_FS=m
CONFIG_VFIO_AP=m
CONFIG_VFIO_CCW=m
CONFIG_VFIO_CONTAINER=y
+# CONFIG_VFIO_DEBUGFS is not set
CONFIG_VFIO_DEVICE_CDEV=y
CONFIG_VFIO_GROUP=y
CONFIG_VFIO_IOMMU_TYPE1=m
@@ -7071,6 +7105,7 @@ CONFIG_VHOST_VSOCK=m
# CONFIG_VIDEO_ADV_DEBUG is not set
# CONFIG_VIDEO_AK7375 is not set
# CONFIG_VIDEO_AK881X is not set
+# CONFIG_VIDEO_ALVIUM_CSI2 is not set
# CONFIG_VIDEO_AR0521 is not set
CONFIG_VIDEO_AU0828=m
# CONFIG_VIDEO_AU0828_RC is not set
@@ -7119,6 +7154,8 @@ CONFIG_VIDEO_EM28XX_RC=m
# CONFIG_VIDEO_FB_IVTV_FORCE_PAT is not set
CONFIG_VIDEO_FB_IVTV=m
# CONFIG_VIDEO_FIXED_MINOR_RANGES is not set
+# CONFIG_VIDEO_GC0308 is not set
+# CONFIG_VIDEO_GC2145 is not set
# CONFIG_VIDEO_GO7007 is not set
# CONFIG_VIDEO_GS1662 is not set
CONFIG_VIDEO_HDPVR=m
@@ -7188,6 +7225,7 @@ CONFIG_VIDEO_IVTV=m
# CONFIG_VIDEO_OV5675 is not set
# CONFIG_VIDEO_OV5693 is not set
# CONFIG_VIDEO_OV5695 is not set
+# CONFIG_VIDEO_OV64A40 is not set
# CONFIG_VIDEO_OV6650 is not set
# CONFIG_VIDEO_OV7251 is not set
# CONFIG_VIDEO_OV7640 is not set
@@ -7240,6 +7278,7 @@ CONFIG_VIDEO_SAA7164=m
# CONFIG_VIDEO_TDA9840 is not set
# CONFIG_VIDEO_TEA6415C is not set
# CONFIG_VIDEO_TEA6420 is not set
+# CONFIG_VIDEO_THP7312 is not set
# CONFIG_VIDEO_THS7303 is not set
# CONFIG_VIDEO_THS8200 is not set
# CONFIG_VIDEO_TLV320AIC23B is not set
@@ -7255,6 +7294,7 @@ CONFIG_VIDEO_TUNER=m
# CONFIG_VIDEO_TW5864 is not set
# CONFIG_VIDEO_TW686X is not set
# CONFIG_VIDEO_TW68 is not set
+# CONFIG_VIDEO_TW9900 is not set
# CONFIG_VIDEO_TW9903 is not set
# CONFIG_VIDEO_TW9906 is not set
# CONFIG_VIDEO_TW9910 is not set
@@ -7289,6 +7329,7 @@ CONFIG_VIRTIO_NET=m
CONFIG_VIRTIO_PCI_LEGACY=y
# CONFIG_VIRTIO_PMEM is not set
CONFIG_VIRTIO_VDPA=m
+# CONFIG_VIRTIO_VFIO_PCI is not set
CONFIG_VIRTIO_VSOCKETS=m
CONFIG_VIRTIO=y
CONFIG_VIRTUALIZATION=y
@@ -7414,7 +7455,7 @@ CONFIG_XFS_POSIX_ACL=y
CONFIG_XFS_QUOTA=y
# CONFIG_XFS_RT is not set
# CONFIG_XFS_SUPPORT_ASCII_CI is not set
-CONFIG_XFS_SUPPORT_V4=y
+# CONFIG_XFS_SUPPORT_V4 is not set
CONFIG_XFS_WARN=y
# CONFIG_XGENE_DMA is not set
# CONFIG_XILINX_DMA is not set
@@ -7474,6 +7515,7 @@ CONFIG_ZRAM_DEF_COMP_LZORLE=y
CONFIG_ZRAM=m
CONFIG_ZRAM_MEMORY_TRACKING=y
# CONFIG_ZRAM_MULTI_COMP is not set
+CONFIG_ZRAM_TRACK_ENTRY_ACTIME=y
CONFIG_ZRAM_WRITEBACK=y
CONFIG_ZSMALLOC_CHAIN_SIZE=8
CONFIG_ZSMALLOC=m
@@ -7487,6 +7529,7 @@ CONFIG_ZSWAP_COMPRESSOR_DEFAULT_LZO=y
# CONFIG_ZSWAP_DEFAULT_ON is not set
# CONFIG_ZSWAP_EXCLUSIVE_LOADS_DEFAULT_ON is not set
# CONFIG_ZSWAP is not set
+# CONFIG_ZSWAP_SHRINKER_DEFAULT_ON is not set
# CONFIG_ZSWAP_ZPOOL_DEFAULT_Z3FOLD is not set
CONFIG_ZSWAP_ZPOOL_DEFAULT_ZBUD=y
# CONFIG_ZSWAP_ZPOOL_DEFAULT_ZSMALLOC is not set
@@ -7495,7 +7538,7 @@ CONFIG_ZENIFY=y
CONFIG_NTSYNC=y
CONFIG_USER_NS_UNPRIVILEGED=y
CONFIG_TCP_CONG_BBR2=m
-# CONFIG_SCHED_PDS is not set
+CONFIG_SCHED_BORE=y
CONFIG_HID_IPTS=m
CONFIG_HID_ITHC=m
CONFIG_SURFACE_BOOK1_DGPU_SWITCH=m
@@ -7504,11 +7547,8 @@ CONFIG_LEDS_TPS68470=m
CONFIG_SENSORS_SURFACE_FAN=m
CONFIG_SENSORS_SURFACE_TEMP=m
CONFIG_DRM_AMD_COLOR_STEAMDECK=y
-CONFIG_BMI323_I2C=m
-CONFIG_BMI323_SPI=m
CONFIG_DRM_APPLETBDRM=m
CONFIG_HID_APPLETB_BL=m
CONFIG_HID_APPLETB_KBD=m
CONFIG_HID_APPLE_MAGIC_BACKLIGHT=m
CONFIG_APPLE_BCE=m
-CONFIG_SCHED_BORE=y
diff --git a/SOURCES/kernel-s390x-fedora.config b/SOURCES/kernel-s390x-fedora.config
index 09288aa..d5cc1fb 100644
--- a/SOURCES/kernel-s390x-fedora.config
+++ b/SOURCES/kernel-s390x-fedora.config
@@ -104,6 +104,7 @@ CONFIG_AD5770R=m
# CONFIG_AD5791 is not set
# CONFIG_AD5933 is not set
# CONFIG_AD7091R5 is not set
+CONFIG_AD7091R8=m
CONFIG_AD7124=m
# CONFIG_AD7150 is not set
# CONFIG_AD7192 is not set
@@ -244,6 +245,7 @@ CONFIG_ANDROID_BINDERFS=y
# CONFIG_ANDROID_BINDER_IPC is not set
# CONFIG_ANDROID_BINDER_IPC_SELFTEST is not set
# CONFIG_ANON_VMA_NAME is not set
+# CONFIG_AOSONG_AGS02MA is not set
# CONFIG_APDS9300 is not set
# CONFIG_APDS9802ALS is not set
# CONFIG_APDS9960 is not set
@@ -288,7 +290,6 @@ CONFIG_ARM64_ERRATUM_2119858=y
CONFIG_ARM64_ERRATUM_2139208=y
CONFIG_ARM64_ERRATUM_2224489=y
CONFIG_ARM64_ERRATUM_2253138=y
-CONFIG_ARM64_ERRATUM_858921=y
CONFIG_ARM64_USE_LSE_ATOMICS=y
CONFIG_ARM_CMN=m
# CONFIG_ARM_MHU_V2 is not set
@@ -441,6 +442,7 @@ CONFIG_BACKLIGHT_LED=m
# CONFIG_BACKLIGHT_LM3639 is not set
CONFIG_BACKLIGHT_LP855X=m
# CONFIG_BACKLIGHT_LV5207LP is not set
+CONFIG_BACKLIGHT_MP3309C=m
CONFIG_BACKLIGHT_MT6370=m
# CONFIG_BACKLIGHT_PWM is not set
# CONFIG_BACKLIGHT_QCOM_WLED is not set
@@ -490,6 +492,7 @@ CONFIG_BCACHEFS_FS=m
# CONFIG_BCACHEFS_NO_LATENCY_ACCT is not set
CONFIG_BCACHEFS_POSIX_ACL=y
CONFIG_BCACHEFS_QUOTA=y
+CONFIG_BCACHEFS_SIX_OPTIMISTIC_SPIN=y
# CONFIG_BCACHEFS_TESTS is not set
CONFIG_BCACHE=m
CONFIG_BCM54140_PHY=m
@@ -569,6 +572,7 @@ CONFIG_BLK_DEV_SR=y
CONFIG_BLK_DEV_THROTTLING=y
CONFIG_BLKDEV_UBLK_LEGACY_OPCODES=y
CONFIG_BLK_DEV_UBLK=m
+CONFIG_BLK_DEV_WRITE_MOUNTED=y
CONFIG_BLK_DEV=y
CONFIG_BLK_DEV_ZONED=y
# CONFIG_BLK_INLINE_ENCRYPTION_FALLBACK is not set
@@ -589,6 +593,8 @@ CONFIG_BME680=m
# CONFIG_BMI088_ACCEL is not set
CONFIG_BMI160_I2C=m
CONFIG_BMI160_SPI=m
+CONFIG_BMI323_I2C=m
+CONFIG_BMI323_SPI=m
CONFIG_BMP280=m
CONFIG_BNA=m
CONFIG_BNX2=m
@@ -604,7 +610,6 @@ CONFIG_BONDING=m
# CONFIG_BOOT_CONFIG_FORCE is not set
CONFIG_BOOT_CONFIG=y
# CONFIG_BOOTPARAM_HARDLOCKUP_PANIC is not set
-# CONFIG_BOOTPARAM_HOTPLUG_CPU0 is not set
# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
CONFIG_BOOT_PRINTK_DELAY=y
@@ -732,7 +737,7 @@ CONFIG_BUILD_SALT=""
# CONFIG_CACHEFILES_DEBUG is not set
# CONFIG_CACHEFILES_ERROR_INJECTION is not set
CONFIG_CACHEFILES=m
-# CONFIG_CACHEFILES_ONDEMAND is not set
+CONFIG_CACHEFILES_ONDEMAND=y
CONFIG_CACHESTAT_SYSCALL=y
# CONFIG_CADENCE_WATCHDOG is not set
# CONFIG_CAIF is not set
@@ -1072,7 +1077,6 @@ CONFIG_CRYPTO_CAST5=m
CONFIG_CRYPTO_CAST6=m
CONFIG_CRYPTO_CBC=y
CONFIG_CRYPTO_CCM=y
-CONFIG_CRYPTO_CFB=y
CONFIG_CRYPTO_CHACHA20=m
CONFIG_CRYPTO_CHACHA20POLY1305=m
CONFIG_CRYPTO_CHACHA_S390=y
@@ -1101,8 +1105,9 @@ CONFIG_CRYPTO_DEV_HIFN_795X_RNG=y
# CONFIG_CRYPTO_DEV_HISI_SEC2 is not set
# CONFIG_CRYPTO_DEV_HISI_SEC is not set
# CONFIG_CRYPTO_DEV_HISI_TRNG is not set
-# CONFIG_CRYPTO_DEV_NITROX_CNN55XX is not set
+CONFIG_CRYPTO_DEV_NITROX_CNN55XX=m
# CONFIG_CRYPTO_DEV_OCTEONTX_CPT is not set
+CONFIG_CRYPTO_DEV_QAT_420XX=m
CONFIG_CRYPTO_DEV_QAT_4XXX=m
CONFIG_CRYPTO_DEV_QAT_C3XXX=m
CONFIG_CRYPTO_DEV_QAT_C3XXXVF=m
@@ -1158,7 +1163,6 @@ CONFIG_CRYPTO_MD4=m
CONFIG_CRYPTO_MD5=y
CONFIG_CRYPTO_MICHAEL_MIC=m
CONFIG_CRYPTO_NULL=y
-CONFIG_CRYPTO_OFB=y
CONFIG_CRYPTO_PAES_S390=m
CONFIG_CRYPTO_PCBC=m
CONFIG_CRYPTO_PCRYPT=m
@@ -1259,7 +1263,6 @@ CONFIG_DEBUG_FS_ALLOW_ALL=y
CONFIG_DEBUG_FS=y
# CONFIG_DEBUG_GPIO is not set
# CONFIG_DEBUG_HIGHMEM is not set
-# CONFIG_DEBUG_HOTPLUG_CPU0 is not set
CONFIG_DEBUG_INFO_BTF=y
# CONFIG_DEBUG_INFO_COMPRESSED is not set
CONFIG_DEBUG_INFO_COMPRESSED_NONE=y
@@ -1317,7 +1320,7 @@ CONFIG_DEBUG_SHIRQ=y
# CONFIG_DEBUG_VM_MAPLE_TREE is not set
# CONFIG_DEBUG_VM_PGFLAGS is not set
# CONFIG_DEBUG_VM_PGTABLE is not set
-# CONFIG_DEBUG_VM_RB is not set # revisit this if performance isn't horrible
+# CONFIG_DEBUG_VM_RB is not set
# CONFIG_DEBUG_VM_SHOOT_LAZIES is not set
# CONFIG_DEBUG_VM_VMACACHE is not set
# CONFIG_DEBUG_WQ_FORCE_RR_CPU is not set
@@ -1425,6 +1428,7 @@ CONFIG_DP83867_PHY=m
CONFIG_DP83869_PHY=m
# CONFIG_DP83TC811_PHY is not set
# CONFIG_DP83TD510_PHY is not set
+CONFIG_DP83TG720_PHY=m
# CONFIG_DPM_WATCHDOG is not set
CONFIG_DPOT_DAC=m
# CONFIG_DPS310 is not set
@@ -1514,6 +1518,7 @@ CONFIG_DRM_LONTIUM_LT9611UXC=m
# CONFIG_DRM_MSM_GPU_SUDO is not set
# CONFIG_DRM_MXSFB is not set
CONFIG_DRM_NOUVEAU_BACKLIGHT=y
+CONFIG_DRM_NOUVEAU_GSP_DEFAULT=y
# CONFIG_DRM_NOUVEAU is not set
# CONFIG_DRM_NOUVEAU_SVM is not set
# CONFIG_DRM_NWL_MIPI_DSI is not set
@@ -1535,6 +1540,7 @@ CONFIG_DRM_PANEL_FEIYANG_FY07024DI26A30D=m
# CONFIG_DRM_PANEL_HIMAX_HX8394 is not set
# CONFIG_DRM_PANEL_ILITEK_IL9322 is not set
# CONFIG_DRM_PANEL_ILITEK_ILI9341 is not set
+# CONFIG_DRM_PANEL_ILITEK_ILI9805 is not set
# CONFIG_DRM_PANEL_ILITEK_ILI9881C is not set
CONFIG_DRM_PANEL_ILITEK_ILI9882T=m
CONFIG_DRM_PANEL_INNOLUX_EJ030NA=m
@@ -1597,6 +1603,7 @@ CONFIG_DRM_PANEL_SEIKO_43WVF1G=m
# CONFIG_DRM_PANEL_SONY_TD4353_JDI is not set
CONFIG_DRM_PANEL_SONY_TULIP_TRULY_NT35521=m
CONFIG_DRM_PANEL_STARTEK_KD070FHFID015=m
+# CONFIG_DRM_PANEL_SYNAPTICS_R63353 is not set
# CONFIG_DRM_PANEL_TDO_TL070WSH30 is not set
# CONFIG_DRM_PANEL_TPO_TD028TTEC1 is not set
# CONFIG_DRM_PANEL_TPO_TD043MTEA1 is not set
@@ -1619,7 +1626,7 @@ CONFIG_DRM_RADEON_USERPTR=y
# CONFIG_DRM_RCAR_USE_LVDS is not set
# CONFIG_DRM_RCAR_USE_MIPI_DSI is not set
CONFIG_DRM_SAMSUNG_DSIM=m
-# CONFIG_DRM_SII902X is not set
+CONFIG_DRM_SII902X=m
CONFIG_DRM_SII9234=m
# CONFIG_DRM_SIL_SII8620 is not set
CONFIG_DRM_SIMPLE_BRIDGE=m
@@ -1650,6 +1657,7 @@ CONFIG_DRM_VKMS=m
CONFIG_DRM_VMWGFX_FBCON=y
CONFIG_DRM_VMWGFX=m
# CONFIG_DRM_VMWGFX_MKSSTATS is not set
+# CONFIG_DRM_XE is not set
# CONFIG_DRM_XEN_FRONTEND is not set
CONFIG_DRM=y
# CONFIG_DS1682 is not set
@@ -1750,6 +1758,7 @@ CONFIG_DVB_USB_VP702X=m
CONFIG_DVB_USB_VP7045=m
CONFIG_DVB_USB_ZD1301=m
# CONFIG_DW_AXI_DMAC is not set
+CONFIG_DWC_PCIE_PMU=m
CONFIG_DW_DMAC_CORE=m
# CONFIG_DW_DMAC is not set
CONFIG_DW_DMAC_PCI=m
@@ -1803,8 +1812,10 @@ CONFIG_EFI_ZBOOT=y
CONFIG_ELF_CORE=y
# CONFIG_EMBEDDED is not set
# CONFIG_ENA_ETHERNET is not set
+# CONFIG_ENC28J60 is not set
# CONFIG_ENCLOSURE_SERVICES is not set
CONFIG_ENCRYPTED_KEYS=y
+# CONFIG_ENCX24J600 is not set
CONFIG_ENERGY_MODEL=y
CONFIG_ENIC=m
CONFIG_ENVELOPE_DETECTOR=m
@@ -1813,6 +1824,7 @@ CONFIG_EPOLL=y
CONFIG_EQUALIZER=m
# CONFIG_EROFS_FS_DEBUG is not set
CONFIG_EROFS_FS=m
+CONFIG_EROFS_FS_ONDEMAND=y
# CONFIG_EROFS_FS_PCPU_KTHREAD is not set
CONFIG_EROFS_FS_POSIX_ACL=y
CONFIG_EROFS_FS_SECURITY=y
@@ -1891,7 +1903,6 @@ CONFIG_FAT_KUNIT_TEST=m
# CONFIG_FB_3DFX is not set
# CONFIG_FB_ARC is not set
# CONFIG_FB_ARK is not set
-# CONFIG_FB_ARMCLCD is not set
# CONFIG_FB_ASILIANT is not set
# CONFIG_FB_ATY128 is not set
# CONFIG_FB_ATY is not set
@@ -1912,7 +1923,6 @@ CONFIG_FB_EFI=y
# CONFIG_FB_IMX is not set
# CONFIG_FB is not set
# CONFIG_FB_KYRO is not set
-# CONFIG_FB_LE80578 is not set
# CONFIG_FB_MATROX_G is not set
# CONFIG_FB_MATROX_I2C is not set
# CONFIG_FB_MATROX is not set
@@ -2003,8 +2013,8 @@ CONFIG_FRAME_POINTER=y
CONFIG_FRAME_WARN=2048
CONFIG_FRONTSWAP=y
# CONFIG_FSCACHE_DEBUG is not set
-CONFIG_FSCACHE=m
CONFIG_FSCACHE_STATS=y
+CONFIG_FSCACHE=y
CONFIG_FS_DAX=y
CONFIG_FS_ENCRYPTION_INLINE_CRYPT=y
CONFIG_FS_ENCRYPTION=y
@@ -2182,8 +2192,8 @@ CONFIG_HASHTABLE_KUNIT_TEST=m
CONFIG_HD44780=m
# CONFIG_HDC100X is not set
CONFIG_HDC2010=m
+# CONFIG_HDC3020 is not set
CONFIG_HEADERS_INSTALL=y
-# CONFIG_HERMES is not set
CONFIG_HFS_FS=m
CONFIG_HFSPLUS_FS=m
CONFIG_HI6421V600_IRQ=m
@@ -2250,6 +2260,7 @@ CONFIG_HID_MACALLY=m
CONFIG_HID_MAGICMOUSE=m
CONFIG_HID_MALTRON=m
CONFIG_HID_MAYFLASH=m
+# CONFIG_HID_MCP2200 is not set
CONFIG_HID_MCP2221=m
CONFIG_HID_MEGAWORLD_FF=m
CONFIG_HID_MICROSOFT=m
@@ -2337,7 +2348,6 @@ CONFIG_HMC425=m
# CONFIG_HMC6352 is not set
CONFIG_HMC_DRV=m
CONFIG_HOLTEK_FF=y
-# CONFIG_HOSTAP is not set
CONFIG_HOTPLUG_CPU=y
CONFIG_HOTPLUG_PCI_ACPI_IBM=m
CONFIG_HOTPLUG_PCI_ACPI=y
@@ -2352,6 +2362,7 @@ CONFIG_HOTPLUG_PCI=y
# CONFIG_HP_ILO is not set
CONFIG_HSA_AMD_SVM=y
CONFIG_HSA_AMD=y
+# CONFIG_HSC030PA is not set
# CONFIG_HSI is not set
CONFIG_HSR=m
# CONFIG_HSU_DMA is not set
@@ -2486,6 +2497,7 @@ CONFIG_I40EVF=m
# CONFIG_I8K is not set
# CONFIG_IAQCORE is not set
CONFIG_IBM_PARTITION=y
+CONFIG_ICE_HWMON=y
CONFIG_ICE_HWTS=y
CONFIG_ICE=m
CONFIG_ICE_SWITCHDEV=y
@@ -2941,6 +2953,7 @@ CONFIG_ISCSI_TCP=m
# CONFIG_ISL29020 is not set
# CONFIG_ISL29125 is not set
# CONFIG_ISL29501 is not set
+# CONFIG_ISL76682 is not set
# CONFIG_ISM is not set
CONFIG_ISO9660_FS=m
CONFIG_IS_SIGNED_TYPE_KUNIT_TEST=m
@@ -3014,6 +3027,7 @@ CONFIG_JOYSTICK_PSXPAD_SPI_FF=y
CONFIG_JOYSTICK_PSXPAD_SPI=m
CONFIG_JOYSTICK_PXRC=m
CONFIG_JOYSTICK_QWIIC=m
+# CONFIG_JOYSTICK_SEESAW is not set
# CONFIG_JOYSTICK_SENSEHAT is not set
CONFIG_JOYSTICK_SIDEWINDER=m
# CONFIG_JOYSTICK_SPACEBALL is not set
@@ -3034,6 +3048,7 @@ CONFIG_KALLSYMS_ALL=y
# CONFIG_KALLSYMS_SELFTEST is not set
CONFIG_KALLSYMS=y
# CONFIG_KARMA_PARTITION is not set
+# CONFIG_KASAN_EXTRA_INFO is not set
# CONFIG_KASAN is not set
# CONFIG_KASAN_MODULE_TEST is not set
# CONFIG_KASAN_VMALLOC is not set
@@ -3137,6 +3152,9 @@ CONFIG_L2TP_ETH=m
CONFIG_L2TP_IP=m
CONFIG_L2TP=m
CONFIG_L2TP_V3=y
+CONFIG_LAN743X=m
+CONFIG_LAN966X_DCB=y
+CONFIG_LAN966X_SWITCH=m
# CONFIG_LAPB is not set
CONFIG_LATENCYTOP=y
# CONFIG_LATTICE_ECP3_CONFIG is not set
@@ -3198,6 +3216,7 @@ CONFIG_LEDS_LP50XX=m
# CONFIG_LEDS_LP55XX_COMMON is not set
# CONFIG_LEDS_LP8860 is not set
CONFIG_LEDS_LT3593=m
+CONFIG_LEDS_MAX5970=m
CONFIG_LEDS_MAX77650=m
CONFIG_LEDS_MLXCPLD=m
CONFIG_LEDS_MLXREG=m
@@ -3319,6 +3338,7 @@ CONFIG_LTC2983=m
# CONFIG_LTO_CLANG_FULL is not set
# CONFIG_LTO_CLANG_THIN is not set
CONFIG_LTO_NONE=y
+# CONFIG_LTR390 is not set
CONFIG_LTR501=m
CONFIG_LTRF216A=m
CONFIG_LV0104CS=m
@@ -3387,6 +3407,7 @@ CONFIG_MAX30208=m
CONFIG_MAX31827=m
CONFIG_MAX31856=m
CONFIG_MAX31865=m
+CONFIG_MAX34408=m
# CONFIG_MAX44000 is not set
CONFIG_MAX44009=m
# CONFIG_MAX517 is not set
@@ -3416,7 +3437,9 @@ CONFIG_MCP41010=m
# CONFIG_MCP4531 is not set
# CONFIG_MCP4725 is not set
CONFIG_MCP4728=m
+CONFIG_MCP4821=m
# CONFIG_MCP4922 is not set
+CONFIG_MCP9600=m
CONFIG_MCTP_SERIAL=m
# CONFIG_MCTP_TRANSPORT_I2C is not set
# CONFIG_MCTP_TRANSPORT_I3C is not set
@@ -3457,7 +3480,6 @@ CONFIG_MEDIA_CAMERA_SUPPORT=y
CONFIG_MEDIA_CEC_RC=y
CONFIG_MEDIA_CEC_SUPPORT=y
CONFIG_MEDIA_CONTROLLER_DVB=y
-CONFIG_MEDIA_CONTROLLER_REQUEST_API=y
CONFIG_MEDIA_CONTROLLER=y
CONFIG_MEDIA_DIGITAL_TV_SUPPORT=y
CONFIG_MEDIA_PCI_SUPPORT=y
@@ -3692,6 +3714,7 @@ CONFIG_MLX5_VDPA=y
CONFIG_MLX5_VFIO_PCI=m
CONFIG_MLX90614=m
CONFIG_MLX90632=m
+# CONFIG_MLX90635 is not set
# CONFIG_MLXBF_BOOTCTL is not set
# CONFIG_MLXBF_GIGE is not set
# CONFIG_MLXBF_PMC is not set
@@ -3933,6 +3956,7 @@ CONFIG_MTD_SPI_NOR_SWP_DISABLE_ON_VOLATILE=y
CONFIG_MTD_UBI_BEB_LIMIT=20
# CONFIG_MTD_UBI_BLOCK is not set
# CONFIG_MTD_UBI_FASTMAP is not set
+# CONFIG_MTD_UBI_FAULT_INJECTION is not set
# CONFIG_MTD_UBI_GLUEBI is not set
CONFIG_MTD_UBI=m
CONFIG_MTD_UBI_WL_THRESHOLD=4096
@@ -3963,7 +3987,6 @@ CONFIG_NATSEMI=m
CONFIG_NCN26000_PHY=m
CONFIG_NCSI_OEM_CMD_GET_MAC=y
CONFIG_NCSI_OEM_CMD_KEEP_PHY=y
-# CONFIG_ND_BLK is not set
# CONFIG_NDC_DIS_DYNAMIC_CACHING is not set
CONFIG_NE2K_PCI=m
# CONFIG_NET_9P_DEBUG is not set
@@ -4265,7 +4288,7 @@ CONFIG_NET_VENDOR_LITEX=y
# CONFIG_NET_VENDOR_MARVELL is not set
CONFIG_NET_VENDOR_MELLANOX=y
# CONFIG_NET_VENDOR_MICREL is not set
-# CONFIG_NET_VENDOR_MICROCHIP is not set
+CONFIG_NET_VENDOR_MICROCHIP=y
# CONFIG_NET_VENDOR_MICROSEMI is not set
CONFIG_NET_VENDOR_MICROSOFT=y
# CONFIG_NET_VENDOR_MYRI is not set
@@ -4388,6 +4411,7 @@ CONFIG_NF_REJECT_IPV6=m
CONFIG_NFSD_BLOCKLAYOUT=y
CONFIG_NFSD_FLEXFILELAYOUT=y
CONFIG_NFS_DISABLE_UDP_SUPPORT=y
+# CONFIG_NFSD_LEGACY_CLIENT_TRACKING is not set
CONFIG_NFSD=m
CONFIG_NFSD_PNFS=y
CONFIG_NFSD_SCSILAYOUT=y
@@ -4535,6 +4559,7 @@ CONFIG_NOUVEAU_DEBUG_DEFAULT=3
# CONFIG_NOZOMI is not set
CONFIG_NR_CPUS=512
CONFIG_NS83820=m
+CONFIG_NSM=m
CONFIG_NTB_EPF=m
# CONFIG_NTB is not set
# CONFIG_NTFS3_64BIT_CLUSTER is not set
@@ -4602,7 +4627,6 @@ CONFIG_OPT3001=m
CONFIG_OPT4001=m
CONFIG_OPTPROBES=y
CONFIG_ORANGEFS_FS=m
-CONFIG_ORINOCO_USB=m
# CONFIG_OSF_PARTITION is not set
CONFIG_OSNOISE_TRACER=y
CONFIG_OVERFLOW_KUNIT_TEST=m
@@ -4613,10 +4637,6 @@ CONFIG_OVERLAY_FS=m
CONFIG_OVERLAY_FS_REDIRECT_ALWAYS_FOLLOW=y
# CONFIG_OVERLAY_FS_REDIRECT_DIR is not set
# CONFIG_OVERLAY_FS_XINO_AUTO is not set
-CONFIG_P54_COMMON=m
-CONFIG_P54_PCI=m
-# CONFIG_P54_SPI is not set
-CONFIG_P54_USB=m
CONFIG_PA12203001=m
CONFIG_PACKET_DIAG=y
CONFIG_PACKET=y
@@ -4790,21 +4810,13 @@ CONFIG_PHY_RTK_RTD_USB3PHY=m
# CONFIG_PI433 is not set
CONFIG_PID_NS=y
# CONFIG_PINCONF is not set
-CONFIG_PINCTRL_ALDERLAKE=m
-# CONFIG_PINCTRL_CANNONLAKE is not set
-CONFIG_PINCTRL_CEDARFORK=m
CONFIG_PINCTRL_CS42L43=m
CONFIG_PINCTRL_CY8C95X0=m
-CONFIG_PINCTRL_ELKHARTLAKE=m
-CONFIG_PINCTRL_EMMITSBURG=m
# CONFIG_PINCTRL_EQUILIBRIUM is not set
# CONFIG_PINCTRL_IPQ6018 is not set
# CONFIG_PINCTRL_IPQ8074 is not set
# CONFIG_PINCTRL is not set
-# CONFIG_PINCTRL_JASPERLAKE is not set
-CONFIG_PINCTRL_LAKEFIELD=m
# CONFIG_PINCTRL_LPASS_LPI is not set
-# CONFIG_PINCTRL_LYNXPOINT is not set
# CONFIG_PINCTRL_MCP23S08 is not set
CONFIG_PINCTRL_MESON=y
# CONFIG_PINCTRL_MICROCHIP_SGPIO is not set
@@ -4825,6 +4837,7 @@ CONFIG_PINCTRL_SM8350_LPASS_LPI=m
# CONFIG_PINCTRL_SM8450 is not set
# CONFIG_PINCTRL_STMFX is not set
# CONFIG_PINCTRL_SX150X is not set
+CONFIG_PINCTRL_TPS6594=m
# CONFIG_PING is not set
# CONFIG_PINMUX is not set
CONFIG_PKCS7_MESSAGE_PARSER=y
@@ -5104,7 +5117,7 @@ CONFIG_RDS_TCP=m
CONFIG_RD_XZ=y
CONFIG_RD_ZSTD=y
# CONFIG_READABLE_ASM is not set
-# CONFIG_READ_ONLY_THP_FOR_FS is not set
+CONFIG_READ_ONLY_THP_FOR_FS=y
CONFIG_REALTEK_AUTOPM=y
CONFIG_REALTEK_PHY=m
# CONFIG_REED_SOLOMON_TEST is not set
@@ -5153,6 +5166,7 @@ CONFIG_REGULATOR_MP886X=m
# CONFIG_REGULATOR_MPQ7920 is not set
# CONFIG_REGULATOR_MT6311 is not set
CONFIG_REGULATOR_MT6370=m
+# CONFIG_REGULATOR_NETLINK_EVENTS is not set
# CONFIG_REGULATOR_PCA9450 is not set
# CONFIG_REGULATOR_PF8X00 is not set
# CONFIG_REGULATOR_PFUZE100 is not set
@@ -5339,6 +5353,7 @@ CONFIG_RTC_DRV_M41T94=m
CONFIG_RTC_DRV_M48T35=m
CONFIG_RTC_DRV_M48T59=m
# CONFIG_RTC_DRV_M48T86 is not set
+CONFIG_RTC_DRV_MAX31335=m
CONFIG_RTC_DRV_MAX6900=m
CONFIG_RTC_DRV_MAX6902=m
CONFIG_RTC_DRV_MAX6916=m
@@ -5375,6 +5390,7 @@ CONFIG_RTC_DRV_SD3078=m
# CONFIG_RTC_DRV_SNVS is not set
CONFIG_RTC_DRV_STK17TA8=m
# CONFIG_RTC_DRV_TEST is not set
+CONFIG_RTC_DRV_TPS6594=m
CONFIG_RTC_DRV_V3020=m
CONFIG_RTC_DRV_X1205=m
# CONFIG_RTC_DRV_ZYNQMP is not set
@@ -5708,6 +5724,7 @@ CONFIG_SENSORS_FSP_3Y=m
CONFIG_SENSORS_FTSTEUTATES=m
CONFIG_SENSORS_G760A=m
CONFIG_SENSORS_G762=m
+CONFIG_SENSORS_GIGABYTE_WATERFORCE=m
CONFIG_SENSORS_GL518SM=m
CONFIG_SENSORS_GL520SM=m
# CONFIG_SENSORS_GPIO_FAN is not set
@@ -5774,6 +5791,7 @@ CONFIG_SENSORS_LTC4222=m
CONFIG_SENSORS_LTC4245=m
CONFIG_SENSORS_LTC4260=m
CONFIG_SENSORS_LTC4261=m
+# CONFIG_SENSORS_LTC4286 is not set
CONFIG_SENSORS_MAX1111=m
# CONFIG_SENSORS_MAX127 is not set
# CONFIG_SENSORS_MAX15301 is not set
@@ -5801,10 +5819,12 @@ CONFIG_SENSORS_MAX8688=m
CONFIG_SENSORS_MC34VR500=m
CONFIG_SENSORS_MCP3021=m
CONFIG_SENSORS_MLXREG_FAN=m
+# CONFIG_SENSORS_MP2856 is not set
CONFIG_SENSORS_MP2888=m
CONFIG_SENSORS_MP2975=m
CONFIG_SENSORS_MP2975_REGULATOR=y
CONFIG_SENSORS_MP5023=m
+# CONFIG_SENSORS_MP5990 is not set
CONFIG_SENSORS_MPQ7932=m
CONFIG_SENSORS_MPQ7932_REGULATOR=y
CONFIG_SENSORS_MR75203=m
@@ -5984,10 +6004,8 @@ CONFIG_SKGE_GENESIS=y
CONFIG_SKGE=m
# CONFIG_SKY2_DEBUG is not set
CONFIG_SKY2=m
-# CONFIG_SLAB_DEPRECATED is not set
CONFIG_SLAB_FREELIST_HARDENED=y
CONFIG_SLAB_FREELIST_RANDOM=y
-# CONFIG_SLAB is not set
# CONFIG_SLAB_MERGE_DEFAULT is not set
# CONFIG_SLIMBUS is not set
CONFIG_SLIP_COMPRESSED=y
@@ -6759,6 +6777,7 @@ CONFIG_SSB_PCIHOST=y
CONFIG_SSB_SDIOHOST=y
# CONFIG_SSFDC is not set
CONFIG_SSIF_IPMI_BMC=m
+CONFIG_STACKDEPOT_MAX_FRAMES=64
CONFIG_STACK_HASH_ORDER=20
CONFIG_STACKINIT_KUNIT_TEST=m
CONFIG_STACKPROTECTOR_STRONG=y
@@ -6969,6 +6988,7 @@ CONFIG_TEST_SORT=m
# CONFIG_TEST_UUID is not set
CONFIG_TEST_VMALLOC=m
# CONFIG_TEST_XARRAY is not set
+# CONFIG_THERMAL_DEBUGFS is not set
# CONFIG_THERMAL_DEFAULT_GOV_BANG_BANG is not set
# CONFIG_THERMAL_DEFAULT_GOV_FAIR_SHARE is not set
CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y
@@ -7170,6 +7190,7 @@ CONFIG_TRACE_EVAL_MAP_FILE=y
CONFIG_TRACER_SNAPSHOT=y
# CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS is not set
# CONFIG_TRANSPARENT_HUGEPAGE is not set
+# CONFIG_TRANSPARENT_HUGEPAGE_NEVER is not set
# CONFIG_TRIM_UNUSED_KSYMS is not set
CONFIG_TRUSTED_KEYS_TEE=y
CONFIG_TRUSTED_KEYS_TPM=y
@@ -7216,6 +7237,7 @@ CONFIG_TYPEC_MUX_GPIO_SBU=m
CONFIG_TYPEC_MUX_NB7VPQ904M=m
CONFIG_TYPEC_MUX_PI3USB30532=m
CONFIG_TYPEC_MUX_PTN36502=m
+# CONFIG_TYPEC_MUX_WCD939X_USBSS is not set
CONFIG_TYPEC_NVIDIA_ALTMODE=m
# CONFIG_TYPEC_QCOM_PMIC is not set
# CONFIG_TYPEC_RT1711H is not set
@@ -7470,7 +7492,6 @@ CONFIG_USB_NET_NET1080=m
CONFIG_USB_NET_PLUSB=m
CONFIG_USB_NET_QMI_WWAN=m
CONFIG_USB_NET_RNDIS_HOST=m
-CONFIG_USB_NET_RNDIS_WLAN=m
CONFIG_USB_NET_SMSC75XX=m
CONFIG_USB_NET_SMSC95XX=m
CONFIG_USB_NET_SR9700=m
@@ -7610,7 +7631,6 @@ CONFIG_USB_XHCI_PCI=y
CONFIG_USB_XUSBATM=m
CONFIG_USB=y
CONFIG_USB_YUREX=m
-# CONFIG_USB_ZD1201 is not set
# CONFIG_USB_ZERO is not set
CONFIG_USB_ZR364XX=m
# CONFIG_USELIB is not set
@@ -7626,6 +7646,7 @@ CONFIG_V4L_MEM2MEM_DRIVERS=y
# CONFIG_V4L_PLATFORM_DRIVERS is not set
CONFIG_V4L_TEST_DRIVERS=y
CONFIG_VALIDATE_FS_PARSER=y
+CONFIG_VCAP=y
CONFIG_VCHIQ_CDEV=y
CONFIG_VCNL3020=m
# CONFIG_VCNL4000 is not set
@@ -7638,6 +7659,7 @@ CONFIG_VDPA_SIM_NET=m
CONFIG_VDPA_USER=m
CONFIG_VEML6030=m
# CONFIG_VEML6070 is not set
+# CONFIG_VEML6075 is not set
CONFIG_VETH=m
# CONFIG_VF610_ADC is not set
# CONFIG_VF610_DAC is not set
@@ -7645,6 +7667,7 @@ CONFIG_VFAT_FS=m
CONFIG_VFIO_AP=m
CONFIG_VFIO_CCW=m
CONFIG_VFIO_CONTAINER=y
+# CONFIG_VFIO_DEBUGFS is not set
# CONFIG_VFIO_DEVICE_CDEV is not set
CONFIG_VFIO_GROUP=y
CONFIG_VFIO_IOMMU_TYPE1=m
@@ -7683,6 +7706,7 @@ CONFIG_VIDEO_ADV7842=m
# CONFIG_VIDEO_ADV_DEBUG is not set
CONFIG_VIDEO_AK7375=m
CONFIG_VIDEO_AK881X=m
+# CONFIG_VIDEO_ALVIUM_CSI2 is not set
CONFIG_VIDEO_AR0521=m
CONFIG_VIDEO_AU0828=m
# CONFIG_VIDEO_AU0828_RC is not set
@@ -7731,6 +7755,8 @@ CONFIG_VIDEO_EM28XX_V4L2=m
CONFIG_VIDEO_ET8EK8=m
CONFIG_VIDEO_FB_IVTV=m
# CONFIG_VIDEO_FIXED_MINOR_RANGES is not set
+CONFIG_VIDEO_GC0308=m
+CONFIG_VIDEO_GC2145=m
CONFIG_VIDEO_GO7007_LOADER=m
CONFIG_VIDEO_GO7007=m
CONFIG_VIDEO_GO7007_USB=m
@@ -7801,6 +7827,7 @@ CONFIG_VIDEO_OV5670=m
CONFIG_VIDEO_OV5675=m
CONFIG_VIDEO_OV5693=m
CONFIG_VIDEO_OV5695=m
+CONFIG_VIDEO_OV64A40=m
CONFIG_VIDEO_OV6650=m
CONFIG_VIDEO_OV7251=m
CONFIG_VIDEO_OV7640=m
@@ -7857,6 +7884,7 @@ CONFIG_VIDEO_TDA9840=m
CONFIG_VIDEO_TEA6415C=m
CONFIG_VIDEO_TEA6420=m
# CONFIG_VIDEO_TEGRA_TPG is not set
+# CONFIG_VIDEO_THP7312 is not set
CONFIG_VIDEO_THS7303=m
CONFIG_VIDEO_THS8200=m
CONFIG_VIDEO_TLV320AIC23B=m
@@ -7872,6 +7900,7 @@ CONFIG_VIDEO_TW2804=m
# CONFIG_VIDEO_TW5864 is not set
CONFIG_VIDEO_TW686X=m
# CONFIG_VIDEO_TW68 is not set
+# CONFIG_VIDEO_TW9900 is not set
CONFIG_VIDEO_TW9903=m
CONFIG_VIDEO_TW9906=m
CONFIG_VIDEO_TW9910=m
@@ -7914,6 +7943,7 @@ CONFIG_VIRTIO_PCI_LEGACY=y
CONFIG_VIRTIO_PCI=y
# CONFIG_VIRTIO_PMEM is not set
CONFIG_VIRTIO_VDPA=m
+CONFIG_VIRTIO_VFIO_PCI=m
CONFIG_VIRTIO_VSOCKETS=m
CONFIG_VIRTIO=y
CONFIG_VIRTUALIZATION=y
@@ -7956,6 +7986,7 @@ CONFIG_VXLAN=m
# CONFIG_VZ89X is not set
CONFIG_W1_CON=y
# CONFIG_W1 is not set
+# CONFIG_W1_MASTER_AMD_AXI is not set
# CONFIG_W1_MASTER_DS1WM is not set
CONFIG_W1_MASTER_DS2482=m
CONFIG_W1_MASTER_DS2490=m
@@ -8032,7 +8063,7 @@ CONFIG_WLAN_VENDOR_ATH=y
CONFIG_WLAN_VENDOR_BROADCOM=y
# CONFIG_WLAN_VENDOR_CISCO is not set
CONFIG_WLAN_VENDOR_INTEL=y
-CONFIG_WLAN_VENDOR_INTERSIL=y
+# CONFIG_WLAN_VENDOR_INTERSIL is not set
CONFIG_WLAN_VENDOR_MARVELL=y
CONFIG_WLAN_VENDOR_MEDIATEK=y
CONFIG_WLAN_VENDOR_MICROCHIP=y
@@ -8150,6 +8181,7 @@ CONFIG_ZRAM_DEF_COMP_LZORLE=y
CONFIG_ZRAM=m
# CONFIG_ZRAM_MEMORY_TRACKING is not set
CONFIG_ZRAM_MULTI_COMP=y
+# CONFIG_ZRAM_TRACK_ENTRY_ACTIME is not set
# CONFIG_ZRAM_WRITEBACK is not set
CONFIG_ZSMALLOC_CHAIN_SIZE=8
# CONFIG_ZSMALLOC_STAT is not set
@@ -8162,6 +8194,7 @@ CONFIG_ZSWAP_COMPRESSOR_DEFAULT_LZO=y
# CONFIG_ZSWAP_COMPRESSOR_DEFAULT_ZSTD is not set
# CONFIG_ZSWAP_DEFAULT_ON is not set
CONFIG_ZSWAP_EXCLUSIVE_LOADS_DEFAULT_ON=y
+CONFIG_ZSWAP_SHRINKER_DEFAULT_ON=y
CONFIG_ZSWAP=y
# CONFIG_ZSWAP_ZPOOL_DEFAULT_Z3FOLD is not set
CONFIG_ZSWAP_ZPOOL_DEFAULT_ZBUD=y
@@ -8171,7 +8204,7 @@ CONFIG_ZENIFY=y
CONFIG_NTSYNC=y
CONFIG_USER_NS_UNPRIVILEGED=y
CONFIG_TCP_CONG_BBR2=m
-# CONFIG_SCHED_PDS is not set
+CONFIG_SCHED_BORE=y
CONFIG_HID_IPTS=m
CONFIG_HID_ITHC=m
CONFIG_SURFACE_BOOK1_DGPU_SWITCH=m
@@ -8180,11 +8213,8 @@ CONFIG_LEDS_TPS68470=m
CONFIG_SENSORS_SURFACE_FAN=m
CONFIG_SENSORS_SURFACE_TEMP=m
CONFIG_DRM_AMD_COLOR_STEAMDECK=y
-CONFIG_BMI323_I2C=m
-CONFIG_BMI323_SPI=m
CONFIG_DRM_APPLETBDRM=m
CONFIG_HID_APPLETB_BL=m
CONFIG_HID_APPLETB_KBD=m
CONFIG_HID_APPLE_MAGIC_BACKLIGHT=m
CONFIG_APPLE_BCE=m
-CONFIG_SCHED_BORE=y
diff --git a/SOURCES/kernel-s390x-rhel.config b/SOURCES/kernel-s390x-rhel.config
index ddca6fa..4bd684d 100644
--- a/SOURCES/kernel-s390x-rhel.config
+++ b/SOURCES/kernel-s390x-rhel.config
@@ -84,6 +84,7 @@ CONFIG_ACPI_VIDEO=m
# CONFIG_AD5791 is not set
# CONFIG_AD5933 is not set
# CONFIG_AD7091R5 is not set
+# CONFIG_AD7091R8 is not set
# CONFIG_AD7124 is not set
# CONFIG_AD7150 is not set
# CONFIG_AD7192 is not set
@@ -205,11 +206,13 @@ CONFIG_AMD_HSMP=m
CONFIG_AMD_PMC=m
# CONFIG_AMD_PTDMA is not set
# CONFIG_AMDTEE is not set
+# CONFIG_AMD_WBRF is not set
# CONFIG_AMIGA_PARTITION is not set
CONFIG_AMPERE_ERRATUM_AC03_CPU_38=y
# CONFIG_AMT is not set
# CONFIG_ANDROID_BINDER_IPC is not set
# CONFIG_ANON_VMA_NAME is not set
+# CONFIG_AOSONG_AGS02MA is not set
# CONFIG_APDS9300 is not set
# CONFIG_APDS9802ALS is not set
# CONFIG_APDS9960 is not set
@@ -365,6 +368,7 @@ CONFIG_BACKLIGHT_LED=m
# CONFIG_BACKLIGHT_LM3639 is not set
CONFIG_BACKLIGHT_LP855X=m
# CONFIG_BACKLIGHT_LV5207LP is not set
+# CONFIG_BACKLIGHT_MP3309C is not set
# CONFIG_BACKLIGHT_PWM is not set
# CONFIG_BACKLIGHT_QCOM_WLED is not set
# CONFIG_BACKLIGHT_SAHARA is not set
@@ -458,6 +462,7 @@ CONFIG_BLK_DEV_SR=m
# CONFIG_BLK_DEV_THROTTLING_LOW is not set
CONFIG_BLK_DEV_THROTTLING=y
# CONFIG_BLK_DEV_UBLK is not set
+CONFIG_BLK_DEV_WRITE_MOUNTED=y
CONFIG_BLK_DEV=y
CONFIG_BLK_DEV_ZONED=y
# CONFIG_BLK_INLINE_ENCRYPTION is not set
@@ -477,6 +482,8 @@ CONFIG_BLOCK=y
# CONFIG_BMI088_ACCEL is not set
# CONFIG_BMI160_I2C is not set
# CONFIG_BMI160_SPI is not set
+CONFIG_BMI323_I2C=m
+CONFIG_BMI323_SPI=m
# CONFIG_BMP280 is not set
# CONFIG_BNA is not set
CONFIG_BNX2=m
@@ -492,7 +499,6 @@ CONFIG_BONDING=m
# CONFIG_BOOT_CONFIG_FORCE is not set
CONFIG_BOOT_CONFIG=y
# CONFIG_BOOTPARAM_HARDLOCKUP_PANIC is not set
-# CONFIG_BOOTPARAM_HOTPLUG_CPU0 is not set
# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
CONFIG_BOOT_PRINTK_DELAY=y
@@ -909,7 +915,6 @@ CONFIG_CRYPTO_CAST5=m
CONFIG_CRYPTO_CAST6=m
CONFIG_CRYPTO_CBC=y
CONFIG_CRYPTO_CCM=y
-CONFIG_CRYPTO_CFB=y
CONFIG_CRYPTO_CHACHA20=m
CONFIG_CRYPTO_CHACHA20POLY1305=m
CONFIG_CRYPTO_CHACHA_S390=y
@@ -941,6 +946,7 @@ CONFIG_CRYPTO_DEV_HISI_SEC=m
# CONFIG_CRYPTO_DEV_HISTB_TRNG is not set
CONFIG_CRYPTO_DEV_NITROX_CNN55XX=m
# CONFIG_CRYPTO_DEV_OCTEONTX_CPT is not set
+# CONFIG_CRYPTO_DEV_QAT_420XX is not set
# CONFIG_CRYPTO_DEV_QAT_4XXX is not set
# CONFIG_CRYPTO_DEV_QAT_C3XXX is not set
# CONFIG_CRYPTO_DEV_QAT_C3XXXVF is not set
@@ -998,7 +1004,6 @@ CONFIG_CRYPTO_MD4=m
CONFIG_CRYPTO_MD5=y
CONFIG_CRYPTO_MICHAEL_MIC=m
CONFIG_CRYPTO_NULL=y
-CONFIG_CRYPTO_OFB=y
CONFIG_CRYPTO_PAES_S390=m
CONFIG_CRYPTO_PCBC=m
CONFIG_CRYPTO_PCRYPT=m
@@ -1150,7 +1155,7 @@ CONFIG_DEBUG_SHIRQ=y
# CONFIG_DEBUG_VM_MAPLE_TREE is not set
# CONFIG_DEBUG_VM_PGFLAGS is not set
# CONFIG_DEBUG_VM_PGTABLE is not set
-# CONFIG_DEBUG_VM_RB is not set # revisit this if performance isn't horrible
+# CONFIG_DEBUG_VM_RB is not set
# CONFIG_DEBUG_VM_SHOOT_LAZIES is not set
# CONFIG_DEBUG_VM_VMACACHE is not set
# CONFIG_DEBUG_WQ_FORCE_RR_CPU is not set
@@ -1264,6 +1269,7 @@ CONFIG_DP83867_PHY=m
# CONFIG_DP83869_PHY is not set
CONFIG_DP83TC811_PHY=m
# CONFIG_DP83TD510_PHY is not set
+# CONFIG_DP83TG720_PHY is not set
# CONFIG_DPM_WATCHDOG is not set
# CONFIG_DPOT_DAC is not set
# CONFIG_DPS310 is not set
@@ -1321,6 +1327,7 @@ CONFIG_DRM_I915_COMPRESS_ERROR=y
# CONFIG_DRM_I915_DEBUG_MMIO is not set
# CONFIG_DRM_I915_DEBUG_RUNTIME_PM is not set
# CONFIG_DRM_I915_DEBUG_VBLANK_EVADE is not set
+# CONFIG_DRM_I915_DEBUG_WAKEREF is not set
CONFIG_DRM_I915_FENCE_TIMEOUT=10000
CONFIG_DRM_I915_HEARTBEAT_INTERVAL=2500
# CONFIG_DRM_I915_LOW_LEVEL_TRACEPOINTS is not set
@@ -1363,6 +1370,7 @@ CONFIG_DRM=m
# CONFIG_DRM_MGAG200 is not set
# CONFIG_DRM_MXSFB is not set
CONFIG_DRM_NOUVEAU_BACKLIGHT=y
+# CONFIG_DRM_NOUVEAU_GSP_DEFAULT is not set
# CONFIG_DRM_NOUVEAU is not set
# CONFIG_DRM_NWL_MIPI_DSI is not set
# CONFIG_DRM_NXP_PTN3460 is not set
@@ -1383,6 +1391,7 @@ CONFIG_DRM_NOUVEAU_BACKLIGHT=y
# CONFIG_DRM_PANEL_HIMAX_HX8394 is not set
# CONFIG_DRM_PANEL_ILITEK_IL9322 is not set
# CONFIG_DRM_PANEL_ILITEK_ILI9341 is not set
+# CONFIG_DRM_PANEL_ILITEK_ILI9805 is not set
# CONFIG_DRM_PANEL_ILITEK_ILI9881C is not set
# CONFIG_DRM_PANEL_ILITEK_ILI9882T is not set
# CONFIG_DRM_PANEL_INNOLUX_EJ030NA is not set
@@ -1443,6 +1452,7 @@ CONFIG_DRM_NOUVEAU_BACKLIGHT=y
# CONFIG_DRM_PANEL_SONY_TD4353_JDI is not set
# CONFIG_DRM_PANEL_SONY_TULIP_TRULY_NT35521 is not set
# CONFIG_DRM_PANEL_STARTEK_KD070FHFID015 is not set
+# CONFIG_DRM_PANEL_SYNAPTICS_R63353 is not set
# CONFIG_DRM_PANEL_TDO_TL070WSH30 is not set
# CONFIG_DRM_PANEL_TPO_TD028TTEC1 is not set
# CONFIG_DRM_PANEL_TPO_TD043MTEA1 is not set
@@ -1457,6 +1467,7 @@ CONFIG_DRM_NOUVEAU_BACKLIGHT=y
# CONFIG_DRM_PARADE_PS8622 is not set
# CONFIG_DRM_PARADE_PS8640 is not set
# CONFIG_DRM_PL111 is not set
+# CONFIG_DRM_POWERVR is not set
# CONFIG_DRM_QXL is not set
# CONFIG_DRM_RADEON is not set
CONFIG_DRM_RADEON_USERPTR=y
@@ -1495,6 +1506,7 @@ CONFIG_DRM_VKMS=m
CONFIG_DRM_VMWGFX_FBCON=y
CONFIG_DRM_VMWGFX=m
# CONFIG_DRM_VMWGFX_MKSSTATS is not set
+# CONFIG_DRM_XE is not set
# CONFIG_DRM_XEN_FRONTEND is not set
# CONFIG_DS1682 is not set
# CONFIG_DS1803 is not set
@@ -1592,6 +1604,7 @@ CONFIG_DVB_USB_VP702X=m
CONFIG_DVB_USB_VP7045=m
# CONFIG_DVB_USB_ZD1301 is not set
# CONFIG_DW_AXI_DMAC is not set
+# CONFIG_DWC_PCIE_PMU is not set
# CONFIG_DW_DMAC is not set
# CONFIG_DW_DMAC_PCI is not set
# CONFIG_DW_EDMA is not set
@@ -1658,6 +1671,7 @@ CONFIG_EPOLL=y
# CONFIG_EQUALIZER is not set
# CONFIG_EROFS_FS_DEBUG is not set
CONFIG_EROFS_FS=m
+# CONFIG_EROFS_FS_ONDEMAND is not set
CONFIG_EROFS_FS_POSIX_ACL=y
CONFIG_EROFS_FS_SECURITY=y
CONFIG_EROFS_FS_XATTR=y
@@ -1721,7 +1735,6 @@ CONFIG_FAT_KUNIT_TEST=m
# CONFIG_FB_3DFX is not set
# CONFIG_FB_ARC is not set
# CONFIG_FB_ARK is not set
-# CONFIG_FB_ARMCLCD is not set
# CONFIG_FB_ASILIANT is not set
# CONFIG_FB_ATY128 is not set
# CONFIG_FB_ATY is not set
@@ -1742,7 +1755,6 @@ CONFIG_FB_EFI=y
# CONFIG_FB_IMX is not set
# CONFIG_FB is not set
# CONFIG_FB_KYRO is not set
-# CONFIG_FB_LE80578 is not set
# CONFIG_FB_MATROX_G is not set
# CONFIG_FB_MATROX_I2C is not set
# CONFIG_FB_MATROX is not set
@@ -1808,11 +1820,12 @@ CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
CONFIG_FRAMEBUFFER_CONSOLE=y
# CONFIG_FRAME_POINTER is not set
+# CONFIG_FRAMER is not set
CONFIG_FRAME_WARN=2048
CONFIG_FRONTSWAP=y
# CONFIG_FSCACHE_DEBUG is not set
-CONFIG_FSCACHE=m
CONFIG_FSCACHE_STATS=y
+CONFIG_FSCACHE=y
CONFIG_FS_DAX=y
# CONFIG_FS_ENCRYPTION is not set
# CONFIG_FSI is not set
@@ -1988,6 +2001,7 @@ CONFIG_HASHTABLE_KUNIT_TEST=m
# CONFIG_HD44780 is not set
# CONFIG_HDC100X is not set
# CONFIG_HDC2010 is not set
+# CONFIG_HDC3020 is not set
CONFIG_HDLC_CISCO=m
CONFIG_HDLC_FR=m
CONFIG_HDLC=m
@@ -2061,6 +2075,7 @@ CONFIG_HID_LOGITECH=m
CONFIG_HID_MAGICMOUSE=y
# CONFIG_HID_MALTRON is not set
# CONFIG_HID_MAYFLASH is not set
+# CONFIG_HID_MCP2200 is not set
# CONFIG_HID_MCP2221 is not set
# CONFIG_HID_MEGAWORLD_FF is not set
CONFIG_HID_MICROSOFT=m
@@ -2160,6 +2175,7 @@ CONFIG_HOTPLUG_PCI=y
CONFIG_HSA_AMD_P2P=y
CONFIG_HSA_AMD_SVM=y
CONFIG_HSA_AMD=y
+# CONFIG_HSC030PA is not set
# CONFIG_HSI is not set
CONFIG_HSR=m
# CONFIG_HT16K33 is not set
@@ -2292,6 +2308,7 @@ CONFIG_IAVF=m
# CONFIG_IBM_ASM is not set
CONFIG_IBMASR=m
CONFIG_IBM_PARTITION=y
+CONFIG_ICE_HWMON=y
CONFIG_ICE_HWTS=y
CONFIG_ICE=m
CONFIG_ICE_SWITCHDEV=y
@@ -2399,6 +2416,7 @@ CONFIG_INFINIBAND_ADDR_TRANS=y
CONFIG_INFINIBAND_CXGB4=m
CONFIG_INFINIBAND_EFA=m
# CONFIG_INFINIBAND_ERDMA is not set
+# CONFIG_INFINIBAND_HFI1 is not set
# CONFIG_INFINIBAND_HNS is not set
CONFIG_INFINIBAND_IPOIB_CM=y
# CONFIG_INFINIBAND_IPOIB_DEBUG_DATA is not set
@@ -2413,14 +2431,15 @@ CONFIG_INFINIBAND=m
# CONFIG_INFINIBAND_ON_DEMAND_PAGING is not set
CONFIG_INFINIBAND_QEDR=m
# CONFIG_INFINIBAND_QIB is not set
-CONFIG_INFINIBAND_RDMAVT=m
+# CONFIG_INFINIBAND_RDMAVT is not set
# CONFIG_INFINIBAND_RTRS_CLIENT is not set
# CONFIG_INFINIBAND_RTRS_SERVER is not set
# CONFIG_INFINIBAND_SRP is not set
# CONFIG_INFINIBAND_SRPT is not set
CONFIG_INFINIBAND_USER_ACCESS=m
# CONFIG_INFINIBAND_USER_MAD is not set
-CONFIG_INFINIBAND_USNIC=m
+# CONFIG_INFINIBAND_USNIC is not set
+# CONFIG_INFINIBAND_VMWARE_PVRDMA is not set
# CONFIG_INFTL is not set
# CONFIG_INIT_ON_ALLOC_DEFAULT_ON is not set
# CONFIG_INIT_ON_FREE_DEFAULT_ON is not set
@@ -2505,10 +2524,11 @@ CONFIG_INTEL_IOMMU_PERF_EVENTS=y
# CONFIG_INTEL_ISH_FIRMWARE_DOWNLOADER is not set
# CONFIG_INTEL_ISHTP_ECLITE is not set
# CONFIG_INTEL_LDMA is not set
-# CONFIG_INTEL_MEI_GSC_PROXY is not set
+CONFIG_INTEL_MEI_GSC_PROXY=m
# CONFIG_INTEL_MEI_HDCP is not set
# CONFIG_INTEL_MEI_PXP is not set
# CONFIG_INTEL_MEI_TXE is not set
+# CONFIG_INTEL_MEI_VSC_HW is not set
# CONFIG_INTEL_PMC_CORE is not set
# CONFIG_INTEL_PMT_CLASS is not set
# CONFIG_INTEL_PMT_CRASHLOG is not set
@@ -2742,6 +2762,7 @@ CONFIG_ISCSI_TCP=m
# CONFIG_ISL29020 is not set
# CONFIG_ISL29125 is not set
# CONFIG_ISL29501 is not set
+# CONFIG_ISL76682 is not set
CONFIG_ISM=m
CONFIG_ISO9660_FS=m
CONFIG_IS_SIGNED_TYPE_KUNIT_TEST=m
@@ -2784,6 +2805,7 @@ CONFIG_KALLSYMS_BASE_RELATIVE=y
# CONFIG_KALLSYMS_SELFTEST is not set
CONFIG_KALLSYMS=y
# CONFIG_KARMA_PARTITION is not set
+# CONFIG_KASAN_EXTRA_INFO is not set
# CONFIG_KASAN is not set
# CONFIG_KASAN_MODULE_TEST is not set
# CONFIG_KASAN_VMALLOC is not set
@@ -2874,11 +2896,13 @@ CONFIG_KUNIT_TEST=m
CONFIG_KVM_AMD_SEV=y
# CONFIG_KVM_BOOK3S_HV_P8_TIMING is not set
# CONFIG_KVM_BOOK3S_HV_P9_TIMING is not set
+CONFIG_KVM_HYPERV=y
CONFIG_KVM=m
CONFIG_KVM_MAX_NR_VCPUS=4096
# CONFIG_KVM_PROVE_MMU is not set
# CONFIG_KVM_S390_UCONTROL is not set
CONFIG_KVM_SMM=y
+CONFIG_KVM_SW_PROTECTED_VM=y
# CONFIG_KVM_WERROR is not set
# CONFIG_KVM_XEN is not set
# CONFIG_KXCJK1013 is not set
@@ -3054,6 +3078,7 @@ CONFIG_LSM_MMAP_MIN_ADDR=65535
# CONFIG_LTO_CLANG_FULL is not set
# CONFIG_LTO_CLANG_THIN is not set
CONFIG_LTO_NONE=y
+# CONFIG_LTR390 is not set
# CONFIG_LTR501 is not set
# CONFIG_LTRF216A is not set
# CONFIG_LV0104CS is not set
@@ -3102,7 +3127,7 @@ CONFIG_MARCH_Z14=y
# CONFIG_MARCH_Z990 is not set
# CONFIG_MARCH_ZEC12 is not set
CONFIG_MARVELL_10G_PHY=m
-# CONFIG_MARVELL_88Q2XXX_PHY is not set
+CONFIG_MARVELL_88Q2XXX_PHY=m
# CONFIG_MARVELL_88X2222_PHY is not set
# CONFIG_MARVELL_PHY is not set
# CONFIG_MATOM is not set
@@ -3119,6 +3144,7 @@ CONFIG_MARVELL_10G_PHY=m
# CONFIG_MAX31827 is not set
# CONFIG_MAX31856 is not set
# CONFIG_MAX31865 is not set
+# CONFIG_MAX34408 is not set
# CONFIG_MAX44000 is not set
# CONFIG_MAX44009 is not set
# CONFIG_MAX517 is not set
@@ -3146,7 +3172,9 @@ CONFIG_MAX_SKB_FRAGS=17
# CONFIG_MCP4531 is not set
# CONFIG_MCP4725 is not set
# CONFIG_MCP4728 is not set
+# CONFIG_MCP4821 is not set
# CONFIG_MCP4922 is not set
+# CONFIG_MCP9600 is not set
# CONFIG_MCTP is not set
CONFIG_MD_AUTODETECT=y
CONFIG_MD_BITMAP_FILE=y
@@ -3364,10 +3392,11 @@ CONFIG_MISC_FILESYSTEMS=y
# CONFIG_MISC_RTSX_PCI is not set
CONFIG_MISC_RTSX_USB=m
# CONFIG_MLX4_CORE_GEN2 is not set
+# CONFIG_MLX4_CORE is not set
CONFIG_MLX4_DEBUG=y
CONFIG_MLX4_EN_DCB=y
-CONFIG_MLX4_EN=m
-CONFIG_MLX4_INFINIBAND=m
+# CONFIG_MLX4_EN is not set
+# CONFIG_MLX4_INFINIBAND is not set
CONFIG_MLX5_ACCEL=y
CONFIG_MLX5_CLS_ACT=y
CONFIG_MLX5_CORE_EN_DCB=y
@@ -3398,6 +3427,7 @@ CONFIG_MLX5_VDPA_NET=m
CONFIG_MLX5_VFIO_PCI=m
# CONFIG_MLX90614 is not set
# CONFIG_MLX90632 is not set
+# CONFIG_MLX90635 is not set
# CONFIG_MLXBF_BOOTCTL is not set
# CONFIG_MLXBF_GIGE is not set
# CONFIG_MLXBF_PMC is not set
@@ -3560,7 +3590,7 @@ CONFIG_MT76x2U=m
CONFIG_MT7921E=m
# CONFIG_MT7921S is not set
# CONFIG_MT7921U is not set
-# CONFIG_MT7925E is not set
+CONFIG_MT7925E=m
# CONFIG_MT7925U is not set
# CONFIG_MT7996E is not set
# CONFIG_MTD_ABSENT is not set
@@ -3611,6 +3641,7 @@ CONFIG_MTD_OF_PARTS=m
CONFIG_MTD_UBI_BEB_LIMIT=20
# CONFIG_MTD_UBI_BLOCK is not set
# CONFIG_MTD_UBI_FASTMAP is not set
+# CONFIG_MTD_UBI_FAULT_INJECTION is not set
# CONFIG_MTD_UBI_GLUEBI is not set
CONFIG_MTD_UBI=m
CONFIG_MTD_UBI_WL_THRESHOLD=4096
@@ -3632,7 +3663,6 @@ CONFIG_NAMESPACES=y
# CONFIG_NATIONAL_PHY is not set
# CONFIG_NAU7802 is not set
# CONFIG_NCN26000_PHY is not set
-CONFIG_ND_BLK=m
CONFIG_ND_BTT=m
# CONFIG_NDC_DIS_DYNAMIC_CACHING is not set
CONFIG_ND_CLAIM=y
@@ -3686,7 +3716,6 @@ CONFIG_NET_DROP_MONITOR=y
# CONFIG_NET_EMATCH is not set
# CONFIG_NET_EMATCH_META is not set
# CONFIG_NET_EMATCH_NBYTE is not set
-# CONFIG_NET_EMATCH_STACK is not set
# CONFIG_NET_EMATCH_TEXT is not set
# CONFIG_NET_EMATCH_U32 is not set
CONFIG_NET_FAILOVER=m
@@ -3871,6 +3900,7 @@ CONFIG_NET_VENDOR_GOOGLE=y
# CONFIG_NET_VENDOR_INTEL is not set
# CONFIG_NET_VENDOR_LITEX is not set
# CONFIG_NET_VENDOR_MARVELL is not set
+CONFIG_NET_VENDOR_MELLANOX=y
# CONFIG_NET_VENDOR_MICREL is not set
# CONFIG_NET_VENDOR_MICROCHIP is not set
# CONFIG_NET_VENDOR_MICROSEMI is not set
@@ -3962,6 +3992,7 @@ CONFIG_NF_REJECT_IPV6=m
# CONFIG_NFSD_BLOCKLAYOUT is not set
# CONFIG_NFSD_FLEXFILELAYOUT is not set
CONFIG_NFS_DISABLE_UDP_SUPPORT=y
+# CONFIG_NFSD_LEGACY_CLIENT_TRACKING is not set
CONFIG_NFSD=m
CONFIG_NFSD_PNFS=y
CONFIG_NFSD_SCSILAYOUT=y
@@ -4108,6 +4139,7 @@ CONFIG_NOUVEAU_DEBUG_DEFAULT=3
# CONFIG_NOUVEAU_LEGACY_CTX_SUPPORT is not set
# CONFIG_NOZOMI is not set
CONFIG_NR_CPUS=512
+# CONFIG_NSM is not set
# CONFIG_NTB_AMD is not set
# CONFIG_NTB_EPF is not set
# CONFIG_NTB_IDT is not set
@@ -4366,22 +4398,13 @@ CONFIG_PHY_BCM_SR_USB=m
# CONFIG_PHY_TUSB1210 is not set
# CONFIG_PI433 is not set
CONFIG_PID_NS=y
-CONFIG_PINCTRL_ALDERLAKE=m
-# CONFIG_PINCTRL_BROXTON is not set
-# CONFIG_PINCTRL_CHERRYVIEW is not set
# CONFIG_PINCTRL_CS42L43 is not set
# CONFIG_PINCTRL_CY8C95X0 is not set
-CONFIG_PINCTRL_ELKHARTLAKE=m
-CONFIG_PINCTRL_EMMITSBURG=m
# CONFIG_PINCTRL_EQUILIBRIUM is not set
-CONFIG_PINCTRL_ICELAKE=m
# CONFIG_PINCTRL_IPQ6018 is not set
# CONFIG_PINCTRL_IPQ8074 is not set
# CONFIG_PINCTRL is not set
-# CONFIG_PINCTRL_JASPERLAKE is not set
-CONFIG_PINCTRL_LAKEFIELD=m
# CONFIG_PINCTRL_LPASS_LPI is not set
-# CONFIG_PINCTRL_LYNXPOINT is not set
# CONFIG_PINCTRL_MCP23S08 is not set
# CONFIG_PINCTRL_MDM9615 is not set
# CONFIG_PINCTRL_MICROCHIP_SGPIO is not set
@@ -4667,8 +4690,8 @@ CONFIG_RD_GZIP=y
CONFIG_RD_LZ4=y
CONFIG_RD_LZMA=y
CONFIG_RD_LZO=y
-CONFIG_RDMA_RXE=m
-CONFIG_RDMA_SIW=m
+# CONFIG_RDMA_RXE is not set
+# CONFIG_RDMA_SIW is not set
# CONFIG_RDS is not set
CONFIG_RD_XZ=y
CONFIG_RD_ZSTD=y
@@ -4709,6 +4732,7 @@ CONFIG_REGULATOR_FIXED_VOLTAGE=m
# CONFIG_REGULATOR_MAX8973 is not set
# CONFIG_REGULATOR_MCP16502 is not set
# CONFIG_REGULATOR_MT6311 is not set
+# CONFIG_REGULATOR_NETLINK_EVENTS is not set
# CONFIG_REGULATOR_PF8X00 is not set
# CONFIG_REGULATOR_PFUZE100 is not set
# CONFIG_REGULATOR_PV88060 is not set
@@ -4857,6 +4881,7 @@ CONFIG_RTC_DRV_M41T80_WDT=y
CONFIG_RTC_DRV_M48T35=m
CONFIG_RTC_DRV_M48T59=m
# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_MAX31335 is not set
CONFIG_RTC_DRV_MAX6900=m
# CONFIG_RTC_DRV_MAX6902 is not set
# CONFIG_RTC_DRV_MAX6916 is not set
@@ -4942,7 +4967,7 @@ CONFIG_RTW88=m
# CONFIG_RTW89_8851BE is not set
CONFIG_RTW89_8852AE=m
CONFIG_RTW89_8852BE=m
-# CONFIG_RTW89_8852CE is not set
+CONFIG_RTW89_8852CE=m
# CONFIG_RTW89_DEBUGFS is not set
# CONFIG_RTW89_DEBUGMSG is not set
CONFIG_RTW89=m
@@ -4968,6 +4993,7 @@ CONFIG_S390_UV_UAPI=y
CONFIG_S390_VMUR=m
# CONFIG_SAMPLE_ANDROID_BINDERFS is not set
# CONFIG_SAMPLE_AUXDISPLAY is not set
+# CONFIG_SAMPLE_CGROUP is not set
# CONFIG_SAMPLE_CONFIGFS is not set
# CONFIG_SAMPLE_CONNECTOR is not set
# CONFIG_SAMPLE_FANOTIFY_ERROR is not set
@@ -5147,7 +5173,7 @@ CONFIG_SECONDARY_TRUSTED_KEYRING=y
CONFIG_SECRETMEM=y
CONFIG_SECTION_MISMATCH_WARN_ONLY=y
# CONFIG_SECURITY_APPARMOR is not set
-# CONFIG_SECURITY_DMESG_RESTRICT is not set
+CONFIG_SECURITY_DMESG_RESTRICT=y
CONFIG_SECURITYFS=y
CONFIG_SECURITY_INFINIBAND=y
# CONFIG_SECURITY_LANDLOCK is not set
@@ -5240,6 +5266,7 @@ CONFIG_SENSORS_FSCHMD=m
# CONFIG_SENSORS_FTSTEUTATES is not set
CONFIG_SENSORS_G760A=m
# CONFIG_SENSORS_G762 is not set
+# CONFIG_SENSORS_GIGABYTE_WATERFORCE is not set
CONFIG_SENSORS_GL518SM=m
CONFIG_SENSORS_GL520SM=m
# CONFIG_SENSORS_GPIO_FAN is not set
@@ -5306,6 +5333,7 @@ CONFIG_SENSORS_LTC4215=m
CONFIG_SENSORS_LTC4245=m
# CONFIG_SENSORS_LTC4260 is not set
CONFIG_SENSORS_LTC4261=m
+# CONFIG_SENSORS_LTC4286 is not set
# CONFIG_SENSORS_MAX1111 is not set
# CONFIG_SENSORS_MAX127 is not set
# CONFIG_SENSORS_MAX15301 is not set
@@ -5333,9 +5361,11 @@ CONFIG_SENSORS_MAX8688=m
# CONFIG_SENSORS_MC34VR500 is not set
CONFIG_SENSORS_MCP3021=m
# CONFIG_SENSORS_MLXREG_FAN is not set
+# CONFIG_SENSORS_MP2856 is not set
# CONFIG_SENSORS_MP2888 is not set
# CONFIG_SENSORS_MP2975 is not set
# CONFIG_SENSORS_MP5023 is not set
+# CONFIG_SENSORS_MP5990 is not set
# CONFIG_SENSORS_MPQ7932 is not set
# CONFIG_SENSORS_MR75203 is not set
# CONFIG_SENSORS_NCT6683 is not set
@@ -5505,10 +5535,8 @@ CONFIG_SIGNATURE=y
CONFIG_SIPHASH_KUNIT_TEST=m
# CONFIG_SKGE is not set
# CONFIG_SKY2 is not set
-# CONFIG_SLAB_DEPRECATED is not set
CONFIG_SLAB_FREELIST_HARDENED=y
CONFIG_SLAB_FREELIST_RANDOM=y
-# CONFIG_SLAB is not set
# CONFIG_SLAB_MERGE_DEFAULT is not set
# CONFIG_SLIMBUS is not set
CONFIG_SLIP_COMPRESSED=y
@@ -6253,6 +6281,7 @@ CONFIG_SQUASHFS_ZSTD=y
# CONFIG_SSB is not set
# CONFIG_SSFDC is not set
# CONFIG_SSIF_IPMI_BMC is not set
+CONFIG_STACKDEPOT_MAX_FRAMES=64
CONFIG_STACK_HASH_ORDER=20
CONFIG_STACKINIT_KUNIT_TEST=m
CONFIG_STACKPROTECTOR_STRONG=y
@@ -6369,7 +6398,7 @@ CONFIG_TCP_CONG_DCTCP=m
# CONFIG_TCP_CONG_HSTCP is not set
CONFIG_TCP_CONG_HTCP=m
# CONFIG_TCP_CONG_HYBLA is not set
-# CONFIG_TCP_CONG_ILLINOIS is not set
+CONFIG_TCP_CONG_ILLINOIS=m
# CONFIG_TCP_CONG_LP is not set
CONFIG_TCP_CONG_NV=m
# CONFIG_TCP_CONG_SCALABLE is not set
@@ -6433,6 +6462,7 @@ CONFIG_TEST_SORT=m
# CONFIG_TEST_UUID is not set
CONFIG_TEST_VMALLOC=m
# CONFIG_TEST_XARRAY is not set
+# CONFIG_THERMAL_DEBUGFS is not set
# CONFIG_THERMAL_DEFAULT_GOV_FAIR_SHARE is not set
# CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE is not set
# CONFIG_THERMAL_DEFAULT_GOV_USER_SPACE is not set
@@ -6609,6 +6639,7 @@ CONFIG_TOUCHSCREEN_WACOM_I2C=m
CONFIG_TRACER_SNAPSHOT=y
CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS=y
# CONFIG_TRANSPARENT_HUGEPAGE_MADVISE is not set
+# CONFIG_TRANSPARENT_HUGEPAGE_NEVER is not set
CONFIG_TRANSPARENT_HUGEPAGE=y
CONFIG_TREE_RCU=y
# CONFIG_TRIM_UNUSED_KSYMS is not set
@@ -6649,6 +6680,7 @@ CONFIG_TYPEC_MUX_FSA4480=m
# CONFIG_TYPEC_MUX_NB7VPQ904M is not set
CONFIG_TYPEC_MUX_PI3USB30532=m
# CONFIG_TYPEC_MUX_PTN36502 is not set
+# CONFIG_TYPEC_MUX_WCD939X_USBSS is not set
# CONFIG_TYPEC_NVIDIA_ALTMODE is not set
# CONFIG_TYPEC_QCOM_PMIC is not set
# CONFIG_TYPEC_RT1711H is not set
@@ -7005,6 +7037,7 @@ CONFIG_VDPA_SIM_NET=m
# CONFIG_VDPA_USER is not set
# CONFIG_VEML6030 is not set
# CONFIG_VEML6070 is not set
+# CONFIG_VEML6075 is not set
CONFIG_VETH=m
# CONFIG_VF610_ADC is not set
# CONFIG_VF610_DAC is not set
@@ -7013,6 +7046,7 @@ CONFIG_VFAT_FS=m
CONFIG_VFIO_AP=m
CONFIG_VFIO_CCW=m
CONFIG_VFIO_CONTAINER=y
+# CONFIG_VFIO_DEBUGFS is not set
CONFIG_VFIO_DEVICE_CDEV=y
CONFIG_VFIO_GROUP=y
CONFIG_VFIO_IOMMU_TYPE1=m
@@ -7048,6 +7082,7 @@ CONFIG_VHOST_VSOCK=m
# CONFIG_VIDEO_ADV_DEBUG is not set
# CONFIG_VIDEO_AK7375 is not set
# CONFIG_VIDEO_AK881X is not set
+# CONFIG_VIDEO_ALVIUM_CSI2 is not set
# CONFIG_VIDEO_AR0521 is not set
CONFIG_VIDEO_AU0828=m
# CONFIG_VIDEO_AU0828_RC is not set
@@ -7096,6 +7131,8 @@ CONFIG_VIDEO_EM28XX_RC=m
# CONFIG_VIDEO_FB_IVTV_FORCE_PAT is not set
CONFIG_VIDEO_FB_IVTV=m
# CONFIG_VIDEO_FIXED_MINOR_RANGES is not set
+# CONFIG_VIDEO_GC0308 is not set
+# CONFIG_VIDEO_GC2145 is not set
# CONFIG_VIDEO_GO7007 is not set
# CONFIG_VIDEO_GS1662 is not set
CONFIG_VIDEO_HDPVR=m
@@ -7165,6 +7202,7 @@ CONFIG_VIDEO_IVTV=m
# CONFIG_VIDEO_OV5675 is not set
# CONFIG_VIDEO_OV5693 is not set
# CONFIG_VIDEO_OV5695 is not set
+# CONFIG_VIDEO_OV64A40 is not set
# CONFIG_VIDEO_OV6650 is not set
# CONFIG_VIDEO_OV7251 is not set
# CONFIG_VIDEO_OV7640 is not set
@@ -7217,6 +7255,7 @@ CONFIG_VIDEO_SAA7164=m
# CONFIG_VIDEO_TDA9840 is not set
# CONFIG_VIDEO_TEA6415C is not set
# CONFIG_VIDEO_TEA6420 is not set
+# CONFIG_VIDEO_THP7312 is not set
# CONFIG_VIDEO_THS7303 is not set
# CONFIG_VIDEO_THS8200 is not set
# CONFIG_VIDEO_TLV320AIC23B is not set
@@ -7232,6 +7271,7 @@ CONFIG_VIDEO_TUNER=m
# CONFIG_VIDEO_TW5864 is not set
# CONFIG_VIDEO_TW686X is not set
# CONFIG_VIDEO_TW68 is not set
+# CONFIG_VIDEO_TW9900 is not set
# CONFIG_VIDEO_TW9903 is not set
# CONFIG_VIDEO_TW9906 is not set
# CONFIG_VIDEO_TW9910 is not set
@@ -7266,6 +7306,7 @@ CONFIG_VIRTIO_NET=m
CONFIG_VIRTIO_PCI_LEGACY=y
# CONFIG_VIRTIO_PMEM is not set
CONFIG_VIRTIO_VDPA=m
+# CONFIG_VIRTIO_VFIO_PCI is not set
CONFIG_VIRTIO_VSOCKETS=m
CONFIG_VIRTIO=y
CONFIG_VIRTUALIZATION=y
@@ -7391,7 +7432,7 @@ CONFIG_XFS_POSIX_ACL=y
CONFIG_XFS_QUOTA=y
# CONFIG_XFS_RT is not set
# CONFIG_XFS_SUPPORT_ASCII_CI is not set
-CONFIG_XFS_SUPPORT_V4=y
+# CONFIG_XFS_SUPPORT_V4 is not set
# CONFIG_XFS_WARN is not set
# CONFIG_XGENE_DMA is not set
# CONFIG_XILINX_DMA is not set
@@ -7451,6 +7492,7 @@ CONFIG_ZRAM_DEF_COMP_LZORLE=y
CONFIG_ZRAM=m
# CONFIG_ZRAM_MEMORY_TRACKING is not set
# CONFIG_ZRAM_MULTI_COMP is not set
+# CONFIG_ZRAM_TRACK_ENTRY_ACTIME is not set
CONFIG_ZRAM_WRITEBACK=y
CONFIG_ZSMALLOC_CHAIN_SIZE=8
CONFIG_ZSMALLOC=m
@@ -7464,6 +7506,7 @@ CONFIG_ZSWAP_COMPRESSOR_DEFAULT_LZO=y
# CONFIG_ZSWAP_DEFAULT_ON is not set
# CONFIG_ZSWAP_EXCLUSIVE_LOADS_DEFAULT_ON is not set
# CONFIG_ZSWAP is not set
+# CONFIG_ZSWAP_SHRINKER_DEFAULT_ON is not set
# CONFIG_ZSWAP_ZPOOL_DEFAULT_Z3FOLD is not set
CONFIG_ZSWAP_ZPOOL_DEFAULT_ZBUD=y
# CONFIG_ZSWAP_ZPOOL_DEFAULT_ZSMALLOC is not set
@@ -7472,7 +7515,7 @@ CONFIG_ZENIFY=y
CONFIG_NTSYNC=y
CONFIG_USER_NS_UNPRIVILEGED=y
CONFIG_TCP_CONG_BBR2=m
-# CONFIG_SCHED_PDS is not set
+CONFIG_SCHED_BORE=y
CONFIG_HID_IPTS=m
CONFIG_HID_ITHC=m
CONFIG_SURFACE_BOOK1_DGPU_SWITCH=m
@@ -7481,11 +7524,8 @@ CONFIG_LEDS_TPS68470=m
CONFIG_SENSORS_SURFACE_FAN=m
CONFIG_SENSORS_SURFACE_TEMP=m
CONFIG_DRM_AMD_COLOR_STEAMDECK=y
-CONFIG_BMI323_I2C=m
-CONFIG_BMI323_SPI=m
CONFIG_DRM_APPLETBDRM=m
CONFIG_HID_APPLETB_BL=m
CONFIG_HID_APPLETB_KBD=m
CONFIG_HID_APPLE_MAGIC_BACKLIGHT=m
CONFIG_APPLE_BCE=m
-CONFIG_SCHED_BORE=y
diff --git a/SOURCES/kernel-s390x-zfcpdump-rhel.config b/SOURCES/kernel-s390x-zfcpdump-rhel.config
index bd5db29..5ebd694 100644
--- a/SOURCES/kernel-s390x-zfcpdump-rhel.config
+++ b/SOURCES/kernel-s390x-zfcpdump-rhel.config
@@ -84,6 +84,7 @@ CONFIG_ACPI_VIDEO=m
# CONFIG_AD5791 is not set
# CONFIG_AD5933 is not set
# CONFIG_AD7091R5 is not set
+# CONFIG_AD7091R8 is not set
# CONFIG_AD7124 is not set
# CONFIG_AD7150 is not set
# CONFIG_AD7192 is not set
@@ -205,11 +206,13 @@ CONFIG_AMD_HSMP=m
CONFIG_AMD_PMC=m
# CONFIG_AMD_PTDMA is not set
# CONFIG_AMDTEE is not set
+# CONFIG_AMD_WBRF is not set
# CONFIG_AMIGA_PARTITION is not set
CONFIG_AMPERE_ERRATUM_AC03_CPU_38=y
# CONFIG_AMT is not set
# CONFIG_ANDROID_BINDER_IPC is not set
# CONFIG_ANON_VMA_NAME is not set
+# CONFIG_AOSONG_AGS02MA is not set
# CONFIG_APDS9300 is not set
# CONFIG_APDS9802ALS is not set
# CONFIG_APDS9960 is not set
@@ -366,6 +369,7 @@ CONFIG_BACKLIGHT_LED=m
# CONFIG_BACKLIGHT_LM3639 is not set
CONFIG_BACKLIGHT_LP855X=m
# CONFIG_BACKLIGHT_LV5207LP is not set
+# CONFIG_BACKLIGHT_MP3309C is not set
# CONFIG_BACKLIGHT_PWM is not set
# CONFIG_BACKLIGHT_QCOM_WLED is not set
# CONFIG_BACKLIGHT_SAHARA is not set
@@ -460,6 +464,7 @@ CONFIG_BLK_DEV_SD=y
# CONFIG_BLK_DEV_THROTTLING_LOW is not set
CONFIG_BLK_DEV_THROTTLING=y
# CONFIG_BLK_DEV_UBLK is not set
+CONFIG_BLK_DEV_WRITE_MOUNTED=y
CONFIG_BLK_DEV=y
CONFIG_BLK_DEV_ZONED=y
# CONFIG_BLK_INLINE_ENCRYPTION is not set
@@ -479,6 +484,8 @@ CONFIG_BLOCK=y
# CONFIG_BMI088_ACCEL is not set
# CONFIG_BMI160_I2C is not set
# CONFIG_BMI160_SPI is not set
+CONFIG_BMI323_I2C=m
+CONFIG_BMI323_SPI=m
# CONFIG_BMP280 is not set
# CONFIG_BNA is not set
CONFIG_BNX2=m
@@ -494,7 +501,6 @@ CONFIG_BONDING=m
# CONFIG_BOOT_CONFIG_FORCE is not set
CONFIG_BOOT_CONFIG=y
# CONFIG_BOOTPARAM_HARDLOCKUP_PANIC is not set
-# CONFIG_BOOTPARAM_HOTPLUG_CPU0 is not set
# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
CONFIG_BOOT_PRINTK_DELAY=y
@@ -603,8 +609,8 @@ CONFIG_BUILD_SALT=""
# CONFIG_C2PORT is not set
# CONFIG_CACHEFILES_DEBUG is not set
# CONFIG_CACHEFILES_ERROR_INJECTION is not set
-CONFIG_CACHEFILES=m
# CONFIG_CACHEFILES_ONDEMAND is not set
+CONFIG_CACHEFILES=y
CONFIG_CACHESTAT_SYSCALL=y
# CONFIG_CADENCE_WATCHDOG is not set
# CONFIG_CAIF is not set
@@ -911,7 +917,6 @@ CONFIG_CRYPTO_CAST5=y
CONFIG_CRYPTO_CAST6=y
CONFIG_CRYPTO_CBC=y
# CONFIG_CRYPTO_CCM is not set
-CONFIG_CRYPTO_CFB=y
CONFIG_CRYPTO_CHACHA20POLY1305=y
CONFIG_CRYPTO_CHACHA20=y
CONFIG_CRYPTO_CHACHA_S390=y
@@ -943,6 +948,7 @@ CONFIG_CRYPTO_DEV_HISI_SEC=m
# CONFIG_CRYPTO_DEV_HISTB_TRNG is not set
CONFIG_CRYPTO_DEV_NITROX_CNN55XX=m
# CONFIG_CRYPTO_DEV_OCTEONTX_CPT is not set
+# CONFIG_CRYPTO_DEV_QAT_420XX is not set
# CONFIG_CRYPTO_DEV_QAT_4XXX is not set
# CONFIG_CRYPTO_DEV_QAT_C3XXX is not set
# CONFIG_CRYPTO_DEV_QAT_C3XXXVF is not set
@@ -1000,7 +1006,6 @@ CONFIG_CRYPTO_MD4=y
# CONFIG_CRYPTO_MD5 is not set
CONFIG_CRYPTO_MICHAEL_MIC=y
CONFIG_CRYPTO_NULL=y
-CONFIG_CRYPTO_OFB=y
CONFIG_CRYPTO_PAES_S390=m
CONFIG_CRYPTO_PCBC=y
CONFIG_CRYPTO_PCRYPT=y
@@ -1152,7 +1157,7 @@ CONFIG_DEBUG_SECTION_MISMATCH=y
# CONFIG_DEBUG_VM_MAPLE_TREE is not set
# CONFIG_DEBUG_VM_PGFLAGS is not set
# CONFIG_DEBUG_VM_PGTABLE is not set
-# CONFIG_DEBUG_VM_RB is not set # revisit this if performance isn't horrible
+# CONFIG_DEBUG_VM_RB is not set
# CONFIG_DEBUG_VM_SHOOT_LAZIES is not set
# CONFIG_DEBUG_VM_VMACACHE is not set
# CONFIG_DEBUG_WQ_FORCE_RR_CPU is not set
@@ -1266,6 +1271,7 @@ CONFIG_DP83867_PHY=m
# CONFIG_DP83869_PHY is not set
CONFIG_DP83TC811_PHY=m
# CONFIG_DP83TD510_PHY is not set
+# CONFIG_DP83TG720_PHY is not set
# CONFIG_DPM_WATCHDOG is not set
# CONFIG_DPOT_DAC is not set
# CONFIG_DPS310 is not set
@@ -1323,6 +1329,7 @@ CONFIG_DRM_I915_COMPRESS_ERROR=y
# CONFIG_DRM_I915_DEBUG_MMIO is not set
# CONFIG_DRM_I915_DEBUG_RUNTIME_PM is not set
# CONFIG_DRM_I915_DEBUG_VBLANK_EVADE is not set
+# CONFIG_DRM_I915_DEBUG_WAKEREF is not set
CONFIG_DRM_I915_FENCE_TIMEOUT=10000
CONFIG_DRM_I915_HEARTBEAT_INTERVAL=2500
# CONFIG_DRM_I915_LOW_LEVEL_TRACEPOINTS is not set
@@ -1365,6 +1372,7 @@ CONFIG_DRM=m
# CONFIG_DRM_MGAG200 is not set
# CONFIG_DRM_MXSFB is not set
CONFIG_DRM_NOUVEAU_BACKLIGHT=y
+# CONFIG_DRM_NOUVEAU_GSP_DEFAULT is not set
# CONFIG_DRM_NOUVEAU is not set
# CONFIG_DRM_NWL_MIPI_DSI is not set
# CONFIG_DRM_NXP_PTN3460 is not set
@@ -1385,6 +1393,7 @@ CONFIG_DRM_NOUVEAU_BACKLIGHT=y
# CONFIG_DRM_PANEL_HIMAX_HX8394 is not set
# CONFIG_DRM_PANEL_ILITEK_IL9322 is not set
# CONFIG_DRM_PANEL_ILITEK_ILI9341 is not set
+# CONFIG_DRM_PANEL_ILITEK_ILI9805 is not set
# CONFIG_DRM_PANEL_ILITEK_ILI9881C is not set
# CONFIG_DRM_PANEL_ILITEK_ILI9882T is not set
# CONFIG_DRM_PANEL_INNOLUX_EJ030NA is not set
@@ -1445,6 +1454,7 @@ CONFIG_DRM_NOUVEAU_BACKLIGHT=y
# CONFIG_DRM_PANEL_SONY_TD4353_JDI is not set
# CONFIG_DRM_PANEL_SONY_TULIP_TRULY_NT35521 is not set
# CONFIG_DRM_PANEL_STARTEK_KD070FHFID015 is not set
+# CONFIG_DRM_PANEL_SYNAPTICS_R63353 is not set
# CONFIG_DRM_PANEL_TDO_TL070WSH30 is not set
# CONFIG_DRM_PANEL_TPO_TD028TTEC1 is not set
# CONFIG_DRM_PANEL_TPO_TD043MTEA1 is not set
@@ -1459,6 +1469,7 @@ CONFIG_DRM_NOUVEAU_BACKLIGHT=y
# CONFIG_DRM_PARADE_PS8622 is not set
# CONFIG_DRM_PARADE_PS8640 is not set
# CONFIG_DRM_PL111 is not set
+# CONFIG_DRM_POWERVR is not set
# CONFIG_DRM_QXL is not set
# CONFIG_DRM_RADEON is not set
CONFIG_DRM_RADEON_USERPTR=y
@@ -1497,6 +1508,7 @@ CONFIG_DRM_VKMS=m
CONFIG_DRM_VMWGFX_FBCON=y
CONFIG_DRM_VMWGFX=m
# CONFIG_DRM_VMWGFX_MKSSTATS is not set
+# CONFIG_DRM_XE is not set
# CONFIG_DRM_XEN_FRONTEND is not set
# CONFIG_DS1682 is not set
# CONFIG_DS1803 is not set
@@ -1594,6 +1606,7 @@ CONFIG_DVB_USB_VP702X=m
CONFIG_DVB_USB_VP7045=m
# CONFIG_DVB_USB_ZD1301 is not set
# CONFIG_DW_AXI_DMAC is not set
+# CONFIG_DWC_PCIE_PMU is not set
# CONFIG_DW_DMAC is not set
# CONFIG_DW_DMAC_PCI is not set
# CONFIG_DW_EDMA is not set
@@ -1660,6 +1673,7 @@ CONFIG_EPOLL=y
# CONFIG_EQUALIZER is not set
# CONFIG_EROFS_FS_DEBUG is not set
CONFIG_EROFS_FS=m
+# CONFIG_EROFS_FS_ONDEMAND is not set
CONFIG_EROFS_FS_POSIX_ACL=y
CONFIG_EROFS_FS_SECURITY=y
CONFIG_EROFS_FS_XATTR=y
@@ -1724,7 +1738,6 @@ CONFIG_FAT_KUNIT_TEST=m
# CONFIG_FB_3DFX is not set
# CONFIG_FB_ARC is not set
# CONFIG_FB_ARK is not set
-# CONFIG_FB_ARMCLCD is not set
# CONFIG_FB_ASILIANT is not set
# CONFIG_FB_ATY128 is not set
# CONFIG_FB_ATY is not set
@@ -1745,7 +1758,6 @@ CONFIG_FB_EFI=y
# CONFIG_FB_IMX is not set
# CONFIG_FB is not set
# CONFIG_FB_KYRO is not set
-# CONFIG_FB_LE80578 is not set
# CONFIG_FB_MATROX_G is not set
# CONFIG_FB_MATROX_I2C is not set
# CONFIG_FB_MATROX is not set
@@ -1811,6 +1823,7 @@ CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
CONFIG_FRAMEBUFFER_CONSOLE=y
# CONFIG_FRAME_POINTER is not set
+# CONFIG_FRAMER is not set
CONFIG_FRAME_WARN=2048
CONFIG_FRONTSWAP=y
# CONFIG_FSCACHE_DEBUG is not set
@@ -1994,6 +2007,7 @@ CONFIG_HASHTABLE_KUNIT_TEST=m
# CONFIG_HD44780 is not set
# CONFIG_HDC100X is not set
# CONFIG_HDC2010 is not set
+# CONFIG_HDC3020 is not set
CONFIG_HDLC_CISCO=m
CONFIG_HDLC_FR=m
CONFIG_HDLC=m
@@ -2067,6 +2081,7 @@ CONFIG_HID_LOGITECH=m
CONFIG_HID_MAGICMOUSE=y
# CONFIG_HID_MALTRON is not set
# CONFIG_HID_MAYFLASH is not set
+# CONFIG_HID_MCP2200 is not set
# CONFIG_HID_MCP2221 is not set
# CONFIG_HID_MEGAWORLD_FF is not set
CONFIG_HID_MICROSOFT=m
@@ -2166,6 +2181,7 @@ CONFIG_HOTPLUG_PCI=y
CONFIG_HSA_AMD_P2P=y
CONFIG_HSA_AMD_SVM=y
CONFIG_HSA_AMD=y
+# CONFIG_HSC030PA is not set
# CONFIG_HSI is not set
# CONFIG_HSR is not set
# CONFIG_HT16K33 is not set
@@ -2299,6 +2315,7 @@ CONFIG_IAVF=m
# CONFIG_IBM_ASM is not set
CONFIG_IBMASR=m
CONFIG_IBM_PARTITION=y
+CONFIG_ICE_HWMON=y
CONFIG_ICE_HWTS=y
CONFIG_ICE=m
CONFIG_ICE_SWITCHDEV=y
@@ -2406,6 +2423,7 @@ CONFIG_INFINIBAND_ADDR_TRANS=y
CONFIG_INFINIBAND_CXGB4=m
CONFIG_INFINIBAND_EFA=m
# CONFIG_INFINIBAND_ERDMA is not set
+# CONFIG_INFINIBAND_HFI1 is not set
# CONFIG_INFINIBAND_HNS is not set
CONFIG_INFINIBAND_IPOIB_CM=y
# CONFIG_INFINIBAND_IPOIB_DEBUG_DATA is not set
@@ -2420,14 +2438,15 @@ CONFIG_INFINIBAND=m
# CONFIG_INFINIBAND_ON_DEMAND_PAGING is not set
CONFIG_INFINIBAND_QEDR=m
# CONFIG_INFINIBAND_QIB is not set
-CONFIG_INFINIBAND_RDMAVT=m
+# CONFIG_INFINIBAND_RDMAVT is not set
# CONFIG_INFINIBAND_RTRS_CLIENT is not set
# CONFIG_INFINIBAND_RTRS_SERVER is not set
# CONFIG_INFINIBAND_SRP is not set
# CONFIG_INFINIBAND_SRPT is not set
CONFIG_INFINIBAND_USER_ACCESS=m
# CONFIG_INFINIBAND_USER_MAD is not set
-CONFIG_INFINIBAND_USNIC=m
+# CONFIG_INFINIBAND_USNIC is not set
+# CONFIG_INFINIBAND_VMWARE_PVRDMA is not set
# CONFIG_INFTL is not set
CONFIG_INIT_ENV_ARG_LIMIT=32
# CONFIG_INIT_ON_ALLOC_DEFAULT_ON is not set
@@ -2513,10 +2532,11 @@ CONFIG_INTEL_IOMMU_PERF_EVENTS=y
# CONFIG_INTEL_ISH_FIRMWARE_DOWNLOADER is not set
# CONFIG_INTEL_ISHTP_ECLITE is not set
# CONFIG_INTEL_LDMA is not set
-# CONFIG_INTEL_MEI_GSC_PROXY is not set
+CONFIG_INTEL_MEI_GSC_PROXY=m
# CONFIG_INTEL_MEI_HDCP is not set
# CONFIG_INTEL_MEI_PXP is not set
# CONFIG_INTEL_MEI_TXE is not set
+# CONFIG_INTEL_MEI_VSC_HW is not set
# CONFIG_INTEL_PMC_CORE is not set
# CONFIG_INTEL_PMT_CLASS is not set
# CONFIG_INTEL_PMT_CRASHLOG is not set
@@ -2750,6 +2770,7 @@ CONFIG_ISCSI_TCP=m
# CONFIG_ISL29020 is not set
# CONFIG_ISL29125 is not set
# CONFIG_ISL29501 is not set
+# CONFIG_ISL76682 is not set
CONFIG_ISM=m
# CONFIG_ISO9660_FS is not set
CONFIG_IS_SIGNED_TYPE_KUNIT_TEST=m
@@ -2792,6 +2813,7 @@ CONFIG_KALLSYMS_BASE_RELATIVE=y
# CONFIG_KALLSYMS_SELFTEST is not set
CONFIG_KALLSYMS=y
# CONFIG_KARMA_PARTITION is not set
+# CONFIG_KASAN_EXTRA_INFO is not set
# CONFIG_KASAN is not set
# CONFIG_KASAN_MODULE_TEST is not set
# CONFIG_KASAN_VMALLOC is not set
@@ -2883,11 +2905,13 @@ CONFIG_KUNIT_TEST=m
CONFIG_KVM_AMD_SEV=y
# CONFIG_KVM_BOOK3S_HV_P8_TIMING is not set
# CONFIG_KVM_BOOK3S_HV_P9_TIMING is not set
+CONFIG_KVM_HYPERV=y
# CONFIG_KVM is not set
CONFIG_KVM_MAX_NR_VCPUS=4096
# CONFIG_KVM_PROVE_MMU is not set
# CONFIG_KVM_S390_UCONTROL is not set
CONFIG_KVM_SMM=y
+CONFIG_KVM_SW_PROTECTED_VM=y
# CONFIG_KVM_WERROR is not set
# CONFIG_KVM_XEN is not set
# CONFIG_KXCJK1013 is not set
@@ -3064,6 +3088,7 @@ CONFIG_LSM_MMAP_MIN_ADDR=65535
# CONFIG_LTO_CLANG_FULL is not set
# CONFIG_LTO_CLANG_THIN is not set
CONFIG_LTO_NONE=y
+# CONFIG_LTR390 is not set
# CONFIG_LTR501 is not set
# CONFIG_LTRF216A is not set
# CONFIG_LV0104CS is not set
@@ -3112,7 +3137,7 @@ CONFIG_MARCH_Z14=y
# CONFIG_MARCH_Z990 is not set
# CONFIG_MARCH_ZEC12 is not set
CONFIG_MARVELL_10G_PHY=m
-# CONFIG_MARVELL_88Q2XXX_PHY is not set
+CONFIG_MARVELL_88Q2XXX_PHY=m
# CONFIG_MARVELL_88X2222_PHY is not set
# CONFIG_MARVELL_PHY is not set
# CONFIG_MATOM is not set
@@ -3129,6 +3154,7 @@ CONFIG_MARVELL_10G_PHY=m
# CONFIG_MAX31827 is not set
# CONFIG_MAX31856 is not set
# CONFIG_MAX31865 is not set
+# CONFIG_MAX34408 is not set
# CONFIG_MAX44000 is not set
# CONFIG_MAX44009 is not set
# CONFIG_MAX517 is not set
@@ -3156,7 +3182,9 @@ CONFIG_MAX_SKB_FRAGS=17
# CONFIG_MCP4531 is not set
# CONFIG_MCP4725 is not set
# CONFIG_MCP4728 is not set
+# CONFIG_MCP4821 is not set
# CONFIG_MCP4922 is not set
+# CONFIG_MCP9600 is not set
# CONFIG_MCTP is not set
CONFIG_MD_AUTODETECT=y
CONFIG_MD_BITMAP_FILE=y
@@ -3374,10 +3402,11 @@ CONFIG_MIGRATION=y
# CONFIG_MISC_RTSX_PCI is not set
CONFIG_MISC_RTSX_USB=m
# CONFIG_MLX4_CORE_GEN2 is not set
+# CONFIG_MLX4_CORE is not set
CONFIG_MLX4_DEBUG=y
CONFIG_MLX4_EN_DCB=y
-CONFIG_MLX4_EN=m
-CONFIG_MLX4_INFINIBAND=m
+# CONFIG_MLX4_EN is not set
+# CONFIG_MLX4_INFINIBAND is not set
CONFIG_MLX5_ACCEL=y
CONFIG_MLX5_CLS_ACT=y
CONFIG_MLX5_CORE_EN_DCB=y
@@ -3408,6 +3437,7 @@ CONFIG_MLX5_VDPA_NET=m
CONFIG_MLX5_VFIO_PCI=m
# CONFIG_MLX90614 is not set
# CONFIG_MLX90632 is not set
+# CONFIG_MLX90635 is not set
# CONFIG_MLXBF_BOOTCTL is not set
# CONFIG_MLXBF_GIGE is not set
# CONFIG_MLXBF_PMC is not set
@@ -3570,7 +3600,7 @@ CONFIG_MT76x2U=m
CONFIG_MT7921E=m
# CONFIG_MT7921S is not set
# CONFIG_MT7921U is not set
-# CONFIG_MT7925E is not set
+CONFIG_MT7925E=m
# CONFIG_MT7925U is not set
# CONFIG_MT7996E is not set
# CONFIG_MTD_ABSENT is not set
@@ -3621,6 +3651,7 @@ CONFIG_MTD_OF_PARTS=m
CONFIG_MTD_UBI_BEB_LIMIT=20
# CONFIG_MTD_UBI_BLOCK is not set
# CONFIG_MTD_UBI_FASTMAP is not set
+# CONFIG_MTD_UBI_FAULT_INJECTION is not set
# CONFIG_MTD_UBI_GLUEBI is not set
CONFIG_MTD_UBI=m
CONFIG_MTD_UBI_WL_THRESHOLD=4096
@@ -3642,7 +3673,6 @@ CONFIG_NAMESPACES=y
# CONFIG_NATIONAL_PHY is not set
# CONFIG_NAU7802 is not set
# CONFIG_NCN26000_PHY is not set
-CONFIG_ND_BLK=m
CONFIG_ND_BTT=m
# CONFIG_NDC_DIS_DYNAMIC_CACHING is not set
CONFIG_ND_CLAIM=y
@@ -3696,7 +3726,6 @@ CONFIG_NET_DROP_MONITOR=y
# CONFIG_NET_EMATCH is not set
# CONFIG_NET_EMATCH_META is not set
# CONFIG_NET_EMATCH_NBYTE is not set
-# CONFIG_NET_EMATCH_STACK is not set
# CONFIG_NET_EMATCH_TEXT is not set
# CONFIG_NET_EMATCH_U32 is not set
CONFIG_NET_FAILOVER=m
@@ -3882,6 +3911,7 @@ CONFIG_NET_VENDOR_GOOGLE=y
# CONFIG_NET_VENDOR_INTEL is not set
# CONFIG_NET_VENDOR_LITEX is not set
# CONFIG_NET_VENDOR_MARVELL is not set
+CONFIG_NET_VENDOR_MELLANOX=y
# CONFIG_NET_VENDOR_MICREL is not set
# CONFIG_NET_VENDOR_MICROCHIP is not set
# CONFIG_NET_VENDOR_MICROSEMI is not set
@@ -3974,6 +4004,7 @@ CONFIG_NF_REJECT_IPV6=m
# CONFIG_NFSD_BLOCKLAYOUT is not set
# CONFIG_NFSD_FLEXFILELAYOUT is not set
CONFIG_NFS_DISABLE_UDP_SUPPORT=y
+# CONFIG_NFSD_LEGACY_CLIENT_TRACKING is not set
CONFIG_NFSD=m
CONFIG_NFSD_PNFS=y
CONFIG_NFSD_SCSILAYOUT=y
@@ -4120,6 +4151,7 @@ CONFIG_NOUVEAU_DEBUG_DEFAULT=3
# CONFIG_NOUVEAU_LEGACY_CTX_SUPPORT is not set
# CONFIG_NOZOMI is not set
CONFIG_NR_CPUS=32
+# CONFIG_NSM is not set
# CONFIG_NTB_AMD is not set
# CONFIG_NTB_EPF is not set
# CONFIG_NTB_IDT is not set
@@ -4378,22 +4410,13 @@ CONFIG_PHY_BCM_SR_USB=m
# CONFIG_PHY_TUSB1210 is not set
# CONFIG_PI433 is not set
CONFIG_PID_NS=y
-CONFIG_PINCTRL_ALDERLAKE=m
-# CONFIG_PINCTRL_BROXTON is not set
-# CONFIG_PINCTRL_CHERRYVIEW is not set
# CONFIG_PINCTRL_CS42L43 is not set
# CONFIG_PINCTRL_CY8C95X0 is not set
-CONFIG_PINCTRL_ELKHARTLAKE=m
-CONFIG_PINCTRL_EMMITSBURG=m
# CONFIG_PINCTRL_EQUILIBRIUM is not set
-CONFIG_PINCTRL_ICELAKE=m
# CONFIG_PINCTRL_IPQ6018 is not set
# CONFIG_PINCTRL_IPQ8074 is not set
# CONFIG_PINCTRL is not set
-# CONFIG_PINCTRL_JASPERLAKE is not set
-CONFIG_PINCTRL_LAKEFIELD=m
# CONFIG_PINCTRL_LPASS_LPI is not set
-# CONFIG_PINCTRL_LYNXPOINT is not set
# CONFIG_PINCTRL_MCP23S08 is not set
# CONFIG_PINCTRL_MDM9615 is not set
# CONFIG_PINCTRL_MICROCHIP_SGPIO is not set
@@ -4680,8 +4703,8 @@ CONFIG_RD_GZIP=y
CONFIG_RD_LZ4=y
CONFIG_RD_LZMA=y
CONFIG_RD_LZO=y
-CONFIG_RDMA_RXE=m
-CONFIG_RDMA_SIW=m
+# CONFIG_RDMA_RXE is not set
+# CONFIG_RDMA_SIW is not set
# CONFIG_RDS is not set
CONFIG_RD_XZ=y
CONFIG_RD_ZSTD=y
@@ -4722,6 +4745,7 @@ CONFIG_REGULATOR_FIXED_VOLTAGE=m
# CONFIG_REGULATOR_MAX8973 is not set
# CONFIG_REGULATOR_MCP16502 is not set
# CONFIG_REGULATOR_MT6311 is not set
+# CONFIG_REGULATOR_NETLINK_EVENTS is not set
# CONFIG_REGULATOR_PF8X00 is not set
# CONFIG_REGULATOR_PFUZE100 is not set
# CONFIG_REGULATOR_PV88060 is not set
@@ -4870,6 +4894,7 @@ CONFIG_RTC_DRV_M41T80_WDT=y
CONFIG_RTC_DRV_M48T35=m
CONFIG_RTC_DRV_M48T59=m
# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_MAX31335 is not set
CONFIG_RTC_DRV_MAX6900=m
# CONFIG_RTC_DRV_MAX6902 is not set
# CONFIG_RTC_DRV_MAX6916 is not set
@@ -4956,7 +4981,7 @@ CONFIG_RTW88=m
# CONFIG_RTW89_8851BE is not set
CONFIG_RTW89_8852AE=m
CONFIG_RTW89_8852BE=m
-# CONFIG_RTW89_8852CE is not set
+CONFIG_RTW89_8852CE=m
# CONFIG_RTW89_DEBUGFS is not set
# CONFIG_RTW89_DEBUGMSG is not set
CONFIG_RTW89=m
@@ -4983,6 +5008,7 @@ CONFIG_S390_VMUR=y
CONFIG_S390=y
# CONFIG_SAMPLE_ANDROID_BINDERFS is not set
# CONFIG_SAMPLE_AUXDISPLAY is not set
+# CONFIG_SAMPLE_CGROUP is not set
# CONFIG_SAMPLE_CONFIGFS is not set
# CONFIG_SAMPLE_CONNECTOR is not set
# CONFIG_SAMPLE_FANOTIFY_ERROR is not set
@@ -5164,7 +5190,7 @@ CONFIG_SECONDARY_TRUSTED_KEYRING=y
CONFIG_SECRETMEM=y
CONFIG_SECTION_MISMATCH_WARN_ONLY=y
# CONFIG_SECURITY_APPARMOR is not set
-# CONFIG_SECURITY_DMESG_RESTRICT is not set
+CONFIG_SECURITY_DMESG_RESTRICT=y
CONFIG_SECURITYFS=y
CONFIG_SECURITY_INFINIBAND=y
# CONFIG_SECURITY is not set
@@ -5257,6 +5283,7 @@ CONFIG_SENSORS_FSCHMD=m
# CONFIG_SENSORS_FTSTEUTATES is not set
CONFIG_SENSORS_G760A=m
# CONFIG_SENSORS_G762 is not set
+# CONFIG_SENSORS_GIGABYTE_WATERFORCE is not set
CONFIG_SENSORS_GL518SM=m
CONFIG_SENSORS_GL520SM=m
# CONFIG_SENSORS_GPIO_FAN is not set
@@ -5323,6 +5350,7 @@ CONFIG_SENSORS_LTC4215=m
CONFIG_SENSORS_LTC4245=m
# CONFIG_SENSORS_LTC4260 is not set
CONFIG_SENSORS_LTC4261=m
+# CONFIG_SENSORS_LTC4286 is not set
# CONFIG_SENSORS_MAX1111 is not set
# CONFIG_SENSORS_MAX127 is not set
# CONFIG_SENSORS_MAX15301 is not set
@@ -5350,9 +5378,11 @@ CONFIG_SENSORS_MAX8688=m
# CONFIG_SENSORS_MC34VR500 is not set
CONFIG_SENSORS_MCP3021=m
# CONFIG_SENSORS_MLXREG_FAN is not set
+# CONFIG_SENSORS_MP2856 is not set
# CONFIG_SENSORS_MP2888 is not set
# CONFIG_SENSORS_MP2975 is not set
# CONFIG_SENSORS_MP5023 is not set
+# CONFIG_SENSORS_MP5990 is not set
# CONFIG_SENSORS_MPQ7932 is not set
# CONFIG_SENSORS_MR75203 is not set
# CONFIG_SENSORS_NCT6683 is not set
@@ -5522,10 +5552,8 @@ CONFIG_SIGNALFD=y
CONFIG_SIPHASH_KUNIT_TEST=m
# CONFIG_SKGE is not set
# CONFIG_SKY2 is not set
-# CONFIG_SLAB_DEPRECATED is not set
CONFIG_SLAB_FREELIST_HARDENED=y
CONFIG_SLAB_FREELIST_RANDOM=y
-# CONFIG_SLAB is not set
# CONFIG_SLAB_MERGE_DEFAULT is not set
# CONFIG_SLIMBUS is not set
CONFIG_SLIP_COMPRESSED=y
@@ -6271,6 +6299,7 @@ CONFIG_SQUASHFS_ZSTD=y
# CONFIG_SSB is not set
# CONFIG_SSFDC is not set
# CONFIG_SSIF_IPMI_BMC is not set
+CONFIG_STACKDEPOT_MAX_FRAMES=64
CONFIG_STACK_HASH_ORDER=20
CONFIG_STACKINIT_KUNIT_TEST=m
CONFIG_STACKPROTECTOR_STRONG=y
@@ -6391,7 +6420,7 @@ CONFIG_TCP_CONG_DCTCP=m
# CONFIG_TCP_CONG_HSTCP is not set
CONFIG_TCP_CONG_HTCP=m
# CONFIG_TCP_CONG_HYBLA is not set
-# CONFIG_TCP_CONG_ILLINOIS is not set
+CONFIG_TCP_CONG_ILLINOIS=m
# CONFIG_TCP_CONG_LP is not set
CONFIG_TCP_CONG_NV=m
# CONFIG_TCP_CONG_SCALABLE is not set
@@ -6455,6 +6484,7 @@ CONFIG_TEST_SORT=m
# CONFIG_TEST_UUID is not set
CONFIG_TEST_VMALLOC=m
# CONFIG_TEST_XARRAY is not set
+# CONFIG_THERMAL_DEBUGFS is not set
# CONFIG_THERMAL_DEFAULT_GOV_FAIR_SHARE is not set
# CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE is not set
# CONFIG_THERMAL_DEFAULT_GOV_USER_SPACE is not set
@@ -6633,6 +6663,7 @@ CONFIG_TRACER_SNAPSHOT=y
CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS=y
# CONFIG_TRANSPARENT_HUGEPAGE is not set
# CONFIG_TRANSPARENT_HUGEPAGE_MADVISE is not set
+# CONFIG_TRANSPARENT_HUGEPAGE_NEVER is not set
CONFIG_TREE_RCU=y
# CONFIG_TRIM_UNUSED_KSYMS is not set
CONFIG_TRUSTED_KEYS_TEE=y
@@ -6672,6 +6703,7 @@ CONFIG_TYPEC_MUX_FSA4480=m
# CONFIG_TYPEC_MUX_NB7VPQ904M is not set
CONFIG_TYPEC_MUX_PI3USB30532=m
# CONFIG_TYPEC_MUX_PTN36502 is not set
+# CONFIG_TYPEC_MUX_WCD939X_USBSS is not set
# CONFIG_TYPEC_NVIDIA_ALTMODE is not set
# CONFIG_TYPEC_QCOM_PMIC is not set
# CONFIG_TYPEC_RT1711H is not set
@@ -7028,6 +7060,7 @@ CONFIG_VDPA_SIM_NET=m
# CONFIG_VDPA_USER is not set
# CONFIG_VEML6030 is not set
# CONFIG_VEML6070 is not set
+# CONFIG_VEML6075 is not set
CONFIG_VETH=m
# CONFIG_VF610_ADC is not set
# CONFIG_VF610_DAC is not set
@@ -7036,6 +7069,7 @@ CONFIG_VETH=m
CONFIG_VFIO_AP=m
CONFIG_VFIO_CCW=m
CONFIG_VFIO_CONTAINER=y
+# CONFIG_VFIO_DEBUGFS is not set
CONFIG_VFIO_DEVICE_CDEV=y
CONFIG_VFIO_GROUP=y
CONFIG_VFIO_IOMMU_TYPE1=m
@@ -7071,6 +7105,7 @@ CONFIG_VHOST_VSOCK=m
# CONFIG_VIDEO_ADV_DEBUG is not set
# CONFIG_VIDEO_AK7375 is not set
# CONFIG_VIDEO_AK881X is not set
+# CONFIG_VIDEO_ALVIUM_CSI2 is not set
# CONFIG_VIDEO_AR0521 is not set
CONFIG_VIDEO_AU0828=m
# CONFIG_VIDEO_AU0828_RC is not set
@@ -7119,6 +7154,8 @@ CONFIG_VIDEO_EM28XX_RC=m
# CONFIG_VIDEO_FB_IVTV_FORCE_PAT is not set
CONFIG_VIDEO_FB_IVTV=m
# CONFIG_VIDEO_FIXED_MINOR_RANGES is not set
+# CONFIG_VIDEO_GC0308 is not set
+# CONFIG_VIDEO_GC2145 is not set
# CONFIG_VIDEO_GO7007 is not set
# CONFIG_VIDEO_GS1662 is not set
CONFIG_VIDEO_HDPVR=m
@@ -7188,6 +7225,7 @@ CONFIG_VIDEO_IVTV=m
# CONFIG_VIDEO_OV5675 is not set
# CONFIG_VIDEO_OV5693 is not set
# CONFIG_VIDEO_OV5695 is not set
+# CONFIG_VIDEO_OV64A40 is not set
# CONFIG_VIDEO_OV6650 is not set
# CONFIG_VIDEO_OV7251 is not set
# CONFIG_VIDEO_OV7640 is not set
@@ -7240,6 +7278,7 @@ CONFIG_VIDEO_SAA7164=m
# CONFIG_VIDEO_TDA9840 is not set
# CONFIG_VIDEO_TEA6415C is not set
# CONFIG_VIDEO_TEA6420 is not set
+# CONFIG_VIDEO_THP7312 is not set
# CONFIG_VIDEO_THS7303 is not set
# CONFIG_VIDEO_THS8200 is not set
# CONFIG_VIDEO_TLV320AIC23B is not set
@@ -7255,6 +7294,7 @@ CONFIG_VIDEO_TUNER=m
# CONFIG_VIDEO_TW5864 is not set
# CONFIG_VIDEO_TW686X is not set
# CONFIG_VIDEO_TW68 is not set
+# CONFIG_VIDEO_TW9900 is not set
# CONFIG_VIDEO_TW9903 is not set
# CONFIG_VIDEO_TW9906 is not set
# CONFIG_VIDEO_TW9910 is not set
@@ -7289,6 +7329,7 @@ CONFIG_VIRTIO_NET=m
CONFIG_VIRTIO_PCI_LEGACY=y
# CONFIG_VIRTIO_PMEM is not set
# CONFIG_VIRTIO_VDPA is not set
+# CONFIG_VIRTIO_VFIO_PCI is not set
CONFIG_VIRTIO_VSOCKETS=m
CONFIG_VIRTIO=y
# CONFIG_VIRTUALIZATION is not set
@@ -7414,7 +7455,7 @@ CONFIG_XFS_POSIX_ACL=y
CONFIG_XFS_QUOTA=y
# CONFIG_XFS_RT is not set
# CONFIG_XFS_SUPPORT_ASCII_CI is not set
-CONFIG_XFS_SUPPORT_V4=y
+# CONFIG_XFS_SUPPORT_V4 is not set
# CONFIG_XFS_WARN is not set
# CONFIG_XGENE_DMA is not set
# CONFIG_XILINX_DMA is not set
@@ -7473,6 +7514,7 @@ CONFIG_ZRAM_DEF_COMP_LZORLE=y
# CONFIG_ZRAM_DEF_COMP_ZSTD is not set
# CONFIG_ZRAM_MEMORY_TRACKING is not set
# CONFIG_ZRAM_MULTI_COMP is not set
+# CONFIG_ZRAM_TRACK_ENTRY_ACTIME is not set
CONFIG_ZRAM_WRITEBACK=y
CONFIG_ZRAM=y
CONFIG_ZSMALLOC_CHAIN_SIZE=8
@@ -7487,6 +7529,7 @@ CONFIG_ZSWAP_COMPRESSOR_DEFAULT_LZO=y
# CONFIG_ZSWAP_DEFAULT_ON is not set
# CONFIG_ZSWAP_EXCLUSIVE_LOADS_DEFAULT_ON is not set
# CONFIG_ZSWAP is not set
+# CONFIG_ZSWAP_SHRINKER_DEFAULT_ON is not set
# CONFIG_ZSWAP_ZPOOL_DEFAULT_Z3FOLD is not set
CONFIG_ZSWAP_ZPOOL_DEFAULT_ZBUD=y
# CONFIG_ZSWAP_ZPOOL_DEFAULT_ZSMALLOC is not set
@@ -7495,7 +7538,7 @@ CONFIG_ZENIFY=y
CONFIG_NTSYNC=y
CONFIG_USER_NS_UNPRIVILEGED=y
CONFIG_TCP_CONG_BBR2=m
-# CONFIG_SCHED_PDS is not set
+CONFIG_SCHED_BORE=y
CONFIG_HID_IPTS=m
CONFIG_HID_ITHC=m
CONFIG_SURFACE_BOOK1_DGPU_SWITCH=m
@@ -7504,11 +7547,8 @@ CONFIG_LEDS_TPS68470=m
CONFIG_SENSORS_SURFACE_FAN=m
CONFIG_SENSORS_SURFACE_TEMP=m
CONFIG_DRM_AMD_COLOR_STEAMDECK=y
-CONFIG_BMI323_I2C=m
-CONFIG_BMI323_SPI=m
CONFIG_DRM_APPLETBDRM=m
CONFIG_HID_APPLETB_BL=m
CONFIG_HID_APPLETB_KBD=m
CONFIG_HID_APPLE_MAGIC_BACKLIGHT=m
CONFIG_APPLE_BCE=m
-CONFIG_SCHED_BORE=y
diff --git a/SOURCES/kernel-x86_64-debug-fedora.config b/SOURCES/kernel-x86_64-debug-fedora.config
index a134486..a6ccf31 100644
--- a/SOURCES/kernel-x86_64-debug-fedora.config
+++ b/SOURCES/kernel-x86_64-debug-fedora.config
@@ -121,6 +121,7 @@ CONFIG_AD5770R=m
# CONFIG_AD5791 is not set
# CONFIG_AD5933 is not set
# CONFIG_AD7091R5 is not set
+CONFIG_AD7091R8=m
CONFIG_AD7124=m
# CONFIG_AD7150 is not set
# CONFIG_AD7192 is not set
@@ -274,6 +275,7 @@ CONFIG_AMD_PMF=m
CONFIG_AMD_PTDMA=m
CONFIG_AMD_SFH_HID=m
# CONFIG_AMDTEE is not set
+CONFIG_AMD_WBRF=y
CONFIG_AMD_XGBE_DCB=y
CONFIG_AMD_XGBE=m
# CONFIG_AMIGA_PARTITION is not set
@@ -284,6 +286,7 @@ CONFIG_ANDROID_BINDERFS=y
# CONFIG_ANDROID_BINDER_IPC_SELFTEST is not set
CONFIG_ANDROID_BINDER_IPC=y
# CONFIG_ANON_VMA_NAME is not set
+# CONFIG_AOSONG_AGS02MA is not set
# CONFIG_APDS9300 is not set
CONFIG_APDS9802ALS=m
# CONFIG_APDS9960 is not set
@@ -326,7 +329,6 @@ CONFIG_ARM64_ERRATUM_2119858=y
CONFIG_ARM64_ERRATUM_2139208=y
CONFIG_ARM64_ERRATUM_2224489=y
CONFIG_ARM64_ERRATUM_2253138=y
-CONFIG_ARM64_ERRATUM_858921=y
CONFIG_ARM64_USE_LSE_ATOMICS=y
CONFIG_ARM_CMN=m
# CONFIG_ARM_MHU_V2 is not set
@@ -491,6 +493,7 @@ CONFIG_BACKLIGHT_LED=m
# CONFIG_BACKLIGHT_LM3639 is not set
CONFIG_BACKLIGHT_LP855X=m
# CONFIG_BACKLIGHT_LV5207LP is not set
+CONFIG_BACKLIGHT_MP3309C=m
CONFIG_BACKLIGHT_MT6370=m
CONFIG_BACKLIGHT_PWM=m
# CONFIG_BACKLIGHT_QCOM_WLED is not set
@@ -543,6 +546,7 @@ CONFIG_BCACHEFS_LOCK_TIME_STATS=y
# CONFIG_BCACHEFS_NO_LATENCY_ACCT is not set
CONFIG_BCACHEFS_POSIX_ACL=y
CONFIG_BCACHEFS_QUOTA=y
+CONFIG_BCACHEFS_SIX_OPTIMISTIC_SPIN=y
# CONFIG_BCACHEFS_TESTS is not set
CONFIG_BCACHE=m
CONFIG_BCM54140_PHY=m
@@ -622,6 +626,7 @@ CONFIG_BLK_DEV_SX8=m
CONFIG_BLK_DEV_THROTTLING=y
CONFIG_BLKDEV_UBLK_LEGACY_OPCODES=y
CONFIG_BLK_DEV_UBLK=m
+CONFIG_BLK_DEV_WRITE_MOUNTED=y
CONFIG_BLK_DEV=y
CONFIG_BLK_DEV_ZONED=y
# CONFIG_BLK_INLINE_ENCRYPTION_FALLBACK is not set
@@ -644,6 +649,8 @@ CONFIG_BMG160_SPI=m
# CONFIG_BMI088_ACCEL is not set
CONFIG_BMI160_I2C=m
CONFIG_BMI160_SPI=m
+CONFIG_BMI323_I2C=m
+CONFIG_BMI323_SPI=m
CONFIG_BMP280=m
CONFIG_BNA=m
CONFIG_BNX2=m
@@ -659,7 +666,6 @@ CONFIG_BONDING=m
# CONFIG_BOOT_CONFIG_FORCE is not set
CONFIG_BOOT_CONFIG=y
# CONFIG_BOOTPARAM_HARDLOCKUP_PANIC is not set
-# CONFIG_BOOTPARAM_HOTPLUG_CPU0 is not set
# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
CONFIG_BOOT_PRINTK_DELAY=y
@@ -789,7 +795,7 @@ CONFIG_BYTCRC_PMIC_OPREGION=y
# CONFIG_CACHEFILES_DEBUG is not set
# CONFIG_CACHEFILES_ERROR_INJECTION is not set
CONFIG_CACHEFILES=m
-# CONFIG_CACHEFILES_ONDEMAND is not set
+CONFIG_CACHEFILES_ONDEMAND=y
CONFIG_CACHESTAT_SYSCALL=y
# CONFIG_CADENCE_WATCHDOG is not set
# CONFIG_CAIF is not set
@@ -1161,7 +1167,6 @@ CONFIG_CRYPTO_CAST6_AVX_X86_64=m
CONFIG_CRYPTO_CAST6=m
CONFIG_CRYPTO_CBC=y
CONFIG_CRYPTO_CCM=y
-CONFIG_CRYPTO_CFB=y
CONFIG_CRYPTO_CHACHA20=m
CONFIG_CRYPTO_CHACHA20POLY1305=m
CONFIG_CRYPTO_CHACHA20_X86_64=y
@@ -1196,11 +1201,14 @@ CONFIG_CRYPTO_DEV_HIFN_795X_RNG=y
# CONFIG_CRYPTO_DEV_HISI_SEC2 is not set
# CONFIG_CRYPTO_DEV_HISI_SEC is not set
# CONFIG_CRYPTO_DEV_HISI_TRNG is not set
-# CONFIG_CRYPTO_DEV_NITROX_CNN55XX is not set
+CONFIG_CRYPTO_DEV_IAA_CRYPTO=m
+CONFIG_CRYPTO_DEV_IAA_CRYPTO_STATS=y
+CONFIG_CRYPTO_DEV_NITROX_CNN55XX=m
# CONFIG_CRYPTO_DEV_OCTEONTX_CPT is not set
CONFIG_CRYPTO_DEV_PADLOCK_AES=m
CONFIG_CRYPTO_DEV_PADLOCK=m
CONFIG_CRYPTO_DEV_PADLOCK_SHA=m
+CONFIG_CRYPTO_DEV_QAT_420XX=m
CONFIG_CRYPTO_DEV_QAT_4XXX=m
CONFIG_CRYPTO_DEV_QAT_C3XXX=m
CONFIG_CRYPTO_DEV_QAT_C3XXXVF=m
@@ -1259,7 +1267,6 @@ CONFIG_CRYPTO_MICHAEL_MIC=m
CONFIG_CRYPTO_NHPOLY1305_AVX2=m
CONFIG_CRYPTO_NHPOLY1305_SSE2=m
CONFIG_CRYPTO_NULL=y
-CONFIG_CRYPTO_OFB=y
CONFIG_CRYPTO_PCBC=m
CONFIG_CRYPTO_PCRYPT=m
CONFIG_CRYPTO_POLY1305=m
@@ -1362,7 +1369,6 @@ CONFIG_DEBUG_FS_ALLOW_ALL=y
CONFIG_DEBUG_FS=y
# CONFIG_DEBUG_GPIO is not set
CONFIG_DEBUG_HIGHMEM=y
-# CONFIG_DEBUG_HOTPLUG_CPU0 is not set
CONFIG_DEBUG_INFO_BTF=y
# CONFIG_DEBUG_INFO_COMPRESSED is not set
CONFIG_DEBUG_INFO_COMPRESSED_NONE=y
@@ -1431,7 +1437,7 @@ CONFIG_DEBUG_STACK_USAGE=y
# CONFIG_DEBUG_VM_MAPLE_TREE is not set
CONFIG_DEBUG_VM_PGFLAGS=y
CONFIG_DEBUG_VM_PGTABLE=y
-# CONFIG_DEBUG_VM_RB is not set # revisit this if performance isn't horrible
+# CONFIG_DEBUG_VM_RB is not set
CONFIG_DEBUG_VM_SHOOT_LAZIES=y
# CONFIG_DEBUG_VM_VMACACHE is not set
CONFIG_DEBUG_VM=y
@@ -1562,6 +1568,7 @@ CONFIG_DP83867_PHY=m
CONFIG_DP83869_PHY=m
# CONFIG_DP83TC811_PHY is not set
# CONFIG_DP83TD510_PHY is not set
+CONFIG_DP83TG720_PHY=m
# CONFIG_DPM_WATCHDOG is not set
CONFIG_DPOT_DAC=m
# CONFIG_DPS310 is not set
@@ -1627,6 +1634,7 @@ CONFIG_DRM_I915_COMPRESS_ERROR=y
# CONFIG_DRM_I915_DEBUG_MMIO is not set
# CONFIG_DRM_I915_DEBUG_RUNTIME_PM is not set
# CONFIG_DRM_I915_DEBUG_VBLANK_EVADE is not set
+# CONFIG_DRM_I915_DEBUG_WAKEREF is not set
CONFIG_DRM_I915_FENCE_TIMEOUT=10000
CONFIG_DRM_I915_FORCE_PROBE=""
CONFIG_DRM_I915_GVT_KVMGT=m
@@ -1666,6 +1674,7 @@ CONFIG_DRM_MGAG200=m
# CONFIG_DRM_MSM_GPU_SUDO is not set
# CONFIG_DRM_MXSFB is not set
CONFIG_DRM_NOUVEAU_BACKLIGHT=y
+CONFIG_DRM_NOUVEAU_GSP_DEFAULT=y
CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_NOUVEAU_SVM is not set
# CONFIG_DRM_NWL_MIPI_DSI is not set
@@ -1687,6 +1696,7 @@ CONFIG_DRM_PANEL_FEIYANG_FY07024DI26A30D=m
# CONFIG_DRM_PANEL_HIMAX_HX8394 is not set
# CONFIG_DRM_PANEL_ILITEK_IL9322 is not set
# CONFIG_DRM_PANEL_ILITEK_ILI9341 is not set
+# CONFIG_DRM_PANEL_ILITEK_ILI9805 is not set
# CONFIG_DRM_PANEL_ILITEK_ILI9881C is not set
CONFIG_DRM_PANEL_ILITEK_ILI9882T=m
CONFIG_DRM_PANEL_INNOLUX_EJ030NA=m
@@ -1749,6 +1759,7 @@ CONFIG_DRM_PANEL_SEIKO_43WVF1G=m
# CONFIG_DRM_PANEL_SONY_TD4353_JDI is not set
CONFIG_DRM_PANEL_SONY_TULIP_TRULY_NT35521=m
CONFIG_DRM_PANEL_STARTEK_KD070FHFID015=m
+# CONFIG_DRM_PANEL_SYNAPTICS_R63353 is not set
# CONFIG_DRM_PANEL_TDO_TL070WSH30 is not set
# CONFIG_DRM_PANEL_TPO_TD028TTEC1 is not set
# CONFIG_DRM_PANEL_TPO_TD043MTEA1 is not set
@@ -1771,7 +1782,7 @@ CONFIG_DRM_RADEON_USERPTR=y
# CONFIG_DRM_RCAR_USE_LVDS is not set
# CONFIG_DRM_RCAR_USE_MIPI_DSI is not set
CONFIG_DRM_SAMSUNG_DSIM=m
-# CONFIG_DRM_SII902X is not set
+CONFIG_DRM_SII902X=m
CONFIG_DRM_SII9234=m
# CONFIG_DRM_SIL_SII8620 is not set
CONFIG_DRM_SIMPLE_BRIDGE=m
@@ -1802,7 +1813,27 @@ CONFIG_DRM_VKMS=m
CONFIG_DRM_VMWGFX_FBCON=y
CONFIG_DRM_VMWGFX=m
CONFIG_DRM_VMWGFX_MKSSTATS=y
+# CONFIG_DRM_XE_DEBUG is not set
+# CONFIG_DRM_XE_DEBUG_MEM is not set
+# CONFIG_DRM_XE_DEBUG_SRIOV is not set
+# CONFIG_DRM_XE_DEBUG_VM is not set
+CONFIG_DRM_XE_DISPLAY=y
+CONFIG_DRM_XE_ENABLE_SCHEDTIMEOUT_LIMIT=y
+CONFIG_DRM_XE_FORCE_PROBE=""
+CONFIG_DRM_XE_JOB_TIMEOUT_MAX=10000
+CONFIG_DRM_XE_JOB_TIMEOUT_MIN=1
+# CONFIG_DRM_XE_KUNIT_TEST is not set
+# CONFIG_DRM_XE_LARGE_GUC_BUFFER is not set
+CONFIG_DRM_XE=m
# CONFIG_DRM_XEN_FRONTEND is not set
+CONFIG_DRM_XE_PREEMPT_TIMEOUT=640000
+CONFIG_DRM_XE_PREEMPT_TIMEOUT_MAX=10000000
+CONFIG_DRM_XE_PREEMPT_TIMEOUT_MIN=1
+# CONFIG_DRM_XE_SIMPLE_ERROR_CAPTURE is not set
+CONFIG_DRM_XE_TIMESLICE_MAX=10000000
+CONFIG_DRM_XE_TIMESLICE_MIN=1
+# CONFIG_DRM_XE_USERPTR_INVAL_INJECT is not set
+# CONFIG_DRM_XE_WERROR is not set
CONFIG_DRM=y
# CONFIG_DS1682 is not set
# CONFIG_DS1803 is not set
@@ -1902,6 +1933,7 @@ CONFIG_DVB_USB_VP702X=m
CONFIG_DVB_USB_VP7045=m
CONFIG_DVB_USB_ZD1301=m
# CONFIG_DW_AXI_DMAC is not set
+CONFIG_DWC_PCIE_PMU=m
CONFIG_DW_DMAC_CORE=y
CONFIG_DW_DMAC=m
CONFIG_DW_DMAC_PCI=y
@@ -1990,8 +2022,10 @@ CONFIG_EFI_ZBOOT=y
CONFIG_ELF_CORE=y
# CONFIG_EMBEDDED is not set
CONFIG_ENA_ETHERNET=m
+# CONFIG_ENC28J60 is not set
CONFIG_ENCLOSURE_SERVICES=m
CONFIG_ENCRYPTED_KEYS=y
+# CONFIG_ENCX24J600 is not set
CONFIG_ENERGY_MODEL=y
CONFIG_ENIC=m
CONFIG_ENVELOPE_DETECTOR=m
@@ -2000,6 +2034,7 @@ CONFIG_EPOLL=y
CONFIG_EQUALIZER=m
# CONFIG_EROFS_FS_DEBUG is not set
CONFIG_EROFS_FS=m
+CONFIG_EROFS_FS_ONDEMAND=y
# CONFIG_EROFS_FS_PCPU_KTHREAD is not set
CONFIG_EROFS_FS_POSIX_ACL=y
CONFIG_EROFS_FS_SECURITY=y
@@ -2088,7 +2123,6 @@ CONFIG_FAULT_INJECTION=y
# CONFIG_FB_3DFX is not set
# CONFIG_FB_ARC is not set
# CONFIG_FB_ARK is not set
-# CONFIG_FB_ARMCLCD is not set
# CONFIG_FB_ASILIANT is not set
# CONFIG_FB_ATY128 is not set
# CONFIG_FB_ATY is not set
@@ -2107,9 +2141,7 @@ CONFIG_FB_EFI=y
# CONFIG_FB_IBM_GXT4500 is not set
# CONFIG_FB_IMSTT is not set
# CONFIG_FB_IMX is not set
-# CONFIG_FB_INTEL is not set
# CONFIG_FB_KYRO is not set
-# CONFIG_FB_LE80578 is not set
# CONFIG_FB_MATROX_G is not set
# CONFIG_FB_MATROX_I2C is not set
# CONFIG_FB_MATROX is not set
@@ -2159,6 +2191,7 @@ CONFIG_FHANDLE=y
CONFIG_FILE_LOCKING=y
# CONFIG_FIND_BIT_BENCHMARK is not set
# CONFIG_FIPS_SIGNATURE_SELFTEST is not set
+# CONFIG_FIREWIRE_KUNIT_DEVICE_ATTRIBUTE_TEST is not set
CONFIG_FIREWIRE_KUNIT_UAPI_TEST=m
CONFIG_FIREWIRE=m
CONFIG_FIREWIRE_NET=m
@@ -2208,8 +2241,8 @@ CONFIG_FRAME_POINTER=y
CONFIG_FRAME_WARN=2048
CONFIG_FRONTSWAP=y
# CONFIG_FSCACHE_DEBUG is not set
-CONFIG_FSCACHE=m
CONFIG_FSCACHE_STATS=y
+CONFIG_FSCACHE=y
CONFIG_FS_DAX=y
CONFIG_FS_ENCRYPTION_INLINE_CRYPT=y
CONFIG_FS_ENCRYPTION=y
@@ -2407,9 +2440,9 @@ CONFIG_HASHTABLE_KUNIT_TEST=m
CONFIG_HD44780=m
# CONFIG_HDC100X is not set
CONFIG_HDC2010=m
+# CONFIG_HDC3020 is not set
CONFIG_HDMI_LPE_AUDIO=m
CONFIG_HEADERS_INSTALL=y
-# CONFIG_HERMES is not set
# CONFIG_HFI1_DEBUG_SDMA_ORDER is not set
CONFIG_HFS_FS=m
CONFIG_HFSPLUS_FS=m
@@ -2476,6 +2509,7 @@ CONFIG_HID_MACALLY=m
CONFIG_HID_MAGICMOUSE=y
CONFIG_HID_MALTRON=m
CONFIG_HID_MAYFLASH=m
+# CONFIG_HID_MCP2200 is not set
CONFIG_HID_MCP2221=m
CONFIG_HID_MEGAWORLD_FF=m
CONFIG_HID_MICROSOFT=m
@@ -2564,7 +2598,6 @@ CONFIG_HMC425=m
# CONFIG_HMC6352 is not set
CONFIG_HMM_MIRROR=y
CONFIG_HOLTEK_FF=y
-# CONFIG_HOSTAP is not set
CONFIG_HOTPLUG_CPU=y
CONFIG_HOTPLUG_PCI_ACPI_IBM=m
CONFIG_HOTPLUG_PCI_ACPI=y
@@ -2589,6 +2622,7 @@ CONFIG_HPWDT_NMI_DECODING=y
CONFIG_HP_WMI=m
CONFIG_HSA_AMD_SVM=y
CONFIG_HSA_AMD=y
+# CONFIG_HSC030PA is not set
# CONFIG_HSI is not set
CONFIG_HSR=m
CONFIG_HSU_DMA=y
@@ -2748,6 +2782,7 @@ CONFIG_IB700_WDT=m
CONFIG_IBM_ASM=m
CONFIG_IBMASR=m
# CONFIG_IBM_RTL is not set
+CONFIG_ICE_HWMON=y
CONFIG_ICE_HWTS=y
CONFIG_ICE=m
CONFIG_ICE_SWITCHDEV=y
@@ -3028,13 +3063,14 @@ CONFIG_INTEL_MEI=m
CONFIG_INTEL_MEI_ME=m
CONFIG_INTEL_MEI_PXP=m
CONFIG_INTEL_MEI_TXE=m
+# CONFIG_INTEL_MEI_VSC_HW is not set
CONFIG_INTEL_MEI_WDT=m
# CONFIG_INTEL_MENLOW is not set
CONFIG_INTEL_MRFLD_ADC=m
CONFIG_INTEL_MRFLD_PWRBTN=m
CONFIG_INTEL_OAKTRAIL=m
CONFIG_INTEL_PCH_THERMAL=m
-CONFIG_INTEL_PMC_CORE=y
+CONFIG_INTEL_PMC_CORE=m
CONFIG_INTEL_PMT_CLASS=m
CONFIG_INTEL_PMT_CRASHLOG=m
CONFIG_INTEL_PMT_TELEMETRY=m
@@ -3295,6 +3331,7 @@ CONFIG_ISL29003=m
CONFIG_ISL29020=m
# CONFIG_ISL29125 is not set
# CONFIG_ISL29501 is not set
+# CONFIG_ISL76682 is not set
CONFIG_ISO9660_FS=m
CONFIG_IS_SIGNED_TYPE_KUNIT_TEST=m
CONFIG_IT8712F_WDT=m
@@ -3367,6 +3404,7 @@ CONFIG_JOYSTICK_PSXPAD_SPI_FF=y
CONFIG_JOYSTICK_PSXPAD_SPI=m
CONFIG_JOYSTICK_PXRC=m
CONFIG_JOYSTICK_QWIIC=m
+# CONFIG_JOYSTICK_SEESAW is not set
# CONFIG_JOYSTICK_SENSEHAT is not set
CONFIG_JOYSTICK_SIDEWINDER=m
CONFIG_JOYSTICK_SPACEBALL=m
@@ -3387,6 +3425,7 @@ CONFIG_KALLSYMS_ALL=y
# CONFIG_KALLSYMS_SELFTEST is not set
CONFIG_KALLSYMS=y
# CONFIG_KARMA_PARTITION is not set
+# CONFIG_KASAN_EXTRA_INFO is not set
CONFIG_KASAN_GENERIC=y
CONFIG_KASAN_INLINE=y
CONFIG_KASAN_KUNIT_TEST=m
@@ -3490,12 +3529,14 @@ CONFIG_KUNIT_TEST=m
CONFIG_KVM_AMD=m
CONFIG_KVM_AMD_SEV=y
CONFIG_KVM_GUEST=y
+CONFIG_KVM_HYPERV=y
CONFIG_KVM_INTEL=m
CONFIG_KVM=m
CONFIG_KVM_MAX_NR_VCPUS=4096
CONFIG_KVM_MMU_AUDIT=y
CONFIG_KVM_PROVE_MMU=y
CONFIG_KVM_SMM=y
+CONFIG_KVM_SW_PROTECTED_VM=y
# CONFIG_KVM_WERROR is not set
CONFIG_KVM_XEN=y
CONFIG_KXCJK1013=m
@@ -3505,6 +3546,9 @@ CONFIG_L2TP_ETH=m
CONFIG_L2TP_IP=m
CONFIG_L2TP=m
CONFIG_L2TP_V3=y
+CONFIG_LAN743X=m
+CONFIG_LAN966X_DCB=y
+CONFIG_LAN966X_SWITCH=m
# CONFIG_LAPB is not set
CONFIG_LATENCYTOP=y
# CONFIG_LATTICE_ECP3_CONFIG is not set
@@ -3568,6 +3612,7 @@ CONFIG_LEDS_LP50XX=m
# CONFIG_LEDS_LP55XX_COMMON is not set
# CONFIG_LEDS_LP8860 is not set
CONFIG_LEDS_LT3593=m
+CONFIG_LEDS_MAX5970=m
CONFIG_LEDS_MAX77650=m
CONFIG_LEDS_MLXCPLD=m
CONFIG_LEDS_MLXREG=m
@@ -3693,6 +3738,7 @@ CONFIG_LTC2983=m
# CONFIG_LTO_CLANG_FULL is not set
# CONFIG_LTO_CLANG_THIN is not set
CONFIG_LTO_NONE=y
+# CONFIG_LTR390 is not set
CONFIG_LTR501=m
CONFIG_LTRF216A=m
CONFIG_LV0104CS=m
@@ -3753,6 +3799,7 @@ CONFIG_MAX30208=m
CONFIG_MAX31827=m
CONFIG_MAX31856=m
CONFIG_MAX31865=m
+CONFIG_MAX34408=m
# CONFIG_MAX44000 is not set
CONFIG_MAX44009=m
# CONFIG_MAX517 is not set
@@ -3782,7 +3829,9 @@ CONFIG_MCP41010=m
# CONFIG_MCP4531 is not set
# CONFIG_MCP4725 is not set
CONFIG_MCP4728=m
+CONFIG_MCP4821=m
# CONFIG_MCP4922 is not set
+CONFIG_MCP9600=m
CONFIG_MCTP_SERIAL=m
# CONFIG_MCTP_TRANSPORT_I2C is not set
# CONFIG_MCTP_TRANSPORT_I3C is not set
@@ -3823,7 +3872,6 @@ CONFIG_MEDIA_CAMERA_SUPPORT=y
CONFIG_MEDIA_CEC_RC=y
CONFIG_MEDIA_CEC_SUPPORT=y
CONFIG_MEDIA_CONTROLLER_DVB=y
-CONFIG_MEDIA_CONTROLLER_REQUEST_API=y
CONFIG_MEDIA_CONTROLLER=y
CONFIG_MEDIA_DIGITAL_TV_SUPPORT=y
CONFIG_MEDIA_PCI_SUPPORT=y
@@ -4075,6 +4123,7 @@ CONFIG_MLX5_VDPA=y
CONFIG_MLX5_VFIO_PCI=m
CONFIG_MLX90614=m
CONFIG_MLX90632=m
+# CONFIG_MLX90635 is not set
# CONFIG_MLXBF_BOOTCTL is not set
# CONFIG_MLXBF_GIGE is not set
# CONFIG_MLXBF_PMC is not set
@@ -4324,6 +4373,7 @@ CONFIG_MTD_SPI_NOR_USE_4K_SECTORS=y
CONFIG_MTD_UBI_BEB_LIMIT=20
# CONFIG_MTD_UBI_BLOCK is not set
# CONFIG_MTD_UBI_FASTMAP is not set
+# CONFIG_MTD_UBI_FAULT_INJECTION is not set
# CONFIG_MTD_UBI_GLUEBI is not set
CONFIG_MTD_UBI=m
CONFIG_MTD_UBI_WL_THRESHOLD=4096
@@ -4358,7 +4408,6 @@ CONFIG_NATSEMI=m
CONFIG_NCN26000_PHY=m
CONFIG_NCSI_OEM_CMD_GET_MAC=y
CONFIG_NCSI_OEM_CMD_KEEP_PHY=y
-CONFIG_ND_BLK=m
CONFIG_ND_BTT=m
# CONFIG_NDC_DIS_DYNAMIC_CACHING is not set
CONFIG_ND_PFN=m
@@ -4662,7 +4711,7 @@ CONFIG_NET_VENDOR_LITEX=y
CONFIG_NET_VENDOR_MARVELL=y
CONFIG_NET_VENDOR_MELLANOX=y
CONFIG_NET_VENDOR_MICREL=y
-# CONFIG_NET_VENDOR_MICROCHIP is not set
+CONFIG_NET_VENDOR_MICROCHIP=y
# CONFIG_NET_VENDOR_MICROSEMI is not set
CONFIG_NET_VENDOR_MICROSOFT=y
CONFIG_NET_VENDOR_MYRI=y
@@ -4788,6 +4837,7 @@ CONFIG_NF_REJECT_IPV6=m
CONFIG_NFSD_BLOCKLAYOUT=y
CONFIG_NFSD_FLEXFILELAYOUT=y
CONFIG_NFS_DISABLE_UDP_SUPPORT=y
+# CONFIG_NFSD_LEGACY_CLIENT_TRACKING is not set
CONFIG_NFSD=m
CONFIG_NFSD_PNFS=y
CONFIG_NFSD_SCSILAYOUT=y
@@ -4936,6 +4986,7 @@ CONFIG_NOUVEAU_DEBUG_PUSH=y
CONFIG_NOZOMI=m
CONFIG_NR_CPUS=8192
CONFIG_NS83820=m
+CONFIG_NSM=m
CONFIG_NTB_AMD=m
CONFIG_NTB_EPF=m
CONFIG_NTB_IDT=m
@@ -5016,7 +5067,6 @@ CONFIG_OPT3001=m
CONFIG_OPT4001=m
CONFIG_OPTPROBES=y
CONFIG_ORANGEFS_FS=m
-CONFIG_ORINOCO_USB=m
CONFIG_OSF_PARTITION=y
CONFIG_OSNOISE_TRACER=y
CONFIG_OVERFLOW_KUNIT_TEST=m
@@ -5027,10 +5077,6 @@ CONFIG_OVERLAY_FS=m
CONFIG_OVERLAY_FS_REDIRECT_ALWAYS_FOLLOW=y
# CONFIG_OVERLAY_FS_REDIRECT_DIR is not set
# CONFIG_OVERLAY_FS_XINO_AUTO is not set
-CONFIG_P54_COMMON=m
-CONFIG_P54_PCI=m
-# CONFIG_P54_SPI is not set
-CONFIG_P54_USB=m
CONFIG_PA12203001=m
CONFIG_PACKET_DIAG=y
CONFIG_PACKET=y
@@ -5181,10 +5227,7 @@ CONFIG_PCMCIA_AXNET=m
CONFIG_PCMCIA_LOAD_CIS=y
CONFIG_PCMCIA_NMCLAN=m
CONFIG_PCMCIA_PCNET=m
-# CONFIG_PCMCIA_RAYCS is not set
CONFIG_PCMCIA_SMC91C92=m
-# CONFIG_PCMCIA_SPECTRUM is not set
-# CONFIG_PCMCIA_WL3501 is not set
CONFIG_PCMCIA_XIRC2PS=m
CONFIG_PCMCIA_XIRCOM=m
CONFIG_PCMCIA=y
@@ -5263,6 +5306,7 @@ CONFIG_PINCTRL_EMMITSBURG=m
CONFIG_PINCTRL_EQUILIBRIUM=m
CONFIG_PINCTRL_GEMINILAKE=m
CONFIG_PINCTRL_ICELAKE=m
+CONFIG_PINCTRL_INTEL_PLATFORM=m
# CONFIG_PINCTRL_IPQ6018 is not set
# CONFIG_PINCTRL_IPQ8074 is not set
CONFIG_PINCTRL_JASPERLAKE=m
@@ -5273,6 +5317,7 @@ CONFIG_PINCTRL_LYNXPOINT=m
# CONFIG_PINCTRL_MCP23S08 is not set
CONFIG_PINCTRL_MESON=y
CONFIG_PINCTRL_METEORLAKE=m
+CONFIG_PINCTRL_METEORPOINT=m
# CONFIG_PINCTRL_MICROCHIP_SGPIO is not set
# CONFIG_PINCTRL_MSM8226 is not set
# CONFIG_PINCTRL_MSM8953 is not set
@@ -5293,6 +5338,7 @@ CONFIG_PINCTRL_SM8350_LPASS_LPI=m
CONFIG_PINCTRL_SUNRISEPOINT=m
# CONFIG_PINCTRL_SX150X is not set
CONFIG_PINCTRL_TIGERLAKE=m
+CONFIG_PINCTRL_TPS6594=m
CONFIG_PINCTRL=y
# CONFIG_PING is not set
CONFIG_PINMUX=y
@@ -5585,7 +5631,7 @@ CONFIG_RDS_TCP=m
CONFIG_RD_XZ=y
CONFIG_RD_ZSTD=y
# CONFIG_READABLE_ASM is not set
-# CONFIG_READ_ONLY_THP_FOR_FS is not set
+CONFIG_READ_ONLY_THP_FOR_FS=y
CONFIG_REALTEK_AUTOPM=y
CONFIG_REALTEK_PHY=m
# CONFIG_REED_SOLOMON_TEST is not set
@@ -5637,6 +5683,7 @@ CONFIG_REGULATOR_MP886X=m
# CONFIG_REGULATOR_MPQ7920 is not set
# CONFIG_REGULATOR_MT6311 is not set
CONFIG_REGULATOR_MT6370=m
+# CONFIG_REGULATOR_NETLINK_EVENTS is not set
# CONFIG_REGULATOR_PCA9450 is not set
# CONFIG_REGULATOR_PF8X00 is not set
# CONFIG_REGULATOR_PFUZE100 is not set
@@ -5826,6 +5873,7 @@ CONFIG_RTC_DRV_M41T94=m
CONFIG_RTC_DRV_M48T35=m
CONFIG_RTC_DRV_M48T59=m
# CONFIG_RTC_DRV_M48T86 is not set
+CONFIG_RTC_DRV_MAX31335=m
CONFIG_RTC_DRV_MAX6900=m
CONFIG_RTC_DRV_MAX6902=m
CONFIG_RTC_DRV_MAX6916=m
@@ -5862,6 +5910,7 @@ CONFIG_RTC_DRV_SD3078=m
# CONFIG_RTC_DRV_SNVS is not set
CONFIG_RTC_DRV_STK17TA8=m
# CONFIG_RTC_DRV_TEST is not set
+CONFIG_RTC_DRV_TPS6594=m
CONFIG_RTC_DRV_V3020=m
CONFIG_RTC_DRV_X1205=m
# CONFIG_RTC_DRV_ZYNQMP is not set
@@ -6197,6 +6246,7 @@ CONFIG_SENSORS_FSP_3Y=m
CONFIG_SENSORS_FTSTEUTATES=m
CONFIG_SENSORS_G760A=m
CONFIG_SENSORS_G762=m
+CONFIG_SENSORS_GIGABYTE_WATERFORCE=m
CONFIG_SENSORS_GL518SM=m
CONFIG_SENSORS_GL520SM=m
# CONFIG_SENSORS_GPIO_FAN is not set
@@ -6267,6 +6317,7 @@ CONFIG_SENSORS_LTC4222=m
CONFIG_SENSORS_LTC4245=m
CONFIG_SENSORS_LTC4260=m
CONFIG_SENSORS_LTC4261=m
+# CONFIG_SENSORS_LTC4286 is not set
CONFIG_SENSORS_MAX1111=m
# CONFIG_SENSORS_MAX127 is not set
# CONFIG_SENSORS_MAX15301 is not set
@@ -6294,10 +6345,12 @@ CONFIG_SENSORS_MAX8688=m
CONFIG_SENSORS_MC34VR500=m
CONFIG_SENSORS_MCP3021=m
CONFIG_SENSORS_MLXREG_FAN=m
+# CONFIG_SENSORS_MP2856 is not set
CONFIG_SENSORS_MP2888=m
CONFIG_SENSORS_MP2975=m
CONFIG_SENSORS_MP2975_REGULATOR=y
CONFIG_SENSORS_MP5023=m
+# CONFIG_SENSORS_MP5990 is not set
CONFIG_SENSORS_MPQ7932=m
CONFIG_SENSORS_MPQ7932_REGULATOR=y
CONFIG_SENSORS_MR75203=m
@@ -6484,6 +6537,7 @@ CONFIG_SHUFFLE_PAGE_ALLOCATOR=y
# CONFIG_SIEMENS_SIMATIC_IPC is not set
CONFIG_SIGNALFD=y
CONFIG_SIGNED_PE_FILE_VERIFICATION=y
+# CONFIG_SILICOM_PLATFORM is not set
# CONFIG_SIOX is not set
CONFIG_SIPHASH_KUNIT_TEST=m
CONFIG_SIS190=m
@@ -6493,10 +6547,8 @@ CONFIG_SKGE_GENESIS=y
CONFIG_SKGE=m
# CONFIG_SKY2_DEBUG is not set
CONFIG_SKY2=m
-# CONFIG_SLAB_DEPRECATED is not set
CONFIG_SLAB_FREELIST_HARDENED=y
CONFIG_SLAB_FREELIST_RANDOM=y
-# CONFIG_SLAB is not set
# CONFIG_SLAB_MERGE_DEFAULT is not set
# CONFIG_SLIMBUS is not set
CONFIG_SLIP_COMPRESSED=y
@@ -6540,6 +6592,7 @@ CONFIG_SND_ALS300=m
CONFIG_SND_ALS4000=m
CONFIG_SND_AMD_ACP_CONFIG=m
# CONFIG_SND_AMD_ASOC_ACP63 is not set
+CONFIG_SND_AMD_ASOC_ACP70=m
# CONFIG_SND_AMD_ASOC_REMBRANDT is not set
# CONFIG_SND_AMD_ASOC_RENOIR is not set
CONFIG_SND_ASIHPI=m
@@ -7311,6 +7364,7 @@ CONFIG_SSB_PCMCIAHOST=y
CONFIG_SSB_SDIOHOST=y
# CONFIG_SSFDC is not set
CONFIG_SSIF_IPMI_BMC=m
+CONFIG_STACKDEPOT_MAX_FRAMES=64
CONFIG_STACK_HASH_ORDER=20
CONFIG_STACKINIT_KUNIT_TEST=m
CONFIG_STACKPROTECTOR_STRONG=y
@@ -7529,6 +7583,7 @@ CONFIG_TEST_STRING_HELPERS=m
# CONFIG_TEST_UUID is not set
CONFIG_TEST_VMALLOC=m
# CONFIG_TEST_XARRAY is not set
+# CONFIG_THERMAL_DEBUGFS is not set
# CONFIG_THERMAL_DEFAULT_GOV_BANG_BANG is not set
# CONFIG_THERMAL_DEFAULT_GOV_FAIR_SHARE is not set
CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y
@@ -7736,6 +7791,7 @@ CONFIG_TRACE_EVAL_MAP_FILE=y
CONFIG_TRACER_SNAPSHOT=y
# CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS is not set
CONFIG_TRANSPARENT_HUGEPAGE_MADVISE=y
+# CONFIG_TRANSPARENT_HUGEPAGE_NEVER is not set
CONFIG_TRANSPARENT_HUGEPAGE=y
# CONFIG_TRIM_UNUSED_KSYMS is not set
CONFIG_TRUSTED_KEYS_TEE=y
@@ -7773,6 +7829,7 @@ CONFIG_TYPEC_MUX_INTEL_PMC=m
CONFIG_TYPEC_MUX_NB7VPQ904M=m
CONFIG_TYPEC_MUX_PI3USB30532=m
CONFIG_TYPEC_MUX_PTN36502=m
+# CONFIG_TYPEC_MUX_WCD939X_USBSS is not set
CONFIG_TYPEC_NVIDIA_ALTMODE=m
# CONFIG_TYPEC_QCOM_PMIC is not set
# CONFIG_TYPEC_RT1711H is not set
@@ -8033,7 +8090,6 @@ CONFIG_USB_NET_NET1080=m
CONFIG_USB_NET_PLUSB=m
CONFIG_USB_NET_QMI_WWAN=m
CONFIG_USB_NET_RNDIS_HOST=m
-CONFIG_USB_NET_RNDIS_WLAN=m
CONFIG_USB_NET_SMSC75XX=m
CONFIG_USB_NET_SMSC95XX=m
CONFIG_USB_NET_SR9700=m
@@ -8176,7 +8232,6 @@ CONFIG_USB_XHCI_PLATFORM=m
CONFIG_USB_XUSBATM=m
CONFIG_USB=y
CONFIG_USB_YUREX=m
-# CONFIG_USB_ZD1201 is not set
# CONFIG_USB_ZERO is not set
CONFIG_USB_ZR364XX=m
# CONFIG_USELIB is not set
@@ -8195,6 +8250,7 @@ CONFIG_V4L_TEST_DRIVERS=y
CONFIG_VALIDATE_FS_PARSER=y
CONFIG_VBOXGUEST=m
CONFIG_VBOXSF_FS=m
+CONFIG_VCAP=y
CONFIG_VCHIQ_CDEV=y
CONFIG_VCNL3020=m
# CONFIG_VCNL4000 is not set
@@ -8207,11 +8263,13 @@ CONFIG_VDPA_SIM_NET=m
CONFIG_VDPA_USER=m
CONFIG_VEML6030=m
# CONFIG_VEML6070 is not set
+# CONFIG_VEML6075 is not set
CONFIG_VETH=m
# CONFIG_VF610_ADC is not set
# CONFIG_VF610_DAC is not set
CONFIG_VFAT_FS=m
CONFIG_VFIO_CONTAINER=y
+# CONFIG_VFIO_DEBUGFS is not set
# CONFIG_VFIO_DEVICE_CDEV is not set
CONFIG_VFIO_GROUP=y
CONFIG_VFIO_IOMMU_TYPE1=m
@@ -8254,6 +8312,7 @@ CONFIG_VIDEO_ADV7842=m
# CONFIG_VIDEO_ADV_DEBUG is not set
CONFIG_VIDEO_AK7375=m
CONFIG_VIDEO_AK881X=m
+# CONFIG_VIDEO_ALVIUM_CSI2 is not set
CONFIG_VIDEO_AR0521=m
CONFIG_VIDEO_AU0828=m
# CONFIG_VIDEO_AU0828_RC is not set
@@ -8303,6 +8362,8 @@ CONFIG_VIDEO_ET8EK8=m
# CONFIG_VIDEO_FB_IVTV_FORCE_PAT is not set
CONFIG_VIDEO_FB_IVTV=m
# CONFIG_VIDEO_FIXED_MINOR_RANGES is not set
+CONFIG_VIDEO_GC0308=m
+CONFIG_VIDEO_GC2145=m
CONFIG_VIDEO_GO7007_LOADER=m
CONFIG_VIDEO_GO7007=m
CONFIG_VIDEO_GO7007_USB=m
@@ -8374,6 +8435,7 @@ CONFIG_VIDEO_OV5670=m
CONFIG_VIDEO_OV5675=m
CONFIG_VIDEO_OV5693=m
CONFIG_VIDEO_OV5695=m
+CONFIG_VIDEO_OV64A40=m
CONFIG_VIDEO_OV6650=m
CONFIG_VIDEO_OV7251=m
CONFIG_VIDEO_OV7640=m
@@ -8430,6 +8492,7 @@ CONFIG_VIDEO_TDA9840=m
CONFIG_VIDEO_TEA6415C=m
CONFIG_VIDEO_TEA6420=m
# CONFIG_VIDEO_TEGRA_TPG is not set
+# CONFIG_VIDEO_THP7312 is not set
CONFIG_VIDEO_THS7303=m
CONFIG_VIDEO_THS8200=m
CONFIG_VIDEO_TLV320AIC23B=m
@@ -8445,6 +8508,7 @@ CONFIG_VIDEO_TW2804=m
# CONFIG_VIDEO_TW5864 is not set
CONFIG_VIDEO_TW686X=m
# CONFIG_VIDEO_TW68 is not set
+# CONFIG_VIDEO_TW9900 is not set
CONFIG_VIDEO_TW9903=m
CONFIG_VIDEO_TW9906=m
CONFIG_VIDEO_TW9910=m
@@ -8487,6 +8551,7 @@ CONFIG_VIRTIO_PCI_LEGACY=y
CONFIG_VIRTIO_PCI=y
# CONFIG_VIRTIO_PMEM is not set
CONFIG_VIRTIO_VDPA=m
+CONFIG_VIRTIO_VFIO_PCI=m
CONFIG_VIRTIO_VSOCKETS=m
CONFIG_VIRTIO=y
CONFIG_VIRTUALIZATION=y
@@ -8531,6 +8596,7 @@ CONFIG_VXLAN=m
# CONFIG_VZ89X is not set
CONFIG_W1_CON=y
CONFIG_W1=m
+# CONFIG_W1_MASTER_AMD_AXI is not set
# CONFIG_W1_MASTER_DS1WM is not set
CONFIG_W1_MASTER_DS2482=m
CONFIG_W1_MASTER_DS2490=m
@@ -8609,7 +8675,7 @@ CONFIG_WLAN_VENDOR_ATH=y
CONFIG_WLAN_VENDOR_BROADCOM=y
# CONFIG_WLAN_VENDOR_CISCO is not set
CONFIG_WLAN_VENDOR_INTEL=y
-CONFIG_WLAN_VENDOR_INTERSIL=y
+# CONFIG_WLAN_VENDOR_INTERSIL is not set
CONFIG_WLAN_VENDOR_MARVELL=y
CONFIG_WLAN_VENDOR_MEDIATEK=y
CONFIG_WLAN_VENDOR_MICROCHIP=y
@@ -8830,6 +8896,7 @@ CONFIG_ZRAM_DEF_COMP_LZORLE=y
CONFIG_ZRAM=m
CONFIG_ZRAM_MEMORY_TRACKING=y
CONFIG_ZRAM_MULTI_COMP=y
+CONFIG_ZRAM_TRACK_ENTRY_ACTIME=y
# CONFIG_ZRAM_WRITEBACK is not set
CONFIG_ZSMALLOC_CHAIN_SIZE=8
# CONFIG_ZSMALLOC_STAT is not set
@@ -8842,6 +8909,7 @@ CONFIG_ZSWAP_COMPRESSOR_DEFAULT_LZO=y
# CONFIG_ZSWAP_COMPRESSOR_DEFAULT_ZSTD is not set
# CONFIG_ZSWAP_DEFAULT_ON is not set
CONFIG_ZSWAP_EXCLUSIVE_LOADS_DEFAULT_ON=y
+CONFIG_ZSWAP_SHRINKER_DEFAULT_ON=y
CONFIG_ZSWAP=y
# CONFIG_ZSWAP_ZPOOL_DEFAULT_Z3FOLD is not set
CONFIG_ZSWAP_ZPOOL_DEFAULT_ZBUD=y
@@ -8851,7 +8919,7 @@ CONFIG_ZENIFY=y
CONFIG_NTSYNC=y
CONFIG_USER_NS_UNPRIVILEGED=y
CONFIG_TCP_CONG_BBR2=m
-# CONFIG_SCHED_PDS is not set
+CONFIG_SCHED_BORE=y
CONFIG_HID_IPTS=m
CONFIG_HID_ITHC=m
CONFIG_SURFACE_BOOK1_DGPU_SWITCH=m
@@ -8860,8 +8928,6 @@ CONFIG_LEDS_TPS68470=m
CONFIG_SENSORS_SURFACE_FAN=m
CONFIG_SENSORS_SURFACE_TEMP=m
CONFIG_DRM_AMD_COLOR_STEAMDECK=y
-CONFIG_BMI323_I2C=m
-CONFIG_BMI323_SPI=m
CONFIG_DRM_APPLETBDRM=m
CONFIG_HID_APPLETB_BL=m
CONFIG_HID_APPLETB_KBD=m
@@ -8908,4 +8974,3 @@ CONFIG_SND_SOC_SOF_IPC3=y
CONFIG_SND_SOC_SOF_INTEL_IPC4=y
CONFIG_SND_SOC_SOF_AMD_COMMON=m
CONFIG_SND_SOC_TOPOLOGY=y
-CONFIG_SCHED_BORE=y
diff --git a/SOURCES/kernel-x86_64-debug-rhel.config b/SOURCES/kernel-x86_64-debug-rhel.config
index 05111ad..dd908b8 100644
--- a/SOURCES/kernel-x86_64-debug-rhel.config
+++ b/SOURCES/kernel-x86_64-debug-rhel.config
@@ -102,6 +102,7 @@ CONFIG_ACPI=y
# CONFIG_AD5791 is not set
# CONFIG_AD5933 is not set
# CONFIG_AD7091R5 is not set
+# CONFIG_AD7091R8 is not set
# CONFIG_AD7124 is not set
# CONFIG_AD7150 is not set
# CONFIG_AD7192 is not set
@@ -230,6 +231,7 @@ CONFIG_AMD_PMF=m
CONFIG_AMD_PTDMA=m
CONFIG_AMD_SFH_HID=m
# CONFIG_AMDTEE is not set
+# CONFIG_AMD_WBRF is not set
# CONFIG_AMD_XGBE_DCB is not set
CONFIG_AMD_XGBE=m
# CONFIG_AMIGA_PARTITION is not set
@@ -238,6 +240,7 @@ CONFIG_AMPERE_ERRATUM_AC03_CPU_38=y
# CONFIG_AMT is not set
# CONFIG_ANDROID_BINDER_IPC is not set
# CONFIG_ANON_VMA_NAME is not set
+# CONFIG_AOSONG_AGS02MA is not set
# CONFIG_APDS9300 is not set
CONFIG_APDS9802ALS=m
# CONFIG_APDS9960 is not set
@@ -395,6 +398,7 @@ CONFIG_BACKLIGHT_LED=m
# CONFIG_BACKLIGHT_LM3639 is not set
CONFIG_BACKLIGHT_LP855X=m
# CONFIG_BACKLIGHT_LV5207LP is not set
+# CONFIG_BACKLIGHT_MP3309C is not set
# CONFIG_BACKLIGHT_PWM is not set
# CONFIG_BACKLIGHT_QCOM_WLED is not set
# CONFIG_BACKLIGHT_SAHARA is not set
@@ -488,6 +492,7 @@ CONFIG_BLK_DEV_SR=m
# CONFIG_BLK_DEV_THROTTLING_LOW is not set
CONFIG_BLK_DEV_THROTTLING=y
# CONFIG_BLK_DEV_UBLK is not set
+CONFIG_BLK_DEV_WRITE_MOUNTED=y
CONFIG_BLK_DEV=y
CONFIG_BLK_DEV_ZONED=y
# CONFIG_BLK_INLINE_ENCRYPTION is not set
@@ -507,6 +512,8 @@ CONFIG_BLOCK=y
# CONFIG_BMI088_ACCEL is not set
# CONFIG_BMI160_I2C is not set
# CONFIG_BMI160_SPI is not set
+CONFIG_BMI323_I2C=m
+CONFIG_BMI323_SPI=m
# CONFIG_BMP280 is not set
# CONFIG_BNA is not set
CONFIG_BNX2=m
@@ -522,7 +529,6 @@ CONFIG_BONDING=m
# CONFIG_BOOT_CONFIG_FORCE is not set
CONFIG_BOOT_CONFIG=y
CONFIG_BOOTPARAM_HARDLOCKUP_PANIC=y
-CONFIG_BOOTPARAM_HOTPLUG_CPU0=y
# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
CONFIG_BOOT_PRINTK_DELAY=y
@@ -960,7 +966,6 @@ CONFIG_CRYPTO_CAST6_AVX_X86_64=m
CONFIG_CRYPTO_CAST6=m
CONFIG_CRYPTO_CBC=y
CONFIG_CRYPTO_CCM=y
-CONFIG_CRYPTO_CFB=y
CONFIG_CRYPTO_CHACHA20=m
CONFIG_CRYPTO_CHACHA20POLY1305=m
CONFIG_CRYPTO_CHACHA20_X86_64=y
@@ -995,11 +1000,14 @@ CONFIG_CRYPTO_DEV_CHELSIO=m
CONFIG_CRYPTO_DEV_HISI_SEC=m
# CONFIG_CRYPTO_DEV_HISI_TRNG is not set
# CONFIG_CRYPTO_DEV_HISTB_TRNG is not set
+CONFIG_CRYPTO_DEV_IAA_CRYPTO=m
+# CONFIG_CRYPTO_DEV_IAA_CRYPTO_STATS is not set
CONFIG_CRYPTO_DEV_NITROX_CNN55XX=m
# CONFIG_CRYPTO_DEV_OCTEONTX_CPT is not set
CONFIG_CRYPTO_DEV_PADLOCK_AES=m
CONFIG_CRYPTO_DEV_PADLOCK=m
CONFIG_CRYPTO_DEV_PADLOCK_SHA=m
+CONFIG_CRYPTO_DEV_QAT_420XX=m
CONFIG_CRYPTO_DEV_QAT_4XXX=m
CONFIG_CRYPTO_DEV_QAT_C3XXX=m
CONFIG_CRYPTO_DEV_QAT_C3XXXVF=m
@@ -1059,7 +1067,6 @@ CONFIG_CRYPTO_MICHAEL_MIC=m
CONFIG_CRYPTO_NHPOLY1305_AVX2=m
CONFIG_CRYPTO_NHPOLY1305_SSE2=m
CONFIG_CRYPTO_NULL=y
-CONFIG_CRYPTO_OFB=y
CONFIG_CRYPTO_PCBC=m
CONFIG_CRYPTO_PCRYPT=m
CONFIG_CRYPTO_POLY1305=m
@@ -1157,7 +1164,6 @@ CONFIG_DEBUG_FS_ALLOW_ALL=y
# CONFIG_DEBUG_FS_DISALLOW_MOUNT is not set
CONFIG_DEBUG_FS=y
# CONFIG_DEBUG_GPIO is not set
-# CONFIG_DEBUG_HOTPLUG_CPU0 is not set
CONFIG_DEBUG_INFO_BTF=y
# CONFIG_DEBUG_INFO_COMPRESSED is not set
CONFIG_DEBUG_INFO_COMPRESSED_NONE=y
@@ -1224,7 +1230,7 @@ CONFIG_DEBUG_STACK_USAGE=y
# CONFIG_DEBUG_VM_MAPLE_TREE is not set
# CONFIG_DEBUG_VM_PGFLAGS is not set
CONFIG_DEBUG_VM_PGTABLE=y
-# CONFIG_DEBUG_VM_RB is not set # revisit this if performance isn't horrible
+# CONFIG_DEBUG_VM_RB is not set
# CONFIG_DEBUG_VM_SHOOT_LAZIES is not set
# CONFIG_DEBUG_VM_VMACACHE is not set
CONFIG_DEBUG_VM=y
@@ -1352,6 +1358,7 @@ CONFIG_DP83867_PHY=m
# CONFIG_DP83869_PHY is not set
CONFIG_DP83TC811_PHY=m
# CONFIG_DP83TD510_PHY is not set
+# CONFIG_DP83TG720_PHY is not set
# CONFIG_DPM_WATCHDOG is not set
# CONFIG_DPOT_DAC is not set
# CONFIG_DPS310 is not set
@@ -1412,6 +1419,7 @@ CONFIG_DRM_I915_COMPRESS_ERROR=y
# CONFIG_DRM_I915_DEBUG_MMIO is not set
# CONFIG_DRM_I915_DEBUG_RUNTIME_PM is not set
# CONFIG_DRM_I915_DEBUG_VBLANK_EVADE is not set
+# CONFIG_DRM_I915_DEBUG_WAKEREF is not set
CONFIG_DRM_I915_FENCE_TIMEOUT=10000
CONFIG_DRM_I915_FORCE_PROBE=""
# CONFIG_DRM_I915_GVT_KVMGT is not set
@@ -1455,6 +1463,7 @@ CONFIG_DRM_LOAD_EDID_FIRMWARE=y
CONFIG_DRM_MGAG200=m
# CONFIG_DRM_MXSFB is not set
CONFIG_DRM_NOUVEAU_BACKLIGHT=y
+# CONFIG_DRM_NOUVEAU_GSP_DEFAULT is not set
CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_NWL_MIPI_DSI is not set
# CONFIG_DRM_NXP_PTN3460 is not set
@@ -1475,6 +1484,7 @@ CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_PANEL_HIMAX_HX8394 is not set
# CONFIG_DRM_PANEL_ILITEK_IL9322 is not set
# CONFIG_DRM_PANEL_ILITEK_ILI9341 is not set
+# CONFIG_DRM_PANEL_ILITEK_ILI9805 is not set
# CONFIG_DRM_PANEL_ILITEK_ILI9881C is not set
# CONFIG_DRM_PANEL_ILITEK_ILI9882T is not set
# CONFIG_DRM_PANEL_INNOLUX_EJ030NA is not set
@@ -1535,6 +1545,7 @@ CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_PANEL_SONY_TD4353_JDI is not set
# CONFIG_DRM_PANEL_SONY_TULIP_TRULY_NT35521 is not set
# CONFIG_DRM_PANEL_STARTEK_KD070FHFID015 is not set
+# CONFIG_DRM_PANEL_SYNAPTICS_R63353 is not set
# CONFIG_DRM_PANEL_TDO_TL070WSH30 is not set
# CONFIG_DRM_PANEL_TPO_TD028TTEC1 is not set
# CONFIG_DRM_PANEL_TPO_TD043MTEA1 is not set
@@ -1549,6 +1560,7 @@ CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_PARADE_PS8622 is not set
# CONFIG_DRM_PARADE_PS8640 is not set
# CONFIG_DRM_PL111 is not set
+# CONFIG_DRM_POWERVR is not set
CONFIG_DRM_QXL=m
CONFIG_DRM_RADEON=m
CONFIG_DRM_RADEON_USERPTR=y
@@ -1587,6 +1599,7 @@ CONFIG_DRM_VKMS=m
CONFIG_DRM_VMWGFX_FBCON=y
CONFIG_DRM_VMWGFX=m
# CONFIG_DRM_VMWGFX_MKSSTATS is not set
+# CONFIG_DRM_XE is not set
# CONFIG_DRM_XEN_FRONTEND is not set
CONFIG_DRM=y
# CONFIG_DS1682 is not set
@@ -1685,6 +1698,7 @@ CONFIG_DVB_USB_VP702X=m
CONFIG_DVB_USB_VP7045=m
# CONFIG_DVB_USB_ZD1301 is not set
# CONFIG_DW_AXI_DMAC is not set
+# CONFIG_DWC_PCIE_PMU is not set
CONFIG_DW_DMAC=m
CONFIG_DW_DMAC_PCI=y
# CONFIG_DW_EDMA is not set
@@ -1780,6 +1794,7 @@ CONFIG_EPOLL=y
# CONFIG_EQUALIZER is not set
# CONFIG_EROFS_FS_DEBUG is not set
CONFIG_EROFS_FS=m
+# CONFIG_EROFS_FS_ONDEMAND is not set
CONFIG_EROFS_FS_POSIX_ACL=y
CONFIG_EROFS_FS_SECURITY=y
CONFIG_EROFS_FS_XATTR=y
@@ -1846,7 +1861,6 @@ CONFIG_FAULT_INJECTION=y
# CONFIG_FB_3DFX is not set
# CONFIG_FB_ARC is not set
# CONFIG_FB_ARK is not set
-# CONFIG_FB_ARMCLCD is not set
# CONFIG_FB_ASILIANT is not set
# CONFIG_FB_ATY128 is not set
# CONFIG_FB_ATY is not set
@@ -1866,7 +1880,6 @@ CONFIG_FB_EFI=y
# CONFIG_FB_IMSTT is not set
# CONFIG_FB_IMX is not set
# CONFIG_FB_KYRO is not set
-# CONFIG_FB_LE80578 is not set
# CONFIG_FB_MATROX_G is not set
# CONFIG_FB_MATROX_I2C is not set
# CONFIG_FB_MATROX is not set
@@ -1935,11 +1948,12 @@ CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
CONFIG_FRAMEBUFFER_CONSOLE=y
CONFIG_FRAME_POINTER=y
+# CONFIG_FRAMER is not set
CONFIG_FRAME_WARN=2048
CONFIG_FRONTSWAP=y
# CONFIG_FSCACHE_DEBUG is not set
-CONFIG_FSCACHE=m
CONFIG_FSCACHE_STATS=y
+CONFIG_FSCACHE=y
CONFIG_FS_DAX=y
# CONFIG_FS_ENCRYPTION is not set
# CONFIG_FSI is not set
@@ -2122,6 +2136,7 @@ CONFIG_HASHTABLE_KUNIT_TEST=m
# CONFIG_HD44780 is not set
# CONFIG_HDC100X is not set
# CONFIG_HDC2010 is not set
+# CONFIG_HDC3020 is not set
CONFIG_HDLC_CISCO=m
CONFIG_HDLC_FR=m
CONFIG_HDLC=m
@@ -2195,6 +2210,7 @@ CONFIG_HID_LOGITECH=m
CONFIG_HID_MAGICMOUSE=y
# CONFIG_HID_MALTRON is not set
# CONFIG_HID_MAYFLASH is not set
+# CONFIG_HID_MCP2200 is not set
# CONFIG_HID_MCP2221 is not set
# CONFIG_HID_MEGAWORLD_FF is not set
CONFIG_HID_MICROSOFT=m
@@ -2314,6 +2330,7 @@ CONFIG_HP_WMI=m
CONFIG_HSA_AMD_P2P=y
CONFIG_HSA_AMD_SVM=y
CONFIG_HSA_AMD=y
+# CONFIG_HSC030PA is not set
# CONFIG_HSI is not set
CONFIG_HSR=m
# CONFIG_HT16K33 is not set
@@ -2456,6 +2473,7 @@ CONFIG_IAVF=m
# CONFIG_IBM_ASM is not set
CONFIG_IBMASR=m
# CONFIG_IBM_RTL is not set
+CONFIG_ICE_HWMON=y
CONFIG_ICE_HWTS=y
CONFIG_ICE=m
CONFIG_ICE_SWITCHDEV=y
@@ -2566,7 +2584,7 @@ CONFIG_INFINIBAND_BNXT_RE=m
CONFIG_INFINIBAND_CXGB4=m
CONFIG_INFINIBAND_EFA=m
# CONFIG_INFINIBAND_ERDMA is not set
-CONFIG_INFINIBAND_HFI1=m
+# CONFIG_INFINIBAND_HFI1 is not set
# CONFIG_INFINIBAND_HNS is not set
CONFIG_INFINIBAND_IPOIB_CM=y
# CONFIG_INFINIBAND_IPOIB_DEBUG_DATA is not set
@@ -2582,15 +2600,15 @@ CONFIG_INFINIBAND_ON_DEMAND_PAGING=y
CONFIG_INFINIBAND_OPA_VNIC=m
CONFIG_INFINIBAND_QEDR=m
# CONFIG_INFINIBAND_QIB is not set
-CONFIG_INFINIBAND_RDMAVT=m
+# CONFIG_INFINIBAND_RDMAVT is not set
# CONFIG_INFINIBAND_RTRS_CLIENT is not set
# CONFIG_INFINIBAND_RTRS_SERVER is not set
CONFIG_INFINIBAND_SRP=m
CONFIG_INFINIBAND_SRPT=m
CONFIG_INFINIBAND_USER_ACCESS=m
CONFIG_INFINIBAND_USER_MAD=m
-CONFIG_INFINIBAND_USNIC=m
-CONFIG_INFINIBAND_VMWARE_PVRDMA=m
+# CONFIG_INFINIBAND_USNIC is not set
+# CONFIG_INFINIBAND_VMWARE_PVRDMA is not set
# CONFIG_INFTL is not set
# CONFIG_INIT_ON_ALLOC_DEFAULT_ON is not set
# CONFIG_INIT_ON_FREE_DEFAULT_ON is not set
@@ -2691,12 +2709,13 @@ CONFIG_INTEL_ISH_HID=m
CONFIG_INTEL_ISHTP_ECLITE=m
# CONFIG_INTEL_LDMA is not set
CONFIG_INTEL_MEI_GSC=m
-# CONFIG_INTEL_MEI_GSC_PROXY is not set
+CONFIG_INTEL_MEI_GSC_PROXY=m
# CONFIG_INTEL_MEI_HDCP is not set
CONFIG_INTEL_MEI=m
CONFIG_INTEL_MEI_ME=m
# CONFIG_INTEL_MEI_PXP is not set
# CONFIG_INTEL_MEI_TXE is not set
+# CONFIG_INTEL_MEI_VSC_HW is not set
CONFIG_INTEL_MEI_WDT=m
# CONFIG_INTEL_MENLOW is not set
CONFIG_INTEL_OAKTRAIL=m
@@ -2956,6 +2975,7 @@ CONFIG_ISL29003=m
CONFIG_ISL29020=m
# CONFIG_ISL29125 is not set
# CONFIG_ISL29501 is not set
+# CONFIG_ISL76682 is not set
CONFIG_ISO9660_FS=m
CONFIG_IS_SIGNED_TYPE_KUNIT_TEST=m
# CONFIG_IT8712F_WDT is not set
@@ -2996,6 +3016,7 @@ CONFIG_KALLSYMS_BASE_RELATIVE=y
# CONFIG_KALLSYMS_SELFTEST is not set
CONFIG_KALLSYMS=y
# CONFIG_KARMA_PARTITION is not set
+# CONFIG_KASAN_EXTRA_INFO is not set
CONFIG_KASAN_GENERIC=y
CONFIG_KASAN_INLINE=y
CONFIG_KASAN_KUNIT_TEST=m
@@ -3092,12 +3113,14 @@ CONFIG_KVM_AMD_SEV=y
# CONFIG_KVM_BOOK3S_HV_P8_TIMING is not set
# CONFIG_KVM_BOOK3S_HV_P9_TIMING is not set
CONFIG_KVM_GUEST=y
+CONFIG_KVM_HYPERV=y
CONFIG_KVM_INTEL=m
CONFIG_KVM=m
CONFIG_KVM_MAX_NR_VCPUS=4096
CONFIG_KVM_MMU_AUDIT=y
CONFIG_KVM_PROVE_MMU=y
CONFIG_KVM_SMM=y
+CONFIG_KVM_SW_PROTECTED_VM=y
# CONFIG_KVM_WERROR is not set
# CONFIG_KVM_XEN is not set
# CONFIG_KXCJK1013 is not set
@@ -3274,6 +3297,7 @@ CONFIG_LSM_MMAP_MIN_ADDR=65535
# CONFIG_LTO_CLANG_FULL is not set
# CONFIG_LTO_CLANG_THIN is not set
CONFIG_LTO_NONE=y
+# CONFIG_LTR390 is not set
# CONFIG_LTR501 is not set
# CONFIG_LTRF216A is not set
# CONFIG_LV0104CS is not set
@@ -3314,7 +3338,7 @@ CONFIG_MANA_INFINIBAND=m
CONFIG_MANTIS_CORE=m
# CONFIG_MARCH_Z16 is not set
CONFIG_MARVELL_10G_PHY=m
-# CONFIG_MARVELL_88Q2XXX_PHY is not set
+CONFIG_MARVELL_88Q2XXX_PHY=m
# CONFIG_MARVELL_88X2222_PHY is not set
CONFIG_MARVELL_PHY=m
# CONFIG_MATOM is not set
@@ -3331,6 +3355,7 @@ CONFIG_MARVELL_PHY=m
# CONFIG_MAX31827 is not set
# CONFIG_MAX31856 is not set
# CONFIG_MAX31865 is not set
+# CONFIG_MAX34408 is not set
# CONFIG_MAX44000 is not set
# CONFIG_MAX44009 is not set
# CONFIG_MAX517 is not set
@@ -3359,7 +3384,9 @@ CONFIG_MAXSMP=y
# CONFIG_MCP4531 is not set
# CONFIG_MCP4725 is not set
# CONFIG_MCP4728 is not set
+# CONFIG_MCP4821 is not set
# CONFIG_MCP4922 is not set
+# CONFIG_MCP9600 is not set
# CONFIG_MCTP is not set
CONFIG_MD_AUTODETECT=y
CONFIG_MD_BITMAP_FILE=y
@@ -3587,10 +3614,11 @@ CONFIG_MISC_RTSX_USB=m
CONFIG_MITIGATION_RFDS=y
# CONFIG_MK8 is not set
# CONFIG_MLX4_CORE_GEN2 is not set
+# CONFIG_MLX4_CORE is not set
CONFIG_MLX4_DEBUG=y
CONFIG_MLX4_EN_DCB=y
-CONFIG_MLX4_EN=m
-CONFIG_MLX4_INFINIBAND=m
+# CONFIG_MLX4_EN is not set
+# CONFIG_MLX4_INFINIBAND is not set
CONFIG_MLX5_ACCEL=y
CONFIG_MLX5_CLS_ACT=y
CONFIG_MLX5_CORE_EN_DCB=y
@@ -3621,6 +3649,7 @@ CONFIG_MLX5_VDPA_NET=m
CONFIG_MLX5_VFIO_PCI=m
# CONFIG_MLX90614 is not set
# CONFIG_MLX90632 is not set
+# CONFIG_MLX90635 is not set
# CONFIG_MLXBF_BOOTCTL is not set
# CONFIG_MLXBF_GIGE is not set
# CONFIG_MLXBF_PMC is not set
@@ -3787,7 +3816,7 @@ CONFIG_MT76x2U=m
CONFIG_MT7921E=m
# CONFIG_MT7921S is not set
# CONFIG_MT7921U is not set
-# CONFIG_MT7925E is not set
+CONFIG_MT7925E=m
# CONFIG_MT7925U is not set
# CONFIG_MT7996E is not set
# CONFIG_MTD_ABSENT is not set
@@ -3839,6 +3868,7 @@ CONFIG_MTD_OF_PARTS=m
CONFIG_MTD_UBI_BEB_LIMIT=20
# CONFIG_MTD_UBI_BLOCK is not set
# CONFIG_MTD_UBI_FASTMAP is not set
+# CONFIG_MTD_UBI_FAULT_INJECTION is not set
# CONFIG_MTD_UBI_GLUEBI is not set
CONFIG_MTD_UBI=m
CONFIG_MTD_UBI_WL_THRESHOLD=4096
@@ -3864,7 +3894,6 @@ CONFIG_NAMESPACES=y
CONFIG_NATIONAL_PHY=m
# CONFIG_NAU7802 is not set
# CONFIG_NCN26000_PHY is not set
-CONFIG_ND_BLK=m
CONFIG_ND_BTT=m
# CONFIG_NDC_DIS_DYNAMIC_CACHING is not set
CONFIG_ND_CLAIM=y
@@ -3918,7 +3947,6 @@ CONFIG_NET_DROP_MONITOR=y
# CONFIG_NET_EMATCH is not set
# CONFIG_NET_EMATCH_META is not set
# CONFIG_NET_EMATCH_NBYTE is not set
-# CONFIG_NET_EMATCH_STACK is not set
# CONFIG_NET_EMATCH_TEXT is not set
# CONFIG_NET_EMATCH_U32 is not set
CONFIG_NET_FAILOVER=m
@@ -4102,6 +4130,7 @@ CONFIG_NET_VENDOR_HUAWEI=y
CONFIG_NET_VENDOR_INTEL=y
# CONFIG_NET_VENDOR_LITEX is not set
CONFIG_NET_VENDOR_MARVELL=y
+CONFIG_NET_VENDOR_MELLANOX=y
# CONFIG_NET_VENDOR_MICREL is not set
# CONFIG_NET_VENDOR_MICROCHIP is not set
# CONFIG_NET_VENDOR_MICROSEMI is not set
@@ -4193,6 +4222,7 @@ CONFIG_NF_REJECT_IPV6=m
# CONFIG_NFSD_BLOCKLAYOUT is not set
# CONFIG_NFSD_FLEXFILELAYOUT is not set
CONFIG_NFS_DISABLE_UDP_SUPPORT=y
+# CONFIG_NFSD_LEGACY_CLIENT_TRACKING is not set
CONFIG_NFSD=m
CONFIG_NFSD_PNFS=y
CONFIG_NFSD_SCSILAYOUT=y
@@ -4339,6 +4369,7 @@ CONFIG_NOUVEAU_DEBUG_PUSH=y
# CONFIG_NOUVEAU_LEGACY_CTX_SUPPORT is not set
CONFIG_NOZOMI=m
CONFIG_NR_CPUS=8192
+# CONFIG_NSM is not set
CONFIG_NTB_AMD=m
# CONFIG_NTB_EPF is not set
# CONFIG_NTB_IDT is not set
@@ -4635,6 +4666,7 @@ CONFIG_PINCTRL_EMMITSBURG=m
# CONFIG_PINCTRL_EQUILIBRIUM is not set
CONFIG_PINCTRL_GEMINILAKE=m
CONFIG_PINCTRL_ICELAKE=m
+CONFIG_PINCTRL_INTEL_PLATFORM=m
# CONFIG_PINCTRL_IPQ6018 is not set
# CONFIG_PINCTRL_IPQ8074 is not set
CONFIG_PINCTRL_JASPERLAKE=m
@@ -4645,6 +4677,7 @@ CONFIG_PINCTRL_LEWISBURG=m
# CONFIG_PINCTRL_MCP23S08 is not set
# CONFIG_PINCTRL_MDM9615 is not set
CONFIG_PINCTRL_METEORLAKE=m
+CONFIG_PINCTRL_METEORPOINT=m
# CONFIG_PINCTRL_MICROCHIP_SGPIO is not set
# CONFIG_PINCTRL_MLXBF3 is not set
# CONFIG_PINCTRL_MSM8226 is not set
@@ -4935,8 +4968,8 @@ CONFIG_RD_GZIP=y
CONFIG_RD_LZ4=y
CONFIG_RD_LZMA=y
CONFIG_RD_LZO=y
-CONFIG_RDMA_RXE=m
-CONFIG_RDMA_SIW=m
+# CONFIG_RDMA_RXE is not set
+# CONFIG_RDMA_SIW is not set
# CONFIG_RDS is not set
CONFIG_RD_XZ=y
CONFIG_RD_ZSTD=y
@@ -4977,6 +5010,7 @@ CONFIG_REGULATOR_FIXED_VOLTAGE=m
# CONFIG_REGULATOR_MAX8973 is not set
# CONFIG_REGULATOR_MCP16502 is not set
# CONFIG_REGULATOR_MT6311 is not set
+# CONFIG_REGULATOR_NETLINK_EVENTS is not set
# CONFIG_REGULATOR_PF8X00 is not set
# CONFIG_REGULATOR_PFUZE100 is not set
# CONFIG_REGULATOR_PV88060 is not set
@@ -5126,6 +5160,7 @@ CONFIG_RTC_DRV_M41T80_WDT=y
CONFIG_RTC_DRV_M48T35=m
CONFIG_RTC_DRV_M48T59=m
# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_MAX31335 is not set
CONFIG_RTC_DRV_MAX6900=m
# CONFIG_RTC_DRV_MAX6902 is not set
# CONFIG_RTC_DRV_MAX6916 is not set
@@ -5212,7 +5247,7 @@ CONFIG_RTW88=m
# CONFIG_RTW89_8851BE is not set
CONFIG_RTW89_8852AE=m
CONFIG_RTW89_8852BE=m
-# CONFIG_RTW89_8852CE is not set
+CONFIG_RTW89_8852CE=m
CONFIG_RTW89_DEBUGFS=y
CONFIG_RTW89_DEBUGMSG=y
CONFIG_RTW89=m
@@ -5228,6 +5263,7 @@ CONFIG_RXPERF=m
# CONFIG_S390_MODULES_SANITY_TEST is not set
# CONFIG_SAMPLE_ANDROID_BINDERFS is not set
# CONFIG_SAMPLE_AUXDISPLAY is not set
+# CONFIG_SAMPLE_CGROUP is not set
# CONFIG_SAMPLE_CONFIGFS is not set
# CONFIG_SAMPLE_CONNECTOR is not set
# CONFIG_SAMPLE_FANOTIFY_ERROR is not set
@@ -5401,7 +5437,7 @@ CONFIG_SECONDARY_TRUSTED_KEYRING=y
CONFIG_SECRETMEM=y
CONFIG_SECTION_MISMATCH_WARN_ONLY=y
# CONFIG_SECURITY_APPARMOR is not set
-# CONFIG_SECURITY_DMESG_RESTRICT is not set
+CONFIG_SECURITY_DMESG_RESTRICT=y
CONFIG_SECURITYFS=y
CONFIG_SECURITY_INFINIBAND=y
# CONFIG_SECURITY_LANDLOCK is not set
@@ -5495,6 +5531,7 @@ CONFIG_SENSORS_FSCHMD=m
# CONFIG_SENSORS_FTSTEUTATES is not set
CONFIG_SENSORS_G760A=m
# CONFIG_SENSORS_G762 is not set
+# CONFIG_SENSORS_GIGABYTE_WATERFORCE is not set
CONFIG_SENSORS_GL518SM=m
CONFIG_SENSORS_GL520SM=m
# CONFIG_SENSORS_GPIO_FAN is not set
@@ -5562,6 +5599,7 @@ CONFIG_SENSORS_LTC4215=m
CONFIG_SENSORS_LTC4245=m
# CONFIG_SENSORS_LTC4260 is not set
CONFIG_SENSORS_LTC4261=m
+# CONFIG_SENSORS_LTC4286 is not set
# CONFIG_SENSORS_MAX1111 is not set
# CONFIG_SENSORS_MAX127 is not set
# CONFIG_SENSORS_MAX15301 is not set
@@ -5589,9 +5627,11 @@ CONFIG_SENSORS_MAX8688=m
# CONFIG_SENSORS_MC34VR500 is not set
CONFIG_SENSORS_MCP3021=m
# CONFIG_SENSORS_MLXREG_FAN is not set
+# CONFIG_SENSORS_MP2856 is not set
# CONFIG_SENSORS_MP2888 is not set
# CONFIG_SENSORS_MP2975 is not set
# CONFIG_SENSORS_MP5023 is not set
+# CONFIG_SENSORS_MP5990 is not set
# CONFIG_SENSORS_MPQ7932 is not set
# CONFIG_SENSORS_MR75203 is not set
# CONFIG_SENSORS_NCT6683 is not set
@@ -5772,10 +5812,8 @@ CONFIG_SIGNED_PE_FILE_VERIFICATION=y
CONFIG_SIPHASH_KUNIT_TEST=m
# CONFIG_SKGE is not set
# CONFIG_SKY2 is not set
-# CONFIG_SLAB_DEPRECATED is not set
CONFIG_SLAB_FREELIST_HARDENED=y
CONFIG_SLAB_FREELIST_RANDOM=y
-# CONFIG_SLAB is not set
# CONFIG_SLAB_MERGE_DEFAULT is not set
# CONFIG_SLIMBUS is not set
CONFIG_SLIP_COMPRESSED=y
@@ -6536,6 +6574,7 @@ CONFIG_SQUASHFS_ZSTD=y
# CONFIG_SSB is not set
# CONFIG_SSFDC is not set
# CONFIG_SSIF_IPMI_BMC is not set
+CONFIG_STACKDEPOT_MAX_FRAMES=64
CONFIG_STACK_HASH_ORDER=20
CONFIG_STACKINIT_KUNIT_TEST=m
CONFIG_STACKPROTECTOR_STRONG=y
@@ -6665,7 +6704,7 @@ CONFIG_TCP_CONG_DCTCP=m
# CONFIG_TCP_CONG_HSTCP is not set
CONFIG_TCP_CONG_HTCP=m
# CONFIG_TCP_CONG_HYBLA is not set
-# CONFIG_TCP_CONG_ILLINOIS is not set
+CONFIG_TCP_CONG_ILLINOIS=m
# CONFIG_TCP_CONG_LP is not set
CONFIG_TCP_CONG_NV=m
# CONFIG_TCP_CONG_SCALABLE is not set
@@ -6729,6 +6768,7 @@ CONFIG_TEST_STRING_HELPERS=m
# CONFIG_TEST_UUID is not set
CONFIG_TEST_VMALLOC=m
# CONFIG_TEST_XARRAY is not set
+# CONFIG_THERMAL_DEBUGFS is not set
# CONFIG_THERMAL_DEFAULT_GOV_FAIR_SHARE is not set
CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y
# CONFIG_THERMAL_DEFAULT_GOV_USER_SPACE is not set
@@ -6910,6 +6950,7 @@ CONFIG_TOUCHSCREEN_WACOM_W8001=m
CONFIG_TRACER_SNAPSHOT=y
CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS=y
# CONFIG_TRANSPARENT_HUGEPAGE_MADVISE is not set
+# CONFIG_TRANSPARENT_HUGEPAGE_NEVER is not set
CONFIG_TRANSPARENT_HUGEPAGE=y
CONFIG_TREE_RCU=y
# CONFIG_TRIM_UNUSED_KSYMS is not set
@@ -6940,6 +6981,7 @@ CONFIG_TYPEC_MUX_FSA4480=m
# CONFIG_TYPEC_MUX_NB7VPQ904M is not set
CONFIG_TYPEC_MUX_PI3USB30532=m
# CONFIG_TYPEC_MUX_PTN36502 is not set
+# CONFIG_TYPEC_MUX_WCD939X_USBSS is not set
# CONFIG_TYPEC_NVIDIA_ALTMODE is not set
# CONFIG_TYPEC_QCOM_PMIC is not set
# CONFIG_TYPEC_RT1711H is not set
@@ -7302,12 +7344,14 @@ CONFIG_VDPA_SIM_NET=m
# CONFIG_VDPA_USER is not set
# CONFIG_VEML6030 is not set
# CONFIG_VEML6070 is not set
+# CONFIG_VEML6075 is not set
CONFIG_VETH=m
# CONFIG_VF610_ADC is not set
# CONFIG_VF610_DAC is not set
CONFIG_VFAT_FS=m
# CONFIG_VFIO_AMBA is not set
CONFIG_VFIO_CONTAINER=y
+# CONFIG_VFIO_DEBUGFS is not set
CONFIG_VFIO_DEVICE_CDEV=y
CONFIG_VFIO_GROUP=y
CONFIG_VFIO_IOMMU_TYPE1=m
@@ -7344,6 +7388,7 @@ CONFIG_VHOST_VSOCK=m
# CONFIG_VIDEO_ADV_DEBUG is not set
# CONFIG_VIDEO_AK7375 is not set
# CONFIG_VIDEO_AK881X is not set
+# CONFIG_VIDEO_ALVIUM_CSI2 is not set
# CONFIG_VIDEO_AR0521 is not set
CONFIG_VIDEO_AU0828=m
# CONFIG_VIDEO_AU0828_RC is not set
@@ -7392,6 +7437,8 @@ CONFIG_VIDEO_EM28XX_RC=m
# CONFIG_VIDEO_FB_IVTV_FORCE_PAT is not set
CONFIG_VIDEO_FB_IVTV=m
# CONFIG_VIDEO_FIXED_MINOR_RANGES is not set
+# CONFIG_VIDEO_GC0308 is not set
+# CONFIG_VIDEO_GC2145 is not set
# CONFIG_VIDEO_GO7007 is not set
# CONFIG_VIDEO_GS1662 is not set
CONFIG_VIDEO_HDPVR=m
@@ -7461,6 +7508,7 @@ CONFIG_VIDEO_IVTV=m
# CONFIG_VIDEO_OV5675 is not set
# CONFIG_VIDEO_OV5693 is not set
# CONFIG_VIDEO_OV5695 is not set
+# CONFIG_VIDEO_OV64A40 is not set
# CONFIG_VIDEO_OV6650 is not set
# CONFIG_VIDEO_OV7251 is not set
# CONFIG_VIDEO_OV7640 is not set
@@ -7513,6 +7561,7 @@ CONFIG_VIDEO_SAA7164=m
# CONFIG_VIDEO_TDA9840 is not set
# CONFIG_VIDEO_TEA6415C is not set
# CONFIG_VIDEO_TEA6420 is not set
+# CONFIG_VIDEO_THP7312 is not set
# CONFIG_VIDEO_THS7303 is not set
# CONFIG_VIDEO_THS8200 is not set
# CONFIG_VIDEO_TLV320AIC23B is not set
@@ -7528,6 +7577,7 @@ CONFIG_VIDEO_TUNER=m
# CONFIG_VIDEO_TW5864 is not set
# CONFIG_VIDEO_TW686X is not set
# CONFIG_VIDEO_TW68 is not set
+# CONFIG_VIDEO_TW9900 is not set
# CONFIG_VIDEO_TW9903 is not set
# CONFIG_VIDEO_TW9906 is not set
# CONFIG_VIDEO_TW9910 is not set
@@ -7563,6 +7613,7 @@ CONFIG_VIRTIO_PCI_LEGACY=y
CONFIG_VIRTIO_PCI=y
# CONFIG_VIRTIO_PMEM is not set
CONFIG_VIRTIO_VDPA=m
+# CONFIG_VIRTIO_VFIO_PCI is not set
CONFIG_VIRTIO_VSOCKETS=m
CONFIG_VIRTIO=y
CONFIG_VIRTUALIZATION=y
@@ -7768,7 +7819,7 @@ CONFIG_XFS_POSIX_ACL=y
CONFIG_XFS_QUOTA=y
# CONFIG_XFS_RT is not set
# CONFIG_XFS_SUPPORT_ASCII_CI is not set
-CONFIG_XFS_SUPPORT_V4=y
+# CONFIG_XFS_SUPPORT_V4 is not set
CONFIG_XFS_WARN=y
# CONFIG_XGENE_DMA is not set
# CONFIG_XIAOMI_WMI is not set
@@ -7825,6 +7876,7 @@ CONFIG_ZRAM_DEF_COMP_LZORLE=y
CONFIG_ZRAM=m
CONFIG_ZRAM_MEMORY_TRACKING=y
# CONFIG_ZRAM_MULTI_COMP is not set
+CONFIG_ZRAM_TRACK_ENTRY_ACTIME=y
CONFIG_ZRAM_WRITEBACK=y
CONFIG_ZSMALLOC_CHAIN_SIZE=8
CONFIG_ZSMALLOC_STAT=y
@@ -7837,6 +7889,7 @@ CONFIG_ZSWAP_COMPRESSOR_DEFAULT_LZO=y
# CONFIG_ZSWAP_COMPRESSOR_DEFAULT_ZSTD is not set
# CONFIG_ZSWAP_DEFAULT_ON is not set
# CONFIG_ZSWAP_EXCLUSIVE_LOADS_DEFAULT_ON is not set
+# CONFIG_ZSWAP_SHRINKER_DEFAULT_ON is not set
CONFIG_ZSWAP=y
# CONFIG_ZSWAP_ZPOOL_DEFAULT_Z3FOLD is not set
CONFIG_ZSWAP_ZPOOL_DEFAULT_ZBUD=y
@@ -7846,7 +7899,7 @@ CONFIG_ZENIFY=y
CONFIG_NTSYNC=y
CONFIG_USER_NS_UNPRIVILEGED=y
CONFIG_TCP_CONG_BBR2=m
-# CONFIG_SCHED_PDS is not set
+CONFIG_SCHED_BORE=y
CONFIG_HID_IPTS=m
CONFIG_HID_ITHC=m
CONFIG_SURFACE_BOOK1_DGPU_SWITCH=m
@@ -7855,8 +7908,6 @@ CONFIG_LEDS_TPS68470=m
CONFIG_SENSORS_SURFACE_FAN=m
CONFIG_SENSORS_SURFACE_TEMP=m
CONFIG_DRM_AMD_COLOR_STEAMDECK=y
-CONFIG_BMI323_I2C=m
-CONFIG_BMI323_SPI=m
CONFIG_DRM_APPLETBDRM=m
CONFIG_HID_APPLETB_BL=m
CONFIG_HID_APPLETB_KBD=m
@@ -7916,4 +7967,3 @@ CONFIG_SND_SOC_SOF_AMD_ACP63=m
# CONFIG_SND_AMD_ASOC_REMBRANDT is not set
# CONFIG_SND_SOC_AMD_LEGACY_MACH is not set
CONFIG_SND_SOC_TOPOLOGY=y
-CONFIG_SCHED_BORE=y
diff --git a/SOURCES/kernel-x86_64-fedora.config b/SOURCES/kernel-x86_64-fedora.config
index 1f99ef6..2bc5096 100644
--- a/SOURCES/kernel-x86_64-fedora.config
+++ b/SOURCES/kernel-x86_64-fedora.config
@@ -121,6 +121,7 @@ CONFIG_AD5770R=m
# CONFIG_AD5791 is not set
# CONFIG_AD5933 is not set
# CONFIG_AD7091R5 is not set
+CONFIG_AD7091R8=m
CONFIG_AD7124=m
# CONFIG_AD7150 is not set
# CONFIG_AD7192 is not set
@@ -274,6 +275,7 @@ CONFIG_AMD_PMF=m
CONFIG_AMD_PTDMA=m
CONFIG_AMD_SFH_HID=m
# CONFIG_AMDTEE is not set
+CONFIG_AMD_WBRF=y
CONFIG_AMD_XGBE_DCB=y
CONFIG_AMD_XGBE=m
# CONFIG_AMIGA_PARTITION is not set
@@ -284,6 +286,7 @@ CONFIG_ANDROID_BINDERFS=y
# CONFIG_ANDROID_BINDER_IPC_SELFTEST is not set
CONFIG_ANDROID_BINDER_IPC=y
# CONFIG_ANON_VMA_NAME is not set
+# CONFIG_AOSONG_AGS02MA is not set
# CONFIG_APDS9300 is not set
CONFIG_APDS9802ALS=m
# CONFIG_APDS9960 is not set
@@ -326,7 +329,6 @@ CONFIG_ARM64_ERRATUM_2119858=y
CONFIG_ARM64_ERRATUM_2139208=y
CONFIG_ARM64_ERRATUM_2224489=y
CONFIG_ARM64_ERRATUM_2253138=y
-CONFIG_ARM64_ERRATUM_858921=y
CONFIG_ARM64_USE_LSE_ATOMICS=y
CONFIG_ARM_CMN=m
# CONFIG_ARM_MHU_V2 is not set
@@ -489,6 +491,7 @@ CONFIG_BACKLIGHT_LED=m
# CONFIG_BACKLIGHT_LM3639 is not set
CONFIG_BACKLIGHT_LP855X=m
# CONFIG_BACKLIGHT_LV5207LP is not set
+CONFIG_BACKLIGHT_MP3309C=m
CONFIG_BACKLIGHT_MT6370=m
CONFIG_BACKLIGHT_PWM=m
# CONFIG_BACKLIGHT_QCOM_WLED is not set
@@ -541,6 +544,7 @@ CONFIG_BCACHEFS_FS=m
# CONFIG_BCACHEFS_NO_LATENCY_ACCT is not set
CONFIG_BCACHEFS_POSIX_ACL=y
CONFIG_BCACHEFS_QUOTA=y
+CONFIG_BCACHEFS_SIX_OPTIMISTIC_SPIN=y
# CONFIG_BCACHEFS_TESTS is not set
CONFIG_BCACHE=m
CONFIG_BCM54140_PHY=m
@@ -620,6 +624,7 @@ CONFIG_BLK_DEV_SX8=m
CONFIG_BLK_DEV_THROTTLING=y
CONFIG_BLKDEV_UBLK_LEGACY_OPCODES=y
CONFIG_BLK_DEV_UBLK=m
+CONFIG_BLK_DEV_WRITE_MOUNTED=y
CONFIG_BLK_DEV=y
CONFIG_BLK_DEV_ZONED=y
# CONFIG_BLK_INLINE_ENCRYPTION_FALLBACK is not set
@@ -642,6 +647,8 @@ CONFIG_BMG160_SPI=m
# CONFIG_BMI088_ACCEL is not set
CONFIG_BMI160_I2C=m
CONFIG_BMI160_SPI=m
+CONFIG_BMI323_I2C=m
+CONFIG_BMI323_SPI=m
CONFIG_BMP280=m
CONFIG_BNA=m
CONFIG_BNX2=m
@@ -657,7 +664,6 @@ CONFIG_BONDING=m
# CONFIG_BOOT_CONFIG_FORCE is not set
CONFIG_BOOT_CONFIG=y
# CONFIG_BOOTPARAM_HARDLOCKUP_PANIC is not set
-# CONFIG_BOOTPARAM_HOTPLUG_CPU0 is not set
# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
CONFIG_BOOT_PRINTK_DELAY=y
@@ -787,7 +793,7 @@ CONFIG_BYTCRC_PMIC_OPREGION=y
# CONFIG_CACHEFILES_DEBUG is not set
# CONFIG_CACHEFILES_ERROR_INJECTION is not set
CONFIG_CACHEFILES=m
-# CONFIG_CACHEFILES_ONDEMAND is not set
+CONFIG_CACHEFILES_ONDEMAND=y
CONFIG_CACHESTAT_SYSCALL=y
# CONFIG_CADENCE_WATCHDOG is not set
# CONFIG_CAIF is not set
@@ -1159,7 +1165,6 @@ CONFIG_CRYPTO_CAST6_AVX_X86_64=m
CONFIG_CRYPTO_CAST6=m
CONFIG_CRYPTO_CBC=y
CONFIG_CRYPTO_CCM=y
-CONFIG_CRYPTO_CFB=y
CONFIG_CRYPTO_CHACHA20=m
CONFIG_CRYPTO_CHACHA20POLY1305=m
CONFIG_CRYPTO_CHACHA20_X86_64=y
@@ -1194,11 +1199,14 @@ CONFIG_CRYPTO_DEV_HIFN_795X_RNG=y
# CONFIG_CRYPTO_DEV_HISI_SEC2 is not set
# CONFIG_CRYPTO_DEV_HISI_SEC is not set
# CONFIG_CRYPTO_DEV_HISI_TRNG is not set
-# CONFIG_CRYPTO_DEV_NITROX_CNN55XX is not set
+CONFIG_CRYPTO_DEV_IAA_CRYPTO=m
+CONFIG_CRYPTO_DEV_IAA_CRYPTO_STATS=y
+CONFIG_CRYPTO_DEV_NITROX_CNN55XX=m
# CONFIG_CRYPTO_DEV_OCTEONTX_CPT is not set
CONFIG_CRYPTO_DEV_PADLOCK_AES=m
CONFIG_CRYPTO_DEV_PADLOCK=m
CONFIG_CRYPTO_DEV_PADLOCK_SHA=m
+CONFIG_CRYPTO_DEV_QAT_420XX=m
CONFIG_CRYPTO_DEV_QAT_4XXX=m
CONFIG_CRYPTO_DEV_QAT_C3XXX=m
CONFIG_CRYPTO_DEV_QAT_C3XXXVF=m
@@ -1257,7 +1265,6 @@ CONFIG_CRYPTO_MICHAEL_MIC=m
CONFIG_CRYPTO_NHPOLY1305_AVX2=m
CONFIG_CRYPTO_NHPOLY1305_SSE2=m
CONFIG_CRYPTO_NULL=y
-CONFIG_CRYPTO_OFB=y
CONFIG_CRYPTO_PCBC=m
CONFIG_CRYPTO_PCRYPT=m
CONFIG_CRYPTO_POLY1305=m
@@ -1360,7 +1367,6 @@ CONFIG_DEBUG_FS_ALLOW_ALL=y
CONFIG_DEBUG_FS=y
# CONFIG_DEBUG_GPIO is not set
# CONFIG_DEBUG_HIGHMEM is not set
-# CONFIG_DEBUG_HOTPLUG_CPU0 is not set
CONFIG_DEBUG_INFO_BTF=y
# CONFIG_DEBUG_INFO_COMPRESSED is not set
CONFIG_DEBUG_INFO_COMPRESSED_NONE=y
@@ -1422,7 +1428,7 @@ CONFIG_DEBUG_STACKOVERFLOW=y
# CONFIG_DEBUG_VM_MAPLE_TREE is not set
# CONFIG_DEBUG_VM_PGFLAGS is not set
# CONFIG_DEBUG_VM_PGTABLE is not set
-# CONFIG_DEBUG_VM_RB is not set # revisit this if performance isn't horrible
+# CONFIG_DEBUG_VM_RB is not set
# CONFIG_DEBUG_VM_SHOOT_LAZIES is not set
# CONFIG_DEBUG_VM_VMACACHE is not set
# CONFIG_DEBUG_WQ_FORCE_RR_CPU is not set
@@ -1551,6 +1557,7 @@ CONFIG_DP83867_PHY=m
CONFIG_DP83869_PHY=m
# CONFIG_DP83TC811_PHY is not set
# CONFIG_DP83TD510_PHY is not set
+CONFIG_DP83TG720_PHY=m
# CONFIG_DPM_WATCHDOG is not set
CONFIG_DPOT_DAC=m
# CONFIG_DPS310 is not set
@@ -1616,6 +1623,7 @@ CONFIG_DRM_I915_COMPRESS_ERROR=y
# CONFIG_DRM_I915_DEBUG_MMIO is not set
# CONFIG_DRM_I915_DEBUG_RUNTIME_PM is not set
# CONFIG_DRM_I915_DEBUG_VBLANK_EVADE is not set
+# CONFIG_DRM_I915_DEBUG_WAKEREF is not set
CONFIG_DRM_I915_FENCE_TIMEOUT=10000
CONFIG_DRM_I915_FORCE_PROBE=""
CONFIG_DRM_I915_GVT_KVMGT=m
@@ -1655,6 +1663,7 @@ CONFIG_DRM_MGAG200=m
# CONFIG_DRM_MSM_GPU_SUDO is not set
# CONFIG_DRM_MXSFB is not set
CONFIG_DRM_NOUVEAU_BACKLIGHT=y
+CONFIG_DRM_NOUVEAU_GSP_DEFAULT=y
CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_NOUVEAU_SVM is not set
# CONFIG_DRM_NWL_MIPI_DSI is not set
@@ -1676,6 +1685,7 @@ CONFIG_DRM_PANEL_FEIYANG_FY07024DI26A30D=m
# CONFIG_DRM_PANEL_HIMAX_HX8394 is not set
# CONFIG_DRM_PANEL_ILITEK_IL9322 is not set
# CONFIG_DRM_PANEL_ILITEK_ILI9341 is not set
+# CONFIG_DRM_PANEL_ILITEK_ILI9805 is not set
# CONFIG_DRM_PANEL_ILITEK_ILI9881C is not set
CONFIG_DRM_PANEL_ILITEK_ILI9882T=m
CONFIG_DRM_PANEL_INNOLUX_EJ030NA=m
@@ -1738,6 +1748,7 @@ CONFIG_DRM_PANEL_SEIKO_43WVF1G=m
# CONFIG_DRM_PANEL_SONY_TD4353_JDI is not set
CONFIG_DRM_PANEL_SONY_TULIP_TRULY_NT35521=m
CONFIG_DRM_PANEL_STARTEK_KD070FHFID015=m
+# CONFIG_DRM_PANEL_SYNAPTICS_R63353 is not set
# CONFIG_DRM_PANEL_TDO_TL070WSH30 is not set
# CONFIG_DRM_PANEL_TPO_TD028TTEC1 is not set
# CONFIG_DRM_PANEL_TPO_TD043MTEA1 is not set
@@ -1760,7 +1771,7 @@ CONFIG_DRM_RADEON_USERPTR=y
# CONFIG_DRM_RCAR_USE_LVDS is not set
# CONFIG_DRM_RCAR_USE_MIPI_DSI is not set
CONFIG_DRM_SAMSUNG_DSIM=m
-# CONFIG_DRM_SII902X is not set
+CONFIG_DRM_SII902X=m
CONFIG_DRM_SII9234=m
# CONFIG_DRM_SIL_SII8620 is not set
CONFIG_DRM_SIMPLE_BRIDGE=m
@@ -1791,7 +1802,27 @@ CONFIG_DRM_VKMS=m
CONFIG_DRM_VMWGFX_FBCON=y
CONFIG_DRM_VMWGFX=m
CONFIG_DRM_VMWGFX_MKSSTATS=y
+# CONFIG_DRM_XE_DEBUG is not set
+# CONFIG_DRM_XE_DEBUG_MEM is not set
+# CONFIG_DRM_XE_DEBUG_SRIOV is not set
+# CONFIG_DRM_XE_DEBUG_VM is not set
+CONFIG_DRM_XE_DISPLAY=y
+CONFIG_DRM_XE_ENABLE_SCHEDTIMEOUT_LIMIT=y
+CONFIG_DRM_XE_FORCE_PROBE=""
+CONFIG_DRM_XE_JOB_TIMEOUT_MAX=10000
+CONFIG_DRM_XE_JOB_TIMEOUT_MIN=1
+# CONFIG_DRM_XE_KUNIT_TEST is not set
+# CONFIG_DRM_XE_LARGE_GUC_BUFFER is not set
+CONFIG_DRM_XE=m
# CONFIG_DRM_XEN_FRONTEND is not set
+CONFIG_DRM_XE_PREEMPT_TIMEOUT=640000
+CONFIG_DRM_XE_PREEMPT_TIMEOUT_MAX=10000000
+CONFIG_DRM_XE_PREEMPT_TIMEOUT_MIN=1
+# CONFIG_DRM_XE_SIMPLE_ERROR_CAPTURE is not set
+CONFIG_DRM_XE_TIMESLICE_MAX=10000000
+CONFIG_DRM_XE_TIMESLICE_MIN=1
+# CONFIG_DRM_XE_USERPTR_INVAL_INJECT is not set
+# CONFIG_DRM_XE_WERROR is not set
CONFIG_DRM=y
# CONFIG_DS1682 is not set
# CONFIG_DS1803 is not set
@@ -1891,6 +1922,7 @@ CONFIG_DVB_USB_VP702X=m
CONFIG_DVB_USB_VP7045=m
CONFIG_DVB_USB_ZD1301=m
# CONFIG_DW_AXI_DMAC is not set
+CONFIG_DWC_PCIE_PMU=m
CONFIG_DW_DMAC_CORE=y
CONFIG_DW_DMAC=m
CONFIG_DW_DMAC_PCI=y
@@ -1979,8 +2011,10 @@ CONFIG_EFI_ZBOOT=y
CONFIG_ELF_CORE=y
# CONFIG_EMBEDDED is not set
CONFIG_ENA_ETHERNET=m
+# CONFIG_ENC28J60 is not set
CONFIG_ENCLOSURE_SERVICES=m
CONFIG_ENCRYPTED_KEYS=y
+# CONFIG_ENCX24J600 is not set
CONFIG_ENERGY_MODEL=y
CONFIG_ENIC=m
CONFIG_ENVELOPE_DETECTOR=m
@@ -1989,6 +2023,7 @@ CONFIG_EPOLL=y
CONFIG_EQUALIZER=m
# CONFIG_EROFS_FS_DEBUG is not set
CONFIG_EROFS_FS=m
+CONFIG_EROFS_FS_ONDEMAND=y
# CONFIG_EROFS_FS_PCPU_KTHREAD is not set
CONFIG_EROFS_FS_POSIX_ACL=y
CONFIG_EROFS_FS_SECURITY=y
@@ -2069,7 +2104,6 @@ CONFIG_FAT_KUNIT_TEST=m
# CONFIG_FB_3DFX is not set
# CONFIG_FB_ARC is not set
# CONFIG_FB_ARK is not set
-# CONFIG_FB_ARMCLCD is not set
# CONFIG_FB_ASILIANT is not set
# CONFIG_FB_ATY128 is not set
# CONFIG_FB_ATY is not set
@@ -2088,9 +2122,7 @@ CONFIG_FB_EFI=y
# CONFIG_FB_IBM_GXT4500 is not set
# CONFIG_FB_IMSTT is not set
# CONFIG_FB_IMX is not set
-# CONFIG_FB_INTEL is not set
# CONFIG_FB_KYRO is not set
-# CONFIG_FB_LE80578 is not set
# CONFIG_FB_MATROX_G is not set
# CONFIG_FB_MATROX_I2C is not set
# CONFIG_FB_MATROX is not set
@@ -2140,6 +2172,7 @@ CONFIG_FHANDLE=y
CONFIG_FILE_LOCKING=y
# CONFIG_FIND_BIT_BENCHMARK is not set
# CONFIG_FIPS_SIGNATURE_SELFTEST is not set
+# CONFIG_FIREWIRE_KUNIT_DEVICE_ATTRIBUTE_TEST is not set
CONFIG_FIREWIRE_KUNIT_UAPI_TEST=m
CONFIG_FIREWIRE=m
CONFIG_FIREWIRE_NET=m
@@ -2189,8 +2222,8 @@ CONFIG_FRAME_POINTER=y
CONFIG_FRAME_WARN=2048
CONFIG_FRONTSWAP=y
# CONFIG_FSCACHE_DEBUG is not set
-CONFIG_FSCACHE=m
CONFIG_FSCACHE_STATS=y
+CONFIG_FSCACHE=y
CONFIG_FS_DAX=y
CONFIG_FS_ENCRYPTION_INLINE_CRYPT=y
CONFIG_FS_ENCRYPTION=y
@@ -2388,9 +2421,9 @@ CONFIG_HASHTABLE_KUNIT_TEST=m
CONFIG_HD44780=m
# CONFIG_HDC100X is not set
CONFIG_HDC2010=m
+# CONFIG_HDC3020 is not set
CONFIG_HDMI_LPE_AUDIO=m
CONFIG_HEADERS_INSTALL=y
-# CONFIG_HERMES is not set
# CONFIG_HFI1_DEBUG_SDMA_ORDER is not set
CONFIG_HFS_FS=m
CONFIG_HFSPLUS_FS=m
@@ -2457,6 +2490,7 @@ CONFIG_HID_MACALLY=m
CONFIG_HID_MAGICMOUSE=y
CONFIG_HID_MALTRON=m
CONFIG_HID_MAYFLASH=m
+# CONFIG_HID_MCP2200 is not set
CONFIG_HID_MCP2221=m
CONFIG_HID_MEGAWORLD_FF=m
CONFIG_HID_MICROSOFT=m
@@ -2545,7 +2579,6 @@ CONFIG_HMC425=m
# CONFIG_HMC6352 is not set
CONFIG_HMM_MIRROR=y
CONFIG_HOLTEK_FF=y
-# CONFIG_HOSTAP is not set
CONFIG_HOTPLUG_CPU=y
CONFIG_HOTPLUG_PCI_ACPI_IBM=m
CONFIG_HOTPLUG_PCI_ACPI=y
@@ -2570,6 +2603,7 @@ CONFIG_HPWDT_NMI_DECODING=y
CONFIG_HP_WMI=m
CONFIG_HSA_AMD_SVM=y
CONFIG_HSA_AMD=y
+# CONFIG_HSC030PA is not set
# CONFIG_HSI is not set
CONFIG_HSR=m
CONFIG_HSU_DMA=y
@@ -2728,6 +2762,7 @@ CONFIG_IB700_WDT=m
CONFIG_IBM_ASM=m
CONFIG_IBMASR=m
# CONFIG_IBM_RTL is not set
+CONFIG_ICE_HWMON=y
CONFIG_ICE_HWTS=y
CONFIG_ICE=m
CONFIG_ICE_SWITCHDEV=y
@@ -3008,13 +3043,14 @@ CONFIG_INTEL_MEI=m
CONFIG_INTEL_MEI_ME=m
CONFIG_INTEL_MEI_PXP=m
CONFIG_INTEL_MEI_TXE=m
+# CONFIG_INTEL_MEI_VSC_HW is not set
CONFIG_INTEL_MEI_WDT=m
# CONFIG_INTEL_MENLOW is not set
CONFIG_INTEL_MRFLD_ADC=m
CONFIG_INTEL_MRFLD_PWRBTN=m
CONFIG_INTEL_OAKTRAIL=m
CONFIG_INTEL_PCH_THERMAL=m
-CONFIG_INTEL_PMC_CORE=y
+CONFIG_INTEL_PMC_CORE=m
CONFIG_INTEL_PMT_CLASS=m
CONFIG_INTEL_PMT_CRASHLOG=m
CONFIG_INTEL_PMT_TELEMETRY=m
@@ -3275,6 +3311,7 @@ CONFIG_ISL29003=m
CONFIG_ISL29020=m
# CONFIG_ISL29125 is not set
# CONFIG_ISL29501 is not set
+# CONFIG_ISL76682 is not set
CONFIG_ISO9660_FS=m
CONFIG_IS_SIGNED_TYPE_KUNIT_TEST=m
CONFIG_IT8712F_WDT=m
@@ -3347,6 +3384,7 @@ CONFIG_JOYSTICK_PSXPAD_SPI_FF=y
CONFIG_JOYSTICK_PSXPAD_SPI=m
CONFIG_JOYSTICK_PXRC=m
CONFIG_JOYSTICK_QWIIC=m
+# CONFIG_JOYSTICK_SEESAW is not set
# CONFIG_JOYSTICK_SENSEHAT is not set
CONFIG_JOYSTICK_SIDEWINDER=m
CONFIG_JOYSTICK_SPACEBALL=m
@@ -3367,6 +3405,7 @@ CONFIG_KALLSYMS_ALL=y
# CONFIG_KALLSYMS_SELFTEST is not set
CONFIG_KALLSYMS=y
# CONFIG_KARMA_PARTITION is not set
+# CONFIG_KASAN_EXTRA_INFO is not set
# CONFIG_KASAN is not set
# CONFIG_KASAN_MODULE_TEST is not set
# CONFIG_KASAN_VMALLOC is not set
@@ -3464,12 +3503,14 @@ CONFIG_KUNIT_TEST=m
CONFIG_KVM_AMD=m
CONFIG_KVM_AMD_SEV=y
CONFIG_KVM_GUEST=y
+CONFIG_KVM_HYPERV=y
CONFIG_KVM_INTEL=m
CONFIG_KVM=m
CONFIG_KVM_MAX_NR_VCPUS=4096
CONFIG_KVM_MMU_AUDIT=y
# CONFIG_KVM_PROVE_MMU is not set
CONFIG_KVM_SMM=y
+CONFIG_KVM_SW_PROTECTED_VM=y
# CONFIG_KVM_WERROR is not set
CONFIG_KVM_XEN=y
CONFIG_KXCJK1013=m
@@ -3479,6 +3520,9 @@ CONFIG_L2TP_ETH=m
CONFIG_L2TP_IP=m
CONFIG_L2TP=m
CONFIG_L2TP_V3=y
+CONFIG_LAN743X=m
+CONFIG_LAN966X_DCB=y
+CONFIG_LAN966X_SWITCH=m
# CONFIG_LAPB is not set
CONFIG_LATENCYTOP=y
# CONFIG_LATTICE_ECP3_CONFIG is not set
@@ -3542,6 +3586,7 @@ CONFIG_LEDS_LP50XX=m
# CONFIG_LEDS_LP55XX_COMMON is not set
# CONFIG_LEDS_LP8860 is not set
CONFIG_LEDS_LT3593=m
+CONFIG_LEDS_MAX5970=m
CONFIG_LEDS_MAX77650=m
CONFIG_LEDS_MLXCPLD=m
CONFIG_LEDS_MLXREG=m
@@ -3667,6 +3712,7 @@ CONFIG_LTC2983=m
# CONFIG_LTO_CLANG_FULL is not set
# CONFIG_LTO_CLANG_THIN is not set
CONFIG_LTO_NONE=y
+# CONFIG_LTR390 is not set
CONFIG_LTR501=m
CONFIG_LTRF216A=m
CONFIG_LV0104CS=m
@@ -3727,6 +3773,7 @@ CONFIG_MAX30208=m
CONFIG_MAX31827=m
CONFIG_MAX31856=m
CONFIG_MAX31865=m
+CONFIG_MAX34408=m
# CONFIG_MAX44000 is not set
CONFIG_MAX44009=m
# CONFIG_MAX517 is not set
@@ -3756,7 +3803,9 @@ CONFIG_MCP41010=m
# CONFIG_MCP4531 is not set
# CONFIG_MCP4725 is not set
CONFIG_MCP4728=m
+CONFIG_MCP4821=m
# CONFIG_MCP4922 is not set
+CONFIG_MCP9600=m
CONFIG_MCTP_SERIAL=m
# CONFIG_MCTP_TRANSPORT_I2C is not set
# CONFIG_MCTP_TRANSPORT_I3C is not set
@@ -3797,7 +3846,6 @@ CONFIG_MEDIA_CAMERA_SUPPORT=y
CONFIG_MEDIA_CEC_RC=y
CONFIG_MEDIA_CEC_SUPPORT=y
CONFIG_MEDIA_CONTROLLER_DVB=y
-CONFIG_MEDIA_CONTROLLER_REQUEST_API=y
CONFIG_MEDIA_CONTROLLER=y
CONFIG_MEDIA_DIGITAL_TV_SUPPORT=y
CONFIG_MEDIA_PCI_SUPPORT=y
@@ -4049,6 +4097,7 @@ CONFIG_MLX5_VDPA=y
CONFIG_MLX5_VFIO_PCI=m
CONFIG_MLX90614=m
CONFIG_MLX90632=m
+# CONFIG_MLX90635 is not set
# CONFIG_MLXBF_BOOTCTL is not set
# CONFIG_MLXBF_GIGE is not set
# CONFIG_MLXBF_PMC is not set
@@ -4298,6 +4347,7 @@ CONFIG_MTD_SPI_NOR_USE_4K_SECTORS=y
CONFIG_MTD_UBI_BEB_LIMIT=20
# CONFIG_MTD_UBI_BLOCK is not set
# CONFIG_MTD_UBI_FASTMAP is not set
+# CONFIG_MTD_UBI_FAULT_INJECTION is not set
# CONFIG_MTD_UBI_GLUEBI is not set
CONFIG_MTD_UBI=m
CONFIG_MTD_UBI_WL_THRESHOLD=4096
@@ -4332,7 +4382,6 @@ CONFIG_NATSEMI=m
CONFIG_NCN26000_PHY=m
CONFIG_NCSI_OEM_CMD_GET_MAC=y
CONFIG_NCSI_OEM_CMD_KEEP_PHY=y
-CONFIG_ND_BLK=m
CONFIG_ND_BTT=m
# CONFIG_NDC_DIS_DYNAMIC_CACHING is not set
CONFIG_ND_PFN=m
@@ -4636,7 +4685,7 @@ CONFIG_NET_VENDOR_LITEX=y
CONFIG_NET_VENDOR_MARVELL=y
CONFIG_NET_VENDOR_MELLANOX=y
CONFIG_NET_VENDOR_MICREL=y
-# CONFIG_NET_VENDOR_MICROCHIP is not set
+CONFIG_NET_VENDOR_MICROCHIP=y
# CONFIG_NET_VENDOR_MICROSEMI is not set
CONFIG_NET_VENDOR_MICROSOFT=y
CONFIG_NET_VENDOR_MYRI=y
@@ -4762,6 +4811,7 @@ CONFIG_NF_REJECT_IPV6=m
CONFIG_NFSD_BLOCKLAYOUT=y
CONFIG_NFSD_FLEXFILELAYOUT=y
CONFIG_NFS_DISABLE_UDP_SUPPORT=y
+# CONFIG_NFSD_LEGACY_CLIENT_TRACKING is not set
CONFIG_NFSD=m
CONFIG_NFSD_PNFS=y
CONFIG_NFSD_SCSILAYOUT=y
@@ -4910,6 +4960,7 @@ CONFIG_NOUVEAU_DEBUG_DEFAULT=3
CONFIG_NOZOMI=m
CONFIG_NR_CPUS=8192
CONFIG_NS83820=m
+CONFIG_NSM=m
CONFIG_NTB_AMD=m
CONFIG_NTB_EPF=m
CONFIG_NTB_IDT=m
@@ -4990,7 +5041,6 @@ CONFIG_OPT3001=m
CONFIG_OPT4001=m
CONFIG_OPTPROBES=y
CONFIG_ORANGEFS_FS=m
-CONFIG_ORINOCO_USB=m
CONFIG_OSF_PARTITION=y
CONFIG_OSNOISE_TRACER=y
CONFIG_OVERFLOW_KUNIT_TEST=m
@@ -5001,10 +5051,6 @@ CONFIG_OVERLAY_FS=m
CONFIG_OVERLAY_FS_REDIRECT_ALWAYS_FOLLOW=y
# CONFIG_OVERLAY_FS_REDIRECT_DIR is not set
# CONFIG_OVERLAY_FS_XINO_AUTO is not set
-CONFIG_P54_COMMON=m
-CONFIG_P54_PCI=m
-# CONFIG_P54_SPI is not set
-CONFIG_P54_USB=m
CONFIG_PA12203001=m
CONFIG_PACKET_DIAG=y
CONFIG_PACKET=y
@@ -5154,10 +5200,7 @@ CONFIG_PCMCIA_AXNET=m
CONFIG_PCMCIA_LOAD_CIS=y
CONFIG_PCMCIA_NMCLAN=m
CONFIG_PCMCIA_PCNET=m
-# CONFIG_PCMCIA_RAYCS is not set
CONFIG_PCMCIA_SMC91C92=m
-# CONFIG_PCMCIA_SPECTRUM is not set
-# CONFIG_PCMCIA_WL3501 is not set
CONFIG_PCMCIA_XIRC2PS=m
CONFIG_PCMCIA_XIRCOM=m
CONFIG_PCMCIA=y
@@ -5236,6 +5279,7 @@ CONFIG_PINCTRL_EMMITSBURG=m
CONFIG_PINCTRL_EQUILIBRIUM=m
CONFIG_PINCTRL_GEMINILAKE=m
CONFIG_PINCTRL_ICELAKE=m
+CONFIG_PINCTRL_INTEL_PLATFORM=m
# CONFIG_PINCTRL_IPQ6018 is not set
# CONFIG_PINCTRL_IPQ8074 is not set
CONFIG_PINCTRL_JASPERLAKE=m
@@ -5246,6 +5290,7 @@ CONFIG_PINCTRL_LYNXPOINT=m
# CONFIG_PINCTRL_MCP23S08 is not set
CONFIG_PINCTRL_MESON=y
CONFIG_PINCTRL_METEORLAKE=m
+CONFIG_PINCTRL_METEORPOINT=m
# CONFIG_PINCTRL_MICROCHIP_SGPIO is not set
# CONFIG_PINCTRL_MSM8226 is not set
# CONFIG_PINCTRL_MSM8953 is not set
@@ -5266,6 +5311,7 @@ CONFIG_PINCTRL_SM8350_LPASS_LPI=m
CONFIG_PINCTRL_SUNRISEPOINT=m
# CONFIG_PINCTRL_SX150X is not set
CONFIG_PINCTRL_TIGERLAKE=m
+CONFIG_PINCTRL_TPS6594=m
CONFIG_PINCTRL=y
# CONFIG_PING is not set
CONFIG_PINMUX=y
@@ -5557,7 +5603,7 @@ CONFIG_RDS_TCP=m
CONFIG_RD_XZ=y
CONFIG_RD_ZSTD=y
# CONFIG_READABLE_ASM is not set
-# CONFIG_READ_ONLY_THP_FOR_FS is not set
+CONFIG_READ_ONLY_THP_FOR_FS=y
CONFIG_REALTEK_AUTOPM=y
CONFIG_REALTEK_PHY=m
# CONFIG_REED_SOLOMON_TEST is not set
@@ -5609,6 +5655,7 @@ CONFIG_REGULATOR_MP886X=m
# CONFIG_REGULATOR_MPQ7920 is not set
# CONFIG_REGULATOR_MT6311 is not set
CONFIG_REGULATOR_MT6370=m
+# CONFIG_REGULATOR_NETLINK_EVENTS is not set
# CONFIG_REGULATOR_PCA9450 is not set
# CONFIG_REGULATOR_PF8X00 is not set
# CONFIG_REGULATOR_PFUZE100 is not set
@@ -5798,6 +5845,7 @@ CONFIG_RTC_DRV_M41T94=m
CONFIG_RTC_DRV_M48T35=m
CONFIG_RTC_DRV_M48T59=m
# CONFIG_RTC_DRV_M48T86 is not set
+CONFIG_RTC_DRV_MAX31335=m
CONFIG_RTC_DRV_MAX6900=m
CONFIG_RTC_DRV_MAX6902=m
CONFIG_RTC_DRV_MAX6916=m
@@ -5834,6 +5882,7 @@ CONFIG_RTC_DRV_SD3078=m
# CONFIG_RTC_DRV_SNVS is not set
CONFIG_RTC_DRV_STK17TA8=m
# CONFIG_RTC_DRV_TEST is not set
+CONFIG_RTC_DRV_TPS6594=m
CONFIG_RTC_DRV_V3020=m
CONFIG_RTC_DRV_X1205=m
# CONFIG_RTC_DRV_ZYNQMP is not set
@@ -6169,6 +6218,7 @@ CONFIG_SENSORS_FSP_3Y=m
CONFIG_SENSORS_FTSTEUTATES=m
CONFIG_SENSORS_G760A=m
CONFIG_SENSORS_G762=m
+CONFIG_SENSORS_GIGABYTE_WATERFORCE=m
CONFIG_SENSORS_GL518SM=m
CONFIG_SENSORS_GL520SM=m
# CONFIG_SENSORS_GPIO_FAN is not set
@@ -6239,6 +6289,7 @@ CONFIG_SENSORS_LTC4222=m
CONFIG_SENSORS_LTC4245=m
CONFIG_SENSORS_LTC4260=m
CONFIG_SENSORS_LTC4261=m
+# CONFIG_SENSORS_LTC4286 is not set
CONFIG_SENSORS_MAX1111=m
# CONFIG_SENSORS_MAX127 is not set
# CONFIG_SENSORS_MAX15301 is not set
@@ -6266,10 +6317,12 @@ CONFIG_SENSORS_MAX8688=m
CONFIG_SENSORS_MC34VR500=m
CONFIG_SENSORS_MCP3021=m
CONFIG_SENSORS_MLXREG_FAN=m
+# CONFIG_SENSORS_MP2856 is not set
CONFIG_SENSORS_MP2888=m
CONFIG_SENSORS_MP2975=m
CONFIG_SENSORS_MP2975_REGULATOR=y
CONFIG_SENSORS_MP5023=m
+# CONFIG_SENSORS_MP5990 is not set
CONFIG_SENSORS_MPQ7932=m
CONFIG_SENSORS_MPQ7932_REGULATOR=y
CONFIG_SENSORS_MR75203=m
@@ -6456,6 +6509,7 @@ CONFIG_SHUFFLE_PAGE_ALLOCATOR=y
# CONFIG_SIEMENS_SIMATIC_IPC is not set
CONFIG_SIGNALFD=y
CONFIG_SIGNED_PE_FILE_VERIFICATION=y
+# CONFIG_SILICOM_PLATFORM is not set
# CONFIG_SIOX is not set
CONFIG_SIPHASH_KUNIT_TEST=m
CONFIG_SIS190=m
@@ -6465,10 +6519,8 @@ CONFIG_SKGE_GENESIS=y
CONFIG_SKGE=m
# CONFIG_SKY2_DEBUG is not set
CONFIG_SKY2=m
-# CONFIG_SLAB_DEPRECATED is not set
CONFIG_SLAB_FREELIST_HARDENED=y
CONFIG_SLAB_FREELIST_RANDOM=y
-# CONFIG_SLAB is not set
# CONFIG_SLAB_MERGE_DEFAULT is not set
# CONFIG_SLIMBUS is not set
CONFIG_SLIP_COMPRESSED=y
@@ -6512,6 +6564,7 @@ CONFIG_SND_ALS300=m
CONFIG_SND_ALS4000=m
CONFIG_SND_AMD_ACP_CONFIG=m
# CONFIG_SND_AMD_ASOC_ACP63 is not set
+CONFIG_SND_AMD_ASOC_ACP70=m
# CONFIG_SND_AMD_ASOC_REMBRANDT is not set
# CONFIG_SND_AMD_ASOC_RENOIR is not set
CONFIG_SND_ASIHPI=m
@@ -7281,6 +7334,7 @@ CONFIG_SSB_PCMCIAHOST=y
CONFIG_SSB_SDIOHOST=y
# CONFIG_SSFDC is not set
CONFIG_SSIF_IPMI_BMC=m
+CONFIG_STACKDEPOT_MAX_FRAMES=64
CONFIG_STACK_HASH_ORDER=20
CONFIG_STACKINIT_KUNIT_TEST=m
CONFIG_STACKPROTECTOR_STRONG=y
@@ -7499,6 +7553,7 @@ CONFIG_TEST_SORT=m
# CONFIG_TEST_UUID is not set
CONFIG_TEST_VMALLOC=m
# CONFIG_TEST_XARRAY is not set
+# CONFIG_THERMAL_DEBUGFS is not set
# CONFIG_THERMAL_DEFAULT_GOV_BANG_BANG is not set
# CONFIG_THERMAL_DEFAULT_GOV_FAIR_SHARE is not set
CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y
@@ -7706,6 +7761,7 @@ CONFIG_TRACE_EVAL_MAP_FILE=y
CONFIG_TRACER_SNAPSHOT=y
# CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS is not set
CONFIG_TRANSPARENT_HUGEPAGE_MADVISE=y
+# CONFIG_TRANSPARENT_HUGEPAGE_NEVER is not set
CONFIG_TRANSPARENT_HUGEPAGE=y
# CONFIG_TRIM_UNUSED_KSYMS is not set
CONFIG_TRUSTED_KEYS_TEE=y
@@ -7743,6 +7799,7 @@ CONFIG_TYPEC_MUX_INTEL_PMC=m
CONFIG_TYPEC_MUX_NB7VPQ904M=m
CONFIG_TYPEC_MUX_PI3USB30532=m
CONFIG_TYPEC_MUX_PTN36502=m
+# CONFIG_TYPEC_MUX_WCD939X_USBSS is not set
CONFIG_TYPEC_NVIDIA_ALTMODE=m
# CONFIG_TYPEC_QCOM_PMIC is not set
# CONFIG_TYPEC_RT1711H is not set
@@ -8003,7 +8060,6 @@ CONFIG_USB_NET_NET1080=m
CONFIG_USB_NET_PLUSB=m
CONFIG_USB_NET_QMI_WWAN=m
CONFIG_USB_NET_RNDIS_HOST=m
-CONFIG_USB_NET_RNDIS_WLAN=m
CONFIG_USB_NET_SMSC75XX=m
CONFIG_USB_NET_SMSC95XX=m
CONFIG_USB_NET_SR9700=m
@@ -8146,7 +8202,6 @@ CONFIG_USB_XHCI_PLATFORM=m
CONFIG_USB_XUSBATM=m
CONFIG_USB=y
CONFIG_USB_YUREX=m
-# CONFIG_USB_ZD1201 is not set
# CONFIG_USB_ZERO is not set
CONFIG_USB_ZR364XX=m
# CONFIG_USELIB is not set
@@ -8165,6 +8220,7 @@ CONFIG_V4L_TEST_DRIVERS=y
CONFIG_VALIDATE_FS_PARSER=y
CONFIG_VBOXGUEST=m
CONFIG_VBOXSF_FS=m
+CONFIG_VCAP=y
CONFIG_VCHIQ_CDEV=y
CONFIG_VCNL3020=m
# CONFIG_VCNL4000 is not set
@@ -8177,11 +8233,13 @@ CONFIG_VDPA_SIM_NET=m
CONFIG_VDPA_USER=m
CONFIG_VEML6030=m
# CONFIG_VEML6070 is not set
+# CONFIG_VEML6075 is not set
CONFIG_VETH=m
# CONFIG_VF610_ADC is not set
# CONFIG_VF610_DAC is not set
CONFIG_VFAT_FS=m
CONFIG_VFIO_CONTAINER=y
+# CONFIG_VFIO_DEBUGFS is not set
# CONFIG_VFIO_DEVICE_CDEV is not set
CONFIG_VFIO_GROUP=y
CONFIG_VFIO_IOMMU_TYPE1=m
@@ -8224,6 +8282,7 @@ CONFIG_VIDEO_ADV7842=m
# CONFIG_VIDEO_ADV_DEBUG is not set
CONFIG_VIDEO_AK7375=m
CONFIG_VIDEO_AK881X=m
+# CONFIG_VIDEO_ALVIUM_CSI2 is not set
CONFIG_VIDEO_AR0521=m
CONFIG_VIDEO_AU0828=m
# CONFIG_VIDEO_AU0828_RC is not set
@@ -8273,6 +8332,8 @@ CONFIG_VIDEO_ET8EK8=m
# CONFIG_VIDEO_FB_IVTV_FORCE_PAT is not set
CONFIG_VIDEO_FB_IVTV=m
# CONFIG_VIDEO_FIXED_MINOR_RANGES is not set
+CONFIG_VIDEO_GC0308=m
+CONFIG_VIDEO_GC2145=m
CONFIG_VIDEO_GO7007_LOADER=m
CONFIG_VIDEO_GO7007=m
CONFIG_VIDEO_GO7007_USB=m
@@ -8344,6 +8405,7 @@ CONFIG_VIDEO_OV5670=m
CONFIG_VIDEO_OV5675=m
CONFIG_VIDEO_OV5693=m
CONFIG_VIDEO_OV5695=m
+CONFIG_VIDEO_OV64A40=m
CONFIG_VIDEO_OV6650=m
CONFIG_VIDEO_OV7251=m
CONFIG_VIDEO_OV7640=m
@@ -8400,6 +8462,7 @@ CONFIG_VIDEO_TDA9840=m
CONFIG_VIDEO_TEA6415C=m
CONFIG_VIDEO_TEA6420=m
# CONFIG_VIDEO_TEGRA_TPG is not set
+# CONFIG_VIDEO_THP7312 is not set
CONFIG_VIDEO_THS7303=m
CONFIG_VIDEO_THS8200=m
CONFIG_VIDEO_TLV320AIC23B=m
@@ -8415,6 +8478,7 @@ CONFIG_VIDEO_TW2804=m
# CONFIG_VIDEO_TW5864 is not set
CONFIG_VIDEO_TW686X=m
# CONFIG_VIDEO_TW68 is not set
+# CONFIG_VIDEO_TW9900 is not set
CONFIG_VIDEO_TW9903=m
CONFIG_VIDEO_TW9906=m
CONFIG_VIDEO_TW9910=m
@@ -8457,6 +8521,7 @@ CONFIG_VIRTIO_PCI_LEGACY=y
CONFIG_VIRTIO_PCI=y
# CONFIG_VIRTIO_PMEM is not set
CONFIG_VIRTIO_VDPA=m
+CONFIG_VIRTIO_VFIO_PCI=m
CONFIG_VIRTIO_VSOCKETS=m
CONFIG_VIRTIO=y
CONFIG_VIRTUALIZATION=y
@@ -8501,6 +8566,7 @@ CONFIG_VXLAN=m
# CONFIG_VZ89X is not set
CONFIG_W1_CON=y
CONFIG_W1=m
+# CONFIG_W1_MASTER_AMD_AXI is not set
# CONFIG_W1_MASTER_DS1WM is not set
CONFIG_W1_MASTER_DS2482=m
CONFIG_W1_MASTER_DS2490=m
@@ -8579,7 +8645,7 @@ CONFIG_WLAN_VENDOR_ATH=y
CONFIG_WLAN_VENDOR_BROADCOM=y
# CONFIG_WLAN_VENDOR_CISCO is not set
CONFIG_WLAN_VENDOR_INTEL=y
-CONFIG_WLAN_VENDOR_INTERSIL=y
+# CONFIG_WLAN_VENDOR_INTERSIL is not set
CONFIG_WLAN_VENDOR_MARVELL=y
CONFIG_WLAN_VENDOR_MEDIATEK=y
CONFIG_WLAN_VENDOR_MICROCHIP=y
@@ -8800,6 +8866,7 @@ CONFIG_ZRAM_DEF_COMP_LZORLE=y
CONFIG_ZRAM=m
# CONFIG_ZRAM_MEMORY_TRACKING is not set
CONFIG_ZRAM_MULTI_COMP=y
+# CONFIG_ZRAM_TRACK_ENTRY_ACTIME is not set
# CONFIG_ZRAM_WRITEBACK is not set
CONFIG_ZSMALLOC_CHAIN_SIZE=8
# CONFIG_ZSMALLOC_STAT is not set
@@ -8812,6 +8879,7 @@ CONFIG_ZSWAP_COMPRESSOR_DEFAULT_LZO=y
# CONFIG_ZSWAP_COMPRESSOR_DEFAULT_ZSTD is not set
# CONFIG_ZSWAP_DEFAULT_ON is not set
CONFIG_ZSWAP_EXCLUSIVE_LOADS_DEFAULT_ON=y
+CONFIG_ZSWAP_SHRINKER_DEFAULT_ON=y
CONFIG_ZSWAP=y
# CONFIG_ZSWAP_ZPOOL_DEFAULT_Z3FOLD is not set
CONFIG_ZSWAP_ZPOOL_DEFAULT_ZBUD=y
@@ -8821,7 +8889,7 @@ CONFIG_ZENIFY=y
CONFIG_NTSYNC=y
CONFIG_USER_NS_UNPRIVILEGED=y
CONFIG_TCP_CONG_BBR2=m
-# CONFIG_SCHED_PDS is not set
+CONFIG_SCHED_BORE=y
CONFIG_HID_IPTS=m
CONFIG_HID_ITHC=m
CONFIG_SURFACE_BOOK1_DGPU_SWITCH=m
@@ -8830,8 +8898,6 @@ CONFIG_LEDS_TPS68470=m
CONFIG_SENSORS_SURFACE_FAN=m
CONFIG_SENSORS_SURFACE_TEMP=m
CONFIG_DRM_AMD_COLOR_STEAMDECK=y
-CONFIG_BMI323_I2C=m
-CONFIG_BMI323_SPI=m
CONFIG_DRM_APPLETBDRM=m
CONFIG_HID_APPLETB_BL=m
CONFIG_HID_APPLETB_KBD=m
@@ -8878,4 +8944,3 @@ CONFIG_SND_SOC_SOF_IPC3=y
CONFIG_SND_SOC_SOF_INTEL_IPC4=y
CONFIG_SND_SOC_SOF_AMD_COMMON=m
CONFIG_SND_SOC_TOPOLOGY=y
-CONFIG_SCHED_BORE=y
diff --git a/SOURCES/kernel-x86_64-rhel.config b/SOURCES/kernel-x86_64-rhel.config
index 5097569..611a794 100644
--- a/SOURCES/kernel-x86_64-rhel.config
+++ b/SOURCES/kernel-x86_64-rhel.config
@@ -102,6 +102,7 @@ CONFIG_ACPI=y
# CONFIG_AD5791 is not set
# CONFIG_AD5933 is not set
# CONFIG_AD7091R5 is not set
+# CONFIG_AD7091R8 is not set
# CONFIG_AD7124 is not set
# CONFIG_AD7150 is not set
# CONFIG_AD7192 is not set
@@ -230,6 +231,7 @@ CONFIG_AMD_PMF=m
CONFIG_AMD_PTDMA=m
CONFIG_AMD_SFH_HID=m
# CONFIG_AMDTEE is not set
+# CONFIG_AMD_WBRF is not set
# CONFIG_AMD_XGBE_DCB is not set
CONFIG_AMD_XGBE=m
# CONFIG_AMIGA_PARTITION is not set
@@ -238,6 +240,7 @@ CONFIG_AMPERE_ERRATUM_AC03_CPU_38=y
# CONFIG_AMT is not set
# CONFIG_ANDROID_BINDER_IPC is not set
# CONFIG_ANON_VMA_NAME is not set
+# CONFIG_AOSONG_AGS02MA is not set
# CONFIG_APDS9300 is not set
CONFIG_APDS9802ALS=m
# CONFIG_APDS9960 is not set
@@ -395,6 +398,7 @@ CONFIG_BACKLIGHT_LED=m
# CONFIG_BACKLIGHT_LM3639 is not set
CONFIG_BACKLIGHT_LP855X=m
# CONFIG_BACKLIGHT_LV5207LP is not set
+# CONFIG_BACKLIGHT_MP3309C is not set
# CONFIG_BACKLIGHT_PWM is not set
# CONFIG_BACKLIGHT_QCOM_WLED is not set
# CONFIG_BACKLIGHT_SAHARA is not set
@@ -488,6 +492,7 @@ CONFIG_BLK_DEV_SR=m
# CONFIG_BLK_DEV_THROTTLING_LOW is not set
CONFIG_BLK_DEV_THROTTLING=y
# CONFIG_BLK_DEV_UBLK is not set
+CONFIG_BLK_DEV_WRITE_MOUNTED=y
CONFIG_BLK_DEV=y
CONFIG_BLK_DEV_ZONED=y
# CONFIG_BLK_INLINE_ENCRYPTION is not set
@@ -507,6 +512,8 @@ CONFIG_BLOCK=y
# CONFIG_BMI088_ACCEL is not set
# CONFIG_BMI160_I2C is not set
# CONFIG_BMI160_SPI is not set
+CONFIG_BMI323_I2C=m
+CONFIG_BMI323_SPI=m
# CONFIG_BMP280 is not set
# CONFIG_BNA is not set
CONFIG_BNX2=m
@@ -522,7 +529,6 @@ CONFIG_BONDING=m
# CONFIG_BOOT_CONFIG_FORCE is not set
CONFIG_BOOT_CONFIG=y
CONFIG_BOOTPARAM_HARDLOCKUP_PANIC=y
-CONFIG_BOOTPARAM_HOTPLUG_CPU0=y
# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
CONFIG_BOOT_PRINTK_DELAY=y
@@ -960,7 +966,6 @@ CONFIG_CRYPTO_CAST6_AVX_X86_64=m
CONFIG_CRYPTO_CAST6=m
CONFIG_CRYPTO_CBC=y
CONFIG_CRYPTO_CCM=y
-CONFIG_CRYPTO_CFB=y
CONFIG_CRYPTO_CHACHA20=m
CONFIG_CRYPTO_CHACHA20POLY1305=m
CONFIG_CRYPTO_CHACHA20_X86_64=y
@@ -995,11 +1000,14 @@ CONFIG_CRYPTO_DEV_CHELSIO=m
CONFIG_CRYPTO_DEV_HISI_SEC=m
# CONFIG_CRYPTO_DEV_HISI_TRNG is not set
# CONFIG_CRYPTO_DEV_HISTB_TRNG is not set
+CONFIG_CRYPTO_DEV_IAA_CRYPTO=m
+# CONFIG_CRYPTO_DEV_IAA_CRYPTO_STATS is not set
CONFIG_CRYPTO_DEV_NITROX_CNN55XX=m
# CONFIG_CRYPTO_DEV_OCTEONTX_CPT is not set
CONFIG_CRYPTO_DEV_PADLOCK_AES=m
CONFIG_CRYPTO_DEV_PADLOCK=m
CONFIG_CRYPTO_DEV_PADLOCK_SHA=m
+CONFIG_CRYPTO_DEV_QAT_420XX=m
CONFIG_CRYPTO_DEV_QAT_4XXX=m
CONFIG_CRYPTO_DEV_QAT_C3XXX=m
CONFIG_CRYPTO_DEV_QAT_C3XXXVF=m
@@ -1059,7 +1067,6 @@ CONFIG_CRYPTO_MICHAEL_MIC=m
CONFIG_CRYPTO_NHPOLY1305_AVX2=m
CONFIG_CRYPTO_NHPOLY1305_SSE2=m
CONFIG_CRYPTO_NULL=y
-CONFIG_CRYPTO_OFB=y
CONFIG_CRYPTO_PCBC=m
CONFIG_CRYPTO_PCRYPT=m
CONFIG_CRYPTO_POLY1305=m
@@ -1157,7 +1164,6 @@ CONFIG_DEBUG_FS_ALLOW_ALL=y
# CONFIG_DEBUG_FS_DISALLOW_MOUNT is not set
CONFIG_DEBUG_FS=y
# CONFIG_DEBUG_GPIO is not set
-# CONFIG_DEBUG_HOTPLUG_CPU0 is not set
CONFIG_DEBUG_INFO_BTF=y
# CONFIG_DEBUG_INFO_COMPRESSED is not set
CONFIG_DEBUG_INFO_COMPRESSED_NONE=y
@@ -1217,7 +1223,7 @@ CONFIG_DEBUG_STACKOVERFLOW=y
# CONFIG_DEBUG_VM_MAPLE_TREE is not set
# CONFIG_DEBUG_VM_PGFLAGS is not set
# CONFIG_DEBUG_VM_PGTABLE is not set
-# CONFIG_DEBUG_VM_RB is not set # revisit this if performance isn't horrible
+# CONFIG_DEBUG_VM_RB is not set
# CONFIG_DEBUG_VM_SHOOT_LAZIES is not set
# CONFIG_DEBUG_VM_VMACACHE is not set
# CONFIG_DEBUG_WQ_FORCE_RR_CPU is not set
@@ -1344,6 +1350,7 @@ CONFIG_DP83867_PHY=m
# CONFIG_DP83869_PHY is not set
CONFIG_DP83TC811_PHY=m
# CONFIG_DP83TD510_PHY is not set
+# CONFIG_DP83TG720_PHY is not set
# CONFIG_DPM_WATCHDOG is not set
# CONFIG_DPOT_DAC is not set
# CONFIG_DPS310 is not set
@@ -1404,6 +1411,7 @@ CONFIG_DRM_I915_COMPRESS_ERROR=y
# CONFIG_DRM_I915_DEBUG_MMIO is not set
# CONFIG_DRM_I915_DEBUG_RUNTIME_PM is not set
# CONFIG_DRM_I915_DEBUG_VBLANK_EVADE is not set
+# CONFIG_DRM_I915_DEBUG_WAKEREF is not set
CONFIG_DRM_I915_FENCE_TIMEOUT=10000
CONFIG_DRM_I915_FORCE_PROBE=""
# CONFIG_DRM_I915_GVT_KVMGT is not set
@@ -1447,6 +1455,7 @@ CONFIG_DRM_LOAD_EDID_FIRMWARE=y
CONFIG_DRM_MGAG200=m
# CONFIG_DRM_MXSFB is not set
CONFIG_DRM_NOUVEAU_BACKLIGHT=y
+# CONFIG_DRM_NOUVEAU_GSP_DEFAULT is not set
CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_NWL_MIPI_DSI is not set
# CONFIG_DRM_NXP_PTN3460 is not set
@@ -1467,6 +1476,7 @@ CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_PANEL_HIMAX_HX8394 is not set
# CONFIG_DRM_PANEL_ILITEK_IL9322 is not set
# CONFIG_DRM_PANEL_ILITEK_ILI9341 is not set
+# CONFIG_DRM_PANEL_ILITEK_ILI9805 is not set
# CONFIG_DRM_PANEL_ILITEK_ILI9881C is not set
# CONFIG_DRM_PANEL_ILITEK_ILI9882T is not set
# CONFIG_DRM_PANEL_INNOLUX_EJ030NA is not set
@@ -1527,6 +1537,7 @@ CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_PANEL_SONY_TD4353_JDI is not set
# CONFIG_DRM_PANEL_SONY_TULIP_TRULY_NT35521 is not set
# CONFIG_DRM_PANEL_STARTEK_KD070FHFID015 is not set
+# CONFIG_DRM_PANEL_SYNAPTICS_R63353 is not set
# CONFIG_DRM_PANEL_TDO_TL070WSH30 is not set
# CONFIG_DRM_PANEL_TPO_TD028TTEC1 is not set
# CONFIG_DRM_PANEL_TPO_TD043MTEA1 is not set
@@ -1541,6 +1552,7 @@ CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_PARADE_PS8622 is not set
# CONFIG_DRM_PARADE_PS8640 is not set
# CONFIG_DRM_PL111 is not set
+# CONFIG_DRM_POWERVR is not set
CONFIG_DRM_QXL=m
CONFIG_DRM_RADEON=m
CONFIG_DRM_RADEON_USERPTR=y
@@ -1579,6 +1591,7 @@ CONFIG_DRM_VKMS=m
CONFIG_DRM_VMWGFX_FBCON=y
CONFIG_DRM_VMWGFX=m
# CONFIG_DRM_VMWGFX_MKSSTATS is not set
+# CONFIG_DRM_XE is not set
# CONFIG_DRM_XEN_FRONTEND is not set
CONFIG_DRM=y
# CONFIG_DS1682 is not set
@@ -1677,6 +1690,7 @@ CONFIG_DVB_USB_VP702X=m
CONFIG_DVB_USB_VP7045=m
# CONFIG_DVB_USB_ZD1301 is not set
# CONFIG_DW_AXI_DMAC is not set
+# CONFIG_DWC_PCIE_PMU is not set
CONFIG_DW_DMAC=m
CONFIG_DW_DMAC_PCI=y
# CONFIG_DW_EDMA is not set
@@ -1772,6 +1786,7 @@ CONFIG_EPOLL=y
# CONFIG_EQUALIZER is not set
# CONFIG_EROFS_FS_DEBUG is not set
CONFIG_EROFS_FS=m
+# CONFIG_EROFS_FS_ONDEMAND is not set
CONFIG_EROFS_FS_POSIX_ACL=y
CONFIG_EROFS_FS_SECURITY=y
CONFIG_EROFS_FS_XATTR=y
@@ -1830,7 +1845,6 @@ CONFIG_FAT_KUNIT_TEST=m
# CONFIG_FB_3DFX is not set
# CONFIG_FB_ARC is not set
# CONFIG_FB_ARK is not set
-# CONFIG_FB_ARMCLCD is not set
# CONFIG_FB_ASILIANT is not set
# CONFIG_FB_ATY128 is not set
# CONFIG_FB_ATY is not set
@@ -1850,7 +1864,6 @@ CONFIG_FB_EFI=y
# CONFIG_FB_IMSTT is not set
# CONFIG_FB_IMX is not set
# CONFIG_FB_KYRO is not set
-# CONFIG_FB_LE80578 is not set
# CONFIG_FB_MATROX_G is not set
# CONFIG_FB_MATROX_I2C is not set
# CONFIG_FB_MATROX is not set
@@ -1919,11 +1932,12 @@ CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
CONFIG_FRAMEBUFFER_CONSOLE=y
CONFIG_FRAME_POINTER=y
+# CONFIG_FRAMER is not set
CONFIG_FRAME_WARN=2048
CONFIG_FRONTSWAP=y
# CONFIG_FSCACHE_DEBUG is not set
-CONFIG_FSCACHE=m
CONFIG_FSCACHE_STATS=y
+CONFIG_FSCACHE=y
CONFIG_FS_DAX=y
# CONFIG_FS_ENCRYPTION is not set
# CONFIG_FSI is not set
@@ -2106,6 +2120,7 @@ CONFIG_HASHTABLE_KUNIT_TEST=m
# CONFIG_HD44780 is not set
# CONFIG_HDC100X is not set
# CONFIG_HDC2010 is not set
+# CONFIG_HDC3020 is not set
CONFIG_HDLC_CISCO=m
CONFIG_HDLC_FR=m
CONFIG_HDLC=m
@@ -2179,6 +2194,7 @@ CONFIG_HID_LOGITECH=m
CONFIG_HID_MAGICMOUSE=y
# CONFIG_HID_MALTRON is not set
# CONFIG_HID_MAYFLASH is not set
+# CONFIG_HID_MCP2200 is not set
# CONFIG_HID_MCP2221 is not set
# CONFIG_HID_MEGAWORLD_FF is not set
CONFIG_HID_MICROSOFT=m
@@ -2298,6 +2314,7 @@ CONFIG_HP_WMI=m
CONFIG_HSA_AMD_P2P=y
CONFIG_HSA_AMD_SVM=y
CONFIG_HSA_AMD=y
+# CONFIG_HSC030PA is not set
# CONFIG_HSI is not set
CONFIG_HSR=m
# CONFIG_HT16K33 is not set
@@ -2440,6 +2457,7 @@ CONFIG_IAVF=m
# CONFIG_IBM_ASM is not set
CONFIG_IBMASR=m
# CONFIG_IBM_RTL is not set
+CONFIG_ICE_HWMON=y
CONFIG_ICE_HWTS=y
CONFIG_ICE=m
CONFIG_ICE_SWITCHDEV=y
@@ -2550,7 +2568,7 @@ CONFIG_INFINIBAND_BNXT_RE=m
CONFIG_INFINIBAND_CXGB4=m
CONFIG_INFINIBAND_EFA=m
# CONFIG_INFINIBAND_ERDMA is not set
-CONFIG_INFINIBAND_HFI1=m
+# CONFIG_INFINIBAND_HFI1 is not set
# CONFIG_INFINIBAND_HNS is not set
CONFIG_INFINIBAND_IPOIB_CM=y
# CONFIG_INFINIBAND_IPOIB_DEBUG_DATA is not set
@@ -2566,15 +2584,15 @@ CONFIG_INFINIBAND_ON_DEMAND_PAGING=y
CONFIG_INFINIBAND_OPA_VNIC=m
CONFIG_INFINIBAND_QEDR=m
# CONFIG_INFINIBAND_QIB is not set
-CONFIG_INFINIBAND_RDMAVT=m
+# CONFIG_INFINIBAND_RDMAVT is not set
# CONFIG_INFINIBAND_RTRS_CLIENT is not set
# CONFIG_INFINIBAND_RTRS_SERVER is not set
CONFIG_INFINIBAND_SRP=m
CONFIG_INFINIBAND_SRPT=m
CONFIG_INFINIBAND_USER_ACCESS=m
CONFIG_INFINIBAND_USER_MAD=m
-CONFIG_INFINIBAND_USNIC=m
-CONFIG_INFINIBAND_VMWARE_PVRDMA=m
+# CONFIG_INFINIBAND_USNIC is not set
+# CONFIG_INFINIBAND_VMWARE_PVRDMA is not set
# CONFIG_INFTL is not set
# CONFIG_INIT_ON_ALLOC_DEFAULT_ON is not set
# CONFIG_INIT_ON_FREE_DEFAULT_ON is not set
@@ -2675,12 +2693,13 @@ CONFIG_INTEL_ISH_HID=m
CONFIG_INTEL_ISHTP_ECLITE=m
# CONFIG_INTEL_LDMA is not set
CONFIG_INTEL_MEI_GSC=m
-# CONFIG_INTEL_MEI_GSC_PROXY is not set
+CONFIG_INTEL_MEI_GSC_PROXY=m
# CONFIG_INTEL_MEI_HDCP is not set
CONFIG_INTEL_MEI=m
CONFIG_INTEL_MEI_ME=m
# CONFIG_INTEL_MEI_PXP is not set
# CONFIG_INTEL_MEI_TXE is not set
+# CONFIG_INTEL_MEI_VSC_HW is not set
CONFIG_INTEL_MEI_WDT=m
# CONFIG_INTEL_MENLOW is not set
CONFIG_INTEL_OAKTRAIL=m
@@ -2940,6 +2959,7 @@ CONFIG_ISL29003=m
CONFIG_ISL29020=m
# CONFIG_ISL29125 is not set
# CONFIG_ISL29501 is not set
+# CONFIG_ISL76682 is not set
CONFIG_ISO9660_FS=m
CONFIG_IS_SIGNED_TYPE_KUNIT_TEST=m
# CONFIG_IT8712F_WDT is not set
@@ -2980,6 +3000,7 @@ CONFIG_KALLSYMS_BASE_RELATIVE=y
# CONFIG_KALLSYMS_SELFTEST is not set
CONFIG_KALLSYMS=y
# CONFIG_KARMA_PARTITION is not set
+# CONFIG_KASAN_EXTRA_INFO is not set
# CONFIG_KASAN is not set
# CONFIG_KASAN_MODULE_TEST is not set
# CONFIG_KASAN_VMALLOC is not set
@@ -3072,12 +3093,14 @@ CONFIG_KVM_AMD_SEV=y
# CONFIG_KVM_BOOK3S_HV_P8_TIMING is not set
# CONFIG_KVM_BOOK3S_HV_P9_TIMING is not set
CONFIG_KVM_GUEST=y
+CONFIG_KVM_HYPERV=y
CONFIG_KVM_INTEL=m
CONFIG_KVM=m
CONFIG_KVM_MAX_NR_VCPUS=4096
CONFIG_KVM_MMU_AUDIT=y
# CONFIG_KVM_PROVE_MMU is not set
CONFIG_KVM_SMM=y
+CONFIG_KVM_SW_PROTECTED_VM=y
# CONFIG_KVM_WERROR is not set
# CONFIG_KVM_XEN is not set
# CONFIG_KXCJK1013 is not set
@@ -3254,6 +3277,7 @@ CONFIG_LSM_MMAP_MIN_ADDR=65535
# CONFIG_LTO_CLANG_FULL is not set
# CONFIG_LTO_CLANG_THIN is not set
CONFIG_LTO_NONE=y
+# CONFIG_LTR390 is not set
# CONFIG_LTR501 is not set
# CONFIG_LTRF216A is not set
# CONFIG_LV0104CS is not set
@@ -3294,7 +3318,7 @@ CONFIG_MANA_INFINIBAND=m
CONFIG_MANTIS_CORE=m
# CONFIG_MARCH_Z16 is not set
CONFIG_MARVELL_10G_PHY=m
-# CONFIG_MARVELL_88Q2XXX_PHY is not set
+CONFIG_MARVELL_88Q2XXX_PHY=m
# CONFIG_MARVELL_88X2222_PHY is not set
CONFIG_MARVELL_PHY=m
# CONFIG_MATOM is not set
@@ -3311,6 +3335,7 @@ CONFIG_MARVELL_PHY=m
# CONFIG_MAX31827 is not set
# CONFIG_MAX31856 is not set
# CONFIG_MAX31865 is not set
+# CONFIG_MAX34408 is not set
# CONFIG_MAX44000 is not set
# CONFIG_MAX44009 is not set
# CONFIG_MAX517 is not set
@@ -3339,7 +3364,9 @@ CONFIG_MAXSMP=y
# CONFIG_MCP4531 is not set
# CONFIG_MCP4725 is not set
# CONFIG_MCP4728 is not set
+# CONFIG_MCP4821 is not set
# CONFIG_MCP4922 is not set
+# CONFIG_MCP9600 is not set
# CONFIG_MCTP is not set
CONFIG_MD_AUTODETECT=y
CONFIG_MD_BITMAP_FILE=y
@@ -3567,10 +3594,11 @@ CONFIG_MISC_RTSX_USB=m
CONFIG_MITIGATION_RFDS=y
# CONFIG_MK8 is not set
# CONFIG_MLX4_CORE_GEN2 is not set
+# CONFIG_MLX4_CORE is not set
CONFIG_MLX4_DEBUG=y
CONFIG_MLX4_EN_DCB=y
-CONFIG_MLX4_EN=m
-CONFIG_MLX4_INFINIBAND=m
+# CONFIG_MLX4_EN is not set
+# CONFIG_MLX4_INFINIBAND is not set
CONFIG_MLX5_ACCEL=y
CONFIG_MLX5_CLS_ACT=y
CONFIG_MLX5_CORE_EN_DCB=y
@@ -3601,6 +3629,7 @@ CONFIG_MLX5_VDPA_NET=m
CONFIG_MLX5_VFIO_PCI=m
# CONFIG_MLX90614 is not set
# CONFIG_MLX90632 is not set
+# CONFIG_MLX90635 is not set
# CONFIG_MLXBF_BOOTCTL is not set
# CONFIG_MLXBF_GIGE is not set
# CONFIG_MLXBF_PMC is not set
@@ -3767,7 +3796,7 @@ CONFIG_MT76x2U=m
CONFIG_MT7921E=m
# CONFIG_MT7921S is not set
# CONFIG_MT7921U is not set
-# CONFIG_MT7925E is not set
+CONFIG_MT7925E=m
# CONFIG_MT7925U is not set
# CONFIG_MT7996E is not set
# CONFIG_MTD_ABSENT is not set
@@ -3819,6 +3848,7 @@ CONFIG_MTD_OF_PARTS=m
CONFIG_MTD_UBI_BEB_LIMIT=20
# CONFIG_MTD_UBI_BLOCK is not set
# CONFIG_MTD_UBI_FASTMAP is not set
+# CONFIG_MTD_UBI_FAULT_INJECTION is not set
# CONFIG_MTD_UBI_GLUEBI is not set
CONFIG_MTD_UBI=m
CONFIG_MTD_UBI_WL_THRESHOLD=4096
@@ -3844,7 +3874,6 @@ CONFIG_NAMESPACES=y
CONFIG_NATIONAL_PHY=m
# CONFIG_NAU7802 is not set
# CONFIG_NCN26000_PHY is not set
-CONFIG_ND_BLK=m
CONFIG_ND_BTT=m
# CONFIG_NDC_DIS_DYNAMIC_CACHING is not set
CONFIG_ND_CLAIM=y
@@ -3898,7 +3927,6 @@ CONFIG_NET_DROP_MONITOR=y
# CONFIG_NET_EMATCH is not set
# CONFIG_NET_EMATCH_META is not set
# CONFIG_NET_EMATCH_NBYTE is not set
-# CONFIG_NET_EMATCH_STACK is not set
# CONFIG_NET_EMATCH_TEXT is not set
# CONFIG_NET_EMATCH_U32 is not set
CONFIG_NET_FAILOVER=m
@@ -4082,6 +4110,7 @@ CONFIG_NET_VENDOR_HUAWEI=y
CONFIG_NET_VENDOR_INTEL=y
# CONFIG_NET_VENDOR_LITEX is not set
CONFIG_NET_VENDOR_MARVELL=y
+CONFIG_NET_VENDOR_MELLANOX=y
# CONFIG_NET_VENDOR_MICREL is not set
# CONFIG_NET_VENDOR_MICROCHIP is not set
# CONFIG_NET_VENDOR_MICROSEMI is not set
@@ -4173,6 +4202,7 @@ CONFIG_NF_REJECT_IPV6=m
# CONFIG_NFSD_BLOCKLAYOUT is not set
# CONFIG_NFSD_FLEXFILELAYOUT is not set
CONFIG_NFS_DISABLE_UDP_SUPPORT=y
+# CONFIG_NFSD_LEGACY_CLIENT_TRACKING is not set
CONFIG_NFSD=m
CONFIG_NFSD_PNFS=y
CONFIG_NFSD_SCSILAYOUT=y
@@ -4319,6 +4349,7 @@ CONFIG_NOUVEAU_DEBUG_DEFAULT=3
# CONFIG_NOUVEAU_LEGACY_CTX_SUPPORT is not set
CONFIG_NOZOMI=m
CONFIG_NR_CPUS=8192
+# CONFIG_NSM is not set
CONFIG_NTB_AMD=m
# CONFIG_NTB_EPF is not set
# CONFIG_NTB_IDT is not set
@@ -4614,6 +4645,7 @@ CONFIG_PINCTRL_EMMITSBURG=m
# CONFIG_PINCTRL_EQUILIBRIUM is not set
CONFIG_PINCTRL_GEMINILAKE=m
CONFIG_PINCTRL_ICELAKE=m
+CONFIG_PINCTRL_INTEL_PLATFORM=m
# CONFIG_PINCTRL_IPQ6018 is not set
# CONFIG_PINCTRL_IPQ8074 is not set
CONFIG_PINCTRL_JASPERLAKE=m
@@ -4624,6 +4656,7 @@ CONFIG_PINCTRL_LEWISBURG=m
# CONFIG_PINCTRL_MCP23S08 is not set
# CONFIG_PINCTRL_MDM9615 is not set
CONFIG_PINCTRL_METEORLAKE=m
+CONFIG_PINCTRL_METEORPOINT=m
# CONFIG_PINCTRL_MICROCHIP_SGPIO is not set
# CONFIG_PINCTRL_MLXBF3 is not set
# CONFIG_PINCTRL_MSM8226 is not set
@@ -4913,8 +4946,8 @@ CONFIG_RD_GZIP=y
CONFIG_RD_LZ4=y
CONFIG_RD_LZMA=y
CONFIG_RD_LZO=y
-CONFIG_RDMA_RXE=m
-CONFIG_RDMA_SIW=m
+# CONFIG_RDMA_RXE is not set
+# CONFIG_RDMA_SIW is not set
# CONFIG_RDS is not set
CONFIG_RD_XZ=y
CONFIG_RD_ZSTD=y
@@ -4955,6 +4988,7 @@ CONFIG_REGULATOR_FIXED_VOLTAGE=m
# CONFIG_REGULATOR_MAX8973 is not set
# CONFIG_REGULATOR_MCP16502 is not set
# CONFIG_REGULATOR_MT6311 is not set
+# CONFIG_REGULATOR_NETLINK_EVENTS is not set
# CONFIG_REGULATOR_PF8X00 is not set
# CONFIG_REGULATOR_PFUZE100 is not set
# CONFIG_REGULATOR_PV88060 is not set
@@ -5104,6 +5138,7 @@ CONFIG_RTC_DRV_M41T80_WDT=y
CONFIG_RTC_DRV_M48T35=m
CONFIG_RTC_DRV_M48T59=m
# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_MAX31335 is not set
CONFIG_RTC_DRV_MAX6900=m
# CONFIG_RTC_DRV_MAX6902 is not set
# CONFIG_RTC_DRV_MAX6916 is not set
@@ -5190,7 +5225,7 @@ CONFIG_RTW88=m
# CONFIG_RTW89_8851BE is not set
CONFIG_RTW89_8852AE=m
CONFIG_RTW89_8852BE=m
-# CONFIG_RTW89_8852CE is not set
+CONFIG_RTW89_8852CE=m
# CONFIG_RTW89_DEBUGFS is not set
# CONFIG_RTW89_DEBUGMSG is not set
CONFIG_RTW89=m
@@ -5206,6 +5241,7 @@ CONFIG_RXPERF=m
# CONFIG_S390_MODULES_SANITY_TEST is not set
# CONFIG_SAMPLE_ANDROID_BINDERFS is not set
# CONFIG_SAMPLE_AUXDISPLAY is not set
+# CONFIG_SAMPLE_CGROUP is not set
# CONFIG_SAMPLE_CONFIGFS is not set
# CONFIG_SAMPLE_CONNECTOR is not set
# CONFIG_SAMPLE_FANOTIFY_ERROR is not set
@@ -5379,7 +5415,7 @@ CONFIG_SECONDARY_TRUSTED_KEYRING=y
CONFIG_SECRETMEM=y
CONFIG_SECTION_MISMATCH_WARN_ONLY=y
# CONFIG_SECURITY_APPARMOR is not set
-# CONFIG_SECURITY_DMESG_RESTRICT is not set
+CONFIG_SECURITY_DMESG_RESTRICT=y
CONFIG_SECURITYFS=y
CONFIG_SECURITY_INFINIBAND=y
# CONFIG_SECURITY_LANDLOCK is not set
@@ -5473,6 +5509,7 @@ CONFIG_SENSORS_FSCHMD=m
# CONFIG_SENSORS_FTSTEUTATES is not set
CONFIG_SENSORS_G760A=m
# CONFIG_SENSORS_G762 is not set
+# CONFIG_SENSORS_GIGABYTE_WATERFORCE is not set
CONFIG_SENSORS_GL518SM=m
CONFIG_SENSORS_GL520SM=m
# CONFIG_SENSORS_GPIO_FAN is not set
@@ -5540,6 +5577,7 @@ CONFIG_SENSORS_LTC4215=m
CONFIG_SENSORS_LTC4245=m
# CONFIG_SENSORS_LTC4260 is not set
CONFIG_SENSORS_LTC4261=m
+# CONFIG_SENSORS_LTC4286 is not set
# CONFIG_SENSORS_MAX1111 is not set
# CONFIG_SENSORS_MAX127 is not set
# CONFIG_SENSORS_MAX15301 is not set
@@ -5567,9 +5605,11 @@ CONFIG_SENSORS_MAX8688=m
# CONFIG_SENSORS_MC34VR500 is not set
CONFIG_SENSORS_MCP3021=m
# CONFIG_SENSORS_MLXREG_FAN is not set
+# CONFIG_SENSORS_MP2856 is not set
# CONFIG_SENSORS_MP2888 is not set
# CONFIG_SENSORS_MP2975 is not set
# CONFIG_SENSORS_MP5023 is not set
+# CONFIG_SENSORS_MP5990 is not set
# CONFIG_SENSORS_MPQ7932 is not set
# CONFIG_SENSORS_MR75203 is not set
# CONFIG_SENSORS_NCT6683 is not set
@@ -5750,10 +5790,8 @@ CONFIG_SIGNED_PE_FILE_VERIFICATION=y
CONFIG_SIPHASH_KUNIT_TEST=m
# CONFIG_SKGE is not set
# CONFIG_SKY2 is not set
-# CONFIG_SLAB_DEPRECATED is not set
CONFIG_SLAB_FREELIST_HARDENED=y
CONFIG_SLAB_FREELIST_RANDOM=y
-# CONFIG_SLAB is not set
# CONFIG_SLAB_MERGE_DEFAULT is not set
# CONFIG_SLIMBUS is not set
CONFIG_SLIP_COMPRESSED=y
@@ -6512,6 +6550,7 @@ CONFIG_SQUASHFS_ZSTD=y
# CONFIG_SSB is not set
# CONFIG_SSFDC is not set
# CONFIG_SSIF_IPMI_BMC is not set
+CONFIG_STACKDEPOT_MAX_FRAMES=64
CONFIG_STACK_HASH_ORDER=20
CONFIG_STACKINIT_KUNIT_TEST=m
CONFIG_STACKPROTECTOR_STRONG=y
@@ -6641,7 +6680,7 @@ CONFIG_TCP_CONG_DCTCP=m
# CONFIG_TCP_CONG_HSTCP is not set
CONFIG_TCP_CONG_HTCP=m
# CONFIG_TCP_CONG_HYBLA is not set
-# CONFIG_TCP_CONG_ILLINOIS is not set
+CONFIG_TCP_CONG_ILLINOIS=m
# CONFIG_TCP_CONG_LP is not set
CONFIG_TCP_CONG_NV=m
# CONFIG_TCP_CONG_SCALABLE is not set
@@ -6705,6 +6744,7 @@ CONFIG_TEST_SORT=m
# CONFIG_TEST_UUID is not set
CONFIG_TEST_VMALLOC=m
# CONFIG_TEST_XARRAY is not set
+# CONFIG_THERMAL_DEBUGFS is not set
# CONFIG_THERMAL_DEFAULT_GOV_FAIR_SHARE is not set
CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y
# CONFIG_THERMAL_DEFAULT_GOV_USER_SPACE is not set
@@ -6886,6 +6926,7 @@ CONFIG_TOUCHSCREEN_WACOM_W8001=m
CONFIG_TRACER_SNAPSHOT=y
CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS=y
# CONFIG_TRANSPARENT_HUGEPAGE_MADVISE is not set
+# CONFIG_TRANSPARENT_HUGEPAGE_NEVER is not set
CONFIG_TRANSPARENT_HUGEPAGE=y
CONFIG_TREE_RCU=y
# CONFIG_TRIM_UNUSED_KSYMS is not set
@@ -6916,6 +6957,7 @@ CONFIG_TYPEC_MUX_FSA4480=m
# CONFIG_TYPEC_MUX_NB7VPQ904M is not set
CONFIG_TYPEC_MUX_PI3USB30532=m
# CONFIG_TYPEC_MUX_PTN36502 is not set
+# CONFIG_TYPEC_MUX_WCD939X_USBSS is not set
# CONFIG_TYPEC_NVIDIA_ALTMODE is not set
# CONFIG_TYPEC_QCOM_PMIC is not set
# CONFIG_TYPEC_RT1711H is not set
@@ -7278,12 +7320,14 @@ CONFIG_VDPA_SIM_NET=m
# CONFIG_VDPA_USER is not set
# CONFIG_VEML6030 is not set
# CONFIG_VEML6070 is not set
+# CONFIG_VEML6075 is not set
CONFIG_VETH=m
# CONFIG_VF610_ADC is not set
# CONFIG_VF610_DAC is not set
CONFIG_VFAT_FS=m
# CONFIG_VFIO_AMBA is not set
CONFIG_VFIO_CONTAINER=y
+# CONFIG_VFIO_DEBUGFS is not set
CONFIG_VFIO_DEVICE_CDEV=y
CONFIG_VFIO_GROUP=y
CONFIG_VFIO_IOMMU_TYPE1=m
@@ -7320,6 +7364,7 @@ CONFIG_VHOST_VSOCK=m
# CONFIG_VIDEO_ADV_DEBUG is not set
# CONFIG_VIDEO_AK7375 is not set
# CONFIG_VIDEO_AK881X is not set
+# CONFIG_VIDEO_ALVIUM_CSI2 is not set
# CONFIG_VIDEO_AR0521 is not set
CONFIG_VIDEO_AU0828=m
# CONFIG_VIDEO_AU0828_RC is not set
@@ -7368,6 +7413,8 @@ CONFIG_VIDEO_EM28XX_RC=m
# CONFIG_VIDEO_FB_IVTV_FORCE_PAT is not set
CONFIG_VIDEO_FB_IVTV=m
# CONFIG_VIDEO_FIXED_MINOR_RANGES is not set
+# CONFIG_VIDEO_GC0308 is not set
+# CONFIG_VIDEO_GC2145 is not set
# CONFIG_VIDEO_GO7007 is not set
# CONFIG_VIDEO_GS1662 is not set
CONFIG_VIDEO_HDPVR=m
@@ -7437,6 +7484,7 @@ CONFIG_VIDEO_IVTV=m
# CONFIG_VIDEO_OV5675 is not set
# CONFIG_VIDEO_OV5693 is not set
# CONFIG_VIDEO_OV5695 is not set
+# CONFIG_VIDEO_OV64A40 is not set
# CONFIG_VIDEO_OV6650 is not set
# CONFIG_VIDEO_OV7251 is not set
# CONFIG_VIDEO_OV7640 is not set
@@ -7489,6 +7537,7 @@ CONFIG_VIDEO_SAA7164=m
# CONFIG_VIDEO_TDA9840 is not set
# CONFIG_VIDEO_TEA6415C is not set
# CONFIG_VIDEO_TEA6420 is not set
+# CONFIG_VIDEO_THP7312 is not set
# CONFIG_VIDEO_THS7303 is not set
# CONFIG_VIDEO_THS8200 is not set
# CONFIG_VIDEO_TLV320AIC23B is not set
@@ -7504,6 +7553,7 @@ CONFIG_VIDEO_TUNER=m
# CONFIG_VIDEO_TW5864 is not set
# CONFIG_VIDEO_TW686X is not set
# CONFIG_VIDEO_TW68 is not set
+# CONFIG_VIDEO_TW9900 is not set
# CONFIG_VIDEO_TW9903 is not set
# CONFIG_VIDEO_TW9906 is not set
# CONFIG_VIDEO_TW9910 is not set
@@ -7539,6 +7589,7 @@ CONFIG_VIRTIO_PCI_LEGACY=y
CONFIG_VIRTIO_PCI=y
# CONFIG_VIRTIO_PMEM is not set
CONFIG_VIRTIO_VDPA=m
+# CONFIG_VIRTIO_VFIO_PCI is not set
CONFIG_VIRTIO_VSOCKETS=m
CONFIG_VIRTIO=y
CONFIG_VIRTUALIZATION=y
@@ -7744,7 +7795,7 @@ CONFIG_XFS_POSIX_ACL=y
CONFIG_XFS_QUOTA=y
# CONFIG_XFS_RT is not set
# CONFIG_XFS_SUPPORT_ASCII_CI is not set
-CONFIG_XFS_SUPPORT_V4=y
+# CONFIG_XFS_SUPPORT_V4 is not set
# CONFIG_XFS_WARN is not set
# CONFIG_XGENE_DMA is not set
# CONFIG_XIAOMI_WMI is not set
@@ -7801,6 +7852,7 @@ CONFIG_ZRAM_DEF_COMP_LZORLE=y
CONFIG_ZRAM=m
# CONFIG_ZRAM_MEMORY_TRACKING is not set
# CONFIG_ZRAM_MULTI_COMP is not set
+# CONFIG_ZRAM_TRACK_ENTRY_ACTIME is not set
CONFIG_ZRAM_WRITEBACK=y
CONFIG_ZSMALLOC_CHAIN_SIZE=8
CONFIG_ZSMALLOC_STAT=y
@@ -7813,6 +7865,7 @@ CONFIG_ZSWAP_COMPRESSOR_DEFAULT_LZO=y
# CONFIG_ZSWAP_COMPRESSOR_DEFAULT_ZSTD is not set
# CONFIG_ZSWAP_DEFAULT_ON is not set
# CONFIG_ZSWAP_EXCLUSIVE_LOADS_DEFAULT_ON is not set
+# CONFIG_ZSWAP_SHRINKER_DEFAULT_ON is not set
CONFIG_ZSWAP=y
# CONFIG_ZSWAP_ZPOOL_DEFAULT_Z3FOLD is not set
CONFIG_ZSWAP_ZPOOL_DEFAULT_ZBUD=y
@@ -7822,7 +7875,7 @@ CONFIG_ZENIFY=y
CONFIG_NTSYNC=y
CONFIG_USER_NS_UNPRIVILEGED=y
CONFIG_TCP_CONG_BBR2=m
-# CONFIG_SCHED_PDS is not set
+CONFIG_SCHED_BORE=y
CONFIG_HID_IPTS=m
CONFIG_HID_ITHC=m
CONFIG_SURFACE_BOOK1_DGPU_SWITCH=m
@@ -7831,8 +7884,6 @@ CONFIG_LEDS_TPS68470=m
CONFIG_SENSORS_SURFACE_FAN=m
CONFIG_SENSORS_SURFACE_TEMP=m
CONFIG_DRM_AMD_COLOR_STEAMDECK=y
-CONFIG_BMI323_I2C=m
-CONFIG_BMI323_SPI=m
CONFIG_DRM_APPLETBDRM=m
CONFIG_HID_APPLETB_BL=m
CONFIG_HID_APPLETB_KBD=m
@@ -7892,4 +7943,3 @@ CONFIG_SND_SOC_SOF_AMD_ACP63=m
# CONFIG_SND_AMD_ASOC_REMBRANDT is not set
# CONFIG_SND_SOC_AMD_LEGACY_MACH is not set
CONFIG_SND_SOC_TOPOLOGY=y
-CONFIG_SCHED_BORE=y
diff --git a/SOURCES/kernel-x86_64-rt-debug-rhel.config b/SOURCES/kernel-x86_64-rt-debug-rhel.config
index 6e02ee5..bfc76ea 100644
--- a/SOURCES/kernel-x86_64-rt-debug-rhel.config
+++ b/SOURCES/kernel-x86_64-rt-debug-rhel.config
@@ -102,6 +102,7 @@ CONFIG_ACPI=y
# CONFIG_AD5791 is not set
# CONFIG_AD5933 is not set
# CONFIG_AD7091R5 is not set
+# CONFIG_AD7091R8 is not set
# CONFIG_AD7124 is not set
# CONFIG_AD7150 is not set
# CONFIG_AD7192 is not set
@@ -230,6 +231,7 @@ CONFIG_AMD_PMF=m
CONFIG_AMD_PTDMA=m
CONFIG_AMD_SFH_HID=m
# CONFIG_AMDTEE is not set
+# CONFIG_AMD_WBRF is not set
# CONFIG_AMD_XGBE_DCB is not set
CONFIG_AMD_XGBE=m
# CONFIG_AMIGA_PARTITION is not set
@@ -238,6 +240,7 @@ CONFIG_AMPERE_ERRATUM_AC03_CPU_38=y
# CONFIG_AMT is not set
# CONFIG_ANDROID_BINDER_IPC is not set
# CONFIG_ANON_VMA_NAME is not set
+# CONFIG_AOSONG_AGS02MA is not set
# CONFIG_APDS9300 is not set
CONFIG_APDS9802ALS=m
# CONFIG_APDS9960 is not set
@@ -395,6 +398,7 @@ CONFIG_BACKLIGHT_LED=m
# CONFIG_BACKLIGHT_LM3639 is not set
CONFIG_BACKLIGHT_LP855X=m
# CONFIG_BACKLIGHT_LV5207LP is not set
+# CONFIG_BACKLIGHT_MP3309C is not set
# CONFIG_BACKLIGHT_PWM is not set
# CONFIG_BACKLIGHT_QCOM_WLED is not set
# CONFIG_BACKLIGHT_SAHARA is not set
@@ -488,6 +492,7 @@ CONFIG_BLK_DEV_SR=m
# CONFIG_BLK_DEV_THROTTLING_LOW is not set
CONFIG_BLK_DEV_THROTTLING=y
# CONFIG_BLK_DEV_UBLK is not set
+CONFIG_BLK_DEV_WRITE_MOUNTED=y
CONFIG_BLK_DEV=y
CONFIG_BLK_DEV_ZONED=y
# CONFIG_BLK_INLINE_ENCRYPTION is not set
@@ -507,6 +512,8 @@ CONFIG_BLOCK=y
# CONFIG_BMI088_ACCEL is not set
# CONFIG_BMI160_I2C is not set
# CONFIG_BMI160_SPI is not set
+CONFIG_BMI323_I2C=m
+CONFIG_BMI323_SPI=m
# CONFIG_BMP280 is not set
# CONFIG_BNA is not set
CONFIG_BNX2=m
@@ -522,7 +529,6 @@ CONFIG_BONDING=m
# CONFIG_BOOT_CONFIG_FORCE is not set
CONFIG_BOOT_CONFIG=y
CONFIG_BOOTPARAM_HARDLOCKUP_PANIC=y
-CONFIG_BOOTPARAM_HOTPLUG_CPU0=y
# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
CONFIG_BOOT_PRINTK_DELAY=y
@@ -961,7 +967,6 @@ CONFIG_CRYPTO_CAST6_AVX_X86_64=m
CONFIG_CRYPTO_CAST6=m
CONFIG_CRYPTO_CBC=y
CONFIG_CRYPTO_CCM=y
-CONFIG_CRYPTO_CFB=y
CONFIG_CRYPTO_CHACHA20=m
CONFIG_CRYPTO_CHACHA20POLY1305=m
CONFIG_CRYPTO_CHACHA20_X86_64=y
@@ -996,11 +1001,14 @@ CONFIG_CRYPTO_DEV_CHELSIO=m
CONFIG_CRYPTO_DEV_HISI_SEC=m
# CONFIG_CRYPTO_DEV_HISI_TRNG is not set
# CONFIG_CRYPTO_DEV_HISTB_TRNG is not set
+CONFIG_CRYPTO_DEV_IAA_CRYPTO=m
+# CONFIG_CRYPTO_DEV_IAA_CRYPTO_STATS is not set
CONFIG_CRYPTO_DEV_NITROX_CNN55XX=m
# CONFIG_CRYPTO_DEV_OCTEONTX_CPT is not set
CONFIG_CRYPTO_DEV_PADLOCK_AES=m
CONFIG_CRYPTO_DEV_PADLOCK=m
CONFIG_CRYPTO_DEV_PADLOCK_SHA=m
+CONFIG_CRYPTO_DEV_QAT_420XX=m
CONFIG_CRYPTO_DEV_QAT_4XXX=m
CONFIG_CRYPTO_DEV_QAT_C3XXX=m
CONFIG_CRYPTO_DEV_QAT_C3XXXVF=m
@@ -1060,7 +1068,6 @@ CONFIG_CRYPTO_MICHAEL_MIC=m
CONFIG_CRYPTO_NHPOLY1305_AVX2=m
CONFIG_CRYPTO_NHPOLY1305_SSE2=m
CONFIG_CRYPTO_NULL=y
-CONFIG_CRYPTO_OFB=y
CONFIG_CRYPTO_PCBC=m
CONFIG_CRYPTO_PCRYPT=m
CONFIG_CRYPTO_POLY1305=m
@@ -1159,7 +1166,6 @@ CONFIG_DEBUG_FS_ALLOW_ALL=y
# CONFIG_DEBUG_FS_DISALLOW_MOUNT is not set
CONFIG_DEBUG_FS=y
# CONFIG_DEBUG_GPIO is not set
-# CONFIG_DEBUG_HOTPLUG_CPU0 is not set
CONFIG_DEBUG_INFO_BTF=y
# CONFIG_DEBUG_INFO_COMPRESSED is not set
CONFIG_DEBUG_INFO_COMPRESSED_NONE=y
@@ -1226,7 +1232,7 @@ CONFIG_DEBUG_STACK_USAGE=y
# CONFIG_DEBUG_VM_MAPLE_TREE is not set
# CONFIG_DEBUG_VM_PGFLAGS is not set
CONFIG_DEBUG_VM_PGTABLE=y
-# CONFIG_DEBUG_VM_RB is not set # revisit this if performance isn't horrible
+# CONFIG_DEBUG_VM_RB is not set
# CONFIG_DEBUG_VM_SHOOT_LAZIES is not set
# CONFIG_DEBUG_VM_VMACACHE is not set
CONFIG_DEBUG_VM=y
@@ -1354,6 +1360,7 @@ CONFIG_DP83867_PHY=m
# CONFIG_DP83869_PHY is not set
CONFIG_DP83TC811_PHY=m
# CONFIG_DP83TD510_PHY is not set
+# CONFIG_DP83TG720_PHY is not set
# CONFIG_DPM_WATCHDOG is not set
# CONFIG_DPOT_DAC is not set
# CONFIG_DPS310 is not set
@@ -1414,6 +1421,7 @@ CONFIG_DRM_I915_COMPRESS_ERROR=y
# CONFIG_DRM_I915_DEBUG_MMIO is not set
# CONFIG_DRM_I915_DEBUG_RUNTIME_PM is not set
# CONFIG_DRM_I915_DEBUG_VBLANK_EVADE is not set
+# CONFIG_DRM_I915_DEBUG_WAKEREF is not set
CONFIG_DRM_I915_FENCE_TIMEOUT=10000
CONFIG_DRM_I915_FORCE_PROBE=""
# CONFIG_DRM_I915_GVT_KVMGT is not set
@@ -1457,6 +1465,7 @@ CONFIG_DRM_LOAD_EDID_FIRMWARE=y
CONFIG_DRM_MGAG200=m
# CONFIG_DRM_MXSFB is not set
CONFIG_DRM_NOUVEAU_BACKLIGHT=y
+# CONFIG_DRM_NOUVEAU_GSP_DEFAULT is not set
CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_NWL_MIPI_DSI is not set
# CONFIG_DRM_NXP_PTN3460 is not set
@@ -1477,6 +1486,7 @@ CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_PANEL_HIMAX_HX8394 is not set
# CONFIG_DRM_PANEL_ILITEK_IL9322 is not set
# CONFIG_DRM_PANEL_ILITEK_ILI9341 is not set
+# CONFIG_DRM_PANEL_ILITEK_ILI9805 is not set
# CONFIG_DRM_PANEL_ILITEK_ILI9881C is not set
# CONFIG_DRM_PANEL_ILITEK_ILI9882T is not set
# CONFIG_DRM_PANEL_INNOLUX_EJ030NA is not set
@@ -1537,6 +1547,7 @@ CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_PANEL_SONY_TD4353_JDI is not set
# CONFIG_DRM_PANEL_SONY_TULIP_TRULY_NT35521 is not set
# CONFIG_DRM_PANEL_STARTEK_KD070FHFID015 is not set
+# CONFIG_DRM_PANEL_SYNAPTICS_R63353 is not set
# CONFIG_DRM_PANEL_TDO_TL070WSH30 is not set
# CONFIG_DRM_PANEL_TPO_TD028TTEC1 is not set
# CONFIG_DRM_PANEL_TPO_TD043MTEA1 is not set
@@ -1551,6 +1562,7 @@ CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_PARADE_PS8622 is not set
# CONFIG_DRM_PARADE_PS8640 is not set
# CONFIG_DRM_PL111 is not set
+# CONFIG_DRM_POWERVR is not set
CONFIG_DRM_QXL=m
CONFIG_DRM_RADEON=m
CONFIG_DRM_RADEON_USERPTR=y
@@ -1589,6 +1601,7 @@ CONFIG_DRM_VKMS=m
CONFIG_DRM_VMWGFX_FBCON=y
CONFIG_DRM_VMWGFX=m
# CONFIG_DRM_VMWGFX_MKSSTATS is not set
+# CONFIG_DRM_XE is not set
# CONFIG_DRM_XEN_FRONTEND is not set
CONFIG_DRM=y
# CONFIG_DS1682 is not set
@@ -1723,6 +1736,7 @@ CONFIG_DVB_USB_VP7045=m
# CONFIG_DVB_USB_ZD1301 is not set
# CONFIG_DVB_ZD1301_DEMOD is not set
# CONFIG_DW_AXI_DMAC is not set
+# CONFIG_DWC_PCIE_PMU is not set
CONFIG_DW_DMAC=m
CONFIG_DW_DMAC_PCI=y
# CONFIG_DW_EDMA is not set
@@ -1818,6 +1832,7 @@ CONFIG_EPOLL=y
# CONFIG_EQUALIZER is not set
# CONFIG_EROFS_FS_DEBUG is not set
CONFIG_EROFS_FS=m
+# CONFIG_EROFS_FS_ONDEMAND is not set
CONFIG_EROFS_FS_POSIX_ACL=y
CONFIG_EROFS_FS_SECURITY=y
CONFIG_EROFS_FS_XATTR=y
@@ -1884,7 +1899,6 @@ CONFIG_FAULT_INJECTION=y
# CONFIG_FB_3DFX is not set
# CONFIG_FB_ARC is not set
# CONFIG_FB_ARK is not set
-# CONFIG_FB_ARMCLCD is not set
# CONFIG_FB_ASILIANT is not set
# CONFIG_FB_ATY128 is not set
# CONFIG_FB_ATY is not set
@@ -1904,7 +1918,6 @@ CONFIG_FB_EFI=y
# CONFIG_FB_IMSTT is not set
# CONFIG_FB_IMX is not set
# CONFIG_FB_KYRO is not set
-# CONFIG_FB_LE80578 is not set
# CONFIG_FB_MATROX_G is not set
# CONFIG_FB_MATROX_I2C is not set
# CONFIG_FB_MATROX is not set
@@ -1973,11 +1986,12 @@ CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
CONFIG_FRAMEBUFFER_CONSOLE=y
CONFIG_FRAME_POINTER=y
+# CONFIG_FRAMER is not set
CONFIG_FRAME_WARN=2048
CONFIG_FRONTSWAP=y
# CONFIG_FSCACHE_DEBUG is not set
-CONFIG_FSCACHE=m
CONFIG_FSCACHE_STATS=y
+CONFIG_FSCACHE=y
CONFIG_FS_DAX=y
# CONFIG_FS_ENCRYPTION is not set
# CONFIG_FSI is not set
@@ -2162,6 +2176,7 @@ CONFIG_HASHTABLE_KUNIT_TEST=m
# CONFIG_HD44780 is not set
# CONFIG_HDC100X is not set
# CONFIG_HDC2010 is not set
+# CONFIG_HDC3020 is not set
CONFIG_HDLC_CISCO=m
CONFIG_HDLC_FR=m
CONFIG_HDLC=m
@@ -2235,6 +2250,7 @@ CONFIG_HID_LOGITECH=m
CONFIG_HID_MAGICMOUSE=y
# CONFIG_HID_MALTRON is not set
# CONFIG_HID_MAYFLASH is not set
+# CONFIG_HID_MCP2200 is not set
# CONFIG_HID_MCP2221 is not set
# CONFIG_HID_MEGAWORLD_FF is not set
CONFIG_HID_MICROSOFT=m
@@ -2354,6 +2370,7 @@ CONFIG_HP_WMI=m
CONFIG_HSA_AMD_P2P=y
CONFIG_HSA_AMD_SVM=y
CONFIG_HSA_AMD=y
+# CONFIG_HSC030PA is not set
# CONFIG_HSI is not set
CONFIG_HSR=m
# CONFIG_HT16K33 is not set
@@ -2496,6 +2513,7 @@ CONFIG_IAVF=m
# CONFIG_IBM_ASM is not set
CONFIG_IBMASR=m
# CONFIG_IBM_RTL is not set
+CONFIG_ICE_HWMON=y
CONFIG_ICE_HWTS=y
CONFIG_ICE=m
CONFIG_ICE_SWITCHDEV=y
@@ -2606,7 +2624,7 @@ CONFIG_INFINIBAND_BNXT_RE=m
CONFIG_INFINIBAND_CXGB4=m
CONFIG_INFINIBAND_EFA=m
# CONFIG_INFINIBAND_ERDMA is not set
-CONFIG_INFINIBAND_HFI1=m
+# CONFIG_INFINIBAND_HFI1 is not set
# CONFIG_INFINIBAND_HNS is not set
CONFIG_INFINIBAND_IPOIB_CM=y
# CONFIG_INFINIBAND_IPOIB_DEBUG_DATA is not set
@@ -2622,15 +2640,15 @@ CONFIG_INFINIBAND_ON_DEMAND_PAGING=y
CONFIG_INFINIBAND_OPA_VNIC=m
CONFIG_INFINIBAND_QEDR=m
# CONFIG_INFINIBAND_QIB is not set
-CONFIG_INFINIBAND_RDMAVT=m
+# CONFIG_INFINIBAND_RDMAVT is not set
# CONFIG_INFINIBAND_RTRS_CLIENT is not set
# CONFIG_INFINIBAND_RTRS_SERVER is not set
CONFIG_INFINIBAND_SRP=m
CONFIG_INFINIBAND_SRPT=m
CONFIG_INFINIBAND_USER_ACCESS=m
CONFIG_INFINIBAND_USER_MAD=m
-CONFIG_INFINIBAND_USNIC=m
-CONFIG_INFINIBAND_VMWARE_PVRDMA=m
+# CONFIG_INFINIBAND_USNIC is not set
+# CONFIG_INFINIBAND_VMWARE_PVRDMA is not set
# CONFIG_INFTL is not set
# CONFIG_INIT_ON_ALLOC_DEFAULT_ON is not set
# CONFIG_INIT_ON_FREE_DEFAULT_ON is not set
@@ -2731,12 +2749,13 @@ CONFIG_INTEL_ISH_HID=m
CONFIG_INTEL_ISHTP_ECLITE=m
# CONFIG_INTEL_LDMA is not set
CONFIG_INTEL_MEI_GSC=m
-# CONFIG_INTEL_MEI_GSC_PROXY is not set
+CONFIG_INTEL_MEI_GSC_PROXY=m
# CONFIG_INTEL_MEI_HDCP is not set
CONFIG_INTEL_MEI=m
CONFIG_INTEL_MEI_ME=m
# CONFIG_INTEL_MEI_PXP is not set
# CONFIG_INTEL_MEI_TXE is not set
+# CONFIG_INTEL_MEI_VSC_HW is not set
CONFIG_INTEL_MEI_WDT=m
# CONFIG_INTEL_MENLOW is not set
CONFIG_INTEL_OAKTRAIL=m
@@ -2996,6 +3015,7 @@ CONFIG_ISL29003=m
CONFIG_ISL29020=m
# CONFIG_ISL29125 is not set
# CONFIG_ISL29501 is not set
+# CONFIG_ISL76682 is not set
CONFIG_ISO9660_FS=m
CONFIG_IS_SIGNED_TYPE_KUNIT_TEST=m
# CONFIG_IT8712F_WDT is not set
@@ -3036,6 +3056,7 @@ CONFIG_KALLSYMS_BASE_RELATIVE=y
# CONFIG_KALLSYMS_SELFTEST is not set
CONFIG_KALLSYMS=y
# CONFIG_KARMA_PARTITION is not set
+# CONFIG_KASAN_EXTRA_INFO is not set
CONFIG_KASAN_GENERIC=y
# CONFIG_KASAN_INLINE is not set
CONFIG_KASAN_KUNIT_TEST=m
@@ -3132,12 +3153,14 @@ CONFIG_KVM_AMD_SEV=y
# CONFIG_KVM_BOOK3S_HV_P8_TIMING is not set
# CONFIG_KVM_BOOK3S_HV_P9_TIMING is not set
CONFIG_KVM_GUEST=y
+CONFIG_KVM_HYPERV=y
CONFIG_KVM_INTEL=m
CONFIG_KVM=m
CONFIG_KVM_MAX_NR_VCPUS=4096
CONFIG_KVM_MMU_AUDIT=y
CONFIG_KVM_PROVE_MMU=y
CONFIG_KVM_SMM=y
+CONFIG_KVM_SW_PROTECTED_VM=y
# CONFIG_KVM_WERROR is not set
# CONFIG_KVM_XEN is not set
# CONFIG_KXCJK1013 is not set
@@ -3314,6 +3337,7 @@ CONFIG_LSM_MMAP_MIN_ADDR=65535
# CONFIG_LTO_CLANG_FULL is not set
# CONFIG_LTO_CLANG_THIN is not set
CONFIG_LTO_NONE=y
+# CONFIG_LTR390 is not set
# CONFIG_LTR501 is not set
# CONFIG_LTRF216A is not set
# CONFIG_LV0104CS is not set
@@ -3354,7 +3378,7 @@ CONFIG_MANA_INFINIBAND=m
CONFIG_MANTIS_CORE=m
# CONFIG_MARCH_Z16 is not set
CONFIG_MARVELL_10G_PHY=m
-# CONFIG_MARVELL_88Q2XXX_PHY is not set
+CONFIG_MARVELL_88Q2XXX_PHY=m
# CONFIG_MARVELL_88X2222_PHY is not set
CONFIG_MARVELL_PHY=m
# CONFIG_MATOM is not set
@@ -3371,6 +3395,7 @@ CONFIG_MARVELL_PHY=m
# CONFIG_MAX31827 is not set
# CONFIG_MAX31856 is not set
# CONFIG_MAX31865 is not set
+# CONFIG_MAX34408 is not set
# CONFIG_MAX44000 is not set
# CONFIG_MAX44009 is not set
# CONFIG_MAX517 is not set
@@ -3399,7 +3424,9 @@ CONFIG_MAXSMP=y
# CONFIG_MCP4531 is not set
# CONFIG_MCP4725 is not set
# CONFIG_MCP4728 is not set
+# CONFIG_MCP4821 is not set
# CONFIG_MCP4922 is not set
+# CONFIG_MCP9600 is not set
# CONFIG_MCTP is not set
CONFIG_MD_AUTODETECT=y
CONFIG_MD_BITMAP_FILE=y
@@ -3632,10 +3659,11 @@ CONFIG_MISC_RTSX_USB=m
CONFIG_MITIGATION_RFDS=y
# CONFIG_MK8 is not set
# CONFIG_MLX4_CORE_GEN2 is not set
+# CONFIG_MLX4_CORE is not set
CONFIG_MLX4_DEBUG=y
CONFIG_MLX4_EN_DCB=y
-CONFIG_MLX4_EN=m
-CONFIG_MLX4_INFINIBAND=m
+# CONFIG_MLX4_EN is not set
+# CONFIG_MLX4_INFINIBAND is not set
CONFIG_MLX5_ACCEL=y
CONFIG_MLX5_CLS_ACT=y
CONFIG_MLX5_CORE_EN_DCB=y
@@ -3666,6 +3694,7 @@ CONFIG_MLX5_VDPA_NET=m
CONFIG_MLX5_VFIO_PCI=m
# CONFIG_MLX90614 is not set
# CONFIG_MLX90632 is not set
+# CONFIG_MLX90635 is not set
# CONFIG_MLXBF_BOOTCTL is not set
# CONFIG_MLXBF_GIGE is not set
# CONFIG_MLXBF_PMC is not set
@@ -3832,7 +3861,7 @@ CONFIG_MT76x2U=m
CONFIG_MT7921E=m
# CONFIG_MT7921S is not set
# CONFIG_MT7921U is not set
-# CONFIG_MT7925E is not set
+CONFIG_MT7925E=m
# CONFIG_MT7925U is not set
# CONFIG_MT7996E is not set
# CONFIG_MTD_ABSENT is not set
@@ -3884,6 +3913,7 @@ CONFIG_MTD_OF_PARTS=m
CONFIG_MTD_UBI_BEB_LIMIT=20
# CONFIG_MTD_UBI_BLOCK is not set
# CONFIG_MTD_UBI_FASTMAP is not set
+# CONFIG_MTD_UBI_FAULT_INJECTION is not set
# CONFIG_MTD_UBI_GLUEBI is not set
CONFIG_MTD_UBI=m
CONFIG_MTD_UBI_WL_THRESHOLD=4096
@@ -3909,7 +3939,6 @@ CONFIG_NAMESPACES=y
CONFIG_NATIONAL_PHY=m
# CONFIG_NAU7802 is not set
# CONFIG_NCN26000_PHY is not set
-CONFIG_ND_BLK=m
CONFIG_ND_BTT=m
# CONFIG_NDC_DIS_DYNAMIC_CACHING is not set
CONFIG_ND_CLAIM=y
@@ -3963,7 +3992,6 @@ CONFIG_NET_DROP_MONITOR=y
# CONFIG_NET_EMATCH is not set
# CONFIG_NET_EMATCH_META is not set
# CONFIG_NET_EMATCH_NBYTE is not set
-# CONFIG_NET_EMATCH_STACK is not set
# CONFIG_NET_EMATCH_TEXT is not set
# CONFIG_NET_EMATCH_U32 is not set
CONFIG_NET_FAILOVER=m
@@ -4147,6 +4175,7 @@ CONFIG_NET_VENDOR_HUAWEI=y
CONFIG_NET_VENDOR_INTEL=y
# CONFIG_NET_VENDOR_LITEX is not set
CONFIG_NET_VENDOR_MARVELL=y
+CONFIG_NET_VENDOR_MELLANOX=y
# CONFIG_NET_VENDOR_MICREL is not set
# CONFIG_NET_VENDOR_MICROCHIP is not set
# CONFIG_NET_VENDOR_MICROSEMI is not set
@@ -4238,6 +4267,7 @@ CONFIG_NF_REJECT_IPV6=m
# CONFIG_NFSD_BLOCKLAYOUT is not set
# CONFIG_NFSD_FLEXFILELAYOUT is not set
CONFIG_NFS_DISABLE_UDP_SUPPORT=y
+# CONFIG_NFSD_LEGACY_CLIENT_TRACKING is not set
CONFIG_NFSD=m
CONFIG_NFSD_PNFS=y
CONFIG_NFSD_SCSILAYOUT=y
@@ -4384,6 +4414,7 @@ CONFIG_NOUVEAU_DEBUG_PUSH=y
# CONFIG_NOUVEAU_LEGACY_CTX_SUPPORT is not set
CONFIG_NOZOMI=m
CONFIG_NR_CPUS=8192
+# CONFIG_NSM is not set
CONFIG_NTB_AMD=m
# CONFIG_NTB_EPF is not set
# CONFIG_NTB_IDT is not set
@@ -4680,6 +4711,7 @@ CONFIG_PINCTRL_EMMITSBURG=m
# CONFIG_PINCTRL_EQUILIBRIUM is not set
CONFIG_PINCTRL_GEMINILAKE=m
CONFIG_PINCTRL_ICELAKE=m
+CONFIG_PINCTRL_INTEL_PLATFORM=m
# CONFIG_PINCTRL_IPQ6018 is not set
# CONFIG_PINCTRL_IPQ8074 is not set
CONFIG_PINCTRL_JASPERLAKE=m
@@ -4690,6 +4722,7 @@ CONFIG_PINCTRL_LEWISBURG=m
# CONFIG_PINCTRL_MCP23S08 is not set
# CONFIG_PINCTRL_MDM9615 is not set
CONFIG_PINCTRL_METEORLAKE=m
+CONFIG_PINCTRL_METEORPOINT=m
# CONFIG_PINCTRL_MICROCHIP_SGPIO is not set
# CONFIG_PINCTRL_MLXBF3 is not set
# CONFIG_PINCTRL_MSM8226 is not set
@@ -4987,8 +5020,8 @@ CONFIG_RD_GZIP=y
CONFIG_RD_LZ4=y
CONFIG_RD_LZMA=y
CONFIG_RD_LZO=y
-CONFIG_RDMA_RXE=m
-CONFIG_RDMA_SIW=m
+# CONFIG_RDMA_RXE is not set
+# CONFIG_RDMA_SIW is not set
# CONFIG_RDS is not set
CONFIG_RD_XZ=y
CONFIG_RD_ZSTD=y
@@ -5029,6 +5062,7 @@ CONFIG_REGULATOR_FIXED_VOLTAGE=m
# CONFIG_REGULATOR_MAX8973 is not set
# CONFIG_REGULATOR_MCP16502 is not set
# CONFIG_REGULATOR_MT6311 is not set
+# CONFIG_REGULATOR_NETLINK_EVENTS is not set
# CONFIG_REGULATOR_PF8X00 is not set
# CONFIG_REGULATOR_PFUZE100 is not set
# CONFIG_REGULATOR_PV88060 is not set
@@ -5178,6 +5212,7 @@ CONFIG_RTC_DRV_M41T80_WDT=y
CONFIG_RTC_DRV_M48T35=m
CONFIG_RTC_DRV_M48T59=m
# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_MAX31335 is not set
CONFIG_RTC_DRV_MAX6900=m
# CONFIG_RTC_DRV_MAX6902 is not set
# CONFIG_RTC_DRV_MAX6916 is not set
@@ -5264,7 +5299,7 @@ CONFIG_RTW88=m
# CONFIG_RTW89_8851BE is not set
CONFIG_RTW89_8852AE=m
CONFIG_RTW89_8852BE=m
-# CONFIG_RTW89_8852CE is not set
+CONFIG_RTW89_8852CE=m
CONFIG_RTW89_DEBUGFS=y
CONFIG_RTW89_DEBUGMSG=y
CONFIG_RTW89=m
@@ -5280,6 +5315,7 @@ CONFIG_RXPERF=m
# CONFIG_S390_MODULES_SANITY_TEST is not set
# CONFIG_SAMPLE_ANDROID_BINDERFS is not set
# CONFIG_SAMPLE_AUXDISPLAY is not set
+# CONFIG_SAMPLE_CGROUP is not set
# CONFIG_SAMPLE_CONFIGFS is not set
# CONFIG_SAMPLE_CONNECTOR is not set
# CONFIG_SAMPLE_FANOTIFY_ERROR is not set
@@ -5453,7 +5489,7 @@ CONFIG_SECONDARY_TRUSTED_KEYRING=y
CONFIG_SECRETMEM=y
CONFIG_SECTION_MISMATCH_WARN_ONLY=y
# CONFIG_SECURITY_APPARMOR is not set
-# CONFIG_SECURITY_DMESG_RESTRICT is not set
+CONFIG_SECURITY_DMESG_RESTRICT=y
CONFIG_SECURITYFS=y
CONFIG_SECURITY_INFINIBAND=y
# CONFIG_SECURITY_LANDLOCK is not set
@@ -5547,6 +5583,7 @@ CONFIG_SENSORS_FSCHMD=m
# CONFIG_SENSORS_FTSTEUTATES is not set
CONFIG_SENSORS_G760A=m
# CONFIG_SENSORS_G762 is not set
+# CONFIG_SENSORS_GIGABYTE_WATERFORCE is not set
CONFIG_SENSORS_GL518SM=m
CONFIG_SENSORS_GL520SM=m
# CONFIG_SENSORS_GPIO_FAN is not set
@@ -5614,6 +5651,7 @@ CONFIG_SENSORS_LTC4215=m
CONFIG_SENSORS_LTC4245=m
# CONFIG_SENSORS_LTC4260 is not set
CONFIG_SENSORS_LTC4261=m
+# CONFIG_SENSORS_LTC4286 is not set
# CONFIG_SENSORS_MAX1111 is not set
# CONFIG_SENSORS_MAX127 is not set
# CONFIG_SENSORS_MAX15301 is not set
@@ -5641,9 +5679,11 @@ CONFIG_SENSORS_MAX8688=m
# CONFIG_SENSORS_MC34VR500 is not set
CONFIG_SENSORS_MCP3021=m
# CONFIG_SENSORS_MLXREG_FAN is not set
+# CONFIG_SENSORS_MP2856 is not set
# CONFIG_SENSORS_MP2888 is not set
# CONFIG_SENSORS_MP2975 is not set
# CONFIG_SENSORS_MP5023 is not set
+# CONFIG_SENSORS_MP5990 is not set
# CONFIG_SENSORS_MPQ7932 is not set
# CONFIG_SENSORS_MR75203 is not set
# CONFIG_SENSORS_NCT6683 is not set
@@ -5824,10 +5864,8 @@ CONFIG_SIGNED_PE_FILE_VERIFICATION=y
CONFIG_SIPHASH_KUNIT_TEST=m
# CONFIG_SKGE is not set
# CONFIG_SKY2 is not set
-# CONFIG_SLAB_DEPRECATED is not set
CONFIG_SLAB_FREELIST_HARDENED=y
CONFIG_SLAB_FREELIST_RANDOM=y
-# CONFIG_SLAB is not set
# CONFIG_SLAB_MERGE_DEFAULT is not set
# CONFIG_SLIMBUS is not set
CONFIG_SLIP_COMPRESSED=y
@@ -6589,6 +6627,7 @@ CONFIG_SQUASHFS_ZSTD=y
# CONFIG_SSB is not set
# CONFIG_SSFDC is not set
# CONFIG_SSIF_IPMI_BMC is not set
+CONFIG_STACKDEPOT_MAX_FRAMES=64
CONFIG_STACK_HASH_ORDER=20
CONFIG_STACKINIT_KUNIT_TEST=m
CONFIG_STACKPROTECTOR_STRONG=y
@@ -6718,7 +6757,7 @@ CONFIG_TCP_CONG_DCTCP=m
# CONFIG_TCP_CONG_HSTCP is not set
CONFIG_TCP_CONG_HTCP=m
# CONFIG_TCP_CONG_HYBLA is not set
-# CONFIG_TCP_CONG_ILLINOIS is not set
+CONFIG_TCP_CONG_ILLINOIS=m
# CONFIG_TCP_CONG_LP is not set
CONFIG_TCP_CONG_NV=m
# CONFIG_TCP_CONG_SCALABLE is not set
@@ -6782,6 +6821,7 @@ CONFIG_TEST_STRING_HELPERS=m
# CONFIG_TEST_UUID is not set
CONFIG_TEST_VMALLOC=m
# CONFIG_TEST_XARRAY is not set
+# CONFIG_THERMAL_DEBUGFS is not set
# CONFIG_THERMAL_DEFAULT_GOV_FAIR_SHARE is not set
CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y
# CONFIG_THERMAL_DEFAULT_GOV_USER_SPACE is not set
@@ -6963,6 +7003,7 @@ CONFIG_TOUCHSCREEN_WACOM_W8001=m
CONFIG_TRACER_SNAPSHOT=y
CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS=y
# CONFIG_TRANSPARENT_HUGEPAGE_MADVISE is not set
+# CONFIG_TRANSPARENT_HUGEPAGE_NEVER is not set
CONFIG_TRANSPARENT_HUGEPAGE=y
CONFIG_TREE_RCU=y
# CONFIG_TRIM_UNUSED_KSYMS is not set
@@ -6993,6 +7034,7 @@ CONFIG_TYPEC_MUX_FSA4480=m
# CONFIG_TYPEC_MUX_NB7VPQ904M is not set
CONFIG_TYPEC_MUX_PI3USB30532=m
# CONFIG_TYPEC_MUX_PTN36502 is not set
+# CONFIG_TYPEC_MUX_WCD939X_USBSS is not set
# CONFIG_TYPEC_NVIDIA_ALTMODE is not set
# CONFIG_TYPEC_QCOM_PMIC is not set
# CONFIG_TYPEC_RT1711H is not set
@@ -7356,12 +7398,14 @@ CONFIG_VDPA_SIM_NET=m
# CONFIG_VDPA_USER is not set
# CONFIG_VEML6030 is not set
# CONFIG_VEML6070 is not set
+# CONFIG_VEML6075 is not set
CONFIG_VETH=m
# CONFIG_VF610_ADC is not set
# CONFIG_VF610_DAC is not set
CONFIG_VFAT_FS=m
# CONFIG_VFIO_AMBA is not set
CONFIG_VFIO_CONTAINER=y
+# CONFIG_VFIO_DEBUGFS is not set
CONFIG_VFIO_DEVICE_CDEV=y
CONFIG_VFIO_GROUP=y
CONFIG_VFIO_IOMMU_TYPE1=m
@@ -7398,6 +7442,7 @@ CONFIG_VHOST_VSOCK=m
# CONFIG_VIDEO_ADV_DEBUG is not set
# CONFIG_VIDEO_AK7375 is not set
# CONFIG_VIDEO_AK881X is not set
+# CONFIG_VIDEO_ALVIUM_CSI2 is not set
# CONFIG_VIDEO_AR0521 is not set
CONFIG_VIDEO_AU0828=m
# CONFIG_VIDEO_AU0828_RC is not set
@@ -7446,6 +7491,8 @@ CONFIG_VIDEO_EM28XX_RC=m
# CONFIG_VIDEO_FB_IVTV_FORCE_PAT is not set
CONFIG_VIDEO_FB_IVTV=m
# CONFIG_VIDEO_FIXED_MINOR_RANGES is not set
+# CONFIG_VIDEO_GC0308 is not set
+# CONFIG_VIDEO_GC2145 is not set
# CONFIG_VIDEO_GO7007 is not set
# CONFIG_VIDEO_GS1662 is not set
CONFIG_VIDEO_HDPVR=m
@@ -7515,6 +7562,7 @@ CONFIG_VIDEO_IVTV=m
# CONFIG_VIDEO_OV5675 is not set
# CONFIG_VIDEO_OV5693 is not set
# CONFIG_VIDEO_OV5695 is not set
+# CONFIG_VIDEO_OV64A40 is not set
# CONFIG_VIDEO_OV6650 is not set
# CONFIG_VIDEO_OV7251 is not set
# CONFIG_VIDEO_OV7640 is not set
@@ -7567,6 +7615,7 @@ CONFIG_VIDEO_SAA7164=m
# CONFIG_VIDEO_TDA9840 is not set
# CONFIG_VIDEO_TEA6415C is not set
# CONFIG_VIDEO_TEA6420 is not set
+# CONFIG_VIDEO_THP7312 is not set
# CONFIG_VIDEO_THS7303 is not set
# CONFIG_VIDEO_THS8200 is not set
# CONFIG_VIDEO_TLV320AIC23B is not set
@@ -7582,6 +7631,7 @@ CONFIG_VIDEO_TUNER=m
# CONFIG_VIDEO_TW5864 is not set
# CONFIG_VIDEO_TW686X is not set
# CONFIG_VIDEO_TW68 is not set
+# CONFIG_VIDEO_TW9900 is not set
# CONFIG_VIDEO_TW9903 is not set
# CONFIG_VIDEO_TW9906 is not set
# CONFIG_VIDEO_TW9910 is not set
@@ -7617,6 +7667,7 @@ CONFIG_VIRTIO_PCI_LEGACY=y
CONFIG_VIRTIO_PCI=y
# CONFIG_VIRTIO_PMEM is not set
CONFIG_VIRTIO_VDPA=m
+# CONFIG_VIRTIO_VFIO_PCI is not set
CONFIG_VIRTIO_VSOCKETS=m
CONFIG_VIRTIO=y
CONFIG_VIRTUALIZATION=y
@@ -7824,7 +7875,7 @@ CONFIG_XFS_POSIX_ACL=y
CONFIG_XFS_QUOTA=y
# CONFIG_XFS_RT is not set
# CONFIG_XFS_SUPPORT_ASCII_CI is not set
-CONFIG_XFS_SUPPORT_V4=y
+# CONFIG_XFS_SUPPORT_V4 is not set
CONFIG_XFS_WARN=y
# CONFIG_XGENE_DMA is not set
# CONFIG_XIAOMI_WMI is not set
@@ -7886,6 +7937,7 @@ CONFIG_ZRAM_DEF_COMP_LZORLE=y
CONFIG_ZRAM=m
CONFIG_ZRAM_MEMORY_TRACKING=y
# CONFIG_ZRAM_MULTI_COMP is not set
+CONFIG_ZRAM_TRACK_ENTRY_ACTIME=y
CONFIG_ZRAM_WRITEBACK=y
CONFIG_ZSMALLOC_CHAIN_SIZE=8
CONFIG_ZSMALLOC_STAT=y
@@ -7898,6 +7950,7 @@ CONFIG_ZSWAP_COMPRESSOR_DEFAULT_LZO=y
# CONFIG_ZSWAP_COMPRESSOR_DEFAULT_ZSTD is not set
# CONFIG_ZSWAP_DEFAULT_ON is not set
# CONFIG_ZSWAP_EXCLUSIVE_LOADS_DEFAULT_ON is not set
+# CONFIG_ZSWAP_SHRINKER_DEFAULT_ON is not set
CONFIG_ZSWAP=y
# CONFIG_ZSWAP_ZPOOL_DEFAULT_Z3FOLD is not set
CONFIG_ZSWAP_ZPOOL_DEFAULT_ZBUD=y
@@ -7907,7 +7960,7 @@ CONFIG_ZENIFY=y
CONFIG_NTSYNC=y
CONFIG_USER_NS_UNPRIVILEGED=y
CONFIG_TCP_CONG_BBR2=m
-# CONFIG_SCHED_PDS is not set
+CONFIG_SCHED_BORE=y
CONFIG_HID_IPTS=m
CONFIG_HID_ITHC=m
CONFIG_SURFACE_BOOK1_DGPU_SWITCH=m
@@ -7916,8 +7969,6 @@ CONFIG_LEDS_TPS68470=m
CONFIG_SENSORS_SURFACE_FAN=m
CONFIG_SENSORS_SURFACE_TEMP=m
CONFIG_DRM_AMD_COLOR_STEAMDECK=y
-CONFIG_BMI323_I2C=m
-CONFIG_BMI323_SPI=m
CONFIG_DRM_APPLETBDRM=m
CONFIG_HID_APPLETB_BL=m
CONFIG_HID_APPLETB_KBD=m
@@ -7977,4 +8028,3 @@ CONFIG_SND_SOC_SOF_AMD_ACP63=m
# CONFIG_SND_AMD_ASOC_REMBRANDT is not set
# CONFIG_SND_SOC_AMD_LEGACY_MACH is not set
CONFIG_SND_SOC_TOPOLOGY=y
-CONFIG_SCHED_BORE=y
diff --git a/SOURCES/kernel-x86_64-rt-rhel.config b/SOURCES/kernel-x86_64-rt-rhel.config
index dd0f454..8def0f0 100644
--- a/SOURCES/kernel-x86_64-rt-rhel.config
+++ b/SOURCES/kernel-x86_64-rt-rhel.config
@@ -102,6 +102,7 @@ CONFIG_ACPI=y
# CONFIG_AD5791 is not set
# CONFIG_AD5933 is not set
# CONFIG_AD7091R5 is not set
+# CONFIG_AD7091R8 is not set
# CONFIG_AD7124 is not set
# CONFIG_AD7150 is not set
# CONFIG_AD7192 is not set
@@ -230,6 +231,7 @@ CONFIG_AMD_PMF=m
CONFIG_AMD_PTDMA=m
CONFIG_AMD_SFH_HID=m
# CONFIG_AMDTEE is not set
+# CONFIG_AMD_WBRF is not set
# CONFIG_AMD_XGBE_DCB is not set
CONFIG_AMD_XGBE=m
# CONFIG_AMIGA_PARTITION is not set
@@ -238,6 +240,7 @@ CONFIG_AMPERE_ERRATUM_AC03_CPU_38=y
# CONFIG_AMT is not set
# CONFIG_ANDROID_BINDER_IPC is not set
# CONFIG_ANON_VMA_NAME is not set
+# CONFIG_AOSONG_AGS02MA is not set
# CONFIG_APDS9300 is not set
CONFIG_APDS9802ALS=m
# CONFIG_APDS9960 is not set
@@ -395,6 +398,7 @@ CONFIG_BACKLIGHT_LED=m
# CONFIG_BACKLIGHT_LM3639 is not set
CONFIG_BACKLIGHT_LP855X=m
# CONFIG_BACKLIGHT_LV5207LP is not set
+# CONFIG_BACKLIGHT_MP3309C is not set
# CONFIG_BACKLIGHT_PWM is not set
# CONFIG_BACKLIGHT_QCOM_WLED is not set
# CONFIG_BACKLIGHT_SAHARA is not set
@@ -488,6 +492,7 @@ CONFIG_BLK_DEV_SR=m
# CONFIG_BLK_DEV_THROTTLING_LOW is not set
CONFIG_BLK_DEV_THROTTLING=y
# CONFIG_BLK_DEV_UBLK is not set
+CONFIG_BLK_DEV_WRITE_MOUNTED=y
CONFIG_BLK_DEV=y
CONFIG_BLK_DEV_ZONED=y
# CONFIG_BLK_INLINE_ENCRYPTION is not set
@@ -507,6 +512,8 @@ CONFIG_BLOCK=y
# CONFIG_BMI088_ACCEL is not set
# CONFIG_BMI160_I2C is not set
# CONFIG_BMI160_SPI is not set
+CONFIG_BMI323_I2C=m
+CONFIG_BMI323_SPI=m
# CONFIG_BMP280 is not set
# CONFIG_BNA is not set
CONFIG_BNX2=m
@@ -522,7 +529,6 @@ CONFIG_BONDING=m
# CONFIG_BOOT_CONFIG_FORCE is not set
CONFIG_BOOT_CONFIG=y
CONFIG_BOOTPARAM_HARDLOCKUP_PANIC=y
-CONFIG_BOOTPARAM_HOTPLUG_CPU0=y
# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
CONFIG_BOOT_PRINTK_DELAY=y
@@ -961,7 +967,6 @@ CONFIG_CRYPTO_CAST6_AVX_X86_64=m
CONFIG_CRYPTO_CAST6=m
CONFIG_CRYPTO_CBC=y
CONFIG_CRYPTO_CCM=y
-CONFIG_CRYPTO_CFB=y
CONFIG_CRYPTO_CHACHA20=m
CONFIG_CRYPTO_CHACHA20POLY1305=m
CONFIG_CRYPTO_CHACHA20_X86_64=y
@@ -996,11 +1001,14 @@ CONFIG_CRYPTO_DEV_CHELSIO=m
CONFIG_CRYPTO_DEV_HISI_SEC=m
# CONFIG_CRYPTO_DEV_HISI_TRNG is not set
# CONFIG_CRYPTO_DEV_HISTB_TRNG is not set
+CONFIG_CRYPTO_DEV_IAA_CRYPTO=m
+# CONFIG_CRYPTO_DEV_IAA_CRYPTO_STATS is not set
CONFIG_CRYPTO_DEV_NITROX_CNN55XX=m
# CONFIG_CRYPTO_DEV_OCTEONTX_CPT is not set
CONFIG_CRYPTO_DEV_PADLOCK_AES=m
CONFIG_CRYPTO_DEV_PADLOCK=m
CONFIG_CRYPTO_DEV_PADLOCK_SHA=m
+CONFIG_CRYPTO_DEV_QAT_420XX=m
CONFIG_CRYPTO_DEV_QAT_4XXX=m
CONFIG_CRYPTO_DEV_QAT_C3XXX=m
CONFIG_CRYPTO_DEV_QAT_C3XXXVF=m
@@ -1060,7 +1068,6 @@ CONFIG_CRYPTO_MICHAEL_MIC=m
CONFIG_CRYPTO_NHPOLY1305_AVX2=m
CONFIG_CRYPTO_NHPOLY1305_SSE2=m
CONFIG_CRYPTO_NULL=y
-CONFIG_CRYPTO_OFB=y
CONFIG_CRYPTO_PCBC=m
CONFIG_CRYPTO_PCRYPT=m
CONFIG_CRYPTO_POLY1305=m
@@ -1159,7 +1166,6 @@ CONFIG_DEBUG_FS_ALLOW_ALL=y
# CONFIG_DEBUG_FS_DISALLOW_MOUNT is not set
CONFIG_DEBUG_FS=y
# CONFIG_DEBUG_GPIO is not set
-# CONFIG_DEBUG_HOTPLUG_CPU0 is not set
CONFIG_DEBUG_INFO_BTF=y
# CONFIG_DEBUG_INFO_COMPRESSED is not set
CONFIG_DEBUG_INFO_COMPRESSED_NONE=y
@@ -1219,7 +1225,7 @@ CONFIG_DEBUG_STACKOVERFLOW=y
# CONFIG_DEBUG_VM_MAPLE_TREE is not set
# CONFIG_DEBUG_VM_PGFLAGS is not set
# CONFIG_DEBUG_VM_PGTABLE is not set
-# CONFIG_DEBUG_VM_RB is not set # revisit this if performance isn't horrible
+# CONFIG_DEBUG_VM_RB is not set
# CONFIG_DEBUG_VM_SHOOT_LAZIES is not set
# CONFIG_DEBUG_VM_VMACACHE is not set
# CONFIG_DEBUG_WQ_FORCE_RR_CPU is not set
@@ -1346,6 +1352,7 @@ CONFIG_DP83867_PHY=m
# CONFIG_DP83869_PHY is not set
CONFIG_DP83TC811_PHY=m
# CONFIG_DP83TD510_PHY is not set
+# CONFIG_DP83TG720_PHY is not set
# CONFIG_DPM_WATCHDOG is not set
# CONFIG_DPOT_DAC is not set
# CONFIG_DPS310 is not set
@@ -1406,6 +1413,7 @@ CONFIG_DRM_I915_COMPRESS_ERROR=y
# CONFIG_DRM_I915_DEBUG_MMIO is not set
# CONFIG_DRM_I915_DEBUG_RUNTIME_PM is not set
# CONFIG_DRM_I915_DEBUG_VBLANK_EVADE is not set
+# CONFIG_DRM_I915_DEBUG_WAKEREF is not set
CONFIG_DRM_I915_FENCE_TIMEOUT=10000
CONFIG_DRM_I915_FORCE_PROBE=""
# CONFIG_DRM_I915_GVT_KVMGT is not set
@@ -1449,6 +1457,7 @@ CONFIG_DRM_LOAD_EDID_FIRMWARE=y
CONFIG_DRM_MGAG200=m
# CONFIG_DRM_MXSFB is not set
CONFIG_DRM_NOUVEAU_BACKLIGHT=y
+# CONFIG_DRM_NOUVEAU_GSP_DEFAULT is not set
CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_NWL_MIPI_DSI is not set
# CONFIG_DRM_NXP_PTN3460 is not set
@@ -1469,6 +1478,7 @@ CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_PANEL_HIMAX_HX8394 is not set
# CONFIG_DRM_PANEL_ILITEK_IL9322 is not set
# CONFIG_DRM_PANEL_ILITEK_ILI9341 is not set
+# CONFIG_DRM_PANEL_ILITEK_ILI9805 is not set
# CONFIG_DRM_PANEL_ILITEK_ILI9881C is not set
# CONFIG_DRM_PANEL_ILITEK_ILI9882T is not set
# CONFIG_DRM_PANEL_INNOLUX_EJ030NA is not set
@@ -1529,6 +1539,7 @@ CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_PANEL_SONY_TD4353_JDI is not set
# CONFIG_DRM_PANEL_SONY_TULIP_TRULY_NT35521 is not set
# CONFIG_DRM_PANEL_STARTEK_KD070FHFID015 is not set
+# CONFIG_DRM_PANEL_SYNAPTICS_R63353 is not set
# CONFIG_DRM_PANEL_TDO_TL070WSH30 is not set
# CONFIG_DRM_PANEL_TPO_TD028TTEC1 is not set
# CONFIG_DRM_PANEL_TPO_TD043MTEA1 is not set
@@ -1543,6 +1554,7 @@ CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_PARADE_PS8622 is not set
# CONFIG_DRM_PARADE_PS8640 is not set
# CONFIG_DRM_PL111 is not set
+# CONFIG_DRM_POWERVR is not set
CONFIG_DRM_QXL=m
CONFIG_DRM_RADEON=m
CONFIG_DRM_RADEON_USERPTR=y
@@ -1581,6 +1593,7 @@ CONFIG_DRM_VKMS=m
CONFIG_DRM_VMWGFX_FBCON=y
CONFIG_DRM_VMWGFX=m
# CONFIG_DRM_VMWGFX_MKSSTATS is not set
+# CONFIG_DRM_XE is not set
# CONFIG_DRM_XEN_FRONTEND is not set
CONFIG_DRM=y
# CONFIG_DS1682 is not set
@@ -1715,6 +1728,7 @@ CONFIG_DVB_USB_VP7045=m
# CONFIG_DVB_USB_ZD1301 is not set
# CONFIG_DVB_ZD1301_DEMOD is not set
# CONFIG_DW_AXI_DMAC is not set
+# CONFIG_DWC_PCIE_PMU is not set
CONFIG_DW_DMAC=m
CONFIG_DW_DMAC_PCI=y
# CONFIG_DW_EDMA is not set
@@ -1810,6 +1824,7 @@ CONFIG_EPOLL=y
# CONFIG_EQUALIZER is not set
# CONFIG_EROFS_FS_DEBUG is not set
CONFIG_EROFS_FS=m
+# CONFIG_EROFS_FS_ONDEMAND is not set
CONFIG_EROFS_FS_POSIX_ACL=y
CONFIG_EROFS_FS_SECURITY=y
CONFIG_EROFS_FS_XATTR=y
@@ -1868,7 +1883,6 @@ CONFIG_FAT_KUNIT_TEST=m
# CONFIG_FB_3DFX is not set
# CONFIG_FB_ARC is not set
# CONFIG_FB_ARK is not set
-# CONFIG_FB_ARMCLCD is not set
# CONFIG_FB_ASILIANT is not set
# CONFIG_FB_ATY128 is not set
# CONFIG_FB_ATY is not set
@@ -1888,7 +1902,6 @@ CONFIG_FB_EFI=y
# CONFIG_FB_IMSTT is not set
# CONFIG_FB_IMX is not set
# CONFIG_FB_KYRO is not set
-# CONFIG_FB_LE80578 is not set
# CONFIG_FB_MATROX_G is not set
# CONFIG_FB_MATROX_I2C is not set
# CONFIG_FB_MATROX is not set
@@ -1957,11 +1970,12 @@ CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
CONFIG_FRAMEBUFFER_CONSOLE=y
CONFIG_FRAME_POINTER=y
+# CONFIG_FRAMER is not set
CONFIG_FRAME_WARN=2048
CONFIG_FRONTSWAP=y
# CONFIG_FSCACHE_DEBUG is not set
-CONFIG_FSCACHE=m
CONFIG_FSCACHE_STATS=y
+CONFIG_FSCACHE=y
CONFIG_FS_DAX=y
# CONFIG_FS_ENCRYPTION is not set
# CONFIG_FSI is not set
@@ -2146,6 +2160,7 @@ CONFIG_HASHTABLE_KUNIT_TEST=m
# CONFIG_HD44780 is not set
# CONFIG_HDC100X is not set
# CONFIG_HDC2010 is not set
+# CONFIG_HDC3020 is not set
CONFIG_HDLC_CISCO=m
CONFIG_HDLC_FR=m
CONFIG_HDLC=m
@@ -2219,6 +2234,7 @@ CONFIG_HID_LOGITECH=m
CONFIG_HID_MAGICMOUSE=y
# CONFIG_HID_MALTRON is not set
# CONFIG_HID_MAYFLASH is not set
+# CONFIG_HID_MCP2200 is not set
# CONFIG_HID_MCP2221 is not set
# CONFIG_HID_MEGAWORLD_FF is not set
CONFIG_HID_MICROSOFT=m
@@ -2338,6 +2354,7 @@ CONFIG_HP_WMI=m
CONFIG_HSA_AMD_P2P=y
CONFIG_HSA_AMD_SVM=y
CONFIG_HSA_AMD=y
+# CONFIG_HSC030PA is not set
# CONFIG_HSI is not set
CONFIG_HSR=m
# CONFIG_HT16K33 is not set
@@ -2480,6 +2497,7 @@ CONFIG_IAVF=m
# CONFIG_IBM_ASM is not set
CONFIG_IBMASR=m
# CONFIG_IBM_RTL is not set
+CONFIG_ICE_HWMON=y
CONFIG_ICE_HWTS=y
CONFIG_ICE=m
CONFIG_ICE_SWITCHDEV=y
@@ -2590,7 +2608,7 @@ CONFIG_INFINIBAND_BNXT_RE=m
CONFIG_INFINIBAND_CXGB4=m
CONFIG_INFINIBAND_EFA=m
# CONFIG_INFINIBAND_ERDMA is not set
-CONFIG_INFINIBAND_HFI1=m
+# CONFIG_INFINIBAND_HFI1 is not set
# CONFIG_INFINIBAND_HNS is not set
CONFIG_INFINIBAND_IPOIB_CM=y
# CONFIG_INFINIBAND_IPOIB_DEBUG_DATA is not set
@@ -2606,15 +2624,15 @@ CONFIG_INFINIBAND_ON_DEMAND_PAGING=y
CONFIG_INFINIBAND_OPA_VNIC=m
CONFIG_INFINIBAND_QEDR=m
# CONFIG_INFINIBAND_QIB is not set
-CONFIG_INFINIBAND_RDMAVT=m
+# CONFIG_INFINIBAND_RDMAVT is not set
# CONFIG_INFINIBAND_RTRS_CLIENT is not set
# CONFIG_INFINIBAND_RTRS_SERVER is not set
CONFIG_INFINIBAND_SRP=m
CONFIG_INFINIBAND_SRPT=m
CONFIG_INFINIBAND_USER_ACCESS=m
CONFIG_INFINIBAND_USER_MAD=m
-CONFIG_INFINIBAND_USNIC=m
-CONFIG_INFINIBAND_VMWARE_PVRDMA=m
+# CONFIG_INFINIBAND_USNIC is not set
+# CONFIG_INFINIBAND_VMWARE_PVRDMA is not set
# CONFIG_INFTL is not set
# CONFIG_INIT_ON_ALLOC_DEFAULT_ON is not set
# CONFIG_INIT_ON_FREE_DEFAULT_ON is not set
@@ -2715,12 +2733,13 @@ CONFIG_INTEL_ISH_HID=m
CONFIG_INTEL_ISHTP_ECLITE=m
# CONFIG_INTEL_LDMA is not set
CONFIG_INTEL_MEI_GSC=m
-# CONFIG_INTEL_MEI_GSC_PROXY is not set
+CONFIG_INTEL_MEI_GSC_PROXY=m
# CONFIG_INTEL_MEI_HDCP is not set
CONFIG_INTEL_MEI=m
CONFIG_INTEL_MEI_ME=m
# CONFIG_INTEL_MEI_PXP is not set
# CONFIG_INTEL_MEI_TXE is not set
+# CONFIG_INTEL_MEI_VSC_HW is not set
CONFIG_INTEL_MEI_WDT=m
# CONFIG_INTEL_MENLOW is not set
CONFIG_INTEL_OAKTRAIL=m
@@ -2980,6 +2999,7 @@ CONFIG_ISL29003=m
CONFIG_ISL29020=m
# CONFIG_ISL29125 is not set
# CONFIG_ISL29501 is not set
+# CONFIG_ISL76682 is not set
CONFIG_ISO9660_FS=m
CONFIG_IS_SIGNED_TYPE_KUNIT_TEST=m
# CONFIG_IT8712F_WDT is not set
@@ -3020,6 +3040,7 @@ CONFIG_KALLSYMS_BASE_RELATIVE=y
# CONFIG_KALLSYMS_SELFTEST is not set
CONFIG_KALLSYMS=y
# CONFIG_KARMA_PARTITION is not set
+# CONFIG_KASAN_EXTRA_INFO is not set
# CONFIG_KASAN is not set
# CONFIG_KASAN_MODULE_TEST is not set
# CONFIG_KASAN_VMALLOC is not set
@@ -3112,12 +3133,14 @@ CONFIG_KVM_AMD_SEV=y
# CONFIG_KVM_BOOK3S_HV_P8_TIMING is not set
# CONFIG_KVM_BOOK3S_HV_P9_TIMING is not set
CONFIG_KVM_GUEST=y
+CONFIG_KVM_HYPERV=y
CONFIG_KVM_INTEL=m
CONFIG_KVM=m
CONFIG_KVM_MAX_NR_VCPUS=4096
CONFIG_KVM_MMU_AUDIT=y
# CONFIG_KVM_PROVE_MMU is not set
CONFIG_KVM_SMM=y
+CONFIG_KVM_SW_PROTECTED_VM=y
# CONFIG_KVM_WERROR is not set
# CONFIG_KVM_XEN is not set
# CONFIG_KXCJK1013 is not set
@@ -3294,6 +3317,7 @@ CONFIG_LSM_MMAP_MIN_ADDR=65535
# CONFIG_LTO_CLANG_FULL is not set
# CONFIG_LTO_CLANG_THIN is not set
CONFIG_LTO_NONE=y
+# CONFIG_LTR390 is not set
# CONFIG_LTR501 is not set
# CONFIG_LTRF216A is not set
# CONFIG_LV0104CS is not set
@@ -3334,7 +3358,7 @@ CONFIG_MANA_INFINIBAND=m
CONFIG_MANTIS_CORE=m
# CONFIG_MARCH_Z16 is not set
CONFIG_MARVELL_10G_PHY=m
-# CONFIG_MARVELL_88Q2XXX_PHY is not set
+CONFIG_MARVELL_88Q2XXX_PHY=m
# CONFIG_MARVELL_88X2222_PHY is not set
CONFIG_MARVELL_PHY=m
# CONFIG_MATOM is not set
@@ -3351,6 +3375,7 @@ CONFIG_MARVELL_PHY=m
# CONFIG_MAX31827 is not set
# CONFIG_MAX31856 is not set
# CONFIG_MAX31865 is not set
+# CONFIG_MAX34408 is not set
# CONFIG_MAX44000 is not set
# CONFIG_MAX44009 is not set
# CONFIG_MAX517 is not set
@@ -3379,7 +3404,9 @@ CONFIG_MAXSMP=y
# CONFIG_MCP4531 is not set
# CONFIG_MCP4725 is not set
# CONFIG_MCP4728 is not set
+# CONFIG_MCP4821 is not set
# CONFIG_MCP4922 is not set
+# CONFIG_MCP9600 is not set
# CONFIG_MCTP is not set
CONFIG_MD_AUTODETECT=y
CONFIG_MD_BITMAP_FILE=y
@@ -3612,10 +3639,11 @@ CONFIG_MISC_RTSX_USB=m
CONFIG_MITIGATION_RFDS=y
# CONFIG_MK8 is not set
# CONFIG_MLX4_CORE_GEN2 is not set
+# CONFIG_MLX4_CORE is not set
CONFIG_MLX4_DEBUG=y
CONFIG_MLX4_EN_DCB=y
-CONFIG_MLX4_EN=m
-CONFIG_MLX4_INFINIBAND=m
+# CONFIG_MLX4_EN is not set
+# CONFIG_MLX4_INFINIBAND is not set
CONFIG_MLX5_ACCEL=y
CONFIG_MLX5_CLS_ACT=y
CONFIG_MLX5_CORE_EN_DCB=y
@@ -3646,6 +3674,7 @@ CONFIG_MLX5_VDPA_NET=m
CONFIG_MLX5_VFIO_PCI=m
# CONFIG_MLX90614 is not set
# CONFIG_MLX90632 is not set
+# CONFIG_MLX90635 is not set
# CONFIG_MLXBF_BOOTCTL is not set
# CONFIG_MLXBF_GIGE is not set
# CONFIG_MLXBF_PMC is not set
@@ -3812,7 +3841,7 @@ CONFIG_MT76x2U=m
CONFIG_MT7921E=m
# CONFIG_MT7921S is not set
# CONFIG_MT7921U is not set
-# CONFIG_MT7925E is not set
+CONFIG_MT7925E=m
# CONFIG_MT7925U is not set
# CONFIG_MT7996E is not set
# CONFIG_MTD_ABSENT is not set
@@ -3864,6 +3893,7 @@ CONFIG_MTD_OF_PARTS=m
CONFIG_MTD_UBI_BEB_LIMIT=20
# CONFIG_MTD_UBI_BLOCK is not set
# CONFIG_MTD_UBI_FASTMAP is not set
+# CONFIG_MTD_UBI_FAULT_INJECTION is not set
# CONFIG_MTD_UBI_GLUEBI is not set
CONFIG_MTD_UBI=m
CONFIG_MTD_UBI_WL_THRESHOLD=4096
@@ -3889,7 +3919,6 @@ CONFIG_NAMESPACES=y
CONFIG_NATIONAL_PHY=m
# CONFIG_NAU7802 is not set
# CONFIG_NCN26000_PHY is not set
-CONFIG_ND_BLK=m
CONFIG_ND_BTT=m
# CONFIG_NDC_DIS_DYNAMIC_CACHING is not set
CONFIG_ND_CLAIM=y
@@ -3943,7 +3972,6 @@ CONFIG_NET_DROP_MONITOR=y
# CONFIG_NET_EMATCH is not set
# CONFIG_NET_EMATCH_META is not set
# CONFIG_NET_EMATCH_NBYTE is not set
-# CONFIG_NET_EMATCH_STACK is not set
# CONFIG_NET_EMATCH_TEXT is not set
# CONFIG_NET_EMATCH_U32 is not set
CONFIG_NET_FAILOVER=m
@@ -4127,6 +4155,7 @@ CONFIG_NET_VENDOR_HUAWEI=y
CONFIG_NET_VENDOR_INTEL=y
# CONFIG_NET_VENDOR_LITEX is not set
CONFIG_NET_VENDOR_MARVELL=y
+CONFIG_NET_VENDOR_MELLANOX=y
# CONFIG_NET_VENDOR_MICREL is not set
# CONFIG_NET_VENDOR_MICROCHIP is not set
# CONFIG_NET_VENDOR_MICROSEMI is not set
@@ -4218,6 +4247,7 @@ CONFIG_NF_REJECT_IPV6=m
# CONFIG_NFSD_BLOCKLAYOUT is not set
# CONFIG_NFSD_FLEXFILELAYOUT is not set
CONFIG_NFS_DISABLE_UDP_SUPPORT=y
+# CONFIG_NFSD_LEGACY_CLIENT_TRACKING is not set
CONFIG_NFSD=m
CONFIG_NFSD_PNFS=y
CONFIG_NFSD_SCSILAYOUT=y
@@ -4364,6 +4394,7 @@ CONFIG_NOUVEAU_DEBUG_DEFAULT=3
# CONFIG_NOUVEAU_LEGACY_CTX_SUPPORT is not set
CONFIG_NOZOMI=m
CONFIG_NR_CPUS=8192
+# CONFIG_NSM is not set
CONFIG_NTB_AMD=m
# CONFIG_NTB_EPF is not set
# CONFIG_NTB_IDT is not set
@@ -4659,6 +4690,7 @@ CONFIG_PINCTRL_EMMITSBURG=m
# CONFIG_PINCTRL_EQUILIBRIUM is not set
CONFIG_PINCTRL_GEMINILAKE=m
CONFIG_PINCTRL_ICELAKE=m
+CONFIG_PINCTRL_INTEL_PLATFORM=m
# CONFIG_PINCTRL_IPQ6018 is not set
# CONFIG_PINCTRL_IPQ8074 is not set
CONFIG_PINCTRL_JASPERLAKE=m
@@ -4669,6 +4701,7 @@ CONFIG_PINCTRL_LEWISBURG=m
# CONFIG_PINCTRL_MCP23S08 is not set
# CONFIG_PINCTRL_MDM9615 is not set
CONFIG_PINCTRL_METEORLAKE=m
+CONFIG_PINCTRL_METEORPOINT=m
# CONFIG_PINCTRL_MICROCHIP_SGPIO is not set
# CONFIG_PINCTRL_MLXBF3 is not set
# CONFIG_PINCTRL_MSM8226 is not set
@@ -4965,8 +4998,8 @@ CONFIG_RD_GZIP=y
CONFIG_RD_LZ4=y
CONFIG_RD_LZMA=y
CONFIG_RD_LZO=y
-CONFIG_RDMA_RXE=m
-CONFIG_RDMA_SIW=m
+# CONFIG_RDMA_RXE is not set
+# CONFIG_RDMA_SIW is not set
# CONFIG_RDS is not set
CONFIG_RD_XZ=y
CONFIG_RD_ZSTD=y
@@ -5007,6 +5040,7 @@ CONFIG_REGULATOR_FIXED_VOLTAGE=m
# CONFIG_REGULATOR_MAX8973 is not set
# CONFIG_REGULATOR_MCP16502 is not set
# CONFIG_REGULATOR_MT6311 is not set
+# CONFIG_REGULATOR_NETLINK_EVENTS is not set
# CONFIG_REGULATOR_PF8X00 is not set
# CONFIG_REGULATOR_PFUZE100 is not set
# CONFIG_REGULATOR_PV88060 is not set
@@ -5156,6 +5190,7 @@ CONFIG_RTC_DRV_M41T80_WDT=y
CONFIG_RTC_DRV_M48T35=m
CONFIG_RTC_DRV_M48T59=m
# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_MAX31335 is not set
CONFIG_RTC_DRV_MAX6900=m
# CONFIG_RTC_DRV_MAX6902 is not set
# CONFIG_RTC_DRV_MAX6916 is not set
@@ -5242,7 +5277,7 @@ CONFIG_RTW88=m
# CONFIG_RTW89_8851BE is not set
CONFIG_RTW89_8852AE=m
CONFIG_RTW89_8852BE=m
-# CONFIG_RTW89_8852CE is not set
+CONFIG_RTW89_8852CE=m
# CONFIG_RTW89_DEBUGFS is not set
# CONFIG_RTW89_DEBUGMSG is not set
CONFIG_RTW89=m
@@ -5258,6 +5293,7 @@ CONFIG_RXPERF=m
# CONFIG_S390_MODULES_SANITY_TEST is not set
# CONFIG_SAMPLE_ANDROID_BINDERFS is not set
# CONFIG_SAMPLE_AUXDISPLAY is not set
+# CONFIG_SAMPLE_CGROUP is not set
# CONFIG_SAMPLE_CONFIGFS is not set
# CONFIG_SAMPLE_CONNECTOR is not set
# CONFIG_SAMPLE_FANOTIFY_ERROR is not set
@@ -5431,7 +5467,7 @@ CONFIG_SECONDARY_TRUSTED_KEYRING=y
CONFIG_SECRETMEM=y
CONFIG_SECTION_MISMATCH_WARN_ONLY=y
# CONFIG_SECURITY_APPARMOR is not set
-# CONFIG_SECURITY_DMESG_RESTRICT is not set
+CONFIG_SECURITY_DMESG_RESTRICT=y
CONFIG_SECURITYFS=y
CONFIG_SECURITY_INFINIBAND=y
# CONFIG_SECURITY_LANDLOCK is not set
@@ -5525,6 +5561,7 @@ CONFIG_SENSORS_FSCHMD=m
# CONFIG_SENSORS_FTSTEUTATES is not set
CONFIG_SENSORS_G760A=m
# CONFIG_SENSORS_G762 is not set
+# CONFIG_SENSORS_GIGABYTE_WATERFORCE is not set
CONFIG_SENSORS_GL518SM=m
CONFIG_SENSORS_GL520SM=m
# CONFIG_SENSORS_GPIO_FAN is not set
@@ -5592,6 +5629,7 @@ CONFIG_SENSORS_LTC4215=m
CONFIG_SENSORS_LTC4245=m
# CONFIG_SENSORS_LTC4260 is not set
CONFIG_SENSORS_LTC4261=m
+# CONFIG_SENSORS_LTC4286 is not set
# CONFIG_SENSORS_MAX1111 is not set
# CONFIG_SENSORS_MAX127 is not set
# CONFIG_SENSORS_MAX15301 is not set
@@ -5619,9 +5657,11 @@ CONFIG_SENSORS_MAX8688=m
# CONFIG_SENSORS_MC34VR500 is not set
CONFIG_SENSORS_MCP3021=m
# CONFIG_SENSORS_MLXREG_FAN is not set
+# CONFIG_SENSORS_MP2856 is not set
# CONFIG_SENSORS_MP2888 is not set
# CONFIG_SENSORS_MP2975 is not set
# CONFIG_SENSORS_MP5023 is not set
+# CONFIG_SENSORS_MP5990 is not set
# CONFIG_SENSORS_MPQ7932 is not set
# CONFIG_SENSORS_MR75203 is not set
# CONFIG_SENSORS_NCT6683 is not set
@@ -5802,10 +5842,8 @@ CONFIG_SIGNED_PE_FILE_VERIFICATION=y
CONFIG_SIPHASH_KUNIT_TEST=m
# CONFIG_SKGE is not set
# CONFIG_SKY2 is not set
-# CONFIG_SLAB_DEPRECATED is not set
CONFIG_SLAB_FREELIST_HARDENED=y
CONFIG_SLAB_FREELIST_RANDOM=y
-# CONFIG_SLAB is not set
# CONFIG_SLAB_MERGE_DEFAULT is not set
# CONFIG_SLIMBUS is not set
CONFIG_SLIP_COMPRESSED=y
@@ -6565,6 +6603,7 @@ CONFIG_SQUASHFS_ZSTD=y
# CONFIG_SSB is not set
# CONFIG_SSFDC is not set
# CONFIG_SSIF_IPMI_BMC is not set
+CONFIG_STACKDEPOT_MAX_FRAMES=64
CONFIG_STACK_HASH_ORDER=20
CONFIG_STACKINIT_KUNIT_TEST=m
CONFIG_STACKPROTECTOR_STRONG=y
@@ -6694,7 +6733,7 @@ CONFIG_TCP_CONG_DCTCP=m
# CONFIG_TCP_CONG_HSTCP is not set
CONFIG_TCP_CONG_HTCP=m
# CONFIG_TCP_CONG_HYBLA is not set
-# CONFIG_TCP_CONG_ILLINOIS is not set
+CONFIG_TCP_CONG_ILLINOIS=m
# CONFIG_TCP_CONG_LP is not set
CONFIG_TCP_CONG_NV=m
# CONFIG_TCP_CONG_SCALABLE is not set
@@ -6758,6 +6797,7 @@ CONFIG_TEST_SORT=m
# CONFIG_TEST_UUID is not set
CONFIG_TEST_VMALLOC=m
# CONFIG_TEST_XARRAY is not set
+# CONFIG_THERMAL_DEBUGFS is not set
# CONFIG_THERMAL_DEFAULT_GOV_FAIR_SHARE is not set
CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y
# CONFIG_THERMAL_DEFAULT_GOV_USER_SPACE is not set
@@ -6939,6 +6979,7 @@ CONFIG_TOUCHSCREEN_WACOM_W8001=m
CONFIG_TRACER_SNAPSHOT=y
CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS=y
# CONFIG_TRANSPARENT_HUGEPAGE_MADVISE is not set
+# CONFIG_TRANSPARENT_HUGEPAGE_NEVER is not set
CONFIG_TRANSPARENT_HUGEPAGE=y
CONFIG_TREE_RCU=y
# CONFIG_TRIM_UNUSED_KSYMS is not set
@@ -6969,6 +7010,7 @@ CONFIG_TYPEC_MUX_FSA4480=m
# CONFIG_TYPEC_MUX_NB7VPQ904M is not set
CONFIG_TYPEC_MUX_PI3USB30532=m
# CONFIG_TYPEC_MUX_PTN36502 is not set
+# CONFIG_TYPEC_MUX_WCD939X_USBSS is not set
# CONFIG_TYPEC_NVIDIA_ALTMODE is not set
# CONFIG_TYPEC_QCOM_PMIC is not set
# CONFIG_TYPEC_RT1711H is not set
@@ -7332,12 +7374,14 @@ CONFIG_VDPA_SIM_NET=m
# CONFIG_VDPA_USER is not set
# CONFIG_VEML6030 is not set
# CONFIG_VEML6070 is not set
+# CONFIG_VEML6075 is not set
CONFIG_VETH=m
# CONFIG_VF610_ADC is not set
# CONFIG_VF610_DAC is not set
CONFIG_VFAT_FS=m
# CONFIG_VFIO_AMBA is not set
CONFIG_VFIO_CONTAINER=y
+# CONFIG_VFIO_DEBUGFS is not set
CONFIG_VFIO_DEVICE_CDEV=y
CONFIG_VFIO_GROUP=y
CONFIG_VFIO_IOMMU_TYPE1=m
@@ -7374,6 +7418,7 @@ CONFIG_VHOST_VSOCK=m
# CONFIG_VIDEO_ADV_DEBUG is not set
# CONFIG_VIDEO_AK7375 is not set
# CONFIG_VIDEO_AK881X is not set
+# CONFIG_VIDEO_ALVIUM_CSI2 is not set
# CONFIG_VIDEO_AR0521 is not set
CONFIG_VIDEO_AU0828=m
# CONFIG_VIDEO_AU0828_RC is not set
@@ -7422,6 +7467,8 @@ CONFIG_VIDEO_EM28XX_RC=m
# CONFIG_VIDEO_FB_IVTV_FORCE_PAT is not set
CONFIG_VIDEO_FB_IVTV=m
# CONFIG_VIDEO_FIXED_MINOR_RANGES is not set
+# CONFIG_VIDEO_GC0308 is not set
+# CONFIG_VIDEO_GC2145 is not set
# CONFIG_VIDEO_GO7007 is not set
# CONFIG_VIDEO_GS1662 is not set
CONFIG_VIDEO_HDPVR=m
@@ -7491,6 +7538,7 @@ CONFIG_VIDEO_IVTV=m
# CONFIG_VIDEO_OV5675 is not set
# CONFIG_VIDEO_OV5693 is not set
# CONFIG_VIDEO_OV5695 is not set
+# CONFIG_VIDEO_OV64A40 is not set
# CONFIG_VIDEO_OV6650 is not set
# CONFIG_VIDEO_OV7251 is not set
# CONFIG_VIDEO_OV7640 is not set
@@ -7543,6 +7591,7 @@ CONFIG_VIDEO_SAA7164=m
# CONFIG_VIDEO_TDA9840 is not set
# CONFIG_VIDEO_TEA6415C is not set
# CONFIG_VIDEO_TEA6420 is not set
+# CONFIG_VIDEO_THP7312 is not set
# CONFIG_VIDEO_THS7303 is not set
# CONFIG_VIDEO_THS8200 is not set
# CONFIG_VIDEO_TLV320AIC23B is not set
@@ -7558,6 +7607,7 @@ CONFIG_VIDEO_TUNER=m
# CONFIG_VIDEO_TW5864 is not set
# CONFIG_VIDEO_TW686X is not set
# CONFIG_VIDEO_TW68 is not set
+# CONFIG_VIDEO_TW9900 is not set
# CONFIG_VIDEO_TW9903 is not set
# CONFIG_VIDEO_TW9906 is not set
# CONFIG_VIDEO_TW9910 is not set
@@ -7593,6 +7643,7 @@ CONFIG_VIRTIO_PCI_LEGACY=y
CONFIG_VIRTIO_PCI=y
# CONFIG_VIRTIO_PMEM is not set
CONFIG_VIRTIO_VDPA=m
+# CONFIG_VIRTIO_VFIO_PCI is not set
CONFIG_VIRTIO_VSOCKETS=m
CONFIG_VIRTIO=y
CONFIG_VIRTUALIZATION=y
@@ -7800,7 +7851,7 @@ CONFIG_XFS_POSIX_ACL=y
CONFIG_XFS_QUOTA=y
# CONFIG_XFS_RT is not set
# CONFIG_XFS_SUPPORT_ASCII_CI is not set
-CONFIG_XFS_SUPPORT_V4=y
+# CONFIG_XFS_SUPPORT_V4 is not set
# CONFIG_XFS_WARN is not set
# CONFIG_XGENE_DMA is not set
# CONFIG_XIAOMI_WMI is not set
@@ -7862,6 +7913,7 @@ CONFIG_ZRAM_DEF_COMP_LZORLE=y
CONFIG_ZRAM=m
# CONFIG_ZRAM_MEMORY_TRACKING is not set
# CONFIG_ZRAM_MULTI_COMP is not set
+# CONFIG_ZRAM_TRACK_ENTRY_ACTIME is not set
CONFIG_ZRAM_WRITEBACK=y
CONFIG_ZSMALLOC_CHAIN_SIZE=8
CONFIG_ZSMALLOC_STAT=y
@@ -7874,6 +7926,7 @@ CONFIG_ZSWAP_COMPRESSOR_DEFAULT_LZO=y
# CONFIG_ZSWAP_COMPRESSOR_DEFAULT_ZSTD is not set
# CONFIG_ZSWAP_DEFAULT_ON is not set
# CONFIG_ZSWAP_EXCLUSIVE_LOADS_DEFAULT_ON is not set
+# CONFIG_ZSWAP_SHRINKER_DEFAULT_ON is not set
CONFIG_ZSWAP=y
# CONFIG_ZSWAP_ZPOOL_DEFAULT_Z3FOLD is not set
CONFIG_ZSWAP_ZPOOL_DEFAULT_ZBUD=y
@@ -7883,7 +7936,7 @@ CONFIG_ZENIFY=y
CONFIG_NTSYNC=y
CONFIG_USER_NS_UNPRIVILEGED=y
CONFIG_TCP_CONG_BBR2=m
-# CONFIG_SCHED_PDS is not set
+CONFIG_SCHED_BORE=y
CONFIG_HID_IPTS=m
CONFIG_HID_ITHC=m
CONFIG_SURFACE_BOOK1_DGPU_SWITCH=m
@@ -7892,8 +7945,6 @@ CONFIG_LEDS_TPS68470=m
CONFIG_SENSORS_SURFACE_FAN=m
CONFIG_SENSORS_SURFACE_TEMP=m
CONFIG_DRM_AMD_COLOR_STEAMDECK=y
-CONFIG_BMI323_I2C=m
-CONFIG_BMI323_SPI=m
CONFIG_DRM_APPLETBDRM=m
CONFIG_HID_APPLETB_BL=m
CONFIG_HID_APPLETB_KBD=m
@@ -7953,4 +8004,3 @@ CONFIG_SND_SOC_SOF_AMD_ACP63=m
# CONFIG_SND_AMD_ASOC_REMBRANDT is not set
# CONFIG_SND_SOC_AMD_LEGACY_MACH is not set
CONFIG_SND_SOC_TOPOLOGY=y
-CONFIG_SCHED_BORE=y
diff --git a/SOURCES/kernel.changelog b/SOURCES/kernel.changelog
index 19b2075..639a94e 100644
--- a/SOURCES/kernel.changelog
+++ b/SOURCES/kernel.changelog
@@ -1,86 +1,130 @@
-* Wed Mar 27 2024 Augusto Caringi <acaringi@redhat.com> [6.7.11-0]
-- Config updates for stable (Justin M. Forbes)
+* Tue Mar 26 2024 Justin M. Forbes <jforbes@fedoraproject.org> [6.8.2-0]
- xfs: fix SEEK_HOLE/DATA for regions with active COW extents (Dave Chinner)
+- redhat: make libperf-devel require libperf %%{version}-%%{release} (Jan Stancek)
+- kernel.spec: drop custom mode also for System.map ghost entry (Jan Stancek)
+- kernel.spec: fix libperf-debuginfo content (Jan Stancek)
+- redhat/kernel.spec.template: enable cross for base/RT (Peter Robinson)
+- redhat/kernel.spec.template: Fix cross compiling (Peter Robinson)
+- Add more bugs to BugsFixed (Justin M. Forbes)
+- Add bug to BugsFixed (Justin M. Forbes)
+- Turn on CONFIG_READ_ONLY_THP_FOR_FS for Fedora (Justin M. Forbes)
+- Change fedora-stable-release.sh to use git am (Justin M. Forbes)
+- drivers/firmware: skip simpledrm if nvidia-drm.modeset=1 is set (Javier Martinez Canillas)
+- Revert libcpupower soname bump for F38/39 (Justin M. Forbes)
+- Fix up requires for UKI (Justin M. Forbes)
- drm/amd: Flush GFXOFF requests in prepare stage (Mario Limonciello)
-- Linux v6.7.11
+- Linux v6.8.2
Resolves:
-* Mon Mar 18 2024 Augusto Caringi <acaringi@redhat.com> [6.7.10-0]
+* Wed Mar 20 2024 Augusto Caringi <acaringi@redhat.com> [6.8.1-0]
- redhat/configs: Enable CONFIG_MITIGATION_RFDS (Augusto Caringi)
-- Linux v6.7.10
-Resolves:
-
-* Wed Mar 06 2024 Augusto Caringi <acaringi@redhat.com> [6.7.9-0]
-- Add some CVE fixes for 6.7.9 (Justin M. Forbes)
-- Bluetooth: rfcomm: Fix null-ptr-deref in rfcomm_check_security (Yuxuan Hu)
-- Linux v6.7.9
-Resolves:
-
-* Sun Mar 03 2024 Justin M. Forbes <jforbes@fedoraproject.org> [6.7.8-0]
-- Linux v6.7.8
-Resolves:
-
-* Fri Mar 01 2024 Augusto Caringi <acaringi@redhat.com> [6.7.7-0]
-- Add rhbz 2266309 to BugsFixed (Justin M. Forbes)
+- fedora: Enable MCP9600 (Peter Robinson)
+- temporarily remove LIBBPF_DYNAMIC=1 from perf build (Thorsten Leemhuis)
+- Added required files for rebase (Augusto Caringi)
+- Linux v6.8.1
+Resolves:
+
+* Tue Mar 12 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.8.0-1]
+- redhat: remove "END OF CHANGELOG" marker from kernel.changelog (Herton R. Krzesinski)
+- gitlab-ci: enable all variants for rawhide/eln builder image gating (Michael Hofmann)
+- Fedora: enable Microchip and their useful drivers (Peter Robinson)
+- spec: suppress "set +x" output (Jan Stancek)
+- redhat/configs: Disable CONFIG_RDMA_SIW (Kamal Heib)
+- redhat/configs: Disable CONFIG_RDMA_RXE (Kamal Heib)
+- redhat/configs: Disable CONFIG_MLX4 (Kamal Heib)
+- redhat/configs: Disable CONFIG_INFINIBAND_HFI1 and CONFIG_INFINIBAND_RDMAVT (Kamal Heib)
+- Consolidate 6.8 configs to common (Justin M. Forbes)
+- Remove rt-automated and master-rt-devel logic (Don Zickus)
+- Add support for CI octopus merging (Don Zickus)
+- redhat/configs: Disable CONFIG_INFINIBAND_VMWARE_PVRDMA (Kamal Heib)
+- gitlab-ci: fix merge tree URL for gating pipelines (Michael Hofmann)
+- Revert "net: bump CONFIG_MAX_SKB_FRAGS to 45" (Marcelo Ricardo Leitner)
+- uki: use systemd-pcrphase dracut module (Gerd Hoffmann)
- Add libperf-debuginfo subpackage (Justin M. Forbes)
-- Linux v6.7.7
-Resolves:
-
-* Fri Feb 23 2024 Justin M. Forbes <jforbes@fedoraproject.org> [6.7.6-0]
-- Add CVE fix for 6.7.6 (Justin M. Forbes)
-- Linux v6.7.6
-Resolves:
-
-* Sat Feb 17 2024 Justin M. Forbes <jforbes@fedoraproject.org> [6.7.5-0]
-- Backported some CVE fixes lets note them in BugsFixed (Justin M. Forbes)
-- selftests: openvswitch: Add validation for the recursion test (Aaron Conole)
-- net: openvswitch: limit the number of recursions from action sets (Aaron Conole)
-- dm: limit the number of targets and parameter size area (Mikulas Patocka)
-- Add btrfs bug for 6.7.5 (Justin M. Forbes)
-- btrfs: don't refill whole delayed refs block reserve when starting transaction (Filipe Manana)
-- Add 6.7.5 fix to BugsFixed (Justin M. Forbes)
-- drm/amd: Stop evicting resources on APUs in suspend (Mario Limonciello)
-- Revert "drm/amd: flush any delayed gfxoff on suspend entry" (Mario Limonciello)
-- smb: client: set correct id, uid and cruid for multiuser automounts (Paulo Alcantara)
+- redhat/kernel.spec.template: Add log_msg macro (Prarit Bhargava)
+- redhat/configs: Disable CONFIG_INFINIBAND_USNIC (Kamal Heib)
+- Enable CONFIG_BMI323_I2C=m for Fedora x86_64 builds (Hans de Goede)
+- gitlab-ci: drop test_makefile job (Scott Weaver)
+- Enable merge-rt pipeline (Don Zickus)
+- kernel.spec: include the GDB plugin in kernel-debuginfo (Ondrej Mosnacek)
+- Turn on DRM_NOUVEAU_GSP_DEFAULT for Fedora (Justin M. Forbes)
+- Set late new config HDC3020 for Fedora (Justin M. Forbes)
+- redhat/self-test: Update CROSS_DISABLED_PACKAGES (Prarit Bhargava)
+- redhat: Do not build libperf with cross builds (Prarit Bhargava)
+- redhat/configs: enable CONFIG_PINCTRL_INTEL_PLATFORM for RHEL (David Arcari)
+- redhat/configs: enable CONFIG_PINCTRL_METEORPOINT for RHEL (David Arcari)
+- redhat/configs: intel pinctrl config cleanup (David Arcari)
+- redhat/configs: For aarch64/RT, default kstack randomization off (Jeremy Linton)
+- redhat/Makefile: remove an unused target (Ondrej Mosnacek)
+- redhat/Makefile: fix setup-source and document its caveat (Ondrej Mosnacek)
+- redhat/Makefile: fix race condition when making the KABI tarball (Ondrej Mosnacek)
+- redhat/Makefile: refactor KABI tarball creation (Ondrej Mosnacek)
+- Turn XFS_SUPPORT_V4 back on for Fedora (Justin M. Forbes)
+- Add xe to drm module filters (Justin M. Forbes)
+- Turn off the DRM_XE_KUNIT_TEST for Fedora (Justin M. Forbes)
+- Flip secureboot signature order (Justin M. Forbes)
+- all: clean up some removed configs (Peter Robinson)
+- redhat: add nvidia oot signing key (Dave Airlie)
+- gitlab-ci: support CI for zfcpdump kernel on ELN (Michael Hofmann)
+- Fedora configs for 6.8 (Justin M. Forbes)
- Turn off CONFIG_INTEL_VSC for Fedora (Justin M. Forbes)
-- platform/x86: Support for mode FN key (Mark Pearson)
-- Linux v6.7.5
-Resolves:
-
-* Mon Feb 05 2024 Augusto Caringi <acaringi@redhat.com> [6.7.4-0]
-- Add keyboard resume bugfixes (Justin M. Forbes)
-- Input: atkbd - do not skip atkbd_deactivate() when skipping ATKBD_CMD_GETID (Hans de Goede)
-- Input: atkbd - skip ATKBD_CMD_SETLEDS when skipping ATKBD_CMD_GETID (Hans de Goede)
-- Linux v6.7.4
-Resolves:
-
-* Wed Jan 31 2024 Justin M. Forbes <jforbes@fedoraproject.org> [6.7.3-0]
-- Config update for stable backport (Justin M. Forbes)
-- Add some more bugs to BugsFixed (Justin M. Forbes)
-- Linux v6.7.3
-Resolves:
-
-* Fri Jan 26 2024 Justin M. Forbes <jforbes@fedoraproject.org> [6.7.2-0]
+- redhat/configs: rhel wireless requests (Jose Ignacio Tornos Martinez)
+- spec: Set EXTRA_CXXFLAGS for perf demangle-cxx.o (Josh Stone) [2233269]
+- Flip values for FSCACHE and NETFS_SUPPORT to avoid mismatch (Justin M. Forbes)
+- Turn on SECURITY_DMESG_RESTRICT (Justin M. Forbes)
+- redhat: forward-port genlog.py updates from c9s (Jan Stancek)
+- arch/x86: mark x86_64-v1 and x86_64-v2 processors as deprecated (Prarit Bhargava)
+- fedora: Enable more Renesas RZ platform drivers (Peter Robinson)
+- fedora: a few aarch64 drivers and cleanups (Peter Robinson)
+- fedora: cavium nitrox cnn55xx (Peter Robinson)
+- Fix dist-get-buildreqs breakage around perl(ExtUtils::Embed) (Don Zickus)
+- gitlab-ci: merge ark-latest fixes when running ELN pipelines (Michael Hofmann)
+- gitlab-ci: use all arches for container image gating (Michael Hofmann)
+- Add new os-build targets: rt-devel and automotive-devel (Don Zickus)
+- Remove defines forcing tools on, they override cmdline (Justin M. Forbes)
+- Remove separate license tag for libperf (Justin M. Forbes)
+- Don't use upstream bpftool version for Fedora package (Justin M. Forbes)
+- Don't ship libperf.a in libperf-devel (Justin M. Forbes)
+- add libperf packages and enable perf, libperf, tools and bpftool packages (Thorsten Leemhuis)
+- Add scaffolding to build the kernel-headers package for Fedora (Justin M. Forbes)
+- redhat/spec: use distro CFLAGS when building bootstrap bpftool (Artem Savkov)
+- spec: use just-built bpftool for vmlinux.h generation (Yauheni Kaliuta) [2120968]
+- gitlab-ci: enable native tools for Rawhide CI (Michael Hofmann)
+- Revert "Merge branch 'fix-kabi-build-race' into 'os-build'" (Justin M. Forbes)
+- redhat: configs: fedora: Enable sii902x bridge chip driver (Erico Nunes)
+- Enable CONFIG_TCP_CONG_ILLINOIS for RHEL (Davide Caratti)
+- redhat/Makefile: fix setup-source and document its caveat (Ondrej Mosnacek)
+- redhat/Makefile: fix race condition when making the KABI tarball (Ondrej Mosnacek)
+- redhat/Makefile: refactor KABI tarball creation (Ondrej Mosnacek)
+- redhat/configs: Remove HOTPLUG_CPU0 configs (Prarit Bhargava)
+- gitlab-ci: merge ark-latest before building in MR pipelines (Michael Hofmann)
+- CI: include aarch64 in CKI container image gating (Tales Aparecida)
- redhat: spec: Fix update_scripts run for CentOS builds (Neal Gompa)
-- BPF Tool versioning seems incompatible with stable Fedroa (Justin M. Forbes)
-- Linux v6.7.2
-Resolves:
-
-* Sat Jan 20 2024 Justin M. Forbes <jforbes@fedoraproject.org> [6.7.1-0]
-- Fix up requires for UKI (Justin M. Forbes)
-- Fix up libperf install (Justin M. Forbes)
-- Drop soname for libcpupower.so since we reverted the bump (Justin M. Forbes)
+- New configs in drivers/crypto (Fedora Kernel Team)
+- net: bump CONFIG_MAX_SKB_FRAGS to 45 (Marcelo Ricardo Leitner)
+- Enable CONFIG_MARVELL_88Q2XXX_PHY (Izabela Bakollari)
+- Remove CONFIG_NET_EMATCH_STACK file for RHEL (Justin M. Forbes)
+- CONFIG_NETFS_SUPPORT should be m after the merge (Justin M. Forbes)
+- Turn FSCACHE and NETFS from m to y in pending (Justin M. Forbes)
- Turn on CONFIG_TCP_AO for Fedora (Justin M. Forbes)
-- temporarily remove LIBBPF_DYNAMIC=1 from perf build (Thorsten Leemhuis)
-- add libperf packages and enable perf, libperf, tools and bpftool packages (Thorsten Leemhuis)
-- Revert "cpupower: Bump soname version" (Justin M. Forbes)
+- Turn on IAA_CRYPTO_STATS for Fedora (Justin M. Forbes)
+- fedora: new drivers and cleanups (Peter Robinson)
- Turn on Renesas RZ for Fedora IOT rhbz2257913 (Justin M. Forbes)
-- Add bugs to BugsFixed (Justin M. Forbes)
-- wifi: ath10k: fix NULL pointer dereference in ath10k_wmi_tlv_op_pull_mgmt_tx_compl_ev() (Xingyuan Mo)
-- drivers/firmware: skip simpledrm if nvidia-drm.modeset=1 is set (Javier Martinez Canillas)
-- Basic scaffolding to create a kernel-headers package (Justin M. Forbes)
-- Initial config for fedora-6.7 branch (Justin M. Forbes)
-- Reset RHEL_RELEASE for 6.8 series (Justin M. Forbes)
+- redhat: filter-modules.sh.rhel: add dell-smm-hwmon (Scott Weaver)
+- Add CONFIG_INTEL_MEI_GSC_PROXY=m for DRM 9.4 stable backport (Mika Penttilä)
+- Set configs for ZRAM_TRACK_ENTRY_ACTIME (Justin M. Forbes)
+- Add python3-pyyaml to buildreqs for kernel-docs (Justin M. Forbes)
+- Add nb7vpq904m to singlemods for ppc64le (Thorsten Leemhuis)
+- include drm bridge helpers in kernel-core package (Thorsten Leemhuis)
+- Add dell-smm-hwmon to singlemods (Thorsten Leemhuis)
+- Add drm_gem_shmem_test to mod-internal.list (Thorsten Leemhuis)
+- redhat: kABI: add missing RH_KABI_SIZE_ALIGN_CHECKS Kconfig option (Sabrina Dubroca)
+- redhat: rh_kabi: introduce RH_KABI_EXCLUDE_WITH_SIZE (Sabrina Dubroca)
+- redhat: rh_kabi: move semicolon inside __RH_KABI_CHECK_SIZE (Sabrina Dubroca)
+- Fix up ZRAM_TRACK_ENTRY_ACTIME in pending (Justin M. Forbes)
+- random: replace import_single_range() with import_ubuf() (Justin M. Forbes)
+- Flip CONFIG_INTEL_PMC_CORE to m for Fedora (Justin M. Forbes)
+- Add CONFIG_ZRAM_TRACK_ENTRY_ACTIME=y to avoid a mismatch (Justin M. Forbes)
- common: cleanup MX3_IPU (Peter Robinson)
- all: The Octeon MDIO driver is aarch64/mips (Peter Robinson)
- common: rtc: remove bq4802 config (Peter Robinson)
@@ -107,180 +151,36 @@ Resolves:
- uki-virt: add virtiofs dracut module (Gerd Hoffmann)
- common: disable the FB device creation (Peter Robinson)
- s390x: There's no FB on Z-series (Peter Robinson)
-- Linux v6.7.1
-Resolves: rhbz#2120968, rhbz#2166911
-
-* Mon Jan 08 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-68]
- fedora: aarch64: enable SM_VIDEOCC_8350 (Peter Robinson)
-- Linux v6.7.0
-Resolves:
-
-* Sun Jan 07 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc8.52b1853b080a.67]
-- Linux v6.7.0-0.rc8.52b1853b080a
-Resolves:
-
-* Sat Jan 06 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc8.95c8a35f1c01.66]
- fedora: arm64: enable ethernet on newer TI industrial (Peter Robinson)
- fedora: arm64: Disable VIDEO_IMX_MEDIA (Peter Robinson)
- fedora: use common config for Siemens Simatic IPC (Peter Robinson)
- fedora: arm: enable Rockchip SPI flash (Peter Robinson)
- fedora: arm64: enable DRM_TI_SN65DSI83 (Peter Robinson)
-- Linux v6.7.0-0.rc8.95c8a35f1c01
-Resolves:
-
-* Fri Jan 05 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc8.1f874787ed9a.65]
-- Linux v6.7.0-0.rc8.1f874787ed9a
-Resolves:
-
-* Thu Jan 04 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc8.ac865f00af29.64]
-- Linux v6.7.0-0.rc8.ac865f00af29
-Resolves:
-
-* Wed Jan 03 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc8.63]
- kernel.spec: remove kernel-smp reference from scripts (Jan Stancek)
-Resolves:
-
-* Tue Jan 02 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc8.62]
- redhat: do not compress the full kernel changelog in the src.rpm (Herton R. Krzesinski)
-Resolves:
-
-* Mon Jan 01 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc8.61]
-- Linux v6.7.0-0.rc8
-Resolves:
-
-* Sun Dec 31 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc7.453f5db0619e.60]
-- Linux v6.7.0-0.rc7.453f5db0619e
-Resolves:
-
-* Sat Dec 30 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc7.f016f7547aee.59]
- Auto consolidate configs for the 6.7 cycle (Justin M. Forbes)
-- Linux v6.7.0-0.rc7.f016f7547aee
-Resolves:
-
-* Fri Dec 29 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc7.8735c7c84d1b.58]
-- Linux v6.7.0-0.rc7.8735c7c84d1b
-Resolves:
-
-* Thu Dec 28 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc7.f5837722ffec.57]
-- Linux v6.7.0-0.rc7.f5837722ffec
-Resolves:
-
-* Tue Dec 26 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc7.fbafc3e621c3.56]
-- Linux v6.7.0-0.rc7.fbafc3e621c3
-Resolves:
-
-* Mon Dec 25 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc7.55]
- Enable sound for a line of Huawei laptops (TomZanna)
-Resolves:
-
-* Sun Dec 24 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc7.54]
-- Linux v6.7.0-0.rc7
-Resolves:
-
-* Sat Dec 23 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc6.5254c0cbc92d.53]
-- Linux v6.7.0-0.rc6.5254c0cbc92d
-Resolves:
-
-* Fri Dec 22 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc6.24e0d2e527a3.52]
- fedora: a few cleanups and driver enablements (Peter Robinson)
- fedora: arm64: cleanup Allwinner Pinctrl drivers (Peter Robinson)
- fedora: aarch64: Enable some DW drivers (Peter Robinson)
-- Linux v6.7.0-0.rc6.24e0d2e527a3
-Resolves:
-
-* Thu Dec 21 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc6.a4aebe936554.51]
- redhat: ship all the changelog from source git into kernel-doc (Herton R. Krzesinski)
- redhat: create an empty changelog file when changing its name (Herton R. Krzesinski)
-- Linux v6.7.0-0.rc6.a4aebe936554
-Resolves:
-
-* Wed Dec 20 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc6.55cb5f43689d.50]
- redhat/self-test: Remove --all from git query (Prarit Bhargava)
-- Linux v6.7.0-0.rc6.55cb5f43689d
-Resolves:
-
-* Tue Dec 19 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc6.2cf4f94d8e86.49]
-- Linux v6.7.0-0.rc6.2cf4f94d8e86
-Resolves:
-
-* Mon Dec 18 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc6.48]
- Disable accel drivers for Fedora x86 (Kate Hsuan)
- redhat: scripts: An automation script for disabling unused driver for x86 (Kate Hsuan)
- Fix up Fedora LJCA configs and filters (Justin M. Forbes)
-- Linux v6.7.0-0.rc6
-Resolves:
-
-* Sun Dec 17 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc5.3b8a9b2e6809.47]
-- Linux v6.7.0-0.rc5.3b8a9b2e6809
-Resolves:
-
-* Sat Dec 16 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc5.c8e97fc6b4c0.46]
- Fedora configs for 6.7 (Justin M. Forbes)
-- Linux v6.7.0-0.rc5.c8e97fc6b4c0
-Resolves:
-
-* Fri Dec 15 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc5.3f7168591ebf.45]
-- Linux v6.7.0-0.rc5.3f7168591ebf
-Resolves:
-
-* Thu Dec 14 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc5.5bd7ef53ffe5.44]
-- Linux v6.7.0-0.rc5.5bd7ef53ffe5
-Resolves:
-
-* Wed Dec 13 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc5.88035e5694a8.43]
- Some Fedora config updates for MLX5 (Justin M. Forbes)
- Turn on DRM_ACCEL drivers for Fedora (Justin M. Forbes)
-- Linux v6.7.0-0.rc5.88035e5694a8
-Resolves:
-
-* Tue Dec 12 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc5.26aff849438c.42]
- redhat: enable the kfence test (Nico Pache)
-- Linux v6.7.0-0.rc5.26aff849438c
-Resolves:
-
-* Mon Dec 11 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc5.41]
- redhat/configs: Enable UCLAMP_TASK for PipeWire and WirePlumber (Neal Gompa)
-- Linux v6.7.0-0.rc5
-Resolves:
-
-* Sun Dec 10 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc4.c527f5606aa5.40]
-- Linux v6.7.0-0.rc4.c527f5606aa5
-Resolves:
-
-* Sat Dec 09 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc4.f2e8a57ee903.39]
-- Linux v6.7.0-0.rc4.f2e8a57ee903
-Resolves:
-
-* Fri Dec 08 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc4.5e3f5b81de80.38]
- Turn on CONFIG_SECURITY_DMESG_RESTRICT for Fedora (Justin M. Forbes)
-- Linux v6.7.0-0.rc4.5e3f5b81de80
-Resolves:
-
-* Wed Dec 06 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc4.bee0e7762ad2.37]
- Turn off shellcheck for the fedora-stable-release script (Justin M. Forbes)
-Resolves:
-
-* Tue Dec 05 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc4.bee0e7762ad2.36]
- Add some initial Fedora stable branch script to redhat/scripts/fedora/ (Justin M. Forbes)
-- Linux v6.7.0-0.rc4.bee0e7762ad2
-Resolves:
-
-* Mon Dec 04 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc4.35]
-- Linux v6.7.0-0.rc4
-Resolves:
-
-* Sun Dec 03 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc3.968f35f4ab1c.34]
-- Linux v6.7.0-0.rc3.968f35f4ab1c
-Resolves:
-
-* Sat Dec 02 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc3.815fb87b7530.33]
- redhat: disable iptables-legacy compatibility layer (Florian Westphal)
- redhat: disable dccp conntrack support (Florian Westphal)
- configs: enable netfilter_netlink_hook in fedora too (Florian Westphal)
-- Linux v6.7.0-0.rc3.815fb87b7530
-Resolves:
-
-* Fri Dec 01 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc3.994d5c58e50e.32]
- ext4: Mark mounting fs-verity filesystems as tech-preview (Alexander Larsson)
- erofs: Add tech preview markers at mount (Alexander Larsson)
- Enable fs-verity (Alexander Larsson)
@@ -288,151 +188,30 @@ Resolves:
- aarch64: enable uki (Gerd Hoffmann)
- redhat: enable CONFIG_SND_SOC_INTEL_SOF_DA7219_MACH as a module for x86 (Patrick Talbert)
- Turn CONFIG_MFD_CS42L43_SDW on for RHEL (Justin M. Forbes)
-- Linux v6.7.0-0.rc3.994d5c58e50e
-Resolves:
-
-* Thu Nov 30 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc3.3b47bc037bd4.31]
-- Linux v6.7.0-0.rc3.3b47bc037bd4
-Resolves:
-
-* Wed Nov 29 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc3.18d46e76d7c2.30]
- Enable cryptographic acceleration config flags for PowerPC (Mamatha Inamdar)
- Also make vmlinuz-virt.efi world readable (Zbigniew Jędrzejewski-Szmek)
- Drop custom mode for System.map file (Zbigniew Jędrzejewski-Szmek)
-- Linux v6.7.0-0.rc3.18d46e76d7c2
-Resolves:
-
-* Tue Nov 28 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc3.df60cee26a2e.29]
- Add drm_exec_test to mod-internal.list for depmod to succeed (Mika Penttilä)
- RHEL 9.4 DRM backport (upto v6.6 kernel), sync Kconfigs (Mika Penttilä)
-- Linux v6.7.0-0.rc3.df60cee26a2e
-Resolves:
-
-* Mon Nov 27 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc3.28]
-- Linux v6.7.0-0.rc3
-Resolves:
-
-* Sun Nov 26 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc2.090472ed9c92.27]
-- Linux v6.7.0-0.rc2.090472ed9c92
-Resolves:
-
-* Sat Nov 25 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc2.0f5cc96c367f.26]
-- Linux v6.7.0-0.rc2.0f5cc96c367f
-Resolves:
-
-* Fri Nov 24 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc2.f1a09972a45a.25]
-- Linux v6.7.0-0.rc2.f1a09972a45a
-Resolves:
-
-* Thu Nov 23 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc2.9b6de136b5f0.24]
- Turn on USB_DWC3 for Fedora (rhbz 2250955) (Justin M. Forbes)
-- Linux v6.7.0-0.rc2.9b6de136b5f0
-Resolves:
-
-* Wed Nov 22 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc2.c2d5304e6c64.23]
- redhat/configs: Move IOMMUFD to common (Alex Williamson)
- redhat: Really remove cpupower files (Prarit Bhargava)
- redhat: remove update_scripts.sh (Prarit Bhargava)
-- Linux v6.7.0-0.rc2.c2d5304e6c64
-Resolves:
-
-* Mon Nov 20 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc2.22]
- Fix s390 zfcpfdump bpf build failures for cgroups (Don Zickus)
-- Linux v6.7.0-0.rc2
-Resolves:
-
-* Sun Nov 19 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc1.037266a5f723.21]
-- Linux v6.7.0-0.rc1.037266a5f723
-Resolves:
-
-* Sat Nov 18 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc1.791c8ab095f7.20]
-- Linux v6.7.0-0.rc1.791c8ab095f7
-Resolves:
-
-* Fri Nov 17 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc1.7475e51b8796.19]
-- Linux v6.7.0-0.rc1.7475e51b8796
-Resolves:
-
-* Wed Nov 15 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc1.c42d9eeef8e5.18]
-- Linux v6.7.0-0.rc1.c42d9eeef8e5
-Resolves:
-
-* Tue Nov 14 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc1.9bacdd8996c7.17]
-- Linux v6.7.0-0.rc1.9bacdd8996c7
-Resolves:
-
-* Mon Nov 13 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc1.16]
-- Linux v6.7.0-0.rc1
-Resolves:
-
-* Sun Nov 12 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc0.1b907d050735.15]
-- Linux v6.7.0-0.rc0.1b907d050735
-Resolves:
-
-* Sat Nov 11 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc0.3ca112b71f35.14]
- Flip CONFIG_NVME_AUTH to m in pending (Justin M. Forbes)
-- Linux v6.7.0-0.rc0.3ca112b71f35
-Resolves:
-
-* Fri Nov 10 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc0.89cdf9d55601.13]
-- Linux v6.7.0-0.rc0.89cdf9d55601
-Resolves:
-
-* Thu Nov 09 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc0.6bc986ab839c.12]
-- Linux v6.7.0-0.rc0.6bc986ab839c
-Resolves:
-
-* Wed Nov 08 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc0.305230142ae0.11]
- Turn CONFIG_SND_SOC_INTEL_AVS_MACH_RT5514 on for Fedora x86 (Jason Montleon)
- kernel/rh_messages.c: Mark functions as possibly unused (Prarit Bhargava)
- Add snd-hda-cirrus-scodec-test to mod-internal.list (Scott Weaver)
-- Linux v6.7.0-0.rc0.305230142ae0
-Resolves:
-
-* Tue Nov 07 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc0.be3ca57cfb77.10]
- Turn off BPF_SYSCALL in pending for zfcpdump (Justin M. Forbes)
-- Linux v6.7.0-0.rc0.be3ca57cfb77
-Resolves:
-
-* Mon Nov 06 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc0.d2f51b3516da.9]
-- Linux v6.7.0-0.rc0.d2f51b3516da
-Resolves:
-
-* Sun Nov 05 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc0.1c41041124bd.8]
-- Linux v6.7.0-0.rc0.1c41041124bd
-Resolves:
-
-* Sat Nov 04 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc0.90b0c2b2edd1.7]
- Add mean_and_variance_test to mod-internal.list (Justin M. Forbes)
- Add cfg80211-tests and mac80211-tests to mod-internal.list (Justin M. Forbes)
-- Linux v6.7.0-0.rc0.90b0c2b2edd1
-Resolves:
-
-* Fri Nov 03 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc0.8f6f76a6a29f.6]
- Turn on CONFIG_MFD_CS42L43_SDW for RHEL in pending (Justin M. Forbes)
-- Linux v6.7.0-0.rc0.8f6f76a6a29f
-Resolves:
-
-* Fri Nov 03 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc0.21e80f3841c0.5]
- Turn on bcachefs for Fedora (Justin M. Forbes)
- redhat: configs: fedora: Enable QSEECOM and friends (Andrew Halaney)
-Resolves:
-
-* Thu Nov 02 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc0.21e80f3841c0.4]
- Add clk-fractional-divider_test to mod-internal.list (Thorsten Leemhuis)
- Add gso_test to mod-internal.list (Thorsten Leemhuis)
- Add property-entry-test to mod-internal.list (Thorsten Leemhuis)
-- Linux v6.7.0-0.rc0.21e80f3841c0
-Resolves:
-
-* Wed Nov 01 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc0.8bc9e6515183.3]
- Fedora 6.7 configs part 1 (Justin M. Forbes)
-- Trim changelog after version bump (Justin M. Forbes)
-- Linux v6.7.0-0.rc0.8bc9e6515183
-Resolves:
-
-* Tue Oct 31 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc0.5a6a09e97199.2]
-- Reset RHEL_RELEASE for rebase (Justin M. Forbes)
- [Scheduled job] Catch config mismatches early during upstream merge (Don Zickus)
- redhat/self-test: Update data for KABI xz change (Prarit Bhargava)
- redhat/scripts: Switch KABI tarballs to xz (Prarit Bhargava)
@@ -514,7 +293,6 @@ Resolves:
- redhat: bump libcpupower soname to match upstream (Patrick Talbert)
- Turn on MEMFD_CREATE in pending as it is selected by CONFIG_TMPFS (Justin M. Forbes)
- redhat: drop unneeded build-time dependency gcc-plugin-devel (Coiby Xu)
-- Reset RHEL release and trim changelog after rebase (Justin M. Forbes)
- all: x86: move wayward x86 specific config home (Peter Robinson)
- all: de-dupe non standard config options (Peter Robinson)
- all: x86: clean up microcode loading options (Peter Robinson)
@@ -643,7 +421,6 @@ Resolves:
- Add strcat_kunit to mod-internal.list (Thorsten Leemhuis)
- Add input_test to mod-intenal.list (Thorsten Leemhuis)
- Revert "Remove EXPERT from ARCH_FORCE_MAX_ORDER for aarch64" (Justin M. Forbes)
-- Reset the release number and dedup the changelog after rebase (Justin M. Forbes)
- Fix up rebase issue with CONFIG_ARCH_FORCE_MAX_ORDER (Justin M. Forbes)
- redhat/kernel.spec.template: Disable 'extracting debug info' messages (Prarit Bhargava)
- kernel/rh_messages.c: Another gcc12 warning on redundant NULL test (Florian Weimer) [2216678]
@@ -746,8 +523,6 @@ Resolves:
- Add apple_bl to fedora module_filter (Justin M. Forbes)
- Fix up some config mismatches in new Fedora config items (Justin M. Forbes)
- redhat/configs: disable CONFIG_USB_NET_SR9700 for aarch64 (Jose Ignacio Tornos Martinez)
-- Reset changelog for 6.4 series (Justin M. Forbes)
-- Reset RHEL_RELEASE for the 6.4 cycle (Justin M. Forbes)
- Fix up the RHEL configs for xtables and ipset (Justin M. Forbes)
- ark: enable wifi on aarch64 (Íñigo Huguet)
- fedora: wifi: hermes: disable 802.11b driver (Peter Robinson)
@@ -831,8 +606,6 @@ Resolves:
- kernel.spec: move modules.builtin to kernel-core (Jan Stancek)
- Turn on IDLE_INJECT for x86 (Justin M. Forbes)
- Flip CONFIG_IDLE_INJECT in pending (Justin M. Forbes)
-- Trim Changelog for 6.3 series (Justin M. Forbes)
-- Reset RHEL_RELEASE to 0 for the 6.3 cycle (Justin M. Forbes)
- redhat/configs: Enable CONFIG_V4L_TEST_DRIVERS related drivers (Enric Balletbo i Serra)
- redhat/configs: Enable UCSI_CCG support (David Marlin)
- Fix underline mark-up after text change (Justin M. Forbes)
@@ -913,8 +686,6 @@ Resolves:
- Add drm_kunit_helpers to mod-internal.list (Justin M. Forbes)
- Fix up configs for Fedora so we don't have a mismatch (Justin M. Forbes)
- Turn on CONFIG_SQUASHFS_DECOMP_SINGLE in pending (Justin M. Forbes)
-- Trim changelog for 6.2 cycle (Justin M. Forbes)
-- Reset RHEL_RELEASE for the 6.2 window. (Justin M. Forbes)
- redhat/kernel.spec.template: Fix cpupower file error (Prarit Bhargava)
- redhat/configs: aarhc64: clean up some erratum configs (Mark Salter)
- More Fedora configs for 6.1 as deps were switched on (Justin M. Forbes)
@@ -1009,8 +780,6 @@ Resolves:
- Add module filters for Fedora as acpi video has new deps (Justin M. Forbes)
- One more mismatch (Justin M. Forbes)
- Fix up pending for mismatches (Justin M. Forbes)
-- Trim changelog with the reset (Justin M. Forbes)
-- Reset the RHEL_RELEASE in Makefile.rhelver (Justin M. Forbes)
- Forgot too remove this from pending, it is set properly in ark (Justin M. Forbes)
- redhat/Makefile: Add DIST to git tags for RHEL (Prarit Bhargava)
- redhat/configs: Move CONFIG_ARM_SMMU_QCOM_DEBUG to common (Jerry Snitselaar)
@@ -1104,7 +873,6 @@ Resolves:
- Leave CONFIG_ACPI_VIDEO on for x86 only (Justin M. Forbes)
- Fix BLAKE2S_ARM and BLAKE2S_X86 configs in pending (Justin M. Forbes)
- Fix pending for ACPI_VIDEO (Justin M. Forbes)
-- Reset release (Justin M. Forbes)
- redhat/configs: Fix rm warning on config warnings (Eric Chanudet)
- redhat/Makefile: Deprecate PREBUILD_GIT_ONLY variable (Prarit Bhargava)
- redhat/Makefile: Deprecate SINGLE_TARBALL variable (Prarit Bhargava)
@@ -1205,9 +973,7 @@ Resolves:
- Fix versioning on stable Fedora (Justin M. Forbes)
- Enable PAGE_POOL_STATS for arm only (Justin M. Forbes)
- Revert "Merge branch 'fix-ci-20220523' into 'os-build'" (Patrick Talbert)
-- Fix changelog one more time post rebase (Justin M. Forbes)
- Flip CONFIG_RADIO_ADAPTERS to module for Fedora (Justin M. Forbes)
-- Reset Release for 5.19 (Justin M. Forbes)
- redhat/Makefile: Drop quotation marks around string definitions (Prarit Bhargava)
- Fedora: arm: Updates for QCom devices (Peter Robinson)
- Fedora arm and generic updates for 5.17 (Peter Robinson)
@@ -1368,9 +1134,7 @@ Resolves:
- SATA_MOBILE_LPM_POLICY is now SATA_LPM_POLICY (Justin M. Forbes)
- Define SNAPSHOT correctly when VERSION_ON_UPSTREAM is 0 (Justin M. Forbes)
- redhat/Makefile: Fix dist-git (Prarit Bhargava)
-- Clean up the changelog (Justin M. Forbes)
- Change the pending-ark CONFIG_DAX to y due to mismatch (Justin M. Forbes)
-- Reset Makefile.rhelver for the 5.18 cycle (Justin M. Forbes)
- Enable net reference count trackers in all debug kernels (Jiri Benc)
- redhat/Makefile: Reorganize variables (Prarit Bhargava)
- redhat/Makefile: Add some descriptions (Prarit Bhargava)
@@ -1556,7 +1320,6 @@ Resolves:
- redhat/configs: enable KEXEC_SIG for aarch64 RHEL (Coiby Xu) [1994858]
- Fix up fedora and pending configs for PREEMPT to end mismatch (Justin M. Forbes)
- Enable binder for fedora (Justin M. Forbes)
-- Reset RHEL_RELEASE for 5.16 (Justin M. Forbes)
- redhat: configs: Update configs for vmware (Kamal Heib)
- Fedora configs for 5.15 (Justin M. Forbes)
- redhat/kernel.spec.template: don't hardcode gcov arches (Jan Stancek)
@@ -2529,5 +2292,6 @@ Resolves:
- [initial commit] Add scripts (Laura Abbott)
- [initial commit] Add configs (Laura Abbott)
- [initial commit] Add Makefiles (Laura Abbott)
-- Linux v6.7.0-0.rc0.5a6a09e97199
-Resolves: rhbz#1471185, rhbz#1495307, rhbz#1509329, rhbz#1518076, rhbz#1518874, rhbz#1519554, rhbz#1546831, rhbz#1559877, rhbz#1561171, rhbz#1563590, rhbz#1565704, rhbz#1565717, rhbz#1572321, rhbz#1574502, rhbz#1590829, rhbz#1595918, rhbz#1598366, rhbz#1602033, rhbz#1609604, rhbz#1610493, rhbz#1613522, rhbz#1638087, rhbz#1652256, rhbz#1652266, rhbz#1663728, rhbz#1670017, rhbz#1722136, rhbz#1730649, rhbz#1802694, rhbz#1810301, rhbz#1821565, rhbz#1831065, rhbz#1855161, rhbz#1856174, rhbz#1856176, rhbz#1858592, rhbz#1858594, rhbz#1858596, rhbz#1858599, rhbz#1869674, rhbz#1871130, rhbz#1876435, rhbz#1876436, rhbz#1876977, rhbz#1877192, rhbz#1880486, rhbz#1890304, rhbz#1903201, rhbz#1915073, rhbz#1915290, rhbz#1930649, rhbz#1939095, rhbz#1940075, rhbz#1940794, rhbz#1943423, rhbz#1945002, rhbz#1945179, rhbz#1945477, rhbz#1947240, rhbz#1948340, rhbz#1952426, rhbz#1952863, rhbz#1953486, rhbz#1956988, rhbz#1957210, rhbz#1957219, rhbz#1957305, rhbz#1957636, rhbz#1957819, rhbz#1961178, rhbz#1962936, rhbz#1964537, rhbz#1967640, rhbz#1972795, rhbz#1976270, rhbz#1976835, rhbz#1976877, rhbz#1976884, rhbz#1977056, rhbz#1977529, rhbz#1978539, rhbz#1979379, rhbz#1981406, rhbz#1983298, rhbz#1986223, rhbz#1988254, rhbz#1988384, rhbz#1990040, rhbz#1993393, rhbz#1994858, rhbz#1998953, rhbz#2000835, rhbz#2002344, rhbz#2004233, rhbz#2004821, rhbz#2006813, rhbz#2007430, rhbz#2012226, rhbz#2014492, rhbz#2019377, rhbz#2020132, rhbz#2022578, rhbz#2023782, rhbz#2024595, rhbz#2025985, rhbz#2026319, rhbz#2027506, rhbz#2031547, rhbz#2032758, rhbz#2034670, rhbz#2038999, rhbz#2040643, rhbz#2041184, rhbz#2041186, rhbz#2041365, rhbz#2041990, rhbz#2042240, rhbz#2042241, rhbz#2043141, rhbz#2044155, rhbz#2053836, rhbz#2054579, rhbz#2062054, rhbz#2062909, rhbz#2071969, rhbz#2089765, rhbz#2115876, rhbz#2122595, rhbz#2140017, rhbz#2142658, rhbz#2149273, rhbz#2153073, rhbz#2188441, rhbz#2208834, rhbz#2216678, rhbz#2227793, rhbz#2231407
+- Linux v6.8.0
+Resolves: rhbz#1471185, rhbz#1495307, rhbz#1509329, rhbz#1518076, rhbz#1518874, rhbz#1519554, rhbz#1546831, rhbz#1559877, rhbz#1561171, rhbz#1563590, rhbz#1565704, rhbz#1565717, rhbz#1572321, rhbz#1574502, rhbz#1590829, rhbz#1595918, rhbz#1598366, rhbz#1602033, rhbz#1609604, rhbz#1610493, rhbz#1613522, rhbz#1638087, rhbz#1652256, rhbz#1652266, rhbz#1663728, rhbz#1670017, rhbz#1722136, rhbz#1730649, rhbz#1802694, rhbz#1810301, rhbz#1821565, rhbz#1831065, rhbz#1855161, rhbz#1856174, rhbz#1856176, rhbz#1858592, rhbz#1858594, rhbz#1858596, rhbz#1858599, rhbz#1869674, rhbz#1871130, rhbz#1876435, rhbz#1876436, rhbz#1876977, rhbz#1877192, rhbz#1880486, rhbz#1890304, rhbz#1903201, rhbz#1915073, rhbz#1915290, rhbz#1930649, rhbz#1939095, rhbz#1940075, rhbz#1940794, rhbz#1943423, rhbz#1945002, rhbz#1945179, rhbz#1945477, rhbz#1947240, rhbz#1948340, rhbz#1952426, rhbz#1952863, rhbz#1953486, rhbz#1956988, rhbz#1957210, rhbz#1957219, rhbz#1957305, rhbz#1957636, rhbz#1957819, rhbz#1961178, rhbz#1962936, rhbz#1964537, rhbz#1967640, rhbz#1972795, rhbz#1976270, rhbz#1976835, rhbz#1976877, rhbz#1976884, rhbz#1977056, rhbz#1977529, rhbz#1978539, rhbz#1979379, rhbz#1981406, rhbz#1983298, rhbz#1986223, rhbz#1988254, rhbz#1988384, rhbz#1990040, rhbz#1993393, rhbz#1994858, rhbz#1998953, rhbz#2000835, rhbz#2002344, rhbz#2004233, rhbz#2004821, rhbz#2006813, rhbz#2007430, rhbz#2012226, rhbz#2014492, rhbz#2019377, rhbz#2020132, rhbz#2022578, rhbz#2023782, rhbz#2024595, rhbz#2025985, rhbz#2026319, rhbz#2027506, rhbz#2031547, rhbz#2032758, rhbz#2034670, rhbz#2038999, rhbz#2040643, rhbz#2041184, rhbz#2041186, rhbz#2041365, rhbz#2041990, rhbz#2042240, rhbz#2042241, rhbz#2043141, rhbz#2044155, rhbz#2053836, rhbz#2054579, rhbz#2062054, rhbz#2062909, rhbz#2071969, rhbz#2089765, rhbz#2115876, rhbz#2120968, rhbz#2122595, rhbz#2140017, rhbz#2142658, rhbz#2149273, rhbz#2153073, rhbz#2166911, rhbz#2188441, rhbz#2208834, rhbz#2216678, rhbz#2227793, rhbz#2231407, rhbz#2233269
+
diff --git a/SOURCES/linux-surface.patch b/SOURCES/linux-surface.patch
index 087417f..1a80ad4 100644
--- a/SOURCES/linux-surface.patch
+++ b/SOURCES/linux-surface.patch
@@ -1,4 +1,4 @@
-From c9479d2ee549e4b5392c5f788d9905244404e207 Mon Sep 17 00:00:00 2001
+From 45a9e7f97fc36942e3d70a78fe5313fa78733933 Mon Sep 17 00:00:00 2001
From: Tsuchiya Yuto <kitakar@gmail.com>
Date: Sun, 18 Oct 2020 16:42:44 +0900
Subject: [PATCH] (surface3-oemb) add DMI matches for Surface 3 with broken DMI
@@ -58,10 +58,10 @@ index c15ed7a12784..1ec8edb5aafa 100644
{ }
};
diff --git a/sound/soc/codecs/rt5645.c b/sound/soc/codecs/rt5645.c
-index edcb85bd8ea7..cea19fa3fa56 100644
+index 20191a4473c2..5ba599b5aba6 100644
--- a/sound/soc/codecs/rt5645.c
+++ b/sound/soc/codecs/rt5645.c
-@@ -3753,6 +3753,15 @@ static const struct dmi_system_id dmi_platform_data[] = {
+@@ -3768,6 +3768,15 @@ static const struct dmi_system_id dmi_platform_data[] = {
},
.driver_data = (void *)&intel_braswell_platform_data,
},
@@ -97,9 +97,9 @@ index 5e2ec60e2954..207868c699f2 100644
};
--
-2.43.0
+2.44.0
-From 38181ea8d1f9130ce6d677d306f819d2fa3b5f57 Mon Sep 17 00:00:00 2001
+From 2c7ff35a85341dcd8fa2ea575088881df9dea874 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jonas=20Dre=C3=9Fler?= <verdre@v0yd.nl>
Date: Tue, 3 Nov 2020 13:28:04 +0100
Subject: [PATCH] mwifiex: Add quirk resetting the PCI bridge on MS Surface
@@ -264,9 +264,9 @@ index d6ff964aec5b..5d30ae39d65e 100644
void mwifiex_initialize_quirks(struct pcie_service_card *card);
int mwifiex_pcie_reset_d3cold_quirk(struct pci_dev *pdev);
--
-2.43.0
+2.44.0
-From 86149f1c99b17f67d717419af83f3ec76315e35b Mon Sep 17 00:00:00 2001
+From 4a326d9e87d1dc4945903560d3d22fbd69a8962c Mon Sep 17 00:00:00 2001
From: Tsuchiya Yuto <kitakar@gmail.com>
Date: Sun, 4 Oct 2020 00:11:49 +0900
Subject: [PATCH] mwifiex: pcie: disable bridge_d3 for Surface gen4+
@@ -419,9 +419,9 @@ index 5d30ae39d65e..c14eb56eb911 100644
void mwifiex_initialize_quirks(struct pcie_service_card *card);
int mwifiex_pcie_reset_d3cold_quirk(struct pci_dev *pdev);
--
-2.43.0
+2.44.0
-From 23775dc0be26e58d04574ab75768cedd8b0076f8 Mon Sep 17 00:00:00 2001
+From dddda6f9c25716dea1265f71b8286936afa192b5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jonas=20Dre=C3=9Fler?= <verdre@v0yd.nl>
Date: Thu, 25 Mar 2021 11:33:02 +0100
Subject: [PATCH] Bluetooth: btusb: Lower passive lescan interval on Marvell
@@ -457,7 +457,7 @@ Patchset: mwifiex
1 file changed, 15 insertions(+)
diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
-index b8e9de887b5d..66a418ae9584 100644
+index d31edad7a056..fc08e0c51c87 100644
--- a/drivers/bluetooth/btusb.c
+++ b/drivers/bluetooth/btusb.c
@@ -65,6 +65,7 @@ static struct usb_driver btusb_driver;
@@ -476,7 +476,7 @@ index b8e9de887b5d..66a418ae9584 100644
/* Intel Bluetooth devices */
{ USB_DEVICE(0x8087, 0x0025), .driver_info = BTUSB_INTEL_COMBINED },
-@@ -4399,6 +4401,19 @@ static int btusb_probe(struct usb_interface *intf,
+@@ -4401,6 +4403,19 @@ static int btusb_probe(struct usb_interface *intf,
if (id->driver_info & BTUSB_MARVELL)
hdev->set_bdaddr = btusb_set_bdaddr_marvell;
@@ -497,9 +497,9 @@ index b8e9de887b5d..66a418ae9584 100644
(id->driver_info & BTUSB_MEDIATEK)) {
hdev->setup = btusb_mtk_setup;
--
-2.43.0
+2.44.0
-From 825328cce718ba6de0fce529e8fd1f4cd6b94dde Mon Sep 17 00:00:00 2001
+From 7b414f11dfa0be3204b0a43b82a75744f8218d57 Mon Sep 17 00:00:00 2001
From: Maximilian Luz <luzmaximilian@gmail.com>
Date: Sat, 27 Feb 2021 00:45:52 +0100
Subject: [PATCH] ath10k: Add module parameters to override board files
@@ -521,10 +521,10 @@ Patchset: ath10k
1 file changed, 58 insertions(+)
diff --git a/drivers/net/wireless/ath/ath10k/core.c b/drivers/net/wireless/ath/ath10k/core.c
-index 6cdb225b7eac..19c036751fb1 100644
+index 0032f8aa892f..17717b53316b 100644
--- a/drivers/net/wireless/ath/ath10k/core.c
+++ b/drivers/net/wireless/ath/ath10k/core.c
-@@ -38,6 +38,9 @@ static bool fw_diag_log;
+@@ -39,6 +39,9 @@ static bool fw_diag_log;
/* frame mode values are mapped as per enum ath10k_hw_txrx_mode */
unsigned int ath10k_frame_mode = ATH10K_HW_TXRX_NATIVE_WIFI;
@@ -534,7 +534,7 @@ index 6cdb225b7eac..19c036751fb1 100644
unsigned long ath10k_coredump_mask = BIT(ATH10K_FW_CRASH_DUMP_REGISTERS) |
BIT(ATH10K_FW_CRASH_DUMP_CE_DATA);
-@@ -50,6 +53,9 @@ module_param(fw_diag_log, bool, 0644);
+@@ -51,6 +54,9 @@ module_param(fw_diag_log, bool, 0644);
module_param_named(frame_mode, ath10k_frame_mode, uint, 0644);
module_param_named(coredump_mask, ath10k_coredump_mask, ulong, 0444);
@@ -544,7 +544,7 @@ index 6cdb225b7eac..19c036751fb1 100644
MODULE_PARM_DESC(debug_mask, "Debugging mask");
MODULE_PARM_DESC(uart_print, "Uart target debugging");
MODULE_PARM_DESC(skip_otp, "Skip otp failure for calibration in testmode");
-@@ -59,6 +65,9 @@ MODULE_PARM_DESC(frame_mode,
+@@ -60,6 +66,9 @@ MODULE_PARM_DESC(frame_mode,
MODULE_PARM_DESC(coredump_mask, "Bitfield of what to include in firmware crash file");
MODULE_PARM_DESC(fw_diag_log, "Diag based fw log debugging");
@@ -554,7 +554,7 @@ index 6cdb225b7eac..19c036751fb1 100644
static const struct ath10k_hw_params ath10k_hw_params_list[] = {
{
.id = QCA988X_HW_2_0_VERSION,
-@@ -911,6 +920,42 @@ static int ath10k_init_configure_target(struct ath10k *ar)
+@@ -928,6 +937,42 @@ static int ath10k_init_configure_target(struct ath10k *ar)
return 0;
}
@@ -597,7 +597,7 @@ index 6cdb225b7eac..19c036751fb1 100644
static const struct firmware *ath10k_fetch_fw_file(struct ath10k *ar,
const char *dir,
const char *file)
-@@ -925,6 +970,19 @@ static const struct firmware *ath10k_fetch_fw_file(struct ath10k *ar,
+@@ -942,6 +987,19 @@ static const struct firmware *ath10k_fetch_fw_file(struct ath10k *ar,
if (dir == NULL)
dir = ".";
@@ -618,13 +618,14 @@ index 6cdb225b7eac..19c036751fb1 100644
ret = firmware_request_nowarn(&fw, filename, ar->dev);
ath10k_dbg(ar, ATH10K_DBG_BOOT, "boot fw request '%s': %d\n",
--
-2.43.0
+2.44.0
-From f4e5ac291e877f3e7e5d888f4965310eb85379f5 Mon Sep 17 00:00:00 2001
+From 4a1fdfebd3e84fe581b512f73bbc551ec9e2d0e8 Mon Sep 17 00:00:00 2001
From: Dorian Stoll <dorian.stoll@tmsp.io>
Date: Thu, 30 Jul 2020 13:21:53 +0200
-Subject: [PATCH] misc: mei: Add missing IPTS device IDs
+Subject: [PATCH] mei: me: Add Icelake device ID for iTouch
+Signed-off-by: Dorian Stoll <dorian.stoll@tmsp.io>
Patchset: ipts
---
drivers/misc/mei/hw-me-regs.h | 1 +
@@ -632,7 +633,7 @@ Patchset: ipts
2 files changed, 2 insertions(+)
diff --git a/drivers/misc/mei/hw-me-regs.h b/drivers/misc/mei/hw-me-regs.h
-index 961e5d53a27a..860f99b6ecd6 100644
+index aac36750d2c5..2ba8db8a9583 100644
--- a/drivers/misc/mei/hw-me-regs.h
+++ b/drivers/misc/mei/hw-me-regs.h
@@ -92,6 +92,7 @@
@@ -644,7 +645,7 @@ index 961e5d53a27a..860f99b6ecd6 100644
#define MEI_DEV_ID_JSP_N 0x4DE0 /* Jasper Lake Point N */
diff --git a/drivers/misc/mei/pci-me.c b/drivers/misc/mei/pci-me.c
-index 676d566f38dd..6b37dd1f8b2a 100644
+index 8cf636c54032..078d3e773cda 100644
--- a/drivers/misc/mei/pci-me.c
+++ b/drivers/misc/mei/pci-me.c
@@ -97,6 +97,7 @@ static const struct pci_device_id mei_me_pci_tbl[] = {
@@ -656,12 +657,12 @@ index 676d566f38dd..6b37dd1f8b2a 100644
{MEI_PCI_DEVICE(MEI_DEV_ID_TGP_LP, MEI_ME_PCH15_CFG)},
--
-2.43.0
+2.44.0
-From 4c91dcde022856325e3babe1a1b9e01fcc21ab0f Mon Sep 17 00:00:00 2001
+From b1e22125c8f241f49cc3a6b7eaa0b6430bb1f1ce Mon Sep 17 00:00:00 2001
From: Liban Hannan <liban.p@gmail.com>
Date: Tue, 12 Apr 2022 23:31:12 +0100
-Subject: [PATCH] iommu: ipts: use IOMMU passthrough mode for IPTS
+Subject: [PATCH] iommu: Use IOMMU passthrough mode for IPTS
Adds a quirk so that IOMMU uses passthrough mode for the IPTS device.
Otherwise, when IOMMU is enabled, IPTS produces DMAR errors like:
@@ -674,25 +675,30 @@ https://bugs.launchpad.net/bugs/1958004
Fixed with the following patch which this patch basically copies:
https://launchpadlibrarian.net/586396847/43255ca.diff
+
+Signed-off-by: Dorian Stoll <dorian.stoll@tmsp.io>
Patchset: ipts
---
- drivers/iommu/intel/iommu.c | 24 ++++++++++++++++++++++++
- 1 file changed, 24 insertions(+)
+ drivers/iommu/intel/iommu.c | 29 +++++++++++++++++++++++++++++
+ 1 file changed, 29 insertions(+)
diff --git a/drivers/iommu/intel/iommu.c b/drivers/iommu/intel/iommu.c
-index 897159dba47d..cc6569613255 100644
+index 11652e0bcab3..6c01b1aebf27 100644
--- a/drivers/iommu/intel/iommu.c
+++ b/drivers/iommu/intel/iommu.c
-@@ -38,6 +38,8 @@
- #define IS_GFX_DEVICE(pdev) ((pdev->class >> 16) == PCI_BASE_CLASS_DISPLAY)
- #define IS_USB_DEVICE(pdev) ((pdev->class >> 8) == PCI_CLASS_SERIAL_USB)
+@@ -40,6 +40,11 @@
#define IS_ISA_DEVICE(pdev) ((pdev->class >> 8) == PCI_CLASS_BRIDGE_ISA)
-+#define IS_IPTS(pdev) ((pdev)->vendor == PCI_VENDOR_ID_INTEL && \
-+ ((pdev)->device == 0x9d3e))
#define IS_AZALIA(pdev) ((pdev)->vendor == 0x8086 && (pdev)->device == 0x3a3e)
++#define IS_IPTS(pdev) ( \
++ ((pdev)->vendor == PCI_VENDOR_ID_INTEL && (pdev)->device == 0x9D3E) || \
++ ((pdev)->vendor == PCI_VENDOR_ID_INTEL && (pdev)->device == 0x34E4) \
++ )
++
#define IOAPIC_RANGE_START (0xfee00000)
-@@ -291,12 +293,14 @@ int intel_iommu_enabled = 0;
+ #define IOAPIC_RANGE_END (0xfeefffff)
+ #define IOVA_START_ADDR (0x1000)
+@@ -148,12 +153,14 @@ int intel_iommu_enabled = 0;
EXPORT_SYMBOL_GPL(intel_iommu_enabled);
static int dmar_map_gfx = 1;
@@ -707,7 +713,7 @@ index 897159dba47d..cc6569613255 100644
const struct iommu_ops intel_iommu_ops;
static const struct iommu_dirty_ops intel_dirty_ops;
-@@ -2548,6 +2552,9 @@ static int device_def_domain_type(struct device *dev)
+@@ -2412,6 +2419,9 @@ static int device_def_domain_type(struct device *dev)
if ((iommu_identity_mapping & IDENTMAP_GFX) && IS_GFX_DEVICE(pdev))
return IOMMU_DOMAIN_IDENTITY;
@@ -717,7 +723,7 @@ index 897159dba47d..cc6569613255 100644
}
return 0;
-@@ -2855,6 +2862,9 @@ static int __init init_dmars(void)
+@@ -2719,6 +2729,9 @@ static int __init init_dmars(void)
if (!dmar_map_gfx)
iommu_identity_mapping |= IDENTMAP_GFX;
@@ -727,7 +733,7 @@ index 897159dba47d..cc6569613255 100644
check_tylersburg_isoch();
ret = si_domain_init(hw_pass_through);
-@@ -4977,6 +4987,17 @@ static void quirk_iommu_igfx(struct pci_dev *dev)
+@@ -4896,6 +4909,18 @@ static void quirk_iommu_igfx(struct pci_dev *dev)
dmar_map_gfx = 0;
}
@@ -739,26 +745,28 @@ index 897159dba47d..cc6569613255 100644
+ if (risky_device(dev))
+ return;
+
-+ pci_info(dev, "Passthrough IOMMU for IPTS\n");
++ pci_info(dev, "Disabling IOMMU for IPTS\n");
+ dmar_map_ipts = 0;
+}
++
/* G4x/GM45 integrated gfx dmar support is totally busted. */
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x2a40, quirk_iommu_igfx);
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x2e00, quirk_iommu_igfx);
-@@ -5012,6 +5033,9 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x1632, quirk_iommu_igfx);
+@@ -4931,6 +4956,10 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x1632, quirk_iommu_igfx);
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x163A, quirk_iommu_igfx);
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x163D, quirk_iommu_igfx);
+/* disable IPTS dmar support */
+DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x9D3E, quirk_iommu_ipts);
++DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x34E4, quirk_iommu_ipts);
+
static void quirk_iommu_rwbf(struct pci_dev *dev)
{
if (risky_device(dev))
--
-2.43.0
+2.44.0
-From 7a9591af425eafbb76700f7ab1ab3ae0c3a08e4c Mon Sep 17 00:00:00 2001
+From fa7796bc06659b87f47d8921d0441314612870b9 Mon Sep 17 00:00:00 2001
From: Dorian Stoll <dorian.stoll@tmsp.io>
Date: Sun, 11 Dec 2022 12:00:59 +0100
Subject: [PATCH] hid: Add support for Intel Precise Touch and Stylus
@@ -825,10 +833,10 @@ Patchset: ipts
create mode 100644 drivers/hid/ipts/thread.h
diff --git a/drivers/hid/Kconfig b/drivers/hid/Kconfig
-index 4ce74af79657..86c6c815bd5b 100644
+index 4c682c650704..a263e49b2ae2 100644
--- a/drivers/hid/Kconfig
+++ b/drivers/hid/Kconfig
-@@ -1341,4 +1341,6 @@ source "drivers/hid/amd-sfh-hid/Kconfig"
+@@ -1351,4 +1351,6 @@ source "drivers/hid/amd-sfh-hid/Kconfig"
source "drivers/hid/surface-hid/Kconfig"
@@ -836,10 +844,10 @@ index 4ce74af79657..86c6c815bd5b 100644
+
endif # HID_SUPPORT
diff --git a/drivers/hid/Makefile b/drivers/hid/Makefile
-index 8a06d0f840bc..2ef21b257d0b 100644
+index 082a728eac60..f4bad1b8d813 100644
--- a/drivers/hid/Makefile
+++ b/drivers/hid/Makefile
-@@ -169,3 +169,5 @@ obj-$(INTEL_ISH_FIRMWARE_DOWNLOADER) += intel-ish-hid/
+@@ -170,3 +170,5 @@ obj-$(INTEL_ISH_FIRMWARE_DOWNLOADER) += intel-ish-hid/
obj-$(CONFIG_AMD_SFH_HID) += amd-sfh-hid/
obj-$(CONFIG_SURFACE_HID_CORE) += surface-hid/
@@ -3848,9 +3856,9 @@ index 000000000000..1f966b8b32c4
+
+#endif /* IPTS_THREAD_H */
--
-2.43.0
+2.44.0
-From 8aadfc38967cb2804446c8bdae851377651e6248 Mon Sep 17 00:00:00 2001
+From 619b488e58367467f52d636b5182ff2134df68c0 Mon Sep 17 00:00:00 2001
From: Dorian Stoll <dorian.stoll@tmsp.io>
Date: Sun, 11 Dec 2022 12:03:38 +0100
Subject: [PATCH] iommu: intel: Disable source id verification for ITHC
@@ -3862,7 +3870,7 @@ Patchset: ithc
1 file changed, 16 insertions(+)
diff --git a/drivers/iommu/intel/irq_remapping.c b/drivers/iommu/intel/irq_remapping.c
-index 29b9e55dcf26..986e91c813ae 100644
+index 566297bc87dd..a8cd8f12d593 100644
--- a/drivers/iommu/intel/irq_remapping.c
+++ b/drivers/iommu/intel/irq_remapping.c
@@ -386,6 +386,22 @@ static int set_msi_sid(struct irte *irte, struct pci_dev *dev)
@@ -3889,9 +3897,9 @@ index 29b9e55dcf26..986e91c813ae 100644
* DMA alias provides us with a PCI device and alias. The only case
* where the it will return an alias on a different bus than the
--
-2.43.0
+2.44.0
-From fe08b40d122fdb102c2cc4876d2d68ac19d74ae3 Mon Sep 17 00:00:00 2001
+From ee5106b4069dd150a323dce8bce7879d2b27ed0b Mon Sep 17 00:00:00 2001
From: quo <tuple@list.ru>
Date: Sun, 11 Dec 2022 12:10:54 +0100
Subject: [PATCH] hid: Add support for Intel Touch Host Controller
@@ -3924,10 +3932,10 @@ Patchset: ithc
create mode 100644 drivers/hid/ithc/ithc.h
diff --git a/drivers/hid/Kconfig b/drivers/hid/Kconfig
-index 86c6c815bd5b..a87c3c6911fb 100644
+index a263e49b2ae2..03f0f5af289a 100644
--- a/drivers/hid/Kconfig
+++ b/drivers/hid/Kconfig
-@@ -1343,4 +1343,6 @@ source "drivers/hid/surface-hid/Kconfig"
+@@ -1353,4 +1353,6 @@ source "drivers/hid/surface-hid/Kconfig"
source "drivers/hid/ipts/Kconfig"
@@ -3935,10 +3943,10 @@ index 86c6c815bd5b..a87c3c6911fb 100644
+
endif # HID_SUPPORT
diff --git a/drivers/hid/Makefile b/drivers/hid/Makefile
-index 2ef21b257d0b..e94b79727b48 100644
+index f4bad1b8d813..d32c194400ae 100644
--- a/drivers/hid/Makefile
+++ b/drivers/hid/Makefile
-@@ -171,3 +171,4 @@ obj-$(CONFIG_AMD_SFH_HID) += amd-sfh-hid/
+@@ -172,3 +172,4 @@ obj-$(CONFIG_AMD_SFH_HID) += amd-sfh-hid/
obj-$(CONFIG_SURFACE_HID_CORE) += surface-hid/
obj-$(CONFIG_HID_IPTS) += ipts/
@@ -5668,9 +5676,9 @@ index 000000000000..028e55a4ec53
+void ithc_log_regs(struct ithc *ithc);
+
--
-2.43.0
+2.44.0
-From fb7e9294f3970a450b891c2cc7b2195861d454e3 Mon Sep 17 00:00:00 2001
+From 973bf943acca4abdd932b5fdff032de0af07f96e Mon Sep 17 00:00:00 2001
From: Maximilian Luz <luzmaximilian@gmail.com>
Date: Sun, 22 Oct 2023 14:57:11 +0200
Subject: [PATCH] platform/surface: aggregator_registry: Add support for
@@ -5701,9 +5709,9 @@ index aeb3feae40ff..2bc4977037fc 100644
{ "MSHW0123", (unsigned long)ssam_node_group_sls },
--
-2.43.0
+2.44.0
-From 2de16abc5d0d2334e2935b1bdb3667a95d0009f2 Mon Sep 17 00:00:00 2001
+From 7dedc84364f9c1fb73d271c859dce19b4a9644d6 Mon Sep 17 00:00:00 2001
From: Maximilian Luz <luzmaximilian@gmail.com>
Date: Mon, 20 Nov 2023 19:47:00 +0100
Subject: [PATCH] platform/surface: aggregator_registry: Add support for
@@ -5771,9 +5779,9 @@ index 2bc4977037fc..26cb6229ad16 100644
{ },
};
--
-2.43.0
+2.44.0
-From c06e370b5ed873b603aa0dc2faafe24a9e63b3e8 Mon Sep 17 00:00:00 2001
+From 96a7b3dd527f3e1b97e2d089a727c16cd5045aa5 Mon Sep 17 00:00:00 2001
From: Ivor Wanders <ivor@iwanders.net>
Date: Mon, 18 Dec 2023 19:21:32 -0500
Subject: [PATCH] platform/surface: aggregator_registry: add entry for fan
@@ -5816,9 +5824,9 @@ index 26cb6229ad16..f02a933160ff 100644
&ssam_node_hid_kip_keyboard,
&ssam_node_hid_kip_penstash,
--
-2.43.0
+2.44.0
-From 63dcbbcad69219e1487db46a5c26c1ebdd9ef6be Mon Sep 17 00:00:00 2001
+From b4eb65349df9859f65aa9990c24c5036d35382da Mon Sep 17 00:00:00 2001
From: Ivor Wanders <ivor@iwanders.net>
Date: Thu, 30 Nov 2023 20:20:24 -0500
Subject: [PATCH] hwmon: add fan speed monitoring driver for Surface devices
@@ -5842,10 +5850,10 @@ Patchset: surface-sam
create mode 100644 drivers/hwmon/surface_fan.c
diff --git a/Documentation/hwmon/index.rst b/Documentation/hwmon/index.rst
-index 72f4e6065bae..7c254562abd6 100644
+index c7ed1f73ac06..58be92e94a8d 100644
--- a/Documentation/hwmon/index.rst
+++ b/Documentation/hwmon/index.rst
-@@ -204,6 +204,7 @@ Hardware Monitoring Kernel Drivers
+@@ -208,6 +208,7 @@ Hardware Monitoring Kernel Drivers
smsc47m1
sparx5-temp
stpddc60
@@ -5885,10 +5893,10 @@ index 000000000000..07942574c4f0
+``fan1_input`` RO Current fan speed in RPM.
+======================= ======= =========================================
diff --git a/MAINTAINERS b/MAINTAINERS
-index a7c4cf8201e0..77eb076e77da 100644
+index 1aabf1c15bb3..b6416cf3f022 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
-@@ -14331,6 +14331,14 @@ F: Documentation/driver-api/surface_aggregator/clients/dtx.rst
+@@ -14576,6 +14576,14 @@ F: Documentation/driver-api/surface_aggregator/clients/dtx.rst
F: drivers/platform/surface/surface_dtx.c
F: include/uapi/linux/surface_aggregator/dtx.h
@@ -5904,10 +5912,10 @@ index a7c4cf8201e0..77eb076e77da 100644
M: Maximilian Luz <luzmaximilian@gmail.com>
L: platform-driver-x86@vger.kernel.org
diff --git a/drivers/hwmon/Kconfig b/drivers/hwmon/Kconfig
-index cf27523eed5a..1cef428c79ea 100644
+index a608264da87d..e762f6138970 100644
--- a/drivers/hwmon/Kconfig
+++ b/drivers/hwmon/Kconfig
-@@ -1983,6 +1983,19 @@ config SENSORS_SFCTEMP
+@@ -1994,6 +1994,19 @@ config SENSORS_SFCTEMP
This driver can also be built as a module. If so, the module
will be called sfctemp.
@@ -5928,10 +5936,10 @@ index cf27523eed5a..1cef428c79ea 100644
tristate "Texas Instruments ADC128D818"
depends on I2C
diff --git a/drivers/hwmon/Makefile b/drivers/hwmon/Makefile
-index e84bd9685b5c..30a284fc5ab6 100644
+index 47be39af5c03..30cc90f40844 100644
--- a/drivers/hwmon/Makefile
+++ b/drivers/hwmon/Makefile
-@@ -200,6 +200,7 @@ obj-$(CONFIG_SENSORS_SMSC47M1) += smsc47m1.o
+@@ -201,6 +201,7 @@ obj-$(CONFIG_SENSORS_SMSC47M1) += smsc47m1.o
obj-$(CONFIG_SENSORS_SMSC47M192)+= smsc47m192.o
obj-$(CONFIG_SENSORS_SPARX5) += sparx5-temp.o
obj-$(CONFIG_SENSORS_STTS751) += stts751.o
@@ -6039,9 +6047,9 @@ index 000000000000..7c2e3ae3eb40
+MODULE_DESCRIPTION("Fan Driver for Surface System Aggregator Module");
+MODULE_LICENSE("GPL");
--
-2.43.0
+2.44.0
-From 5f549c253e4df330fa8f311fe151df80e199bec4 Mon Sep 17 00:00:00 2001
+From 5c18bed9c7ad073b61e3c3686dc4bc1858f958dc Mon Sep 17 00:00:00 2001
From: Maximilian Luz <luzmaximilian@gmail.com>
Date: Sat, 30 Dec 2023 18:07:54 +0100
Subject: [PATCH] hwmon: Add thermal sensor driver for Surface Aggregator
@@ -6063,10 +6071,10 @@ Patchset: surface-sam
create mode 100644 drivers/hwmon/surface_temp.c
diff --git a/drivers/hwmon/Kconfig b/drivers/hwmon/Kconfig
-index 1cef428c79ea..ca20716911ad 100644
+index e762f6138970..41261b49f8be 100644
--- a/drivers/hwmon/Kconfig
+++ b/drivers/hwmon/Kconfig
-@@ -1996,6 +1996,16 @@ config SENSORS_SURFACE_FAN
+@@ -2007,6 +2007,16 @@ config SENSORS_SURFACE_FAN
Select M or Y here, if you want to be able to read the fan's speed.
@@ -6084,10 +6092,10 @@ index 1cef428c79ea..ca20716911ad 100644
tristate "Texas Instruments ADC128D818"
depends on I2C
diff --git a/drivers/hwmon/Makefile b/drivers/hwmon/Makefile
-index 30a284fc5ab6..a6bcde6b4843 100644
+index 30cc90f40844..6644fd4598a4 100644
--- a/drivers/hwmon/Makefile
+++ b/drivers/hwmon/Makefile
-@@ -201,6 +201,7 @@ obj-$(CONFIG_SENSORS_SMSC47M192)+= smsc47m192.o
+@@ -202,6 +202,7 @@ obj-$(CONFIG_SENSORS_SMSC47M192)+= smsc47m192.o
obj-$(CONFIG_SENSORS_SPARX5) += sparx5-temp.o
obj-$(CONFIG_SENSORS_STTS751) += stts751.o
obj-$(CONFIG_SENSORS_SURFACE_FAN)+= surface_fan.o
@@ -6267,9 +6275,9 @@ index 000000000000..48c3e826713f
+MODULE_DESCRIPTION("Thermal sensor subsystem driver for Surface System Aggregator Module");
+MODULE_LICENSE("GPL");
--
-2.43.0
+2.44.0
-From 3ccfa3b6be4794f247488f7e665ba91793ec09c7 Mon Sep 17 00:00:00 2001
+From 8b1e37ad9423a6fdf8a8b3bfb1e15aadefe136de Mon Sep 17 00:00:00 2001
From: Maximilian Luz <luzmaximilian@gmail.com>
Date: Sat, 30 Dec 2023 18:12:23 +0100
Subject: [PATCH] hwmon: surface_temp: Add support for sensor names
@@ -6462,9 +6470,9 @@ index 48c3e826713f..4c08926139db 100644
"surface_thermal", ssam_temp, &ssam_temp_hwmon_chip_info,
NULL);
--
-2.43.0
+2.44.0
-From 8ccf7b86ad270655bd1e8cd0ab8d2ff475ad0ea7 Mon Sep 17 00:00:00 2001
+From 9b490a17f59518e59cf3c77c103bf5ddc52041a3 Mon Sep 17 00:00:00 2001
From: Maximilian Luz <luzmaximilian@gmail.com>
Date: Sat, 30 Dec 2023 18:21:12 +0100
Subject: [PATCH] platform/surface: aggregator_registry: Add support for
@@ -6505,9 +6513,336 @@ index f02a933160ff..67686042e009 100644
&ssam_node_pos_tablet_switch,
&ssam_node_hid_kip_keyboard,
--
-2.43.0
+2.44.0
+
+From ec0b680c0ce36ef6bffd682e10589cf5d8d467ae Mon Sep 17 00:00:00 2001
+From: Ivor Wanders <ivor@iwanders.net>
+Date: Sat, 16 Dec 2023 15:56:39 -0500
+Subject: [PATCH] platform/surface: platform_profile: add fan profile switching
+
+Change naming from tmp to platform profile to clarify the module may
+interact with both the TMP and FAN subystems. Add functionality that
+switches the fan profile when the platform profile is changed.
+
+Signed-off-by: Ivor Wanders <ivor@iwanders.net>
+Patchset: surface-sam
+---
+ .../surface/surface_aggregator_registry.c | 38 +++++---
+ .../surface/surface_platform_profile.c | 86 ++++++++++++++++---
+ 2 files changed, 100 insertions(+), 24 deletions(-)
+
+diff --git a/drivers/platform/surface/surface_aggregator_registry.c b/drivers/platform/surface/surface_aggregator_registry.c
+index 67686042e009..058b6654a91a 100644
+--- a/drivers/platform/surface/surface_aggregator_registry.c
++++ b/drivers/platform/surface/surface_aggregator_registry.c
+@@ -68,8 +68,8 @@ static const struct software_node ssam_node_bat_sb3base = {
+ .parent = &ssam_node_hub_base,
+ };
+
+-/* Platform profile / performance-mode device. */
+-static const struct software_node ssam_node_tmp_pprof = {
++/* Platform profile / performance-mode device without a fan. */
++static const struct software_node ssam_node_tmp_perf_profile = {
+ .name = "ssam:01:03:01:00:01",
+ .parent = &ssam_node_root,
+ };
+@@ -86,6 +86,20 @@ static const struct software_node ssam_node_fan_speed = {
+ .parent = &ssam_node_root,
+ };
+
++/* Platform profile / performance-mode device with a fan, such that
++ * the fan controller profile can also be switched.
++ */
++static const struct property_entry ssam_node_tmp_perf_profile_has_fan[] = {
++ PROPERTY_ENTRY_BOOL("has_fan"),
++ { }
++};
++
++static const struct software_node ssam_node_tmp_perf_profile_with_fan = {
++ .name = "ssam:01:03:01:00:01",
++ .parent = &ssam_node_root,
++ .properties = ssam_node_tmp_perf_profile_has_fan,
++};
++
+ /* Tablet-mode switch via KIP subsystem. */
+ static const struct software_node ssam_node_kip_tablet_switch = {
+ .name = "ssam:01:0e:01:00:01",
+@@ -214,7 +228,7 @@ static const struct software_node ssam_node_pos_tablet_switch = {
+ */
+ static const struct software_node *ssam_node_group_gen5[] = {
+ &ssam_node_root,
+- &ssam_node_tmp_pprof,
++ &ssam_node_tmp_perf_profile,
+ NULL,
+ };
+
+@@ -225,7 +239,7 @@ static const struct software_node *ssam_node_group_sb3[] = {
+ &ssam_node_bat_ac,
+ &ssam_node_bat_main,
+ &ssam_node_bat_sb3base,
+- &ssam_node_tmp_pprof,
++ &ssam_node_tmp_perf_profile,
+ &ssam_node_bas_dtx,
+ &ssam_node_hid_base_keyboard,
+ &ssam_node_hid_base_touchpad,
+@@ -239,7 +253,7 @@ static const struct software_node *ssam_node_group_sl3[] = {
+ &ssam_node_root,
+ &ssam_node_bat_ac,
+ &ssam_node_bat_main,
+- &ssam_node_tmp_pprof,
++ &ssam_node_tmp_perf_profile,
+ &ssam_node_hid_main_keyboard,
+ &ssam_node_hid_main_touchpad,
+ &ssam_node_hid_main_iid5,
+@@ -251,7 +265,7 @@ static const struct software_node *ssam_node_group_sl5[] = {
+ &ssam_node_root,
+ &ssam_node_bat_ac,
+ &ssam_node_bat_main,
+- &ssam_node_tmp_pprof,
++ &ssam_node_tmp_perf_profile,
+ &ssam_node_hid_main_keyboard,
+ &ssam_node_hid_main_touchpad,
+ &ssam_node_hid_main_iid5,
+@@ -264,7 +278,7 @@ static const struct software_node *ssam_node_group_sls1[] = {
+ &ssam_node_root,
+ &ssam_node_bat_ac,
+ &ssam_node_bat_main,
+- &ssam_node_tmp_pprof,
++ &ssam_node_tmp_perf_profile,
+ &ssam_node_pos_tablet_switch,
+ &ssam_node_hid_sam_keyboard,
+ &ssam_node_hid_sam_penstash,
+@@ -280,7 +294,7 @@ static const struct software_node *ssam_node_group_sls2[] = {
+ &ssam_node_root,
+ &ssam_node_bat_ac,
+ &ssam_node_bat_main,
+- &ssam_node_tmp_pprof,
++ &ssam_node_tmp_perf_profile,
+ &ssam_node_pos_tablet_switch,
+ &ssam_node_hid_sam_keyboard,
+ &ssam_node_hid_sam_penstash,
+@@ -294,7 +308,7 @@ static const struct software_node *ssam_node_group_slg1[] = {
+ &ssam_node_root,
+ &ssam_node_bat_ac,
+ &ssam_node_bat_main,
+- &ssam_node_tmp_pprof,
++ &ssam_node_tmp_perf_profile,
+ NULL,
+ };
+
+@@ -303,7 +317,7 @@ static const struct software_node *ssam_node_group_sp7[] = {
+ &ssam_node_root,
+ &ssam_node_bat_ac,
+ &ssam_node_bat_main,
+- &ssam_node_tmp_pprof,
++ &ssam_node_tmp_perf_profile,
+ NULL,
+ };
+
+@@ -313,7 +327,7 @@ static const struct software_node *ssam_node_group_sp8[] = {
+ &ssam_node_hub_kip,
+ &ssam_node_bat_ac,
+ &ssam_node_bat_main,
+- &ssam_node_tmp_pprof,
++ &ssam_node_tmp_perf_profile,
+ &ssam_node_kip_tablet_switch,
+ &ssam_node_hid_kip_keyboard,
+ &ssam_node_hid_kip_penstash,
+@@ -330,7 +344,7 @@ static const struct software_node *ssam_node_group_sp9[] = {
+ &ssam_node_hub_kip,
+ &ssam_node_bat_ac,
+ &ssam_node_bat_main,
+- &ssam_node_tmp_pprof,
++ &ssam_node_tmp_perf_profile_with_fan,
+ &ssam_node_tmp_sensors,
+ &ssam_node_fan_speed,
+ &ssam_node_pos_tablet_switch,
+diff --git a/drivers/platform/surface/surface_platform_profile.c b/drivers/platform/surface/surface_platform_profile.c
+index a5a3941b3f43..e54d0a8f7daa 100644
+--- a/drivers/platform/surface/surface_platform_profile.c
++++ b/drivers/platform/surface/surface_platform_profile.c
+@@ -1,7 +1,7 @@
+ // SPDX-License-Identifier: GPL-2.0+
+ /*
+ * Surface Platform Profile / Performance Mode driver for Surface System
+- * Aggregator Module (thermal subsystem).
++ * Aggregator Module (thermal and fan subsystem).
+ *
+ * Copyright (C) 2021-2022 Maximilian Luz <luzmaximilian@gmail.com>
+ */
+@@ -14,6 +14,7 @@
+
+ #include <linux/surface_aggregator/device.h>
+
++// Enum for the platform performance profile sent to the TMP module.
+ enum ssam_tmp_profile {
+ SSAM_TMP_PROFILE_NORMAL = 1,
+ SSAM_TMP_PROFILE_BATTERY_SAVER = 2,
+@@ -21,15 +22,26 @@ enum ssam_tmp_profile {
+ SSAM_TMP_PROFILE_BEST_PERFORMANCE = 4,
+ };
+
++// Enum for the fan profile sent to the FAN module. This fan profile is
++// only sent to the EC if the 'has_fan' property is set. The integers are
++// not a typo, they differ from the performance profile indices.
++enum ssam_fan_profile {
++ SSAM_FAN_PROFILE_NORMAL = 2,
++ SSAM_FAN_PROFILE_BATTERY_SAVER = 1,
++ SSAM_FAN_PROFILE_BETTER_PERFORMANCE = 3,
++ SSAM_FAN_PROFILE_BEST_PERFORMANCE = 4,
++};
++
+ struct ssam_tmp_profile_info {
+ __le32 profile;
+ __le16 unknown1;
+ __le16 unknown2;
+ } __packed;
+
+-struct ssam_tmp_profile_device {
++struct ssam_platform_profile_device {
+ struct ssam_device *sdev;
+ struct platform_profile_handler handler;
++ bool has_fan;
+ };
+
+ SSAM_DEFINE_SYNC_REQUEST_CL_R(__ssam_tmp_profile_get, struct ssam_tmp_profile_info, {
+@@ -42,6 +54,13 @@ SSAM_DEFINE_SYNC_REQUEST_CL_W(__ssam_tmp_profile_set, __le32, {
+ .command_id = 0x03,
+ });
+
++SSAM_DEFINE_SYNC_REQUEST_W(__ssam_fan_profile_set, char, {
++ .target_category = SSAM_SSH_TC_FAN,
++ .target_id = SSAM_SSH_TID_SAM,
++ .command_id = 0x0e,
++ .instance_id = 0x01,
++});
++
+ static int ssam_tmp_profile_get(struct ssam_device *sdev, enum ssam_tmp_profile *p)
+ {
+ struct ssam_tmp_profile_info info;
+@@ -62,7 +81,14 @@ static int ssam_tmp_profile_set(struct ssam_device *sdev, enum ssam_tmp_profile
+ return ssam_retry(__ssam_tmp_profile_set, sdev, &profile_le);
+ }
+
+-static int convert_ssam_to_profile(struct ssam_device *sdev, enum ssam_tmp_profile p)
++static int ssam_fan_profile_set(struct ssam_device *sdev, enum ssam_fan_profile p)
++{
++ char profile = p;
++
++ return ssam_retry(__ssam_fan_profile_set, sdev->ctrl, &profile);
++}
++
++static int convert_ssam_tmp_to_profile(struct ssam_device *sdev, enum ssam_tmp_profile p)
+ {
+ switch (p) {
+ case SSAM_TMP_PROFILE_NORMAL:
+@@ -83,7 +109,8 @@ static int convert_ssam_to_profile(struct ssam_device *sdev, enum ssam_tmp_profi
+ }
+ }
+
+-static int convert_profile_to_ssam(struct ssam_device *sdev, enum platform_profile_option p)
++
++static int convert_profile_to_ssam_tmp(struct ssam_device *sdev, enum platform_profile_option p)
+ {
+ switch (p) {
+ case PLATFORM_PROFILE_LOW_POWER:
+@@ -105,20 +132,42 @@ static int convert_profile_to_ssam(struct ssam_device *sdev, enum platform_profi
+ }
+ }
+
++static int convert_profile_to_ssam_fan(struct ssam_device *sdev, enum platform_profile_option p)
++{
++ switch (p) {
++ case PLATFORM_PROFILE_LOW_POWER:
++ return SSAM_FAN_PROFILE_BATTERY_SAVER;
++
++ case PLATFORM_PROFILE_BALANCED:
++ return SSAM_FAN_PROFILE_NORMAL;
++
++ case PLATFORM_PROFILE_BALANCED_PERFORMANCE:
++ return SSAM_FAN_PROFILE_BETTER_PERFORMANCE;
++
++ case PLATFORM_PROFILE_PERFORMANCE:
++ return SSAM_FAN_PROFILE_BEST_PERFORMANCE;
++
++ default:
++ /* This should have already been caught by platform_profile_store(). */
++ WARN(true, "unsupported platform profile");
++ return -EOPNOTSUPP;
++ }
++}
++
+ static int ssam_platform_profile_get(struct platform_profile_handler *pprof,
+ enum platform_profile_option *profile)
+ {
+- struct ssam_tmp_profile_device *tpd;
++ struct ssam_platform_profile_device *tpd;
+ enum ssam_tmp_profile tp;
+ int status;
+
+- tpd = container_of(pprof, struct ssam_tmp_profile_device, handler);
++ tpd = container_of(pprof, struct ssam_platform_profile_device, handler);
+
+ status = ssam_tmp_profile_get(tpd->sdev, &tp);
+ if (status)
+ return status;
+
+- status = convert_ssam_to_profile(tpd->sdev, tp);
++ status = convert_ssam_tmp_to_profile(tpd->sdev, tp);
+ if (status < 0)
+ return status;
+
+@@ -129,21 +178,32 @@ static int ssam_platform_profile_get(struct platform_profile_handler *pprof,
+ static int ssam_platform_profile_set(struct platform_profile_handler *pprof,
+ enum platform_profile_option profile)
+ {
+- struct ssam_tmp_profile_device *tpd;
++ struct ssam_platform_profile_device *tpd;
+ int tp;
+
+- tpd = container_of(pprof, struct ssam_tmp_profile_device, handler);
++ tpd = container_of(pprof, struct ssam_platform_profile_device, handler);
++
++ tp = convert_profile_to_ssam_tmp(tpd->sdev, profile);
++ if (tp < 0)
++ return tp;
+
+- tp = convert_profile_to_ssam(tpd->sdev, profile);
++ tp = ssam_tmp_profile_set(tpd->sdev, tp);
+ if (tp < 0)
+ return tp;
+
+- return ssam_tmp_profile_set(tpd->sdev, tp);
++ if (tpd->has_fan) {
++ tp = convert_profile_to_ssam_fan(tpd->sdev, profile);
++ if (tp < 0)
++ return tp;
++ tp = ssam_fan_profile_set(tpd->sdev, tp);
++ }
++
++ return tp;
+ }
+
+ static int surface_platform_profile_probe(struct ssam_device *sdev)
+ {
+- struct ssam_tmp_profile_device *tpd;
++ struct ssam_platform_profile_device *tpd;
+
+ tpd = devm_kzalloc(&sdev->dev, sizeof(*tpd), GFP_KERNEL);
+ if (!tpd)
+@@ -154,6 +214,8 @@ static int surface_platform_profile_probe(struct ssam_device *sdev)
+ tpd->handler.profile_get = ssam_platform_profile_get;
+ tpd->handler.profile_set = ssam_platform_profile_set;
+
++ tpd->has_fan = device_property_read_bool(&sdev->dev, "has_fan");
++
+ set_bit(PLATFORM_PROFILE_LOW_POWER, tpd->handler.choices);
+ set_bit(PLATFORM_PROFILE_BALANCED, tpd->handler.choices);
+ set_bit(PLATFORM_PROFILE_BALANCED_PERFORMANCE, tpd->handler.choices);
+--
+2.44.0
-From 38a76c85dee37facde40f245d994c4209ccddd15 Mon Sep 17 00:00:00 2001
+From 95b66fb97652988a7b4be5bb1deaa625e1bb3c3f Mon Sep 17 00:00:00 2001
From: Maximilian Luz <luzmaximilian@gmail.com>
Date: Sat, 25 Jul 2020 17:19:53 +0200
Subject: [PATCH] i2c: acpi: Implement RawBytes read access
@@ -6617,9 +6952,9 @@ index d6037a328669..a290ebc77aea 100644
dev_warn(&adapter->dev, "protocol 0x%02x not supported for client 0x%02x\n",
accessor_type, client->addr);
--
-2.43.0
+2.44.0
-From f4ad3e5c368c11503d8b7af6a703f3972ebd5e98 Mon Sep 17 00:00:00 2001
+From 2b86ac312b956799265cdd1411d305cd2dcaf6db Mon Sep 17 00:00:00 2001
From: Maximilian Luz <luzmaximilian@gmail.com>
Date: Sat, 13 Feb 2021 16:41:18 +0100
Subject: [PATCH] platform/surface: Add driver for Surface Book 1 dGPU switch
@@ -6840,9 +7175,9 @@ index 000000000000..8b816ed8f35c
+MODULE_DESCRIPTION("Discrete GPU Power-Switch for Surface Book 1");
+MODULE_LICENSE("GPL");
--
-2.43.0
+2.44.0
-From 96cb53fd556f88f97d61b237c6015cec946865d5 Mon Sep 17 00:00:00 2001
+From 3584a6c1791dc9c9b9c3ee846621571cbfabe37e Mon Sep 17 00:00:00 2001
From: Sachi King <nakato@nakato.io>
Date: Tue, 5 Oct 2021 00:05:09 +1100
Subject: [PATCH] Input: soc_button_array - support AMD variant Surface devices
@@ -6917,9 +7252,9 @@ index f6d060377d18..b8603f74eb28 100644
/*
--
-2.43.0
+2.44.0
-From 7909f30b15796e8df43a6d4ea32cbbd40627c410 Mon Sep 17 00:00:00 2001
+From c26bb1d0af0fe40be270d203d6aaeab28dd04a10 Mon Sep 17 00:00:00 2001
From: Sachi King <nakato@nakato.io>
Date: Tue, 5 Oct 2021 00:22:57 +1100
Subject: [PATCH] platform/surface: surfacepro3_button: don't load on amd
@@ -6989,9 +7324,9 @@ index 2755601f979c..4240c98ca226 100644
--
-2.43.0
+2.44.0
-From 28ea3660b6680bfd528ca05c543e69b8a2ad412c Mon Sep 17 00:00:00 2001
+From b3fac417611f5bb4ae2a9bc9e828dacfe4418fbf Mon Sep 17 00:00:00 2001
From: Maximilian Luz <luzmaximilian@gmail.com>
Date: Sat, 18 Feb 2023 01:02:49 +0100
Subject: [PATCH] USB: quirks: Add USB_QUIRK_DELAY_INIT for Surface Go 3
@@ -7016,10 +7351,10 @@ Patchset: surface-typecover
1 file changed, 3 insertions(+)
diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c
-index 15e9bd180a1d..0d70461d01e1 100644
+index b4783574b8e6..360970620589 100644
--- a/drivers/usb/core/quirks.c
+++ b/drivers/usb/core/quirks.c
-@@ -220,6 +220,9 @@ static const struct usb_device_id usb_quirk_list[] = {
+@@ -223,6 +223,9 @@ static const struct usb_device_id usb_quirk_list[] = {
/* Microsoft Surface Dock Ethernet (RTL8153 GigE) */
{ USB_DEVICE(0x045e, 0x07c6), .driver_info = USB_QUIRK_NO_LPM },
@@ -7030,9 +7365,9 @@ index 15e9bd180a1d..0d70461d01e1 100644
{ USB_DEVICE(0x046a, 0x0023), .driver_info = USB_QUIRK_RESET_RESUME },
--
-2.43.0
+2.44.0
-From 039ed906cfe0578e78c40d786433e9b144c56785 Mon Sep 17 00:00:00 2001
+From bf5167d418b660e321368222505a97d9f1ed68b4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jonas=20Dre=C3=9Fler?= <verdre@v0yd.nl>
Date: Thu, 5 Nov 2020 13:09:45 +0100
Subject: [PATCH] hid/multitouch: Turn off Type Cover keyboard backlight when
@@ -7068,7 +7403,7 @@ Patchset: surface-typecover
1 file changed, 98 insertions(+), 2 deletions(-)
diff --git a/drivers/hid/hid-multitouch.c b/drivers/hid/hid-multitouch.c
-index fd5b0637dad6..0f49d8fa6333 100644
+index 3e91e4d6ba6f..45b7884c97f0 100644
--- a/drivers/hid/hid-multitouch.c
+++ b/drivers/hid/hid-multitouch.c
@@ -34,7 +34,10 @@
@@ -7250,7 +7585,7 @@ index fd5b0637dad6..0f49d8fa6333 100644
del_timer_sync(&td->release_timer);
sysfs_remove_group(&hdev->dev.kobj, &mt_attribute_group);
-@@ -2226,6 +2317,11 @@ static const struct hid_device_id mt_devices[] = {
+@@ -2230,6 +2321,11 @@ static const struct hid_device_id mt_devices[] = {
MT_USB_DEVICE(USB_VENDOR_ID_XIROKU,
USB_DEVICE_ID_XIROKU_CSR2) },
@@ -7263,9 +7598,9 @@ index fd5b0637dad6..0f49d8fa6333 100644
{ .driver_data = MT_CLS_GOOGLE,
HID_DEVICE(HID_BUS_ANY, HID_GROUP_ANY, USB_VENDOR_ID_GOOGLE,
--
-2.43.0
+2.44.0
-From 97419c9be08b7b3e4311aa989fa8f91d0549a469 Mon Sep 17 00:00:00 2001
+From dda4ca6e0248ae5acf3aaf78ee00e613f4e04bad Mon Sep 17 00:00:00 2001
From: PJungkamp <p.jungkamp@gmail.com>
Date: Fri, 25 Feb 2022 12:04:25 +0100
Subject: [PATCH] hid/multitouch: Add support for surface pro type cover tablet
@@ -7294,7 +7629,7 @@ Patchset: surface-typecover
1 file changed, 122 insertions(+), 26 deletions(-)
diff --git a/drivers/hid/hid-multitouch.c b/drivers/hid/hid-multitouch.c
-index 0f49d8fa6333..1fad1199775b 100644
+index 45b7884c97f0..f8978b405aca 100644
--- a/drivers/hid/hid-multitouch.c
+++ b/drivers/hid/hid-multitouch.c
@@ -77,6 +77,7 @@ MODULE_LICENSE("GPL");
@@ -7562,9 +7897,9 @@ index 0f49d8fa6333..1fad1199775b 100644
unregister_pm_notifier(&td->pm_notifier);
del_timer_sync(&td->release_timer);
--
-2.43.0
+2.44.0
-From 3854d7e575b1091a994c58ef8ee2a89f4efced12 Mon Sep 17 00:00:00 2001
+From aa49dc59b192cc038ca789ac70215d7492f043cb Mon Sep 17 00:00:00 2001
From: Maximilian Luz <luzmaximilian@gmail.com>
Date: Sun, 19 Feb 2023 22:12:24 +0100
Subject: [PATCH] PCI: Add quirk to prevent calling shutdown mehtod
@@ -7603,10 +7938,10 @@ index 51ec9e7e784f..40554890d721 100644
if (drv && drv->shutdown)
diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
-index d55a3ffae4b8..e8614d8476fe 100644
+index d797df6e5f3e..c674ee496a0b 100644
--- a/drivers/pci/quirks.c
+++ b/drivers/pci/quirks.c
-@@ -6227,3 +6227,39 @@ static void pci_fixup_d3cold_delay_1sec(struct pci_dev *pdev)
+@@ -6250,3 +6250,39 @@ static void pci_fixup_d3cold_delay_1sec(struct pci_dev *pdev)
pdev->d3cold_delay = 1000;
}
DECLARE_PCI_FIXUP_FINAL(0x5555, 0x0004, pci_fixup_d3cold_delay_1sec);
@@ -7647,7 +7982,7 @@ index d55a3ffae4b8..e8614d8476fe 100644
+DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x466d, quirk_no_shutdown); // Thunderbolt 4 NHI
+DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x46a8, quirk_no_shutdown); // GPU
diff --git a/include/linux/pci.h b/include/linux/pci.h
-index bc80960fad7c..eec5704d1000 100644
+index 7ab0d13672da..8d8d9225e0db 100644
--- a/include/linux/pci.h
+++ b/include/linux/pci.h
@@ -465,6 +465,7 @@ struct pci_dev {
@@ -7659,9 +7994,9 @@ index bc80960fad7c..eec5704d1000 100644
atomic_t enable_cnt; /* pci_enable_device has been called */
--
-2.43.0
+2.44.0
-From d9ddc9ae99c11ebc912a1a8dde46d783e873508b Mon Sep 17 00:00:00 2001
+From 36cf5399fd0f16f10f97c21131d29ebda13607f5 Mon Sep 17 00:00:00 2001
From: Maximilian Luz <luzmaximilian@gmail.com>
Date: Sun, 12 Mar 2023 01:41:57 +0100
Subject: [PATCH] platform/surface: gpe: Add support for Surface Pro 9
@@ -7710,9 +8045,9 @@ index 62fd4004db31..103fc4468262 100644
.ident = "Surface Book 1",
.matches = {
--
-2.43.0
+2.44.0
-From 5fdcd780891777ef73585adf610593e6e097e6d6 Mon Sep 17 00:00:00 2001
+From 526bea529e4befa282fcfd01bbadbed7325faf01 Mon Sep 17 00:00:00 2001
From: Hans de Goede <hdegoede@redhat.com>
Date: Sun, 10 Oct 2021 20:56:57 +0200
Subject: [PATCH] ACPI: delay enumeration of devices with a _DEP pointing to an
@@ -7772,10 +8107,10 @@ Patchset: cameras
1 file changed, 3 insertions(+)
diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c
-index 02bb2cce423f..b123138d3dc0 100644
+index e6ed1ba91e5c..b367890b7438 100644
--- a/drivers/acpi/scan.c
+++ b/drivers/acpi/scan.c
-@@ -2114,6 +2114,9 @@ static acpi_status acpi_bus_check_add_2(acpi_handle handle, u32 lvl_not_used,
+@@ -2138,6 +2138,9 @@ static acpi_status acpi_bus_check_add_2(acpi_handle handle, u32 lvl_not_used,
static void acpi_default_enumeration(struct acpi_device *device)
{
@@ -7786,9 +8121,9 @@ index 02bb2cce423f..b123138d3dc0 100644
* Do not enumerate devices with enumeration_by_parent flag set as
* they will be enumerated by their respective parents.
--
-2.43.0
+2.44.0
-From eb19f5e13f14a8973920d406125f205945558fb9 Mon Sep 17 00:00:00 2001
+From d41ef92974135b1c22c2f46cbaba926701e0d4af Mon Sep 17 00:00:00 2001
From: zouxiaoh <xiaohong.zou@intel.com>
Date: Fri, 25 Jun 2021 08:52:59 +0800
Subject: [PATCH] iommu: intel-ipu: use IOMMU passthrough mode for Intel IPUs
@@ -7814,23 +8149,24 @@ Patchset: cameras
1 file changed, 30 insertions(+)
diff --git a/drivers/iommu/intel/iommu.c b/drivers/iommu/intel/iommu.c
-index cc6569613255..8a532d32efdd 100644
+index 6c01b1aebf27..ceed043464b1 100644
--- a/drivers/iommu/intel/iommu.c
+++ b/drivers/iommu/intel/iommu.c
-@@ -38,6 +38,12 @@
- #define IS_GFX_DEVICE(pdev) ((pdev->class >> 16) == PCI_BASE_CLASS_DISPLAY)
- #define IS_USB_DEVICE(pdev) ((pdev->class >> 8) == PCI_CLASS_SERIAL_USB)
- #define IS_ISA_DEVICE(pdev) ((pdev->class >> 8) == PCI_CLASS_BRIDGE_ISA)
+@@ -45,6 +45,13 @@
+ ((pdev)->vendor == PCI_VENDOR_ID_INTEL && (pdev)->device == 0x34E4) \
+ )
+
+#define IS_INTEL_IPU(pdev) ((pdev)->vendor == PCI_VENDOR_ID_INTEL && \
+ ((pdev)->device == 0x9a19 || \
+ (pdev)->device == 0x9a39 || \
+ (pdev)->device == 0x4e19 || \
+ (pdev)->device == 0x465d || \
+ (pdev)->device == 0x1919))
- #define IS_IPTS(pdev) ((pdev)->vendor == PCI_VENDOR_ID_INTEL && \
- ((pdev)->device == 0x9d3e))
- #define IS_AZALIA(pdev) ((pdev)->vendor == 0x8086 && (pdev)->device == 0x3a3e)
-@@ -294,12 +300,14 @@ EXPORT_SYMBOL_GPL(intel_iommu_enabled);
++
+ #define IOAPIC_RANGE_START (0xfee00000)
+ #define IOAPIC_RANGE_END (0xfeefffff)
+ #define IOVA_START_ADDR (0x1000)
+@@ -154,12 +161,14 @@ EXPORT_SYMBOL_GPL(intel_iommu_enabled);
static int dmar_map_gfx = 1;
static int dmar_map_ipts = 1;
@@ -7845,7 +8181,7 @@ index cc6569613255..8a532d32efdd 100644
#define IDENTMAP_IPTS 16
const struct iommu_ops intel_iommu_ops;
-@@ -2553,6 +2561,9 @@ static int device_def_domain_type(struct device *dev)
+@@ -2420,6 +2429,9 @@ static int device_def_domain_type(struct device *dev)
if ((iommu_identity_mapping & IDENTMAP_GFX) && IS_GFX_DEVICE(pdev))
return IOMMU_DOMAIN_IDENTITY;
@@ -7855,7 +8191,7 @@ index cc6569613255..8a532d32efdd 100644
if ((iommu_identity_mapping & IDENTMAP_IPTS) && IS_IPTS(pdev))
return IOMMU_DOMAIN_IDENTITY;
}
-@@ -2862,6 +2873,9 @@ static int __init init_dmars(void)
+@@ -2729,6 +2741,9 @@ static int __init init_dmars(void)
if (!dmar_map_gfx)
iommu_identity_mapping |= IDENTMAP_GFX;
@@ -7865,7 +8201,7 @@ index cc6569613255..8a532d32efdd 100644
if (!dmar_map_ipts)
iommu_identity_mapping |= IDENTMAP_IPTS;
-@@ -4987,6 +5001,18 @@ static void quirk_iommu_igfx(struct pci_dev *dev)
+@@ -4909,6 +4924,18 @@ static void quirk_iommu_igfx(struct pci_dev *dev)
dmar_map_gfx = 0;
}
@@ -7884,15 +8220,7 @@ index cc6569613255..8a532d32efdd 100644
static void quirk_iommu_ipts(struct pci_dev *dev)
{
if (!IS_IPTS(dev))
-@@ -4998,6 +5024,7 @@ static void quirk_iommu_ipts(struct pci_dev *dev)
- pci_info(dev, "Passthrough IOMMU for IPTS\n");
- dmar_map_ipts = 0;
- }
-+
- /* G4x/GM45 integrated gfx dmar support is totally busted. */
- DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x2a40, quirk_iommu_igfx);
- DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x2e00, quirk_iommu_igfx);
-@@ -5033,6 +5060,9 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x1632, quirk_iommu_igfx);
+@@ -4956,6 +4983,9 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x1632, quirk_iommu_igfx);
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x163A, quirk_iommu_igfx);
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x163D, quirk_iommu_igfx);
@@ -7901,11 +8229,11 @@ index cc6569613255..8a532d32efdd 100644
+
/* disable IPTS dmar support */
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x9D3E, quirk_iommu_ipts);
-
+ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x34E4, quirk_iommu_ipts);
--
-2.43.0
+2.44.0
-From 1b16e7cbcbf699e4d841424568e0de1cee048d93 Mon Sep 17 00:00:00 2001
+From 214600c4c0c3039ba0d0a5e522a2eb162da3857b Mon Sep 17 00:00:00 2001
From: Daniel Scally <djrscally@gmail.com>
Date: Sun, 10 Oct 2021 20:57:02 +0200
Subject: [PATCH] platform/x86: int3472: Enable I2c daisy chain
@@ -7940,9 +8268,9 @@ index 1e107fd49f82..e3e1696e7f0e 100644
return 0;
--
-2.43.0
+2.44.0
-From a856e6ec1aa1ce0e88abdd423a151f2bbddb8134 Mon Sep 17 00:00:00 2001
+From f5c4f5e1de99e04416ddffca65246a7769a202e3 Mon Sep 17 00:00:00 2001
From: Daniel Scally <dan.scally@ideasonboard.com>
Date: Thu, 2 Mar 2023 12:59:39 +0000
Subject: [PATCH] platform/x86: int3472: Remap reset GPIO for INT347E
@@ -7995,9 +8323,9 @@ index 07b302e09340..1d3097bc7e48 100644
agpio, func, polarity);
if (ret)
--
-2.43.0
+2.44.0
-From a7a10c4493fe0a381f12fd6a20a024e7797bd37c Mon Sep 17 00:00:00 2001
+From 216df183e0ad29051b42fcb856d0818a6094f16d Mon Sep 17 00:00:00 2001
From: Daniel Scally <dan.scally@ideasonboard.com>
Date: Tue, 21 Mar 2023 13:45:26 +0000
Subject: [PATCH] media: i2c: Clarify that gain is Analogue gain in OV7251
@@ -8012,7 +8340,7 @@ Patchset: cameras
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/media/i2c/ov7251.c b/drivers/media/i2c/ov7251.c
-index 6582cc0e2384..fd0796b6e07e 100644
+index 30f61e04ecaf..9c1292ca8552 100644
--- a/drivers/media/i2c/ov7251.c
+++ b/drivers/media/i2c/ov7251.c
@@ -1051,7 +1051,7 @@ static int ov7251_s_ctrl(struct v4l2_ctrl *ctrl)
@@ -8024,7 +8352,7 @@ index 6582cc0e2384..fd0796b6e07e 100644
ret = ov7251_set_gain(ov7251, ctrl->val);
break;
case V4L2_CID_TEST_PATTERN:
-@@ -1553,7 +1553,7 @@ static int ov7251_init_ctrls(struct ov7251 *ov7251)
+@@ -1572,7 +1572,7 @@ static int ov7251_init_ctrls(struct ov7251 *ov7251)
ov7251->exposure = v4l2_ctrl_new_std(&ov7251->ctrls, &ov7251_ctrl_ops,
V4L2_CID_EXPOSURE, 1, 32, 1, 32);
ov7251->gain = v4l2_ctrl_new_std(&ov7251->ctrls, &ov7251_ctrl_ops,
@@ -8034,9 +8362,9 @@ index 6582cc0e2384..fd0796b6e07e 100644
V4L2_CID_TEST_PATTERN,
ARRAY_SIZE(ov7251_test_pattern_menu) - 1,
--
-2.43.0
+2.44.0
-From e96fa67c9172fac9aa6e68199cf7e29d074c21e6 Mon Sep 17 00:00:00 2001
+From 0573bb8c22ed0f0476a2ca6c5df2a7f09c6a1b66 Mon Sep 17 00:00:00 2001
From: Daniel Scally <dan.scally@ideasonboard.com>
Date: Wed, 22 Mar 2023 11:01:42 +0000
Subject: [PATCH] media: v4l2-core: Acquire privacy led in
@@ -8055,7 +8383,7 @@ Patchset: cameras
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/drivers/media/v4l2-core/v4l2-async.c b/drivers/media/v4l2-core/v4l2-async.c
-index 8cfd593d293d..c32f0d1b29d4 100644
+index 3ec323bd528b..b55570a0142c 100644
--- a/drivers/media/v4l2-core/v4l2-async.c
+++ b/drivers/media/v4l2-core/v4l2-async.c
@@ -796,6 +796,10 @@ int v4l2_async_register_subdev(struct v4l2_subdev *sd)
@@ -8070,10 +8398,10 @@ index 8cfd593d293d..c32f0d1b29d4 100644
* No reference taken. The reference is held by the device (struct
* v4l2_subdev.dev), and async sub-device does not exist independently
diff --git a/drivers/media/v4l2-core/v4l2-fwnode.c b/drivers/media/v4l2-core/v4l2-fwnode.c
-index 7f181fbbb140..1c0347de4e21 100644
+index 89c7192148df..44eca113e772 100644
--- a/drivers/media/v4l2-core/v4l2-fwnode.c
+++ b/drivers/media/v4l2-core/v4l2-fwnode.c
-@@ -1217,10 +1217,6 @@ int v4l2_async_register_subdev_sensor(struct v4l2_subdev *sd)
+@@ -1219,10 +1219,6 @@ int v4l2_async_register_subdev_sensor(struct v4l2_subdev *sd)
v4l2_async_subdev_nf_init(notifier, sd);
@@ -8085,9 +8413,9 @@ index 7f181fbbb140..1c0347de4e21 100644
if (ret < 0)
goto out_cleanup;
--
-2.43.0
+2.44.0
-From 68dac72bec1c99890d35d6bfd1b1f66e0cf8789c Mon Sep 17 00:00:00 2001
+From 84d70102a7892f720a11a0b3d313f3932c859798 Mon Sep 17 00:00:00 2001
From: Kate Hsuan <hpa@redhat.com>
Date: Tue, 21 Mar 2023 23:37:16 +0800
Subject: [PATCH] platform: x86: int3472: Add MFD cell for tps68470 LED
@@ -8126,9 +8454,9 @@ index e3e1696e7f0e..423dc555093f 100644
for (i = 0; i < board_data->n_gpiod_lookups; i++)
gpiod_add_lookup_table(board_data->tps68470_gpio_lookup_tables[i]);
--
-2.43.0
+2.44.0
-From 3f446f24aecaba808693f0173e28972e651fa87d Mon Sep 17 00:00:00 2001
+From 183f7e4da9cacc2a0f9cb3549adad9a3c95f1b94 Mon Sep 17 00:00:00 2001
From: Kate Hsuan <hpa@redhat.com>
Date: Tue, 21 Mar 2023 23:37:17 +0800
Subject: [PATCH] include: mfd: tps68470: Add masks for LEDA and LEDB
@@ -8167,9 +8495,9 @@ index 7807fa329db0..2d2abb25b944 100644
+
#endif /* __LINUX_MFD_TPS68470_H */
--
-2.43.0
+2.44.0
-From a0fe4ec438c5edb9f4360c8a2a5f5269d05c44ef Mon Sep 17 00:00:00 2001
+From 0f3811853f436eed853d7d226eb811f65137d03a Mon Sep 17 00:00:00 2001
From: Kate Hsuan <hpa@redhat.com>
Date: Tue, 21 Mar 2023 23:37:18 +0800
Subject: [PATCH] leds: tps68470: Add LED control for tps68470
@@ -8192,10 +8520,10 @@ Patchset: cameras
create mode 100644 drivers/leds/leds-tps68470.c
diff --git a/drivers/leds/Kconfig b/drivers/leds/Kconfig
-index a3a9ac5b5338..0bc6845b5d29 100644
+index d721b254e1e4..1717f94d1491 100644
--- a/drivers/leds/Kconfig
+++ b/drivers/leds/Kconfig
-@@ -875,6 +875,18 @@ config LEDS_TPS6105X
+@@ -899,6 +899,18 @@ config LEDS_TPS6105X
It is a single boost converter primarily for white LEDs and
audio amplifiers.
@@ -8215,10 +8543,10 @@ index a3a9ac5b5338..0bc6845b5d29 100644
tristate "LED support for SGI Octane machines"
depends on LEDS_CLASS
diff --git a/drivers/leds/Makefile b/drivers/leds/Makefile
-index d7348e8bc019..10caea4e7c61 100644
+index ce07dc295ff0..0ebf6a9f9f7f 100644
--- a/drivers/leds/Makefile
+++ b/drivers/leds/Makefile
-@@ -84,6 +84,7 @@ obj-$(CONFIG_LEDS_TCA6507) += leds-tca6507.o
+@@ -86,6 +86,7 @@ obj-$(CONFIG_LEDS_TCA6507) += leds-tca6507.o
obj-$(CONFIG_LEDS_TI_LMU_COMMON) += leds-ti-lmu-common.o
obj-$(CONFIG_LEDS_TLC591XX) += leds-tlc591xx.o
obj-$(CONFIG_LEDS_TPS6105X) += leds-tps6105x.o
@@ -8418,9 +8746,556 @@ index 000000000000..35aeb5db89c8
+MODULE_DESCRIPTION("LED driver for TPS68470 PMIC");
+MODULE_LICENSE("GPL v2");
--
-2.43.0
+2.44.0
+
+From b7e66758c1bd493c7140c17d0f00f727f8fefb32 Mon Sep 17 00:00:00 2001
+From: Hidenori Kobayashi <hidenorik@chromium.org>
+Date: Tue, 9 Jan 2024 17:09:09 +0900
+Subject: [PATCH] media: staging: ipu3-imgu: Set fields before
+ media_entity_pads_init()
+
+The imgu driver fails to probe with the following message because it
+does not set the pad's flags before calling media_entity_pads_init().
+
+[ 14.596315] ipu3-imgu 0000:00:05.0: failed initialize subdev media entity (-22)
+[ 14.596322] ipu3-imgu 0000:00:05.0: failed to register subdev0 ret (-22)
+[ 14.596327] ipu3-imgu 0000:00:05.0: failed to register pipes (-22)
+[ 14.596331] ipu3-imgu 0000:00:05.0: failed to create V4L2 devices (-22)
+
+Fix the initialization order so that the driver probe succeeds. The ops
+initialization is also moved together for readability.
+
+Fixes: a0ca1627b450 ("media: staging/intel-ipu3: Add v4l2 driver based on media framework")
+Cc: <stable@vger.kernel.org> # 6.7
+Cc: Dan Carpenter <dan.carpenter@linaro.org>
+Signed-off-by: Hidenori Kobayashi <hidenorik@chromium.org>
+Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
+Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
+Patchset: cameras
+---
+ drivers/staging/media/ipu3/ipu3-v4l2.c | 16 ++++++++--------
+ 1 file changed, 8 insertions(+), 8 deletions(-)
+
+diff --git a/drivers/staging/media/ipu3/ipu3-v4l2.c b/drivers/staging/media/ipu3/ipu3-v4l2.c
+index a66f034380c0..3df58eb3e882 100644
+--- a/drivers/staging/media/ipu3/ipu3-v4l2.c
++++ b/drivers/staging/media/ipu3/ipu3-v4l2.c
+@@ -1069,6 +1069,11 @@ static int imgu_v4l2_subdev_register(struct imgu_device *imgu,
+ struct imgu_media_pipe *imgu_pipe = &imgu->imgu_pipe[pipe];
+
+ /* Initialize subdev media entity */
++ imgu_sd->subdev.entity.ops = &imgu_media_ops;
++ for (i = 0; i < IMGU_NODE_NUM; i++) {
++ imgu_sd->subdev_pads[i].flags = imgu_pipe->nodes[i].output ?
++ MEDIA_PAD_FL_SINK : MEDIA_PAD_FL_SOURCE;
++ }
+ r = media_entity_pads_init(&imgu_sd->subdev.entity, IMGU_NODE_NUM,
+ imgu_sd->subdev_pads);
+ if (r) {
+@@ -1076,11 +1081,6 @@ static int imgu_v4l2_subdev_register(struct imgu_device *imgu,
+ "failed initialize subdev media entity (%d)\n", r);
+ return r;
+ }
+- imgu_sd->subdev.entity.ops = &imgu_media_ops;
+- for (i = 0; i < IMGU_NODE_NUM; i++) {
+- imgu_sd->subdev_pads[i].flags = imgu_pipe->nodes[i].output ?
+- MEDIA_PAD_FL_SINK : MEDIA_PAD_FL_SOURCE;
+- }
+
+ /* Initialize subdev */
+ v4l2_subdev_init(&imgu_sd->subdev, &imgu_subdev_ops);
+@@ -1177,15 +1177,15 @@ static int imgu_v4l2_node_setup(struct imgu_device *imgu, unsigned int pipe,
+ }
+
+ /* Initialize media entities */
++ node->vdev_pad.flags = node->output ?
++ MEDIA_PAD_FL_SOURCE : MEDIA_PAD_FL_SINK;
++ vdev->entity.ops = NULL;
+ r = media_entity_pads_init(&vdev->entity, 1, &node->vdev_pad);
+ if (r) {
+ dev_err(dev, "failed initialize media entity (%d)\n", r);
+ mutex_destroy(&node->lock);
+ return r;
+ }
+- node->vdev_pad.flags = node->output ?
+- MEDIA_PAD_FL_SOURCE : MEDIA_PAD_FL_SINK;
+- vdev->entity.ops = NULL;
+
+ /* Initialize vbq */
+ vbq->type = node->vdev_fmt.type;
+--
+2.44.0
+
+From 87ebc160cb35a068acfaf59847c84656cb52b1b7 Mon Sep 17 00:00:00 2001
+From: Sakari Ailus <sakari.ailus@linux.intel.com>
+Date: Thu, 25 May 2023 14:12:04 +0300
+Subject: [PATCH] media: ipu3-cio2: Further clean up async subdev link creation
+
+Use v4l2_create_fwnode_links_to_pad() to create links from async
+sub-devices to the CSI-2 receiver subdevs.
+
+Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
+Reviewed-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
+Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
+Patchset: cameras
+---
+ drivers/media/pci/intel/ipu3/ipu3-cio2.c | 22 +++++-----------------
+ 1 file changed, 5 insertions(+), 17 deletions(-)
+
+diff --git a/drivers/media/pci/intel/ipu3/ipu3-cio2.c b/drivers/media/pci/intel/ipu3/ipu3-cio2.c
+index ed08bf4178f0..83e29c56fe33 100644
+--- a/drivers/media/pci/intel/ipu3/ipu3-cio2.c
++++ b/drivers/media/pci/intel/ipu3/ipu3-cio2.c
+@@ -28,6 +28,7 @@
+ #include <media/v4l2-device.h>
+ #include <media/v4l2-event.h>
+ #include <media/v4l2-fwnode.h>
++#include <media/v4l2-mc.h>
+ #include <media/v4l2-ioctl.h>
+ #include <media/videobuf2-dma-sg.h>
+
+@@ -1407,7 +1408,6 @@ static void cio2_notifier_unbind(struct v4l2_async_notifier *notifier,
+ static int cio2_notifier_complete(struct v4l2_async_notifier *notifier)
+ {
+ struct cio2_device *cio2 = to_cio2_device(notifier);
+- struct device *dev = &cio2->pci_dev->dev;
+ struct sensor_async_subdev *s_asd;
+ struct v4l2_async_connection *asd;
+ struct cio2_queue *q;
+@@ -1417,23 +1417,10 @@ static int cio2_notifier_complete(struct v4l2_async_notifier *notifier)
+ s_asd = to_sensor_asd(asd);
+ q = &cio2->queue[s_asd->csi2.port];
+
+- ret = media_entity_get_fwnode_pad(&q->sensor->entity,
+- s_asd->asd.match.fwnode,
+- MEDIA_PAD_FL_SOURCE);
+- if (ret < 0) {
+- dev_err(dev, "no pad for endpoint %pfw (%d)\n",
+- s_asd->asd.match.fwnode, ret);
+- return ret;
+- }
+-
+- ret = media_create_pad_link(&q->sensor->entity, ret,
+- &q->subdev.entity, CIO2_PAD_SINK,
+- 0);
+- if (ret) {
+- dev_err(dev, "failed to create link for %s (endpoint %pfw, error %d)\n",
+- q->sensor->name, s_asd->asd.match.fwnode, ret);
++ ret = v4l2_create_fwnode_links_to_pad(asd->sd,
++ &q->subdev_pads[CIO2_PAD_SINK], 0);
++ if (ret)
+ return ret;
+- }
+ }
+
+ return v4l2_device_register_subdev_nodes(&cio2->v4l2_dev);
+@@ -1572,6 +1559,7 @@ static int cio2_queue_init(struct cio2_device *cio2, struct cio2_queue *q)
+ v4l2_subdev_init(subdev, &cio2_subdev_ops);
+ subdev->flags = V4L2_SUBDEV_FL_HAS_DEVNODE | V4L2_SUBDEV_FL_HAS_EVENTS;
+ subdev->owner = THIS_MODULE;
++ subdev->dev = dev;
+ snprintf(subdev->name, sizeof(subdev->name),
+ CIO2_ENTITY_NAME " %td", q - cio2->queue);
+ subdev->entity.function = MEDIA_ENT_F_VID_IF_BRIDGE;
+--
+2.44.0
+
+From a9681c29588d67321733877e11f9588ed9e54861 Mon Sep 17 00:00:00 2001
+From: mojyack <mojyack@gmail.com>
+Date: Sat, 3 Feb 2024 12:53:33 +0900
+Subject: [PATCH] media: i2c: Revert DW9719 driver
+
+Patchset: cameras
+---
+ drivers/media/i2c/dw9719.c | 199 +++++++++++++++++++++++++------------
+ 1 file changed, 137 insertions(+), 62 deletions(-)
+
+diff --git a/drivers/media/i2c/dw9719.c b/drivers/media/i2c/dw9719.c
+index c626ed845928..d5f585dabb60 100644
+--- a/drivers/media/i2c/dw9719.c
++++ b/drivers/media/i2c/dw9719.c
+@@ -6,13 +6,14 @@
+ * https://github.com/ZenfoneArea/android_kernel_asus_zenfone5
+ */
+
++#include <asm/unaligned.h>
++
+ #include <linux/delay.h>
+ #include <linux/i2c.h>
+ #include <linux/pm_runtime.h>
+ #include <linux/regulator/consumer.h>
+ #include <linux/types.h>
+
+-#include <media/v4l2-cci.h>
+ #include <media/v4l2-common.h>
+ #include <media/v4l2-ctrls.h>
+ #include <media/v4l2-subdev.h>
+@@ -20,31 +21,29 @@
+ #define DW9719_MAX_FOCUS_POS 1023
+ #define DW9719_CTRL_STEPS 16
+ #define DW9719_CTRL_DELAY_US 1000
++#define DELAY_MAX_PER_STEP_NS (1000000 * 1023)
+
+-#define DW9719_INFO CCI_REG8(0)
++#define DW9719_INFO 0
+ #define DW9719_ID 0xF1
++#define DW9719_CONTROL 2
++#define DW9719_VCM_CURRENT 3
+
+-#define DW9719_CONTROL CCI_REG8(2)
+-#define DW9719_ENABLE_RINGING 0x02
+-
+-#define DW9719_VCM_CURRENT CCI_REG16(3)
+-
+-#define DW9719_MODE CCI_REG8(6)
+-#define DW9719_MODE_SAC_SHIFT 4
+-#define DW9719_MODE_SAC3 4
++#define DW9719_MODE 6
++#define DW9719_VCM_FREQ 7
+
+-#define DW9719_VCM_FREQ CCI_REG8(7)
++#define DW9719_MODE_SAC3 0x40
+ #define DW9719_DEFAULT_VCM_FREQ 0x60
++#define DW9719_ENABLE_RINGING 0x02
++
++#define NUM_REGULATORS 2
+
+ #define to_dw9719_device(x) container_of(x, struct dw9719_device, sd)
+
+ struct dw9719_device {
+- struct v4l2_subdev sd;
+ struct device *dev;
+- struct regmap *regmap;
+- struct regulator *regulator;
+- u32 sac_mode;
+- u32 vcm_freq;
++ struct i2c_client *client;
++ struct regulator_bulk_data regulators[NUM_REGULATORS];
++ struct v4l2_subdev sd;
+
+ struct dw9719_v4l2_ctrls {
+ struct v4l2_ctrl_handler handler;
+@@ -52,18 +51,79 @@ struct dw9719_device {
+ } ctrls;
+ };
+
++static int dw9719_i2c_rd8(struct i2c_client *client, u8 reg, u8 *val)
++{
++ struct i2c_msg msg[2];
++ u8 buf[2] = { reg };
++ int ret;
++
++ msg[0].addr = client->addr;
++ msg[0].flags = 0;
++ msg[0].len = 1;
++ msg[0].buf = buf;
++
++ msg[1].addr = client->addr;
++ msg[1].flags = I2C_M_RD;
++ msg[1].len = 1;
++ msg[1].buf = &buf[1];
++ *val = 0;
++
++ ret = i2c_transfer(client->adapter, msg, 2);
++ if (ret < 0)
++ return ret;
++
++ *val = buf[1];
++
++ return 0;
++}
++
++static int dw9719_i2c_wr8(struct i2c_client *client, u8 reg, u8 val)
++{
++ struct i2c_msg msg;
++ int ret;
++
++ u8 buf[2] = { reg, val };
++
++ msg.addr = client->addr;
++ msg.flags = 0;
++ msg.len = sizeof(buf);
++ msg.buf = buf;
++
++ ret = i2c_transfer(client->adapter, &msg, 1);
++
++ return ret < 0 ? ret : 0;
++}
++
++static int dw9719_i2c_wr16(struct i2c_client *client, u8 reg, u16 val)
++{
++ struct i2c_msg msg;
++ u8 buf[3] = { reg };
++ int ret;
++
++ put_unaligned_be16(val, buf + 1);
++
++ msg.addr = client->addr;
++ msg.flags = 0;
++ msg.len = sizeof(buf);
++ msg.buf = buf;
++
++ ret = i2c_transfer(client->adapter, &msg, 1);
++
++ return ret < 0 ? ret : 0;
++}
++
+ static int dw9719_detect(struct dw9719_device *dw9719)
+ {
+ int ret;
+- u64 val;
++ u8 val;
+
+- ret = cci_read(dw9719->regmap, DW9719_INFO, &val, NULL);
++ ret = dw9719_i2c_rd8(dw9719->client, DW9719_INFO, &val);
+ if (ret < 0)
+ return ret;
+
+ if (val != DW9719_ID) {
+ dev_err(dw9719->dev, "Failed to detect correct id\n");
+- return -ENXIO;
++ ret = -ENXIO;
+ }
+
+ return 0;
+@@ -71,37 +131,54 @@ static int dw9719_detect(struct dw9719_device *dw9719)
+
+ static int dw9719_power_down(struct dw9719_device *dw9719)
+ {
+- return regulator_disable(dw9719->regulator);
++ return regulator_bulk_disable(NUM_REGULATORS, dw9719->regulators);
+ }
+
+ static int dw9719_power_up(struct dw9719_device *dw9719)
+ {
+ int ret;
+
+- ret = regulator_enable(dw9719->regulator);
++ ret = regulator_bulk_enable(NUM_REGULATORS, dw9719->regulators);
+ if (ret)
+ return ret;
+
+ /* Jiggle SCL pin to wake up device */
+- cci_write(dw9719->regmap, DW9719_CONTROL, 1, &ret);
++ ret = dw9719_i2c_wr8(dw9719->client, DW9719_CONTROL, 1);
+
+- /* Need 100us to transit from SHUTDOWN to STANDBY */
+- fsleep(100);
++ /* Need 100us to transit from SHUTDOWN to STANDBY*/
++ usleep_range(100, 1000);
+
+- cci_write(dw9719->regmap, DW9719_CONTROL, DW9719_ENABLE_RINGING, &ret);
+- cci_write(dw9719->regmap, DW9719_MODE,
+- dw9719->sac_mode << DW9719_MODE_SAC_SHIFT, &ret);
+- cci_write(dw9719->regmap, DW9719_VCM_FREQ, dw9719->vcm_freq, &ret);
++ ret = dw9719_i2c_wr8(dw9719->client, DW9719_CONTROL,
++ DW9719_ENABLE_RINGING);
++ if (ret < 0)
++ goto fail_powerdown;
+
+- if (ret)
+- dw9719_power_down(dw9719);
++ ret = dw9719_i2c_wr8(dw9719->client, DW9719_MODE, DW9719_MODE_SAC3);
++ if (ret < 0)
++ goto fail_powerdown;
++
++ ret = dw9719_i2c_wr8(dw9719->client, DW9719_VCM_FREQ,
++ DW9719_DEFAULT_VCM_FREQ);
++ if (ret < 0)
++ goto fail_powerdown;
++
++ return 0;
+
++fail_powerdown:
++ dw9719_power_down(dw9719);
+ return ret;
+ }
+
+ static int dw9719_t_focus_abs(struct dw9719_device *dw9719, s32 value)
+ {
+- return cci_write(dw9719->regmap, DW9719_VCM_CURRENT, value, NULL);
++ int ret;
++
++ value = clamp(value, 0, DW9719_MAX_FOCUS_POS);
++ ret = dw9719_i2c_wr16(dw9719->client, DW9719_VCM_CURRENT, value);
++ if (ret < 0)
++ return ret;
++
++ return 0;
+ }
+
+ static int dw9719_set_ctrl(struct v4l2_ctrl *ctrl)
+@@ -132,7 +209,7 @@ static const struct v4l2_ctrl_ops dw9719_ctrl_ops = {
+ .s_ctrl = dw9719_set_ctrl,
+ };
+
+-static int dw9719_suspend(struct device *dev)
++static int __maybe_unused dw9719_suspend(struct device *dev)
+ {
+ struct v4l2_subdev *sd = dev_get_drvdata(dev);
+ struct dw9719_device *dw9719 = to_dw9719_device(sd);
+@@ -151,7 +228,7 @@ static int dw9719_suspend(struct device *dev)
+ return dw9719_power_down(dw9719);
+ }
+
+-static int dw9719_resume(struct device *dev)
++static int __maybe_unused dw9719_resume(struct device *dev)
+ {
+ struct v4l2_subdev *sd = dev_get_drvdata(dev);
+ struct dw9719_device *dw9719 = to_dw9719_device(sd);
+@@ -201,7 +278,9 @@ static int dw9719_init_controls(struct dw9719_device *dw9719)
+ const struct v4l2_ctrl_ops *ops = &dw9719_ctrl_ops;
+ int ret;
+
+- v4l2_ctrl_handler_init(&dw9719->ctrls.handler, 1);
++ ret = v4l2_ctrl_handler_init(&dw9719->ctrls.handler, 1);
++ if (ret)
++ return ret;
+
+ dw9719->ctrls.focus = v4l2_ctrl_new_std(&dw9719->ctrls.handler, ops,
+ V4L2_CID_FOCUS_ABSOLUTE, 0,
+@@ -214,7 +293,8 @@ static int dw9719_init_controls(struct dw9719_device *dw9719)
+ }
+
+ dw9719->sd.ctrl_handler = &dw9719->ctrls.handler;
+- return 0;
++
++ return ret;
+
+ err_free_handler:
+ v4l2_ctrl_handler_free(&dw9719->ctrls.handler);
+@@ -232,26 +312,24 @@ static int dw9719_probe(struct i2c_client *client)
+ if (!dw9719)
+ return -ENOMEM;
+
+- dw9719->regmap = devm_cci_regmap_init_i2c(client, 8);
+- if (IS_ERR(dw9719->regmap))
+- return PTR_ERR(dw9719->regmap);
+-
++ dw9719->client = client;
+ dw9719->dev = &client->dev;
+- dw9719->sac_mode = DW9719_MODE_SAC3;
+- dw9719->vcm_freq = DW9719_DEFAULT_VCM_FREQ;
+
+- /* Optional indication of SAC mode select */
+- device_property_read_u32(&client->dev, "dongwoon,sac-mode",
+- &dw9719->sac_mode);
+-
+- /* Optional indication of VCM frequency */
+- device_property_read_u32(&client->dev, "dongwoon,vcm-freq",
+- &dw9719->vcm_freq);
++ dw9719->regulators[0].supply = "vdd";
++ /*
++ * The DW9719 has only the 1 VDD voltage input, but some PMICs such as
++ * the TPS68470 PMIC have I2C passthrough capability, to disconnect the
++ * sensor's I2C pins from the I2C bus when the sensors VSIO (Sensor-IO)
++ * is off, because some sensors then short these pins to ground;
++ * and the DW9719 might sit behind this passthrough, this it needs to
++ * enable VSIO as that will also enable the I2C passthrough.
++ */
++ dw9719->regulators[1].supply = "vsio";
+
+- dw9719->regulator = devm_regulator_get(&client->dev, "vdd");
+- if (IS_ERR(dw9719->regulator))
+- return dev_err_probe(&client->dev, PTR_ERR(dw9719->regulator),
+- "getting regulator\n");
++ ret = devm_regulator_bulk_get(&client->dev, NUM_REGULATORS,
++ dw9719->regulators);
++ if (ret)
++ return dev_err_probe(&client->dev, ret, "getting regulators\n");
+
+ v4l2_i2c_subdev_init(&dw9719->sd, client, &dw9719_ops);
+ dw9719->sd.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE;
+@@ -312,17 +390,13 @@ static int dw9719_probe(struct i2c_client *client)
+ static void dw9719_remove(struct i2c_client *client)
+ {
+ struct v4l2_subdev *sd = i2c_get_clientdata(client);
+- struct dw9719_device *dw9719 =
+- container_of(sd, struct dw9719_device, sd);
++ struct dw9719_device *dw9719 = container_of(sd, struct dw9719_device,
++ sd);
+
++ pm_runtime_disable(&client->dev);
+ v4l2_async_unregister_subdev(sd);
+ v4l2_ctrl_handler_free(&dw9719->ctrls.handler);
+ media_entity_cleanup(&dw9719->sd.entity);
+-
+- pm_runtime_disable(&client->dev);
+- if (!pm_runtime_status_suspended(&client->dev))
+- dw9719_power_down(dw9719);
+- pm_runtime_set_suspended(&client->dev);
+ }
+
+ static const struct i2c_device_id dw9719_id_table[] = {
+@@ -331,13 +405,14 @@ static const struct i2c_device_id dw9719_id_table[] = {
+ };
+ MODULE_DEVICE_TABLE(i2c, dw9719_id_table);
+
+-static DEFINE_RUNTIME_DEV_PM_OPS(dw9719_pm_ops, dw9719_suspend, dw9719_resume,
+- NULL);
++static const struct dev_pm_ops dw9719_pm_ops = {
++ SET_RUNTIME_PM_OPS(dw9719_suspend, dw9719_resume, NULL)
++};
+
+ static struct i2c_driver dw9719_i2c_driver = {
+ .driver = {
+ .name = "dw9719",
+- .pm = pm_sleep_ptr(&dw9719_pm_ops),
++ .pm = &dw9719_pm_ops,
+ },
+ .probe = dw9719_probe,
+ .remove = dw9719_remove,
+--
+2.44.0
+
+From c5d6c95fd5cefbd4ba9779fc965bce0a36bdbe5e Mon Sep 17 00:00:00 2001
+From: mojyack <mojyack@gmail.com>
+Date: Sat, 3 Feb 2024 12:59:53 +0900
+Subject: [PATCH] media: staging: ipu3-imgu: Fix multiple calls of s_stream on
+ stream stop
+
+Adapt to 009905e "media: v4l2-subdev: Document and enforce .s_stream() requirements"
+
+Patchset: cameras
+---
+ drivers/staging/media/ipu3/ipu3-v4l2.c | 16 ++++++++--------
+ 1 file changed, 8 insertions(+), 8 deletions(-)
+
+diff --git a/drivers/staging/media/ipu3/ipu3-v4l2.c b/drivers/staging/media/ipu3/ipu3-v4l2.c
+index 3df58eb3e882..81aff2d5d898 100644
+--- a/drivers/staging/media/ipu3/ipu3-v4l2.c
++++ b/drivers/staging/media/ipu3/ipu3-v4l2.c
+@@ -538,18 +538,18 @@ static void imgu_vb2_stop_streaming(struct vb2_queue *vq)
+
+ WARN_ON(!node->enabled);
+
+- pipe = node->pipe;
+- dev_dbg(dev, "Try to stream off node [%u][%u]", pipe, node->id);
+- imgu_pipe = &imgu->imgu_pipe[pipe];
+- r = v4l2_subdev_call(&imgu_pipe->imgu_sd.subdev, video, s_stream, 0);
+- if (r)
+- dev_err(&imgu->pci_dev->dev,
+- "failed to stop subdev streaming\n");
+-
+ mutex_lock(&imgu->streaming_lock);
+ /* Was this the first node with streaming disabled? */
+ if (imgu->streaming && imgu_all_nodes_streaming(imgu, node)) {
+ /* Yes, really stop streaming now */
++ pipe = node->pipe;
++ dev_dbg(dev, "Try to stream off node [%u][%u]", pipe, node->id);
++ imgu_pipe = &imgu->imgu_pipe[pipe];
++ r = v4l2_subdev_call(&imgu_pipe->imgu_sd.subdev, video, s_stream, 0);
++ if (r)
++ dev_err(&imgu->pci_dev->dev,
++ "failed to stop subdev streaming\n");
++
+ dev_dbg(dev, "IMGU streaming is ready to stop");
+ r = imgu_s_stream(imgu, false);
+ if (!r)
+--
+2.44.0
-From 04069751b144350632ec45b5b25c2cc01d5f34ef Mon Sep 17 00:00:00 2001
+From 302d8dc26283bc10ba22bc549c41292d00125e60 Mon Sep 17 00:00:00 2001
From: Sachi King <nakato@nakato.io>
Date: Sat, 29 May 2021 17:47:38 +1000
Subject: [PATCH] ACPI: Add quirk for Surface Laptop 4 AMD missing irq 7
@@ -8485,9 +9360,9 @@ index 85a3ce2a3666..2c0e04a3a697 100644
mp_config_acpi_legacy_irqs();
--
-2.43.0
+2.44.0
-From 8e2f2b852776fca1dd0ab8728be2303051cb19e1 Mon Sep 17 00:00:00 2001
+From d2a793e4fd47cd1cba2847915e7078671d9e9ea5 Mon Sep 17 00:00:00 2001
From: Maximilian Luz <luzmaximilian@gmail.com>
Date: Thu, 3 Jun 2021 14:04:26 +0200
Subject: [PATCH] ACPI: Add AMD 13" Surface Laptop 4 model to irq 7 override
@@ -8527,9 +9402,9 @@ index 2c0e04a3a697..b0e1dab3d2ec 100644
};
--
-2.43.0
+2.44.0
-From 4e36132e272de3d84833b799be56c2b460db08b6 Mon Sep 17 00:00:00 2001
+From 34ad5b493b00c944ed68d2436cad96785fe37a33 Mon Sep 17 00:00:00 2001
From: "Bart Groeneveld | GPX Solutions B.V" <bart@gpxbv.nl>
Date: Mon, 5 Dec 2022 16:08:46 +0100
Subject: [PATCH] acpi: allow usage of acpi_tad on HW-reduced platforms
@@ -8637,5 +9512,5 @@ index 33c3b16af556..900445d06623 100644
ret = sysfs_create_group(&dev->kobj, &acpi_tad_dc_attr_group);
if (ret)
--
-2.43.0
+2.44.0
diff --git a/SOURCES/mod-extra.list.fedora b/SOURCES/mod-extra.list.fedora
index 9e2e1b1..327c7fe 100644
--- a/SOURCES/mod-extra.list.fedora
+++ b/SOURCES/mod-extra.list.fedora
@@ -196,6 +196,5 @@ wanrouter.ko
warrior.ko
whci.ko
wire.ko
-wwan_hwsim.ko
yam.ko
zhenhua.ko
diff --git a/SOURCES/mod-extra.list.rhel b/SOURCES/mod-extra.list.rhel
index b70a008..27be547 100644
--- a/SOURCES/mod-extra.list.rhel
+++ b/SOURCES/mod-extra.list.rhel
@@ -257,7 +257,6 @@ wanrouter.ko
warrior.ko
whci.ko
wire.ko
-wwan_hwsim.ko
xt_addrtype.ko
xt_AUDIT.ko
xt_bpf.ko
diff --git a/SOURCES/mod-internal.list b/SOURCES/mod-internal.list
index a63d55f..5a473b1 100644
--- a/SOURCES/mod-internal.list
+++ b/SOURCES/mod-internal.list
@@ -18,6 +18,7 @@ drm_exec_test
drm_format_helper_test
drm_format_test
drm_framebuffer_test
+drm_gem_shmem_test
drm_kunit_helpers
drm_managed_test
drm_mm_test
@@ -95,3 +96,4 @@ test_sort
test_vmalloc
time_test
torture
+wwan_hwsim
diff --git a/SOURCES/nvidiagpuoot001.x509 b/SOURCES/nvidiagpuoot001.x509
new file mode 100644
index 0000000..de1b601
--- /dev/null
+++ b/SOURCES/nvidiagpuoot001.x509
Binary files differ
diff --git a/SOURCES/patch-6.7-redhat.patch b/SOURCES/patch-6.8-redhat.patch
index 5e62197..977f728 100644
--- a/SOURCES/patch-6.7-redhat.patch
+++ b/SOURCES/patch-6.8-redhat.patch
@@ -1,4 +1,3 @@
- .../admin-guide/laptops/thinkpad-acpi.rst | 7 +-
Makefile | 20 ++-
arch/s390/include/asm/ipl.h | 1 +
arch/s390/kernel/ipl.c | 5 +
@@ -17,11 +16,9 @@
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 2 +
drivers/hid/hid-rmi.c | 66 --------
drivers/hwtracing/coresight/coresight-etm4x-core.c | 19 +++
- drivers/input/keyboard/atkbd.c | 3 +-
drivers/input/rmi4/rmi_driver.c | 124 +++++++++------
drivers/iommu/iommu.c | 22 +++
drivers/pci/quirks.c | 24 +++
- drivers/platform/x86/thinkpad_acpi.c | 20 ++-
drivers/scsi/sd.c | 10 ++
drivers/usb/core/hub.c | 7 +
fs/xfs/xfs_iomap.c | 4 +-
@@ -40,35 +37,10 @@
security/lockdown/lockdown.c | 1 +
security/security.c | 12 ++
tools/power/cpupower/Makefile | 2 +-
- 42 files changed, 701 insertions(+), 181 deletions(-)
+ 39 files changed, 674 insertions(+), 178 deletions(-)
-diff --git a/Documentation/admin-guide/laptops/thinkpad-acpi.rst b/Documentation/admin-guide/laptops/thinkpad-acpi.rst
-index 98d304010170..7f674a6cfa8a 100644
---- a/Documentation/admin-guide/laptops/thinkpad-acpi.rst
-+++ b/Documentation/admin-guide/laptops/thinkpad-acpi.rst
-@@ -444,7 +444,9 @@ event code Key Notes
-
- 0x1008 0x07 FN+F8 IBM: toggle screen expand
- Lenovo: configure UltraNav,
-- or toggle screen expand
-+ or toggle screen expand.
-+ On newer platforms (2024+)
-+ replaced by 0x131f (see below)
-
- 0x1009 0x08 FN+F9 -
-
-@@ -504,6 +506,9 @@ event code Key Notes
-
- 0x1019 0x18 unknown
-
-+0x131f ... FN+F8 Platform Mode change.
-+ Implemented in driver.
-+
- ... ... ...
-
- 0x1020 0x1F unknown
diff --git a/Makefile b/Makefile
-index 6e3182cdf016..9cc543a90f97 100644
+index 33d8e822f6f1..0451e4e79e5c 100644
--- a/Makefile
+++ b/Makefile
@@ -22,6 +22,18 @@ $(if $(filter __%, $(MAKECMDGOALS)), \
@@ -90,7 +62,7 @@ index 6e3182cdf016..9cc543a90f97 100644
# We are using a recursive build, so we need to do a little thinking
# to get the ordering right.
#
-@@ -1239,7 +1251,13 @@ define filechk_version.h
+@@ -1247,7 +1259,13 @@ define filechk_version.h
((c) > 255 ? 255 : (c)))'; \
echo \#define LINUX_VERSION_MAJOR $(VERSION); \
echo \#define LINUX_VERSION_PATCHLEVEL $(PATCHLEVEL); \
@@ -131,7 +103,7 @@ index ba75f6bee774..7d37ce1772f1 100644
+ return !!ipl_secure_flag;
+}
diff --git a/arch/s390/kernel/setup.c b/arch/s390/kernel/setup.c
-index 5701356f4f33..cf3593dc271e 100644
+index d1f3b56e7afc..eaefd0d7cfff 100644
--- a/arch/s390/kernel/setup.c
+++ b/arch/s390/kernel/setup.c
@@ -49,6 +49,7 @@
@@ -142,7 +114,7 @@ index 5701356f4f33..cf3593dc271e 100644
#include <linux/hugetlb.h>
#include <linux/kmemleak.h>
-@@ -907,6 +908,9 @@ void __init setup_arch(char **cmdline_p)
+@@ -891,6 +892,9 @@ void __init setup_arch(char **cmdline_p)
log_component_list();
@@ -153,7 +125,7 @@ index 5701356f4f33..cf3593dc271e 100644
/* boot_command_line has been already set up in early.c */
*cmdline_p = boot_command_line;
diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
-index 1526747bedf2..c482cbf0ccaf 100644
+index 84201071dfac..1e7b9e53ec3d 100644
--- a/arch/x86/kernel/setup.c
+++ b/arch/x86/kernel/setup.c
@@ -21,6 +21,7 @@
@@ -164,7 +136,7 @@ index 1526747bedf2..c482cbf0ccaf 100644
#include <linux/usb/xhci-dbgp.h>
#include <linux/static_call.h>
#include <linux/swiotlb.h>
-@@ -903,6 +904,13 @@ void __init setup_arch(char **cmdline_p)
+@@ -901,6 +902,13 @@ void __init setup_arch(char **cmdline_p)
if (efi_enabled(EFI_BOOT))
efi_init();
@@ -262,10 +234,10 @@ index 1687483ff319..390b67f19181 100644
return ctx.rc;
}
diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c
-index 35ad5781f0a5..63245639aecf 100644
+index 617f3e0e963d..92d9066ab4c2 100644
--- a/drivers/acpi/scan.c
+++ b/drivers/acpi/scan.c
-@@ -1753,6 +1753,15 @@ static bool acpi_device_enumeration_by_parent(struct acpi_device *device)
+@@ -1757,6 +1757,15 @@ static bool acpi_device_enumeration_by_parent(struct acpi_device *device)
if (!acpi_match_device_ids(device, ignore_serial_bus_ids))
return false;
@@ -337,7 +309,7 @@ index bbf7029e224b..cf7faa970dd6 100644
dmi_decode_ipmi((const struct dmi_header *) dev->device_data);
diff --git a/drivers/char/ipmi/ipmi_msghandler.c b/drivers/char/ipmi/ipmi_msghandler.c
-index d6f14279684d..9bc53b1970ab 100644
+index b0eedc4595b3..a9024c1dd68a 100644
--- a/drivers/char/ipmi/ipmi_msghandler.c
+++ b/drivers/char/ipmi/ipmi_msghandler.c
@@ -35,6 +35,7 @@
@@ -372,7 +344,7 @@ index d6f14279684d..9bc53b1970ab 100644
rv = ipmi_register_driver();
mutex_unlock(&ipmi_interfaces_mutex);
diff --git a/drivers/firmware/efi/Makefile b/drivers/firmware/efi/Makefile
-index e489fefd23da..f2dfae764fb5 100644
+index a2d0009560d0..4f3486e6a84b 100644
--- a/drivers/firmware/efi/Makefile
+++ b/drivers/firmware/efi/Makefile
@@ -25,6 +25,7 @@ subdir-$(CONFIG_EFI_STUB) += libstub
@@ -384,18 +356,18 @@ index e489fefd23da..f2dfae764fb5 100644
obj-$(CONFIG_EFI_RCI2_TABLE) += rci2-table.o
obj-$(CONFIG_EFI_EMBEDDED_FIRMWARE) += embedded-firmware.o
diff --git a/drivers/firmware/efi/efi.c b/drivers/firmware/efi/efi.c
-index 9d3910d1abe1..f73b3ba6ef0b 100644
+index 4fcda50acfa4..bbbcff15f587 100644
--- a/drivers/firmware/efi/efi.c
+++ b/drivers/firmware/efi/efi.c
-@@ -32,6 +32,7 @@
- #include <linux/ucs2_string.h>
+@@ -33,6 +33,7 @@
#include <linux/memblock.h>
#include <linux/security.h>
+ #include <linux/notifier.h>
+#include <linux/bsearch.h>
#include <asm/early_ioremap.h>
-@@ -972,40 +973,101 @@ int efi_mem_type(unsigned long phys_addr)
+@@ -990,40 +991,101 @@ int efi_mem_type(unsigned long phys_addr)
return -EINVAL;
}
@@ -609,10 +581,10 @@ index 3c197db42c9d..16e4a2e90fae 100644
if (!IS_ERR(pd))
goto unlock_mutex;
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
-index 7f48c7ec4136..c8ce83be5376 100644
+index 94bdb5fa6ebc..1fbaf7b81d69 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
-@@ -4451,6 +4451,8 @@ int amdgpu_device_prepare(struct drm_device *dev)
+@@ -4524,6 +4524,8 @@ int amdgpu_device_prepare(struct drm_device *dev)
if (r)
goto unprepare;
@@ -724,7 +696,7 @@ index d4af17fdba46..154f0403cbf4 100644
data->xport.ops = &hid_rmi_ops;
diff --git a/drivers/hwtracing/coresight/coresight-etm4x-core.c b/drivers/hwtracing/coresight/coresight-etm4x-core.c
-index 18c4544f6045..4c37cdc40426 100644
+index 2e2cabc5f50a..8b44d990f978 100644
--- a/drivers/hwtracing/coresight/coresight-etm4x-core.c
+++ b/drivers/hwtracing/coresight/coresight-etm4x-core.c
@@ -10,6 +10,7 @@
@@ -735,7 +707,7 @@ index 18c4544f6045..4c37cdc40426 100644
#include <linux/io.h>
#include <linux/err.h>
#include <linux/fs.h>
-@@ -2303,6 +2304,16 @@ static const struct amba_id etm4_ids[] = {
+@@ -2343,6 +2344,16 @@ static const struct amba_id etm4_ids[] = {
{},
};
@@ -752,7 +724,7 @@ index 18c4544f6045..4c37cdc40426 100644
MODULE_DEVICE_TABLE(amba, etm4_ids);
static struct amba_driver etm4x_amba_driver = {
-@@ -2372,6 +2383,11 @@ static int __init etm4x_init(void)
+@@ -2412,6 +2423,11 @@ static int __init etm4x_init(void)
{
int ret;
@@ -764,7 +736,7 @@ index 18c4544f6045..4c37cdc40426 100644
ret = etm4_pm_setup();
/* etm4_pm_setup() does its own cleanup - exit on error */
-@@ -2398,6 +2414,9 @@ static int __init etm4x_init(void)
+@@ -2438,6 +2454,9 @@ static int __init etm4x_init(void)
static void __exit etm4x_exit(void)
{
@@ -774,29 +746,8 @@ index 18c4544f6045..4c37cdc40426 100644
amba_driver_unregister(&etm4x_amba_driver);
platform_driver_unregister(&etm4_platform_driver);
etm4_pm_clear();
-diff --git a/drivers/input/keyboard/atkbd.c b/drivers/input/keyboard/atkbd.c
-index c229bd6b3f7f..7f67f9f2946b 100644
---- a/drivers/input/keyboard/atkbd.c
-+++ b/drivers/input/keyboard/atkbd.c
-@@ -826,7 +826,7 @@ static int atkbd_probe(struct atkbd *atkbd)
-
- if (atkbd_skip_getid(atkbd)) {
- atkbd->id = 0xab83;
-- return 0;
-+ goto deactivate_kbd;
- }
-
- /*
-@@ -863,6 +863,7 @@ static int atkbd_probe(struct atkbd *atkbd)
- return -1;
- }
-
-+deactivate_kbd:
- /*
- * Make sure nothing is coming from the keyboard and disturbs our
- * internal state.
diff --git a/drivers/input/rmi4/rmi_driver.c b/drivers/input/rmi4/rmi_driver.c
-index 258d5fe3d395..f7298e3dc8f3 100644
+index 42eaebb3bf5c..7a35119c3144 100644
--- a/drivers/input/rmi4/rmi_driver.c
+++ b/drivers/input/rmi4/rmi_driver.c
@@ -182,34 +182,47 @@ void rmi_set_attn_data(struct rmi_device *rmi_dev, unsigned long irq_status,
@@ -959,9 +910,9 @@ index 258d5fe3d395..f7298e3dc8f3 100644
}
out:
-@@ -981,6 +997,8 @@ static int rmi_driver_remove(struct device *dev)
- irq_domain_remove(data->irqdomain);
- data->irqdomain = NULL;
+@@ -978,6 +994,8 @@ static int rmi_driver_remove(struct device *dev)
+
+ rmi_disable_irq(rmi_dev, false);
+ cancel_work_sync(&data->attn_work);
+
@@ -988,7 +939,7 @@ index 258d5fe3d395..f7298e3dc8f3 100644
if (data->f01_container->dev.driver) {
/* Driver already bound, so enable ATTN now. */
diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c
-index 33e2a9b5d339..6ae1abc3f11c 100644
+index cd1210026ac5..448d146c6757 100644
--- a/drivers/iommu/iommu.c
+++ b/drivers/iommu/iommu.c
@@ -8,6 +8,7 @@
@@ -999,7 +950,7 @@ index 33e2a9b5d339..6ae1abc3f11c 100644
#include <linux/kernel.h>
#include <linux/bits.h>
#include <linux/bug.h>
-@@ -3031,6 +3032,27 @@ int iommu_dev_disable_feature(struct device *dev, enum iommu_dev_features feat)
+@@ -3106,6 +3107,27 @@ int iommu_dev_disable_feature(struct device *dev, enum iommu_dev_features feat)
}
EXPORT_SYMBOL_GPL(iommu_dev_disable_feature);
@@ -1028,10 +979,10 @@ index 33e2a9b5d339..6ae1abc3f11c 100644
* iommu_setup_default_domain - Set the default_domain for the group
* @group: Group to change
diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
-index 528044237bf9..c50375d40fa0 100644
+index 2ebbe51a7efe..503f79c60365 100644
--- a/drivers/pci/quirks.c
+++ b/drivers/pci/quirks.c
-@@ -4426,6 +4426,30 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_BROADCOM, 0x9000,
+@@ -4433,6 +4433,30 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_BROADCOM, 0x9000,
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_BROADCOM, 0x9084,
quirk_bridge_cavm_thrx2_pcie_root);
@@ -1062,53 +1013,8 @@ index 528044237bf9..c50375d40fa0 100644
/*
* Intersil/Techwell TW686[4589]-based video capture cards have an empty (zero)
* class code. Fix it.
-diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c
-index 5ecd9d33250d..66be6eedb4ae 100644
---- a/drivers/platform/x86/thinkpad_acpi.c
-+++ b/drivers/platform/x86/thinkpad_acpi.c
-@@ -166,6 +166,7 @@ enum tpacpi_hkey_event_t {
- TP_HKEY_EV_VOL_MUTE = 0x1017, /* Mixer output mute */
- TP_HKEY_EV_PRIVACYGUARD_TOGGLE = 0x130f, /* Toggle priv.guard on/off */
- TP_HKEY_EV_AMT_TOGGLE = 0x131a, /* Toggle AMT on/off */
-+ TP_HKEY_EV_PROFILE_TOGGLE = 0x131f, /* Toggle platform profile */
-
- /* Reasons for waking up from S3/S4 */
- TP_HKEY_EV_WKUP_S3_UNDOCK = 0x2304, /* undock requested, S3 */
-@@ -3731,6 +3732,7 @@ static bool hotkey_notify_extended_hotkey(const u32 hkey)
- switch (hkey) {
- case TP_HKEY_EV_PRIVACYGUARD_TOGGLE:
- case TP_HKEY_EV_AMT_TOGGLE:
-+ case TP_HKEY_EV_PROFILE_TOGGLE:
- tpacpi_driver_event(hkey);
- return true;
- }
-@@ -11119,7 +11121,23 @@ static void tpacpi_driver_event(const unsigned int hkey_event)
- else
- dytc_control_amt(!dytc_amt_active);
- }
--
-+ if (hkey_event == TP_HKEY_EV_PROFILE_TOGGLE) {
-+ switch (dytc_current_profile) {
-+ case PLATFORM_PROFILE_LOW_POWER:
-+ dytc_profile_set(NULL, PLATFORM_PROFILE_BALANCED);
-+ break;
-+ case PLATFORM_PROFILE_BALANCED:
-+ dytc_profile_set(NULL, PLATFORM_PROFILE_PERFORMANCE);
-+ break;
-+ case PLATFORM_PROFILE_PERFORMANCE:
-+ dytc_profile_set(NULL, PLATFORM_PROFILE_LOW_POWER);
-+ break;
-+ default:
-+ pr_warn("Profile HKEY unexpected profile %d", dytc_current_profile);
-+ }
-+ /* Notify user space the profile changed */
-+ platform_profile_notify();
-+ }
- }
-
- static void hotkey_driver_event(const unsigned int scancode)
diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c
-index a12ff43ac8fd..4940d18fd72d 100644
+index bdd0acf7fa3c..2adde1beb158 100644
--- a/drivers/scsi/sd.c
+++ b/drivers/scsi/sd.c
@@ -118,6 +118,14 @@ static const char *sd_cache_types[] = {
@@ -1126,7 +1032,7 @@ index a12ff43ac8fd..4940d18fd72d 100644
static void sd_set_flush_flag(struct scsi_disk *sdkp)
{
bool wc = false, fua = false;
-@@ -4072,6 +4080,8 @@ static int __init init_sd(void)
+@@ -4069,6 +4077,8 @@ static int __init init_sd(void)
goto err_out_class;
}
@@ -1136,10 +1042,10 @@ index a12ff43ac8fd..4940d18fd72d 100644
if (err)
goto err_out_driver;
diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
-index 4854d883e601..e1ee781ca985 100644
+index e38a4124f610..0a607946e5f9 100644
--- a/drivers/usb/core/hub.c
+++ b/drivers/usb/core/hub.c
-@@ -5795,6 +5795,13 @@ static void hub_event(struct work_struct *work)
+@@ -5806,6 +5806,13 @@ static void hub_event(struct work_struct *work)
(u16) hub->change_bits[0],
(u16) hub->event_bits[0]);
@@ -1176,10 +1082,10 @@ index 18c8f168b153..055cdec2e9ad 100644
out_unlock:
xfs_iunlock(ip, lockmode);
diff --git a/include/linux/efi.h b/include/linux/efi.h
-index 9cc5bf32f6f2..7462fb1fc99e 100644
+index c74f47711f0b..e7bbf3b7a938 100644
--- a/include/linux/efi.h
+++ b/include/linux/efi.h
-@@ -44,6 +44,8 @@ struct screen_info;
+@@ -45,6 +45,8 @@ struct screen_info;
#define EFI_ABORTED (21 | (1UL << (BITS_PER_LONG-1)))
#define EFI_SECURITY_VIOLATION (26 | (1UL << (BITS_PER_LONG-1)))
@@ -1188,7 +1094,7 @@ index 9cc5bf32f6f2..7462fb1fc99e 100644
typedef unsigned long efi_status_t;
typedef u8 efi_bool_t;
typedef u16 efi_char16_t; /* UNICODE character */
-@@ -864,6 +866,14 @@ static inline int efi_range_is_wc(unsigned long start, unsigned long len)
+@@ -865,6 +867,14 @@ static inline int efi_range_is_wc(unsigned long start, unsigned long len)
#define EFI_MEM_ATTR 10 /* Did firmware publish an EFI_MEMORY_ATTRIBUTES table? */
#define EFI_MEM_NO_SOFT_RESERVE 11 /* Is the kernel configured to ignore soft reservations? */
#define EFI_PRESERVE_BS_REGIONS 12 /* Are EFI boot-services memory segments available? */
@@ -1203,7 +1109,7 @@ index 9cc5bf32f6f2..7462fb1fc99e 100644
#ifdef CONFIG_EFI
/*
-@@ -875,6 +885,8 @@ static inline bool efi_enabled(int feature)
+@@ -876,6 +886,8 @@ static inline bool efi_enabled(int feature)
}
extern void efi_reboot(enum reboot_mode reboot_mode, const char *__unused);
@@ -1212,7 +1118,7 @@ index 9cc5bf32f6f2..7462fb1fc99e 100644
bool __pure __efi_soft_reserve_enabled(void);
static inline bool __pure efi_soft_reserve_enabled(void)
-@@ -896,6 +908,8 @@ static inline bool efi_enabled(int feature)
+@@ -897,6 +909,8 @@ static inline bool efi_enabled(int feature)
static inline void
efi_reboot(enum reboot_mode reboot_mode, const char *__unused) {}
@@ -1221,7 +1127,7 @@ index 9cc5bf32f6f2..7462fb1fc99e 100644
static inline bool efi_soft_reserve_enabled(void)
{
return false;
-@@ -910,6 +924,7 @@ static inline void efi_find_mirror(void) {}
+@@ -911,6 +925,7 @@ static inline void efi_find_mirror(void) {}
#endif
extern int efi_status_to_err(efi_status_t status);
@@ -1229,7 +1135,7 @@ index 9cc5bf32f6f2..7462fb1fc99e 100644
/*
* Variable Attributes
-@@ -1126,13 +1141,6 @@ static inline bool efi_runtime_disabled(void) { return true; }
+@@ -1127,13 +1142,6 @@ static inline bool efi_runtime_disabled(void) { return true; }
extern void efi_call_virt_check_flags(unsigned long flags, const void *caller);
extern unsigned long efi_call_virt_save_flags(void);
@@ -1244,10 +1150,10 @@ index 9cc5bf32f6f2..7462fb1fc99e 100644
enum efi_secureboot_mode efi_get_secureboot_mode(efi_get_variable_t *get_var)
{
diff --git a/include/linux/lsm_hook_defs.h b/include/linux/lsm_hook_defs.h
-index ed3d517460f8..93ff72b07031 100644
+index 76458b6d53da..b80d5835be72 100644
--- a/include/linux/lsm_hook_defs.h
+++ b/include/linux/lsm_hook_defs.h
-@@ -407,6 +407,8 @@ LSM_HOOK(void, LSM_RET_VOID, bpf_prog_free_security, struct bpf_prog_aux *aux)
+@@ -411,6 +411,8 @@ LSM_HOOK(void, LSM_RET_VOID, bpf_prog_free_security, struct bpf_prog_aux *aux)
#endif /* CONFIG_BPF_SYSCALL */
LSM_HOOK(int, 0, locked_down, enum lockdown_reason what)
@@ -1257,7 +1163,7 @@ index ed3d517460f8..93ff72b07031 100644
#ifdef CONFIG_PERF_EVENTS
LSM_HOOK(int, 0, perf_event_open, struct perf_event_attr *attr, int type)
diff --git a/include/linux/module.h b/include/linux/module.h
-index a98e188cf37b..2eef4246c2c9 100644
+index 96bc462872c0..3ce91ff5db5a 100644
--- a/include/linux/module.h
+++ b/include/linux/module.h
@@ -418,6 +418,7 @@ struct module {
@@ -1459,18 +1365,18 @@ index ab7eea01ab42..fff7c5f737fc 100644
int rmi_register_transport_device(struct rmi_transport_dev *xport);
diff --git a/include/linux/security.h b/include/linux/security.h
-index 9d3138c6364c..7089843865bf 100644
+index d0eb20f90b26..a99c045730e9 100644
--- a/include/linux/security.h
+++ b/include/linux/security.h
-@@ -486,6 +486,7 @@ int security_inode_notifysecctx(struct inode *inode, void *ctx, u32 ctxlen);
+@@ -494,6 +494,7 @@ int security_inode_notifysecctx(struct inode *inode, void *ctx, u32 ctxlen);
int security_inode_setsecctx(struct dentry *dentry, void *ctx, u32 ctxlen);
int security_inode_getsecctx(struct inode *inode, void **ctx, u32 *ctxlen);
int security_locked_down(enum lockdown_reason what);
+int security_lock_kernel_down(const char *where, enum lockdown_reason level);
+ int lsm_fill_user_ctx(struct lsm_ctx __user *uctx, size_t *uctx_len,
+ void *val, size_t val_len, u64 id, u64 flags);
#else /* CONFIG_SECURITY */
-
- static inline int call_blocking_lsm_notifier(enum lsm_event event, void *data)
-@@ -1404,6 +1405,10 @@ static inline int security_locked_down(enum lockdown_reason what)
+@@ -1433,6 +1434,10 @@ static inline int security_locked_down(enum lockdown_reason what)
{
return 0;
}
@@ -1478,11 +1384,11 @@ index 9d3138c6364c..7089843865bf 100644
+{
+ return 0;
+}
- #endif /* CONFIG_SECURITY */
-
- #if defined(CONFIG_SECURITY) && defined(CONFIG_WATCH_QUEUE)
+ static inline int lsm_fill_user_ctx(struct lsm_ctx __user *uctx,
+ size_t *uctx_len, void *val, size_t val_len,
+ u64 id, u64 flags)
diff --git a/kernel/module/main.c b/kernel/module/main.c
-index 34d9e718c2c7..1c8b40b19014 100644
+index b0b99348e1a8..c35cc48d782c 100644
--- a/kernel/module/main.c
+++ b/kernel/module/main.c
@@ -528,6 +528,7 @@ static struct module_attribute modinfo_##field = { \
@@ -1525,7 +1431,7 @@ index a2ff4242e623..f0d2be1ee4f1 100644
int module_sig_check(struct load_info *info, int flags)
diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c
-index f7c4d3fe4381..7fd1ef7930c6 100644
+index 267b9a0a3abc..12612f58ca58 100644
--- a/scripts/mod/modpost.c
+++ b/scripts/mod/modpost.c
@@ -22,6 +22,7 @@
@@ -1536,7 +1442,7 @@ index f7c4d3fe4381..7fd1ef7930c6 100644
static bool module_enabled;
/* Are we using CONFIG_MODVERSIONS? */
-@@ -1988,6 +1989,12 @@ static void write_buf(struct buffer *b, const char *fname)
+@@ -1992,6 +1993,12 @@ static void write_buf(struct buffer *b, const char *fname)
}
}
@@ -1549,7 +1455,7 @@ index f7c4d3fe4381..7fd1ef7930c6 100644
static void write_if_changed(struct buffer *b, const char *fname)
{
char *tmp;
-@@ -2048,6 +2055,7 @@ static void write_mod_c_file(struct module *mod)
+@@ -2052,6 +2059,7 @@ static void write_mod_c_file(struct module *mod)
add_depends(&buf, mod);
add_moddevtable(&buf, mod);
add_srcversion(&buf, mod);
@@ -1558,7 +1464,7 @@ index f7c4d3fe4381..7fd1ef7930c6 100644
ret = snprintf(fname, sizeof(fname), "%s.mod.c", mod->name);
if (ret >= sizeof(fname)) {
diff --git a/scripts/tags.sh b/scripts/tags.sh
-index a70d43723146..56d06b04f752 100755
+index 191e0461d6d5..e6f418b3e948 100755
--- a/scripts/tags.sh
+++ b/scripts/tags.sh
@@ -16,6 +16,8 @@ fi
@@ -1619,22 +1525,22 @@ index e84ddf484010..d0501353a4b9 100644
prompt "Kernel default lockdown mode"
default LOCK_DOWN_KERNEL_FORCE_NONE
diff --git a/security/lockdown/lockdown.c b/security/lockdown/lockdown.c
-index 68d19632aeb7..ef348935b6ff 100644
+index cd84d8ea1dfb..e4c70a0312bc 100644
--- a/security/lockdown/lockdown.c
+++ b/security/lockdown/lockdown.c
-@@ -73,6 +73,7 @@ static int lockdown_is_locked_down(enum lockdown_reason what)
+@@ -74,6 +74,7 @@ static int lockdown_is_locked_down(enum lockdown_reason what)
static struct security_hook_list lockdown_hooks[] __ro_after_init = {
LSM_HOOK_INIT(locked_down, lockdown_is_locked_down),
+ LSM_HOOK_INIT(lock_kernel_down, lock_kernel_down),
};
- static int __init lockdown_lsm_init(void)
+ const struct lsm_id lockdown_lsmid = {
diff --git a/security/security.c b/security/security.c
-index 2cfecdb054c3..4e5fc4ec5896 100644
+index 7035ee35a393..e1d54a896ef9 100644
--- a/security/security.c
+++ b/security/security.c
-@@ -5283,6 +5283,18 @@ int security_locked_down(enum lockdown_reason what)
+@@ -5511,6 +5511,18 @@ int security_locked_down(enum lockdown_reason what)
}
EXPORT_SYMBOL(security_locked_down);
diff --git a/SOURCES/process_configs.sh b/SOURCES/process_configs.sh
index 9cd5778..4314879 100755
--- a/SOURCES/process_configs.sh
+++ b/SOURCES/process_configs.sh
@@ -148,7 +148,8 @@ parsenewconfigs()
/usr/bin/awk -v BASE="$tmpdir" '
BEGIN { inpatch=0;
outfile="none";
- symbol="none"; }
+ symbol="none";
+ commit=""; }
/^Symbol: .*$/ {
split($0, a, " ");
symbol="CONFIG_"a[2];
@@ -160,9 +161,11 @@ parsenewconfigs()
}
else {
if (symbol != "none") {
+ print "# Commit: "commit >> outfile
system("cat " outfile " " BASE "/" symbol " > " BASE "/tmpf");
system("mv " BASE "/tmpf " BASE "/" symbol);
symbol="none"
+ commit=""
}
outfile="none"
inpatch = 0;
@@ -173,6 +176,15 @@ parsenewconfigs()
print "# "$0 >> outfile;
}
}
+ /^Defined at .*$/ {
+ split($0, x, " ");
+ filenum=x[3];
+ split(filenum, x, ":");
+ file=x[1]
+ line=x[2]
+ cmd="git blame -L " line "," line " " file " | cut -d \" \" -f1 | xargs git log --pretty=format:\"%C(auto)%h %C(cyan)('%s')\" -1"
+ cmd | getline commit
+ }
' .helpnewconfig
diff --git a/SOURCES/rog-ally-gyro-fix.patch b/SOURCES/rog-ally-gyro-fix.patch
index fc02fe0..b5f57cc 100644
--- a/SOURCES/rog-ally-gyro-fix.patch
+++ b/SOURCES/rog-ally-gyro-fix.patch
@@ -1,2850 +1,3 @@
-Add devicetree description document for Bosch BMI323, a 6-Axis IMU.
-
-Signed-off-by: Jagath Jog J <jagathjog1996@gmail.com>
-Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
----
- .../bindings/iio/imu/bosch,bmi323.yaml | 77 +++++++++++++++++++
- 1 file changed, 77 insertions(+)
- create mode 100644 Documentation/devicetree/bindings/iio/imu/bosch,bmi323.yaml
-
-diff --git a/Documentation/devicetree/bindings/iio/imu/bosch,bmi323.yaml b/Documentation/devicetree/bindings/iio/imu/bosch,bmi323.yaml
-new file mode 100644
-index 000000000000..64ef26e19669
---- /dev/null
-+++ b/Documentation/devicetree/bindings/iio/imu/bosch,bmi323.yaml
-@@ -0,0 +1,77 @@
-+# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
-+%YAML 1.2
-+---
-+$id: http://devicetree.org/schemas/iio/imu/bosch,bmi323.yaml#
-+$schema: http://devicetree.org/meta-schemas/core.yaml#
-+
-+title: Bosch BMI323 6-Axis IMU
-+
-+maintainers:
-+ - Jagath Jog J <jagathjog1996@gmail.com>
-+
-+description:
-+ BMI323 is a 6-axis inertial measurement unit that supports acceleration and
-+ gyroscopic measurements with hardware fifo buffering. Sensor also provides
-+ events information such as motion, steps, orientation, single and double
-+ tap detection.
-+
-+properties:
-+ compatible:
-+ const: bosch,bmi323
-+
-+ reg:
-+ maxItems: 1
-+
-+ vdd-supply: true
-+ vddio-supply: true
-+
-+ interrupts:
-+ minItems: 1
-+ maxItems: 2
-+
-+ interrupt-names:
-+ minItems: 1
-+ maxItems: 2
-+ items:
-+ enum:
-+ - INT1
-+ - INT2
-+
-+ drive-open-drain:
-+ description:
-+ set if the specified interrupt pin should be configured as
-+ open drain. If not set, defaults to push-pull.
-+
-+ mount-matrix:
-+ description:
-+ an optional 3x3 mounting rotation matrix.
-+
-+required:
-+ - compatible
-+ - reg
-+ - vdd-supply
-+ - vddio-supply
-+
-+allOf:
-+ - $ref: /schemas/spi/spi-peripheral-props.yaml#
-+
-+unevaluatedProperties: false
-+
-+examples:
-+ - |
-+ // Example for I2C
-+ #include <dt-bindings/interrupt-controller/irq.h>
-+ i2c {
-+ #address-cells = <1>;
-+ #size-cells = <0>;
-+
-+ imu@68 {
-+ compatible = "bosch,bmi323";
-+ reg = <0x68>;
-+ vddio-supply = <&vddio>;
-+ vdd-supply = <&vdd>;
-+ interrupt-parent = <&gpio1>;
-+ interrupts = <29 IRQ_TYPE_EDGE_RISING>;
-+ interrupt-names = "INT1";
-+ };
-+ };
-From: Jagath Jog J <jagathjog1996@gmail.com>
-To: jic23@kernel.org, andriy.shevchenko@linux.intel.com,
- lars@metafoo.de, robh+dt@kernel.org,
- krzysztof.kozlowski+dt@linaro.org
-Cc: linux-iio@vger.kernel.org, devicetree@vger.kernel.org,
- linux-kernel@vger.kernel.org
-Subject: [RFC 2/2] iio: imu: Add driver for BMI323 IMU
-Date: Mon, 18 Sep 2023 13:33:14 +0530 [thread overview]
-Message-ID: <20230918080314.11959-3-jagathjog1996@gmail.com> (raw)
-In-Reply-To: <20230918080314.11959-1-jagathjog1996@gmail.com>
-
-The Bosch BMI323 is a 6-axis low-power IMU that provide measurements for
-acceleration, angular rate, and temperature. This sensor includes
-motion-triggered interrupt features, such as a step counter, tap detection,
-and activity/inactivity interrupt capabilities.
-
-The driver supports various functionalities, including data ready, FIFO
-data handling, and events such as tap detection, step counting, and
-activity interrupts.
-
-Signed-off-by: Jagath Jog J <jagathjog1996@gmail.com>
----
- MAINTAINERS | 7 +
- drivers/iio/imu/Kconfig | 1 +
- drivers/iio/imu/Makefile | 1 +
- drivers/iio/imu/bmi323/Kconfig | 33 +
- drivers/iio/imu/bmi323/Makefile | 7 +
- drivers/iio/imu/bmi323/bmi323.h | 209 +++
- drivers/iio/imu/bmi323/bmi323_core.c | 2139 +++++++++++++++++++++++
- drivers/iio/imu/bmi323/bmi323_i2c.c | 121 ++
- drivers/iio/imu/bmi323/bmi323_spi.c | 92 +
- 10 files changed, 2628 insertions(+)
- create mode 100644 drivers/iio/imu/bmi323/Kconfig
- create mode 100644 drivers/iio/imu/bmi323/Makefile
- create mode 100644 drivers/iio/imu/bmi323/bmi323.h
- create mode 100644 drivers/iio/imu/bmi323/bmi323_core.c
- create mode 100644 drivers/iio/imu/bmi323/bmi323_i2c.c
- create mode 100644 drivers/iio/imu/bmi323/bmi323_spi.c
-
-diff --git a/MAINTAINERS b/MAINTAINERS
-index 4e07c032d06a..47ca415212a7 100644
---- a/MAINTAINERS
-+++ b/MAINTAINERS
-@@ -3636,6 +3636,13 @@
- F: Documentation/devicetree/bindings/iio/accel/bosch,bma400.yaml
- F: drivers/iio/accel/bma400*
-
-+BOSCH SENSORTEC BMI323 IMU IIO DRIVER
-+M: Jagath Jog J <jagathjog1996@gmail.com>
-+L: linux-iio@vger.kernel.org
-+S: Maintained
-+F: Documentation/devicetree/bindings/iio/imu/bosch,bma400.yaml
-+F: drivers/iio/imu/bmi323/
-+
- BPF JIT for ARM
- M: Russell King <linux@armlinux.org.uk>
- M: Puranjay Mohan <puranjay12@gmail.com>
-diff --git a/drivers/iio/imu/Kconfig b/drivers/iio/imu/Kconfig
-index c2f97629e9cd..6c9a85294bc1 100644
---- a/drivers/iio/imu/Kconfig
-+++ b/drivers/iio/imu/Kconfig
-@@ -54,6 +54,7 @@ config ADIS16480
-
- source "drivers/iio/imu/bmi160/Kconfig"
- source "drivers/iio/imu/bno055/Kconfig"
-+source "drivers/iio/imu/bmi323/Kconfig"
-
- config FXOS8700
- tristate
-diff --git a/drivers/iio/imu/Makefile b/drivers/iio/imu/Makefile
-index 6eb612034722..627406476357 100644
---- a/drivers/iio/imu/Makefile
-+++ b/drivers/iio/imu/Makefile
-@@ -16,6 +16,7 @@ obj-$(CONFIG_IIO_ADIS_LIB) += adis_lib.o
-
- obj-y += bmi160/
- obj-y += bno055/
-+obj-y += bmi323/
-
- obj-$(CONFIG_FXOS8700) += fxos8700_core.o
- obj-$(CONFIG_FXOS8700_I2C) += fxos8700_i2c.o
-diff --git a/drivers/iio/imu/bmi323/Kconfig b/drivers/iio/imu/bmi323/Kconfig
-new file mode 100644
-index 000000000000..ab37b285393c
---- /dev/null
-+++ b/drivers/iio/imu/bmi323/Kconfig
-@@ -0,0 +1,33 @@
-+# SPDX-License-Identifier: GPL-2.0
-+#
-+# BMI323 IMU driver
-+#
-+
-+config BMI323
-+ tristate
-+ select IIO_BUFFER
-+ select IIO_TRIGGERED_BUFFER
-+
-+config BMI323_I2C
-+ tristate "Bosch BMI323 I2C driver"
-+ depends on I2C
-+ select BMI323
-+ select REGMAP_I2C
-+ help
-+ Enable support for the Bosch BMI323 6-Axis IMU connected to I2C
-+ interface.
-+
-+ This driver can also be built as a module. If so, the module will be
-+ called bmi323_i2c.
-+
-+config BMI323_SPI
-+ tristate "Bosch BMI323 SPI driver"
-+ depends on SPI
-+ select BMI323
-+ select REGMAP_SPI
-+ help
-+ Enable support for the Bosch BMI323 6-Axis IMU connected to SPI
-+ interface.
-+
-+ This driver can also be built as a module. If so, the module will be
-+ called bmi323_spi.
-diff --git a/drivers/iio/imu/bmi323/Makefile b/drivers/iio/imu/bmi323/Makefile
-new file mode 100644
-index 000000000000..a6a6dc0207c9
---- /dev/null
-+++ b/drivers/iio/imu/bmi323/Makefile
-@@ -0,0 +1,7 @@
-+# SPDX-License-Identifier: GPL-2.0
-+#
-+# Makefile for Bosch BMI323 IMU
-+#
-+obj-$(CONFIG_BMI323) += bmi323_core.o
-+obj-$(CONFIG_BMI323_I2C) += bmi323_i2c.o
-+obj-$(CONFIG_BMI323_SPI) += bmi323_spi.o
-diff --git a/drivers/iio/imu/bmi323/bmi323.h b/drivers/iio/imu/bmi323/bmi323.h
-new file mode 100644
-index 000000000000..dff126d41658
---- /dev/null
-+++ b/drivers/iio/imu/bmi323/bmi323.h
-@@ -0,0 +1,209 @@
-+/* SPDX-License-Identifier: GPL-2.0 */
-+/*
-+ * IIO driver for Bosch BMI323 6-Axis IMU
-+ *
-+ * Copyright (C) 2023, Jagath Jog J <jagathjog1996@gmail.com>
-+ */
-+
-+#ifndef _BMI323_H_
-+#define _BMI323_H_
-+
-+#include <linux/bits.h>
-+#include <linux/regmap.h>
-+#include <linux/units.h>
-+
-+#define BMI323_I2C_DUMMY 2
-+#define BMI323_SPI_DUMMY 1
-+
-+/* Register map */
-+
-+#define BMI323_CHIP_ID_REG 0x00
-+#define BMI323_CHIP_ID_VAL 0x0043
-+#define BMI323_CHIP_ID_MSK GENMASK(7, 0)
-+#define BMI323_ERR_REG 0x01
-+#define BMI323_STATUS_REG 0x02
-+#define BMI323_STATUS_POR_MSK BIT(0)
-+
-+/* Accelero/Gyro/Temp data registers */
-+#define BMI323_ACCEL_X_REG 0x03
-+#define BMI323_GYRO_X_REG 0x06
-+#define BMI323_TEMP_REG 0x09
-+#define BMI323_ALL_CHAN_MSK GENMASK(5, 0)
-+
-+/* Status registers */
-+#define BMI323_STATUS_INT1_REG 0x0D
-+#define BMI323_STATUS_INT2_REG 0x0E
-+#define BMI323_STATUS_NOMOTION_MSK BIT(0)
-+#define BMI323_STATUS_MOTION_MSK BIT(1)
-+#define BMI323_STATUS_STP_WTR_MSK BIT(5)
-+#define BMI323_STATUS_TAP_MSK BIT(8)
-+#define BMI323_STATUS_ERROR_MSK BIT(10)
-+#define BMI323_STATUS_TMP_DRDY_MSK BIT(11)
-+#define BMI323_STATUS_GYR_DRDY_MSK BIT(12)
-+#define BMI323_STATUS_ACC_DRDY_MSK BIT(13)
-+#define BMI323_STATUS_ACC_GYR_DRDY_MSK GENMASK(13, 12)
-+#define BMI323_STATUS_FIFO_WTRMRK_MSK BIT(14)
-+#define BMI323_STATUS_FIFO_FULL_MSK BIT(15)
-+
-+/* Feature registers */
-+#define BMI323_FEAT_IO0_REG 0x10
-+#define BMI323_FEAT_IO0_XYZ_NOMOTION_MSK GENMASK(2, 0)
-+#define BMI323_FEAT_IO0_XYZ_MOTION_MSK GENMASK(5, 3)
-+#define BMI323_FEAT_XYZ_MSK GENMASK(2, 0)
-+#define BMI323_FEAT_IO0_STP_CNT_MSK BIT(9)
-+#define BMI323_FEAT_IO0_S_TAP_MSK BIT(12)
-+#define BMI323_FEAT_IO0_D_TAP_MSK BIT(13)
-+#define BMI323_FEAT_IO1_REG 0x11
-+#define BMI323_FEAT_IO1_ERR_MSK GENMASK(3, 0)
-+#define BMI323_FEAT_IO2_REG 0x12
-+#define BMI323_FEAT_IO_STATUS_REG 0x14
-+#define BMI323_FEAT_IO_STATUS_MSK BIT(0)
-+#define BMI323_FEAT_ENG_POLL 2000
-+#define BMI323_FEAT_ENG_TIMEOUT 10000
-+
-+/* FIFO registers */
-+#define BMI323_FIFO_FILL_LEVEL_REG 0x15
-+#define BMI323_FIFO_DATA_REG 0x16
-+
-+/* Accelero/Gyro config registers */
-+#define BMI323_ACC_CONF_REG 0x20
-+#define BMI323_GYRO_CONF_REG 0x21
-+#define BMI323_ACC_GYRO_CONF_MODE_MSK GENMASK(14, 12)
-+#define BMI323_ACC_GYRO_CONF_ODR_MSK GENMASK(3, 0)
-+#define BMI323_ACC_GYRO_CONF_SCL_MSK GENMASK(6, 4)
-+#define BMI323_ACC_GYRO_CONF_BW_MSK BIT(7)
-+#define BMI323_ACC_GYRO_CONF_AVG_MSK GENMASK(10, 8)
-+
-+/* FIFO registers */
-+#define BMI323_FIFO_WTRMRK_REG 0x35
-+#define BMI323_FIFO_CONF_REG 0x36
-+#define BMI323_FIFO_CONF_STP_FUL_MSK BIT(0)
-+#define BMI323_FIFO_CONF_ACC_GYR_EN_MSK GENMASK(10, 9)
-+#define BMI323_FIFO_ACC_GYR_MSK GENMASK(1, 0)
-+#define BMI323_FIFO_CTRL_REG 0x37
-+#define BMI323_FIFO_FLUSH_MSK BIT(0)
-+
-+/* Interrupt pin config registers */
-+#define BMI323_IO_INT_CTR_REG 0x38
-+#define BMI323_IO_INT1_LVL_MSK BIT(0)
-+#define BMI323_IO_INT1_OD_MSK BIT(1)
-+#define BMI323_IO_INT1_OP_EN_MSK BIT(2)
-+#define BMI323_IO_INT1_LVL_OD_OP_MSK GENMASK(2, 0)
-+#define BMI323_IO_INT2_LVL_MSK BIT(8)
-+#define BMI323_IO_INT2_OD_MSK BIT(9)
-+#define BMI323_IO_INT2_OP_EN_MSK BIT(10)
-+#define BMI323_IO_INT2_LVL_OD_OP_MSK GENMASK(10, 8)
-+#define BMI323_IO_INT_CONF_REG 0x39
-+#define BMI323_IO_INT_LTCH_MSK BIT(0)
-+#define BMI323_INT_MAP1_REG 0x3A
-+#define BMI323_INT_MAP2_REG 0x3B
-+#define BMI323_NOMOTION_MSK GENMASK(1, 0)
-+#define BMI323_MOTION_MSK GENMASK(3, 2)
-+#define BMI323_STEP_CNT_MSK GENMASK(11, 10)
-+#define BMI323_TAP_MSK GENMASK(1, 0)
-+#define BMI323_TMP_DRDY_MSK GENMASK(7, 6)
-+#define BMI323_GYR_DRDY_MSK GENMASK(9, 8)
-+#define BMI323_ACC_DRDY_MSK GENMASK(11, 10)
-+#define BMI323_FIFO_WTRMRK_MSK GENMASK(13, 12)
-+#define BMI323_FIFO_FULL_MSK GENMASK(15, 14)
-+
-+/* Feature registers */
-+#define BMI323_FEAT_CTRL_REG 0x40
-+#define BMI323_FEAT_ENG_EN_MSK BIT(0)
-+#define BMI323_FEAT_DATA_ADDR 0x41
-+#define BMI323_FEAT_DATA_TX 0x42
-+#define BMI323_FEAT_DATA_STATUS 0x43
-+#define BMI323_FEAT_DATA_TX_RDY_MSK BIT(1)
-+#define BMI323_FEAT_EVNT_EXT_REG 0x47
-+#define BMI323_FEAT_EVNT_EXT_S_MSK BIT(3)
-+#define BMI323_FEAT_EVNT_EXT_D_MSK BIT(4)
-+
-+#define BMI323_CMD_REG 0x7E
-+#define BMI323_RST_VAL 0xDEAF
-+#define BMI323_CFG_RES_REG 0x7F
-+
-+/* Extended registers */
-+#define BMI323_GEN_SET1_REG 0x02
-+#define BMI323_GEN_SET1_MODE_MSK BIT(0)
-+#define BMI323_GEN_HOLD_DUR_MSK GENMASK(4, 1)
-+
-+/* Any Motion/No Motion config registers */
-+#define BMI323_ANYMO1_REG 0x05
-+#define BMI323_NOMO1_REG 0x08
-+#define BMI323_MO2_OFFSET 0x01
-+#define BMI323_MO3_OFFSET 0x02
-+#define BMI323_MO1_REF_UP_MSK BIT(12)
-+#define BMI323_MO1_SLOPE_TH_MSK GENMASK(11, 0)
-+#define BMI323_MO2_HYSTR_MSK GENMASK(9, 0)
-+#define BMI323_MO3_DURA_MSK GENMASK(12, 0)
-+
-+/* Step counter config registers */
-+#define BMI323_STEP_SC1_REG 0x10
-+#define BMI323_STEP_SC1_WTRMRK_MSK GENMASK(9, 0)
-+#define BMI323_STEP_SC1_RST_CNT_MSK BIT(10)
-+#define BMI323_STEP_SC1_REG 0x10
-+#define BMI323_STEP_LEN 2
-+
-+/* Tap gesture config registers */
-+#define BMI323_TAP1_REG 0x1E
-+#define BMI323_TAP1_AXIS_SEL_MSK GENMASK(1, 0)
-+#define BMI323_AXIS_XYZ_MSK GENMASK(1, 0)
-+#define BMI323_TAP1_TIMOUT_MSK BIT(2)
-+#define BMI323_TAP1_MAX_PEAKS_MSK GENMASK(5, 3)
-+#define BMI323_TAP1_MODE_MSK GENMASK(7, 6)
-+#define BMI323_TAP2_REG 0x1F
-+#define BMI323_TAP2_THRES_MSK GENMASK(9, 0)
-+#define BMI323_TAP2_MAX_DUR_MSK GENMASK(15, 10)
-+#define BMI323_TAP3_REG 0x20
-+#define BMI323_TAP3_QUIET_TIM_MSK GENMASK(15, 12)
-+#define BMI323_TAP3_QT_BW_TAP_MSK GENMASK(11, 8)
-+#define BMI323_TAP3_QT_AFT_GES_MSK GENMASK(15, 12)
-+
-+#define BMI323_MOTION_THRES_SCALE 512
-+#define BMI323_MOTION_HYSTR_SCALE 512
-+#define BMI323_MOTION_DURAT_SCALE 50
-+#define BMI323_TAP_THRES_SCALE 512
-+#define BMI323_DUR_BW_TAP_SCALE 200
-+#define BMI323_QUITE_TIM_GES_SCALE 25
-+#define BMI323_MAX_GES_DUR_SCALE 25
-+
-+/*
-+ * The formula to calculate temperature in C.
-+ * See datasheet section 6.1.1, Register Map Overview
-+ *
-+ * T_C = (temp_raw / 512) + 23
-+ */
-+#define BMI323_TEMP_OFFSET 11776
-+#define BMI323_TEMP_SCALE 1953125
-+
-+/*
-+ * The BMI323 features a FIFO with a capacity of 2048 bytes. Each frame
-+ * consists of accelerometer (X, Y, Z) data and gyroscope (X, Y, Z) data,
-+ * totaling 6 words or 12 bytes. The FIFO buffer can hold a total of
-+ * 170 frames.
-+ *
-+ * If a watermark interrupt is configured for 170 frames, the interrupt will
-+ * trigger when the FIFO reaches 169 frames, so limit the maximum watermark
-+ * level to 169 frames. In terms of data, 169 frames would equal 1014 bytes,
-+ * which is approximately 2 frames before the FIFO reaches its full capacity.
-+ * See datasheet section 5.7.3 FIFO Buffer Interrupts
-+ */
-+#define BMI323_BYTES_PER_SAMPLE 2
-+#define BMI323_FIFO_LENGTH_IN_BYTES 2048
-+#define BMI323_FIFO_FRAME_LENGTH 6
-+#define BMI323_FIFO_FULL_IN_FRAMES \
-+ ((BMI323_FIFO_LENGTH_IN_BYTES / \
-+ (BMI323_BYTES_PER_SAMPLE * BMI323_FIFO_FRAME_LENGTH)) - 1)
-+#define BMI323_FIFO_FULL_IN_WORDS \
-+ (BMI323_FIFO_FULL_IN_FRAMES * BMI323_FIFO_FRAME_LENGTH)
-+
-+#define BMI323_INT_MICRO_TO_RAW(val, val2, scale) ((val) * (scale) + \
-+ ((val2) * (scale)) / MEGA)
-+
-+#define BMI323_RAW_TO_MICRO(raw, scale) ((((raw) % (scale)) * MEGA) / scale)
-+
-+struct device;
-+int bmi323_core_probe(struct device *dev);
-+extern const struct regmap_config bmi323_regmap_config;
-+
-+#endif
-diff --git a/drivers/iio/imu/bmi323/bmi323_core.c b/drivers/iio/imu/bmi323/bmi323_core.c
-new file mode 100644
-index 000000000000..0bd5dedd9a63
---- /dev/null
-+++ b/drivers/iio/imu/bmi323/bmi323_core.c
-@@ -0,0 +1,2139 @@
-+// SPDX-License-Identifier: GPL-2.0
-+/*
-+ * IIO core driver for Bosch BMI323 6-Axis IMU.
-+ *
-+ * Copyright (C) 2023, Jagath Jog J <jagathjog1996@gmail.com>
-+ *
-+ * Datasheet: https://www.bosch-sensortec.com/media/boschsensortec/downloads/datasheets/bst-bmi323-ds000.pdf
-+ */
-+
-+#include <linux/bitfield.h>
-+#include <linux/cleanup.h>
-+#include <linux/device.h>
-+#include <linux/interrupt.h>
-+#include <linux/minmax.h>
-+#include <linux/module.h>
-+#include <linux/mutex.h>
-+#include <linux/property.h>
-+#include <linux/regmap.h>
-+#include <linux/regulator/consumer.h>
-+#include <linux/units.h>
-+
-+#include <asm/unaligned.h>
-+
-+#include <linux/iio/buffer.h>
-+#include <linux/iio/events.h>
-+#include <linux/iio/iio.h>
-+#include <linux/iio/sysfs.h>
-+#include <linux/iio/trigger.h>
-+#include <linux/iio/trigger_consumer.h>
-+#include <linux/iio/triggered_buffer.h>
-+
-+#include "bmi323.h"
-+
-+enum bmi323_sensor_type {
-+ BMI323_ACCEL,
-+ BMI323_GYRO,
-+ BMI323_SENSORS_CNT,
-+};
-+
-+enum bmi323_opr_mode {
-+ ACC_GYRO_MODE_DISABLE = 0x00,
-+ GYRO_DRIVE_MODE_ENABLED = 0x01,
-+ ACC_GYRO_MODE_DUTYCYCLE = 0x03,
-+ ACC_GYRO_MODE_CONTINOUS = 0x04,
-+ ACC_GYRO_MODE_HIGH_PERF = 0x07,
-+};
-+
-+enum bmi323_state {
-+ BMI323_IDLE,
-+ BMI323_BUFFER_DRDY_TRIGGERED,
-+ BMI323_BUFFER_FIFO,
-+};
-+
-+enum bmi323_irq_pin {
-+ BMI323_IRQ_DISABLED,
-+ BMI323_IRQ_INT1,
-+ BMI323_IRQ_INT2,
-+};
-+
-+enum bmi323_3db_bw {
-+ BMI323_BW_ODR_BY_2,
-+ BMI323_BW_ODR_BY_4,
-+};
-+
-+enum bmi323_scan {
-+ BMI323_ACCEL_X,
-+ BMI323_ACCEL_Y,
-+ BMI323_ACCEL_Z,
-+ BMI323_GYRO_X,
-+ BMI323_GYRO_Y,
-+ BMI323_GYRO_Z,
-+ BMI323_CHAN_MAX
-+};
-+
-+struct bmi323_hw {
-+ u8 data;
-+ u8 config;
-+ const int (*scale_table)[2];
-+ int scale_table_len;
-+};
-+
-+/*
-+ * The accelerometer supports +-2G/4G/8G/16G ranges, and the resolution of
-+ * each sample is 16 bits, signed.
-+ * At +-8G the scale can calculated by
-+ * ((8 + 8) * 9.80665 / (2^16 - 1)) * 10^6 = 2394.23819 scale in micro
-+ *
-+ */
-+static const int bmi323_accel_scale[][2] = {
-+ { 0, 598 },
-+ { 0, 1197 },
-+ { 0, 2394 },
-+ { 0, 4788 },
-+};
-+
-+static const int bmi323_gyro_scale[][2] = {
-+ { 0, 66 },
-+ { 0, 133 },
-+ { 0, 266 },
-+ { 0, 532 },
-+ { 0, 1065 },
-+};
-+
-+static const int bmi323_accel_gyro_avrg[] = {0, 2, 4, 8, 16, 32, 64};
-+
-+static const struct bmi323_hw bmi323_hw[2] = {
-+ [BMI323_ACCEL] = {
-+ .data = BMI323_ACCEL_X_REG,
-+ .config = BMI323_ACC_CONF_REG,
-+ .scale_table = bmi323_accel_scale,
-+ .scale_table_len = ARRAY_SIZE(bmi323_accel_scale),
-+ },
-+ [BMI323_GYRO] = {
-+ .data = BMI323_GYRO_X_REG,
-+ .config = BMI323_GYRO_CONF_REG,
-+ .scale_table = bmi323_gyro_scale,
-+ .scale_table_len = ARRAY_SIZE(bmi323_gyro_scale),
-+ },
-+};
-+
-+struct bmi323_data {
-+ struct device *dev;
-+ struct regmap *regmap;
-+ struct iio_mount_matrix orientation;
-+ enum bmi323_irq_pin irq_pin;
-+ struct iio_trigger *trig;
-+ bool drdy_trigger_enabled;
-+ enum bmi323_state state;
-+ s64 fifo_tstamp, old_fifo_tstamp;
-+ u32 odrns[BMI323_SENSORS_CNT];
-+ u32 odrhz[BMI323_SENSORS_CNT];
-+ unsigned int feature_events;
-+
-+ /*
-+ * Lock to protect the members of device's private data from concurrent
-+ * access and also to serialize the access of extended registers.
-+ * See bmi323_write_ext_reg(..) for more info.
-+ */
-+ struct mutex mutex;
-+ int watermark;
-+ __le16 fifo_buff[BMI323_FIFO_FULL_IN_WORDS] __aligned(IIO_DMA_MINALIGN);
-+ struct {
-+ __le16 channels[BMI323_CHAN_MAX];
-+ s64 ts __aligned(8);
-+ } buffer;
-+ __le16 steps_count[BMI323_STEP_LEN];
-+};
-+
-+static const struct iio_mount_matrix *
-+bmi323_get_mount_matrix(const struct iio_dev *idev,
-+ const struct iio_chan_spec *chan)
-+{
-+ struct bmi323_data *data = iio_priv(idev);
-+
-+ return &data->orientation;
-+}
-+
-+static const struct iio_chan_spec_ext_info bmi323_ext_info[] = {
-+ IIO_MOUNT_MATRIX(IIO_SHARED_BY_TYPE, bmi323_get_mount_matrix),
-+ { }
-+};
-+
-+static const struct iio_event_spec bmi323_step_wtrmrk_event = {
-+ .type = IIO_EV_TYPE_CHANGE,
-+ .dir = IIO_EV_DIR_NONE,
-+ .mask_shared_by_type = BIT(IIO_EV_INFO_ENABLE) |
-+ BIT(IIO_EV_INFO_VALUE),
-+};
-+
-+static const struct iio_event_spec bmi323_accel_event[] = {
-+ {
-+ .type = IIO_EV_TYPE_MAG,
-+ .dir = IIO_EV_DIR_FALLING,
-+ .mask_shared_by_type = BIT(IIO_EV_INFO_VALUE) |
-+ BIT(IIO_EV_INFO_PERIOD) |
-+ BIT(IIO_EV_INFO_HYSTERESIS) |
-+ BIT(IIO_EV_INFO_ENABLE),
-+ },
-+ {
-+ .type = IIO_EV_TYPE_MAG,
-+ .dir = IIO_EV_DIR_RISING,
-+ .mask_shared_by_type = BIT(IIO_EV_INFO_VALUE) |
-+ BIT(IIO_EV_INFO_PERIOD) |
-+ BIT(IIO_EV_INFO_HYSTERESIS) |
-+ BIT(IIO_EV_INFO_ENABLE),
-+ },
-+ {
-+ .type = IIO_EV_TYPE_GESTURE,
-+ .dir = IIO_EV_DIR_SINGLETAP,
-+ .mask_shared_by_type = BIT(IIO_EV_INFO_ENABLE) |
-+ BIT(IIO_EV_INFO_VALUE) |
-+ BIT(IIO_EV_INFO_RESET_TIMEOUT),
-+ },
-+ {
-+ .type = IIO_EV_TYPE_GESTURE,
-+ .dir = IIO_EV_DIR_DOUBLETAP,
-+ .mask_shared_by_type = BIT(IIO_EV_INFO_ENABLE) |
-+ BIT(IIO_EV_INFO_VALUE) |
-+ BIT(IIO_EV_INFO_RESET_TIMEOUT) |
-+ BIT(IIO_EV_INFO_TAP2_MIN_DELAY),
-+ },
-+};
-+
-+#define BMI323_ACCEL_CHANNEL(_type, _axis, _index) { \
-+ .type = _type, \
-+ .modified = 1, \
-+ .channel2 = IIO_MOD_##_axis, \
-+ .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \
-+ .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SAMP_FREQ) | \
-+ BIT(IIO_CHAN_INFO_SCALE) | \
-+ BIT(IIO_CHAN_INFO_OVERSAMPLING_RATIO), \
-+ .info_mask_shared_by_type_available = \
-+ BIT(IIO_CHAN_INFO_SAMP_FREQ) | \
-+ BIT(IIO_CHAN_INFO_SCALE) | \
-+ BIT(IIO_CHAN_INFO_OVERSAMPLING_RATIO), \
-+ .scan_index = _index, \
-+ .scan_type = { \
-+ .sign = 's', \
-+ .realbits = 16, \
-+ .storagebits = 16, \
-+ .endianness = IIO_LE, \
-+ }, \
-+ .ext_info = bmi323_ext_info, \
-+ .event_spec = bmi323_accel_event, \
-+ .num_event_specs = ARRAY_SIZE(bmi323_accel_event), \
-+}
-+
-+#define BMI323_GYRO_CHANNEL(_type, _axis, _index) { \
-+ .type = _type, \
-+ .modified = 1, \
-+ .channel2 = IIO_MOD_##_axis, \
-+ .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \
-+ .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SAMP_FREQ) | \
-+ BIT(IIO_CHAN_INFO_SCALE) | \
-+ BIT(IIO_CHAN_INFO_OVERSAMPLING_RATIO), \
-+ .info_mask_shared_by_type_available = \
-+ BIT(IIO_CHAN_INFO_SAMP_FREQ) | \
-+ BIT(IIO_CHAN_INFO_SCALE) | \
-+ BIT(IIO_CHAN_INFO_OVERSAMPLING_RATIO), \
-+ .scan_index = _index, \
-+ .scan_type = { \
-+ .sign = 's', \
-+ .realbits = 16, \
-+ .storagebits = 16, \
-+ .endianness = IIO_LE, \
-+ }, \
-+ .ext_info = bmi323_ext_info, \
-+}
-+
-+static const struct iio_chan_spec bmi323_channels[] = {
-+ BMI323_ACCEL_CHANNEL(IIO_ACCEL, X, BMI323_ACCEL_X),
-+ BMI323_ACCEL_CHANNEL(IIO_ACCEL, Y, BMI323_ACCEL_Y),
-+ BMI323_ACCEL_CHANNEL(IIO_ACCEL, Z, BMI323_ACCEL_Z),
-+ BMI323_GYRO_CHANNEL(IIO_ANGL_VEL, X, BMI323_GYRO_X),
-+ BMI323_GYRO_CHANNEL(IIO_ANGL_VEL, Y, BMI323_GYRO_Y),
-+ BMI323_GYRO_CHANNEL(IIO_ANGL_VEL, Z, BMI323_GYRO_Z),
-+ {
-+ .type = IIO_TEMP,
-+ .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
-+ BIT(IIO_CHAN_INFO_OFFSET) |
-+ BIT(IIO_CHAN_INFO_SCALE),
-+ .scan_index = -1,
-+ },
-+ {
-+ .type = IIO_STEPS,
-+ .info_mask_separate = BIT(IIO_CHAN_INFO_PROCESSED) |
-+ BIT(IIO_CHAN_INFO_ENABLE),
-+ .scan_index = -1,
-+ .event_spec = &bmi323_step_wtrmrk_event,
-+ .num_event_specs = 1,
-+
-+ },
-+ IIO_CHAN_SOFT_TIMESTAMP(BMI323_CHAN_MAX),
-+};
-+
-+static const int bmi323_acc_gyro_odr[][2] = {
-+ { 0, 781250 },
-+ { 1, 562500 },
-+ { 3, 125000 },
-+ { 6, 250000 },
-+ { 12, 500000 },
-+ { 25, 0 },
-+ { 50, 0 },
-+ { 100, 0 },
-+ { 200, 0 },
-+ { 400, 0 },
-+ { 800, 0 },
-+};
-+
-+static const int bmi323_acc_gyro_odrns[] = {
-+ 1280 * MEGA,
-+ 640 * MEGA,
-+ 320 * MEGA,
-+ 160 * MEGA,
-+ 80 * MEGA,
-+ 40 * MEGA,
-+ 20 * MEGA,
-+ 10 * MEGA,
-+ 5 * MEGA,
-+ 2500 * KILO,
-+ 1250 * KILO,
-+};
-+
-+static enum bmi323_sensor_type bmi323_iio_to_sensor(enum iio_chan_type iio_type)
-+{
-+ switch (iio_type) {
-+ case IIO_ACCEL:
-+ return BMI323_ACCEL;
-+ case IIO_ANGL_VEL:
-+ return BMI323_GYRO;
-+ default:
-+ return -EINVAL;
-+ }
-+}
-+
-+static int bmi323_set_mode(struct bmi323_data *data,
-+ enum bmi323_sensor_type sensor,
-+ enum bmi323_opr_mode mode)
-+{
-+ guard(mutex)(&data->mutex);
-+ return regmap_update_bits(data->regmap, bmi323_hw[sensor].config,
-+ BMI323_ACC_GYRO_CONF_MODE_MSK,
-+ FIELD_PREP(BMI323_ACC_GYRO_CONF_MODE_MSK,
-+ mode));
-+}
-+
-+/*
-+ * When writing data to extended register there must be no communication to
-+ * any other register before write transaction is complete.
-+ * See datasheet section 6.2 Extended Register Map Description.
-+ */
-+static int bmi323_write_ext_reg(struct bmi323_data *data, unsigned int ext_addr,
-+ unsigned int ext_data)
-+{
-+ int ret, feature_status;
-+
-+ ret = regmap_read(data->regmap, BMI323_FEAT_DATA_STATUS,
-+ &feature_status);
-+ if (ret)
-+ return ret;
-+
-+ if (!FIELD_GET(BMI323_FEAT_DATA_TX_RDY_MSK, feature_status))
-+ return -EBUSY;
-+
-+ ret = regmap_write(data->regmap, BMI323_FEAT_DATA_ADDR, ext_addr);
-+ if (ret)
-+ return ret;
-+
-+ return regmap_write(data->regmap, BMI323_FEAT_DATA_TX, ext_data);
-+}
-+
-+/*
-+ * When reading data from extended register there must be no communication to
-+ * any other register before read transaction is complete.
-+ * See datasheet section 6.2 Extended Register Map Description.
-+ */
-+static int bmi323_read_ext_reg(struct bmi323_data *data, unsigned int ext_addr,
-+ unsigned int *ext_data)
-+{
-+ int ret, feature_status;
-+
-+ ret = regmap_read(data->regmap, BMI323_FEAT_DATA_STATUS,
-+ &feature_status);
-+ if (ret)
-+ return ret;
-+
-+ if (!FIELD_GET(BMI323_FEAT_DATA_TX_RDY_MSK, feature_status))
-+ return -EBUSY;
-+
-+ ret = regmap_write(data->regmap, BMI323_FEAT_DATA_ADDR, ext_addr);
-+ if (ret)
-+ return ret;
-+
-+ return regmap_read(data->regmap, BMI323_FEAT_DATA_TX, ext_data);
-+}
-+
-+static int bmi323_update_ext_reg(struct bmi323_data *data,
-+ unsigned int ext_addr,
-+ unsigned int mask, unsigned int ext_data)
-+{
-+ unsigned int value;
-+ int ret;
-+
-+ ret = bmi323_read_ext_reg(data, ext_addr, &value);
-+ if (ret)
-+ return ret;
-+
-+ set_mask_bits(&value, mask, ext_data);
-+
-+ return bmi323_write_ext_reg(data, ext_addr, value);
-+}
-+
-+static int bmi323_get_error_status(struct bmi323_data *data)
-+{
-+ int error, ret;
-+
-+ guard(mutex)(&data->mutex);
-+ ret = regmap_read(data->regmap, BMI323_ERR_REG, &error);
-+ if (ret)
-+ return ret;
-+
-+ if (error)
-+ dev_err(data->dev, "Sensor error 0x%x\n", error);
-+
-+ return error;
-+}
-+
-+static int bmi323_feature_engine_events(struct bmi323_data *data,
-+ const unsigned int event_mask,
-+ bool state)
-+{
-+ unsigned int value;
-+ int ret;
-+
-+ ret = regmap_read(data->regmap, BMI323_FEAT_IO0_REG, &value);
-+ if (ret)
-+ return ret;
-+
-+ /* Register must be cleared before changing an active config */
-+ ret = regmap_write(data->regmap, BMI323_FEAT_IO0_REG, 0);
-+ if (ret)
-+ return ret;
-+
-+ if (state)
-+ value |= event_mask;
-+ else
-+ value &= ~event_mask;
-+
-+ ret = regmap_write(data->regmap, BMI323_FEAT_IO0_REG, value);
-+ if (ret)
-+ return ret;
-+
-+ return regmap_write(data->regmap, BMI323_FEAT_IO_STATUS_REG,
-+ BMI323_FEAT_IO_STATUS_MSK);
-+}
-+
-+static int bmi323_step_wtrmrk_en(struct bmi323_data *data, int state)
-+{
-+ enum bmi323_irq_pin step_irq;
-+ int ret;
-+
-+ guard(mutex)(&data->mutex);
-+ if (!FIELD_GET(BMI323_FEAT_IO0_STP_CNT_MSK, data->feature_events))
-+ return -EINVAL;
-+
-+ if (state)
-+ step_irq = data->irq_pin;
-+ else
-+ step_irq = BMI323_IRQ_DISABLED;
-+
-+ ret = bmi323_update_ext_reg(data, BMI323_STEP_SC1_REG,
-+ BMI323_STEP_SC1_WTRMRK_MSK,
-+ FIELD_PREP(BMI323_STEP_SC1_WTRMRK_MSK,
-+ state ? 1 : 0));
-+ if (ret)
-+ return ret;
-+
-+ return regmap_update_bits(data->regmap, BMI323_INT_MAP1_REG,
-+ BMI323_STEP_CNT_MSK,
-+ FIELD_PREP(BMI323_STEP_CNT_MSK, step_irq));
-+}
-+
-+static int bmi323_motion_config_reg(enum iio_event_direction dir)
-+{
-+ switch (dir) {
-+ case IIO_EV_DIR_RISING:
-+ return BMI323_ANYMO1_REG;
-+ case IIO_EV_DIR_FALLING:
-+ return BMI323_NOMO1_REG;
-+ default:
-+ return -EINVAL;
-+ }
-+}
-+
-+static int bmi323_motion_event_en(struct bmi323_data *data,
-+ enum iio_event_direction dir, int state)
-+{
-+ unsigned int state_value = state ? BMI323_FEAT_XYZ_MSK : 0;
-+ int config, ret, msk, raw, field_value;
-+ enum bmi323_irq_pin motion_irq;
-+ int irq_msk, irq_field_val;
-+
-+ if (state)
-+ motion_irq = data->irq_pin;
-+ else
-+ motion_irq = BMI323_IRQ_DISABLED;
-+
-+ switch (dir) {
-+ case IIO_EV_DIR_RISING:
-+ msk = BMI323_FEAT_IO0_XYZ_MOTION_MSK;
-+ raw = 512;
-+ config = BMI323_ANYMO1_REG;
-+ irq_msk = BMI323_MOTION_MSK;
-+ irq_field_val = FIELD_PREP(BMI323_MOTION_MSK, motion_irq);
-+ field_value = FIELD_PREP(BMI323_FEAT_IO0_XYZ_MOTION_MSK,
-+ state_value);
-+ break;
-+ case IIO_EV_DIR_FALLING:
-+ msk = BMI323_FEAT_IO0_XYZ_NOMOTION_MSK;
-+ raw = 0;
-+ config = BMI323_NOMO1_REG;
-+ irq_msk = BMI323_NOMOTION_MSK;
-+ irq_field_val = FIELD_PREP(BMI323_NOMOTION_MSK, motion_irq);
-+ field_value = FIELD_PREP(BMI323_FEAT_IO0_XYZ_NOMOTION_MSK,
-+ state_value);
-+ break;
-+ default:
-+ return -EINVAL;
-+ }
-+
-+ guard(mutex)(&data->mutex);
-+ ret = bmi323_feature_engine_events(data, msk, state);
-+ if (ret)
-+ return ret;
-+
-+ ret = bmi323_update_ext_reg(data, config,
-+ BMI323_MO1_REF_UP_MSK,
-+ FIELD_PREP(BMI323_MO1_REF_UP_MSK, 0));
-+ if (ret)
-+ return ret;
-+
-+ /* Set initial value to avoid interrupts while enabling*/
-+ ret = bmi323_update_ext_reg(data, config,
-+ BMI323_MO1_SLOPE_TH_MSK,
-+ FIELD_PREP(BMI323_MO1_SLOPE_TH_MSK, raw));
-+ if (ret)
-+ return ret;
-+
-+ ret = regmap_update_bits(data->regmap, BMI323_INT_MAP1_REG, irq_msk,
-+ irq_field_val);
-+ if (ret)
-+ return ret;
-+
-+ set_mask_bits(&data->feature_events, msk, field_value);
-+
-+ return 0;
-+}
-+
-+static int bmi323_tap_event_en(struct bmi323_data *data,
-+ enum iio_event_direction dir, int state)
-+{
-+ enum bmi323_irq_pin tap_irq;
-+ int ret, tap_enabled;
-+
-+ guard(mutex)(&data->mutex);
-+
-+ if (data->odrhz[BMI323_ACCEL] < 200) {
-+ dev_err(data->dev, "Invalid accelrometer parameter\n");
-+ return -EINVAL;
-+ }
-+
-+ switch (dir) {
-+ case IIO_EV_DIR_SINGLETAP:
-+ ret = bmi323_feature_engine_events(data,
-+ BMI323_FEAT_IO0_S_TAP_MSK,
-+ state);
-+ if (ret)
-+ return ret;
-+
-+ set_mask_bits(&data->feature_events, BMI323_FEAT_IO0_S_TAP_MSK,
-+ FIELD_PREP(BMI323_FEAT_IO0_S_TAP_MSK, state));
-+ break;
-+ case IIO_EV_DIR_DOUBLETAP:
-+ ret = bmi323_feature_engine_events(data,
-+ BMI323_FEAT_IO0_D_TAP_MSK,
-+ state);
-+ if (ret)
-+ return ret;
-+
-+ set_mask_bits(&data->feature_events, BMI323_FEAT_IO0_D_TAP_MSK,
-+ FIELD_PREP(BMI323_FEAT_IO0_D_TAP_MSK, state));
-+ break;
-+ default:
-+ return -EINVAL;
-+ }
-+
-+ tap_enabled = FIELD_GET(BMI323_FEAT_IO0_S_TAP_MSK |
-+ BMI323_FEAT_IO0_D_TAP_MSK,
-+ data->feature_events);
-+
-+ if (tap_enabled)
-+ tap_irq = data->irq_pin;
-+ else
-+ tap_irq = BMI323_IRQ_DISABLED;
-+
-+ ret = regmap_update_bits(data->regmap, BMI323_INT_MAP2_REG,
-+ BMI323_TAP_MSK,
-+ FIELD_PREP(BMI323_TAP_MSK, tap_irq));
-+ if (ret)
-+ return ret;
-+
-+ if (!state)
-+ return 0;
-+
-+ ret = bmi323_update_ext_reg(data, BMI323_TAP1_REG,
-+ BMI323_TAP1_MAX_PEAKS_MSK,
-+ FIELD_PREP(BMI323_TAP1_MAX_PEAKS_MSK,
-+ 0x04));
-+ if (ret)
-+ return ret;
-+
-+ ret = bmi323_update_ext_reg(data, BMI323_TAP1_REG,
-+ BMI323_TAP1_AXIS_SEL_MSK,
-+ FIELD_PREP(BMI323_TAP1_AXIS_SEL_MSK,
-+ BMI323_AXIS_XYZ_MSK));
-+ if (ret)
-+ return ret;
-+
-+ return bmi323_update_ext_reg(data, BMI323_TAP1_REG,
-+ BMI323_TAP1_TIMOUT_MSK,
-+ FIELD_PREP(BMI323_TAP1_TIMOUT_MSK,
-+ 0));
-+}
-+
-+static ssize_t in_accel_gesture_tap_wait_dur_show(struct device *dev,
-+ struct device_attribute *attr,
-+ char *buf)
-+{
-+ struct iio_dev *indio_dev = dev_to_iio_dev(dev);
-+ struct bmi323_data *data = iio_priv(indio_dev);
-+ unsigned int reg_value, raw;
-+ int ret, val[2];
-+
-+ scoped_guard(mutex, &data->mutex) {
-+ ret = bmi323_read_ext_reg(data, BMI323_TAP2_REG, &reg_value);
-+ if (ret)
-+ return ret;
-+ }
-+
-+ raw = FIELD_GET(BMI323_TAP2_MAX_DUR_MSK, reg_value);
-+ val[0] = raw / BMI323_MAX_GES_DUR_SCALE;
-+ val[1] = BMI323_RAW_TO_MICRO(raw, BMI323_MAX_GES_DUR_SCALE);
-+
-+ return iio_format_value(buf, IIO_VAL_INT_PLUS_MICRO, ARRAY_SIZE(val),
-+ val);
-+}
-+
-+static ssize_t in_accel_gesture_tap_wait_dur_store(struct device *dev,
-+ struct device_attribute *attr,
-+ const char *buf, size_t len)
-+{
-+ struct iio_dev *indio_dev = dev_to_iio_dev(dev);
-+ struct bmi323_data *data = iio_priv(indio_dev);
-+ int ret, val_int, val_fract, raw;
-+
-+ ret = iio_str_to_fixpoint(buf, 100000, &val_int, &val_fract);
-+ if (ret)
-+ return ret;
-+
-+ raw = BMI323_INT_MICRO_TO_RAW(val_int, val_fract,
-+ BMI323_MAX_GES_DUR_SCALE);
-+ if (!in_range(raw, 0, 64))
-+ return -EINVAL;
-+
-+ guard(mutex)(&data->mutex);
-+ ret = bmi323_update_ext_reg(data, BMI323_TAP2_REG,
-+ BMI323_TAP2_MAX_DUR_MSK,
-+ FIELD_PREP(BMI323_TAP2_MAX_DUR_MSK, raw));
-+ if (ret)
-+ return ret;
-+
-+ return len;
-+}
-+
-+/*
-+ * Maximum duration from first tap within the second tap is expected to happen.
-+ * This timeout is applicable only if gesture_tap_wait_timeout is enabled.
-+ */
-+static IIO_DEVICE_ATTR_RW(in_accel_gesture_tap_wait_dur, 0);
-+
-+static ssize_t in_accel_gesture_tap_wait_timeout_show(struct device *dev,
-+ struct device_attribute *attr,
-+ char *buf)
-+{
-+ struct iio_dev *indio_dev = dev_to_iio_dev(dev);
-+ struct bmi323_data *data = iio_priv(indio_dev);
-+ unsigned int reg_value, raw;
-+ int ret;
-+
-+ scoped_guard(mutex, &data->mutex) {
-+ ret = bmi323_read_ext_reg(data, BMI323_TAP1_REG, &reg_value);
-+ if (ret)
-+ return ret;
-+ }
-+
-+ raw = FIELD_GET(BMI323_TAP1_TIMOUT_MSK, reg_value);
-+
-+ return iio_format_value(buf, IIO_VAL_INT, 1, &raw);
-+}
-+
-+static ssize_t in_accel_gesture_tap_wait_timeout_store(struct device *dev,
-+ struct device_attribute *attr,
-+ const char *buf,
-+ size_t len)
-+{
-+ struct iio_dev *indio_dev = dev_to_iio_dev(dev);
-+ struct bmi323_data *data = iio_priv(indio_dev);
-+ bool val;
-+ int ret;
-+
-+ ret = kstrtobool(buf, &val);
-+ if (ret)
-+ return ret;
-+
-+ guard(mutex)(&data->mutex);
-+ ret = bmi323_update_ext_reg(data, BMI323_TAP1_REG,
-+ BMI323_TAP1_TIMOUT_MSK,
-+ FIELD_PREP(BMI323_TAP1_TIMOUT_MSK, val));
-+ if (ret)
-+ return ret;
-+
-+ return len;
-+}
-+
-+/* Enable/disable gesture confirmation with wait time */
-+static IIO_DEVICE_ATTR_RW(in_accel_gesture_tap_wait_timeout, 0);
-+
-+static IIO_CONST_ATTR(in_accel_gesture_tap_wait_dur_available,
-+ "[0.0 0.04 2.52]");
-+
-+static IIO_CONST_ATTR(in_accel_gesture_doubletap_tap2_min_delay_available,
-+ "[0.005 0.005 0.075]");
-+
-+static IIO_CONST_ATTR(in_accel_gesture_tap_reset_timeout_available,
-+ "[0.04 0.04 0.6]");
-+
-+static IIO_CONST_ATTR(in_accel_gesture_tap_value_available, "[0.0 0.002 1.99]");
-+
-+static IIO_CONST_ATTR(in_accel_mag_value_available, "[0.0 0.002 7.99]");
-+
-+static IIO_CONST_ATTR(in_accel_mag_period_available, "[0.0 0.02 162.0]");
-+
-+static IIO_CONST_ATTR(in_accel_mag_hysteresis_available, "[0.0 0.002 1.99]");
-+
-+static struct attribute *bmi323_event_attributes[] = {
-+ &iio_const_attr_in_accel_gesture_tap_value_available.dev_attr.attr,
-+ &iio_const_attr_in_accel_gesture_tap_reset_timeout_available.dev_attr.attr,
-+ &iio_const_attr_in_accel_gesture_doubletap_tap2_min_delay_available.dev_attr.attr,
-+ &iio_const_attr_in_accel_gesture_tap_wait_dur_available.dev_attr.attr,
-+ &iio_dev_attr_in_accel_gesture_tap_wait_timeout.dev_attr.attr,
-+ &iio_dev_attr_in_accel_gesture_tap_wait_dur.dev_attr.attr,
-+ &iio_const_attr_in_accel_mag_value_available.dev_attr.attr,
-+ &iio_const_attr_in_accel_mag_period_available.dev_attr.attr,
-+ &iio_const_attr_in_accel_mag_hysteresis_available.dev_attr.attr,
-+ NULL
-+};
-+
-+static const struct attribute_group bmi323_event_attribute_group = {
-+ .attrs = bmi323_event_attributes,
-+};
-+
-+static int bmi323_write_event_config(struct iio_dev *indio_dev,
-+ const struct iio_chan_spec *chan,
-+ enum iio_event_type type,
-+ enum iio_event_direction dir, int state)
-+{
-+ struct bmi323_data *data = iio_priv(indio_dev);
-+
-+ switch (type) {
-+ case IIO_EV_TYPE_MAG:
-+ return bmi323_motion_event_en(data, dir, state);
-+ case IIO_EV_TYPE_GESTURE:
-+ return bmi323_tap_event_en(data, dir, state);
-+ case IIO_EV_TYPE_CHANGE:
-+ return bmi323_step_wtrmrk_en(data, state);
-+ default:
-+ return -EINVAL;
-+ }
-+}
-+
-+static int bmi323_read_event_config(struct iio_dev *indio_dev,
-+ const struct iio_chan_spec *chan,
-+ enum iio_event_type type,
-+ enum iio_event_direction dir)
-+{
-+ struct bmi323_data *data = iio_priv(indio_dev);
-+ int ret, value, reg_val;
-+
-+ guard(mutex)(&data->mutex);
-+
-+ switch (chan->type) {
-+ case IIO_ACCEL:
-+ switch (dir) {
-+ case IIO_EV_DIR_SINGLETAP:
-+ ret = FIELD_GET(BMI323_FEAT_IO0_S_TAP_MSK,
-+ data->feature_events);
-+ break;
-+ case IIO_EV_DIR_DOUBLETAP:
-+ ret = FIELD_GET(BMI323_FEAT_IO0_D_TAP_MSK,
-+ data->feature_events);
-+ break;
-+ case IIO_EV_DIR_RISING:
-+ value = FIELD_GET(BMI323_FEAT_IO0_XYZ_MOTION_MSK,
-+ data->feature_events);
-+ ret = value ? 1 : 0;
-+ break;
-+ case IIO_EV_DIR_FALLING:
-+ value = FIELD_GET(BMI323_FEAT_IO0_XYZ_NOMOTION_MSK,
-+ data->feature_events);
-+ ret = value ? 1 : 0;
-+ break;
-+ default:
-+ ret = -EINVAL;
-+ break;
-+ }
-+ return ret;
-+ case IIO_STEPS:
-+ ret = regmap_read(data->regmap, BMI323_INT_MAP1_REG, &reg_val);
-+ if (ret)
-+ return ret;
-+
-+ return FIELD_GET(BMI323_STEP_CNT_MSK, reg_val) ? 1 : 0;
-+ default:
-+ return -EINVAL;
-+ }
-+}
-+
-+static int bmi323_write_event_value(struct iio_dev *indio_dev,
-+ const struct iio_chan_spec *chan,
-+ enum iio_event_type type,
-+ enum iio_event_direction dir,
-+ enum iio_event_info info,
-+ int val, int val2)
-+{
-+ struct bmi323_data *data = iio_priv(indio_dev);
-+ unsigned int raw;
-+ int reg;
-+
-+ guard(mutex)(&data->mutex);
-+
-+ switch (type) {
-+ case IIO_EV_TYPE_GESTURE:
-+ switch (info) {
-+ case IIO_EV_INFO_VALUE:
-+ if (!in_range(val, 0, 2))
-+ return -EINVAL;
-+
-+ raw = BMI323_INT_MICRO_TO_RAW(val, val2,
-+ BMI323_TAP_THRES_SCALE);
-+
-+ return bmi323_update_ext_reg(data, BMI323_TAP2_REG,
-+ BMI323_TAP2_THRES_MSK,
-+ FIELD_PREP(BMI323_TAP2_THRES_MSK,
-+ raw));
-+ case IIO_EV_INFO_RESET_TIMEOUT:
-+ if (val || !in_range(val2, 40000, 560001))
-+ return -EINVAL;
-+
-+ raw = BMI323_INT_MICRO_TO_RAW(val, val2,
-+ BMI323_QUITE_TIM_GES_SCALE);
-+
-+ return bmi323_update_ext_reg(data, BMI323_TAP3_REG,
-+ BMI323_TAP3_QT_AFT_GES_MSK,
-+ FIELD_PREP(BMI323_TAP3_QT_AFT_GES_MSK,
-+ raw));
-+ case IIO_EV_INFO_TAP2_MIN_DELAY:
-+ if (val || !in_range(val2, 5000, 70001))
-+ return -EINVAL;
-+
-+ raw = BMI323_INT_MICRO_TO_RAW(val, val2,
-+ BMI323_DUR_BW_TAP_SCALE);
-+
-+ return bmi323_update_ext_reg(data, BMI323_TAP3_REG,
-+ BMI323_TAP3_QT_BW_TAP_MSK,
-+ FIELD_PREP(BMI323_TAP3_QT_BW_TAP_MSK,
-+ raw));
-+ default:
-+ return -EINVAL;
-+ }
-+ case IIO_EV_TYPE_MAG:
-+ reg = bmi323_motion_config_reg(dir);
-+ if (reg < 0)
-+ return -EINVAL;
-+
-+ switch (info) {
-+ case IIO_EV_INFO_VALUE:
-+ if (!in_range(val, 0, 8))
-+ return -EINVAL;
-+
-+ raw = BMI323_INT_MICRO_TO_RAW(val, val2,
-+ BMI323_MOTION_THRES_SCALE);
-+
-+ return bmi323_update_ext_reg(data, reg,
-+ BMI323_MO1_SLOPE_TH_MSK,
-+ FIELD_PREP(BMI323_MO1_SLOPE_TH_MSK,
-+ raw));
-+ case IIO_EV_INFO_PERIOD:
-+ if (!in_range(val, 0, 163))
-+ return -EINVAL;
-+
-+ raw = BMI323_INT_MICRO_TO_RAW(val, val2,
-+ BMI323_MOTION_DURAT_SCALE);
-+
-+ return bmi323_update_ext_reg(data,
-+ reg + BMI323_MO3_OFFSET,
-+ BMI323_MO3_DURA_MSK,
-+ FIELD_PREP(BMI323_MO3_DURA_MSK,
-+ raw));
-+ case IIO_EV_INFO_HYSTERESIS:
-+ if (!in_range(val, 0, 2))
-+ return -EINVAL;
-+
-+ raw = BMI323_INT_MICRO_TO_RAW(val, val2,
-+ BMI323_MOTION_HYSTR_SCALE);
-+
-+ return bmi323_update_ext_reg(data,
-+ reg + BMI323_MO2_OFFSET,
-+ BMI323_MO2_HYSTR_MSK,
-+ FIELD_PREP(BMI323_MO2_HYSTR_MSK,
-+ raw));
-+ default:
-+ return -EINVAL;
-+ }
-+ case IIO_EV_TYPE_CHANGE:
-+ if (!in_range(val, 0, 20461))
-+ return -EINVAL;
-+
-+ raw = val / 20;
-+ return bmi323_update_ext_reg(data, BMI323_STEP_SC1_REG,
-+ BMI323_STEP_SC1_WTRMRK_MSK,
-+ FIELD_PREP(BMI323_STEP_SC1_WTRMRK_MSK,
-+ raw));
-+ default:
-+ return -EINVAL;
-+ }
-+}
-+
-+static int bmi323_read_event_value(struct iio_dev *indio_dev,
-+ const struct iio_chan_spec *chan,
-+ enum iio_event_type type,
-+ enum iio_event_direction dir,
-+ enum iio_event_info info,
-+ int *val, int *val2)
-+{
-+ struct bmi323_data *data = iio_priv(indio_dev);
-+ unsigned int raw, reg_value;
-+ int ret, reg;
-+
-+ guard(mutex)(&data->mutex);
-+
-+ switch (type) {
-+ case IIO_EV_TYPE_GESTURE:
-+ switch (info) {
-+ case IIO_EV_INFO_VALUE:
-+ ret = bmi323_read_ext_reg(data, BMI323_TAP2_REG,
-+ &reg_value);
-+ if (ret)
-+ return ret;
-+
-+ raw = FIELD_GET(BMI323_TAP2_THRES_MSK, reg_value);
-+ *val = raw / BMI323_TAP_THRES_SCALE;
-+ *val2 = BMI323_RAW_TO_MICRO(raw, BMI323_TAP_THRES_SCALE);
-+ return IIO_VAL_INT_PLUS_MICRO;
-+ case IIO_EV_INFO_RESET_TIMEOUT:
-+ ret = bmi323_read_ext_reg(data, BMI323_TAP3_REG,
-+ &reg_value);
-+ if (ret)
-+ return ret;
-+
-+ raw = FIELD_GET(BMI323_TAP3_QT_AFT_GES_MSK, reg_value);
-+ *val = 0;
-+ *val2 = BMI323_RAW_TO_MICRO(raw,
-+ BMI323_QUITE_TIM_GES_SCALE);
-+ return IIO_VAL_INT_PLUS_MICRO;
-+ case IIO_EV_INFO_TAP2_MIN_DELAY:
-+ ret = bmi323_read_ext_reg(data, BMI323_TAP3_REG,
-+ &reg_value);
-+ if (ret)
-+ return ret;
-+
-+ raw = FIELD_GET(BMI323_TAP3_QT_BW_TAP_MSK, reg_value);
-+ *val = 0;
-+ *val2 = BMI323_RAW_TO_MICRO(raw,
-+ BMI323_DUR_BW_TAP_SCALE);
-+ return IIO_VAL_INT_PLUS_MICRO;
-+ default:
-+ return -EINVAL;
-+ }
-+ case IIO_EV_TYPE_MAG:
-+ reg = bmi323_motion_config_reg(dir);
-+ if (reg < 0)
-+ return -EINVAL;
-+
-+ switch (info) {
-+ case IIO_EV_INFO_VALUE:
-+ ret = bmi323_read_ext_reg(data, reg, &reg_value);
-+ if (ret)
-+ return ret;
-+
-+ raw = FIELD_GET(BMI323_MO1_SLOPE_TH_MSK, reg_value);
-+ *val = raw / BMI323_MOTION_THRES_SCALE;
-+ *val2 = BMI323_RAW_TO_MICRO(raw,
-+ BMI323_MOTION_THRES_SCALE);
-+ return IIO_VAL_INT_PLUS_MICRO;
-+ case IIO_EV_INFO_PERIOD:
-+ ret = bmi323_read_ext_reg(data,
-+ reg + BMI323_MO3_OFFSET,
-+ &reg_value);
-+ if (ret)
-+ return ret;
-+
-+ raw = FIELD_GET(BMI323_MO3_DURA_MSK, reg_value);
-+ *val = raw / BMI323_MOTION_DURAT_SCALE;
-+ *val2 = BMI323_RAW_TO_MICRO(raw,
-+ BMI323_MOTION_DURAT_SCALE);
-+ return IIO_VAL_INT_PLUS_MICRO;
-+ case IIO_EV_INFO_HYSTERESIS:
-+ ret = bmi323_read_ext_reg(data,
-+ reg + BMI323_MO2_OFFSET,
-+ &reg_value);
-+ if (ret)
-+ return ret;
-+
-+ raw = FIELD_GET(BMI323_MO2_HYSTR_MSK, reg_value);
-+ *val = raw / BMI323_MOTION_HYSTR_SCALE;
-+ *val2 = BMI323_RAW_TO_MICRO(raw,
-+ BMI323_MOTION_HYSTR_SCALE);
-+ return IIO_VAL_INT_PLUS_MICRO;
-+ default:
-+ return -EINVAL;
-+ }
-+ case IIO_EV_TYPE_CHANGE:
-+ ret = bmi323_read_ext_reg(data, BMI323_STEP_SC1_REG,
-+ &reg_value);
-+ if (ret)
-+ return ret;
-+
-+ raw = FIELD_GET(BMI323_STEP_SC1_WTRMRK_MSK, reg_value);
-+ *val = raw * 20;
-+ return IIO_VAL_INT;
-+ default:
-+ return -EINVAL;
-+ }
-+}
-+
-+static int __bmi323_fifo_flush(struct iio_dev *indio_dev)
-+{
-+ struct bmi323_data *data = iio_priv(indio_dev);
-+ int i, ret, fifo_lvl, frame_count, bit, index;
-+ __le16 *frame, *pchannels;
-+ u64 sample_period;
-+ s64 tstamp;
-+
-+ guard(mutex)(&data->mutex);
-+ ret = regmap_read(data->regmap, BMI323_FIFO_FILL_LEVEL_REG, &fifo_lvl);
-+ if (ret)
-+ return ret;
-+
-+ fifo_lvl = min(fifo_lvl, BMI323_FIFO_FULL_IN_WORDS);
-+
-+ frame_count = fifo_lvl / BMI323_FIFO_FRAME_LENGTH;
-+ if (!frame_count)
-+ return -EINVAL;
-+
-+ if (fifo_lvl % BMI323_FIFO_FRAME_LENGTH)
-+ dev_warn(data->dev, "Bad FIFO alignment\n");
-+
-+ /*
-+ * Approximate timestamps for each of the sample based on the sampling
-+ * frequency, timestamp for last sample and number of samples.
-+ */
-+ if (data->old_fifo_tstamp) {
-+ sample_period = data->fifo_tstamp - data->old_fifo_tstamp;
-+ do_div(sample_period, frame_count);
-+ } else {
-+ sample_period = data->odrns[BMI323_ACCEL];
-+ }
-+
-+ tstamp = data->fifo_tstamp - (frame_count - 1) * sample_period;
-+
-+ ret = regmap_noinc_read(data->regmap, BMI323_FIFO_DATA_REG,
-+ &data->fifo_buff[0],
-+ fifo_lvl * BMI323_BYTES_PER_SAMPLE);
-+ if (ret)
-+ return ret;
-+
-+ for (i = 0; i < frame_count; i++) {
-+ frame = &data->fifo_buff[i * BMI323_FIFO_FRAME_LENGTH];
-+ pchannels = &data->buffer.channels[0];
-+
-+ index = 0;
-+ for_each_set_bit(bit, indio_dev->active_scan_mask,
-+ BMI323_CHAN_MAX)
-+ pchannels[index++] = frame[bit];
-+
-+ iio_push_to_buffers_with_timestamp(indio_dev, &data->buffer,
-+ tstamp);
-+
-+ tstamp += sample_period;
-+ }
-+
-+ return frame_count;
-+}
-+
-+static int bmi323_set_watermark(struct iio_dev *indio_dev, unsigned int val)
-+{
-+ struct bmi323_data *data = iio_priv(indio_dev);
-+
-+ val = min(val, (u32)BMI323_FIFO_FULL_IN_FRAMES);
-+
-+ guard(mutex)(&data->mutex);
-+ data->watermark = val;
-+
-+ return 0;
-+}
-+
-+static int bmi323_fifo_disable(struct bmi323_data *data)
-+{
-+ int ret;
-+
-+ guard(mutex)(&data->mutex);
-+ ret = regmap_write(data->regmap, BMI323_FIFO_CONF_REG, 0);
-+ if (ret)
-+ return ret;
-+
-+ ret = regmap_update_bits(data->regmap, BMI323_INT_MAP2_REG,
-+ BMI323_FIFO_WTRMRK_MSK,
-+ FIELD_PREP(BMI323_FIFO_WTRMRK_MSK, 0));
-+ if (ret)
-+ return ret;
-+
-+ data->fifo_tstamp = 0;
-+ data->state = BMI323_IDLE;
-+
-+ return 0;
-+}
-+
-+static int bmi323_buffer_predisable(struct iio_dev *indio_dev)
-+{
-+ struct bmi323_data *data = iio_priv(indio_dev);
-+
-+ if (iio_device_get_current_mode(indio_dev) == INDIO_BUFFER_TRIGGERED)
-+ return 0;
-+
-+ return bmi323_fifo_disable(data);
-+}
-+
-+static int bmi323_update_watermark(struct bmi323_data *data)
-+{
-+ int wtrmrk;
-+
-+ wtrmrk = data->watermark * BMI323_FIFO_FRAME_LENGTH;
-+
-+ return regmap_write(data->regmap, BMI323_FIFO_WTRMRK_REG, wtrmrk);
-+}
-+
-+static int bmi323_fifo_enable(struct bmi323_data *data)
-+{
-+ int ret;
-+
-+ guard(mutex)(&data->mutex);
-+ ret = regmap_update_bits(data->regmap, BMI323_FIFO_CONF_REG,
-+ BMI323_FIFO_CONF_ACC_GYR_EN_MSK,
-+ FIELD_PREP(BMI323_FIFO_CONF_ACC_GYR_EN_MSK,
-+ BMI323_FIFO_ACC_GYR_MSK));
-+ if (ret)
-+ return ret;
-+
-+ ret = regmap_update_bits(data->regmap, BMI323_INT_MAP2_REG,
-+ BMI323_FIFO_WTRMRK_MSK,
-+ FIELD_PREP(BMI323_FIFO_WTRMRK_MSK,
-+ data->irq_pin));
-+ if (ret)
-+ return ret;
-+
-+ ret = bmi323_update_watermark(data);
-+ if (ret)
-+ return ret;
-+
-+ ret = regmap_write(data->regmap, BMI323_FIFO_CTRL_REG,
-+ BMI323_FIFO_FLUSH_MSK);
-+ if (ret)
-+ return ret;
-+
-+ data->state = BMI323_BUFFER_FIFO;
-+
-+ return 0;
-+}
-+
-+static int bmi323_buffer_preenable(struct iio_dev *indio_dev)
-+{
-+ struct bmi323_data *data = iio_priv(indio_dev);
-+
-+ guard(mutex)(&data->mutex);
-+ /*
-+ * When the ODR of the accelerometer and gyroscope do not match, the
-+ * maximum ODR value between the accelerometer and gyroscope is used
-+ * for FIFO and the signal with lower ODR will insert dummy frame.
-+ * So allow buffer read only when ODR's of accelero and gyro are equal.
-+ * See datasheet section 5.7 "FIFO Data Buffering".
-+ */
-+ if (data->odrns[BMI323_ACCEL] != data->odrns[BMI323_GYRO]) {
-+ dev_err(data->dev, "Accelero and Gyro ODR doesn't match\n");
-+ return -EINVAL;
-+ }
-+
-+ return 0;
-+}
-+
-+static int bmi323_buffer_postenable(struct iio_dev *indio_dev)
-+{
-+ struct bmi323_data *data = iio_priv(indio_dev);
-+
-+ if (iio_device_get_current_mode(indio_dev) == INDIO_BUFFER_TRIGGERED)
-+ return 0;
-+
-+ return bmi323_fifo_enable(data);
-+}
-+
-+static ssize_t hwfifo_watermark_show(struct device *dev,
-+ struct device_attribute *attr, char *buf)
-+{
-+ struct iio_dev *indio_dev = dev_to_iio_dev(dev);
-+ struct bmi323_data *data = iio_priv(indio_dev);
-+ int wm;
-+
-+ scoped_guard(mutex, &data->mutex)
-+ wm = data->watermark;
-+
-+ return sysfs_emit(buf, "%d\n", wm);
-+}
-+static IIO_DEVICE_ATTR_RO(hwfifo_watermark, 0);
-+
-+static ssize_t hwfifo_enabled_show(struct device *dev,
-+ struct device_attribute *attr,
-+ char *buf)
-+{
-+ struct iio_dev *indio_dev = dev_to_iio_dev(dev);
-+ struct bmi323_data *data = iio_priv(indio_dev);
-+ bool state;
-+
-+ scoped_guard(mutex, &data->mutex)
-+ state = data->state == BMI323_BUFFER_FIFO;
-+
-+ return sysfs_emit(buf, "%d\n", state);
-+}
-+static IIO_DEVICE_ATTR_RO(hwfifo_enabled, 0);
-+
-+static const struct iio_dev_attr *bmi323_fifo_attributes[] = {
-+ &iio_dev_attr_hwfifo_watermark,
-+ &iio_dev_attr_hwfifo_enabled,
-+ NULL
-+};
-+
-+static const struct iio_buffer_setup_ops bmi323_buffer_ops = {
-+ .preenable = bmi323_buffer_preenable,
-+ .postenable = bmi323_buffer_postenable,
-+ .predisable = bmi323_buffer_predisable,
-+};
-+
-+static irqreturn_t bmi323_irq_thread_handler(int irq, void *private)
-+{
-+ struct iio_dev *indio_dev = private;
-+ struct bmi323_data *data = iio_priv(indio_dev);
-+ unsigned int status_addr, status, feature_event;
-+ s64 timestamp = iio_get_time_ns(indio_dev);
-+ int ret;
-+
-+ if (data->irq_pin == BMI323_IRQ_INT1)
-+ status_addr = BMI323_STATUS_INT1_REG;
-+ else
-+ status_addr = BMI323_STATUS_INT2_REG;
-+
-+ scoped_guard(mutex, &data->mutex) {
-+ ret = regmap_read(data->regmap, status_addr, &status);
-+ if (ret)
-+ return IRQ_NONE;
-+ }
-+
-+ if (!status || FIELD_GET(BMI323_STATUS_ERROR_MSK, status))
-+ return IRQ_NONE;
-+
-+ if (FIELD_GET(BMI323_STATUS_FIFO_WTRMRK_MSK, status)) {
-+ data->old_fifo_tstamp = data->fifo_tstamp;
-+ data->fifo_tstamp = iio_get_time_ns(indio_dev);
-+ ret = __bmi323_fifo_flush(indio_dev);
-+ if (ret < 0)
-+ return IRQ_NONE;
-+ }
-+
-+ if (FIELD_GET(BMI323_STATUS_ACC_GYR_DRDY_MSK, status))
-+ iio_trigger_poll_nested(data->trig);
-+
-+ if (FIELD_GET(BMI323_STATUS_MOTION_MSK, status))
-+ iio_push_event(indio_dev, IIO_MOD_EVENT_CODE(IIO_ACCEL, 0,
-+ IIO_MOD_X_OR_Y_OR_Z,
-+ IIO_EV_TYPE_MAG,
-+ IIO_EV_DIR_RISING),
-+ timestamp);
-+
-+ if (FIELD_GET(BMI323_STATUS_NOMOTION_MSK, status))
-+ iio_push_event(indio_dev, IIO_MOD_EVENT_CODE(IIO_ACCEL, 0,
-+ IIO_MOD_X_OR_Y_OR_Z,
-+ IIO_EV_TYPE_MAG,
-+ IIO_EV_DIR_FALLING),
-+ timestamp);
-+
-+ if (FIELD_GET(BMI323_STATUS_STP_WTR_MSK, status))
-+ iio_push_event(indio_dev, IIO_MOD_EVENT_CODE(IIO_STEPS, 0,
-+ IIO_NO_MOD,
-+ IIO_EV_TYPE_CHANGE,
-+ IIO_EV_DIR_NONE),
-+ timestamp);
-+
-+ if (FIELD_GET(BMI323_STATUS_TAP_MSK, status)) {
-+ scoped_guard(mutex, &data->mutex) {
-+ ret = regmap_read(data->regmap,
-+ BMI323_FEAT_EVNT_EXT_REG,
-+ &feature_event);
-+ if (ret)
-+ return IRQ_NONE;
-+ }
-+
-+ if (FIELD_GET(BMI323_FEAT_EVNT_EXT_S_MSK, feature_event)) {
-+ iio_push_event(indio_dev,
-+ IIO_MOD_EVENT_CODE(IIO_ACCEL, 0,
-+ IIO_MOD_X_OR_Y_OR_Z,
-+ IIO_EV_TYPE_GESTURE,
-+ IIO_EV_DIR_SINGLETAP),
-+ timestamp);
-+ }
-+
-+ if (FIELD_GET(BMI323_FEAT_EVNT_EXT_D_MSK, feature_event))
-+ iio_push_event(indio_dev,
-+ IIO_MOD_EVENT_CODE(IIO_ACCEL, 0,
-+ IIO_MOD_X_OR_Y_OR_Z,
-+ IIO_EV_TYPE_GESTURE,
-+ IIO_EV_DIR_DOUBLETAP),
-+ timestamp);
-+ }
-+
-+ return IRQ_HANDLED;
-+}
-+
-+static int bmi323_set_drdy_irq(struct bmi323_data *data,
-+ enum bmi323_irq_pin irq_pin)
-+{
-+ int ret;
-+
-+ ret = regmap_update_bits(data->regmap, BMI323_INT_MAP2_REG,
-+ BMI323_GYR_DRDY_MSK,
-+ FIELD_PREP(BMI323_GYR_DRDY_MSK, irq_pin));
-+ if (ret)
-+ return ret;
-+
-+ return regmap_update_bits(data->regmap, BMI323_INT_MAP2_REG,
-+ BMI323_ACC_DRDY_MSK,
-+ FIELD_PREP(BMI323_ACC_DRDY_MSK, irq_pin));
-+}
-+
-+static int bmi323_data_rdy_trigger_set_state(struct iio_trigger *trig,
-+ bool state)
-+{
-+ struct bmi323_data *data = iio_trigger_get_drvdata(trig);
-+ enum bmi323_irq_pin irq_pin;
-+
-+ guard(mutex)(&data->mutex);
-+
-+ if (data->state == BMI323_BUFFER_FIFO) {
-+ dev_warn(data->dev, "Can't set trigger when FIFO enabled\n");
-+ return -EBUSY;
-+ }
-+
-+ if (state) {
-+ data->state = BMI323_BUFFER_DRDY_TRIGGERED;
-+ irq_pin = data->irq_pin;
-+ } else {
-+ data->state = BMI323_IDLE;
-+ irq_pin = BMI323_IRQ_DISABLED;
-+ }
-+
-+ return bmi323_set_drdy_irq(data, irq_pin);
-+}
-+
-+static const struct iio_trigger_ops bmi323_trigger_ops = {
-+ .set_trigger_state = &bmi323_data_rdy_trigger_set_state,
-+};
-+
-+static irqreturn_t bmi323_trigger_handler(int irq, void *p)
-+{
-+ struct iio_poll_func *pf = p;
-+ struct iio_dev *indio_dev = pf->indio_dev;
-+ struct bmi323_data *data = iio_priv(indio_dev);
-+ int ret, bit, index = 0;
-+
-+ /* Lock to protect the data->buffer */
-+ guard(mutex)(&data->mutex);
-+
-+ if (*indio_dev->active_scan_mask == BMI323_ALL_CHAN_MSK) {
-+ ret = regmap_bulk_read(data->regmap, BMI323_ACCEL_X_REG,
-+ &data->buffer.channels,
-+ ARRAY_SIZE(data->buffer.channels));
-+ if (ret)
-+ return IRQ_NONE;
-+ } else {
-+ for_each_set_bit(bit, indio_dev->active_scan_mask,
-+ BMI323_CHAN_MAX) {
-+ ret = regmap_raw_read(data->regmap,
-+ BMI323_ACCEL_X_REG + bit,
-+ &data->buffer.channels[index++],
-+ BMI323_BYTES_PER_SAMPLE);
-+ if (ret)
-+ return IRQ_NONE;
-+ }
-+ }
-+
-+ iio_push_to_buffers_with_timestamp(indio_dev, &data->buffer,
-+ iio_get_time_ns(indio_dev));
-+
-+ iio_trigger_notify_done(indio_dev->trig);
-+
-+ return IRQ_HANDLED;
-+}
-+
-+static int bmi323_set_average(struct bmi323_data *data,
-+ enum bmi323_sensor_type sensor, int avg)
-+{
-+ int raw = ARRAY_SIZE(bmi323_accel_gyro_avrg);
-+
-+ while (raw--)
-+ if (avg == bmi323_accel_gyro_avrg[raw])
-+ break;
-+ if (raw < 0)
-+ return -EINVAL;
-+
-+ guard(mutex)(&data->mutex);
-+ return regmap_update_bits(data->regmap, bmi323_hw[sensor].config,
-+ BMI323_ACC_GYRO_CONF_AVG_MSK,
-+ FIELD_PREP(BMI323_ACC_GYRO_CONF_AVG_MSK,
-+ raw));
-+}
-+
-+static int bmi323_get_average(struct bmi323_data *data,
-+ enum bmi323_sensor_type sensor, int *avg)
-+{
-+ int ret, value, raw;
-+
-+ scoped_guard(mutex, &data->mutex) {
-+ ret = regmap_read(data->regmap, bmi323_hw[sensor].config, &value);
-+ if (ret)
-+ return ret;
-+ }
-+
-+ raw = FIELD_GET(BMI323_ACC_GYRO_CONF_AVG_MSK, value);
-+ *avg = bmi323_accel_gyro_avrg[raw];
-+
-+ return IIO_VAL_INT;
-+}
-+
-+static int bmi323_enable_steps(struct bmi323_data *data, int val)
-+{
-+ int ret;
-+
-+ guard(mutex)(&data->mutex);
-+ if (data->odrhz[BMI323_ACCEL] < 200) {
-+ dev_err(data->dev, "Invalid accelrometer parameter\n");
-+ return -EINVAL;
-+ }
-+
-+ ret = bmi323_feature_engine_events(data, BMI323_FEAT_IO0_STP_CNT_MSK,
-+ val ? 1 : 0);
-+ if (ret)
-+ return ret;
-+
-+ set_mask_bits(&data->feature_events, BMI323_FEAT_IO0_STP_CNT_MSK,
-+ FIELD_PREP(BMI323_FEAT_IO0_STP_CNT_MSK, val ? 1 : 0));
-+
-+ return 0;
-+}
-+
-+static int bmi323_read_steps(struct bmi323_data *data, int *val)
-+{
-+ int ret;
-+
-+ guard(mutex)(&data->mutex);
-+ if (!FIELD_GET(BMI323_FEAT_IO0_STP_CNT_MSK, data->feature_events))
-+ return -EINVAL;
-+
-+ ret = regmap_bulk_read(data->regmap, BMI323_FEAT_IO2_REG,
-+ data->steps_count,
-+ ARRAY_SIZE(data->steps_count));
-+ if (ret)
-+ return ret;
-+
-+ *val = get_unaligned_le32(data->steps_count);
-+
-+ return IIO_VAL_INT;
-+}
-+
-+static int bmi323_read_axis(struct bmi323_data *data,
-+ struct iio_chan_spec const *chan, int *val)
-+{
-+ enum bmi323_sensor_type sensor;
-+ unsigned int value;
-+ u8 addr;
-+ int ret;
-+
-+ ret = bmi323_get_error_status(data);
-+ if (ret)
-+ return -EINVAL;
-+
-+ sensor = bmi323_iio_to_sensor(chan->type);
-+ addr = bmi323_hw[sensor].data + (chan->channel2 - IIO_MOD_X);
-+
-+ scoped_guard(mutex, &data->mutex) {
-+ ret = regmap_read(data->regmap, addr, &value);
-+ if (ret)
-+ return ret;
-+ }
-+
-+ *val = sign_extend32(value, chan->scan_type.realbits - 1);
-+
-+ return IIO_VAL_INT;
-+}
-+
-+static int bmi323_get_temp_data(struct bmi323_data *data, int *val)
-+{
-+ unsigned int value;
-+ int ret;
-+
-+ ret = bmi323_get_error_status(data);
-+ if (ret)
-+ return -EINVAL;
-+
-+ scoped_guard(mutex, &data->mutex) {
-+ ret = regmap_read(data->regmap, BMI323_TEMP_REG, &value);
-+ if (ret)
-+ return ret;
-+ }
-+
-+ *val = sign_extend32(value, 15);
-+
-+ return IIO_VAL_INT;
-+}
-+
-+static int bmi323_get_odr(struct bmi323_data *data,
-+ enum bmi323_sensor_type sensor, int *odr, int *uodr)
-+{
-+ int ret, value, odr_raw;
-+
-+ scoped_guard(mutex, &data->mutex) {
-+ ret = regmap_read(data->regmap, bmi323_hw[sensor].config, &value);
-+ if (ret)
-+ return ret;
-+ }
-+
-+ odr_raw = FIELD_GET(BMI323_ACC_GYRO_CONF_ODR_MSK, value);
-+ *odr = bmi323_acc_gyro_odr[odr_raw - 1][0];
-+ *uodr = bmi323_acc_gyro_odr[odr_raw - 1][1];
-+
-+ return IIO_VAL_INT_PLUS_MICRO;
-+}
-+
-+static int bmi323_configure_power_mode(struct bmi323_data *data,
-+ enum bmi323_sensor_type sensor,
-+ int odr_index)
-+{
-+ enum bmi323_opr_mode mode;
-+
-+ if (bmi323_acc_gyro_odr[odr_index][0] > 25)
-+ mode = ACC_GYRO_MODE_CONTINOUS;
-+ else
-+ mode = ACC_GYRO_MODE_DUTYCYCLE;
-+
-+ return bmi323_set_mode(data, sensor, mode);
-+}
-+
-+static int bmi323_set_odr(struct bmi323_data *data,
-+ enum bmi323_sensor_type sensor, int odr, int uodr)
-+{
-+ int odr_raw, ret;
-+
-+ odr_raw = ARRAY_SIZE(bmi323_acc_gyro_odr);
-+
-+ while (odr_raw--)
-+ if (odr == bmi323_acc_gyro_odr[odr_raw][0] &&
-+ uodr == bmi323_acc_gyro_odr[odr_raw][1])
-+ break;
-+ if (odr_raw < 0)
-+ return -EINVAL;
-+
-+ ret = bmi323_configure_power_mode(data, sensor, odr_raw);
-+ if (ret)
-+ return -EINVAL;
-+
-+ guard(mutex)(&data->mutex);
-+ data->odrhz[sensor] = bmi323_acc_gyro_odr[odr_raw][0];
-+ data->odrns[sensor] = bmi323_acc_gyro_odrns[odr_raw];
-+
-+ odr_raw++;
-+
-+ return regmap_update_bits(data->regmap, bmi323_hw[sensor].config,
-+ BMI323_ACC_GYRO_CONF_ODR_MSK,
-+ FIELD_PREP(BMI323_ACC_GYRO_CONF_ODR_MSK,
-+ odr_raw));
-+}
-+
-+static int bmi323_get_scale(struct bmi323_data *data,
-+ enum bmi323_sensor_type sensor, int *val2)
-+{
-+ int ret, value, scale_raw;
-+
-+ scoped_guard(mutex, &data->mutex) {
-+ ret = regmap_read(data->regmap, bmi323_hw[sensor].config,
-+ &value);
-+ if (ret)
-+ return ret;
-+ }
-+
-+ scale_raw = FIELD_GET(BMI323_ACC_GYRO_CONF_SCL_MSK, value);
-+ *val2 = bmi323_hw[sensor].scale_table[scale_raw][1];
-+
-+ return IIO_VAL_INT_PLUS_MICRO;
-+}
-+
-+static int bmi323_set_scale(struct bmi323_data *data,
-+ enum bmi323_sensor_type sensor, int val, int val2)
-+{
-+ int scale_raw;
-+
-+ scale_raw = bmi323_hw[sensor].scale_table_len;
-+
-+ while (scale_raw--)
-+ if (val == bmi323_hw[sensor].scale_table[scale_raw][0] &&
-+ val2 == bmi323_hw[sensor].scale_table[scale_raw][1])
-+ break;
-+ if (scale_raw < 0)
-+ return -EINVAL;
-+
-+ guard(mutex)(&data->mutex);
-+ return regmap_update_bits(data->regmap, bmi323_hw[sensor].config,
-+ BMI323_ACC_GYRO_CONF_SCL_MSK,
-+ FIELD_PREP(BMI323_ACC_GYRO_CONF_SCL_MSK,
-+ scale_raw));
-+}
-+
-+static int bmi323_read_avail(struct iio_dev *indio_dev,
-+ struct iio_chan_spec const *chan,
-+ const int **vals, int *type, int *length,
-+ long mask)
-+{
-+ enum bmi323_sensor_type sensor;
-+
-+ switch (mask) {
-+ case IIO_CHAN_INFO_SAMP_FREQ:
-+ *type = IIO_VAL_INT_PLUS_MICRO;
-+ *vals = (const int *)bmi323_acc_gyro_odr;
-+ *length = ARRAY_SIZE(bmi323_acc_gyro_odr) * 2;
-+ return IIO_AVAIL_LIST;
-+ case IIO_CHAN_INFO_SCALE:
-+ sensor = bmi323_iio_to_sensor(chan->type);
-+ *type = IIO_VAL_INT_PLUS_MICRO;
-+ *vals = (const int *)bmi323_hw[sensor].scale_table;
-+ *length = bmi323_hw[sensor].scale_table_len * 2;
-+ return IIO_AVAIL_LIST;
-+ case IIO_CHAN_INFO_OVERSAMPLING_RATIO:
-+ *type = IIO_VAL_INT;
-+ *vals = (const int *)bmi323_accel_gyro_avrg;
-+ *length = ARRAY_SIZE(bmi323_accel_gyro_avrg);
-+ return IIO_AVAIL_LIST;
-+ default:
-+ return -EINVAL;
-+ }
-+}
-+
-+static int bmi323_write_raw(struct iio_dev *indio_dev,
-+ struct iio_chan_spec const *chan, int val,
-+ int val2, long mask)
-+{
-+ struct bmi323_data *data = iio_priv(indio_dev);
-+ int ret;
-+
-+ switch (mask) {
-+ case IIO_CHAN_INFO_SAMP_FREQ:
-+ ret = iio_device_claim_direct_mode(indio_dev);
-+ if (ret)
-+ return ret;
-+
-+ ret = bmi323_set_odr(data, bmi323_iio_to_sensor(chan->type),
-+ val, val2);
-+ iio_device_release_direct_mode(indio_dev);
-+ return ret;
-+ case IIO_CHAN_INFO_SCALE:
-+ ret = iio_device_claim_direct_mode(indio_dev);
-+ if (ret)
-+ return ret;
-+
-+ ret = bmi323_set_scale(data, bmi323_iio_to_sensor(chan->type),
-+ val, val2);
-+ iio_device_release_direct_mode(indio_dev);
-+ return ret;
-+ case IIO_CHAN_INFO_OVERSAMPLING_RATIO:
-+ ret = iio_device_claim_direct_mode(indio_dev);
-+ if (ret)
-+ return ret;
-+
-+ ret = bmi323_set_average(data, bmi323_iio_to_sensor(chan->type),
-+ val);
-+
-+ iio_device_release_direct_mode(indio_dev);
-+ return ret;
-+ case IIO_CHAN_INFO_ENABLE:
-+ return bmi323_enable_steps(data, val);
-+ case IIO_CHAN_INFO_PROCESSED:
-+ scoped_guard(mutex, &data->mutex) {
-+ if (val || !FIELD_GET(BMI323_FEAT_IO0_STP_CNT_MSK,
-+ data->feature_events))
-+ return -EINVAL;
-+
-+ /* Clear step counter value */
-+ ret = bmi323_update_ext_reg(data, BMI323_STEP_SC1_REG,
-+ BMI323_STEP_SC1_RST_CNT_MSK,
-+ FIELD_PREP(BMI323_STEP_SC1_RST_CNT_MSK,
-+ 1));
-+ }
-+ return ret;
-+ default:
-+ return -EINVAL;
-+ }
-+}
-+
-+static int bmi323_read_raw(struct iio_dev *indio_dev,
-+ struct iio_chan_spec const *chan, int *val,
-+ int *val2, long mask)
-+{
-+ struct bmi323_data *data = iio_priv(indio_dev);
-+ int ret;
-+
-+ switch (mask) {
-+ case IIO_CHAN_INFO_PROCESSED:
-+ return bmi323_read_steps(data, val);
-+ case IIO_CHAN_INFO_RAW:
-+ switch (chan->type) {
-+ case IIO_ACCEL:
-+ case IIO_ANGL_VEL:
-+ ret = iio_device_claim_direct_mode(indio_dev);
-+ if (ret)
-+ return ret;
-+
-+ ret = bmi323_read_axis(data, chan, val);
-+
-+ iio_device_release_direct_mode(indio_dev);
-+ return ret;
-+ case IIO_TEMP:
-+ return bmi323_get_temp_data(data, val);
-+ default:
-+ return -EINVAL;
-+ }
-+ case IIO_CHAN_INFO_SAMP_FREQ:
-+ return bmi323_get_odr(data, bmi323_iio_to_sensor(chan->type),
-+ val, val2);
-+ case IIO_CHAN_INFO_SCALE:
-+ switch (chan->type) {
-+ case IIO_ACCEL:
-+ case IIO_ANGL_VEL:
-+ *val = 0;
-+ return bmi323_get_scale(data,
-+ bmi323_iio_to_sensor(chan->type),
-+ val2);
-+ case IIO_TEMP:
-+ *val = BMI323_TEMP_SCALE / MEGA;
-+ *val2 = BMI323_TEMP_SCALE % MEGA;
-+ return IIO_VAL_INT_PLUS_MICRO;
-+ default:
-+ return -EINVAL;
-+ }
-+ case IIO_CHAN_INFO_OVERSAMPLING_RATIO:
-+ return bmi323_get_average(data,
-+ bmi323_iio_to_sensor(chan->type),
-+ val);
-+ case IIO_CHAN_INFO_OFFSET:
-+ switch (chan->type) {
-+ case IIO_TEMP:
-+ *val = BMI323_TEMP_OFFSET;
-+ return IIO_VAL_INT;
-+ default:
-+ return -EINVAL;
-+ }
-+ case IIO_CHAN_INFO_ENABLE:
-+ scoped_guard(mutex, &data->mutex)
-+ *val = FIELD_GET(BMI323_FEAT_IO0_STP_CNT_MSK,
-+ data->feature_events);
-+ return IIO_VAL_INT;
-+ default:
-+ return -EINVAL;
-+ }
-+}
-+
-+static const struct iio_info bmi323_info = {
-+ .read_raw = bmi323_read_raw,
-+ .write_raw = bmi323_write_raw,
-+ .read_avail = bmi323_read_avail,
-+ .hwfifo_set_watermark = bmi323_set_watermark,
-+ .write_event_config = bmi323_write_event_config,
-+ .read_event_config = bmi323_read_event_config,
-+ .write_event_value = bmi323_write_event_value,
-+ .read_event_value = bmi323_read_event_value,
-+ .event_attrs = &bmi323_event_attribute_group,
-+};
-+
-+#define BMI323_SCAN_MASK_ACCEL_3AXIS \
-+ (BIT(BMI323_ACCEL_X) | BIT(BMI323_ACCEL_Y) | BIT(BMI323_ACCEL_Z))
-+
-+#define BMI323_SCAN_MASK_GYRO_3AXIS \
-+ (BIT(BMI323_GYRO_X) | BIT(BMI323_GYRO_Y) | BIT(BMI323_GYRO_Z))
-+
-+static const unsigned long bmi323_avail_scan_masks[] = {
-+ /* 3-axis accel */
-+ BMI323_SCAN_MASK_ACCEL_3AXIS,
-+ /* 3-axis gyro */
-+ BMI323_SCAN_MASK_GYRO_3AXIS,
-+ /* 3-axis accel + 3-axis gyro */
-+ BMI323_SCAN_MASK_ACCEL_3AXIS | BMI323_SCAN_MASK_GYRO_3AXIS,
-+ 0
-+};
-+
-+static int bmi323_int_pin_config(struct bmi323_data *data,
-+ enum bmi323_irq_pin irq_pin,
-+ bool active_high, bool open_drain, bool latch)
-+{
-+ unsigned int mask, field_value;
-+ int ret;
-+
-+ ret = regmap_update_bits(data->regmap, BMI323_IO_INT_CONF_REG,
-+ BMI323_IO_INT_LTCH_MSK,
-+ FIELD_PREP(BMI323_IO_INT_LTCH_MSK, latch));
-+ if (ret)
-+ return ret;
-+
-+ ret = bmi323_update_ext_reg(data, BMI323_GEN_SET1_REG,
-+ BMI323_GEN_HOLD_DUR_MSK,
-+ FIELD_PREP(BMI323_GEN_HOLD_DUR_MSK, 0));
-+ if (ret)
-+ return ret;
-+
-+ switch (irq_pin) {
-+ case BMI323_IRQ_INT1:
-+ mask = BMI323_IO_INT1_LVL_OD_OP_MSK;
-+
-+ field_value = FIELD_PREP(BMI323_IO_INT1_LVL_MSK, active_high) |
-+ FIELD_PREP(BMI323_IO_INT1_OD_MSK, open_drain) |
-+ FIELD_PREP(BMI323_IO_INT1_OP_EN_MSK, 1);
-+ break;
-+ case BMI323_IRQ_INT2:
-+ mask = BMI323_IO_INT2_LVL_OD_OP_MSK;
-+
-+ field_value = FIELD_PREP(BMI323_IO_INT2_LVL_MSK, active_high) |
-+ FIELD_PREP(BMI323_IO_INT2_OD_MSK, open_drain) |
-+ FIELD_PREP(BMI323_IO_INT2_OP_EN_MSK, 1);
-+ break;
-+ default:
-+ return -EINVAL;
-+ }
-+
-+ return regmap_update_bits(data->regmap, BMI323_IO_INT_CTR_REG, mask,
-+ field_value);
-+}
-+
-+static int bmi323_trigger_probe(struct bmi323_data *data,
-+ struct iio_dev *indio_dev)
-+{
-+ bool open_drain, active_high, latch;
-+ struct fwnode_handle *fwnode;
-+ enum bmi323_irq_pin irq_pin;
-+ int ret, irq, irq_type;
-+ struct irq_data *desc;
-+
-+ fwnode = dev_fwnode(data->dev);
-+ if (!fwnode)
-+ return -ENODEV;
-+
-+ irq = fwnode_irq_get_byname(fwnode, "INT1");
-+ if (irq > 0) {
-+ irq_pin = BMI323_IRQ_INT1;
-+ } else {
-+ irq = fwnode_irq_get_byname(fwnode, "INT2");
-+ if (irq < 0)
-+ return 0;
-+
-+ irq_pin = BMI323_IRQ_INT2;
-+ }
-+
-+ desc = irq_get_irq_data(irq);
-+ if (!desc)
-+ return dev_err_probe(data->dev, -EINVAL,
-+ "Could not find IRQ %d\n", irq);
-+
-+ irq_type = irqd_get_trigger_type(desc);
-+ switch (irq_type) {
-+ case IRQF_TRIGGER_RISING:
-+ latch = false;
-+ active_high = true;
-+ break;
-+ case IRQF_TRIGGER_HIGH:
-+ latch = true;
-+ active_high = true;
-+ break;
-+ case IRQF_TRIGGER_FALLING:
-+ latch = false;
-+ active_high = false;
-+ break;
-+ case IRQF_TRIGGER_LOW:
-+ latch = true;
-+ active_high = false;
-+ break;
-+ default:
-+ return dev_err_probe(data->dev, -EINVAL,
-+ "Invalid interrupt type 0x%x specified\n",
-+ irq_type);
-+ }
-+
-+ open_drain = fwnode_property_read_bool(fwnode, "drive-open-drain");
-+
-+ ret = bmi323_int_pin_config(data, irq_pin, active_high, open_drain,
-+ latch);
-+ if (ret)
-+ return dev_err_probe(data->dev, ret,
-+ "Failed to configure irq line\n");
-+
-+ data->trig = devm_iio_trigger_alloc(data->dev, "%s-trig-%d",
-+ indio_dev->name, irq_pin);
-+ if (!data->trig)
-+ return -ENOMEM;
-+
-+ data->trig->ops = &bmi323_trigger_ops;
-+ iio_trigger_set_drvdata(data->trig, data);
-+
-+ ret = devm_request_threaded_irq(data->dev, irq, NULL,
-+ bmi323_irq_thread_handler,
-+ IRQF_ONESHOT, "bmi323-int", indio_dev);
-+ if (ret)
-+ return dev_err_probe(data->dev, ret, "Failed to request IRQ\n");
-+
-+ ret = devm_iio_trigger_register(data->dev, data->trig);
-+ if (ret)
-+ return dev_err_probe(data->dev, ret,
-+ "Trigger registration failed\n");
-+
-+ data->irq_pin = irq_pin;
-+
-+ return 0;
-+}
-+
-+static int bmi323_feature_engine_enable(struct bmi323_data *data, bool en)
-+{
-+ unsigned int feature_status;
-+ int ret;
-+
-+ if (!en)
-+ return regmap_write(data->regmap, BMI323_FEAT_CTRL_REG, 0);
-+
-+ ret = regmap_write(data->regmap, BMI323_FEAT_IO2_REG, 0x012c);
-+ if (ret)
-+ return ret;
-+
-+ ret = regmap_write(data->regmap, BMI323_FEAT_IO_STATUS_REG,
-+ BMI323_FEAT_IO_STATUS_MSK);
-+ if (ret)
-+ return ret;
-+
-+ ret = regmap_write(data->regmap, BMI323_FEAT_CTRL_REG,
-+ BMI323_FEAT_ENG_EN_MSK);
-+ if (ret)
-+ return ret;
-+
-+ /*
-+ * It takes around 4 msec to enable the Feature engine, so check
-+ * the status of the feature engine every 2 msec for a maximum
-+ * of 5 trials.
-+ */
-+ ret = regmap_read_poll_timeout(data->regmap, BMI323_FEAT_IO1_REG,
-+ feature_status,
-+ FIELD_GET(BMI323_FEAT_IO1_ERR_MSK,
-+ feature_status) == 1,
-+ BMI323_FEAT_ENG_POLL,
-+ BMI323_FEAT_ENG_TIMEOUT);
-+ if (ret)
-+ return dev_err_probe(data->dev, -EINVAL,
-+ "Failed to enable feature engine\n");
-+
-+ return 0;
-+}
-+
-+static void bmi323_disable(void *data_ptr)
-+{
-+ struct bmi323_data *data = data_ptr;
-+
-+ bmi323_set_mode(data, BMI323_ACCEL, ACC_GYRO_MODE_DISABLE);
-+ bmi323_set_mode(data, BMI323_GYRO, ACC_GYRO_MODE_DISABLE);
-+}
-+
-+static int bmi323_set_bw(struct bmi323_data *data,
-+ enum bmi323_sensor_type sensor, enum bmi323_3db_bw bw)
-+{
-+ return regmap_update_bits(data->regmap, bmi323_hw[sensor].config,
-+ BMI323_ACC_GYRO_CONF_BW_MSK,
-+ FIELD_PREP(BMI323_ACC_GYRO_CONF_BW_MSK, bw));
-+}
-+
-+static int bmi323_init(struct bmi323_data *data)
-+{
-+ int ret, val;
-+
-+ /*
-+ * Perform soft reset to make sure the device is in a known state after
-+ * start up. A delay of 1.5 ms is required after reset.
-+ * See datasheet section 5.17 "Soft Reset".
-+ */
-+ ret = regmap_write(data->regmap, BMI323_CMD_REG, BMI323_RST_VAL);
-+ if (ret)
-+ return ret;
-+
-+ usleep_range(1500, 2000);
-+
-+ /*
-+ * Dummy read is required to enable SPI interface after reset.
-+ * See datasheet section 7.2.1 "Protocol Selection".
-+ */
-+ regmap_read(data->regmap, BMI323_CHIP_ID_REG, &val);
-+
-+ ret = regmap_read(data->regmap, BMI323_STATUS_REG, &val);
-+ if (ret)
-+ return ret;
-+
-+ if (!FIELD_GET(BMI323_STATUS_POR_MSK, val))
-+ return dev_err_probe(data->dev, -EINVAL,
-+ "Sensor initialization error\n");
-+
-+ ret = regmap_read(data->regmap, BMI323_CHIP_ID_REG, &val);
-+ if (ret)
-+ return ret;
-+
-+ if (FIELD_GET(BMI323_CHIP_ID_MSK, val) != BMI323_CHIP_ID_VAL)
-+ return dev_err_probe(data->dev, -EINVAL, "Chip ID mismatch\n");
-+
-+ ret = bmi323_feature_engine_enable(data, true);
-+ if (ret)
-+ return ret;
-+
-+ ret = regmap_read(data->regmap, BMI323_ERR_REG, &val);
-+ if (ret)
-+ return ret;
-+
-+ if (val)
-+ return dev_err_probe(data->dev, -EINVAL,
-+ "Sensor power error = 0x%x\n", val);
-+
-+ /*
-+ * Set the Bandwidth coefficient which defines the 3 dB cutoff
-+ * frequency in relation to the ODR.
-+ */
-+ ret = bmi323_set_bw(data, BMI323_ACCEL, BMI323_BW_ODR_BY_2);
-+ if (ret)
-+ return ret;
-+
-+ ret = bmi323_set_bw(data, BMI323_GYRO, BMI323_BW_ODR_BY_2);
-+ if (ret)
-+ return ret;
-+
-+ ret = bmi323_set_odr(data, BMI323_ACCEL, 25, 0);
-+ if (ret)
-+ return ret;
-+
-+ ret = bmi323_set_odr(data, BMI323_GYRO, 25, 0);
-+ if (ret)
-+ return ret;
-+
-+ return devm_add_action_or_reset(data->dev, bmi323_disable, data);
-+}
-+
-+int bmi323_core_probe(struct device *dev)
-+{
-+ static const char * const regulator_names[] = { "vdd", "vddio" };
-+ struct iio_dev *indio_dev;
-+ struct bmi323_data *data;
-+ struct regmap *regmap;
-+ int ret;
-+
-+ regmap = dev_get_regmap(dev, NULL);
-+ if (!regmap)
-+ return dev_err_probe(dev, -ENODEV, "Failed to get regmap\n");
-+
-+ indio_dev = devm_iio_device_alloc(dev, sizeof(*data));
-+ if (!indio_dev)
-+ return dev_err_probe(dev, -ENOMEM,
-+ "Failed to allocate device\n");
-+
-+ ret = devm_regulator_bulk_get_enable(dev, ARRAY_SIZE(regulator_names),
-+ regulator_names);
-+ if (ret)
-+ return dev_err_probe(dev, ret, "Failed to enable regulators\n");
-+
-+ data = iio_priv(indio_dev);
-+ data->dev = dev;
-+ data->regmap = regmap;
-+ mutex_init(&data->mutex);
-+
-+ ret = bmi323_init(data);
-+ if (ret)
-+ return -EINVAL;
-+
-+ ret = iio_read_mount_matrix(dev, &data->orientation);
-+ if (ret)
-+ return ret;
-+
-+ indio_dev->name = "bmi323-imu";
-+ indio_dev->info = &bmi323_info;
-+ indio_dev->channels = bmi323_channels;
-+ indio_dev->num_channels = ARRAY_SIZE(bmi323_channels);
-+ indio_dev->available_scan_masks = bmi323_avail_scan_masks;
-+ indio_dev->modes = INDIO_DIRECT_MODE | INDIO_BUFFER_SOFTWARE;
-+ dev_set_drvdata(data->dev, indio_dev);
-+
-+ ret = bmi323_trigger_probe(data, indio_dev);
-+ if (ret)
-+ return -EINVAL;
-+
-+ ret = devm_iio_triggered_buffer_setup_ext(data->dev, indio_dev,
-+ &iio_pollfunc_store_time,
-+ bmi323_trigger_handler,
-+ IIO_BUFFER_DIRECTION_IN,
-+ &bmi323_buffer_ops,
-+ bmi323_fifo_attributes);
-+ if (ret)
-+ return dev_err_probe(data->dev, ret,
-+ "Failed to setup trigger buffer\n");
-+
-+ ret = devm_iio_device_register(data->dev, indio_dev);
-+ if (ret)
-+ return dev_err_probe(data->dev, ret,
-+ "Unable to register iio device\n");
-+
-+ return 0;
-+}
-+EXPORT_SYMBOL_NS_GPL(bmi323_core_probe, IIO_BMI323);
-+
-+MODULE_DESCRIPTION("Bosch BMI323 IMU driver");
-+MODULE_AUTHOR("Jagath Jog J <jagathjog1996@gmail.com>");
-+MODULE_LICENSE("GPL");
-diff --git a/drivers/iio/imu/bmi323/bmi323_i2c.c b/drivers/iio/imu/bmi323/bmi323_i2c.c
-new file mode 100644
-index 000000000000..0008e186367d
---- /dev/null
-+++ b/drivers/iio/imu/bmi323/bmi323_i2c.c
-@@ -0,0 +1,121 @@
-+// SPDX-License-Identifier: GPL-2.0
-+/*
-+ * I2C driver for Bosch BMI323 6-Axis IMU.
-+ *
-+ * Copyright (C) 2023, Jagath Jog J <jagathjog1996@gmail.com>
-+ */
-+
-+#include <linux/i2c.h>
-+#include <linux/mod_devicetable.h>
-+#include <linux/module.h>
-+#include <linux/regmap.h>
-+
-+#include "bmi323.h"
-+
-+struct bmi323_i2c_priv {
-+ struct i2c_client *i2c;
-+ u8 i2c_rx_buffer[BMI323_FIFO_LENGTH_IN_BYTES + BMI323_I2C_DUMMY];
-+};
-+
-+/*
-+ * From BMI323 datasheet section 4: Notes on the Serial Interface Support.
-+ * Each I2C register read operation requires to read two dummy bytes before
-+ * the actual payload.
-+ */
-+static int bmi323_regmap_i2c_read(void *context, const void *reg_buf,
-+ size_t reg_size, void *val_buf,
-+ size_t val_size)
-+{
-+ struct bmi323_i2c_priv *priv = context;
-+ struct i2c_msg msgs[2];
-+ int ret;
-+
-+ msgs[0].addr = priv->i2c->addr;
-+ msgs[0].flags = priv->i2c->flags;
-+ msgs[0].len = reg_size;
-+ msgs[0].buf = (u8 *)reg_buf;
-+
-+ msgs[1].addr = priv->i2c->addr;
-+ msgs[1].len = val_size + BMI323_I2C_DUMMY;
-+ msgs[1].buf = priv->i2c_rx_buffer;
-+ msgs[1].flags = priv->i2c->flags | I2C_M_RD;
-+
-+ ret = i2c_transfer(priv->i2c->adapter, msgs, ARRAY_SIZE(msgs));
-+ if (ret < 0)
-+ return -EIO;
-+
-+ memcpy(val_buf, priv->i2c_rx_buffer + BMI323_I2C_DUMMY, val_size);
-+
-+ return 0;
-+}
-+
-+static int bmi323_regmap_i2c_write(void *context, const void *data,
-+ size_t count)
-+{
-+ struct bmi323_i2c_priv *priv = context;
-+ u8 reg;
-+
-+ reg = *(u8 *)data;
-+ return i2c_smbus_write_i2c_block_data(priv->i2c, reg,
-+ count - sizeof(u8),
-+ data + sizeof(u8));
-+}
-+
-+static struct regmap_bus bmi323_regmap_bus = {
-+ .read = bmi323_regmap_i2c_read,
-+ .write = bmi323_regmap_i2c_write,
-+};
-+
-+const struct regmap_config bmi323_i2c_regmap_config = {
-+ .reg_bits = 8,
-+ .val_bits = 16,
-+ .max_register = BMI323_CFG_RES_REG,
-+ .val_format_endian = REGMAP_ENDIAN_LITTLE,
-+};
-+
-+static int bmi323_i2c_probe(struct i2c_client *i2c)
-+{
-+ struct device *dev = &i2c->dev;
-+ struct bmi323_i2c_priv *priv;
-+ struct regmap *regmap;
-+
-+ priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL);
-+ if (!priv)
-+ return -ENOMEM;
-+
-+ priv->i2c = i2c;
-+ regmap = devm_regmap_init(dev, &bmi323_regmap_bus, priv,
-+ &bmi323_i2c_regmap_config);
-+ if (IS_ERR(regmap))
-+ return dev_err_probe(dev, PTR_ERR(regmap),
-+ "Failed to initialize I2C Regmap\n");
-+
-+ return bmi323_core_probe(dev);
-+}
-+
-+static const struct i2c_device_id bmi323_i2c_ids[] = {
-+ { "bmi323" },
-+ { }
-+};
-+MODULE_DEVICE_TABLE(i2c, bmi323_i2c_ids);
-+
-+static const struct of_device_id bmi323_of_i2c_match[] = {
-+ { .compatible = "bosch,bmi323" },
-+ { }
-+};
-+MODULE_DEVICE_TABLE(of, bmi323_of_i2c_match);
-+
-+static struct i2c_driver bmi323_i2c_driver = {
-+ .driver = {
-+ .name = "bmi323",
-+ .of_match_table = bmi323_of_i2c_match,
-+ },
-+ .probe = bmi323_i2c_probe,
-+ .id_table = bmi323_i2c_ids,
-+};
-+module_i2c_driver(bmi323_i2c_driver);
-+
-+MODULE_DESCRIPTION("Bosch BMI323 IMU driver");
-+MODULE_AUTHOR("Jagath Jog J <jagathjog1996@gmail.com>");
-+MODULE_LICENSE("GPL");
-+MODULE_IMPORT_NS(IIO_BMI323);
-diff --git a/drivers/iio/imu/bmi323/bmi323_spi.c b/drivers/iio/imu/bmi323/bmi323_spi.c
-new file mode 100644
-index 000000000000..6dc3352dd714
---- /dev/null
-+++ b/drivers/iio/imu/bmi323/bmi323_spi.c
-@@ -0,0 +1,92 @@
-+// SPDX-License-Identifier: GPL-2.0
-+/*
-+ * SPI driver for Bosch BMI323 6-Axis IMU.
-+ *
-+ * Copyright (C) 2023, Jagath Jog J <jagathjog1996@gmail.com>
-+ */
-+
-+#include <linux/mod_devicetable.h>
-+#include <linux/module.h>
-+#include <linux/regmap.h>
-+#include <linux/spi/spi.h>
-+
-+#include "bmi323.h"
-+
-+/*
-+ * From BMI323 datasheet section 4: Notes on the Serial Interface Support.
-+ * Each SPI register read operation requires to read one dummy byte before
-+ * the actual payload.
-+ */
-+static int bmi323_regmap_spi_read(void *context, const void *reg_buf,
-+ size_t reg_size, void *val_buf,
-+ size_t val_size)
-+{
-+ struct spi_device *spi = context;
-+
-+ return spi_write_then_read(spi, reg_buf, reg_size, val_buf, val_size);
-+}
-+
-+static int bmi323_regmap_spi_write(void *context, const void *data,
-+ size_t count)
-+{
-+ struct spi_device *spi = context;
-+ u8 *data_buff = (u8 *)data;
-+
-+ data_buff[1] = data_buff[0];
-+ return spi_write(spi, data_buff + 1, count - 1);
-+}
-+
-+static struct regmap_bus bmi323_regmap_bus = {
-+ .read = bmi323_regmap_spi_read,
-+ .write = bmi323_regmap_spi_write,
-+};
-+
-+const struct regmap_config bmi323_spi_regmap_config = {
-+ .reg_bits = 8,
-+ .val_bits = 16,
-+ .pad_bits = 8,
-+ .read_flag_mask = BIT(7),
-+ .max_register = BMI323_CFG_RES_REG,
-+ .val_format_endian = REGMAP_ENDIAN_LITTLE,
-+};
-+
-+static int bmi323_spi_probe(struct spi_device *spi)
-+{
-+ struct device *dev = &spi->dev;
-+ struct regmap *regmap;
-+
-+ regmap = devm_regmap_init(dev, &bmi323_regmap_bus, dev,
-+ &bmi323_spi_regmap_config);
-+ if (IS_ERR(regmap))
-+ return dev_err_probe(dev, PTR_ERR(regmap),
-+ "Failed to initialize SPI Regmap\n");
-+
-+ return bmi323_core_probe(dev);
-+}
-+
-+static const struct spi_device_id bmi323_spi_ids[] = {
-+ { "bmi323" },
-+ { }
-+};
-+MODULE_DEVICE_TABLE(spi, bmi323_spi_ids);
-+
-+static const struct of_device_id bmi323_of_spi_match[] = {
-+ { .compatible = "bosch,bmi323" },
-+ { }
-+};
-+MODULE_DEVICE_TABLE(of, bmi323_of_spi_match);
-+
-+static struct spi_driver bmi323_spi_driver = {
-+ .driver = {
-+ .name = "bmi323",
-+ .of_match_table = bmi323_of_spi_match,
-+ },
-+ .probe = bmi323_spi_probe,
-+ .id_table = bmi323_spi_ids,
-+};
-+module_spi_driver(bmi323_spi_driver);
-+
-+MODULE_DESCRIPTION("Bosch BMI323 IMU driver");
-+MODULE_AUTHOR("Jagath Jog J <jagathjog1996@gmail.com>");
-+MODULE_LICENSE("GPL");
-+MODULE_IMPORT_NS(IIO_BMI323);
-Make the local structures static within their respective driver files.
-
-Reported-by: kernel test robot <lkp@intel.com>
-Closes: https://lore.kernel.org/oe-kbuild-all/202311070530.qKhLTz1Y-lkp@intel.com/
-Fixes: b512c767e7bc ("iio: imu: Add driver for BMI323 IMU")
-Signed-off-by: Jagath Jog J <jagathjog1996@gmail.com>
----
- drivers/iio/imu/bmi323/bmi323_i2c.c | 2 +-
- drivers/iio/imu/bmi323/bmi323_spi.c | 2 +-
- 2 files changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/drivers/iio/imu/bmi323/bmi323_i2c.c b/drivers/iio/imu/bmi323/bmi323_i2c.c
-index 0008e186367d..20a8001b9956 100644
---- a/drivers/iio/imu/bmi323/bmi323_i2c.c
-+++ b/drivers/iio/imu/bmi323/bmi323_i2c.c
-@@ -66,7 +66,7 @@ static struct regmap_bus bmi323_regmap_bus = {
- .write = bmi323_regmap_i2c_write,
- };
-
--const struct regmap_config bmi323_i2c_regmap_config = {
-+static const struct regmap_config bmi323_i2c_regmap_config = {
- .reg_bits = 8,
- .val_bits = 16,
- .max_register = BMI323_CFG_RES_REG,
-diff --git a/drivers/iio/imu/bmi323/bmi323_spi.c b/drivers/iio/imu/bmi323/bmi323_spi.c
-index 6dc3352dd714..7b1e8127d0dd 100644
---- a/drivers/iio/imu/bmi323/bmi323_spi.c
-+++ b/drivers/iio/imu/bmi323/bmi323_spi.c
-@@ -41,7 +41,7 @@ static struct regmap_bus bmi323_regmap_bus = {
- .write = bmi323_regmap_spi_write,
- };
-
--const struct regmap_config bmi323_spi_regmap_config = {
-+static const struct regmap_config bmi323_spi_regmap_config = {
- .reg_bits = 8,
- .val_bits = 16,
- .pad_bits = 8,
diff --git a/drivers/iio/accel/bmc150-accel-core.c b/drivers/iio/accel/bmc150-accel-core.c
index 1105918..d665a6e 100644
--- a/drivers/iio/accel/bmc150-accel-core.c
diff --git a/SOURCES/rpminspect.yaml b/SOURCES/rpminspect.yaml
index 87c9272..cf00079 100644
--- a/SOURCES/rpminspect.yaml
+++ b/SOURCES/rpminspect.yaml
@@ -23,7 +23,7 @@ emptyrpm:
patches:
ignore_list:
- linux-kernel-test.patch
- - patch-6.7-redhat.patch
+ - patch-6.8-redhat.patch
runpath:
ignore:
diff --git a/SOURCES/steam-deck.patch b/SOURCES/steam-deck.patch
index bbdb9ce..b118c46 100644
--- a/SOURCES/steam-deck.patch
+++ b/SOURCES/steam-deck.patch
@@ -225,7 +225,7 @@ diff --git a/drivers/hwmon/Makefile b/drivers/hwmon/Makefile
index 11d076cad8a2..d03c1e1d339f 100644
--- a/drivers/hwmon/Makefile
+++ b/drivers/hwmon/Makefile
-@@ -199,6 +199,7 @@
+@@ -200,6 +200,7 @@
obj-$(CONFIG_SENSORS_SMSC47M1) += smsc47m1.o
obj-$(CONFIG_SENSORS_SMSC47M192)+= smsc47m192.o
obj-$(CONFIG_SENSORS_SPARX5) += sparx5-temp.o
@@ -502,9 +502,9 @@ index 4fd2f92cd198..130a1c175dde 100644
--- a/drivers/leds/Makefile
+++ b/drivers/leds/Makefile
@@ -75,6 +75,7 @@
- obj-$(CONFIG_LEDS_PWM) += leds-pwm.o
obj-$(CONFIG_LEDS_REGULATOR) += leds-regulator.o
obj-$(CONFIG_LEDS_SC27XX_BLTC) += leds-sc27xx-bltc.o
+ obj-$(CONFIG_LEDS_SUN50I_A100) += leds-sun50i-a100.o
+obj-$(CONFIG_LEDS_STEAMDECK) += leds-steamdeck.o
obj-$(CONFIG_LEDS_SUNFIRE) += leds-sunfire.o
obj-$(CONFIG_LEDS_SYSCON) += leds-syscon.o
@@ -609,7 +609,7 @@ diff --git a/drivers/extcon/Kconfig b/drivers/extcon/Kconfig
index 290186e44e6b..4d444a9e2c1f 100644
--- a/drivers/extcon/Kconfig
+++ b/drivers/extcon/Kconfig
-@@ -202,4 +202,11 @@
+@@ -202,4 +202,12 @@
The DHC (Digital Home Hub) RTD series SoC contains a type c module.
This driver will detect the status of the type-c port.
@@ -620,12 +620,13 @@ index 290186e44e6b..4d444a9e2c1f 100644
+ Say Y here to enable support of USB Type C cable detection extcon
+ support on Steam Deck devices
+
++
endif
diff --git a/drivers/extcon/Makefile b/drivers/extcon/Makefile
index 1b390d934ca9..1c7e217f29e4 100644
--- a/drivers/extcon/Makefile
+++ b/drivers/extcon/Makefile
-@@ -26,3 +26,4 @@
+@@ -25,3 +25,4 @@ obj-$(CONFIG_EXTCON_SM5502) += extcon-sm5502.o
obj-$(CONFIG_EXTCON_USBC_CROS_EC) += extcon-usbc-cros-ec.o
obj-$(CONFIG_EXTCON_USBC_TUSB320) += extcon-usbc-tusb320.o
obj-$(CONFIG_EXTCON_RTK_TYPE_C) += extcon-rtk-type-c.o
@@ -975,1523 +976,5 @@ index 0e504b3c2796..a60fa7db9141 100644
NULL
};
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Vicki Pfau <vi@endrift.com>
-Date: Thu, 30 Jun 2022 18:42:10 -0700
-Subject: [PATCH 01/10] USB: gadget: f_hid: Add Get-Feature report
-
-While the HID gadget implementation has been sufficient for devices that only
-use INTERRUPT transfers, the USB HID standard includes provisions for Set- and
-Get-Feature report CONTROL transfers that go over endpoint 0. These were
-previously impossible with the existing implementation, and would either send
-an empty reply, or stall out.
-
-As the feature is a standard part of USB HID, it stands to reason that devices
-would use it, and that the HID gadget should support it. This patch adds
-support for (polled) device-to-host Get-Feature reports through a new ioctl
-interface to the hidg class dev nodes.
-
-Signed-off-by: Vicki Pfau <vi@endrift.com>
-(cherry picked from commit 8437fa3861c7198a3e286f393c8637c4fc08d2bc)
-Signed-off-by: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
----
- drivers/usb/gadget/function/f_hid.c | 121 ++++++++++++++++++++++++++--
- include/uapi/linux/usb/g_hid.h | 38 +++++++++
- include/uapi/linux/usb/gadgetfs.h | 2 +-
- 3 files changed, 154 insertions(+), 7 deletions(-)
- create mode 100644 include/uapi/linux/usb/g_hid.h
-
-diff --git a/drivers/usb/gadget/function/f_hid.c b/drivers/usb/gadget/function/f_hid.c
-index ea85e2c701a15..6fec92b5a0bd9 100644
---- a/drivers/usb/gadget/function/f_hid.c
-+++ b/drivers/usb/gadget/function/f_hid.c
-@@ -16,6 +16,7 @@
- #include <linux/wait.h>
- #include <linux/sched.h>
- #include <linux/usb/g_hid.h>
-+#include <uapi/linux/usb/g_hid.h>
-
- #include "u_f.h"
- #include "u_hid.h"
-@@ -75,6 +76,13 @@ struct f_hidg {
- wait_queue_head_t write_queue;
- struct usb_request *req;
-
-+ /* get report */
-+ struct usb_request *get_req;
-+ struct usb_hidg_report get_report;
-+ spinlock_t get_spinlock;
-+ bool get_pending;
-+ wait_queue_head_t get_queue;
-+
- struct device dev;
- struct cdev cdev;
- struct usb_function func;
-@@ -523,6 +531,64 @@ static ssize_t f_hidg_write(struct file *file, const char __user *buffer,
- return status;
- }
-
-+
-+static int f_hidg_get_report(struct file *file, struct usb_hidg_report __user *buffer)
-+{
-+ struct f_hidg *hidg = file->private_data;
-+ struct usb_composite_dev *cdev = hidg->func.config->cdev;
-+
-+ int status = 0;
-+ unsigned long flags;
-+
-+ spin_lock_irqsave(&hidg->get_spinlock, flags);
-+
-+#define GET_REPORT_COND (!hidg->get_pending)
-+
-+ while (!GET_REPORT_COND) {
-+ spin_unlock_irqrestore(&hidg->get_spinlock, flags);
-+
-+ if (file->f_flags & O_NONBLOCK)
-+ return -EAGAIN;
-+
-+ if (wait_event_interruptible_exclusive(hidg->get_queue,
-+ GET_REPORT_COND))
-+ return -ERESTARTSYS;
-+
-+ spin_lock_irqsave(&hidg->get_spinlock, flags);
-+ if (!hidg->get_pending) {
-+ spin_unlock_irqrestore(&hidg->get_spinlock, flags);
-+ return -EINVAL;
-+ }
-+ }
-+
-+ hidg->get_pending = true;
-+ spin_unlock_irqrestore(&hidg->get_spinlock, flags);
-+
-+ status = copy_from_user(&hidg->get_report, buffer,
-+ sizeof(struct usb_hidg_report));
-+ if (status != 0) {
-+ ERROR(cdev, "copy_from_user error\n");
-+ status = -EINVAL;
-+ }
-+
-+ spin_lock_irqsave(&hidg->get_spinlock, flags);
-+ hidg->get_pending = false;
-+ spin_unlock_irqrestore(&hidg->get_spinlock, flags);
-+
-+ wake_up(&hidg->get_queue);
-+ return status;
-+}
-+
-+static long f_hidg_ioctl(struct file *file, unsigned int code, unsigned long arg)
-+{
-+ switch (code) {
-+ case GADGET_HID_WRITE_GET_REPORT:
-+ return f_hidg_get_report(file, (struct usb_hidg_report __user *)arg);
-+ default:
-+ return -ENOTTY;
-+ }
-+}
-+
- static __poll_t f_hidg_poll(struct file *file, poll_table *wait)
- {
- struct f_hidg *hidg = file->private_data;
-@@ -548,6 +614,7 @@ static __poll_t f_hidg_poll(struct file *file, poll_table *wait)
- #undef WRITE_COND
- #undef READ_COND_SSREPORT
- #undef READ_COND_INTOUT
-+#undef GET_REPORT_COND
-
- static int f_hidg_release(struct inode *inode, struct file *fd)
- {
-@@ -640,6 +707,10 @@ static void hidg_ssreport_complete(struct usb_ep *ep, struct usb_request *req)
- wake_up(&hidg->read_queue);
- }
-
-+static void hidg_get_report_complete(struct usb_ep *ep, struct usb_request *req)
-+{
-+}
-+
- static int hidg_setup(struct usb_function *f,
- const struct usb_ctrlrequest *ctrl)
- {
-@@ -647,6 +718,8 @@ static int hidg_setup(struct usb_function *f,
- struct usb_composite_dev *cdev = f->config->cdev;
- struct usb_request *req = cdev->req;
- int status = 0;
-+ unsigned long flags;
-+ bool do_wake = false;
- __u16 value, length;
-
- value = __le16_to_cpu(ctrl->wValue);
-@@ -659,14 +732,29 @@ static int hidg_setup(struct usb_function *f,
- switch ((ctrl->bRequestType << 8) | ctrl->bRequest) {
- case ((USB_DIR_IN | USB_TYPE_CLASS | USB_RECIP_INTERFACE) << 8
- | HID_REQ_GET_REPORT):
-- VDBG(cdev, "get_report\n");
-+ VDBG(cdev, "get_report | wLength=%d\n", ctrl->wLength);
-
-- /* send an empty report */
-- length = min_t(unsigned, length, hidg->report_length);
-- memset(req->buf, 0x0, length);
-+ req = hidg->get_req;
-+ req->zero = 0;
-+ req->length = min_t(unsigned, length, hidg->report_length);
-+ status = usb_ep_queue(cdev->gadget->ep0, req, GFP_ATOMIC);
-+ if (status < 0) {
-+ ERROR(cdev, "usb_ep_queue error on get_report %d\n",
-+ status);
-
-- goto respond;
-- break;
-+ spin_lock_irqsave(&hidg->get_spinlock, flags);
-+ if (hidg->get_pending) {
-+ hidg->get_pending = false;
-+ do_wake = true;
-+ }
-+ spin_unlock_irqrestore(&hidg->get_spinlock, flags);
-+
-+ if (do_wake) {
-+ wake_up(&hidg->get_queue);
-+ }
-+ }
-+
-+ return status;
-
- case ((USB_DIR_IN | USB_TYPE_CLASS | USB_RECIP_INTERFACE) << 8
- | HID_REQ_GET_PROTOCOL):
-@@ -800,6 +888,14 @@ static void hidg_disable(struct usb_function *f)
-
- hidg->req = NULL;
- spin_unlock_irqrestore(&hidg->write_spinlock, flags);
-+
-+ spin_lock_irqsave(&hidg->get_spinlock, flags);
-+ if (!hidg->get_pending) {
-+ usb_ep_free_request(f->config->cdev->gadget->ep0, hidg->get_req);
-+ hidg->get_pending = true;
-+ }
-+ hidg->get_req = NULL;
-+ spin_unlock_irqrestore(&hidg->get_spinlock, flags);
- }
-
- static int hidg_set_alt(struct usb_function *f, unsigned intf, unsigned alt)
-@@ -908,6 +1004,7 @@ static const struct file_operations f_hidg_fops = {
- .write = f_hidg_write,
- .read = f_hidg_read,
- .poll = f_hidg_poll,
-+ .unlocked_ioctl = f_hidg_ioctl,
- .llseek = noop_llseek,
- };
-
-@@ -918,6 +1015,14 @@ static int hidg_bind(struct usb_configuration *c, struct usb_function *f)
- struct usb_string *us;
- int status;
-
-+ hidg->get_req = usb_ep_alloc_request(c->cdev->gadget->ep0, GFP_ATOMIC);
-+ if (!hidg->get_req)
-+ return -ENOMEM;
-+ hidg->get_req->buf = hidg->get_report.data;
-+ hidg->get_req->zero = 0;
-+ hidg->get_req->complete = hidg_get_report_complete;
-+ hidg->get_req->context = hidg;
-+
- /* maybe allocate device-global string IDs, and patch descriptors */
- us = usb_gstrings_attach(c->cdev, ct_func_strings,
- ARRAY_SIZE(ct_func_string_defs));
-@@ -1003,8 +1108,10 @@ static int hidg_bind(struct usb_configuration *c, struct usb_function *f)
- hidg->write_pending = 1;
- hidg->req = NULL;
- spin_lock_init(&hidg->read_spinlock);
-+ spin_lock_init(&hidg->get_spinlock);
- init_waitqueue_head(&hidg->write_queue);
- init_waitqueue_head(&hidg->read_queue);
-+ init_waitqueue_head(&hidg->get_queue);
- INIT_LIST_HEAD(&hidg->completed_out_req);
-
- /* create char device */
-@@ -1021,6 +1128,8 @@ static int hidg_bind(struct usb_configuration *c, struct usb_function *f)
- if (hidg->req != NULL)
- free_ep_req(hidg->in_ep, hidg->req);
-
-+ usb_ep_free_request(c->cdev->gadget->ep0, hidg->get_req);
-+
- return status;
- }
-
-diff --git a/include/uapi/linux/usb/g_hid.h b/include/uapi/linux/usb/g_hid.h
-new file mode 100644
-index 0000000000000..c6068b4863543
---- /dev/null
-+++ b/include/uapi/linux/usb/g_hid.h
-@@ -0,0 +1,38 @@
-+/* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
-+/*
-+ * g_hid.h -- Header file for USB HID gadget driver
-+ *
-+ * Copyright (C) 2022 Valve Software
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ */
-+
-+#ifndef __UAPI_LINUX_USB_G_HID_H
-+#define __UAPI_LINUX_USB_G_HID_H
-+
-+#include <linux/types.h>
-+
-+struct usb_hidg_report {
-+ __u16 length;
-+ __u8 data[512];
-+};
-+
-+/* The 'g' code is also used by gadgetfs and hid gadget ioctl requests.
-+ * Don't add any colliding codes to either driver, and keep
-+ * them in unique ranges (size 0x20 for now).
-+ */
-+#define GADGET_HID_WRITE_GET_REPORT _IOW('g', 0x42, struct usb_hidg_report)
-+
-+#endif /* __UAPI_LINUX_USB_G_HID_H */
-diff --git a/include/uapi/linux/usb/gadgetfs.h b/include/uapi/linux/usb/gadgetfs.h
-index 835473910a498..9754822b2a409 100644
---- a/include/uapi/linux/usb/gadgetfs.h
-+++ b/include/uapi/linux/usb/gadgetfs.h
-@@ -62,7 +62,7 @@ struct usb_gadgetfs_event {
- };
-
-
--/* The 'g' code is also used by printer gadget ioctl requests.
-+/* The 'g' code is also used by printer and hid gadget ioctl requests.
- * Don't add any colliding codes to either driver, and keep
- * them in unique ranges (size 0x20 for now).
- */
---
-2.41.0
-
-
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Vicki Pfau <vi@endrift.com>
-Date: Thu, 30 Jun 2022 18:43:10 -0700
-Subject: [PATCH 02/10] USB: gadget: f_hid: Add Set-Feature report
-
-While the HID gadget implementation has been sufficient for devices that only
-use INTERRUPT transfers, the USB HID standard includes provisions for Set- and
-Get-Feature report CONTROL transfers that go over endpoint 0. These were
-previously impossible with the existing implementation, and would either send
-an empty reply, or stall out.
-
-As the feature is a standard part of USB HID, it stands to reason that devices
-would use it, and that the HID gadget should support it. This patch adds
-support for host-to-device Set-Feature reports through a new ioctl
-interface to the hidg class dev nodes.
-
-Signed-off-by: Vicki Pfau <vi@endrift.com>
-(cherry picked from commit 3d82be0ec3aa3b947d9c927d7b06c433de15be8b)
-Signed-off-by: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
----
- drivers/usb/gadget/function/f_hid.c | 110 ++++++++++++++++++++++++++--
- include/uapi/linux/usb/g_hid.h | 24 +-----
- 2 files changed, 106 insertions(+), 28 deletions(-)
-
-diff --git a/drivers/usb/gadget/function/f_hid.c b/drivers/usb/gadget/function/f_hid.c
-index 6fec92b5a0bd9..172cba91aded1 100644
---- a/drivers/usb/gadget/function/f_hid.c
-+++ b/drivers/usb/gadget/function/f_hid.c
-@@ -76,6 +76,11 @@ struct f_hidg {
- wait_queue_head_t write_queue;
- struct usb_request *req;
-
-+ /* set report */
-+ struct list_head completed_set_req;
-+ spinlock_t set_spinlock;
-+ wait_queue_head_t set_queue;
-+
- /* get report */
- struct usb_request *get_req;
- struct usb_hidg_report get_report;
-@@ -531,6 +536,54 @@ static ssize_t f_hidg_write(struct file *file, const char __user *buffer,
- return status;
- }
-
-+static int f_hidg_set_report(struct file *file, struct usb_hidg_report __user *buffer)
-+{
-+ struct f_hidg *hidg = file->private_data;
-+ struct f_hidg_req_list *list;
-+ struct usb_request *req;
-+ unsigned long flags;
-+ unsigned short length;
-+ int status;
-+
-+ spin_lock_irqsave(&hidg->set_spinlock, flags);
-+
-+#define SET_REPORT_COND (!list_empty(&hidg->completed_set_req))
-+
-+ /* wait for at least one buffer to complete */
-+ while (!SET_REPORT_COND) {
-+ spin_unlock_irqrestore(&hidg->set_spinlock, flags);
-+ if (file->f_flags & O_NONBLOCK)
-+ return -EAGAIN;
-+
-+ if (wait_event_interruptible(hidg->set_queue, SET_REPORT_COND))
-+ return -ERESTARTSYS;
-+
-+ spin_lock_irqsave(&hidg->set_spinlock, flags);
-+ }
-+
-+ /* pick the first one */
-+ list = list_first_entry(&hidg->completed_set_req,
-+ struct f_hidg_req_list, list);
-+
-+ /*
-+ * Remove this from list to protect it from being free()
-+ * while host disables our function
-+ */
-+ list_del(&list->list);
-+
-+ req = list->req;
-+ spin_unlock_irqrestore(&hidg->set_spinlock, flags);
-+
-+ /* copy to user outside spinlock */
-+ length = min_t(unsigned short, sizeof(buffer->data), req->actual);
-+ status = copy_to_user(&buffer->length, &length, sizeof(buffer->length));
-+ if (!status) {
-+ status = copy_to_user(&buffer->data, req->buf, length);
-+ }
-+ kfree(list);
-+ free_ep_req(hidg->func.config->cdev->gadget->ep0, req);
-+ return status;
-+}
-
- static int f_hidg_get_report(struct file *file, struct usb_hidg_report __user *buffer)
- {
-@@ -582,6 +635,8 @@ static int f_hidg_get_report(struct file *file, struct usb_hidg_report __user *b
- static long f_hidg_ioctl(struct file *file, unsigned int code, unsigned long arg)
- {
- switch (code) {
-+ case GADGET_HID_READ_SET_REPORT:
-+ return f_hidg_set_report(file, (struct usb_hidg_report __user *)arg);
- case GADGET_HID_WRITE_GET_REPORT:
- return f_hidg_get_report(file, (struct usb_hidg_report __user *)arg);
- default:
-@@ -596,6 +651,7 @@ static __poll_t f_hidg_poll(struct file *file, poll_table *wait)
-
- poll_wait(file, &hidg->read_queue, wait);
- poll_wait(file, &hidg->write_queue, wait);
-+ poll_wait(file, &hidg->set_queue, wait);
-
- if (WRITE_COND)
- ret |= EPOLLOUT | EPOLLWRNORM;
-@@ -608,12 +664,16 @@ static __poll_t f_hidg_poll(struct file *file, poll_table *wait)
- ret |= EPOLLIN | EPOLLRDNORM;
- }
-
-+ if (SET_REPORT_COND)
-+ ret |= EPOLLPRI;
-+
- return ret;
- }
-
- #undef WRITE_COND
- #undef READ_COND_SSREPORT
- #undef READ_COND_INTOUT
-+#undef SET_REPORT_COND
- #undef GET_REPORT_COND
-
- static int f_hidg_release(struct inode *inode, struct file *fd)
-@@ -658,11 +718,19 @@ static void hidg_intout_complete(struct usb_ep *ep, struct usb_request *req)
-
- req_list->req = req;
-
-- spin_lock_irqsave(&hidg->read_spinlock, flags);
-- list_add_tail(&req_list->list, &hidg->completed_out_req);
-- spin_unlock_irqrestore(&hidg->read_spinlock, flags);
-+ if (ep == cdev->gadget->ep0) {
-+ spin_lock_irqsave(&hidg->set_spinlock, flags);
-+ list_add_tail(&req_list->list, &hidg->completed_set_req);
-+ spin_unlock_irqrestore(&hidg->set_spinlock, flags);
-
-- wake_up(&hidg->read_queue);
-+ wake_up(&hidg->set_queue);
-+ } else {
-+ spin_lock_irqsave(&hidg->read_spinlock, flags);
-+ list_add_tail(&req_list->list, &hidg->completed_out_req);
-+ spin_unlock_irqrestore(&hidg->read_spinlock, flags);
-+
-+ wake_up(&hidg->read_queue);
-+ }
- break;
- default:
- ERROR(cdev, "Set report failed %d\n", req->status);
-@@ -775,12 +843,27 @@ static int hidg_setup(struct usb_function *f,
- case ((USB_DIR_OUT | USB_TYPE_CLASS | USB_RECIP_INTERFACE) << 8
- | HID_REQ_SET_REPORT):
- VDBG(cdev, "set_report | wLength=%d\n", ctrl->wLength);
-- if (hidg->use_out_ep)
-+ if (!hidg->use_out_ep) {
-+ req->complete = hidg_ssreport_complete;
-+ req->context = hidg;
-+ goto respond;
-+ }
-+ if (!length)
- goto stall;
-- req->complete = hidg_ssreport_complete;
-+ req = alloc_ep_req(cdev->gadget->ep0, GFP_ATOMIC);
-+ if (!req)
-+ return -ENOMEM;
-+ req->complete = hidg_intout_complete;
- req->context = hidg;
-- goto respond;
-- break;
-+ req->zero = 0;
-+ req->length = length;
-+ status = usb_ep_queue(cdev->gadget->ep0, req, GFP_ATOMIC);
-+ if (status < 0) {
-+ ERROR(cdev, "usb_ep_queue error on set_report %d\n", status);
-+ free_ep_req(cdev->gadget->ep0, req);
-+ }
-+
-+ return status;
-
- case ((USB_DIR_OUT | USB_TYPE_CLASS | USB_RECIP_INTERFACE) << 8
- | HID_REQ_SET_PROTOCOL):
-@@ -880,6 +963,14 @@ static void hidg_disable(struct usb_function *f)
- spin_unlock_irqrestore(&hidg->read_spinlock, flags);
- }
-
-+ spin_lock_irqsave(&hidg->set_spinlock, flags);
-+ list_for_each_entry_safe(list, next, &hidg->completed_set_req, list) {
-+ free_ep_req(f->config->cdev->gadget->ep0, list->req);
-+ list_del(&list->list);
-+ kfree(list);
-+ }
-+ spin_unlock_irqrestore(&hidg->set_spinlock, flags);
-+
- spin_lock_irqsave(&hidg->write_spinlock, flags);
- if (!hidg->write_pending) {
- free_ep_req(hidg->in_ep, hidg->req);
-@@ -1108,11 +1199,14 @@ static int hidg_bind(struct usb_configuration *c, struct usb_function *f)
- hidg->write_pending = 1;
- hidg->req = NULL;
- spin_lock_init(&hidg->read_spinlock);
-+ spin_lock_init(&hidg->set_spinlock);
- spin_lock_init(&hidg->get_spinlock);
- init_waitqueue_head(&hidg->write_queue);
- init_waitqueue_head(&hidg->read_queue);
-+ init_waitqueue_head(&hidg->set_queue);
- init_waitqueue_head(&hidg->get_queue);
- INIT_LIST_HEAD(&hidg->completed_out_req);
-+ INIT_LIST_HEAD(&hidg->completed_set_req);
-
- /* create char device */
- cdev_init(&hidg->cdev, &f_hidg_fops);
-diff --git a/include/uapi/linux/usb/g_hid.h b/include/uapi/linux/usb/g_hid.h
-index c6068b4863543..54814c2c68d60 100644
---- a/include/uapi/linux/usb/g_hid.h
-+++ b/include/uapi/linux/usb/g_hid.h
-@@ -1,38 +1,22 @@
- /* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
--/*
-- * g_hid.h -- Header file for USB HID gadget driver
-- *
-- * Copyright (C) 2022 Valve Software
-- *
-- * This program is free software; you can redistribute it and/or modify
-- * it under the terms of the GNU General Public License as published by
-- * the Free Software Foundation; either version 2 of the License, or
-- * (at your option) any later version.
-- *
-- * This program is distributed in the hope that it will be useful,
-- * but WITHOUT ANY WARRANTY; without even the implied warranty of
-- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-- * GNU General Public License for more details.
-- *
-- * You should have received a copy of the GNU General Public License
-- * along with this program; if not, write to the Free Software
-- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-- */
-
- #ifndef __UAPI_LINUX_USB_G_HID_H
- #define __UAPI_LINUX_USB_G_HID_H
-
- #include <linux/types.h>
-
-+#define HIDG_REPORT_SIZE_MAX 64
-+
- struct usb_hidg_report {
- __u16 length;
-- __u8 data[512];
-+ __u8 data[HIDG_REPORT_SIZE_MAX];
- };
-
- /* The 'g' code is also used by gadgetfs and hid gadget ioctl requests.
- * Don't add any colliding codes to either driver, and keep
- * them in unique ranges (size 0x20 for now).
- */
-+#define GADGET_HID_READ_SET_REPORT _IOR('g', 0x41, struct usb_hidg_report)
- #define GADGET_HID_WRITE_GET_REPORT _IOW('g', 0x42, struct usb_hidg_report)
-
- #endif /* __UAPI_LINUX_USB_G_HID_H */
---
-2.41.0
-
-
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Vicki Pfau <vi@endrift.com>
-Date: Tue, 29 Nov 2022 18:32:58 -0800
-Subject: [PATCH 03/10] HID: hid-steam: Update list of identifiers from SDL
-
-SDL includes a list of settings (registers), reports (cmds), and various other
-identifiers that were provided by Valve. This commit imports a significant
-chunk of that list as well as updating the guessed names and replacing a
-handful of magic constants. It also replaces bitmask definitions that used hex
-with the BIT macro.
-
-Signed-off-by: Vicki Pfau <vi@endrift.com>
----
- drivers/hid/hid-steam.c | 156 +++++++++++++++++++++++++++++++---------
- 1 file changed, 121 insertions(+), 35 deletions(-)
-
-diff --git a/drivers/hid/hid-steam.c b/drivers/hid/hid-steam.c
-index b110818fc9458..39a9bf3b7f77d 100644
---- a/drivers/hid/hid-steam.c
-+++ b/drivers/hid/hid-steam.c
-@@ -71,7 +71,7 @@ static LIST_HEAD(steam_devices);
-
- /*
- * Commands that can be sent in a feature report.
-- * Thanks to Valve for some valuable hints.
-+ * Thanks to Valve and SDL for some valuable hints.
- */
- #define STEAM_CMD_SET_MAPPINGS 0x80
- #define STEAM_CMD_CLEAR_MAPPINGS 0x81
-@@ -80,27 +80,98 @@ static LIST_HEAD(steam_devices);
- #define STEAM_CMD_GET_ATTRIB_LABEL 0x84
- #define STEAM_CMD_DEFAULT_MAPPINGS 0x85
- #define STEAM_CMD_FACTORY_RESET 0x86
--#define STEAM_CMD_WRITE_REGISTER 0x87
-+#define STEAM_CMD_SET_REGISTER 0x87
- #define STEAM_CMD_CLEAR_REGISTER 0x88
--#define STEAM_CMD_READ_REGISTER 0x89
-+#define STEAM_CMD_GET_REGISTER 0x89
- #define STEAM_CMD_GET_REGISTER_LABEL 0x8a
- #define STEAM_CMD_GET_REGISTER_MAX 0x8b
- #define STEAM_CMD_GET_REGISTER_DEFAULT 0x8c
- #define STEAM_CMD_SET_MODE 0x8d
--#define STEAM_CMD_DEFAULT_MOUSE 0x8e
--#define STEAM_CMD_FORCEFEEDBAK 0x8f
--#define STEAM_CMD_REQUEST_COMM_STATUS 0xb4
--#define STEAM_CMD_GET_SERIAL 0xae
-+#define STEAM_CMD_DEFAULT_REGISTER 0x8e
-+#define STEAM_CMD_HAPTIC_PULSE 0x8f
-+#define STEAM_CMD_TURN_OFF_CONTROLLER 0x9f
-+#define STEAM_CMD_GET_DEVICE_IFNO 0xa1
-+#define STEAM_CMD_CALIBRATE_TRACKPADS 0xa7
-+#define STEAM_CMD_SET_SERIAL 0xa9
-+#define STEAM_CMD_GET_TRACKPAD_CALIB 0xaa
-+#define STEAM_CMD_GET_TRACKPAD_FACTORY_CALIB 0xab
-+#define STEAM_CMD_GET_TRACKPAD_RAW_DATA 0xac
-+#define STEAM_CMD_ENABLE_PAIRING 0xad
-+#define STEAM_CMD_GET_STRING_ATTRIB 0xae
-+#define STEAM_CMD_RADIO_ERASE_RECORDS 0xaf
-+#define STEAM_CMD_RADIO_WRITE_RECORD 0xb0
-+#define STEAM_CMD_SET_DONGLE_SETTING 0xb1
-+#define STEAM_CMD_DONGLE_DISCONNECT_DEV 0xb2
-+#define STEAM_CMD_DONGLE_COMMIT_DEV 0xb3
-+#define STEAM_CMD_DONGLE_GET_STATE 0xb4
-+#define STEAM_CMD_CALIBRATE_GYRO 0xb5
-+#define STEAM_CMD_PLAY_AUDIO 0xb6
-+#define STEAM_CMD_AUDIO_UPDATE_START 0xb7
-+#define STEAM_CMD_AUDIO_UPDATE_DATA 0xb8
-+#define STEAM_CMD_AUDIO_UPDATE_COMPLETE 0xb9
-+#define STEAM_CMD_GET_CHIPID 0xba
-+#define STEAM_CMD_CALIBRATE_JOYSTICK 0xbf
-+#define STEAM_CMD_CALIBRATE_TRIGGERS 0xc0
-+#define STEAM_CMD_SET_AUDIO_MAPPING 0xc1
-+#define STEAM_CMD_CHECK_GYRO_FW_LOAD 0xc2
-+#define STEAM_CMD_CALIBRATE_ANALOG 0xc3
-+#define STEAM_CMD_DONGLE_GET_CONN_SLOTS 0xc4
-+#define STEAM_CMD_HAPTIC_CMD 0xea
- #define STEAM_CMD_HAPTIC_RUMBLE 0xeb
-
- /* Some useful register ids */
--#define STEAM_REG_LPAD_MODE 0x07
--#define STEAM_REG_RPAD_MODE 0x08
--#define STEAM_REG_RPAD_MARGIN 0x18
--#define STEAM_REG_LED 0x2d
--#define STEAM_REG_GYRO_MODE 0x30
--#define STEAM_REG_LPAD_CLICK_PRESSURE 0x34
--#define STEAM_REG_RPAD_CLICK_PRESSURE 0x35
-+#define STEAM_REG_MOUSE_SENSITIVITY 0x00
-+#define STEAM_REG_MOUSE_ACCELERATION 0x01
-+#define STEAM_REG_TRACKBALL_ROTATION_ANGLE 0x02
-+#define STEAM_REG_HAPTIC_INTENSITY 0x03
-+#define STEAM_REG_LEFT_GAMEPAD_STICK_ENABLED 0x04
-+#define STEAM_REG_RIGHT_GAMEPAD_STICK_ENABLED 0x05
-+#define STEAM_REG_USB_DEBUG_MODE 0x06
-+#define STEAM_REG_LEFT_TRACKPAD_MODE 0x07
-+#define STEAM_REG_RIGHT_TRACKPAD_MODE 0x08
-+#define STEAM_REG_MOUSE_POINTER_ENABLED 0x09
-+#define STEAM_REG_DPAD_DEADZONE 0x0a
-+#define STEAM_REG_MINIMUM_MOMENTUM_VEL 0x0b
-+#define STEAM_REG_MOMENTUM_DECAY_AMOUNT 0x0c
-+#define STEAM_REG_PAD_REL_MODE_TICKS_PER_PIXEL 0x0d
-+#define STEAM_REG_HAPTIC_INCREMENT 0x0e
-+#define STEAM_REG_DPAD_ANGLE_SIN 0x0f
-+#define STEAM_REG_DPAD_ANGLE_COS 0x10
-+#define STEAM_REG_MOMENTUM_VERTICAL_DIVISOR 0x11
-+#define STEAM_REG_MOMENTUM_MAXIMUM_VELOCITY 0x12
-+#define STEAM_REG_TRACKPAD_Z_ON 0x13
-+#define STEAM_REG_TRACKPAD_Z_OFF 0x14
-+#define STEAM_REG_SENSITIVY_SCALE_AMOUNT 0x15
-+#define STEAM_REG_LEFT_TRACKPAD_SECONDARY_MODE 0x16
-+#define STEAM_REG_RIGHT_TRACKPAD_SECONDARY_MODE 0x17
-+#define STEAM_REG_SMOOTH_ABSOLUTE_MOUSE 0x18
-+#define STEAM_REG_STEAMBUTTON_POWEROFF_TIME 0x19
-+#define STEAM_REG_TRACKPAD_OUTER_RADIUS 0x1b
-+#define STEAM_REG_TRACKPAD_Z_ON_LEFT 0x1c
-+#define STEAM_REG_TRACKPAD_Z_OFF_LEFT 0x1d
-+#define STEAM_REG_TRACKPAD_OUTER_SPIN_VEL 0x1e
-+#define STEAM_REG_TRACKPAD_OUTER_SPIN_RADIUS 0x1f
-+#define STEAM_REG_TRACKPAD_OUTER_SPIN_HORIZONTAL_ONLY 0x20
-+#define STEAM_REG_TRACKPAD_RELATIVE_MODE_DEADZONE 0x21
-+#define STEAM_REG_TRACKPAD_RELATIVE_MODE_MAX_VEL 0x22
-+#define STEAM_REG_TRACKPAD_RELATIVE_MODE_INVERT_Y 0x23
-+#define STEAM_REG_TRACKPAD_DOUBLE_TAP_BEEP_ENABLED 0x24
-+#define STEAM_REG_TRACKPAD_DOUBLE_TAP_BEEP_PERIOD 0x25
-+#define STEAM_REG_TRACKPAD_DOUBLE_TAP_BEEP_COUNT 0x26
-+#define STEAM_REG_TRACKPAD_OUTER_RADIUS_RELEASE_ON_TRANSITION 0x27
-+#define STEAM_REG_RADIAL_MODE_ANGLE 0x28
-+#define STEAM_REG_HAPTIC_INTENSITY_MOUSE_MODE 0x29
-+#define STEAM_REG_LEFT_DPAD_REQUIRES_CLICK 0x2a
-+#define STEAM_REG_RIGHT_DPAD_REQUIRES_CLICK 0x2b
-+#define STEAM_REG_LED_BASELINE_BRIGHTNESS 0x2c
-+#define STEAM_REG_LED_USER_BRIGHTNESS 0x2d
-+#define STEAM_REG_ENABLE_RAW_JOYSTICK 0x2e
-+#define STEAM_REG_ENABLE_FAST_SCAN 0x2f
-+#define STEAM_REG_GYRO_MODE 0x30
-+#define STEAM_REG_WIRELESS_PACKET_VERSION 0x31
-+#define STEAM_REG_SLEEP_INACTIVITY_TIMEOUT 0x32
-+#define STEAM_REG_LEFT_TRACKPAD_CLICK_PRESSURE 0x34
-+#define STEAM_REG_RIGHT_TRACKPAD_CLICK_PRESSURE 0x35
-
- /* Raw event identifiers */
- #define STEAM_EV_INPUT_DATA 0x01
-@@ -108,13 +179,28 @@ static LIST_HEAD(steam_devices);
- #define STEAM_EV_BATTERY 0x04
- #define STEAM_EV_DECK_INPUT_DATA 0x09
-
-+/* String attribute idenitifiers */
-+#define STEAM_ATTRIB_STR_BOARD_SERIAL 0x00
-+#define STEAM_ATTRIB_STR_UNIT_SERIAL 0x01
-+
- /* Values for GYRO_MODE (bitmask) */
--#define STEAM_GYRO_MODE_OFF 0x0000
--#define STEAM_GYRO_MODE_STEERING 0x0001
--#define STEAM_GYRO_MODE_TILT 0x0002
--#define STEAM_GYRO_MODE_SEND_ORIENTATION 0x0004
--#define STEAM_GYRO_MODE_SEND_RAW_ACCEL 0x0008
--#define STEAM_GYRO_MODE_SEND_RAW_GYRO 0x0010
-+#define STEAM_GYRO_MODE_OFF 0
-+#define STEAM_GYRO_MODE_STEERING BIT(0)
-+#define STEAM_GYRO_MODE_TILT BIT(1)
-+#define STEAM_GYRO_MODE_SEND_ORIENTATION BIT(2)
-+#define STEAM_GYRO_MODE_SEND_RAW_ACCEL BIT(3)
-+#define STEAM_GYRO_MODE_SEND_RAW_GYRO BIT(4)
-+
-+/* Trackpad modes */
-+#define STEAM_TRACKPAD_ABSOLUTE_MOUSE 0x00
-+#define STEAM_TRACKPAD_RELATIVE_MOUSE 0x01
-+#define STEAM_TRACKPAD_DPAD_FOUR_WAY_DISCRETE 0x02
-+#define STEAM_TRACKPAD_DPAD_FOUR_WAY_OVERLAP 0x03
-+#define STEAM_TRACKPAD_DPAD_EIGHT_WAY 0x04
-+#define STEAM_TRACKPAD_RADIAL_MODE 0x05
-+#define STEAM_TRACKPAD_ABSOLUTE_DPAD 0x06
-+#define STEAM_TRACKPAD_NONE 0x07
-+#define STEAM_TRACKPAD_GESTURE_KEYBOARD 0x08
-
- /* Other random constants */
- #define STEAM_SERIAL_LEN 10
-@@ -232,7 +318,7 @@ static int steam_write_registers(struct steam_device *steam,
- /* Send: 0x87 len (reg valLo valHi)* */
- u8 reg;
- u16 val;
-- u8 cmd[64] = {STEAM_CMD_WRITE_REGISTER, 0x00};
-+ u8 cmd[64] = {STEAM_CMD_SET_REGISTER, 0x00};
- int ret;
- va_list args;
-
-@@ -268,7 +354,7 @@ static int steam_get_serial(struct steam_device *steam)
- * Recv: 0xae 0x15 0x01 serialnumber (10 chars)
- */
- int ret;
-- u8 cmd[] = {STEAM_CMD_GET_SERIAL, 0x15, 0x01};
-+ u8 cmd[] = {STEAM_CMD_GET_STRING_ATTRIB, 0x15, STEAM_ATTRIB_STR_UNIT_SERIAL};
- u8 reply[3 + STEAM_SERIAL_LEN + 1];
-
- ret = steam_send_report(steam, cmd, sizeof(cmd));
-@@ -277,7 +363,7 @@ static int steam_get_serial(struct steam_device *steam)
- ret = steam_recv_report(steam, reply, sizeof(reply));
- if (ret < 0)
- return ret;
-- if (reply[0] != 0xae || reply[1] != 0x15 || reply[2] != 0x01)
-+ if (reply[0] != 0xae || reply[1] != 0x15 || reply[2] != STEAM_ATTRIB_STR_UNIT_SERIAL)
- return -EIO;
- reply[3 + STEAM_SERIAL_LEN] = 0;
- strscpy(steam->serial_no, reply + 3, sizeof(steam->serial_no));
-@@ -291,7 +377,7 @@ static int steam_get_serial(struct steam_device *steam)
- */
- static inline int steam_request_conn_status(struct steam_device *steam)
- {
-- return steam_send_report_byte(steam, STEAM_CMD_REQUEST_COMM_STATUS);
-+ return steam_send_report_byte(steam, STEAM_CMD_DONGLE_GET_STATE);
- }
-
- static inline int steam_haptic_rumble(struct steam_device *steam,
-@@ -339,9 +425,9 @@ static void steam_set_lizard_mode(struct steam_device *steam, bool enable)
- /* enable esc, enter, cursors */
- steam_send_report_byte(steam, STEAM_CMD_DEFAULT_MAPPINGS);
- /* enable mouse */
-- steam_send_report_byte(steam, STEAM_CMD_DEFAULT_MOUSE);
-+ steam_send_report_byte(steam, STEAM_CMD_DEFAULT_REGISTER);
- steam_write_registers(steam,
-- STEAM_REG_RPAD_MARGIN, 0x01, /* enable margin */
-+ STEAM_REG_SMOOTH_ABSOLUTE_MOUSE, 0x01, /* enable smooth */
- 0);
-
- cancel_delayed_work_sync(&steam->heartbeat);
-@@ -351,11 +437,11 @@ static void steam_set_lizard_mode(struct steam_device *steam, bool enable)
-
- if (steam->quirks & STEAM_QUIRK_DECK) {
- steam_write_registers(steam,
-- STEAM_REG_RPAD_MARGIN, 0x00, /* disable margin */
-- STEAM_REG_LPAD_MODE, 0x07, /* disable mouse */
-- STEAM_REG_RPAD_MODE, 0x07, /* disable mouse */
-- STEAM_REG_LPAD_CLICK_PRESSURE, 0xFFFF, /* disable clicky pad */
-- STEAM_REG_RPAD_CLICK_PRESSURE, 0xFFFF, /* disable clicky pad */
-+ STEAM_REG_SMOOTH_ABSOLUTE_MOUSE, 0x00, /* disable smooth */
-+ STEAM_REG_LEFT_TRACKPAD_MODE, STEAM_TRACKPAD_NONE, /* disable mouse */
-+ STEAM_REG_RIGHT_TRACKPAD_MODE, STEAM_TRACKPAD_NONE, /* disable mouse */
-+ STEAM_REG_LEFT_TRACKPAD_CLICK_PRESSURE, 0xFFFF, /* disable clicky pad */
-+ STEAM_REG_RIGHT_TRACKPAD_CLICK_PRESSURE, 0xFFFF, /* disable clicky pad */
- 0);
- /*
- * The Steam Deck has a watchdog that automatically enables
-@@ -365,9 +451,9 @@ static void steam_set_lizard_mode(struct steam_device *steam, bool enable)
- schedule_delayed_work(&steam->heartbeat, 5 * HZ);
- } else {
- steam_write_registers(steam,
-- STEAM_REG_RPAD_MARGIN, 0x00, /* disable margin */
-- STEAM_REG_LPAD_MODE, 0x07, /* disable mouse */
-- STEAM_REG_RPAD_MODE, 0x07, /* disable mouse */
-+ STEAM_REG_SMOOTH_ABSOLUTE_MOUSE, 0x00, /* disable smooth */
-+ STEAM_REG_LEFT_TRACKPAD_MODE, STEAM_TRACKPAD_NONE, /* disable mouse */
-+ STEAM_REG_RIGHT_TRACKPAD_MODE, STEAM_TRACKPAD_NONE, /* disable mouse */
- 0);
- }
- }
-@@ -747,7 +833,7 @@ static void steam_lizard_mode_heartbeat(struct work_struct *work)
- if (!steam->client_opened && steam->client_hdev) {
- steam_send_report_byte(steam, STEAM_CMD_CLEAR_MAPPINGS);
- steam_write_registers(steam,
-- STEAM_REG_RPAD_MODE, 0x07, /* disable mouse */
-+ STEAM_REG_RIGHT_TRACKPAD_MODE, STEAM_TRACKPAD_NONE, /* disable mouse */
- 0);
- schedule_delayed_work(&steam->heartbeat, 5 * HZ);
- }
---
-2.41.0
-
-
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Vicki Pfau <vi@endrift.com>
-Date: Wed, 16 Nov 2022 19:54:26 -0800
-Subject: [PATCH 04/10] HID: hid-steam: Add gamepad-only mode switched to by
- holding options
-
-Signed-off-by: Vicki Pfau <vi@endrift.com>
----
- drivers/hid/hid-steam.c | 72 +++++++++++++++++++++++++++++++++++++++++
- 1 file changed, 72 insertions(+)
-
-diff --git a/drivers/hid/hid-steam.c b/drivers/hid/hid-steam.c
-index 39a9bf3b7f77d..0620046b142ef 100644
---- a/drivers/hid/hid-steam.c
-+++ b/drivers/hid/hid-steam.c
-@@ -202,6 +202,11 @@ static LIST_HEAD(steam_devices);
- #define STEAM_TRACKPAD_NONE 0x07
- #define STEAM_TRACKPAD_GESTURE_KEYBOARD 0x08
-
-+/* Pad identifiers for the deck */
-+#define STEAM_PAD_LEFT 0
-+#define STEAM_PAD_RIGHT 1
-+#define STEAM_PAD_BOTH 2
-+
- /* Other random constants */
- #define STEAM_SERIAL_LEN 10
-
-@@ -221,6 +226,9 @@ struct steam_device {
- u8 battery_charge;
- u16 voltage;
- struct delayed_work heartbeat;
-+ struct delayed_work mode_switch;
-+ bool did_mode_switch;
-+ bool gamepad_mode;
- struct work_struct rumble_work;
- u16 rumble_left;
- u16 rumble_right;
-@@ -380,6 +388,33 @@ static inline int steam_request_conn_status(struct steam_device *steam)
- return steam_send_report_byte(steam, STEAM_CMD_DONGLE_GET_STATE);
- }
-
-+/*
-+ * Send a haptic pulse to the trackpads
-+ * Duration and interval are measured in microseconds, count is the number
-+ * of pulses to send for duration time with interval microseconds between them
-+ * and gain is measured in decibels, ranging from -24 to +6
-+ */
-+static inline int steam_haptic_pulse(struct steam_device *steam, u8 pad,
-+ u16 duration, u16 interval, u16 count, u8 gain)
-+{
-+ u8 report[10] = {STEAM_CMD_HAPTIC_PULSE, 8};
-+
-+ /* Left and right are swapped on this report for legacy reasons */
-+ if (pad < STEAM_PAD_BOTH)
-+ pad ^= 1;
-+
-+ report[2] = pad;
-+ report[3] = duration & 0xFF;
-+ report[4] = duration >> 8;
-+ report[5] = interval & 0xFF;
-+ report[6] = interval >> 8;
-+ report[7] = count & 0xFF;
-+ report[8] = count >> 8;
-+ report[9] = gain;
-+
-+ return steam_send_report(steam, report, sizeof(report));
-+}
-+
- static inline int steam_haptic_rumble(struct steam_device *steam,
- u16 intensity, u16 left_speed, u16 right_speed,
- u8 left_gain, u8 right_gain)
-@@ -421,6 +456,9 @@ static int steam_play_effect(struct input_dev *dev, void *data,
-
- static void steam_set_lizard_mode(struct steam_device *steam, bool enable)
- {
-+ if (steam->gamepad_mode)
-+ enable = false;
-+
- if (enable) {
- /* enable esc, enter, cursors */
- steam_send_report_byte(steam, STEAM_CMD_DEFAULT_MAPPINGS);
-@@ -805,6 +843,29 @@ static void steam_work_connect_cb(struct work_struct *work)
- }
- }
-
-+static void steam_mode_switch_cb(struct work_struct *work)
-+{
-+ struct steam_device *steam = container_of(to_delayed_work(work),
-+ struct steam_device, mode_switch);
-+ steam->gamepad_mode = !steam->gamepad_mode;
-+ if (!lizard_mode)
-+ return;
-+
-+ mutex_lock(&steam->mutex);
-+ if (steam->gamepad_mode)
-+ steam_set_lizard_mode(steam, false);
-+ else if (!steam->client_opened)
-+ steam_set_lizard_mode(steam, lizard_mode);
-+ mutex_unlock(&steam->mutex);
-+
-+ steam_haptic_pulse(steam, STEAM_PAD_RIGHT, 0x190, 0, 1, 0);
-+ if (steam->gamepad_mode) {
-+ steam_haptic_pulse(steam, STEAM_PAD_LEFT, 0x14D, 0x14D, 0x2D, 0);
-+ } else {
-+ steam_haptic_pulse(steam, STEAM_PAD_LEFT, 0x1F4, 0x1F4, 0x1E, 0);
-+ }
-+}
-+
- static bool steam_is_valve_interface(struct hid_device *hdev)
- {
- struct hid_report_enum *rep_enum;
-@@ -977,6 +1038,7 @@ static int steam_probe(struct hid_device *hdev,
- mutex_init(&steam->mutex);
- steam->quirks = id->driver_data;
- INIT_WORK(&steam->work_connect, steam_work_connect_cb);
-+ INIT_DELAYED_WORK(&steam->mode_switch, steam_mode_switch_cb);
- INIT_LIST_HEAD(&steam->list);
- INIT_DEFERRABLE_WORK(&steam->heartbeat, steam_lizard_mode_heartbeat);
- INIT_WORK(&steam->rumble_work, steam_haptic_rumble_cb);
-@@ -1036,6 +1098,7 @@ static int steam_probe(struct hid_device *hdev,
- client_hdev_fail:
- cancel_work_sync(&steam->work_connect);
- cancel_delayed_work_sync(&steam->heartbeat);
-+ cancel_delayed_work_sync(&steam->mode_switch);
- cancel_work_sync(&steam->rumble_work);
- steam_alloc_fail:
- hid_err(hdev, "%s: failed with error %d\n",
-@@ -1059,6 +1122,7 @@ static void steam_remove(struct hid_device *hdev)
- cancel_delayed_work_sync(&steam->heartbeat);
- mutex_unlock(&steam->mutex);
- cancel_work_sync(&steam->work_connect);
-+ cancel_delayed_work_sync(&steam->mode_switch);
- if (steam->quirks & STEAM_QUIRK_WIRELESS) {
- hid_info(hdev, "Steam wireless receiver disconnected");
- }
-@@ -1393,6 +1457,14 @@ static void steam_do_deck_input_event(struct steam_device *steam,
- input_event(input, EV_KEY, BTN_BASE, !!(b14 & BIT(2)));
-
- input_sync(input);
-+
-+ if (!(b9 & BIT(6)) && steam->did_mode_switch) {
-+ steam->did_mode_switch = false;
-+ cancel_delayed_work_sync(&steam->mode_switch);
-+ } else if (!steam->client_opened && (b9 & BIT(6)) && !steam->did_mode_switch) {
-+ steam->did_mode_switch = true;
-+ schedule_delayed_work(&steam->mode_switch, 45 * HZ / 100);
-+ }
- }
-
- /*
---
-2.41.0
-
-
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Vicki Pfau <vi@endrift.com>
-Date: Mon, 8 May 2023 20:24:56 -0700
-Subject: [PATCH 05/10] HID: hid-steam: Clean up locking
-
-This cleans up the locking logic so that the spinlock is consistently used for
-access to a small handful of struct variables, and the mutex is exclusively and
-consistently used for ensuring that mutliple threads aren't trying to
-send/receive reports at the same time. Previously, only some report
-transactions were guarded by this mutex, potentially breaking atomicity. The
-mutex has been renamed to reflect this usage.
-
-Signed-off-by: Vicki Pfau <vi@endrift.com>
----
- drivers/hid/hid-steam.c | 148 ++++++++++++++++++++++++----------------
- 1 file changed, 90 insertions(+), 58 deletions(-)
-
-diff --git a/drivers/hid/hid-steam.c b/drivers/hid/hid-steam.c
-index 0620046b142ef..845ca71b8bd3a 100644
---- a/drivers/hid/hid-steam.c
-+++ b/drivers/hid/hid-steam.c
-@@ -214,7 +214,7 @@ struct steam_device {
- struct list_head list;
- spinlock_t lock;
- struct hid_device *hdev, *client_hdev;
-- struct mutex mutex;
-+ struct mutex report_mutex;
- bool client_opened;
- struct input_dev __rcu *input;
- unsigned long quirks;
-@@ -361,21 +361,26 @@ static int steam_get_serial(struct steam_device *steam)
- * Send: 0xae 0x15 0x01
- * Recv: 0xae 0x15 0x01 serialnumber (10 chars)
- */
-- int ret;
-+ int ret = 0;
- u8 cmd[] = {STEAM_CMD_GET_STRING_ATTRIB, 0x15, STEAM_ATTRIB_STR_UNIT_SERIAL};
- u8 reply[3 + STEAM_SERIAL_LEN + 1];
-
-+ mutex_lock(&steam->report_mutex);
- ret = steam_send_report(steam, cmd, sizeof(cmd));
- if (ret < 0)
-- return ret;
-+ goto out;
- ret = steam_recv_report(steam, reply, sizeof(reply));
- if (ret < 0)
-- return ret;
-- if (reply[0] != 0xae || reply[1] != 0x15 || reply[2] != STEAM_ATTRIB_STR_UNIT_SERIAL)
-- return -EIO;
-+ goto out;
-+ if (reply[0] != 0xae || reply[1] != 0x15 || reply[2] != STEAM_ATTRIB_STR_UNIT_SERIAL) {
-+ ret = -EIO;
-+ goto out;
-+ }
- reply[3 + STEAM_SERIAL_LEN] = 0;
- strscpy(steam->serial_no, reply + 3, sizeof(steam->serial_no));
-- return 0;
-+out:
-+ mutex_unlock(&steam->report_mutex);
-+ return ret;
- }
-
- /*
-@@ -385,7 +390,11 @@ static int steam_get_serial(struct steam_device *steam)
- */
- static inline int steam_request_conn_status(struct steam_device *steam)
- {
-- return steam_send_report_byte(steam, STEAM_CMD_DONGLE_GET_STATE);
-+ int ret;
-+ mutex_lock(&steam->report_mutex);
-+ ret = steam_send_report_byte(steam, STEAM_CMD_DONGLE_GET_STATE);
-+ mutex_unlock(&steam->report_mutex);
-+ return ret;
- }
-
- /*
-@@ -397,6 +406,7 @@ static inline int steam_request_conn_status(struct steam_device *steam)
- static inline int steam_haptic_pulse(struct steam_device *steam, u8 pad,
- u16 duration, u16 interval, u16 count, u8 gain)
- {
-+ int ret;
- u8 report[10] = {STEAM_CMD_HAPTIC_PULSE, 8};
-
- /* Left and right are swapped on this report for legacy reasons */
-@@ -412,13 +422,17 @@ static inline int steam_haptic_pulse(struct steam_device *steam, u8 pad,
- report[8] = count >> 8;
- report[9] = gain;
-
-- return steam_send_report(steam, report, sizeof(report));
-+ mutex_lock(&steam->report_mutex);
-+ ret = steam_send_report(steam, report, sizeof(report));
-+ mutex_unlock(&steam->report_mutex);
-+ return ret;
- }
-
- static inline int steam_haptic_rumble(struct steam_device *steam,
- u16 intensity, u16 left_speed, u16 right_speed,
- u8 left_gain, u8 right_gain)
- {
-+ int ret;
- u8 report[11] = {STEAM_CMD_HAPTIC_RUMBLE, 9};
-
- report[3] = intensity & 0xFF;
-@@ -430,7 +444,10 @@ static inline int steam_haptic_rumble(struct steam_device *steam,
- report[9] = left_gain;
- report[10] = right_gain;
-
-- return steam_send_report(steam, report, sizeof(report));
-+ mutex_lock(&steam->report_mutex);
-+ ret = steam_send_report(steam, report, sizeof(report));
-+ mutex_unlock(&steam->report_mutex);
-+ return ret;
- }
-
- static void steam_haptic_rumble_cb(struct work_struct *work)
-@@ -460,6 +477,7 @@ static void steam_set_lizard_mode(struct steam_device *steam, bool enable)
- enable = false;
-
- if (enable) {
-+ mutex_lock(&steam->report_mutex);
- /* enable esc, enter, cursors */
- steam_send_report_byte(steam, STEAM_CMD_DEFAULT_MAPPINGS);
- /* enable mouse */
-@@ -467,9 +485,11 @@ static void steam_set_lizard_mode(struct steam_device *steam, bool enable)
- steam_write_registers(steam,
- STEAM_REG_SMOOTH_ABSOLUTE_MOUSE, 0x01, /* enable smooth */
- 0);
-+ mutex_unlock(&steam->report_mutex);
-
- cancel_delayed_work_sync(&steam->heartbeat);
- } else {
-+ mutex_lock(&steam->report_mutex);
- /* disable esc, enter, cursor */
- steam_send_report_byte(steam, STEAM_CMD_CLEAR_MAPPINGS);
-
-@@ -481,18 +501,19 @@ static void steam_set_lizard_mode(struct steam_device *steam, bool enable)
- STEAM_REG_LEFT_TRACKPAD_CLICK_PRESSURE, 0xFFFF, /* disable clicky pad */
- STEAM_REG_RIGHT_TRACKPAD_CLICK_PRESSURE, 0xFFFF, /* disable clicky pad */
- 0);
-+ mutex_unlock(&steam->report_mutex);
- /*
- * The Steam Deck has a watchdog that automatically enables
- * lizard mode if it doesn't see any traffic for too long
- */
-- if (!work_busy(&steam->heartbeat.work))
-- schedule_delayed_work(&steam->heartbeat, 5 * HZ);
-+ schedule_delayed_work(&steam->heartbeat, 5 * HZ);
- } else {
- steam_write_registers(steam,
- STEAM_REG_SMOOTH_ABSOLUTE_MOUSE, 0x00, /* disable smooth */
- STEAM_REG_LEFT_TRACKPAD_MODE, STEAM_TRACKPAD_NONE, /* disable mouse */
- STEAM_REG_RIGHT_TRACKPAD_MODE, STEAM_TRACKPAD_NONE, /* disable mouse */
- 0);
-+ mutex_unlock(&steam->report_mutex);
- }
- }
- }
-@@ -500,22 +521,29 @@ static void steam_set_lizard_mode(struct steam_device *steam, bool enable)
- static int steam_input_open(struct input_dev *dev)
- {
- struct steam_device *steam = input_get_drvdata(dev);
-+ unsigned long flags;
-+ bool set_lizard_mode;
-
-- mutex_lock(&steam->mutex);
-- if (!steam->client_opened && lizard_mode)
-+ spin_lock_irqsave(&steam->lock, flags);
-+ set_lizard_mode = !steam->client_opened && lizard_mode;
-+ spin_unlock_irqrestore(&steam->lock, flags);
-+ if (set_lizard_mode)
- steam_set_lizard_mode(steam, false);
-- mutex_unlock(&steam->mutex);
-+
- return 0;
- }
-
- static void steam_input_close(struct input_dev *dev)
- {
- struct steam_device *steam = input_get_drvdata(dev);
-+ unsigned long flags;
-+ bool set_lizard_mode;
-
-- mutex_lock(&steam->mutex);
-- if (!steam->client_opened && lizard_mode)
-+ spin_lock_irqsave(&steam->lock, flags);
-+ set_lizard_mode = !steam->client_opened && lizard_mode;
-+ spin_unlock_irqrestore(&steam->lock, flags);
-+ if (set_lizard_mode)
- steam_set_lizard_mode(steam, true);
-- mutex_unlock(&steam->mutex);
- }
-
- static enum power_supply_property steam_battery_props[] = {
-@@ -760,6 +788,7 @@ static int steam_register(struct steam_device *steam)
- {
- int ret;
- bool client_opened;
-+ unsigned long flags;
-
- /*
- * This function can be called several times in a row with the
-@@ -772,11 +801,9 @@ static int steam_register(struct steam_device *steam)
- * Unlikely, but getting the serial could fail, and it is not so
- * important, so make up a serial number and go on.
- */
-- mutex_lock(&steam->mutex);
- if (steam_get_serial(steam) < 0)
- strscpy(steam->serial_no, "XXXXXXXXXX",
- sizeof(steam->serial_no));
-- mutex_unlock(&steam->mutex);
-
- hid_info(steam->hdev, "Steam Controller '%s' connected",
- steam->serial_no);
-@@ -791,11 +818,11 @@ static int steam_register(struct steam_device *steam)
- mutex_unlock(&steam_devices_lock);
- }
-
-- mutex_lock(&steam->mutex);
-+ spin_lock_irqsave(&steam->lock, flags);
- client_opened = steam->client_opened;
-+ spin_unlock_irqrestore(&steam->lock, flags);
- if (!client_opened)
- steam_set_lizard_mode(steam, lizard_mode);
-- mutex_unlock(&steam->mutex);
-
- if (!client_opened)
- ret = steam_input_register(steam);
-@@ -847,16 +874,21 @@ static void steam_mode_switch_cb(struct work_struct *work)
- {
- struct steam_device *steam = container_of(to_delayed_work(work),
- struct steam_device, mode_switch);
-+ unsigned long flags;
-+ bool client_opened;
- steam->gamepad_mode = !steam->gamepad_mode;
- if (!lizard_mode)
- return;
-
-- mutex_lock(&steam->mutex);
- if (steam->gamepad_mode)
- steam_set_lizard_mode(steam, false);
-- else if (!steam->client_opened)
-- steam_set_lizard_mode(steam, lizard_mode);
-- mutex_unlock(&steam->mutex);
-+ else {
-+ spin_lock_irqsave(&steam->lock, flags);
-+ client_opened = steam->client_opened;
-+ spin_unlock_irqrestore(&steam->lock, flags);
-+ if (!client_opened)
-+ steam_set_lizard_mode(steam, lizard_mode);
-+ }
-
- steam_haptic_pulse(steam, STEAM_PAD_RIGHT, 0x190, 0, 1, 0);
- if (steam->gamepad_mode) {
-@@ -889,16 +921,21 @@ static void steam_lizard_mode_heartbeat(struct work_struct *work)
- {
- struct steam_device *steam = container_of(work, struct steam_device,
- heartbeat.work);
-+ bool client_opened;
-+ unsigned long flags;
-
-- mutex_lock(&steam->mutex);
-- if (!steam->client_opened && steam->client_hdev) {
-+ spin_lock_irqsave(&steam->lock, flags);
-+ client_opened = steam->client_opened;
-+ spin_unlock_irqrestore(&steam->lock, flags);
-+ if (!client_opened) {
-+ mutex_lock(&steam->report_mutex);
- steam_send_report_byte(steam, STEAM_CMD_CLEAR_MAPPINGS);
- steam_write_registers(steam,
- STEAM_REG_RIGHT_TRACKPAD_MODE, STEAM_TRACKPAD_NONE, /* disable mouse */
- 0);
-+ mutex_unlock(&steam->report_mutex);
- schedule_delayed_work(&steam->heartbeat, 5 * HZ);
- }
-- mutex_unlock(&steam->mutex);
- }
-
- static int steam_client_ll_parse(struct hid_device *hdev)
-@@ -921,10 +958,11 @@ static void steam_client_ll_stop(struct hid_device *hdev)
- static int steam_client_ll_open(struct hid_device *hdev)
- {
- struct steam_device *steam = hdev->driver_data;
-+ unsigned long flags;
-
-- mutex_lock(&steam->mutex);
-+ spin_lock_irqsave(&steam->lock, flags);
- steam->client_opened = true;
-- mutex_unlock(&steam->mutex);
-+ spin_unlock_irqrestore(&steam->lock, flags);
-
- steam_input_unregister(steam);
-
-@@ -939,14 +977,12 @@ static void steam_client_ll_close(struct hid_device *hdev)
- bool connected;
-
- spin_lock_irqsave(&steam->lock, flags);
-- connected = steam->connected;
-+ steam->client_opened = false;
-+ connected = steam->connected && !steam->client_opened;
- spin_unlock_irqrestore(&steam->lock, flags);
-
-- mutex_lock(&steam->mutex);
-- steam->client_opened = false;
- if (connected)
- steam_set_lizard_mode(steam, lizard_mode);
-- mutex_unlock(&steam->mutex);
-
- if (connected)
- steam_input_register(steam);
-@@ -1035,7 +1071,7 @@ static int steam_probe(struct hid_device *hdev,
- steam->hdev = hdev;
- hid_set_drvdata(hdev, steam);
- spin_lock_init(&steam->lock);
-- mutex_init(&steam->mutex);
-+ mutex_init(&steam->report_mutex);
- steam->quirks = id->driver_data;
- INIT_WORK(&steam->work_connect, steam_work_connect_cb);
- INIT_DELAYED_WORK(&steam->mode_switch, steam_mode_switch_cb);
-@@ -1043,13 +1079,6 @@ static int steam_probe(struct hid_device *hdev,
- INIT_DEFERRABLE_WORK(&steam->heartbeat, steam_lizard_mode_heartbeat);
- INIT_WORK(&steam->rumble_work, steam_haptic_rumble_cb);
-
-- steam->client_hdev = steam_create_client_hid(hdev);
-- if (IS_ERR(steam->client_hdev)) {
-- ret = PTR_ERR(steam->client_hdev);
-- goto client_hdev_fail;
-- }
-- steam->client_hdev->driver_data = steam;
--
- /*
- * With the real steam controller interface, do not connect hidraw.
- * Instead, create the client_hid and connect that.
-@@ -1058,10 +1087,6 @@ static int steam_probe(struct hid_device *hdev,
- if (ret)
- goto hid_hw_start_fail;
-
-- ret = hid_add_device(steam->client_hdev);
-- if (ret)
-- goto client_hdev_add_fail;
--
- ret = hid_hw_open(hdev);
- if (ret) {
- hid_err(hdev,
-@@ -1087,15 +1112,26 @@ static int steam_probe(struct hid_device *hdev,
- }
- }
-
-+ steam->client_hdev = steam_create_client_hid(hdev);
-+ if (IS_ERR(steam->client_hdev)) {
-+ ret = PTR_ERR(steam->client_hdev);
-+ goto client_hdev_fail;
-+ }
-+ steam->client_hdev->driver_data = steam;
-+
-+ ret = hid_add_device(steam->client_hdev);
-+ if (ret)
-+ goto client_hdev_add_fail;
-+
- return 0;
-
--input_register_fail:
--hid_hw_open_fail:
- client_hdev_add_fail:
- hid_hw_stop(hdev);
--hid_hw_start_fail:
-- hid_destroy_device(steam->client_hdev);
- client_hdev_fail:
-+ hid_destroy_device(steam->client_hdev);
-+input_register_fail:
-+hid_hw_open_fail:
-+hid_hw_start_fail:
- cancel_work_sync(&steam->work_connect);
- cancel_delayed_work_sync(&steam->heartbeat);
- cancel_delayed_work_sync(&steam->mode_switch);
-@@ -1115,14 +1151,12 @@ static void steam_remove(struct hid_device *hdev)
- return;
- }
-
-+ cancel_delayed_work_sync(&steam->heartbeat);
-+ cancel_delayed_work_sync(&steam->mode_switch);
-+ cancel_work_sync(&steam->work_connect);
- hid_destroy_device(steam->client_hdev);
-- mutex_lock(&steam->mutex);
- steam->client_hdev = NULL;
- steam->client_opened = false;
-- cancel_delayed_work_sync(&steam->heartbeat);
-- mutex_unlock(&steam->mutex);
-- cancel_work_sync(&steam->work_connect);
-- cancel_delayed_work_sync(&steam->mode_switch);
- if (steam->quirks & STEAM_QUIRK_WIRELESS) {
- hid_info(hdev, "Steam wireless receiver disconnected");
- }
-@@ -1597,10 +1631,8 @@ static int steam_param_set_lizard_mode(const char *val,
-
- mutex_lock(&steam_devices_lock);
- list_for_each_entry(steam, &steam_devices, list) {
-- mutex_lock(&steam->mutex);
- if (!steam->client_opened)
- steam_set_lizard_mode(steam, lizard_mode);
-- mutex_unlock(&steam->mutex);
- }
- mutex_unlock(&steam_devices_lock);
- return 0;
---
-2.41.0
-
-
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Vicki Pfau <vi@endrift.com>
-Date: Wed, 10 May 2023 17:27:12 -0700
-Subject: [PATCH 06/10] HID: hid-steam: Make client_opened a counter
-
-The client_opened variable was used to track if the hidraw was opened by any
-clients to silence keyboard/mouse events while opened. However, there was no
-counting of how many clients were opened, so opening two at the same time and
-then closing one would fool the driver into thinking it had no remaining opened
-clients.
-
-Signed-off-by: Vicki Pfau <vi@endrift.com>
----
- drivers/hid/hid-steam.c | 10 +++++-----
- 1 file changed, 5 insertions(+), 5 deletions(-)
-
-diff --git a/drivers/hid/hid-steam.c b/drivers/hid/hid-steam.c
-index 845ca71b8bd3a..0c2fe51b29bc1 100644
---- a/drivers/hid/hid-steam.c
-+++ b/drivers/hid/hid-steam.c
-@@ -215,7 +215,7 @@ struct steam_device {
- spinlock_t lock;
- struct hid_device *hdev, *client_hdev;
- struct mutex report_mutex;
-- bool client_opened;
-+ unsigned long client_opened;
- struct input_dev __rcu *input;
- unsigned long quirks;
- struct work_struct work_connect;
-@@ -787,7 +787,7 @@ static void steam_battery_unregister(struct steam_device *steam)
- static int steam_register(struct steam_device *steam)
- {
- int ret;
-- bool client_opened;
-+ unsigned long client_opened;
- unsigned long flags;
-
- /*
-@@ -961,7 +961,7 @@ static int steam_client_ll_open(struct hid_device *hdev)
- unsigned long flags;
-
- spin_lock_irqsave(&steam->lock, flags);
-- steam->client_opened = true;
-+ steam->client_opened++;
- spin_unlock_irqrestore(&steam->lock, flags);
-
- steam_input_unregister(steam);
-@@ -977,7 +977,7 @@ static void steam_client_ll_close(struct hid_device *hdev)
- bool connected;
-
- spin_lock_irqsave(&steam->lock, flags);
-- steam->client_opened = false;
-+ steam->client_opened--;
- connected = steam->connected && !steam->client_opened;
- spin_unlock_irqrestore(&steam->lock, flags);
-
-@@ -1156,7 +1156,7 @@ static void steam_remove(struct hid_device *hdev)
- cancel_work_sync(&steam->work_connect);
- hid_destroy_device(steam->client_hdev);
- steam->client_hdev = NULL;
-- steam->client_opened = false;
-+ steam->client_opened = 0;
- if (steam->quirks & STEAM_QUIRK_WIRELESS) {
- hid_info(hdev, "Steam wireless receiver disconnected");
- }
---
-2.41.0
-
-
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Vicki Pfau <vi@endrift.com>
-Date: Thu, 18 May 2023 18:00:35 -0700
-Subject: [PATCH 07/10] HID: hid-steam: Better handling of serial number length
-
-The second byte of the GET_STRING_ATTRIB report is a length, so we should set
-the size of the buffer to be the size we're actually requesting, and only
-reject the reply if the length out is nonsensical.
-
-Signed-off-by: Vicki Pfau <vi@endrift.com>
----
- drivers/hid/hid-steam.c | 10 +++++-----
- 1 file changed, 5 insertions(+), 5 deletions(-)
-
-diff --git a/drivers/hid/hid-steam.c b/drivers/hid/hid-steam.c
-index 0c2fe51b29bc1..92e3e1052fa42 100644
---- a/drivers/hid/hid-steam.c
-+++ b/drivers/hid/hid-steam.c
-@@ -208,7 +208,7 @@ static LIST_HEAD(steam_devices);
- #define STEAM_PAD_BOTH 2
-
- /* Other random constants */
--#define STEAM_SERIAL_LEN 10
-+#define STEAM_SERIAL_LEN 0x15
-
- struct steam_device {
- struct list_head list;
-@@ -359,10 +359,10 @@ static int steam_get_serial(struct steam_device *steam)
- {
- /*
- * Send: 0xae 0x15 0x01
-- * Recv: 0xae 0x15 0x01 serialnumber (10 chars)
-+ * Recv: 0xae 0x15 0x01 serialnumber
- */
- int ret = 0;
-- u8 cmd[] = {STEAM_CMD_GET_STRING_ATTRIB, 0x15, STEAM_ATTRIB_STR_UNIT_SERIAL};
-+ u8 cmd[] = {STEAM_CMD_GET_STRING_ATTRIB, sizeof(steam->serial_no), STEAM_ATTRIB_STR_UNIT_SERIAL};
- u8 reply[3 + STEAM_SERIAL_LEN + 1];
-
- mutex_lock(&steam->report_mutex);
-@@ -372,12 +372,12 @@ static int steam_get_serial(struct steam_device *steam)
- ret = steam_recv_report(steam, reply, sizeof(reply));
- if (ret < 0)
- goto out;
-- if (reply[0] != 0xae || reply[1] != 0x15 || reply[2] != STEAM_ATTRIB_STR_UNIT_SERIAL) {
-+ if (reply[0] != 0xae || reply[1] < 1 || reply[1] > sizeof(steam->serial_no) || reply[2] != STEAM_ATTRIB_STR_UNIT_SERIAL) {
- ret = -EIO;
- goto out;
- }
- reply[3 + STEAM_SERIAL_LEN] = 0;
-- strscpy(steam->serial_no, reply + 3, sizeof(steam->serial_no));
-+ strscpy(steam->serial_no, reply + 3, reply[1]);
- out:
- mutex_unlock(&steam->report_mutex);
- return ret;
--
2.41.0
diff --git a/SOURCES/steamdeck-oled-audio.patch b/SOURCES/steamdeck-oled-audio.patch
index eee4e1e..f5db6d7 100644
--- a/SOURCES/steamdeck-oled-audio.patch
+++ b/SOURCES/steamdeck-oled-audio.patch
@@ -97,68 +97,6 @@ index 293ec172e0a71..4c495e0e33f90 100644
--
GitLab
-From 39ecb253ecf7ed12e3019b72d7a226f0525dfaa3 Mon Sep 17 00:00:00 2001
-From: Venkata Prasad Potturu <venkataprasad.potturu@amd.com>
-Date: Fri, 20 Oct 2023 15:14:52 +0530
-Subject: [PATCH] ASoC: amd: Add new dmi entries and add condition check for
- acp config flag
-
-Signed-off-by: Venkata Prasad Potturu <venkataprasad.potturu@amd.com>
-(cherry picked from commit 50f20ef9bcf6fdf6e6cc64a031be26fb9cb54849)
----
- sound/soc/amd/acp-config.c | 14 ++++++++++++++
- sound/soc/amd/vangogh/pci-acp5x.c | 3 ++-
- 2 files changed, 16 insertions(+), 1 deletion(-)
-
-diff --git a/sound/soc/amd/acp-config.c b/sound/soc/amd/acp-config.c
-index f27c27580009..73d29a344e70 100644
---- a/sound/soc/amd/acp-config.c
-+++ b/sound/soc/amd/acp-config.c
-@@ -47,6 +47,20 @@ static const struct config_entry config_table[] = {
- {}
- },
- },
-+ {
-+ .flags = FLAG_AMD_LEGACY,
-+ .device = ACP_PCI_DEV_ID,
-+ .dmi_table = (const struct dmi_system_id []) {
-+ {
-+ .matches = {
-+ DMI_MATCH(DMI_SYS_VENDOR, "Valve"),
-+ DMI_MATCH(DMI_PRODUCT_NAME, "Jupiter"),
-+ DMI_MATCH(DMI_PRODUCT_FAMILY, "Aerith"),
-+ },
-+ },
-+ {}
-+ },
-+ },
- {
- .flags = FLAG_AMD_SOF,
- .device = ACP_PCI_DEV_ID,
-diff --git a/sound/soc/amd/vangogh/pci-acp5x.c b/sound/soc/amd/vangogh/pci-acp5x.c
-index c4634a8a17cd..e29c4cc10e0f 100644
---- a/sound/soc/amd/vangogh/pci-acp5x.c
-+++ b/sound/soc/amd/vangogh/pci-acp5x.c
-@@ -13,6 +13,7 @@
- #include <linux/pm_runtime.h>
-
- #include "acp5x.h"
-+#include "../mach-config.h"
-
- struct acp5x_dev_data {
- void __iomem *acp5x_base;
-@@ -131,7 +132,7 @@ static int snd_acp5x_probe(struct pci_dev *pci,
-
- /* Return if acp config flag is defined */
- flag = snd_amd_acp_find_config(pci);
-- if (flag)
-+ if (flag != FLAG_AMD_LEGACY)
- return -ENODEV;
-
- irqflags = IRQF_SHARED;
---
-GitLab
-
From 4855323691ea7dd2288c51cd11f00561f9ba22df Mon Sep 17 00:00:00 2001
From: Thomas Crider <gloriouseggroll@gmail.com>
Date: Tue, 5 Dec 2023 05:13:41 -0500
@@ -185,7 +123,7 @@ index a06af82b8..ae32748a5 100644
#include "acp-mach.h"
#define PCO_PLAT_CLK 48000000
-@@ -1243,6 +1245,78 @@ SND_SOC_DAILINK_DEF(nau8821,
+@@ -1282,6 +1282,78 @@
DAILINK_COMP_ARRAY(COMP_CODEC("i2c-NVTN2020:00",
"nau8821-hifi")));
@@ -264,41 +202,7 @@ index a06af82b8..ae32748a5 100644
/* Declare DMIC codec components */
SND_SOC_DAILINK_DEF(dmic_codec,
DAILINK_COMP_ARRAY(COMP_CODEC("dmic-codec", "dmic-hifi")));
-@@ -1278,6 +1352,8 @@ SND_SOC_DAILINK_DEF(sof_hs,
- DAILINK_COMP_ARRAY(COMP_CPU("acp-sof-hs")));
- SND_SOC_DAILINK_DEF(sof_hs_virtual,
- DAILINK_COMP_ARRAY(COMP_CPU("acp-sof-hs-virtual")));
-+SND_SOC_DAILINK_DEF(sof_bt,
-+ DAILINK_COMP_ARRAY(COMP_CPU("acp-sof-bt")));
- SND_SOC_DAILINK_DEF(sof_dmic,
- DAILINK_COMP_ARRAY(COMP_CPU("acp-sof-dmic")));
- SND_SOC_DAILINK_DEF(pdm_dmic,
-@@ -1336,6 +1412,8 @@ int acp_sofdsp_dai_links_create(struct snd_soc_card *card)
-
- if (drv_data->hs_cpu_id)
- num_links++;
-+ if (drv_data->bt_cpu_id)
-+ num_links++;
- if (drv_data->amp_cpu_id)
- num_links++;
- if (drv_data->dmic_cpu_id)
-@@ -1421,6 +1499,7 @@ int acp_sofdsp_dai_links_create(struct snd_soc_card *card)
- links[i].platforms = sof_component;
- links[i].num_platforms = ARRAY_SIZE(sof_component);
- links[i].dpcm_playback = 1;
-+ links[i].dpcm_capture = 1;
- links[i].nonatomic = true;
- links[i].no_pcm = 1;
- if (!drv_data->amp_codec_id) {
-@@ -1453,6 +1532,7 @@ int acp_sofdsp_dai_links_create(struct snd_soc_card *card)
- links[i].platforms = sof_component;
- links[i].num_platforms = ARRAY_SIZE(sof_component);
- links[i].dpcm_playback = 1;
-+ links[i].dpcm_capture = 1;
- links[i].nonatomic = true;
- links[i].no_pcm = 1;
- if (!drv_data->amp_codec_id) {
-@@ -1482,6 +1562,33 @@ int acp_sofdsp_dai_links_create(struct snd_soc_card *card)
+@@ -1543,6 +1543,14 @@
card->codec_conf = rt1019_conf;
card->num_configs = ARRAY_SIZE(rt1019_conf);
}
@@ -310,128 +214,22 @@ index a06af82b8..ae32748a5 100644
+ card->num_configs = ARRAY_SIZE(cs35l41_conf);
+ links[i].ops = &acp_cs35l41_ops;
+ }
-+ i++;
-+ }
-+
-+ if (drv_data->bt_cpu_id == I2S_BT) {
-+ links[i].name = "acp-bt-codec";
-+ links[i].id = BT_BE_ID;
-+ links[i].cpus = sof_bt;
-+ links[i].num_cpus = ARRAY_SIZE(sof_bt);
-+ links[i].platforms = sof_component;
-+ links[i].num_platforms = ARRAY_SIZE(sof_component);
-+ links[i].dpcm_playback = 1;
-+ links[i].dpcm_capture = 1;
-+ links[i].nonatomic = true;
-+ links[i].no_pcm = 1;
-+ if (!drv_data->bt_codec_id) {
-+ /* Use dummy codec if codec id not specified */
-+ links[i].codecs = &snd_soc_dummy_dlc;
-+ links[i].num_codecs = 1;
-+ }
i++;
}
+
diff --git a/sound/soc/amd/acp/acp-mach.h b/sound/soc/amd/acp/acp-mach.h
index 2b3ec6594..6feef5a93 100644
--- a/sound/soc/amd/acp/acp-mach.h
+++ b/sound/soc/amd/acp/acp-mach.h
-@@ -23,6 +23,7 @@
- enum be_id {
- HEADSET_BE_ID = 0,
- AMP_BE_ID,
-+ BT_BE_ID,
- DMIC_BE_ID,
- };
-
-@@ -45,6 +45,7 @@
- MAX98360A,
- RT5682S,
- NAU8825,
-+ CS35L41,
+@@ -49,6 +49,7 @@
NAU8821,
MAX98388,
ES83XX,
-@@ -53,9 +55,11 @@ enum platform_end_point {
- struct acp_card_drvdata {
- unsigned int hs_cpu_id;
- unsigned int amp_cpu_id;
-+ unsigned int bt_cpu_id;
- unsigned int dmic_cpu_id;
- unsigned int hs_codec_id;
- unsigned int amp_codec_id;
-+ unsigned int bt_codec_id;
- unsigned int dmic_codec_id;
- unsigned int dai_fmt;
- unsigned int platform;
-diff --git a/sound/soc/amd/acp/acp-sof-mach.c b/sound/soc/amd/acp/acp-sof-mach.c
-index 5223033a1..45d4ce17c 100644
---- a/sound/soc/amd/acp/acp-sof-mach.c
-+++ b/sound/soc/amd/acp/acp-sof-mach.c
-@@ -86,9 +86,11 @@ static struct acp_card_drvdata sof_rt5682s_hs_rt1019_data = {
- static struct acp_card_drvdata sof_nau8821_max98388_data = {
- .hs_cpu_id = I2S_SP,
- .amp_cpu_id = I2S_HS,
-+ .bt_cpu_id = I2S_BT,
- .dmic_cpu_id = NONE,
- .hs_codec_id = NAU8821,
- .amp_codec_id = MAX98388,
-+ .bt_codec_id = NONE,
- .dmic_codec_id = NONE,
- .soc_mclk = true,
- .tdm_mode = false,
-diff --git a/sound/soc/sof/ipc3-topology.c b/sound/soc/sof/ipc3-topology.c
-index ba4ef290b..2f070f907 100644
---- a/sound/soc/sof/ipc3-topology.c
-+++ b/sound/soc/sof/ipc3-topology.c
-@@ -1174,6 +1174,7 @@ static int sof_link_acp_bt_load(struct snd_soc_component *scomp, struct snd_sof_
- struct snd_soc_tplg_hw_config *hw_config = slink->hw_configs;
- struct sof_dai_private_data *private = dai->private;
- u32 size = sizeof(*config);
-+ int ret;
-
- /* handle master/slave and inverted clocks */
- sof_dai_set_format(hw_config, config);
-@@ -1182,12 +1183,14 @@ static int sof_link_acp_bt_load(struct snd_soc_component *scomp, struct snd_sof_
- memset(&config->acpbt, 0, sizeof(config->acpbt));
- config->hdr.size = size;
-
-- config->acpbt.fsync_rate = le32_to_cpu(hw_config->fsync_rate);
-- config->acpbt.tdm_slots = le32_to_cpu(hw_config->tdm_slots);
-+ ret = sof_update_ipc_object(scomp, &config->acpbt, SOF_ACPI2S_TOKENS, slink->tuples,
-+ slink->num_tuples, size, slink->num_hw_configs);
-+ if (ret < 0)
-+ return ret;
-
-- dev_info(scomp->dev, "ACP_BT config ACP%d channel %d rate %d\n",
-+ dev_info(scomp->dev, "ACP_BT config ACP%d channel %d rate %d tdm_mode %d\n",
- config->dai_index, config->acpbt.tdm_slots,
-- config->acpbt.fsync_rate);
-+ config->acpbt.fsync_rate, config->acpbt.tdm_mode);
++ CS35L41,
+ };
- dai->number_configs = 1;
- dai->current_config = 0;
-diff --git a/sound/soc/sof/topology.c b/sound/soc/sof/topology.c
-index a3a3af252..a634ae05f 100644
---- a/sound/soc/sof/topology.c
-+++ b/sound/soc/sof/topology.c
-@@ -289,7 +289,7 @@ static const struct sof_dai_types sof_dais[] = {
- {"ALH", SOF_DAI_INTEL_ALH},
- {"SAI", SOF_DAI_IMX_SAI},
- {"ESAI", SOF_DAI_IMX_ESAI},
-- {"ACP", SOF_DAI_AMD_BT},
-+ {"ACPBT", SOF_DAI_AMD_BT},
- {"ACPSP", SOF_DAI_AMD_SP},
- {"ACPDMIC", SOF_DAI_AMD_DMIC},
- {"ACPHS", SOF_DAI_AMD_HS},
-@@ -1953,6 +1953,7 @@ static int sof_link_load(struct snd_soc_component *scomp, int index, struct snd_
- token_id = SOF_ACPDMIC_TOKENS;
- num_tuples += token_list[SOF_ACPDMIC_TOKENS].count;
- break;
-+ case SOF_DAI_AMD_BT:
- case SOF_DAI_AMD_SP:
- case SOF_DAI_AMD_HS:
- case SOF_DAI_AMD_SP_VIRTUAL:
+ enum platform_end_point {
--
2.43.0
diff --git a/SOURCES/steamdeck-oled-wifi.patch b/SOURCES/steamdeck-oled-wifi.patch
index 65494c6..bf6f500 100644
--- a/SOURCES/steamdeck-oled-wifi.patch
+++ b/SOURCES/steamdeck-oled-wifi.patch
@@ -1,19 +1,18 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From 01fd63d2e9b32cd917c9036dfb703b5c4bbd872d Mon Sep 17 00:00:00 2001
From: "neil.shi" <neil.shi@quectel.com>
Date: Tue, 23 May 2023 16:58:08 +0800
Subject: [PATCH] wifi: ath11k: [DBS PATCH 1/6]: Indicate NAN support to
firmware
Signed-off-by: neil.shi <neil.shi@quectel.com>
-Signed-off-by: Jan200101 <sentrycraft123@gmail.com>
---
drivers/net/wireless/ath/ath11k/hw.c | 1 +
drivers/net/wireless/ath/ath11k/wmi.c | 1 +
- drivers/net/wireless/ath/ath11k/wmi.h | 10 ++++++++++
- 3 files changed, 12 insertions(+)
+ drivers/net/wireless/ath/ath11k/wmi.h | 19 +++++++++++++++++++
+ 3 files changed, 21 insertions(+)
diff --git a/drivers/net/wireless/ath/ath11k/hw.c b/drivers/net/wireless/ath/ath11k/hw.c
-index d7b5ec6e6904..210759ddf2fb 100644
+index dbcc0c4035b62..6309efe4b7c1f 100644
--- a/drivers/net/wireless/ath/ath11k/hw.c
+++ b/drivers/net/wireless/ath/ath11k/hw.c
@@ -100,6 +100,7 @@ static void ath11k_init_wmi_config_qca6390(struct ath11k_base *ab,
@@ -22,13 +21,13 @@ index d7b5ec6e6904..210759ddf2fb 100644
config->flag1 |= WMI_RSRC_CFG_FLAG1_BSS_CHANNEL_INFO_64;
+ config->host_service_flags |= WMI_RSRC_CFG_HOST_SERVICE_FLAG_NAN_IFACE_SUPPORT;
}
-
+
static void ath11k_hw_ipq8074_reo_setup(struct ath11k_base *ab)
diff --git a/drivers/net/wireless/ath/ath11k/wmi.c b/drivers/net/wireless/ath/ath11k/wmi.c
-index 2845b4313d3a..e2dcdb3b78cc 100644
+index 3e0a47f4a3ebd..64648e0d9484d 100644
--- a/drivers/net/wireless/ath/ath11k/wmi.c
+++ b/drivers/net/wireless/ath/ath11k/wmi.c
-@@ -4069,6 +4069,7 @@ ath11k_wmi_copy_resource_config(struct wmi_resource_config *wmi_cfg,
+@@ -4069,6 +4132,7 @@ ath11k_wmi_copy_resource_config(struct wmi_resource_config *wmi_cfg,
wmi_cfg->sched_params = tg_cfg->sched_params;
wmi_cfg->twt_ap_pdev_count = tg_cfg->twt_ap_pdev_count;
wmi_cfg->twt_ap_sta_count = tg_cfg->twt_ap_sta_count;
@@ -37,7 +36,7 @@ index 2845b4313d3a..e2dcdb3b78cc 100644
~(1 << WMI_CFG_HOST_SERVICE_FLAG_REG_CC_EXT);
wmi_cfg->host_service_flags |= (tg_cfg->is_reg_cc_ext_event_supported <<
diff --git a/drivers/net/wireless/ath/ath11k/wmi.h b/drivers/net/wireless/ath/ath11k/wmi.h
-index 100bb816b592..a8354022f575 100644
+index 8f2c07d70a4a2..042c7b0d16631 100644
--- a/drivers/net/wireless/ath/ath11k/wmi.h
+++ b/drivers/net/wireless/ath/ath11k/wmi.h
@@ -2330,6 +2330,7 @@ struct wmi_init_cmd {
@@ -45,10 +44,10 @@ index 100bb816b592..a8354022f575 100644
#define WMI_RSRC_CFG_FLAG2_CALC_NEXT_DTIM_COUNT_SET BIT(9)
#define WMI_RSRC_CFG_FLAG1_ACK_RSSI BIT(18)
+#define WMI_RSRC_CFG_HOST_SERVICE_FLAG_NAN_IFACE_SUPPORT BIT(0)
-
+
#define WMI_CFG_HOST_SERVICE_FLAG_REG_CC_EXT 4
-
-@@ -5700,6 +5701,15 @@ struct target_resource_config {
+
+@@ -5700,6 +5710,15 @@ struct target_resource_config {
u8 is_reg_cc_ext_event_supported;
u32 ema_max_vap_cnt;
u32 ema_max_profile_period;
@@ -62,16 +61,17 @@ index 100bb816b592..a8354022f575 100644
+ u32 flags2;
+ u32 host_service_flags;
};
-
+
enum wmi_debug_log_param {
+--
+GitLab
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From bc6d3226e567630188a41a78a12514c74babdea9 Mon Sep 17 00:00:00 2001
From: "neil.shi" <neil.shi@quectel.com>
Date: Tue, 23 May 2023 17:01:06 +0800
Subject: [PATCH] wifi: ath11k: [DBS PATCH 2/6] wifi: ath11k: add support for
QCA206X
-Signed-off-by: Jan200101 <sentrycraft123@gmail.com>
---
drivers/net/wireless/ath/ath11k/core.c | 64 ++++++++++++++++++++++++++
drivers/net/wireless/ath/ath11k/core.h | 1 +
@@ -80,13 +80,13 @@ Signed-off-by: Jan200101 <sentrycraft123@gmail.com>
4 files changed, 82 insertions(+), 1 deletion(-)
diff --git a/drivers/net/wireless/ath/ath11k/core.c b/drivers/net/wireless/ath/ath11k/core.c
-index 0c6ecbb9a066..766cf2db5b45 100644
+index 893fefadbba96..96ed5b7cd0048 100644
--- a/drivers/net/wireless/ath/ath11k/core.c
+++ b/drivers/net/wireless/ath/ath11k/core.c
-@@ -411,6 +411,70 @@ static const struct ath11k_hw_params ath11k_hw_params[] = {
+@@ -394,6 +394,70 @@ static const struct ath11k_hw_params ath11k_hw_params[] = {
.fragment_160mhz = false,
},
-
+
+ .interface_modes = BIT(NL80211_IFTYPE_STATION) |
+ BIT(NL80211_IFTYPE_AP),
+ .supports_monitor = false,
@@ -155,22 +155,22 @@ index 0c6ecbb9a066..766cf2db5b45 100644
BIT(NL80211_IFTYPE_AP),
.supports_monitor = false,
diff --git a/drivers/net/wireless/ath/ath11k/core.h b/drivers/net/wireless/ath/ath11k/core.h
-index 667d55e26156..0c0960994231 100644
+index bd06536f82a64..ab120329619c0 100644
--- a/drivers/net/wireless/ath/ath11k/core.h
+++ b/drivers/net/wireless/ath/ath11k/core.h
-@@ -147,6 +147,7 @@ enum ath11k_hw_rev {
+@@ -144,6 +144,7 @@ enum ath11k_hw_rev {
ATH11K_HW_WCN6855_HW21,
ATH11K_HW_WCN6750_HW10,
ATH11K_HW_IPQ5018_HW10,
+ ATH11K_HW_QCA206X_HW21,
};
-
+
enum ath11k_firmware_mode {
diff --git a/drivers/net/wireless/ath/ath11k/mhi.c b/drivers/net/wireless/ath/ath11k/mhi.c
-index afeabd6ecc67..92917d842d57 100644
+index a62ee05c54097..c76f665dc369d 100644
--- a/drivers/net/wireless/ath/ath11k/mhi.c
+++ b/drivers/net/wireless/ath/ath11k/mhi.c
-@@ -443,6 +443,7 @@ int ath11k_mhi_register(struct ath11k_pci *ab_pci)
+@@ -434,6 +434,7 @@ int ath11k_mhi_register(struct ath11k_pci *ab_pci)
case ATH11K_HW_QCA6390_HW20:
case ATH11K_HW_WCN6855_HW20:
case ATH11K_HW_WCN6855_HW21:
@@ -179,19 +179,19 @@ index afeabd6ecc67..92917d842d57 100644
break;
default:
diff --git a/drivers/net/wireless/ath/ath11k/pci.c b/drivers/net/wireless/ath/ath11k/pci.c
-index 09e65c5e55c4..2fa4a99e7b08 100644
+index 3c6005ab9a717..93dd259bd85ad 100644
--- a/drivers/net/wireless/ath/ath11k/pci.c
+++ b/drivers/net/wireless/ath/ath11k/pci.c
-@@ -28,6 +28,8 @@
+@@ -27,6 +27,8 @@
#define QCN9074_DEVICE_ID 0x1104
#define WCN6855_DEVICE_ID 0x1103
-
+
+#define SUB_VERSION 0x1910010
+
static const struct pci_device_id ath11k_pci_id_table[] = {
{ PCI_VDEVICE(QCOM, QCA6390_DEVICE_ID) },
{ PCI_VDEVICE(QCOM, WCN6855_DEVICE_ID) },
-@@ -809,7 +811,19 @@ static int ath11k_pci_probe(struct pci_dev *pdev,
+@@ -806,7 +808,19 @@ static int ath11k_pci_probe(struct pci_dev *pdev,
break;
case 0x10:
case 0x11:
@@ -212,16 +212,18 @@ index 09e65c5e55c4..2fa4a99e7b08 100644
break;
default:
goto unsupported_wcn6855_soc;
-@@ -1021,6 +1035,7 @@ static struct pci_driver ath11k_pci_driver = {
+@@ -1017,6 +1031,7 @@ static struct pci_driver ath11k_pci_driver = {
static int ath11k_pci_init(void)
{
int ret;
+ u32 sub_version;
-
+
ret = pci_register_driver(&ath11k_pci_driver);
if (ret)
+--
+GitLab
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From 707933ef2a20db8f7c3d9d3c654a8dcb2f582436 Mon Sep 17 00:00:00 2001
From: "neil.shi" <neil.shi@quectel.com>
Date: Tue, 23 May 2023 17:04:27 +0800
Subject: [PATCH] wifi: ath11k: [DBS PATCH 3/6]: support 2 stations and report
@@ -232,19 +234,18 @@ num_rxmda_per_pdev in hw_params, and report addresses
for these interfaces.
Signed-off-by: neil.shi <neil.shi@quectel.com>
-Signed-off-by: Jan200101 <sentrycraft123@gmail.com>
---
drivers/net/wireless/ath/ath11k/mac.c | 83 ++++++++++++++++++++-------
1 file changed, 63 insertions(+), 20 deletions(-)
diff --git a/drivers/net/wireless/ath/ath11k/mac.c b/drivers/net/wireless/ath/ath11k/mac.c
-index 71c6dab1aedb..967dbe3cfe94 100644
+index cb77dd6ce9665..c7fa31deefacd 100644
--- a/drivers/net/wireless/ath/ath11k/mac.c
+++ b/drivers/net/wireless/ath/ath11k/mac.c
-@@ -9284,6 +9284,31 @@ static int ath11k_mac_setup_channels_rates(struct ath11k *ar,
+@@ -8774,6 +8774,31 @@ static int ath11k_mac_setup_channels_rates(struct ath11k *ar,
return 0;
}
-
+
+static void ath11k_mac_setup_mac_address_list(struct ath11k *ar)
+{
+ struct mac_address *addresses;
@@ -273,10 +274,10 @@ index 71c6dab1aedb..967dbe3cfe94 100644
static int ath11k_mac_setup_iface_combinations(struct ath11k *ar)
{
struct ath11k_base *ab = ar->ab;
-@@ -9303,28 +9328,43 @@ static int ath11k_mac_setup_iface_combinations(struct ath11k *ar)
+@@ -8793,28 +8818,43 @@ static int ath11k_mac_setup_iface_combinations(struct ath11k *ar)
return -ENOMEM;
}
-
+
- limits[0].max = 1;
- limits[0].types |= BIT(NL80211_IFTYPE_STATION);
-
@@ -285,13 +286,13 @@ index 71c6dab1aedb..967dbe3cfe94 100644
+ if (ab->hw_params.single_pdev_only && ar->ab->hw_params.num_rxmda_per_pdev > 1) {
+ limits[0].max = 2;
+ limits[0].types |= BIT(NL80211_IFTYPE_STATION);
-
+
- if (IS_ENABLED(CONFIG_MAC80211_MESH) &&
- ab->hw_params.interface_modes & BIT(NL80211_IFTYPE_MESH_POINT))
- limits[1].types |= BIT(NL80211_IFTYPE_MESH_POINT);
+ limits[1].max = 1;
+ limits[1].types |= BIT(NL80211_IFTYPE_AP);
-
+
- combinations[0].limits = limits;
- combinations[0].n_limits = n_limits;
- combinations[0].max_interfaces = 16;
@@ -334,47 +335,56 @@ index 71c6dab1aedb..967dbe3cfe94 100644
+ BIT(NL80211_CHAN_WIDTH_80P80) |
+ BIT(NL80211_CHAN_WIDTH_160);
+ }
-
+
ar->hw->wiphy->iface_combinations = combinations;
ar->hw->wiphy->n_iface_combinations = 1;
-@@ -9389,6 +9429,8 @@ static void __ath11k_mac_unregister(struct ath11k *ar)
+@@ -8875,6 +8915,8 @@ static void __ath11k_mac_unregister(struct ath11k *ar)
kfree(ar->hw->wiphy->iface_combinations[0].limits);
kfree(ar->hw->wiphy->iface_combinations);
-
+
+ kfree(ar->hw->wiphy->addresses);
+
SET_IEEE80211_DEV(ar->hw, NULL);
}
-
-@@ -9431,6 +9473,7 @@ static int __ath11k_mac_register(struct ath11k *ar)
+
+@@ -8917,6 +8959,7 @@ static int __ath11k_mac_register(struct ath11k *ar)
ath11k_pdev_caps_update(ar);
-
+
SET_IEEE80211_PERM_ADDR(ar->hw, ar->mac_addr);
+ ath11k_mac_setup_mac_address_list(ar);
-
+
SET_IEEE80211_DEV(ar->hw, ab->dev);
-
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+--
+GitLab
+
+From 6591470d389d674f100568393112c169841db26f Mon Sep 17 00:00:00 2001
From: "neil.shi" <neil.shi@quectel.com>
Date: Tue, 23 May 2023 17:07:21 +0800
Subject: [PATCH] wifi: ath11k: [DBS PATCH 6/6]: send coex config to firmware
for QCA206X
Signed-off-by: neil.shi <neil.shi@quectel.com>
-Signed-off-by: Jan200101 <sentrycraft123@gmail.com>
---
- drivers/net/wireless/ath/ath11k/core.c | 26 +++++++++
+ drivers/net/wireless/ath/ath11k/core.c | 27 +++++++++
drivers/net/wireless/ath/ath11k/hw.h | 1 +
drivers/net/wireless/ath/ath11k/wmi.c | 26 +++++++++
drivers/net/wireless/ath/ath11k/wmi.h | 77 ++++++++++++++++++++++++++
- 4 files changed, 130 insertions(+)
+ 4 files changed, 131 insertions(+)
diff --git a/drivers/net/wireless/ath/ath11k/core.c b/drivers/net/wireless/ath/ath11k/core.c
-index 766cf2db5b45..e3c55b1e792e 100644
+index 96ed5b7cd0048..849c7c12198e0 100644
--- a/drivers/net/wireless/ath/ath11k/core.c
+++ b/drivers/net/wireless/ath/ath11k/core.c
-@@ -122,6 +122,7 @@ static const struct ath11k_hw_params ath11k_hw_params[] = {
+@@ -16,6 +16,7 @@
+ #include "hif.h"
+ #include "wow.h"
+ #include "fw.h"
++#include "wmi.h"
+
+ unsigned int ath11k_debug_mask;
+ EXPORT_SYMBOL(ath11k_debug_mask);
+@@ -115,6 +116,7 @@ static const struct ath11k_hw_params ath11k_hw_params[] = {
.tcl_ring_retry = true,
.tx_ring_size = DP_TCL_DATA_RING_SIZE,
.smp2p_wow_exit = false,
@@ -382,7 +392,7 @@ index 766cf2db5b45..e3c55b1e792e 100644
},
{
.hw_rev = ATH11K_HW_IPQ6018_HW10,
-@@ -205,6 +206,7 @@ static const struct ath11k_hw_params ath11k_hw_params[] = {
+@@ -204,6 +206,7 @@ static const struct ath11k_hw_params ath11k_hw_params[] = {
.tx_ring_size = DP_TCL_DATA_RING_SIZE,
.smp2p_wow_exit = false,
.support_fw_mac_sequence = false,
@@ -390,7 +400,7 @@ index 766cf2db5b45..e3c55b1e792e 100644
},
{
.name = "qca6390 hw2.0",
-@@ -372,6 +374,7 @@ static const struct ath11k_hw_params ath11k_hw_params[] = {
+@@ -371,6 +374,7 @@ static const struct ath11k_hw_params ath11k_hw_params[] = {
.tx_ring_size = DP_TCL_DATA_RING_SIZE,
.smp2p_wow_exit = false,
.support_fw_mac_sequence = false,
@@ -398,7 +408,7 @@ index 766cf2db5b45..e3c55b1e792e 100644
},
{
.name = "wcn6855 hw2.0",
-@@ -435,6 +438,7 @@ static const struct ath11k_hw_params ath11k_hw_params[] = {
+@@ -418,6 +422,7 @@ static const struct ath11k_hw_params ath11k_hw_params[] = {
.fw_wmi_diag_event = true,
.current_cc_support = true,
.dbr_debug_support = false,
@@ -406,7 +416,7 @@ index 766cf2db5b45..e3c55b1e792e 100644
},
{
.name = "qca206x hw2.1",
-@@ -521,6 +525,7 @@ static const struct ath11k_hw_params ath11k_hw_params[] = {
+@@ -456,6 +525,7 @@ static const struct ath11k_hw_params ath11k_hw_params[] = {
.tx_ring_size = DP_TCL_DATA_RING_SIZE,
.smp2p_wow_exit = false,
.support_fw_mac_sequence = true,
@@ -414,10 +424,10 @@ index 766cf2db5b45..e3c55b1e792e 100644
},
{
.name = "wcn6855 hw2.1",
-@@ -1637,6 +1642,18 @@ static void ath11k_core_pdev_destroy(struct ath11k_base *ab)
+@@ -1448,6 +1454,18 @@ static void ath11k_core_pdev_destroy(struct ath11k_base *ab)
ath11k_debugfs_pdev_destroy(ab);
}
-
+
+static int ath11k_core_config_coex_isolation(struct ath11k_base *ab)
+{
+ struct ath11k *ar = ath11k_ab_to_ar(ab, 0);
@@ -433,10 +443,10 @@ index 766cf2db5b45..e3c55b1e792e 100644
static int ath11k_core_start(struct ath11k_base *ab)
{
int ret;
-@@ -1734,6 +1751,15 @@ static int ath11k_core_start(struct ath11k_base *ab)
+@@ -1545,6 +1563,15 @@ static int ath11k_core_start(struct ath11k_base *ab)
goto err_reo_cleanup;
}
-
+
+ if (ab->hw_params.coex_isolation) {
+ ret = ath11k_core_config_coex_isolation(ab);
+ if (ret) {
@@ -447,13 +457,13 @@ index 766cf2db5b45..e3c55b1e792e 100644
+ }
+
return 0;
-
+
err_reo_cleanup:
diff --git a/drivers/net/wireless/ath/ath11k/hw.h b/drivers/net/wireless/ath/ath11k/hw.h
-index d51a99669dd6..9b96ce7f6538 100644
+index 8a3f24862edc4..4da64301d2974 100644
--- a/drivers/net/wireless/ath/ath11k/hw.h
+++ b/drivers/net/wireless/ath/ath11k/hw.h
-@@ -206,6 +206,7 @@ struct ath11k_hw_params {
+@@ -200,6 +200,7 @@ struct ath11k_hw_params {
bool fw_wmi_diag_event;
bool current_cc_support;
bool dbr_debug_support;
@@ -462,10 +472,10 @@ index d51a99669dd6..9b96ce7f6538 100644
const struct cfg80211_sar_capa *bios_sar_capa;
bool m3_fw_support;
diff --git a/drivers/net/wireless/ath/ath11k/wmi.c b/drivers/net/wireless/ath/ath11k/wmi.c
-index e2dcdb3b78cc..cf292442fab4 100644
+index 9037919a3ae90..5050c0dfe2508 100644
--- a/drivers/net/wireless/ath/ath11k/wmi.c
+++ b/drivers/net/wireless/ath/ath11k/wmi.c
-@@ -8880,6 +8880,32 @@ ath11k_wmi_send_unit_test_cmd(struct ath11k *ar,
+@@ -8774,6 +8774,32 @@
return ret;
}
@@ -499,11 +509,11 @@ index e2dcdb3b78cc..cf292442fab4 100644
{
struct ath11k_vif *arvif;
diff --git a/drivers/net/wireless/ath/ath11k/wmi.h b/drivers/net/wireless/ath/ath11k/wmi.h
-index a8354022f575..a18723fe9aae 100644
+index 373d38538db0c..d63073eaaec3d 100644
--- a/drivers/net/wireless/ath/ath11k/wmi.h
+++ b/drivers/net/wireless/ath/ath11k/wmi.h
-@@ -6332,6 +6332,82 @@ enum wmi_sta_keepalive_method {
-
+@@ -6322,6 +6323,82 @@ enum wmi_sta_keepalive_method {
+
const void **ath11k_wmi_tlv_parse_alloc(struct ath11k_base *ab, const void *ptr,
size_t len, gfp_t gfp);
+enum wmi_coex_config_type {
@@ -585,7 +595,7 @@ index a8354022f575..a18723fe9aae 100644
int ath11k_wmi_cmd_send(struct ath11k_pdev_wmi *wmi, struct sk_buff *skb,
u32 cmd_id);
struct sk_buff *ath11k_wmi_alloc_skb(struct ath11k_wmi_base *wmi_sc, u32 len);
-@@ -6493,6 +6569,7 @@ int ath11k_wmi_scan_prob_req_oui(struct ath11k *ar,
+@@ -6171,6 +6247,7 @@ int ath11k_wmi_scan_prob_req_oui(struct ath11k *ar,
const u8 mac_addr[ETH_ALEN]);
int ath11k_wmi_fw_dbglog_cfg(struct ath11k *ar, u32 *module_id_bitmap,
struct ath11k_fw_dbglog *dbglog);
@@ -593,28 +603,32 @@ index a8354022f575..a18723fe9aae 100644
int ath11k_wmi_wow_config_pno(struct ath11k *ar, u32 vdev_id,
struct wmi_pno_scan_req *pno_scan);
int ath11k_wmi_wow_del_pattern(struct ath11k *ar, u32 vdev_id, u32 pattern_id);
+--
+GitLab
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+
+From 0f02da05404b27449b01cc3b3a992dcb6f795287 Mon Sep 17 00:00:00 2001
From: "neil.shi" <neil.shi@quectel.com>
Date: Tue, 23 May 2023 17:41:00 +0800
Subject: [PATCH] wifi: ath11k: merge all patches to 6.1.11, fix exceptions and
compilation errors
Signed-off-by: neil.shi <neil.shi@quectel.com>
-Signed-off-by: Jan200101 <sentrycraft123@gmail.com>
---
- drivers/net/wireless/ath/ath11k/pci.c | 35 ++++++++++++++++++--------
- drivers/net/wireless/ath/ath11k/pcic.c | 11 ++++++++
- 2 files changed, 36 insertions(+), 10 deletions(-)
+ drivers/net/wireless/ath/ath11k/debugfs.c | 1 +
+ drivers/net/wireless/ath/ath11k/hw.h | 6 ++++
+ drivers/net/wireless/ath/ath11k/pci.c | 35 ++++++++++++++++-------
+ drivers/net/wireless/ath/ath11k/pcic.c | 11 +++++++
+ 4 files changed, 43 insertions(+), 10 deletions(-)
diff --git a/drivers/net/wireless/ath/ath11k/pci.c b/drivers/net/wireless/ath/ath11k/pci.c
-index 2fa4a99e7b08..88f11f6e47b7 100644
+index 61c8840a0559..798c1010b215 100644
--- a/drivers/net/wireless/ath/ath11k/pci.c
+++ b/drivers/net/wireless/ath/ath11k/pci.c
-@@ -110,7 +110,12 @@ static u32 ath11k_pci_window_read32(struct ath11k_base *ab, u32 offset)
+@@ -228,7 +228,12 @@ static u32 ath11k_pci_window_read32(struct ath11k_base *ab, u32 offset)
struct ath11k_pci *ab_pci = ath11k_pci_priv(ab);
u32 window_start, val;
-
+
- window_start = ath11k_pci_get_window_start(ab, offset);
+ if (ab->hw_params.static_window_map)
+ window_start = ath11k_pci_get_window_start(ab, offset);
@@ -622,19 +636,19 @@ index 2fa4a99e7b08..88f11f6e47b7 100644
+ window_start = ATH11K_PCI_WINDOW_START;
+
+ //window_start = ath11k_pci_get_window_start(ab, offset);
-
+
if (window_start == ATH11K_PCI_WINDOW_START) {
spin_lock_bh(&ab_pci->window_lock);
-@@ -735,6 +740,8 @@ static int ath11k_pci_probe(struct pci_dev *pdev,
+@@ -852,6 +857,8 @@ static int ath11k_pci_probe(struct pci_dev *pdev,
u32 soc_hw_version_major, soc_hw_version_minor, addr;
const struct ath11k_pci_ops *pci_ops;
int ret;
+ u32 sub_version;
+ int ops_init = 0;
-
+
ab = ath11k_core_alloc(&pdev->dev, sizeof(*ab_pci), ATH11K_BUS_PCI);
-
-@@ -781,8 +788,8 @@ static int ath11k_pci_probe(struct pci_dev *pdev,
+
+@@ -899,8 +906,8 @@ static int ath11k_pci_probe(struct pci_dev *pdev,
case QCA6390_DEVICE_ID:
ath11k_pci_read_hw_version(ab, &soc_hw_version_major,
&soc_hw_version_minor);
@@ -645,7 +659,7 @@ index 2fa4a99e7b08..88f11f6e47b7 100644
ab->hw_rev = ATH11K_HW_QCA6390_HW20;
break;
default:
-@@ -802,6 +809,13 @@ static int ath11k_pci_probe(struct pci_dev *pdev,
+@@ -920,6 +927,13 @@ static int ath11k_pci_probe(struct pci_dev *pdev,
ab->id.bdf_search = ATH11K_BDF_SEARCH_BUS_AND_BOARD;
ath11k_pci_read_hw_version(ab, &soc_hw_version_major,
&soc_hw_version_minor);
@@ -659,7 +673,7 @@ index 2fa4a99e7b08..88f11f6e47b7 100644
switch (soc_hw_version_major) {
case 2:
switch (soc_hw_version_minor) {
-@@ -812,7 +826,7 @@ static int ath11k_pci_probe(struct pci_dev *pdev,
+@@ -930,7 +944,7 @@ static int ath11k_pci_probe(struct pci_dev *pdev,
case 0x10:
case 0x11:
//ab->hw_rev = ATH11K_HW_WCN6855_HW21;
@@ -668,18 +682,18 @@ index 2fa4a99e7b08..88f11f6e47b7 100644
ath11k_dbg(ab, ATH11K_DBG_PCI, "sub_version 0x%x\n", sub_version);
switch (sub_version) {
case 0x1019A0E1:
-@@ -837,7 +851,6 @@ static int ath11k_pci_probe(struct pci_dev *pdev,
+@@ -955,7 +969,6 @@ static int ath11k_pci_probe(struct pci_dev *pdev,
goto err_pci_free_region;
}
-
+
- pci_ops = &ath11k_pci_ops_qca6390;
break;
default:
dev_err(&pdev->dev, "Unknown PCI device found: 0x%x\n",
-@@ -846,11 +859,13 @@ static int ath11k_pci_probe(struct pci_dev *pdev,
+@@ -964,11 +977,13 @@ static int ath11k_pci_probe(struct pci_dev *pdev,
goto err_pci_free_region;
}
-
+
- ret = ath11k_pcic_register_pci_ops(ab, pci_ops);
- if (ret) {
- ath11k_err(ab, "failed to register PCI ops: %d\n", ret);
@@ -692,11 +706,11 @@ index 2fa4a99e7b08..88f11f6e47b7 100644
+ goto err_pci_free_region;
+ }
+ }
-
+
ret = ath11k_pcic_init_msi_config(ab);
if (ret) {
diff --git a/drivers/net/wireless/ath/ath11k/pcic.c b/drivers/net/wireless/ath/ath11k/pcic.c
-index 16d1e332193f..406eef086836 100644
+index 063e97815455..82233e30c835 100644
--- a/drivers/net/wireless/ath/ath11k/pcic.c
+++ b/drivers/net/wireless/ath/ath11k/pcic.c
@@ -115,6 +115,17 @@ static const struct ath11k_msi_config ath11k_msi_config[] = {
@@ -715,21 +729,21 @@ index 16d1e332193f..406eef086836 100644
+ .hw_rev = ATH11K_HW_QCA206X_HW21,
+ },
};
-
- int ath11k_pcic_init_msi_config(struct ath11k_base *ab)
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+ int ath11k_pcic_init_msi_config(struct ath11k_base *ab)
+--
+GitLab
+From d4d6f1583876b3702603939ac41b98498cf6dd10 Mon Sep 17 00:00:00 2001
From: Thomas Crider <gloriouseggroll@gmail.com>
Date: Thu, 7 Dec 2023 17:22:18 -0500
Subject: [PATCH] wifi-fixup
-Signed-off-by: Jan200101 <sentrycraft123@gmail.com>
---
drivers/net/wireless/ath/ath11k/core.c | 7 ++-----
1 file changed, 2 insertions(+), 5 deletions(-)
diff --git a/drivers/net/wireless/ath/ath11k/core.c b/drivers/net/wireless/ath/ath11k/core.c
-index e3c55b1e792e..b286707af6e2 100644
+index 77daa0882..765b91e8d 100644
--- a/drivers/net/wireless/ath/ath11k/core.c
+++ b/drivers/net/wireless/ath/ath11k/core.c
@@ -420,7 +420,8 @@ static const struct ath11k_hw_params ath11k_hw_params[] = {
@@ -760,3 +774,40 @@ index e3c55b1e792e..b286707af6e2 100644
.single_pdev_only = true,
.rxdma1_enable = false,
.num_rxmda_per_pdev = 2,
+--
+2.43.0
+
+From d9790ec9e288931bd83c14dd24620c541945fbea Mon Sep 17 00:00:00 2001
+From: cnssbldsw <cnssbldsw@qualcomm.com>
+Date: Wed, 20 Dec 2023 14:55:54 +0800
+Subject: [PATCH] wifi: ath11k: fix firmware crash due to invalid nss
+
+Signed-off-by: cnssbldsw <cnssbldsw@qualcomm.com>
+(cherry picked from commit 1c2b795d3e39b17476a3fb5b028fec1375d5a323)
+---
+ drivers/net/wireless/ath/ath11k/mac.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/net/wireless/ath/ath11k/mac.c b/drivers/net/wireless/ath/ath11k/mac.c
+index e7b3b0dfe8f39..6bc6f4e9b03c7 100644
+--- a/drivers/net/wireless/ath/ath11k/mac.c
++++ b/drivers/net/wireless/ath/ath11k/mac.c
+@@ -2304,7 +2304,7 @@ static void ath11k_peer_assoc_h_he(struct ath11k *ar,
+ he_mcs_mask[i])
+ max_nss = i + 1;
+ }
+- arg->peer_nss = min(sta->deflink.rx_nss, max_nss);
++ arg->peer_nss = min(arg->peer_nss, (u32)max_nss);
+
+ if (arg->peer_phymode == MODE_11AX_HE160 ||
+ arg->peer_phymode == MODE_11AX_HE80_80) {
+@@ -4713,6 +4713,7 @@
+
+ nss = max_t(u32, 1, nss);
+ nss = min(nss, ath11k_mac_max_nss(ht_mcs_mask, vht_mcs_mask, he_mcs_mask));
++ nss = min(nss, (u32)ar->num_tx_chains);
+
+ if (changed & IEEE80211_RC_BW_CHANGED) {
+ /* Get the peer phymode */
+--
+GitLab
diff --git a/SOURCES/t2linux.patch b/SOURCES/t2linux.patch
index b254a1d..4313c53 100644
--- a/SOURCES/t2linux.patch
+++ b/SOURCES/t2linux.patch
@@ -1,6 +1,6 @@
-From 80093f92d42d77f27de6b204550baf4622070732 Mon Sep 17 00:00:00 2001
+From fb72b7575a091284a3e2bd0a955aa2c61a6f5bc4 Mon Sep 17 00:00:00 2001
From: Aditya Garg <gargaditya08@live.com>
-Date: Tue, 12 Sep 2023 12:26:12 +0530
+Date: Thu, 14 Mar 2024 06:51:34 +0000
Subject: [PATCH] Add apple-bce driver
---
@@ -8,7 +8,7 @@ Subject: [PATCH] Add apple-bce driver
drivers/staging/apple-bce/apple_bce.c | 443 ++++++++++
drivers/staging/apple-bce/apple_bce.h | 38 +
drivers/staging/apple-bce/audio/audio.c | 711 ++++++++++++++++
- drivers/staging/apple-bce/audio/audio.h | 123 +++
+ drivers/staging/apple-bce/audio/audio.h | 125 +++
drivers/staging/apple-bce/audio/description.h | 42 +
drivers/staging/apple-bce/audio/pcm.c | 308 +++++++
drivers/staging/apple-bce/audio/pcm.h | 16 +
@@ -26,10 +26,10 @@ Subject: [PATCH] Add apple-bce driver
drivers/staging/apple-bce/vhci/queue.c | 268 +++++++
drivers/staging/apple-bce/vhci/queue.h | 76 ++
drivers/staging/apple-bce/vhci/transfer.c | 661 +++++++++++++++
- drivers/staging/apple-bce/vhci/transfer.h | 71 ++
+ drivers/staging/apple-bce/vhci/transfer.h | 73 ++
drivers/staging/apple-bce/vhci/vhci.c | 759 ++++++++++++++++++
- drivers/staging/apple-bce/vhci/vhci.h | 48 ++
- 25 files changed, 5629 insertions(+)
+ drivers/staging/apple-bce/vhci/vhci.h | 52 ++
+ 25 files changed, 5637 insertions(+)
create mode 100644 drivers/staging/apple-bce/Makefile
create mode 100644 drivers/staging/apple-bce/apple_bce.c
create mode 100644 drivers/staging/apple-bce/apple_bce.h
@@ -1303,10 +1303,10 @@ index 000000000..bd16ddd16
+MODULE_PARM_DESC(id, "ID string for Apple Internal Audio soundcard.");
diff --git a/drivers/staging/apple-bce/audio/audio.h b/drivers/staging/apple-bce/audio/audio.h
new file mode 100644
-index 000000000..693006e93
+index 000000000..004bc1e22
--- /dev/null
+++ b/drivers/staging/apple-bce/audio/audio.h
-@@ -0,0 +1,123 @@
+@@ -0,0 +1,125 @@
+#ifndef AAUDIO_H
+#define AAUDIO_H
+
@@ -1422,6 +1422,8 @@ index 000000000..693006e93
+};
+
+void aaudio_handle_notification(struct aaudio_device *a, struct aaudio_msg *msg);
++void aaudio_handle_prop_change_work(struct work_struct *ws);
++void aaudio_handle_cmd_timestamp(struct aaudio_device *a, struct aaudio_msg *msg);
+void aaudio_handle_command(struct aaudio_device *a, struct aaudio_msg *msg);
+
+int aaudio_module_init(void);
@@ -4946,10 +4948,10 @@ index 000000000..8226363d6
+}
diff --git a/drivers/staging/apple-bce/vhci/transfer.h b/drivers/staging/apple-bce/vhci/transfer.h
new file mode 100644
-index 000000000..6a62a00b2
+index 000000000..89ecad6bc
--- /dev/null
+++ b/drivers/staging/apple-bce/vhci/transfer.h
-@@ -0,0 +1,71 @@
+@@ -0,0 +1,73 @@
+#ifndef BCEDRIVER_TRANSFER_H
+#define BCEDRIVER_TRANSFER_H
+
@@ -5013,6 +5015,8 @@ index 000000000..6a62a00b2
+ struct usb_host_endpoint *endp, bce_vhci_device_t dev_addr, enum dma_data_direction dir);
+void bce_vhci_destroy_transfer_queue(struct bce_vhci *vhci, struct bce_vhci_transfer_queue *q);
+void bce_vhci_transfer_queue_event(struct bce_vhci_transfer_queue *q, struct bce_vhci_message *msg);
++int bce_vhci_transfer_queue_do_pause(struct bce_vhci_transfer_queue *q);
++int bce_vhci_transfer_queue_do_resume(struct bce_vhci_transfer_queue *q);
+int bce_vhci_transfer_queue_pause(struct bce_vhci_transfer_queue *q, enum bce_vhci_pause_source src);
+int bce_vhci_transfer_queue_resume(struct bce_vhci_transfer_queue *q, enum bce_vhci_pause_source src);
+void bce_vhci_transfer_queue_request_reset(struct bce_vhci_transfer_queue *q);
@@ -5023,7 +5027,7 @@ index 000000000..6a62a00b2
+#endif //BCEDRIVER_TRANSFER_H
diff --git a/drivers/staging/apple-bce/vhci/vhci.c b/drivers/staging/apple-bce/vhci/vhci.c
new file mode 100644
-index 000000000..053a9f39e
+index 000000000..eb26f5500
--- /dev/null
+++ b/drivers/staging/apple-bce/vhci/vhci.c
@@ -0,0 +1,759 @@
@@ -5269,7 +5273,7 @@ index 000000000..053a9f39e
+ return 0;
+}
+
-+static int bce_vhci_address_device(struct usb_hcd *hcd, struct usb_device *udev)
++static int bce_vhci_address_device(struct usb_hcd *hcd, struct usb_device *udev, unsigned int timeout_ms) //TODO: follow timeout
+{
+ /* This is the same as enable_device, but instead in the old scheme */
+ return bce_vhci_enable_device(hcd, udev);
@@ -5788,10 +5792,10 @@ index 000000000..053a9f39e
+MODULE_PARM_DESC(vhci_port_mask, "Specifies which VHCI ports are enabled");
diff --git a/drivers/staging/apple-bce/vhci/vhci.h b/drivers/staging/apple-bce/vhci/vhci.h
new file mode 100644
-index 000000000..90641d1ba
+index 000000000..6c2e22622
--- /dev/null
+++ b/drivers/staging/apple-bce/vhci/vhci.h
-@@ -0,0 +1,48 @@
+@@ -0,0 +1,52 @@
+#ifndef BCE_VHCI_H
+#define BCE_VHCI_H
+
@@ -5838,10 +5842,14 @@ index 000000000..90641d1ba
+
+int bce_vhci_create(struct apple_bce_device *dev, struct bce_vhci *vhci);
+void bce_vhci_destroy(struct bce_vhci *vhci);
++int bce_vhci_start(struct usb_hcd *hcd);
++void bce_vhci_stop(struct usb_hcd *hcd);
++
++struct bce_vhci *bce_vhci_from_hcd(struct usb_hcd *hcd);
+
+#endif //BCE_VHCI_H
--
-2.39.2
+2.43.2
From dc27d4db5787546ae5eacf3483f3b87f2d4fb1c1 Mon Sep 17 00:00:00 2001
From: Redecorating <69827514+Redecorating@users.noreply.github.com>
@@ -7003,25 +7011,23 @@ index f98fb36ff..f881b19db 100644
{ }
};
-@@ -1883,6 +1883,17 @@
+@@ -1755,6 +1763,15 @@ static int mt_probe(struct hid_device *hdev, const struct hid_device_id *id)
}
}
+ ret = hid_parse(hdev);
-+ if (ret != 0) {
-+ unregister_pm_notifier(&td->pm_notifier);
++ if (ret != 0)
+ return ret;
-+ }
+
+ if (mtclass->name == MT_CLS_APPLE_TOUCHBAR &&
-+ !hid_find_field(hdev, HID_INPUT_REPORT,
-+ HID_DG_TOUCHPAD, HID_DG_TRANSDUCER_INDEX))
++ !hid_find_field(hdev, HID_INPUT_REPORT,
++ HID_DG_TOUCHPAD, HID_DG_TRANSDUCER_INDEX))
+ return -ENODEV;
+
td = devm_kzalloc(&hdev->dev, sizeof(struct mt_device), GFP_KERNEL);
if (!td) {
dev_err(&hdev->dev, "cannot allocate multitouch data\n");
-@@ -1933,12 +1944,6 @@
+@@ -1933,12 +1933,6 @@
timer_setup(&td->release_timer, mt_expired_timeout, 0);
@@ -7034,18 +7040,18 @@ index f98fb36ff..f881b19db 100644
if (mtclass->quirks & MT_QUIRK_FIX_CONST_CONTACT_ID)
mt_fix_const_fields(hdev, HID_DG_CONTACTID);
-@@ -2423,6 +2423,11 @@
- HID_DEVICE(HID_BUS_ANY, HID_GROUP_ANY,
- USB_VENDOR_ID_MICROSOFT, 0x09c0) },
+@@ -2417,6 +2417,11 @@
+ MT_USB_DEVICE(USB_VENDOR_ID_XIROKU,
+ USB_DEVICE_ID_XIROKU_CSR2) },
+ /* Apple Touch Bars */
+ { .driver_data = MT_CLS_APPLE_TOUCHBAR,
+ HID_USB_DEVICE(USB_VENDOR_ID_APPLE,
-+ USB_DEVICE_ID_APPLE_TOUCHBAR_DISPLAY) },
++ USB_DEVICE_ID_APPLE_TOUCHBAR_DISPLAY) },
+
- /* Google MT devices */
- { .driver_data = MT_CLS_GOOGLE,
- HID_DEVICE(HID_BUS_ANY, HID_GROUP_ANY, USB_VENDOR_ID_GOOGLE,
+ /* Microsoft Surface type cover */
+ { .driver_data = MT_CLS_WIN_8_MS_SURFACE_TYPE_COVER,
+ HID_DEVICE(HID_BUS_ANY, HID_GROUP_ANY,
--
2.42.0
@@ -7285,13 +7291,13 @@ index f58a0299f..dc0f86376 100644
* usb_driver_claim_interface - bind a driver to an interface
* @driver: the driver to be bound
@@ -1053,6 +1066,7 @@ int usb_register_driver(struct usb_driver *new_driver, struct module *owner,
- new_driver->drvwrap.driver.bus = &usb_bus_type;
- new_driver->drvwrap.driver.probe = usb_probe_interface;
- new_driver->drvwrap.driver.remove = usb_unbind_interface;
-+ new_driver->drvwrap.driver.shutdown = usb_shutdown_interface;
- new_driver->drvwrap.driver.owner = owner;
- new_driver->drvwrap.driver.mod_name = mod_name;
- new_driver->drvwrap.driver.dev_groups = new_driver->dev_groups;
+ new_driver->driver.bus = &usb_bus_type;
+ new_driver->driver.probe = usb_probe_interface;
+ new_driver->driver.remove = usb_unbind_interface;
++ new_driver->driver.shutdown = usb_shutdown_interface;
+ new_driver->driver.owner = owner;
+ new_driver->driver.mod_name = mod_name;
+ new_driver->driver.dev_groups = new_driver->dev_groups;
diff --git a/drivers/usb/storage/uas.c b/drivers/usb/storage/uas.c
index 2583ee981..591fa0379 100644
--- a/drivers/usb/storage/uas.c
@@ -7311,7 +7317,7 @@ index 2583ee981..591fa0379 100644
.suspend = uas_suspend,
.resume = uas_resume,
.reset_resume = uas_reset_resume,
-- .drvwrap.driver.shutdown = uas_shutdown,
+- .driver.shutdown = uas_shutdown,
+ .shutdown = uas_shutdown,
.id_table = uas_usb_ids,
};
@@ -7356,10 +7362,10 @@ Signed-off-by: Kerem Karabay <kekrby@gmail.com>
3 files changed, 125 insertions(+)
diff --git a/drivers/gpu/drm/drm_format_helper.c b/drivers/gpu/drm/drm_format_helper.c
-index f93a4efce..5508fbde1 100644
+index b1be458ed4dda5..24836384554a47 100644
--- a/drivers/gpu/drm/drm_format_helper.c
+++ b/drivers/gpu/drm/drm_format_helper.c
-@@ -601,6 +601,56 @@ void drm_fb_xrgb8888_to_rgb888(struct iosys_map *dst, const unsigned int *dst_pi
+@@ -702,6 +702,58 @@ void drm_fb_xrgb8888_to_rgb888(struct iosys_map *dst, const unsigned int *dst_pi
}
EXPORT_SYMBOL(drm_fb_xrgb8888_to_rgb888);
@@ -7387,6 +7393,7 @@ index f93a4efce..5508fbde1 100644
+ * @src: Array of XRGB8888 source buffers
+ * @fb: DRM framebuffer
+ * @clip: Clip rectangle area to copy
++ * @state: Transform and conversion state
+ *
+ * This function copies parts of a framebuffer to display memory and converts the
+ * color format during the process. Destination and framebuffer formats must match. The
@@ -7402,29 +7409,30 @@ index f93a4efce..5508fbde1 100644
+ */
+void drm_fb_xrgb8888_to_bgr888(struct iosys_map *dst, const unsigned int *dst_pitch,
+ const struct iosys_map *src, const struct drm_framebuffer *fb,
-+ const struct drm_rect *clip)
++ const struct drm_rect *clip,
++ struct drm_format_conv_state *state)
+{
+ static const u8 dst_pixsize[DRM_FORMAT_MAX_PLANES] = {
+ 3,
+ };
+
+ drm_fb_xfrm(dst, dst_pitch, dst_pixsize, src, fb, clip, false,
-+ drm_fb_xrgb8888_to_bgr888_line);
++ state, drm_fb_xrgb8888_to_bgr888_line);
+}
+EXPORT_SYMBOL(drm_fb_xrgb8888_to_bgr888);
+
static void drm_fb_xrgb8888_to_argb8888_line(void *dbuf, const void *sbuf, unsigned int pixels)
{
__le32 *dbuf32 = dbuf;
-@@ -925,6 +975,9 @@ int drm_fb_blit(struct iosys_map *dst, const unsigned int *dst_pitch, uint32_t d
+@@ -1035,6 +1087,9 @@ int drm_fb_blit(struct iosys_map *dst, const unsigned int *dst_pitch, uint32_t d
} else if (dst_format == DRM_FORMAT_RGB888) {
- drm_fb_xrgb8888_to_rgb888(dst, dst_pitch, src, fb, clip);
+ drm_fb_xrgb8888_to_rgb888(dst, dst_pitch, src, fb, clip, state);
return 0;
+ } else if (dst_format == DRM_FORMAT_BGR888) {
-+ drm_fb_xrgb8888_to_bgr888(dst, dst_pitch, src, fb, clip);
++ drm_fb_xrgb8888_to_bgr888(dst, dst_pitch, src, fb, clip, state);
+ return 0;
} else if (dst_format == DRM_FORMAT_ARGB8888) {
- drm_fb_xrgb8888_to_argb8888(dst, dst_pitch, src, fb, clip);
+ drm_fb_xrgb8888_to_argb8888(dst, dst_pitch, src, fb, clip, state);
return 0;
diff --git a/drivers/gpu/drm/tests/drm_format_helper_test.c b/drivers/gpu/drm/tests/drm_format_helper_test.c
index 474bb7a1c..dff7fabd9 100644
@@ -7506,55 +7514,6 @@ index 474bb7a1c..dff7fabd9 100644
.argb8888_result = {
.dst_pitch = 20,
.expected = {
-@@ -727,6 +761,40 @@ static void drm_test_fb_xrgb8888_to_rgb888(struct kunit *test)
- KUNIT_EXPECT_MEMEQ(test, buf, result->expected, dst_size);
- }
-
-+static void drm_test_fb_xrgb8888_to_bgr888(struct kunit *test)
-+{
-+ const struct convert_xrgb8888_case *params = test->param_value;
-+ const struct convert_to_bgr888_result *result = &params->bgr888_result;
-+ size_t dst_size;
-+ u8 *buf = NULL;
-+ __le32 *xrgb8888 = NULL;
-+ struct iosys_map dst, src;
-+
-+ struct drm_framebuffer fb = {
-+ .format = drm_format_info(DRM_FORMAT_XRGB8888),
-+ .pitches = { params->pitch, 0, 0 },
-+ };
-+
-+ dst_size = conversion_buf_size(DRM_FORMAT_BGR888, result->dst_pitch,
-+ &params->clip, 0);
-+ KUNIT_ASSERT_GT(test, dst_size, 0);
-+
-+ buf = kunit_kzalloc(test, dst_size, GFP_KERNEL);
-+ KUNIT_ASSERT_NOT_ERR_OR_NULL(test, buf);
-+ iosys_map_set_vaddr(&dst, buf);
-+
-+ xrgb8888 = cpubuf_to_le32(test, params->xrgb8888, TEST_BUF_SIZE);
-+ KUNIT_ASSERT_NOT_ERR_OR_NULL(test, xrgb8888);
-+ iosys_map_set_vaddr(&src, xrgb8888);
-+
-+ /*
-+ * BGR888 expected results are already in little-endian
-+ * order, so there's no need to convert the test output.
-+ */
-+ drm_fb_xrgb8888_to_bgr888(&dst, &result->dst_pitch, &src, &fb, &params->clip);
-+ KUNIT_EXPECT_MEMEQ(test, buf, result->expected, dst_size);
-+}
-+
- static void drm_test_fb_xrgb8888_to_argb8888(struct kunit *test)
- {
- const struct convert_xrgb8888_case *params = test->param_value;
-@@ -858,6 +926,7 @@ static struct kunit_case drm_format_helper_test_cases[] = {
- KUNIT_CASE_PARAM(drm_test_fb_xrgb8888_to_argb1555, convert_xrgb8888_gen_params),
- KUNIT_CASE_PARAM(drm_test_fb_xrgb8888_to_rgba5551, convert_xrgb8888_gen_params),
- KUNIT_CASE_PARAM(drm_test_fb_xrgb8888_to_rgb888, convert_xrgb8888_gen_params),
-+ KUNIT_CASE_PARAM(drm_test_fb_xrgb8888_to_bgr888, convert_xrgb8888_gen_params),
- KUNIT_CASE_PARAM(drm_test_fb_xrgb8888_to_argb8888, convert_xrgb8888_gen_params),
- KUNIT_CASE_PARAM(drm_test_fb_xrgb8888_to_xrgb2101010, convert_xrgb8888_gen_params),
- KUNIT_CASE_PARAM(drm_test_fb_xrgb8888_to_argb2101010, convert_xrgb8888_gen_params),
diff --git a/include/drm/drm_format_helper.h b/include/drm/drm_format_helper.h
index 291deb094..7fc553318 100644
--- a/include/drm/drm_format_helper.h
@@ -7562,13 +7521,13 @@ index 291deb094..7fc553318 100644
@@ -42,6 +42,9 @@ void drm_fb_xrgb8888_to_rgba5551(struct iosys_map *dst, const unsigned int *dst_
void drm_fb_xrgb8888_to_rgb888(struct iosys_map *dst, const unsigned int *dst_pitch,
const struct iosys_map *src, const struct drm_framebuffer *fb,
- const struct drm_rect *clip);
+ const struct drm_rect *clip, struct drm_format_conv_state *state);
+void drm_fb_xrgb8888_to_bgr888(struct iosys_map *dst, const unsigned int *dst_pitch,
+ const struct iosys_map *src, const struct drm_framebuffer *fb,
-+ const struct drm_rect *clip);
++ const struct drm_rect *clip, struct drm_format_conv_state *state);
void drm_fb_xrgb8888_to_argb8888(struct iosys_map *dst, const unsigned int *dst_pitch,
const struct iosys_map *src, const struct drm_framebuffer *fb,
- const struct drm_rect *clip);
+ const struct drm_rect *clip, struct drm_format_conv_state *state);
--
2.42.0
@@ -7603,7 +7562,7 @@ diff --git a/MAINTAINERS b/MAINTAINERS
index 519b3b736..dfc63d257 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
-@@ -6372,6 +6372,12 @@ S: Supported
+@@ -6545,6 +6545,12 @@
T: git git://anongit.freedesktop.org/drm/drm-misc
F: drivers/gpu/drm/sun4i/sun8i*
@@ -7614,8 +7573,8 @@ index 519b3b736..dfc63d257 100644
+F: drivers/gpu/drm/tiny/appletbdrm.c
+
DRM DRIVER FOR ARM PL111 CLCD
- M: Emma Anholt <emma@anholt.net>
- S: Supported
+ S: Orphan
+ T: git git://anongit.freedesktop.org/drm/drm-misc
diff --git a/drivers/gpu/drm/tiny/Kconfig b/drivers/gpu/drm/tiny/Kconfig
index f6889f649..559a97bce 100644
--- a/drivers/gpu/drm/tiny/Kconfig
@@ -8009,7 +7968,7 @@ index 000000000..33a99436b
+ frame->buf_size = cpu_to_le32(buf_size);
+
+ ret = drm_fb_blit(&dst, NULL, DRM_FORMAT_BGR888,
-+ &shadow_plane_state->data[0], fb, &damage);
++ &shadow_plane_state->data[0], fb, &damage, &shadow_plane_state->fmtcnv_state);
+ if (ret) {
+ drm_err(drm, "Failed to copy damage clip (%pe)\n", ERR_PTR(ret));
+ goto end_fb_cpu_access;
@@ -12048,3 +12007,4 @@ index 792adaf88..3ba90878c 100644
/**
--
2.37.2
+
diff --git a/SOURCES/tkg-prjc_v6.7-r2.patch b/SOURCES/tkg-prjc_v6.7-r2.patch
deleted file mode 100644
index 9d5b0ee..0000000
--- a/SOURCES/tkg-prjc_v6.7-r2.patch
+++ /dev/null
@@ -1,11478 +0,0 @@
-diff --git a/Documentation/admin-guide/sysctl/kernel.rst b/Documentation/admin-guide/sysctl/kernel.rst
-index 6584a1f9bfe3..226c79dd34cc 100644
---- a/Documentation/admin-guide/sysctl/kernel.rst
-+++ b/Documentation/admin-guide/sysctl/kernel.rst
-@@ -1646,3 +1646,13 @@ is 10 seconds.
-
- The softlockup threshold is (``2 * watchdog_thresh``). Setting this
- tunable to zero will disable lockup detection altogether.
-+
-+yield_type:
-+===========
-+
-+BMQ/PDS CPU scheduler only. This determines what type of yield calls
-+to sched_yield() will be performed.
-+
-+ 0 - No yield.
-+ 1 - Requeue task. (default)
-+ 2 - Set run queue skip task. Same as CFS.
-diff --git a/Documentation/scheduler/sched-BMQ.txt b/Documentation/scheduler/sched-BMQ.txt
-new file mode 100644
-index 000000000000..05c84eec0f31
---- /dev/null
-+++ b/Documentation/scheduler/sched-BMQ.txt
-@@ -0,0 +1,110 @@
-+ BitMap queue CPU Scheduler
-+ --------------------------
-+
-+CONTENT
-+========
-+
-+ Background
-+ Design
-+ Overview
-+ Task policy
-+ Priority management
-+ BitMap Queue
-+ CPU Assignment and Migration
-+
-+
-+Background
-+==========
-+
-+BitMap Queue CPU scheduler, referred to as BMQ from here on, is an evolution
-+of previous Priority and Deadline based Skiplist multiple queue scheduler(PDS),
-+and inspired by Zircon scheduler. The goal of it is to keep the scheduler code
-+simple, while efficiency and scalable for interactive tasks, such as desktop,
-+movie playback and gaming etc.
-+
-+Design
-+======
-+
-+Overview
-+--------
-+
-+BMQ use per CPU run queue design, each CPU(logical) has it's own run queue,
-+each CPU is responsible for scheduling the tasks that are putting into it's
-+run queue.
-+
-+The run queue is a set of priority queues. Note that these queues are fifo
-+queue for non-rt tasks or priority queue for rt tasks in data structure. See
-+BitMap Queue below for details. BMQ is optimized for non-rt tasks in the fact
-+that most applications are non-rt tasks. No matter the queue is fifo or
-+priority, In each queue is an ordered list of runnable tasks awaiting execution
-+and the data structures are the same. When it is time for a new task to run,
-+the scheduler simply looks the lowest numbered queueue that contains a task,
-+and runs the first task from the head of that queue. And per CPU idle task is
-+also in the run queue, so the scheduler can always find a task to run on from
-+its run queue.
-+
-+Each task will assigned the same timeslice(default 4ms) when it is picked to
-+start running. Task will be reinserted at the end of the appropriate priority
-+queue when it uses its whole timeslice. When the scheduler selects a new task
-+from the priority queue it sets the CPU's preemption timer for the remainder of
-+the previous timeslice. When that timer fires the scheduler will stop execution
-+on that task, select another task and start over again.
-+
-+If a task blocks waiting for a shared resource then it's taken out of its
-+priority queue and is placed in a wait queue for the shared resource. When it
-+is unblocked it will be reinserted in the appropriate priority queue of an
-+eligible CPU.
-+
-+Task policy
-+-----------
-+
-+BMQ supports DEADLINE, FIFO, RR, NORMAL, BATCH and IDLE task policy like the
-+mainline CFS scheduler. But BMQ is heavy optimized for non-rt task, that's
-+NORMAL/BATCH/IDLE policy tasks. Below is the implementation detail of each
-+policy.
-+
-+DEADLINE
-+ It is squashed as priority 0 FIFO task.
-+
-+FIFO/RR
-+ All RT tasks share one single priority queue in BMQ run queue designed. The
-+complexity of insert operation is O(n). BMQ is not designed for system runs
-+with major rt policy tasks.
-+
-+NORMAL/BATCH/IDLE
-+ BATCH and IDLE tasks are treated as the same policy. They compete CPU with
-+NORMAL policy tasks, but they just don't boost. To control the priority of
-+NORMAL/BATCH/IDLE tasks, simply use nice level.
-+
-+ISO
-+ ISO policy is not supported in BMQ. Please use nice level -20 NORMAL policy
-+task instead.
-+
-+Priority management
-+-------------------
-+
-+RT tasks have priority from 0-99. For non-rt tasks, there are three different
-+factors used to determine the effective priority of a task. The effective
-+priority being what is used to determine which queue it will be in.
-+
-+The first factor is simply the task’s static priority. Which is assigned from
-+task's nice level, within [-20, 19] in userland's point of view and [0, 39]
-+internally.
-+
-+The second factor is the priority boost. This is a value bounded between
-+[-MAX_PRIORITY_ADJ, MAX_PRIORITY_ADJ] used to offset the base priority, it is
-+modified by the following cases:
-+
-+*When a thread has used up its entire timeslice, always deboost its boost by
-+increasing by one.
-+*When a thread gives up cpu control(voluntary or non-voluntary) to reschedule,
-+and its switch-in time(time after last switch and run) below the thredhold
-+based on its priority boost, will boost its boost by decreasing by one buti is
-+capped at 0 (won’t go negative).
-+
-+The intent in this system is to ensure that interactive threads are serviced
-+quickly. These are usually the threads that interact directly with the user
-+and cause user-perceivable latency. These threads usually do little work and
-+spend most of their time blocked awaiting another user event. So they get the
-+priority boost from unblocking while background threads that do most of the
-+processing receive the priority penalty for using their entire timeslice.
-diff --git a/fs/proc/base.c b/fs/proc/base.c
-index dd31e3b6bf77..12d1248cb4df 100644
---- a/fs/proc/base.c
-+++ b/fs/proc/base.c
-@@ -480,7 +480,7 @@ static int proc_pid_schedstat(struct seq_file *m, struct pid_namespace *ns,
- seq_puts(m, "0 0 0\n");
- else
- seq_printf(m, "%llu %llu %lu\n",
-- (unsigned long long)task->se.sum_exec_runtime,
-+ (unsigned long long)tsk_seruntime(task),
- (unsigned long long)task->sched_info.run_delay,
- task->sched_info.pcount);
-
-diff --git a/include/asm-generic/resource.h b/include/asm-generic/resource.h
-index 8874f681b056..59eb72bf7d5f 100644
---- a/include/asm-generic/resource.h
-+++ b/include/asm-generic/resource.h
-@@ -23,7 +23,7 @@
- [RLIMIT_LOCKS] = { RLIM_INFINITY, RLIM_INFINITY }, \
- [RLIMIT_SIGPENDING] = { 0, 0 }, \
- [RLIMIT_MSGQUEUE] = { MQ_BYTES_MAX, MQ_BYTES_MAX }, \
-- [RLIMIT_NICE] = { 0, 0 }, \
-+ [RLIMIT_NICE] = { 30, 30 }, \
- [RLIMIT_RTPRIO] = { 0, 0 }, \
- [RLIMIT_RTTIME] = { RLIM_INFINITY, RLIM_INFINITY }, \
- }
-diff --git a/include/linux/sched.h b/include/linux/sched.h
-index 292c31697248..f5b026795dc6 100644
---- a/include/linux/sched.h
-+++ b/include/linux/sched.h
-@@ -769,8 +769,14 @@ struct task_struct {
- unsigned int ptrace;
-
- #ifdef CONFIG_SMP
-- int on_cpu;
- struct __call_single_node wake_entry;
-+#endif
-+#if defined(CONFIG_SMP) || defined(CONFIG_SCHED_ALT)
-+ int on_cpu;
-+#endif
-+
-+#ifdef CONFIG_SMP
-+#ifndef CONFIG_SCHED_ALT
- unsigned int wakee_flips;
- unsigned long wakee_flip_decay_ts;
- struct task_struct *last_wakee;
-@@ -784,6 +790,7 @@ struct task_struct {
- */
- int recent_used_cpu;
- int wake_cpu;
-+#endif /* !CONFIG_SCHED_ALT */
- #endif
- int on_rq;
-
-@@ -792,6 +799,20 @@ struct task_struct {
- int normal_prio;
- unsigned int rt_priority;
-
-+#ifdef CONFIG_SCHED_ALT
-+ u64 last_ran;
-+ s64 time_slice;
-+ int sq_idx;
-+ struct list_head sq_node;
-+#ifdef CONFIG_SCHED_BMQ
-+ int boost_prio;
-+#endif /* CONFIG_SCHED_BMQ */
-+#ifdef CONFIG_SCHED_PDS
-+ u64 deadline;
-+#endif /* CONFIG_SCHED_PDS */
-+ /* sched_clock time spent running */
-+ u64 sched_time;
-+#else /* !CONFIG_SCHED_ALT */
- struct sched_entity se;
- struct sched_rt_entity rt;
- struct sched_dl_entity dl;
-@@ -802,6 +823,7 @@ struct task_struct {
- unsigned long core_cookie;
- unsigned int core_occupation;
- #endif
-+#endif /* !CONFIG_SCHED_ALT */
-
- #ifdef CONFIG_CGROUP_SCHED
- struct task_group *sched_task_group;
-@@ -1561,6 +1583,15 @@ struct task_struct {
- */
- };
-
-+#ifdef CONFIG_SCHED_ALT
-+#define tsk_seruntime(t) ((t)->sched_time)
-+/* replace the uncertian rt_timeout with 0UL */
-+#define tsk_rttimeout(t) (0UL)
-+#else /* CFS */
-+#define tsk_seruntime(t) ((t)->se.sum_exec_runtime)
-+#define tsk_rttimeout(t) ((t)->rt.timeout)
-+#endif /* !CONFIG_SCHED_ALT */
-+
- static inline struct pid *task_pid(struct task_struct *task)
- {
- return task->thread_pid;
-diff --git a/include/linux/sched/deadline.h b/include/linux/sched/deadline.h
-index df3aca89d4f5..1df1f7635188 100644
---- a/include/linux/sched/deadline.h
-+++ b/include/linux/sched/deadline.h
-@@ -2,6 +2,25 @@
- #ifndef _LINUX_SCHED_DEADLINE_H
- #define _LINUX_SCHED_DEADLINE_H
-
-+#ifdef CONFIG_SCHED_ALT
-+
-+static inline int dl_task(struct task_struct *p)
-+{
-+ return 0;
-+}
-+
-+#ifdef CONFIG_SCHED_BMQ
-+#define __tsk_deadline(p) (0UL)
-+#endif
-+
-+#ifdef CONFIG_SCHED_PDS
-+#define __tsk_deadline(p) ((((u64) ((p)->prio))<<56) | (p)->deadline)
-+#endif
-+
-+#else
-+
-+#define __tsk_deadline(p) ((p)->dl.deadline)
-+
- /*
- * SCHED_DEADLINE tasks has negative priorities, reflecting
- * the fact that any of them has higher prio than RT and
-@@ -23,6 +42,7 @@ static inline int dl_task(struct task_struct *p)
- {
- return dl_prio(p->prio);
- }
-+#endif /* CONFIG_SCHED_ALT */
-
- static inline bool dl_time_before(u64 a, u64 b)
- {
-diff --git a/include/linux/sched/prio.h b/include/linux/sched/prio.h
-index ab83d85e1183..a9a1dfa99140 100644
---- a/include/linux/sched/prio.h
-+++ b/include/linux/sched/prio.h
-@@ -18,6 +18,32 @@
- #define MAX_PRIO (MAX_RT_PRIO + NICE_WIDTH)
- #define DEFAULT_PRIO (MAX_RT_PRIO + NICE_WIDTH / 2)
-
-+#ifdef CONFIG_SCHED_ALT
-+
-+/* Undefine MAX_PRIO and DEFAULT_PRIO */
-+#undef MAX_PRIO
-+#undef DEFAULT_PRIO
-+
-+/* +/- priority levels from the base priority */
-+#ifdef CONFIG_SCHED_BMQ
-+#define MAX_PRIORITY_ADJ (12)
-+
-+#define MIN_NORMAL_PRIO (MAX_RT_PRIO)
-+#define MAX_PRIO (MIN_NORMAL_PRIO + NICE_WIDTH)
-+#define DEFAULT_PRIO (MIN_NORMAL_PRIO + NICE_WIDTH / 2)
-+#endif
-+
-+#ifdef CONFIG_SCHED_PDS
-+#define MAX_PRIORITY_ADJ (0)
-+
-+#define MIN_NORMAL_PRIO (128)
-+#define NORMAL_PRIO_NUM (64)
-+#define MAX_PRIO (MIN_NORMAL_PRIO + NORMAL_PRIO_NUM)
-+#define DEFAULT_PRIO (MAX_PRIO - NICE_WIDTH / 2)
-+#endif
-+
-+#endif /* CONFIG_SCHED_ALT */
-+
- /*
- * Convert user-nice values [ -20 ... 0 ... 19 ]
- * to static priority [ MAX_RT_PRIO..MAX_PRIO-1 ],
-diff --git a/include/linux/sched/rt.h b/include/linux/sched/rt.h
-index b2b9e6eb9683..09bd4d8758b2 100644
---- a/include/linux/sched/rt.h
-+++ b/include/linux/sched/rt.h
-@@ -24,8 +24,10 @@ static inline bool task_is_realtime(struct task_struct *tsk)
-
- if (policy == SCHED_FIFO || policy == SCHED_RR)
- return true;
-+#ifndef CONFIG_SCHED_ALT
- if (policy == SCHED_DEADLINE)
- return true;
-+#endif
- return false;
- }
-
-diff --git a/include/linux/sched/topology.h b/include/linux/sched/topology.h
-index de545ba85218..941bb18ff72c 100644
---- a/include/linux/sched/topology.h
-+++ b/include/linux/sched/topology.h
-@@ -238,7 +238,8 @@ static inline bool cpus_share_resources(int this_cpu, int that_cpu)
-
- #endif /* !CONFIG_SMP */
-
--#if defined(CONFIG_ENERGY_MODEL) && defined(CONFIG_CPU_FREQ_GOV_SCHEDUTIL)
-+#if defined(CONFIG_ENERGY_MODEL) && defined(CONFIG_CPU_FREQ_GOV_SCHEDUTIL) && \
-+ !defined(CONFIG_SCHED_ALT)
- extern void rebuild_sched_domains_energy(void);
- #else
- static inline void rebuild_sched_domains_energy(void)
-diff --git a/init/Kconfig b/init/Kconfig
-index 9ffb103fc927..8f0b7eeff77e 100644
---- a/init/Kconfig
-+++ b/init/Kconfig
-@@ -629,6 +629,7 @@ config TASK_IO_ACCOUNTING
-
- config PSI
- bool "Pressure stall information tracking"
-+ depends on !SCHED_ALT
- select KERNFS
- help
- Collect metrics that indicate how overcommitted the CPU, memory,
-@@ -794,6 +795,7 @@ menu "Scheduler features"
- config UCLAMP_TASK
- bool "Enable utilization clamping for RT/FAIR tasks"
- depends on CPU_FREQ_GOV_SCHEDUTIL
-+ depends on !SCHED_ALT
- help
- This feature enables the scheduler to track the clamped utilization
- of each CPU based on RUNNABLE tasks scheduled on that CPU.
-@@ -840,6 +842,35 @@ config UCLAMP_BUCKETS_COUNT
-
- If in doubt, use the default value.
-
-+menuconfig SCHED_ALT
-+ bool "Alternative CPU Schedulers"
-+ default y
-+ help
-+ This feature enable alternative CPU scheduler"
-+
-+if SCHED_ALT
-+
-+choice
-+ prompt "Alternative CPU Scheduler"
-+ default SCHED_BMQ
-+
-+config SCHED_BMQ
-+ bool "BMQ CPU scheduler"
-+ help
-+ The BitMap Queue CPU scheduler for excellent interactivity and
-+ responsiveness on the desktop and solid scalability on normal
-+ hardware and commodity servers.
-+
-+config SCHED_PDS
-+ bool "PDS CPU scheduler"
-+ help
-+ The Priority and Deadline based Skip list multiple queue CPU
-+ Scheduler.
-+
-+endchoice
-+
-+endif
-+
- endmenu
-
- #
-@@ -893,6 +924,7 @@ config NUMA_BALANCING
- depends on ARCH_SUPPORTS_NUMA_BALANCING
- depends on !ARCH_WANT_NUMA_VARIABLE_LOCALITY
- depends on SMP && NUMA && MIGRATION && !PREEMPT_RT
-+ depends on !SCHED_ALT
- help
- This option adds support for automatic NUMA aware memory/task placement.
- The mechanism is quite primitive and is based on migrating memory when
-@@ -990,6 +1022,7 @@ config FAIR_GROUP_SCHED
- depends on CGROUP_SCHED
- default CGROUP_SCHED
-
-+if !SCHED_ALT
- config CFS_BANDWIDTH
- bool "CPU bandwidth provisioning for FAIR_GROUP_SCHED"
- depends on FAIR_GROUP_SCHED
-@@ -1012,6 +1045,7 @@ config RT_GROUP_SCHED
- realtime bandwidth for them.
- See Documentation/scheduler/sched-rt-group.rst for more information.
-
-+endif #!SCHED_ALT
- endif #CGROUP_SCHED
-
- config SCHED_MM_CID
-@@ -1260,6 +1294,7 @@ config CHECKPOINT_RESTORE
-
- config SCHED_AUTOGROUP
- bool "Automatic process group scheduling"
-+ depends on !SCHED_ALT
- select CGROUPS
- select CGROUP_SCHED
- select FAIR_GROUP_SCHED
-diff --git a/init/init_task.c b/init/init_task.c
-index 5727d42149c3..e2e2622d50d5 100644
---- a/init/init_task.c
-+++ b/init/init_task.c
-@@ -75,9 +75,15 @@ struct task_struct init_task
- .stack = init_stack,
- .usage = REFCOUNT_INIT(2),
- .flags = PF_KTHREAD,
-+#ifdef CONFIG_SCHED_ALT
-+ .prio = DEFAULT_PRIO + MAX_PRIORITY_ADJ,
-+ .static_prio = DEFAULT_PRIO,
-+ .normal_prio = DEFAULT_PRIO + MAX_PRIORITY_ADJ,
-+#else
- .prio = MAX_PRIO - 20,
- .static_prio = MAX_PRIO - 20,
- .normal_prio = MAX_PRIO - 20,
-+#endif
- .policy = SCHED_NORMAL,
- .cpus_ptr = &init_task.cpus_mask,
- .user_cpus_ptr = NULL,
-@@ -89,6 +95,17 @@ struct task_struct init_task
- .restart_block = {
- .fn = do_no_restart_syscall,
- },
-+#ifdef CONFIG_SCHED_ALT
-+ .sq_node = LIST_HEAD_INIT(init_task.sq_node),
-+#ifdef CONFIG_SCHED_BMQ
-+ .boost_prio = 0,
-+ .sq_idx = 15,
-+#endif
-+#ifdef CONFIG_SCHED_PDS
-+ .deadline = 0,
-+#endif
-+ .time_slice = HZ,
-+#else
- .se = {
- .group_node = LIST_HEAD_INIT(init_task.se.group_node),
- },
-@@ -96,6 +113,7 @@ struct task_struct init_task
- .run_list = LIST_HEAD_INIT(init_task.rt.run_list),
- .time_slice = RR_TIMESLICE,
- },
-+#endif
- .tasks = LIST_HEAD_INIT(init_task.tasks),
- #ifdef CONFIG_SMP
- .pushable_tasks = PLIST_NODE_INIT(init_task.pushable_tasks, MAX_PRIO),
-diff --git a/kernel/Kconfig.preempt b/kernel/Kconfig.preempt
-index c2f1fd95a821..41654679b1b2 100644
---- a/kernel/Kconfig.preempt
-+++ b/kernel/Kconfig.preempt
-@@ -117,7 +117,7 @@ config PREEMPT_DYNAMIC
-
- config SCHED_CORE
- bool "Core Scheduling for SMT"
-- depends on SCHED_SMT
-+ depends on SCHED_SMT && !SCHED_ALT
- help
- This option permits Core Scheduling, a means of coordinated task
- selection across SMT siblings. When enabled -- see
-diff --git a/kernel/cgroup/cpuset.c b/kernel/cgroup/cpuset.c
-index 615daaf87f1f..16fb54ec732c 100644
---- a/kernel/cgroup/cpuset.c
-+++ b/kernel/cgroup/cpuset.c
-@@ -848,7 +848,7 @@ static int validate_change(struct cpuset *cur, struct cpuset *trial)
- return ret;
- }
-
--#ifdef CONFIG_SMP
-+#if defined(CONFIG_SMP) && !defined(CONFIG_SCHED_ALT)
- /*
- * Helper routine for generate_sched_domains().
- * Do cpusets a, b have overlapping effective cpus_allowed masks?
-@@ -1247,7 +1247,7 @@ static void rebuild_sched_domains_locked(void)
- /* Have scheduler rebuild the domains */
- partition_and_rebuild_sched_domains(ndoms, doms, attr);
- }
--#else /* !CONFIG_SMP */
-+#else /* !CONFIG_SMP || CONFIG_SCHED_ALT */
- static void rebuild_sched_domains_locked(void)
- {
- }
-@@ -3206,12 +3206,15 @@ static int cpuset_can_attach(struct cgroup_taskset *tset)
- goto out_unlock;
- }
-
-+#ifndef CONFIG_SCHED_ALT
- if (dl_task(task)) {
- cs->nr_migrate_dl_tasks++;
- cs->sum_migrate_dl_bw += task->dl.dl_bw;
- }
-+#endif
- }
-
-+#ifndef CONFIG_SCHED_ALT
- if (!cs->nr_migrate_dl_tasks)
- goto out_success;
-
-@@ -3232,6 +3235,7 @@ static int cpuset_can_attach(struct cgroup_taskset *tset)
- }
-
- out_success:
-+#endif
- /*
- * Mark attach is in progress. This makes validate_change() fail
- * changes which zero cpus/mems_allowed.
-@@ -3255,12 +3259,14 @@ static void cpuset_cancel_attach(struct cgroup_taskset *tset)
- if (!cs->attach_in_progress)
- wake_up(&cpuset_attach_wq);
-
-+#ifndef CONFIG_SCHED_ALT
- if (cs->nr_migrate_dl_tasks) {
- int cpu = cpumask_any(cs->effective_cpus);
-
- dl_bw_free(cpu, cs->sum_migrate_dl_bw);
- reset_migrate_dl_data(cs);
- }
-+#endif
-
- mutex_unlock(&cpuset_mutex);
- }
-diff --git a/kernel/delayacct.c b/kernel/delayacct.c
-index 6f0c358e73d8..8111481ce8b1 100644
---- a/kernel/delayacct.c
-+++ b/kernel/delayacct.c
-@@ -150,7 +150,7 @@ int delayacct_add_tsk(struct taskstats *d, struct task_struct *tsk)
- */
- t1 = tsk->sched_info.pcount;
- t2 = tsk->sched_info.run_delay;
-- t3 = tsk->se.sum_exec_runtime;
-+ t3 = tsk_seruntime(tsk);
-
- d->cpu_count += t1;
-
-diff --git a/kernel/exit.c b/kernel/exit.c
-index aedc0832c9f4..ff8bf6cddc34 100644
---- a/kernel/exit.c
-+++ b/kernel/exit.c
-@@ -174,7 +174,7 @@ static void __exit_signal(struct task_struct *tsk)
- sig->curr_target = next_thread(tsk);
- }
-
-- add_device_randomness((const void*) &tsk->se.sum_exec_runtime,
-+ add_device_randomness((const void*) &tsk_seruntime(tsk),
- sizeof(unsigned long long));
-
- /*
-@@ -195,7 +195,7 @@ static void __exit_signal(struct task_struct *tsk)
- sig->inblock += task_io_get_inblock(tsk);
- sig->oublock += task_io_get_oublock(tsk);
- task_io_accounting_add(&sig->ioac, &tsk->ioac);
-- sig->sum_sched_runtime += tsk->se.sum_exec_runtime;
-+ sig->sum_sched_runtime += tsk_seruntime(tsk);
- sig->nr_threads--;
- __unhash_process(tsk, group_dead);
- write_sequnlock(&sig->stats_lock);
-diff --git a/kernel/locking/rtmutex.c b/kernel/locking/rtmutex.c
-index 4a10e8c16fd2..cfbbdd64b851 100644
---- a/kernel/locking/rtmutex.c
-+++ b/kernel/locking/rtmutex.c
-@@ -362,7 +362,7 @@ waiter_update_prio(struct rt_mutex_waiter *waiter, struct task_struct *task)
- lockdep_assert(RB_EMPTY_NODE(&waiter->tree.entry));
-
- waiter->tree.prio = __waiter_prio(task);
-- waiter->tree.deadline = task->dl.deadline;
-+ waiter->tree.deadline = __tsk_deadline(task);
- }
-
- /*
-@@ -383,16 +383,20 @@ waiter_clone_prio(struct rt_mutex_waiter *waiter, struct task_struct *task)
- * Only use with rt_waiter_node_{less,equal}()
- */
- #define task_to_waiter_node(p) \
-- &(struct rt_waiter_node){ .prio = __waiter_prio(p), .deadline = (p)->dl.deadline }
-+ &(struct rt_waiter_node){ .prio = __waiter_prio(p), .deadline = __tsk_deadline(p) }
- #define task_to_waiter(p) \
- &(struct rt_mutex_waiter){ .tree = *task_to_waiter_node(p) }
-
- static __always_inline int rt_waiter_node_less(struct rt_waiter_node *left,
- struct rt_waiter_node *right)
- {
-+#ifdef CONFIG_SCHED_PDS
-+ return (left->deadline < right->deadline);
-+#else
- if (left->prio < right->prio)
- return 1;
-
-+#ifndef CONFIG_SCHED_BMQ
- /*
- * If both waiters have dl_prio(), we check the deadlines of the
- * associated tasks.
-@@ -401,16 +405,22 @@ static __always_inline int rt_waiter_node_less(struct rt_waiter_node *left,
- */
- if (dl_prio(left->prio))
- return dl_time_before(left->deadline, right->deadline);
-+#endif
-
- return 0;
-+#endif
- }
-
- static __always_inline int rt_waiter_node_equal(struct rt_waiter_node *left,
- struct rt_waiter_node *right)
- {
-+#ifdef CONFIG_SCHED_PDS
-+ return (left->deadline == right->deadline);
-+#else
- if (left->prio != right->prio)
- return 0;
-
-+#ifndef CONFIG_SCHED_BMQ
- /*
- * If both waiters have dl_prio(), we check the deadlines of the
- * associated tasks.
-@@ -419,8 +429,10 @@ static __always_inline int rt_waiter_node_equal(struct rt_waiter_node *left,
- */
- if (dl_prio(left->prio))
- return left->deadline == right->deadline;
-+#endif
-
- return 1;
-+#endif
- }
-
- static inline bool rt_mutex_steal(struct rt_mutex_waiter *waiter,
-diff --git a/kernel/sched/Makefile b/kernel/sched/Makefile
-index 976092b7bd45..31d587c16ec1 100644
---- a/kernel/sched/Makefile
-+++ b/kernel/sched/Makefile
-@@ -28,7 +28,12 @@ endif
- # These compilation units have roughly the same size and complexity - so their
- # build parallelizes well and finishes roughly at once:
- #
-+ifdef CONFIG_SCHED_ALT
-+obj-y += alt_core.o
-+obj-$(CONFIG_SCHED_DEBUG) += alt_debug.o
-+else
- obj-y += core.o
- obj-y += fair.o
-+endif
- obj-y += build_policy.o
- obj-y += build_utility.o
-diff --git a/kernel/sched/alt_core.c b/kernel/sched/alt_core.c
-new file mode 100644
-index 000000000000..5b6bdff6e630
---- /dev/null
-+++ b/kernel/sched/alt_core.c
-@@ -0,0 +1,8944 @@
-+/*
-+ * kernel/sched/alt_core.c
-+ *
-+ * Core alternative kernel scheduler code and related syscalls
-+ *
-+ * Copyright (C) 1991-2002 Linus Torvalds
-+ *
-+ * 2009-08-13 Brainfuck deadline scheduling policy by Con Kolivas deletes
-+ * a whole lot of those previous things.
-+ * 2017-09-06 Priority and Deadline based Skip list multiple queue kernel
-+ * scheduler by Alfred Chen.
-+ * 2019-02-20 BMQ(BitMap Queue) kernel scheduler by Alfred Chen.
-+ */
-+#include <linux/sched/clock.h>
-+#include <linux/sched/cputime.h>
-+#include <linux/sched/debug.h>
-+#include <linux/sched/isolation.h>
-+#include <linux/sched/loadavg.h>
-+#include <linux/sched/mm.h>
-+#include <linux/sched/nohz.h>
-+#include <linux/sched/stat.h>
-+#include <linux/sched/wake_q.h>
-+
-+#include <linux/blkdev.h>
-+#include <linux/context_tracking.h>
-+#include <linux/cpuset.h>
-+#include <linux/delayacct.h>
-+#include <linux/init_task.h>
-+#include <linux/kcov.h>
-+#include <linux/kprobes.h>
-+#include <linux/nmi.h>
-+#include <linux/scs.h>
-+
-+#include <uapi/linux/sched/types.h>
-+
-+#include <asm/irq_regs.h>
-+#include <asm/switch_to.h>
-+
-+#define CREATE_TRACE_POINTS
-+#include <trace/events/sched.h>
-+#include <trace/events/ipi.h>
-+#undef CREATE_TRACE_POINTS
-+
-+#include "sched.h"
-+
-+#include "pelt.h"
-+
-+#include "../../io_uring/io-wq.h"
-+#include "../smpboot.h"
-+
-+EXPORT_TRACEPOINT_SYMBOL_GPL(ipi_send_cpu);
-+EXPORT_TRACEPOINT_SYMBOL_GPL(ipi_send_cpumask);
-+
-+/*
-+ * Export tracepoints that act as a bare tracehook (ie: have no trace event
-+ * associated with them) to allow external modules to probe them.
-+ */
-+EXPORT_TRACEPOINT_SYMBOL_GPL(pelt_irq_tp);
-+
-+#ifdef CONFIG_SCHED_DEBUG
-+#define sched_feat(x) (1)
-+/*
-+ * Print a warning if need_resched is set for the given duration (if
-+ * LATENCY_WARN is enabled).
-+ *
-+ * If sysctl_resched_latency_warn_once is set, only one warning will be shown
-+ * per boot.
-+ */
-+__read_mostly int sysctl_resched_latency_warn_ms = 100;
-+__read_mostly int sysctl_resched_latency_warn_once = 1;
-+#else
-+#define sched_feat(x) (0)
-+#endif /* CONFIG_SCHED_DEBUG */
-+
-+#define ALT_SCHED_VERSION "v6.7-r2"
-+
-+/*
-+ * Compile time debug macro
-+ * #define ALT_SCHED_DEBUG
-+ */
-+
-+/* rt_prio(prio) defined in include/linux/sched/rt.h */
-+#define rt_task(p) rt_prio((p)->prio)
-+#define rt_policy(policy) ((policy) == SCHED_FIFO || (policy) == SCHED_RR)
-+#define task_has_rt_policy(p) (rt_policy((p)->policy))
-+
-+#define STOP_PRIO (MAX_RT_PRIO - 1)
-+
-+/*
-+ * Time slice
-+ * (default: 4 msec, units: nanoseconds)
-+ */
-+unsigned int sysctl_sched_base_slice __read_mostly = (4 << 20);
-+
-+static inline void requeue_task(struct task_struct *p, struct rq *rq, int idx);
-+
-+#ifdef CONFIG_SCHED_BMQ
-+#include "bmq.h"
-+#endif
-+#ifdef CONFIG_SCHED_PDS
-+#include "pds.h"
-+#endif
-+
-+struct affinity_context {
-+ const struct cpumask *new_mask;
-+ struct cpumask *user_mask;
-+ unsigned int flags;
-+};
-+
-+/* Reschedule if less than this many μs left */
-+#define RESCHED_NS (100 << 10)
-+
-+/**
-+ * sched_yield_type - Type of sched_yield() will be performed.
-+ * 0: No yield.
-+ * 1: Requeue task. (default)
-+ * 2: Set rq skip task. (Same as mainline)
-+ */
-+int sched_yield_type __read_mostly = 1;
-+
-+#ifdef CONFIG_SMP
-+static cpumask_t sched_rq_pending_mask ____cacheline_aligned_in_smp;
-+
-+DEFINE_PER_CPU_ALIGNED(cpumask_t [NR_CPU_AFFINITY_LEVELS], sched_cpu_topo_masks);
-+DEFINE_PER_CPU_ALIGNED(cpumask_t *, sched_cpu_llc_mask);
-+DEFINE_PER_CPU_ALIGNED(cpumask_t *, sched_cpu_topo_end_mask);
-+
-+#ifdef CONFIG_SCHED_SMT
-+DEFINE_STATIC_KEY_FALSE(sched_smt_present);
-+EXPORT_SYMBOL_GPL(sched_smt_present);
-+#endif
-+
-+/*
-+ * Keep a unique ID per domain (we use the first CPUs number in the cpumask of
-+ * the domain), this allows us to quickly tell if two cpus are in the same cache
-+ * domain, see cpus_share_cache().
-+ */
-+DEFINE_PER_CPU(int, sd_llc_id);
-+#endif /* CONFIG_SMP */
-+
-+static DEFINE_MUTEX(sched_hotcpu_mutex);
-+
-+DEFINE_PER_CPU_SHARED_ALIGNED(struct rq, runqueues);
-+
-+#ifndef prepare_arch_switch
-+# define prepare_arch_switch(next) do { } while (0)
-+#endif
-+#ifndef finish_arch_post_lock_switch
-+# define finish_arch_post_lock_switch() do { } while (0)
-+#endif
-+
-+#ifdef CONFIG_SCHED_SMT
-+static cpumask_t sched_sg_idle_mask ____cacheline_aligned_in_smp;
-+#endif
-+static cpumask_t sched_preempt_mask[SCHED_QUEUE_BITS] ____cacheline_aligned_in_smp;
-+static cpumask_t *const sched_idle_mask = &sched_preempt_mask[0];
-+
-+/* task function */
-+static inline const struct cpumask *task_user_cpus(struct task_struct *p)
-+{
-+ if (!p->user_cpus_ptr)
-+ return cpu_possible_mask; /* &init_task.cpus_mask */
-+ return p->user_cpus_ptr;
-+}
-+
-+/* sched_queue related functions */
-+static inline void sched_queue_init(struct sched_queue *q)
-+{
-+ int i;
-+
-+ bitmap_zero(q->bitmap, SCHED_QUEUE_BITS);
-+ for(i = 0; i < SCHED_LEVELS; i++)
-+ INIT_LIST_HEAD(&q->heads[i]);
-+}
-+
-+/*
-+ * Init idle task and put into queue structure of rq
-+ * IMPORTANT: may be called multiple times for a single cpu
-+ */
-+static inline void sched_queue_init_idle(struct sched_queue *q,
-+ struct task_struct *idle)
-+{
-+ idle->sq_idx = IDLE_TASK_SCHED_PRIO;
-+ INIT_LIST_HEAD(&q->heads[idle->sq_idx]);
-+ list_add(&idle->sq_node, &q->heads[idle->sq_idx]);
-+}
-+
-+static inline void
-+clear_recorded_preempt_mask(int pr, int low, int high, int cpu)
-+{
-+ if (low < pr && pr <= high)
-+ cpumask_clear_cpu(cpu, sched_preempt_mask + SCHED_QUEUE_BITS - pr);
-+}
-+
-+static inline void
-+set_recorded_preempt_mask(int pr, int low, int high, int cpu)
-+{
-+ if (low < pr && pr <= high)
-+ cpumask_set_cpu(cpu, sched_preempt_mask + SCHED_QUEUE_BITS - pr);
-+}
-+
-+static atomic_t sched_prio_record = ATOMIC_INIT(0);
-+
-+/* water mark related functions */
-+static inline void update_sched_preempt_mask(struct rq *rq)
-+{
-+ unsigned long prio = find_first_bit(rq->queue.bitmap, SCHED_QUEUE_BITS);
-+ unsigned long last_prio = rq->prio;
-+ int cpu, pr;
-+
-+ if (prio == last_prio)
-+ return;
-+
-+ rq->prio = prio;
-+ cpu = cpu_of(rq);
-+ pr = atomic_read(&sched_prio_record);
-+
-+ if (prio < last_prio) {
-+ if (IDLE_TASK_SCHED_PRIO == last_prio) {
-+#ifdef CONFIG_SCHED_SMT
-+ if (static_branch_likely(&sched_smt_present))
-+ cpumask_andnot(&sched_sg_idle_mask,
-+ &sched_sg_idle_mask, cpu_smt_mask(cpu));
-+#endif
-+ cpumask_clear_cpu(cpu, sched_idle_mask);
-+ last_prio -= 2;
-+ }
-+ clear_recorded_preempt_mask(pr, prio, last_prio, cpu);
-+
-+ return;
-+ }
-+ /* last_prio < prio */
-+ if (IDLE_TASK_SCHED_PRIO == prio) {
-+#ifdef CONFIG_SCHED_SMT
-+ if (static_branch_likely(&sched_smt_present) &&
-+ cpumask_intersects(cpu_smt_mask(cpu), sched_idle_mask))
-+ cpumask_or(&sched_sg_idle_mask,
-+ &sched_sg_idle_mask, cpu_smt_mask(cpu));
-+#endif
-+ cpumask_set_cpu(cpu, sched_idle_mask);
-+ prio -= 2;
-+ }
-+ set_recorded_preempt_mask(pr, last_prio, prio, cpu);
-+}
-+
-+/*
-+ * This routine assume that the idle task always in queue
-+ */
-+static inline struct task_struct *sched_rq_first_task(struct rq *rq)
-+{
-+ const struct list_head *head = &rq->queue.heads[sched_prio2idx(rq->prio, rq)];
-+
-+ return list_first_entry(head, struct task_struct, sq_node);
-+}
-+
-+static inline struct task_struct *
-+sched_rq_next_task(struct task_struct *p, struct rq *rq)
-+{
-+ unsigned long idx = p->sq_idx;
-+ struct list_head *head = &rq->queue.heads[idx];
-+
-+ if (list_is_last(&p->sq_node, head)) {
-+ idx = find_next_bit(rq->queue.bitmap, SCHED_QUEUE_BITS,
-+ sched_idx2prio(idx, rq) + 1);
-+ head = &rq->queue.heads[sched_prio2idx(idx, rq)];
-+
-+ return list_first_entry(head, struct task_struct, sq_node);
-+ }
-+
-+ return list_next_entry(p, sq_node);
-+}
-+
-+static inline struct task_struct *rq_runnable_task(struct rq *rq)
-+{
-+ struct task_struct *next = sched_rq_first_task(rq);
-+
-+ if (unlikely(next == rq->skip))
-+ next = sched_rq_next_task(next, rq);
-+
-+ return next;
-+}
-+
-+/*
-+ * Serialization rules:
-+ *
-+ * Lock order:
-+ *
-+ * p->pi_lock
-+ * rq->lock
-+ * hrtimer_cpu_base->lock (hrtimer_start() for bandwidth controls)
-+ *
-+ * rq1->lock
-+ * rq2->lock where: rq1 < rq2
-+ *
-+ * Regular state:
-+ *
-+ * Normal scheduling state is serialized by rq->lock. __schedule() takes the
-+ * local CPU's rq->lock, it optionally removes the task from the runqueue and
-+ * always looks at the local rq data structures to find the most eligible task
-+ * to run next.
-+ *
-+ * Task enqueue is also under rq->lock, possibly taken from another CPU.
-+ * Wakeups from another LLC domain might use an IPI to transfer the enqueue to
-+ * the local CPU to avoid bouncing the runqueue state around [ see
-+ * ttwu_queue_wakelist() ]
-+ *
-+ * Task wakeup, specifically wakeups that involve migration, are horribly
-+ * complicated to avoid having to take two rq->locks.
-+ *
-+ * Special state:
-+ *
-+ * System-calls and anything external will use task_rq_lock() which acquires
-+ * both p->pi_lock and rq->lock. As a consequence the state they change is
-+ * stable while holding either lock:
-+ *
-+ * - sched_setaffinity()/
-+ * set_cpus_allowed_ptr(): p->cpus_ptr, p->nr_cpus_allowed
-+ * - set_user_nice(): p->se.load, p->*prio
-+ * - __sched_setscheduler(): p->sched_class, p->policy, p->*prio,
-+ * p->se.load, p->rt_priority,
-+ * p->dl.dl_{runtime, deadline, period, flags, bw, density}
-+ * - sched_setnuma(): p->numa_preferred_nid
-+ * - sched_move_task(): p->sched_task_group
-+ * - uclamp_update_active() p->uclamp*
-+ *
-+ * p->state <- TASK_*:
-+ *
-+ * is changed locklessly using set_current_state(), __set_current_state() or
-+ * set_special_state(), see their respective comments, or by
-+ * try_to_wake_up(). This latter uses p->pi_lock to serialize against
-+ * concurrent self.
-+ *
-+ * p->on_rq <- { 0, 1 = TASK_ON_RQ_QUEUED, 2 = TASK_ON_RQ_MIGRATING }:
-+ *
-+ * is set by activate_task() and cleared by deactivate_task(), under
-+ * rq->lock. Non-zero indicates the task is runnable, the special
-+ * ON_RQ_MIGRATING state is used for migration without holding both
-+ * rq->locks. It indicates task_cpu() is not stable, see task_rq_lock().
-+ *
-+ * p->on_cpu <- { 0, 1 }:
-+ *
-+ * is set by prepare_task() and cleared by finish_task() such that it will be
-+ * set before p is scheduled-in and cleared after p is scheduled-out, both
-+ * under rq->lock. Non-zero indicates the task is running on its CPU.
-+ *
-+ * [ The astute reader will observe that it is possible for two tasks on one
-+ * CPU to have ->on_cpu = 1 at the same time. ]
-+ *
-+ * task_cpu(p): is changed by set_task_cpu(), the rules are:
-+ *
-+ * - Don't call set_task_cpu() on a blocked task:
-+ *
-+ * We don't care what CPU we're not running on, this simplifies hotplug,
-+ * the CPU assignment of blocked tasks isn't required to be valid.
-+ *
-+ * - for try_to_wake_up(), called under p->pi_lock:
-+ *
-+ * This allows try_to_wake_up() to only take one rq->lock, see its comment.
-+ *
-+ * - for migration called under rq->lock:
-+ * [ see task_on_rq_migrating() in task_rq_lock() ]
-+ *
-+ * o move_queued_task()
-+ * o detach_task()
-+ *
-+ * - for migration called under double_rq_lock():
-+ *
-+ * o __migrate_swap_task()
-+ * o push_rt_task() / pull_rt_task()
-+ * o push_dl_task() / pull_dl_task()
-+ * o dl_task_offline_migration()
-+ *
-+ */
-+
-+/*
-+ * Context: p->pi_lock
-+ */
-+static inline struct rq
-+*__task_access_lock(struct task_struct *p, raw_spinlock_t **plock)
-+{
-+ struct rq *rq;
-+ for (;;) {
-+ rq = task_rq(p);
-+ if (p->on_cpu || task_on_rq_queued(p)) {
-+ raw_spin_lock(&rq->lock);
-+ if (likely((p->on_cpu || task_on_rq_queued(p))
-+ && rq == task_rq(p))) {
-+ *plock = &rq->lock;
-+ return rq;
-+ }
-+ raw_spin_unlock(&rq->lock);
-+ } else if (task_on_rq_migrating(p)) {
-+ do {
-+ cpu_relax();
-+ } while (unlikely(task_on_rq_migrating(p)));
-+ } else {
-+ *plock = NULL;
-+ return rq;
-+ }
-+ }
-+}
-+
-+static inline void
-+__task_access_unlock(struct task_struct *p, raw_spinlock_t *lock)
-+{
-+ if (NULL != lock)
-+ raw_spin_unlock(lock);
-+}
-+
-+static inline struct rq
-+*task_access_lock_irqsave(struct task_struct *p, raw_spinlock_t **plock,
-+ unsigned long *flags)
-+{
-+ struct rq *rq;
-+ for (;;) {
-+ rq = task_rq(p);
-+ if (p->on_cpu || task_on_rq_queued(p)) {
-+ raw_spin_lock_irqsave(&rq->lock, *flags);
-+ if (likely((p->on_cpu || task_on_rq_queued(p))
-+ && rq == task_rq(p))) {
-+ *plock = &rq->lock;
-+ return rq;
-+ }
-+ raw_spin_unlock_irqrestore(&rq->lock, *flags);
-+ } else if (task_on_rq_migrating(p)) {
-+ do {
-+ cpu_relax();
-+ } while (unlikely(task_on_rq_migrating(p)));
-+ } else {
-+ raw_spin_lock_irqsave(&p->pi_lock, *flags);
-+ if (likely(!p->on_cpu && !p->on_rq &&
-+ rq == task_rq(p))) {
-+ *plock = &p->pi_lock;
-+ return rq;
-+ }
-+ raw_spin_unlock_irqrestore(&p->pi_lock, *flags);
-+ }
-+ }
-+}
-+
-+static inline void
-+task_access_unlock_irqrestore(struct task_struct *p, raw_spinlock_t *lock,
-+ unsigned long *flags)
-+{
-+ raw_spin_unlock_irqrestore(lock, *flags);
-+}
-+
-+/*
-+ * __task_rq_lock - lock the rq @p resides on.
-+ */
-+struct rq *__task_rq_lock(struct task_struct *p, struct rq_flags *rf)
-+ __acquires(rq->lock)
-+{
-+ struct rq *rq;
-+
-+ lockdep_assert_held(&p->pi_lock);
-+
-+ for (;;) {
-+ rq = task_rq(p);
-+ raw_spin_lock(&rq->lock);
-+ if (likely(rq == task_rq(p) && !task_on_rq_migrating(p)))
-+ return rq;
-+ raw_spin_unlock(&rq->lock);
-+
-+ while (unlikely(task_on_rq_migrating(p)))
-+ cpu_relax();
-+ }
-+}
-+
-+/*
-+ * task_rq_lock - lock p->pi_lock and lock the rq @p resides on.
-+ */
-+struct rq *task_rq_lock(struct task_struct *p, struct rq_flags *rf)
-+ __acquires(p->pi_lock)
-+ __acquires(rq->lock)
-+{
-+ struct rq *rq;
-+
-+ for (;;) {
-+ raw_spin_lock_irqsave(&p->pi_lock, rf->flags);
-+ rq = task_rq(p);
-+ raw_spin_lock(&rq->lock);
-+ /*
-+ * move_queued_task() task_rq_lock()
-+ *
-+ * ACQUIRE (rq->lock)
-+ * [S] ->on_rq = MIGRATING [L] rq = task_rq()
-+ * WMB (__set_task_cpu()) ACQUIRE (rq->lock);
-+ * [S] ->cpu = new_cpu [L] task_rq()
-+ * [L] ->on_rq
-+ * RELEASE (rq->lock)
-+ *
-+ * If we observe the old CPU in task_rq_lock(), the acquire of
-+ * the old rq->lock will fully serialize against the stores.
-+ *
-+ * If we observe the new CPU in task_rq_lock(), the address
-+ * dependency headed by '[L] rq = task_rq()' and the acquire
-+ * will pair with the WMB to ensure we then also see migrating.
-+ */
-+ if (likely(rq == task_rq(p) && !task_on_rq_migrating(p))) {
-+ return rq;
-+ }
-+ raw_spin_unlock(&rq->lock);
-+ raw_spin_unlock_irqrestore(&p->pi_lock, rf->flags);
-+
-+ while (unlikely(task_on_rq_migrating(p)))
-+ cpu_relax();
-+ }
-+}
-+
-+static inline void
-+rq_lock_irqsave(struct rq *rq, struct rq_flags *rf)
-+ __acquires(rq->lock)
-+{
-+ raw_spin_lock_irqsave(&rq->lock, rf->flags);
-+}
-+
-+static inline void
-+rq_unlock_irqrestore(struct rq *rq, struct rq_flags *rf)
-+ __releases(rq->lock)
-+{
-+ raw_spin_unlock_irqrestore(&rq->lock, rf->flags);
-+}
-+
-+DEFINE_LOCK_GUARD_1(rq_lock_irqsave, struct rq,
-+ rq_lock_irqsave(_T->lock, &_T->rf),
-+ rq_unlock_irqrestore(_T->lock, &_T->rf),
-+ struct rq_flags rf)
-+
-+void raw_spin_rq_lock_nested(struct rq *rq, int subclass)
-+{
-+ raw_spinlock_t *lock;
-+
-+ /* Matches synchronize_rcu() in __sched_core_enable() */
-+ preempt_disable();
-+
-+ for (;;) {
-+ lock = __rq_lockp(rq);
-+ raw_spin_lock_nested(lock, subclass);
-+ if (likely(lock == __rq_lockp(rq))) {
-+ /* preempt_count *MUST* be > 1 */
-+ preempt_enable_no_resched();
-+ return;
-+ }
-+ raw_spin_unlock(lock);
-+ }
-+}
-+
-+void raw_spin_rq_unlock(struct rq *rq)
-+{
-+ raw_spin_unlock(rq_lockp(rq));
-+}
-+
-+/*
-+ * RQ-clock updating methods:
-+ */
-+
-+static void update_rq_clock_task(struct rq *rq, s64 delta)
-+{
-+/*
-+ * In theory, the compile should just see 0 here, and optimize out the call
-+ * to sched_rt_avg_update. But I don't trust it...
-+ */
-+ s64 __maybe_unused steal = 0, irq_delta = 0;
-+
-+#ifdef CONFIG_IRQ_TIME_ACCOUNTING
-+ irq_delta = irq_time_read(cpu_of(rq)) - rq->prev_irq_time;
-+
-+ /*
-+ * Since irq_time is only updated on {soft,}irq_exit, we might run into
-+ * this case when a previous update_rq_clock() happened inside a
-+ * {soft,}irq region.
-+ *
-+ * When this happens, we stop ->clock_task and only update the
-+ * prev_irq_time stamp to account for the part that fit, so that a next
-+ * update will consume the rest. This ensures ->clock_task is
-+ * monotonic.
-+ *
-+ * It does however cause some slight miss-attribution of {soft,}irq
-+ * time, a more accurate solution would be to update the irq_time using
-+ * the current rq->clock timestamp, except that would require using
-+ * atomic ops.
-+ */
-+ if (irq_delta > delta)
-+ irq_delta = delta;
-+
-+ rq->prev_irq_time += irq_delta;
-+ delta -= irq_delta;
-+ delayacct_irq(rq->curr, irq_delta);
-+#endif
-+#ifdef CONFIG_PARAVIRT_TIME_ACCOUNTING
-+ if (static_key_false((&paravirt_steal_rq_enabled))) {
-+ steal = paravirt_steal_clock(cpu_of(rq));
-+ steal -= rq->prev_steal_time_rq;
-+
-+ if (unlikely(steal > delta))
-+ steal = delta;
-+
-+ rq->prev_steal_time_rq += steal;
-+ delta -= steal;
-+ }
-+#endif
-+
-+ rq->clock_task += delta;
-+
-+#ifdef CONFIG_HAVE_SCHED_AVG_IRQ
-+ if ((irq_delta + steal))
-+ update_irq_load_avg(rq, irq_delta + steal);
-+#endif
-+}
-+
-+static inline void update_rq_clock(struct rq *rq)
-+{
-+ s64 delta = sched_clock_cpu(cpu_of(rq)) - rq->clock;
-+
-+ if (unlikely(delta <= 0))
-+ return;
-+ rq->clock += delta;
-+ sched_update_rq_clock(rq);
-+ update_rq_clock_task(rq, delta);
-+}
-+
-+/*
-+ * RQ Load update routine
-+ */
-+#define RQ_LOAD_HISTORY_BITS (sizeof(s32) * 8ULL)
-+#define RQ_UTIL_SHIFT (8)
-+#define RQ_LOAD_HISTORY_TO_UTIL(l) (((l) >> (RQ_LOAD_HISTORY_BITS - 1 - RQ_UTIL_SHIFT)) & 0xff)
-+
-+#define LOAD_BLOCK(t) ((t) >> 17)
-+#define LOAD_HALF_BLOCK(t) ((t) >> 16)
-+#define BLOCK_MASK(t) ((t) & ((0x01 << 18) - 1))
-+#define LOAD_BLOCK_BIT(b) (1UL << (RQ_LOAD_HISTORY_BITS - 1 - (b)))
-+#define CURRENT_LOAD_BIT LOAD_BLOCK_BIT(0)
-+
-+static inline void rq_load_update(struct rq *rq)
-+{
-+ u64 time = rq->clock;
-+ u64 delta = min(LOAD_BLOCK(time) - LOAD_BLOCK(rq->load_stamp),
-+ RQ_LOAD_HISTORY_BITS - 1);
-+ u64 prev = !!(rq->load_history & CURRENT_LOAD_BIT);
-+ u64 curr = !!rq->nr_running;
-+
-+ if (delta) {
-+ rq->load_history = rq->load_history >> delta;
-+
-+ if (delta < RQ_UTIL_SHIFT) {
-+ rq->load_block += (~BLOCK_MASK(rq->load_stamp)) * prev;
-+ if (!!LOAD_HALF_BLOCK(rq->load_block) ^ curr)
-+ rq->load_history ^= LOAD_BLOCK_BIT(delta);
-+ }
-+
-+ rq->load_block = BLOCK_MASK(time) * prev;
-+ } else {
-+ rq->load_block += (time - rq->load_stamp) * prev;
-+ }
-+ if (prev ^ curr)
-+ rq->load_history ^= CURRENT_LOAD_BIT;
-+ rq->load_stamp = time;
-+}
-+
-+unsigned long rq_load_util(struct rq *rq, unsigned long max)
-+{
-+ return RQ_LOAD_HISTORY_TO_UTIL(rq->load_history) * (max >> RQ_UTIL_SHIFT);
-+}
-+
-+#ifdef CONFIG_SMP
-+unsigned long sched_cpu_util(int cpu)
-+{
-+ return rq_load_util(cpu_rq(cpu), arch_scale_cpu_capacity(cpu));
-+}
-+#endif /* CONFIG_SMP */
-+
-+#ifdef CONFIG_CPU_FREQ
-+/**
-+ * cpufreq_update_util - Take a note about CPU utilization changes.
-+ * @rq: Runqueue to carry out the update for.
-+ * @flags: Update reason flags.
-+ *
-+ * This function is called by the scheduler on the CPU whose utilization is
-+ * being updated.
-+ *
-+ * It can only be called from RCU-sched read-side critical sections.
-+ *
-+ * The way cpufreq is currently arranged requires it to evaluate the CPU
-+ * performance state (frequency/voltage) on a regular basis to prevent it from
-+ * being stuck in a completely inadequate performance level for too long.
-+ * That is not guaranteed to happen if the updates are only triggered from CFS
-+ * and DL, though, because they may not be coming in if only RT tasks are
-+ * active all the time (or there are RT tasks only).
-+ *
-+ * As a workaround for that issue, this function is called periodically by the
-+ * RT sched class to trigger extra cpufreq updates to prevent it from stalling,
-+ * but that really is a band-aid. Going forward it should be replaced with
-+ * solutions targeted more specifically at RT tasks.
-+ */
-+static inline void cpufreq_update_util(struct rq *rq, unsigned int flags)
-+{
-+ struct update_util_data *data;
-+
-+#ifdef CONFIG_SMP
-+ rq_load_update(rq);
-+#endif
-+ data = rcu_dereference_sched(*per_cpu_ptr(&cpufreq_update_util_data,
-+ cpu_of(rq)));
-+ if (data)
-+ data->func(data, rq_clock(rq), flags);
-+}
-+#else
-+static inline void cpufreq_update_util(struct rq *rq, unsigned int flags)
-+{
-+#ifdef CONFIG_SMP
-+ rq_load_update(rq);
-+#endif
-+}
-+#endif /* CONFIG_CPU_FREQ */
-+
-+#ifdef CONFIG_NO_HZ_FULL
-+/*
-+ * Tick may be needed by tasks in the runqueue depending on their policy and
-+ * requirements. If tick is needed, lets send the target an IPI to kick it out
-+ * of nohz mode if necessary.
-+ */
-+static inline void sched_update_tick_dependency(struct rq *rq)
-+{
-+ int cpu = cpu_of(rq);
-+
-+ if (!tick_nohz_full_cpu(cpu))
-+ return;
-+
-+ if (rq->nr_running < 2)
-+ tick_nohz_dep_clear_cpu(cpu, TICK_DEP_BIT_SCHED);
-+ else
-+ tick_nohz_dep_set_cpu(cpu, TICK_DEP_BIT_SCHED);
-+}
-+#else /* !CONFIG_NO_HZ_FULL */
-+static inline void sched_update_tick_dependency(struct rq *rq) { }
-+#endif
-+
-+bool sched_task_on_rq(struct task_struct *p)
-+{
-+ return task_on_rq_queued(p);
-+}
-+
-+unsigned long get_wchan(struct task_struct *p)
-+{
-+ unsigned long ip = 0;
-+ unsigned int state;
-+
-+ if (!p || p == current)
-+ return 0;
-+
-+ /* Only get wchan if task is blocked and we can keep it that way. */
-+ raw_spin_lock_irq(&p->pi_lock);
-+ state = READ_ONCE(p->__state);
-+ smp_rmb(); /* see try_to_wake_up() */
-+ if (state != TASK_RUNNING && state != TASK_WAKING && !p->on_rq)
-+ ip = __get_wchan(p);
-+ raw_spin_unlock_irq(&p->pi_lock);
-+
-+ return ip;
-+}
-+
-+/*
-+ * Add/Remove/Requeue task to/from the runqueue routines
-+ * Context: rq->lock
-+ */
-+#define __SCHED_DEQUEUE_TASK(p, rq, flags, func) \
-+ sched_info_dequeue(rq, p); \
-+ \
-+ list_del(&p->sq_node); \
-+ if (list_empty(&rq->queue.heads[p->sq_idx])) { \
-+ clear_bit(sched_idx2prio(p->sq_idx, rq), rq->queue.bitmap); \
-+ func; \
-+ }
-+
-+#define __SCHED_ENQUEUE_TASK(p, rq, flags) \
-+ sched_info_enqueue(rq, p); \
-+ \
-+ p->sq_idx = task_sched_prio_idx(p, rq); \
-+ list_add_tail(&p->sq_node, &rq->queue.heads[p->sq_idx]); \
-+ set_bit(sched_idx2prio(p->sq_idx, rq), rq->queue.bitmap);
-+
-+static inline void dequeue_task(struct task_struct *p, struct rq *rq, int flags)
-+{
-+#ifdef ALT_SCHED_DEBUG
-+ lockdep_assert_held(&rq->lock);
-+
-+ /*printk(KERN_INFO "sched: dequeue(%d) %px %016llx\n", cpu_of(rq), p, p->deadline);*/
-+ WARN_ONCE(task_rq(p) != rq, "sched: dequeue task reside on cpu%d from cpu%d\n",
-+ task_cpu(p), cpu_of(rq));
-+#endif
-+
-+ __SCHED_DEQUEUE_TASK(p, rq, flags, update_sched_preempt_mask(rq));
-+ --rq->nr_running;
-+#ifdef CONFIG_SMP
-+ if (1 == rq->nr_running)
-+ cpumask_clear_cpu(cpu_of(rq), &sched_rq_pending_mask);
-+#endif
-+
-+ sched_update_tick_dependency(rq);
-+}
-+
-+static inline void enqueue_task(struct task_struct *p, struct rq *rq, int flags)
-+{
-+#ifdef ALT_SCHED_DEBUG
-+ lockdep_assert_held(&rq->lock);
-+
-+ /*printk(KERN_INFO "sched: enqueue(%d) %px %d\n", cpu_of(rq), p, p->prio);*/
-+ WARN_ONCE(task_rq(p) != rq, "sched: enqueue task reside on cpu%d to cpu%d\n",
-+ task_cpu(p), cpu_of(rq));
-+#endif
-+
-+ __SCHED_ENQUEUE_TASK(p, rq, flags);
-+ update_sched_preempt_mask(rq);
-+ ++rq->nr_running;
-+#ifdef CONFIG_SMP
-+ if (2 == rq->nr_running)
-+ cpumask_set_cpu(cpu_of(rq), &sched_rq_pending_mask);
-+#endif
-+
-+ sched_update_tick_dependency(rq);
-+}
-+
-+static inline void requeue_task(struct task_struct *p, struct rq *rq, int idx)
-+{
-+#ifdef ALT_SCHED_DEBUG
-+ lockdep_assert_held(&rq->lock);
-+ /*printk(KERN_INFO "sched: requeue(%d) %px %016llx\n", cpu_of(rq), p, p->deadline);*/
-+ WARN_ONCE(task_rq(p) != rq, "sched: cpu[%d] requeue task reside on cpu%d\n",
-+ cpu_of(rq), task_cpu(p));
-+#endif
-+
-+ list_del(&p->sq_node);
-+ list_add_tail(&p->sq_node, &rq->queue.heads[idx]);
-+ if (idx != p->sq_idx) {
-+ if (list_empty(&rq->queue.heads[p->sq_idx]))
-+ clear_bit(sched_idx2prio(p->sq_idx, rq), rq->queue.bitmap);
-+ p->sq_idx = idx;
-+ set_bit(sched_idx2prio(p->sq_idx, rq), rq->queue.bitmap);
-+ update_sched_preempt_mask(rq);
-+ }
-+}
-+
-+/*
-+ * cmpxchg based fetch_or, macro so it works for different integer types
-+ */
-+#define fetch_or(ptr, mask) \
-+ ({ \
-+ typeof(ptr) _ptr = (ptr); \
-+ typeof(mask) _mask = (mask); \
-+ typeof(*_ptr) _val = *_ptr; \
-+ \
-+ do { \
-+ } while (!try_cmpxchg(_ptr, &_val, _val | _mask)); \
-+ _val; \
-+})
-+
-+#if defined(CONFIG_SMP) && defined(TIF_POLLING_NRFLAG)
-+/*
-+ * Atomically set TIF_NEED_RESCHED and test for TIF_POLLING_NRFLAG,
-+ * this avoids any races wrt polling state changes and thereby avoids
-+ * spurious IPIs.
-+ */
-+static inline bool set_nr_and_not_polling(struct task_struct *p)
-+{
-+ struct thread_info *ti = task_thread_info(p);
-+ return !(fetch_or(&ti->flags, _TIF_NEED_RESCHED) & _TIF_POLLING_NRFLAG);
-+}
-+
-+/*
-+ * Atomically set TIF_NEED_RESCHED if TIF_POLLING_NRFLAG is set.
-+ *
-+ * If this returns true, then the idle task promises to call
-+ * sched_ttwu_pending() and reschedule soon.
-+ */
-+static bool set_nr_if_polling(struct task_struct *p)
-+{
-+ struct thread_info *ti = task_thread_info(p);
-+ typeof(ti->flags) val = READ_ONCE(ti->flags);
-+
-+ do {
-+ if (!(val & _TIF_POLLING_NRFLAG))
-+ return false;
-+ if (val & _TIF_NEED_RESCHED)
-+ return true;
-+ } while (!try_cmpxchg(&ti->flags, &val, val | _TIF_NEED_RESCHED));
-+
-+ return true;
-+}
-+
-+#else
-+static inline bool set_nr_and_not_polling(struct task_struct *p)
-+{
-+ set_tsk_need_resched(p);
-+ return true;
-+}
-+
-+#ifdef CONFIG_SMP
-+static inline bool set_nr_if_polling(struct task_struct *p)
-+{
-+ return false;
-+}
-+#endif
-+#endif
-+
-+static bool __wake_q_add(struct wake_q_head *head, struct task_struct *task)
-+{
-+ struct wake_q_node *node = &task->wake_q;
-+
-+ /*
-+ * Atomically grab the task, if ->wake_q is !nil already it means
-+ * it's already queued (either by us or someone else) and will get the
-+ * wakeup due to that.
-+ *
-+ * In order to ensure that a pending wakeup will observe our pending
-+ * state, even in the failed case, an explicit smp_mb() must be used.
-+ */
-+ smp_mb__before_atomic();
-+ if (unlikely(cmpxchg_relaxed(&node->next, NULL, WAKE_Q_TAIL)))
-+ return false;
-+
-+ /*
-+ * The head is context local, there can be no concurrency.
-+ */
-+ *head->lastp = node;
-+ head->lastp = &node->next;
-+ return true;
-+}
-+
-+/**
-+ * wake_q_add() - queue a wakeup for 'later' waking.
-+ * @head: the wake_q_head to add @task to
-+ * @task: the task to queue for 'later' wakeup
-+ *
-+ * Queue a task for later wakeup, most likely by the wake_up_q() call in the
-+ * same context, _HOWEVER_ this is not guaranteed, the wakeup can come
-+ * instantly.
-+ *
-+ * This function must be used as-if it were wake_up_process(); IOW the task
-+ * must be ready to be woken at this location.
-+ */
-+void wake_q_add(struct wake_q_head *head, struct task_struct *task)
-+{
-+ if (__wake_q_add(head, task))
-+ get_task_struct(task);
-+}
-+
-+/**
-+ * wake_q_add_safe() - safely queue a wakeup for 'later' waking.
-+ * @head: the wake_q_head to add @task to
-+ * @task: the task to queue for 'later' wakeup
-+ *
-+ * Queue a task for later wakeup, most likely by the wake_up_q() call in the
-+ * same context, _HOWEVER_ this is not guaranteed, the wakeup can come
-+ * instantly.
-+ *
-+ * This function must be used as-if it were wake_up_process(); IOW the task
-+ * must be ready to be woken at this location.
-+ *
-+ * This function is essentially a task-safe equivalent to wake_q_add(). Callers
-+ * that already hold reference to @task can call the 'safe' version and trust
-+ * wake_q to do the right thing depending whether or not the @task is already
-+ * queued for wakeup.
-+ */
-+void wake_q_add_safe(struct wake_q_head *head, struct task_struct *task)
-+{
-+ if (!__wake_q_add(head, task))
-+ put_task_struct(task);
-+}
-+
-+void wake_up_q(struct wake_q_head *head)
-+{
-+ struct wake_q_node *node = head->first;
-+
-+ while (node != WAKE_Q_TAIL) {
-+ struct task_struct *task;
-+
-+ task = container_of(node, struct task_struct, wake_q);
-+ /* task can safely be re-inserted now: */
-+ node = node->next;
-+ task->wake_q.next = NULL;
-+
-+ /*
-+ * wake_up_process() executes a full barrier, which pairs with
-+ * the queueing in wake_q_add() so as not to miss wakeups.
-+ */
-+ wake_up_process(task);
-+ put_task_struct(task);
-+ }
-+}
-+
-+/*
-+ * resched_curr - mark rq's current task 'to be rescheduled now'.
-+ *
-+ * On UP this means the setting of the need_resched flag, on SMP it
-+ * might also involve a cross-CPU call to trigger the scheduler on
-+ * the target CPU.
-+ */
-+void resched_curr(struct rq *rq)
-+{
-+ struct task_struct *curr = rq->curr;
-+ int cpu;
-+
-+ lockdep_assert_held(&rq->lock);
-+
-+ if (test_tsk_need_resched(curr))
-+ return;
-+
-+ cpu = cpu_of(rq);
-+ if (cpu == smp_processor_id()) {
-+ set_tsk_need_resched(curr);
-+ set_preempt_need_resched();
-+ return;
-+ }
-+
-+ if (set_nr_and_not_polling(curr))
-+ smp_send_reschedule(cpu);
-+ else
-+ trace_sched_wake_idle_without_ipi(cpu);
-+}
-+
-+void resched_cpu(int cpu)
-+{
-+ struct rq *rq = cpu_rq(cpu);
-+ unsigned long flags;
-+
-+ raw_spin_lock_irqsave(&rq->lock, flags);
-+ if (cpu_online(cpu) || cpu == smp_processor_id())
-+ resched_curr(cpu_rq(cpu));
-+ raw_spin_unlock_irqrestore(&rq->lock, flags);
-+}
-+
-+#ifdef CONFIG_SMP
-+#ifdef CONFIG_NO_HZ_COMMON
-+void nohz_balance_enter_idle(int cpu) {}
-+
-+void select_nohz_load_balancer(int stop_tick) {}
-+
-+void set_cpu_sd_state_idle(void) {}
-+
-+/*
-+ * In the semi idle case, use the nearest busy CPU for migrating timers
-+ * from an idle CPU. This is good for power-savings.
-+ *
-+ * We don't do similar optimization for completely idle system, as
-+ * selecting an idle CPU will add more delays to the timers than intended
-+ * (as that CPU's timer base may not be uptodate wrt jiffies etc).
-+ */
-+int get_nohz_timer_target(void)
-+{
-+ int i, cpu = smp_processor_id(), default_cpu = -1;
-+ struct cpumask *mask;
-+ const struct cpumask *hk_mask;
-+
-+ if (housekeeping_cpu(cpu, HK_TYPE_TIMER)) {
-+ if (!idle_cpu(cpu))
-+ return cpu;
-+ default_cpu = cpu;
-+ }
-+
-+ hk_mask = housekeeping_cpumask(HK_TYPE_TIMER);
-+
-+ for (mask = per_cpu(sched_cpu_topo_masks, cpu) + 1;
-+ mask < per_cpu(sched_cpu_topo_end_mask, cpu); mask++)
-+ for_each_cpu_and(i, mask, hk_mask)
-+ if (!idle_cpu(i))
-+ return i;
-+
-+ if (default_cpu == -1)
-+ default_cpu = housekeeping_any_cpu(HK_TYPE_TIMER);
-+ cpu = default_cpu;
-+
-+ return cpu;
-+}
-+
-+/*
-+ * When add_timer_on() enqueues a timer into the timer wheel of an
-+ * idle CPU then this timer might expire before the next timer event
-+ * which is scheduled to wake up that CPU. In case of a completely
-+ * idle system the next event might even be infinite time into the
-+ * future. wake_up_idle_cpu() ensures that the CPU is woken up and
-+ * leaves the inner idle loop so the newly added timer is taken into
-+ * account when the CPU goes back to idle and evaluates the timer
-+ * wheel for the next timer event.
-+ */
-+static inline void wake_up_idle_cpu(int cpu)
-+{
-+ struct rq *rq = cpu_rq(cpu);
-+
-+ if (cpu == smp_processor_id())
-+ return;
-+
-+ if (set_nr_and_not_polling(rq->idle))
-+ smp_send_reschedule(cpu);
-+ else
-+ trace_sched_wake_idle_without_ipi(cpu);
-+}
-+
-+static inline bool wake_up_full_nohz_cpu(int cpu)
-+{
-+ /*
-+ * We just need the target to call irq_exit() and re-evaluate
-+ * the next tick. The nohz full kick at least implies that.
-+ * If needed we can still optimize that later with an
-+ * empty IRQ.
-+ */
-+ if (cpu_is_offline(cpu))
-+ return true; /* Don't try to wake offline CPUs. */
-+ if (tick_nohz_full_cpu(cpu)) {
-+ if (cpu != smp_processor_id() ||
-+ tick_nohz_tick_stopped())
-+ tick_nohz_full_kick_cpu(cpu);
-+ return true;
-+ }
-+
-+ return false;
-+}
-+
-+void wake_up_nohz_cpu(int cpu)
-+{
-+ if (!wake_up_full_nohz_cpu(cpu))
-+ wake_up_idle_cpu(cpu);
-+}
-+
-+static void nohz_csd_func(void *info)
-+{
-+ struct rq *rq = info;
-+ int cpu = cpu_of(rq);
-+ unsigned int flags;
-+
-+ /*
-+ * Release the rq::nohz_csd.
-+ */
-+ flags = atomic_fetch_andnot(NOHZ_KICK_MASK, nohz_flags(cpu));
-+ WARN_ON(!(flags & NOHZ_KICK_MASK));
-+
-+ rq->idle_balance = idle_cpu(cpu);
-+ if (rq->idle_balance && !need_resched()) {
-+ rq->nohz_idle_balance = flags;
-+ raise_softirq_irqoff(SCHED_SOFTIRQ);
-+ }
-+}
-+
-+#endif /* CONFIG_NO_HZ_COMMON */
-+#endif /* CONFIG_SMP */
-+
-+static inline void wakeup_preempt(struct rq *rq)
-+{
-+ if (sched_rq_first_task(rq) != rq->curr)
-+ resched_curr(rq);
-+}
-+
-+static __always_inline
-+int __task_state_match(struct task_struct *p, unsigned int state)
-+{
-+ if (READ_ONCE(p->__state) & state)
-+ return 1;
-+
-+ if (READ_ONCE(p->saved_state) & state)
-+ return -1;
-+
-+ return 0;
-+}
-+
-+static __always_inline
-+int task_state_match(struct task_struct *p, unsigned int state)
-+{
-+ /*
-+ * Serialize against current_save_and_set_rtlock_wait_state(),
-+ * current_restore_rtlock_saved_state(), and __refrigerator().
-+ */
-+ guard(raw_spinlock_irq)(&p->pi_lock);
-+
-+ return __task_state_match(p, state);
-+}
-+
-+/*
-+ * wait_task_inactive - wait for a thread to unschedule.
-+ *
-+ * Wait for the thread to block in any of the states set in @match_state.
-+ * If it changes, i.e. @p might have woken up, then return zero. When we
-+ * succeed in waiting for @p to be off its CPU, we return a positive number
-+ * (its total switch count). If a second call a short while later returns the
-+ * same number, the caller can be sure that @p has remained unscheduled the
-+ * whole time.
-+ *
-+ * The caller must ensure that the task *will* unschedule sometime soon,
-+ * else this function might spin for a *long* time. This function can't
-+ * be called with interrupts off, or it may introduce deadlock with
-+ * smp_call_function() if an IPI is sent by the same process we are
-+ * waiting to become inactive.
-+ */
-+unsigned long wait_task_inactive(struct task_struct *p, unsigned int match_state)
-+{
-+ unsigned long flags;
-+ int running, queued, match;
-+ unsigned long ncsw;
-+ struct rq *rq;
-+ raw_spinlock_t *lock;
-+
-+ for (;;) {
-+ rq = task_rq(p);
-+
-+ /*
-+ * If the task is actively running on another CPU
-+ * still, just relax and busy-wait without holding
-+ * any locks.
-+ *
-+ * NOTE! Since we don't hold any locks, it's not
-+ * even sure that "rq" stays as the right runqueue!
-+ * But we don't care, since this will return false
-+ * if the runqueue has changed and p is actually now
-+ * running somewhere else!
-+ */
-+ while (task_on_cpu(p)) {
-+ if (!task_state_match(p, match_state))
-+ return 0;
-+ cpu_relax();
-+ }
-+
-+ /*
-+ * Ok, time to look more closely! We need the rq
-+ * lock now, to be *sure*. If we're wrong, we'll
-+ * just go back and repeat.
-+ */
-+ task_access_lock_irqsave(p, &lock, &flags);
-+ trace_sched_wait_task(p);
-+ running = task_on_cpu(p);
-+ queued = p->on_rq;
-+ ncsw = 0;
-+ if ((match = __task_state_match(p, match_state))) {
-+ /*
-+ * When matching on p->saved_state, consider this task
-+ * still queued so it will wait.
-+ */
-+ if (match < 0)
-+ queued = 1;
-+ ncsw = p->nvcsw | LONG_MIN; /* sets MSB */
-+ }
-+ task_access_unlock_irqrestore(p, lock, &flags);
-+
-+ /*
-+ * If it changed from the expected state, bail out now.
-+ */
-+ if (unlikely(!ncsw))
-+ break;
-+
-+ /*
-+ * Was it really running after all now that we
-+ * checked with the proper locks actually held?
-+ *
-+ * Oops. Go back and try again..
-+ */
-+ if (unlikely(running)) {
-+ cpu_relax();
-+ continue;
-+ }
-+
-+ /*
-+ * It's not enough that it's not actively running,
-+ * it must be off the runqueue _entirely_, and not
-+ * preempted!
-+ *
-+ * So if it was still runnable (but just not actively
-+ * running right now), it's preempted, and we should
-+ * yield - it could be a while.
-+ */
-+ if (unlikely(queued)) {
-+ ktime_t to = NSEC_PER_SEC / HZ;
-+
-+ set_current_state(TASK_UNINTERRUPTIBLE);
-+ schedule_hrtimeout(&to, HRTIMER_MODE_REL_HARD);
-+ continue;
-+ }
-+
-+ /*
-+ * Ahh, all good. It wasn't running, and it wasn't
-+ * runnable, which means that it will never become
-+ * running in the future either. We're all done!
-+ */
-+ break;
-+ }
-+
-+ return ncsw;
-+}
-+
-+#ifdef CONFIG_SCHED_HRTICK
-+/*
-+ * Use HR-timers to deliver accurate preemption points.
-+ */
-+
-+static void hrtick_clear(struct rq *rq)
-+{
-+ if (hrtimer_active(&rq->hrtick_timer))
-+ hrtimer_cancel(&rq->hrtick_timer);
-+}
-+
-+/*
-+ * High-resolution timer tick.
-+ * Runs from hardirq context with interrupts disabled.
-+ */
-+static enum hrtimer_restart hrtick(struct hrtimer *timer)
-+{
-+ struct rq *rq = container_of(timer, struct rq, hrtick_timer);
-+
-+ WARN_ON_ONCE(cpu_of(rq) != smp_processor_id());
-+
-+ raw_spin_lock(&rq->lock);
-+ resched_curr(rq);
-+ raw_spin_unlock(&rq->lock);
-+
-+ return HRTIMER_NORESTART;
-+}
-+
-+/*
-+ * Use hrtick when:
-+ * - enabled by features
-+ * - hrtimer is actually high res
-+ */
-+static inline int hrtick_enabled(struct rq *rq)
-+{
-+ /**
-+ * Alt schedule FW doesn't support sched_feat yet
-+ if (!sched_feat(HRTICK))
-+ return 0;
-+ */
-+ if (!cpu_active(cpu_of(rq)))
-+ return 0;
-+ return hrtimer_is_hres_active(&rq->hrtick_timer);
-+}
-+
-+#ifdef CONFIG_SMP
-+
-+static void __hrtick_restart(struct rq *rq)
-+{
-+ struct hrtimer *timer = &rq->hrtick_timer;
-+ ktime_t time = rq->hrtick_time;
-+
-+ hrtimer_start(timer, time, HRTIMER_MODE_ABS_PINNED_HARD);
-+}
-+
-+/*
-+ * called from hardirq (IPI) context
-+ */
-+static void __hrtick_start(void *arg)
-+{
-+ struct rq *rq = arg;
-+
-+ raw_spin_lock(&rq->lock);
-+ __hrtick_restart(rq);
-+ raw_spin_unlock(&rq->lock);
-+}
-+
-+/*
-+ * Called to set the hrtick timer state.
-+ *
-+ * called with rq->lock held and irqs disabled
-+ */
-+void hrtick_start(struct rq *rq, u64 delay)
-+{
-+ struct hrtimer *timer = &rq->hrtick_timer;
-+ s64 delta;
-+
-+ /*
-+ * Don't schedule slices shorter than 10000ns, that just
-+ * doesn't make sense and can cause timer DoS.
-+ */
-+ delta = max_t(s64, delay, 10000LL);
-+
-+ rq->hrtick_time = ktime_add_ns(timer->base->get_time(), delta);
-+
-+ if (rq == this_rq())
-+ __hrtick_restart(rq);
-+ else
-+ smp_call_function_single_async(cpu_of(rq), &rq->hrtick_csd);
-+}
-+
-+#else
-+/*
-+ * Called to set the hrtick timer state.
-+ *
-+ * called with rq->lock held and irqs disabled
-+ */
-+void hrtick_start(struct rq *rq, u64 delay)
-+{
-+ /*
-+ * Don't schedule slices shorter than 10000ns, that just
-+ * doesn't make sense. Rely on vruntime for fairness.
-+ */
-+ delay = max_t(u64, delay, 10000LL);
-+ hrtimer_start(&rq->hrtick_timer, ns_to_ktime(delay),
-+ HRTIMER_MODE_REL_PINNED_HARD);
-+}
-+#endif /* CONFIG_SMP */
-+
-+static void hrtick_rq_init(struct rq *rq)
-+{
-+#ifdef CONFIG_SMP
-+ INIT_CSD(&rq->hrtick_csd, __hrtick_start, rq);
-+#endif
-+
-+ hrtimer_init(&rq->hrtick_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL_HARD);
-+ rq->hrtick_timer.function = hrtick;
-+}
-+#else /* CONFIG_SCHED_HRTICK */
-+static inline int hrtick_enabled(struct rq *rq)
-+{
-+ return 0;
-+}
-+
-+static inline void hrtick_clear(struct rq *rq)
-+{
-+}
-+
-+static inline void hrtick_rq_init(struct rq *rq)
-+{
-+}
-+#endif /* CONFIG_SCHED_HRTICK */
-+
-+static inline int __normal_prio(int policy, int rt_prio, int static_prio)
-+{
-+ return rt_policy(policy) ? (MAX_RT_PRIO - 1 - rt_prio) :
-+ static_prio + MAX_PRIORITY_ADJ;
-+}
-+
-+/*
-+ * Calculate the expected normal priority: i.e. priority
-+ * without taking RT-inheritance into account. Might be
-+ * boosted by interactivity modifiers. Changes upon fork,
-+ * setprio syscalls, and whenever the interactivity
-+ * estimator recalculates.
-+ */
-+static inline int normal_prio(struct task_struct *p)
-+{
-+ return __normal_prio(p->policy, p->rt_priority, p->static_prio);
-+}
-+
-+/*
-+ * Calculate the current priority, i.e. the priority
-+ * taken into account by the scheduler. This value might
-+ * be boosted by RT tasks as it will be RT if the task got
-+ * RT-boosted. If not then it returns p->normal_prio.
-+ */
-+static int effective_prio(struct task_struct *p)
-+{
-+ p->normal_prio = normal_prio(p);
-+ /*
-+ * If we are RT tasks or we were boosted to RT priority,
-+ * keep the priority unchanged. Otherwise, update priority
-+ * to the normal priority:
-+ */
-+ if (!rt_prio(p->prio))
-+ return p->normal_prio;
-+ return p->prio;
-+}
-+
-+/*
-+ * activate_task - move a task to the runqueue.
-+ *
-+ * Context: rq->lock
-+ */
-+static void activate_task(struct task_struct *p, struct rq *rq)
-+{
-+ enqueue_task(p, rq, ENQUEUE_WAKEUP);
-+ p->on_rq = TASK_ON_RQ_QUEUED;
-+
-+ /*
-+ * If in_iowait is set, the code below may not trigger any cpufreq
-+ * utilization updates, so do it here explicitly with the IOWAIT flag
-+ * passed.
-+ */
-+ cpufreq_update_util(rq, SCHED_CPUFREQ_IOWAIT * p->in_iowait);
-+}
-+
-+/*
-+ * deactivate_task - remove a task from the runqueue.
-+ *
-+ * Context: rq->lock
-+ */
-+static inline void deactivate_task(struct task_struct *p, struct rq *rq)
-+{
-+ dequeue_task(p, rq, DEQUEUE_SLEEP);
-+ p->on_rq = 0;
-+ cpufreq_update_util(rq, 0);
-+}
-+
-+static inline void __set_task_cpu(struct task_struct *p, unsigned int cpu)
-+{
-+#ifdef CONFIG_SMP
-+ /*
-+ * After ->cpu is set up to a new value, task_access_lock(p, ...) can be
-+ * successfully executed on another CPU. We must ensure that updates of
-+ * per-task data have been completed by this moment.
-+ */
-+ smp_wmb();
-+
-+ WRITE_ONCE(task_thread_info(p)->cpu, cpu);
-+#endif
-+}
-+
-+static inline bool is_migration_disabled(struct task_struct *p)
-+{
-+#ifdef CONFIG_SMP
-+ return p->migration_disabled;
-+#else
-+ return false;
-+#endif
-+}
-+
-+#define SCA_CHECK 0x01
-+#define SCA_USER 0x08
-+
-+#ifdef CONFIG_SMP
-+
-+void set_task_cpu(struct task_struct *p, unsigned int new_cpu)
-+{
-+#ifdef CONFIG_SCHED_DEBUG
-+ unsigned int state = READ_ONCE(p->__state);
-+
-+ /*
-+ * We should never call set_task_cpu() on a blocked task,
-+ * ttwu() will sort out the placement.
-+ */
-+ WARN_ON_ONCE(state != TASK_RUNNING && state != TASK_WAKING && !p->on_rq);
-+
-+#ifdef CONFIG_LOCKDEP
-+ /*
-+ * The caller should hold either p->pi_lock or rq->lock, when changing
-+ * a task's CPU. ->pi_lock for waking tasks, rq->lock for runnable tasks.
-+ *
-+ * sched_move_task() holds both and thus holding either pins the cgroup,
-+ * see task_group().
-+ */
-+ WARN_ON_ONCE(debug_locks && !(lockdep_is_held(&p->pi_lock) ||
-+ lockdep_is_held(&task_rq(p)->lock)));
-+#endif
-+ /*
-+ * Clearly, migrating tasks to offline CPUs is a fairly daft thing.
-+ */
-+ WARN_ON_ONCE(!cpu_online(new_cpu));
-+
-+ WARN_ON_ONCE(is_migration_disabled(p));
-+#endif
-+ trace_sched_migrate_task(p, new_cpu);
-+
-+ if (task_cpu(p) != new_cpu)
-+ {
-+ rseq_migrate(p);
-+ perf_event_task_migrate(p);
-+ }
-+
-+ __set_task_cpu(p, new_cpu);
-+}
-+
-+#define MDF_FORCE_ENABLED 0x80
-+
-+static void
-+__do_set_cpus_ptr(struct task_struct *p, const struct cpumask *new_mask)
-+{
-+ /*
-+ * This here violates the locking rules for affinity, since we're only
-+ * supposed to change these variables while holding both rq->lock and
-+ * p->pi_lock.
-+ *
-+ * HOWEVER, it magically works, because ttwu() is the only code that
-+ * accesses these variables under p->pi_lock and only does so after
-+ * smp_cond_load_acquire(&p->on_cpu, !VAL), and we're in __schedule()
-+ * before finish_task().
-+ *
-+ * XXX do further audits, this smells like something putrid.
-+ */
-+ SCHED_WARN_ON(!p->on_cpu);
-+ p->cpus_ptr = new_mask;
-+}
-+
-+void migrate_disable(void)
-+{
-+ struct task_struct *p = current;
-+ int cpu;
-+
-+ if (p->migration_disabled) {
-+ p->migration_disabled++;
-+ return;
-+ }
-+
-+ guard(preempt)();
-+ cpu = smp_processor_id();
-+ if (cpumask_test_cpu(cpu, &p->cpus_mask)) {
-+ cpu_rq(cpu)->nr_pinned++;
-+ p->migration_disabled = 1;
-+ p->migration_flags &= ~MDF_FORCE_ENABLED;
-+
-+ /*
-+ * Violates locking rules! see comment in __do_set_cpus_ptr().
-+ */
-+ if (p->cpus_ptr == &p->cpus_mask)
-+ __do_set_cpus_ptr(p, cpumask_of(cpu));
-+ }
-+}
-+EXPORT_SYMBOL_GPL(migrate_disable);
-+
-+void migrate_enable(void)
-+{
-+ struct task_struct *p = current;
-+
-+ if (0 == p->migration_disabled)
-+ return;
-+
-+ if (p->migration_disabled > 1) {
-+ p->migration_disabled--;
-+ return;
-+ }
-+
-+ if (WARN_ON_ONCE(!p->migration_disabled))
-+ return;
-+
-+ /*
-+ * Ensure stop_task runs either before or after this, and that
-+ * __set_cpus_allowed_ptr(SCA_MIGRATE_ENABLE) doesn't schedule().
-+ */
-+ guard(preempt)();
-+ /*
-+ * Assumption: current should be running on allowed cpu
-+ */
-+ WARN_ON_ONCE(!cpumask_test_cpu(smp_processor_id(), &p->cpus_mask));
-+ if (p->cpus_ptr != &p->cpus_mask)
-+ __do_set_cpus_ptr(p, &p->cpus_mask);
-+ /*
-+ * Mustn't clear migration_disabled() until cpus_ptr points back at the
-+ * regular cpus_mask, otherwise things that race (eg.
-+ * select_fallback_rq) get confused.
-+ */
-+ barrier();
-+ p->migration_disabled = 0;
-+ this_rq()->nr_pinned--;
-+}
-+EXPORT_SYMBOL_GPL(migrate_enable);
-+
-+static inline bool rq_has_pinned_tasks(struct rq *rq)
-+{
-+ return rq->nr_pinned;
-+}
-+
-+/*
-+ * Per-CPU kthreads are allowed to run on !active && online CPUs, see
-+ * __set_cpus_allowed_ptr() and select_fallback_rq().
-+ */
-+static inline bool is_cpu_allowed(struct task_struct *p, int cpu)
-+{
-+ /* When not in the task's cpumask, no point in looking further. */
-+ if (!cpumask_test_cpu(cpu, p->cpus_ptr))
-+ return false;
-+
-+ /* migrate_disabled() must be allowed to finish. */
-+ if (is_migration_disabled(p))
-+ return cpu_online(cpu);
-+
-+ /* Non kernel threads are not allowed during either online or offline. */
-+ if (!(p->flags & PF_KTHREAD))
-+ return cpu_active(cpu) && task_cpu_possible(cpu, p);
-+
-+ /* KTHREAD_IS_PER_CPU is always allowed. */
-+ if (kthread_is_per_cpu(p))
-+ return cpu_online(cpu);
-+
-+ /* Regular kernel threads don't get to stay during offline. */
-+ if (cpu_dying(cpu))
-+ return false;
-+
-+ /* But are allowed during online. */
-+ return cpu_online(cpu);
-+}
-+
-+/*
-+ * This is how migration works:
-+ *
-+ * 1) we invoke migration_cpu_stop() on the target CPU using
-+ * stop_one_cpu().
-+ * 2) stopper starts to run (implicitly forcing the migrated thread
-+ * off the CPU)
-+ * 3) it checks whether the migrated task is still in the wrong runqueue.
-+ * 4) if it's in the wrong runqueue then the migration thread removes
-+ * it and puts it into the right queue.
-+ * 5) stopper completes and stop_one_cpu() returns and the migration
-+ * is done.
-+ */
-+
-+/*
-+ * move_queued_task - move a queued task to new rq.
-+ *
-+ * Returns (locked) new rq. Old rq's lock is released.
-+ */
-+static struct rq *move_queued_task(struct rq *rq, struct task_struct *p, int
-+ new_cpu)
-+{
-+ int src_cpu;
-+
-+ lockdep_assert_held(&rq->lock);
-+
-+ src_cpu = cpu_of(rq);
-+ WRITE_ONCE(p->on_rq, TASK_ON_RQ_MIGRATING);
-+ dequeue_task(p, rq, 0);
-+ set_task_cpu(p, new_cpu);
-+ raw_spin_unlock(&rq->lock);
-+
-+ rq = cpu_rq(new_cpu);
-+
-+ raw_spin_lock(&rq->lock);
-+ WARN_ON_ONCE(task_cpu(p) != new_cpu);
-+
-+ sched_mm_cid_migrate_to(rq, p, src_cpu);
-+
-+ sched_task_sanity_check(p, rq);
-+ enqueue_task(p, rq, 0);
-+ p->on_rq = TASK_ON_RQ_QUEUED;
-+ wakeup_preempt(rq);
-+
-+ return rq;
-+}
-+
-+struct migration_arg {
-+ struct task_struct *task;
-+ int dest_cpu;
-+};
-+
-+/*
-+ * Move (not current) task off this CPU, onto the destination CPU. We're doing
-+ * this because either it can't run here any more (set_cpus_allowed()
-+ * away from this CPU, or CPU going down), or because we're
-+ * attempting to rebalance this task on exec (sched_exec).
-+ *
-+ * So we race with normal scheduler movements, but that's OK, as long
-+ * as the task is no longer on this CPU.
-+ */
-+static struct rq *__migrate_task(struct rq *rq, struct task_struct *p, int
-+ dest_cpu)
-+{
-+ /* Affinity changed (again). */
-+ if (!is_cpu_allowed(p, dest_cpu))
-+ return rq;
-+
-+ return move_queued_task(rq, p, dest_cpu);
-+}
-+
-+/*
-+ * migration_cpu_stop - this will be executed by a highprio stopper thread
-+ * and performs thread migration by bumping thread off CPU then
-+ * 'pushing' onto another runqueue.
-+ */
-+static int migration_cpu_stop(void *data)
-+{
-+ struct migration_arg *arg = data;
-+ struct task_struct *p = arg->task;
-+ struct rq *rq = this_rq();
-+ unsigned long flags;
-+
-+ /*
-+ * The original target CPU might have gone down and we might
-+ * be on another CPU but it doesn't matter.
-+ */
-+ local_irq_save(flags);
-+ /*
-+ * We need to explicitly wake pending tasks before running
-+ * __migrate_task() such that we will not miss enforcing cpus_ptr
-+ * during wakeups, see set_cpus_allowed_ptr()'s TASK_WAKING test.
-+ */
-+ flush_smp_call_function_queue();
-+
-+ raw_spin_lock(&p->pi_lock);
-+ raw_spin_lock(&rq->lock);
-+ /*
-+ * If task_rq(p) != rq, it cannot be migrated here, because we're
-+ * holding rq->lock, if p->on_rq == 0 it cannot get enqueued because
-+ * we're holding p->pi_lock.
-+ */
-+ if (task_rq(p) == rq && task_on_rq_queued(p)) {
-+ update_rq_clock(rq);
-+ rq = __migrate_task(rq, p, arg->dest_cpu);
-+ }
-+ raw_spin_unlock(&rq->lock);
-+ raw_spin_unlock_irqrestore(&p->pi_lock, flags);
-+
-+ return 0;
-+}
-+
-+static inline void
-+set_cpus_allowed_common(struct task_struct *p, struct affinity_context *ctx)
-+{
-+ cpumask_copy(&p->cpus_mask, ctx->new_mask);
-+ p->nr_cpus_allowed = cpumask_weight(ctx->new_mask);
-+
-+ /*
-+ * Swap in a new user_cpus_ptr if SCA_USER flag set
-+ */
-+ if (ctx->flags & SCA_USER)
-+ swap(p->user_cpus_ptr, ctx->user_mask);
-+}
-+
-+static void
-+__do_set_cpus_allowed(struct task_struct *p, struct affinity_context *ctx)
-+{
-+ lockdep_assert_held(&p->pi_lock);
-+ set_cpus_allowed_common(p, ctx);
-+}
-+
-+/*
-+ * Used for kthread_bind() and select_fallback_rq(), in both cases the user
-+ * affinity (if any) should be destroyed too.
-+ */
-+void do_set_cpus_allowed(struct task_struct *p, const struct cpumask *new_mask)
-+{
-+ struct affinity_context ac = {
-+ .new_mask = new_mask,
-+ .user_mask = NULL,
-+ .flags = SCA_USER, /* clear the user requested mask */
-+ };
-+ union cpumask_rcuhead {
-+ cpumask_t cpumask;
-+ struct rcu_head rcu;
-+ };
-+
-+ __do_set_cpus_allowed(p, &ac);
-+
-+ /*
-+ * Because this is called with p->pi_lock held, it is not possible
-+ * to use kfree() here (when PREEMPT_RT=y), therefore punt to using
-+ * kfree_rcu().
-+ */
-+ kfree_rcu((union cpumask_rcuhead *)ac.user_mask, rcu);
-+}
-+
-+static cpumask_t *alloc_user_cpus_ptr(int node)
-+{
-+ /*
-+ * See do_set_cpus_allowed() above for the rcu_head usage.
-+ */
-+ int size = max_t(int, cpumask_size(), sizeof(struct rcu_head));
-+
-+ return kmalloc_node(size, GFP_KERNEL, node);
-+}
-+
-+int dup_user_cpus_ptr(struct task_struct *dst, struct task_struct *src,
-+ int node)
-+{
-+ cpumask_t *user_mask;
-+ unsigned long flags;
-+
-+ /*
-+ * Always clear dst->user_cpus_ptr first as their user_cpus_ptr's
-+ * may differ by now due to racing.
-+ */
-+ dst->user_cpus_ptr = NULL;
-+
-+ /*
-+ * This check is racy and losing the race is a valid situation.
-+ * It is not worth the extra overhead of taking the pi_lock on
-+ * every fork/clone.
-+ */
-+ if (data_race(!src->user_cpus_ptr))
-+ return 0;
-+
-+ user_mask = alloc_user_cpus_ptr(node);
-+ if (!user_mask)
-+ return -ENOMEM;
-+
-+ /*
-+ * Use pi_lock to protect content of user_cpus_ptr
-+ *
-+ * Though unlikely, user_cpus_ptr can be reset to NULL by a concurrent
-+ * do_set_cpus_allowed().
-+ */
-+ raw_spin_lock_irqsave(&src->pi_lock, flags);
-+ if (src->user_cpus_ptr) {
-+ swap(dst->user_cpus_ptr, user_mask);
-+ cpumask_copy(dst->user_cpus_ptr, src->user_cpus_ptr);
-+ }
-+ raw_spin_unlock_irqrestore(&src->pi_lock, flags);
-+
-+ if (unlikely(user_mask))
-+ kfree(user_mask);
-+
-+ return 0;
-+}
-+
-+static inline struct cpumask *clear_user_cpus_ptr(struct task_struct *p)
-+{
-+ struct cpumask *user_mask = NULL;
-+
-+ swap(p->user_cpus_ptr, user_mask);
-+
-+ return user_mask;
-+}
-+
-+void release_user_cpus_ptr(struct task_struct *p)
-+{
-+ kfree(clear_user_cpus_ptr(p));
-+}
-+
-+#endif
-+
-+/**
-+ * task_curr - is this task currently executing on a CPU?
-+ * @p: the task in question.
-+ *
-+ * Return: 1 if the task is currently executing. 0 otherwise.
-+ */
-+inline int task_curr(const struct task_struct *p)
-+{
-+ return cpu_curr(task_cpu(p)) == p;
-+}
-+
-+#ifdef CONFIG_SMP
-+/***
-+ * kick_process - kick a running thread to enter/exit the kernel
-+ * @p: the to-be-kicked thread
-+ *
-+ * Cause a process which is running on another CPU to enter
-+ * kernel-mode, without any delay. (to get signals handled.)
-+ *
-+ * NOTE: this function doesn't have to take the runqueue lock,
-+ * because all it wants to ensure is that the remote task enters
-+ * the kernel. If the IPI races and the task has been migrated
-+ * to another CPU then no harm is done and the purpose has been
-+ * achieved as well.
-+ */
-+void kick_process(struct task_struct *p)
-+{
-+ guard(preempt)();
-+ int cpu = task_cpu(p);
-+
-+ if ((cpu != smp_processor_id()) && task_curr(p))
-+ smp_send_reschedule(cpu);
-+}
-+EXPORT_SYMBOL_GPL(kick_process);
-+
-+/*
-+ * ->cpus_ptr is protected by both rq->lock and p->pi_lock
-+ *
-+ * A few notes on cpu_active vs cpu_online:
-+ *
-+ * - cpu_active must be a subset of cpu_online
-+ *
-+ * - on CPU-up we allow per-CPU kthreads on the online && !active CPU,
-+ * see __set_cpus_allowed_ptr(). At this point the newly online
-+ * CPU isn't yet part of the sched domains, and balancing will not
-+ * see it.
-+ *
-+ * - on cpu-down we clear cpu_active() to mask the sched domains and
-+ * avoid the load balancer to place new tasks on the to be removed
-+ * CPU. Existing tasks will remain running there and will be taken
-+ * off.
-+ *
-+ * This means that fallback selection must not select !active CPUs.
-+ * And can assume that any active CPU must be online. Conversely
-+ * select_task_rq() below may allow selection of !active CPUs in order
-+ * to satisfy the above rules.
-+ */
-+static int select_fallback_rq(int cpu, struct task_struct *p)
-+{
-+ int nid = cpu_to_node(cpu);
-+ const struct cpumask *nodemask = NULL;
-+ enum { cpuset, possible, fail } state = cpuset;
-+ int dest_cpu;
-+
-+ /*
-+ * If the node that the CPU is on has been offlined, cpu_to_node()
-+ * will return -1. There is no CPU on the node, and we should
-+ * select the CPU on the other node.
-+ */
-+ if (nid != -1) {
-+ nodemask = cpumask_of_node(nid);
-+
-+ /* Look for allowed, online CPU in same node. */
-+ for_each_cpu(dest_cpu, nodemask) {
-+ if (is_cpu_allowed(p, dest_cpu))
-+ return dest_cpu;
-+ }
-+ }
-+
-+ for (;;) {
-+ /* Any allowed, online CPU? */
-+ for_each_cpu(dest_cpu, p->cpus_ptr) {
-+ if (!is_cpu_allowed(p, dest_cpu))
-+ continue;
-+ goto out;
-+ }
-+
-+ /* No more Mr. Nice Guy. */
-+ switch (state) {
-+ case cpuset:
-+ if (cpuset_cpus_allowed_fallback(p)) {
-+ state = possible;
-+ break;
-+ }
-+ fallthrough;
-+ case possible:
-+ /*
-+ * XXX When called from select_task_rq() we only
-+ * hold p->pi_lock and again violate locking order.
-+ *
-+ * More yuck to audit.
-+ */
-+ do_set_cpus_allowed(p, task_cpu_possible_mask(p));
-+ state = fail;
-+ break;
-+
-+ case fail:
-+ BUG();
-+ break;
-+ }
-+ }
-+
-+out:
-+ if (state != cpuset) {
-+ /*
-+ * Don't tell them about moving exiting tasks or
-+ * kernel threads (both mm NULL), since they never
-+ * leave kernel.
-+ */
-+ if (p->mm && printk_ratelimit()) {
-+ printk_deferred("process %d (%s) no longer affine to cpu%d\n",
-+ task_pid_nr(p), p->comm, cpu);
-+ }
-+ }
-+
-+ return dest_cpu;
-+}
-+
-+static inline void
-+sched_preempt_mask_flush(cpumask_t *mask, int prio)
-+{
-+ int cpu;
-+
-+ cpumask_copy(mask, sched_idle_mask);
-+
-+ for_each_clear_bit(cpu, cpumask_bits(mask), nr_cpumask_bits) {
-+ if (prio < cpu_rq(cpu)->prio)
-+ cpumask_set_cpu(cpu, mask);
-+ }
-+}
-+
-+static inline int
-+preempt_mask_check(struct task_struct *p, cpumask_t *allow_mask, cpumask_t *preempt_mask)
-+{
-+ int task_prio = task_sched_prio(p);
-+ cpumask_t *mask = sched_preempt_mask + SCHED_QUEUE_BITS - 1 - task_prio;
-+ int pr = atomic_read(&sched_prio_record);
-+
-+ if (pr != task_prio) {
-+ sched_preempt_mask_flush(mask, task_prio);
-+ atomic_set(&sched_prio_record, task_prio);
-+ }
-+
-+ return cpumask_and(preempt_mask, allow_mask, mask);
-+}
-+
-+static inline int select_task_rq(struct task_struct *p)
-+{
-+ cpumask_t allow_mask, mask;
-+
-+ if (unlikely(!cpumask_and(&allow_mask, p->cpus_ptr, cpu_active_mask)))
-+ return select_fallback_rq(task_cpu(p), p);
-+
-+ if (
-+#ifdef CONFIG_SCHED_SMT
-+ cpumask_and(&mask, &allow_mask, &sched_sg_idle_mask) ||
-+#endif
-+ cpumask_and(&mask, &allow_mask, sched_idle_mask) ||
-+ preempt_mask_check(p, &allow_mask, &mask))
-+ return best_mask_cpu(task_cpu(p), &mask);
-+
-+ return best_mask_cpu(task_cpu(p), &allow_mask);
-+}
-+
-+void sched_set_stop_task(int cpu, struct task_struct *stop)
-+{
-+ static struct lock_class_key stop_pi_lock;
-+ struct sched_param stop_param = { .sched_priority = STOP_PRIO };
-+ struct sched_param start_param = { .sched_priority = 0 };
-+ struct task_struct *old_stop = cpu_rq(cpu)->stop;
-+
-+ if (stop) {
-+ /*
-+ * Make it appear like a SCHED_FIFO task, its something
-+ * userspace knows about and won't get confused about.
-+ *
-+ * Also, it will make PI more or less work without too
-+ * much confusion -- but then, stop work should not
-+ * rely on PI working anyway.
-+ */
-+ sched_setscheduler_nocheck(stop, SCHED_FIFO, &stop_param);
-+
-+ /*
-+ * The PI code calls rt_mutex_setprio() with ->pi_lock held to
-+ * adjust the effective priority of a task. As a result,
-+ * rt_mutex_setprio() can trigger (RT) balancing operations,
-+ * which can then trigger wakeups of the stop thread to push
-+ * around the current task.
-+ *
-+ * The stop task itself will never be part of the PI-chain, it
-+ * never blocks, therefore that ->pi_lock recursion is safe.
-+ * Tell lockdep about this by placing the stop->pi_lock in its
-+ * own class.
-+ */
-+ lockdep_set_class(&stop->pi_lock, &stop_pi_lock);
-+ }
-+
-+ cpu_rq(cpu)->stop = stop;
-+
-+ if (old_stop) {
-+ /*
-+ * Reset it back to a normal scheduling policy so that
-+ * it can die in pieces.
-+ */
-+ sched_setscheduler_nocheck(old_stop, SCHED_NORMAL, &start_param);
-+ }
-+}
-+
-+static int affine_move_task(struct rq *rq, struct task_struct *p, int dest_cpu,
-+ raw_spinlock_t *lock, unsigned long irq_flags)
-+ __releases(rq->lock)
-+ __releases(p->pi_lock)
-+{
-+ /* Can the task run on the task's current CPU? If so, we're done */
-+ if (!cpumask_test_cpu(task_cpu(p), &p->cpus_mask)) {
-+ if (p->migration_disabled) {
-+ if (likely(p->cpus_ptr != &p->cpus_mask))
-+ __do_set_cpus_ptr(p, &p->cpus_mask);
-+ p->migration_disabled = 0;
-+ p->migration_flags |= MDF_FORCE_ENABLED;
-+ /* When p is migrate_disabled, rq->lock should be held */
-+ rq->nr_pinned--;
-+ }
-+
-+ if (task_on_cpu(p) || READ_ONCE(p->__state) == TASK_WAKING) {
-+ struct migration_arg arg = { p, dest_cpu };
-+
-+ /* Need help from migration thread: drop lock and wait. */
-+ __task_access_unlock(p, lock);
-+ raw_spin_unlock_irqrestore(&p->pi_lock, irq_flags);
-+ stop_one_cpu(cpu_of(rq), migration_cpu_stop, &arg);
-+ return 0;
-+ }
-+ if (task_on_rq_queued(p)) {
-+ /*
-+ * OK, since we're going to drop the lock immediately
-+ * afterwards anyway.
-+ */
-+ update_rq_clock(rq);
-+ rq = move_queued_task(rq, p, dest_cpu);
-+ lock = &rq->lock;
-+ }
-+ }
-+ __task_access_unlock(p, lock);
-+ raw_spin_unlock_irqrestore(&p->pi_lock, irq_flags);
-+ return 0;
-+}
-+
-+static int __set_cpus_allowed_ptr_locked(struct task_struct *p,
-+ struct affinity_context *ctx,
-+ struct rq *rq,
-+ raw_spinlock_t *lock,
-+ unsigned long irq_flags)
-+{
-+ const struct cpumask *cpu_allowed_mask = task_cpu_possible_mask(p);
-+ const struct cpumask *cpu_valid_mask = cpu_active_mask;
-+ bool kthread = p->flags & PF_KTHREAD;
-+ int dest_cpu;
-+ int ret = 0;
-+
-+ if (kthread || is_migration_disabled(p)) {
-+ /*
-+ * Kernel threads are allowed on online && !active CPUs,
-+ * however, during cpu-hot-unplug, even these might get pushed
-+ * away if not KTHREAD_IS_PER_CPU.
-+ *
-+ * Specifically, migration_disabled() tasks must not fail the
-+ * cpumask_any_and_distribute() pick below, esp. so on
-+ * SCA_MIGRATE_ENABLE, otherwise we'll not call
-+ * set_cpus_allowed_common() and actually reset p->cpus_ptr.
-+ */
-+ cpu_valid_mask = cpu_online_mask;
-+ }
-+
-+ if (!kthread && !cpumask_subset(ctx->new_mask, cpu_allowed_mask)) {
-+ ret = -EINVAL;
-+ goto out;
-+ }
-+
-+ /*
-+ * Must re-check here, to close a race against __kthread_bind(),
-+ * sched_setaffinity() is not guaranteed to observe the flag.
-+ */
-+ if ((ctx->flags & SCA_CHECK) && (p->flags & PF_NO_SETAFFINITY)) {
-+ ret = -EINVAL;
-+ goto out;
-+ }
-+
-+ if (cpumask_equal(&p->cpus_mask, ctx->new_mask))
-+ goto out;
-+
-+ dest_cpu = cpumask_any_and(cpu_valid_mask, ctx->new_mask);
-+ if (dest_cpu >= nr_cpu_ids) {
-+ ret = -EINVAL;
-+ goto out;
-+ }
-+
-+ __do_set_cpus_allowed(p, ctx);
-+
-+ return affine_move_task(rq, p, dest_cpu, lock, irq_flags);
-+
-+out:
-+ __task_access_unlock(p, lock);
-+ raw_spin_unlock_irqrestore(&p->pi_lock, irq_flags);
-+
-+ return ret;
-+}
-+
-+/*
-+ * Change a given task's CPU affinity. Migrate the thread to a
-+ * is removed from the allowed bitmask.
-+ *
-+ * NOTE: the caller must have a valid reference to the task, the
-+ * task must not exit() & deallocate itself prematurely. The
-+ * call is not atomic; no spinlocks may be held.
-+ */
-+static int __set_cpus_allowed_ptr(struct task_struct *p,
-+ struct affinity_context *ctx)
-+{
-+ unsigned long irq_flags;
-+ struct rq *rq;
-+ raw_spinlock_t *lock;
-+
-+ raw_spin_lock_irqsave(&p->pi_lock, irq_flags);
-+ rq = __task_access_lock(p, &lock);
-+ /*
-+ * Masking should be skipped if SCA_USER or any of the SCA_MIGRATE_*
-+ * flags are set.
-+ */
-+ if (p->user_cpus_ptr &&
-+ !(ctx->flags & SCA_USER) &&
-+ cpumask_and(rq->scratch_mask, ctx->new_mask, p->user_cpus_ptr))
-+ ctx->new_mask = rq->scratch_mask;
-+
-+
-+ return __set_cpus_allowed_ptr_locked(p, ctx, rq, lock, irq_flags);
-+}
-+
-+int set_cpus_allowed_ptr(struct task_struct *p, const struct cpumask *new_mask)
-+{
-+ struct affinity_context ac = {
-+ .new_mask = new_mask,
-+ .flags = 0,
-+ };
-+
-+ return __set_cpus_allowed_ptr(p, &ac);
-+}
-+EXPORT_SYMBOL_GPL(set_cpus_allowed_ptr);
-+
-+/*
-+ * Change a given task's CPU affinity to the intersection of its current
-+ * affinity mask and @subset_mask, writing the resulting mask to @new_mask.
-+ * If user_cpus_ptr is defined, use it as the basis for restricting CPU
-+ * affinity or use cpu_online_mask instead.
-+ *
-+ * If the resulting mask is empty, leave the affinity unchanged and return
-+ * -EINVAL.
-+ */
-+static int restrict_cpus_allowed_ptr(struct task_struct *p,
-+ struct cpumask *new_mask,
-+ const struct cpumask *subset_mask)
-+{
-+ struct affinity_context ac = {
-+ .new_mask = new_mask,
-+ .flags = 0,
-+ };
-+ unsigned long irq_flags;
-+ raw_spinlock_t *lock;
-+ struct rq *rq;
-+ int err;
-+
-+ raw_spin_lock_irqsave(&p->pi_lock, irq_flags);
-+ rq = __task_access_lock(p, &lock);
-+
-+ if (!cpumask_and(new_mask, task_user_cpus(p), subset_mask)) {
-+ err = -EINVAL;
-+ goto err_unlock;
-+ }
-+
-+ return __set_cpus_allowed_ptr_locked(p, &ac, rq, lock, irq_flags);
-+
-+err_unlock:
-+ __task_access_unlock(p, lock);
-+ raw_spin_unlock_irqrestore(&p->pi_lock, irq_flags);
-+ return err;
-+}
-+
-+/*
-+ * Restrict the CPU affinity of task @p so that it is a subset of
-+ * task_cpu_possible_mask() and point @p->user_cpus_ptr to a copy of the
-+ * old affinity mask. If the resulting mask is empty, we warn and walk
-+ * up the cpuset hierarchy until we find a suitable mask.
-+ */
-+void force_compatible_cpus_allowed_ptr(struct task_struct *p)
-+{
-+ cpumask_var_t new_mask;
-+ const struct cpumask *override_mask = task_cpu_possible_mask(p);
-+
-+ alloc_cpumask_var(&new_mask, GFP_KERNEL);
-+
-+ /*
-+ * __migrate_task() can fail silently in the face of concurrent
-+ * offlining of the chosen destination CPU, so take the hotplug
-+ * lock to ensure that the migration succeeds.
-+ */
-+ cpus_read_lock();
-+ if (!cpumask_available(new_mask))
-+ goto out_set_mask;
-+
-+ if (!restrict_cpus_allowed_ptr(p, new_mask, override_mask))
-+ goto out_free_mask;
-+
-+ /*
-+ * We failed to find a valid subset of the affinity mask for the
-+ * task, so override it based on its cpuset hierarchy.
-+ */
-+ cpuset_cpus_allowed(p, new_mask);
-+ override_mask = new_mask;
-+
-+out_set_mask:
-+ if (printk_ratelimit()) {
-+ printk_deferred("Overriding affinity for process %d (%s) to CPUs %*pbl\n",
-+ task_pid_nr(p), p->comm,
-+ cpumask_pr_args(override_mask));
-+ }
-+
-+ WARN_ON(set_cpus_allowed_ptr(p, override_mask));
-+out_free_mask:
-+ cpus_read_unlock();
-+ free_cpumask_var(new_mask);
-+}
-+
-+static int
-+__sched_setaffinity(struct task_struct *p, struct affinity_context *ctx);
-+
-+/*
-+ * Restore the affinity of a task @p which was previously restricted by a
-+ * call to force_compatible_cpus_allowed_ptr().
-+ *
-+ * It is the caller's responsibility to serialise this with any calls to
-+ * force_compatible_cpus_allowed_ptr(@p).
-+ */
-+void relax_compatible_cpus_allowed_ptr(struct task_struct *p)
-+{
-+ struct affinity_context ac = {
-+ .new_mask = task_user_cpus(p),
-+ .flags = 0,
-+ };
-+ int ret;
-+
-+ /*
-+ * Try to restore the old affinity mask with __sched_setaffinity().
-+ * Cpuset masking will be done there too.
-+ */
-+ ret = __sched_setaffinity(p, &ac);
-+ WARN_ON_ONCE(ret);
-+}
-+
-+#else /* CONFIG_SMP */
-+
-+static inline int select_task_rq(struct task_struct *p)
-+{
-+ return 0;
-+}
-+
-+static inline int
-+__set_cpus_allowed_ptr(struct task_struct *p,
-+ struct affinity_context *ctx)
-+{
-+ return set_cpus_allowed_ptr(p, ctx->new_mask);
-+}
-+
-+static inline bool rq_has_pinned_tasks(struct rq *rq)
-+{
-+ return false;
-+}
-+
-+static inline cpumask_t *alloc_user_cpus_ptr(int node)
-+{
-+ return NULL;
-+}
-+
-+#endif /* !CONFIG_SMP */
-+
-+static void
-+ttwu_stat(struct task_struct *p, int cpu, int wake_flags)
-+{
-+ struct rq *rq;
-+
-+ if (!schedstat_enabled())
-+ return;
-+
-+ rq = this_rq();
-+
-+#ifdef CONFIG_SMP
-+ if (cpu == rq->cpu) {
-+ __schedstat_inc(rq->ttwu_local);
-+ __schedstat_inc(p->stats.nr_wakeups_local);
-+ } else {
-+ /** Alt schedule FW ToDo:
-+ * How to do ttwu_wake_remote
-+ */
-+ }
-+#endif /* CONFIG_SMP */
-+
-+ __schedstat_inc(rq->ttwu_count);
-+ __schedstat_inc(p->stats.nr_wakeups);
-+}
-+
-+/*
-+ * Mark the task runnable.
-+ */
-+static inline void ttwu_do_wakeup(struct task_struct *p)
-+{
-+ WRITE_ONCE(p->__state, TASK_RUNNING);
-+ trace_sched_wakeup(p);
-+}
-+
-+static inline void
-+ttwu_do_activate(struct rq *rq, struct task_struct *p, int wake_flags)
-+{
-+ if (p->sched_contributes_to_load)
-+ rq->nr_uninterruptible--;
-+
-+ if (
-+#ifdef CONFIG_SMP
-+ !(wake_flags & WF_MIGRATED) &&
-+#endif
-+ p->in_iowait) {
-+ delayacct_blkio_end(p);
-+ atomic_dec(&task_rq(p)->nr_iowait);
-+ }
-+
-+ activate_task(p, rq);
-+ wakeup_preempt(rq);
-+
-+ ttwu_do_wakeup(p);
-+}
-+
-+/*
-+ * Consider @p being inside a wait loop:
-+ *
-+ * for (;;) {
-+ * set_current_state(TASK_UNINTERRUPTIBLE);
-+ *
-+ * if (CONDITION)
-+ * break;
-+ *
-+ * schedule();
-+ * }
-+ * __set_current_state(TASK_RUNNING);
-+ *
-+ * between set_current_state() and schedule(). In this case @p is still
-+ * runnable, so all that needs doing is change p->state back to TASK_RUNNING in
-+ * an atomic manner.
-+ *
-+ * By taking task_rq(p)->lock we serialize against schedule(), if @p->on_rq
-+ * then schedule() must still happen and p->state can be changed to
-+ * TASK_RUNNING. Otherwise we lost the race, schedule() has happened, and we
-+ * need to do a full wakeup with enqueue.
-+ *
-+ * Returns: %true when the wakeup is done,
-+ * %false otherwise.
-+ */
-+static int ttwu_runnable(struct task_struct *p, int wake_flags)
-+{
-+ struct rq *rq;
-+ raw_spinlock_t *lock;
-+ int ret = 0;
-+
-+ rq = __task_access_lock(p, &lock);
-+ if (task_on_rq_queued(p)) {
-+ if (!task_on_cpu(p)) {
-+ /*
-+ * When on_rq && !on_cpu the task is preempted, see if
-+ * it should preempt the task that is current now.
-+ */
-+ update_rq_clock(rq);
-+ wakeup_preempt(rq);
-+ }
-+ ttwu_do_wakeup(p);
-+ ret = 1;
-+ }
-+ __task_access_unlock(p, lock);
-+
-+ return ret;
-+}
-+
-+#ifdef CONFIG_SMP
-+void sched_ttwu_pending(void *arg)
-+{
-+ struct llist_node *llist = arg;
-+ struct rq *rq = this_rq();
-+ struct task_struct *p, *t;
-+ struct rq_flags rf;
-+
-+ if (!llist)
-+ return;
-+
-+ rq_lock_irqsave(rq, &rf);
-+ update_rq_clock(rq);
-+
-+ llist_for_each_entry_safe(p, t, llist, wake_entry.llist) {
-+ if (WARN_ON_ONCE(p->on_cpu))
-+ smp_cond_load_acquire(&p->on_cpu, !VAL);
-+
-+ if (WARN_ON_ONCE(task_cpu(p) != cpu_of(rq)))
-+ set_task_cpu(p, cpu_of(rq));
-+
-+ ttwu_do_activate(rq, p, p->sched_remote_wakeup ? WF_MIGRATED : 0);
-+ }
-+
-+ /*
-+ * Must be after enqueueing at least once task such that
-+ * idle_cpu() does not observe a false-negative -- if it does,
-+ * it is possible for select_idle_siblings() to stack a number
-+ * of tasks on this CPU during that window.
-+ *
-+ * It is ok to clear ttwu_pending when another task pending.
-+ * We will receive IPI after local irq enabled and then enqueue it.
-+ * Since now nr_running > 0, idle_cpu() will always get correct result.
-+ */
-+ WRITE_ONCE(rq->ttwu_pending, 0);
-+ rq_unlock_irqrestore(rq, &rf);
-+}
-+
-+/*
-+ * Prepare the scene for sending an IPI for a remote smp_call
-+ *
-+ * Returns true if the caller can proceed with sending the IPI.
-+ * Returns false otherwise.
-+ */
-+bool call_function_single_prep_ipi(int cpu)
-+{
-+ if (set_nr_if_polling(cpu_rq(cpu)->idle)) {
-+ trace_sched_wake_idle_without_ipi(cpu);
-+ return false;
-+ }
-+
-+ return true;
-+}
-+
-+/*
-+ * Queue a task on the target CPUs wake_list and wake the CPU via IPI if
-+ * necessary. The wakee CPU on receipt of the IPI will queue the task
-+ * via sched_ttwu_wakeup() for activation so the wakee incurs the cost
-+ * of the wakeup instead of the waker.
-+ */
-+static void __ttwu_queue_wakelist(struct task_struct *p, int cpu, int wake_flags)
-+{
-+ struct rq *rq = cpu_rq(cpu);
-+
-+ p->sched_remote_wakeup = !!(wake_flags & WF_MIGRATED);
-+
-+ WRITE_ONCE(rq->ttwu_pending, 1);
-+ __smp_call_single_queue(cpu, &p->wake_entry.llist);
-+}
-+
-+static inline bool ttwu_queue_cond(struct task_struct *p, int cpu)
-+{
-+ /*
-+ * Do not complicate things with the async wake_list while the CPU is
-+ * in hotplug state.
-+ */
-+ if (!cpu_active(cpu))
-+ return false;
-+
-+ /* Ensure the task will still be allowed to run on the CPU. */
-+ if (!cpumask_test_cpu(cpu, p->cpus_ptr))
-+ return false;
-+
-+ /*
-+ * If the CPU does not share cache, then queue the task on the
-+ * remote rqs wakelist to avoid accessing remote data.
-+ */
-+ if (!cpus_share_cache(smp_processor_id(), cpu))
-+ return true;
-+
-+ if (cpu == smp_processor_id())
-+ return false;
-+
-+ /*
-+ * If the wakee cpu is idle, or the task is descheduling and the
-+ * only running task on the CPU, then use the wakelist to offload
-+ * the task activation to the idle (or soon-to-be-idle) CPU as
-+ * the current CPU is likely busy. nr_running is checked to
-+ * avoid unnecessary task stacking.
-+ *
-+ * Note that we can only get here with (wakee) p->on_rq=0,
-+ * p->on_cpu can be whatever, we've done the dequeue, so
-+ * the wakee has been accounted out of ->nr_running.
-+ */
-+ if (!cpu_rq(cpu)->nr_running)
-+ return true;
-+
-+ return false;
-+}
-+
-+static bool ttwu_queue_wakelist(struct task_struct *p, int cpu, int wake_flags)
-+{
-+ if (__is_defined(ALT_SCHED_TTWU_QUEUE) && ttwu_queue_cond(p, cpu)) {
-+ sched_clock_cpu(cpu); /* Sync clocks across CPUs */
-+ __ttwu_queue_wakelist(p, cpu, wake_flags);
-+ return true;
-+ }
-+
-+ return false;
-+}
-+
-+void wake_up_if_idle(int cpu)
-+{
-+ struct rq *rq = cpu_rq(cpu);
-+
-+ guard(rcu)();
-+ if (is_idle_task(rcu_dereference(rq->curr))) {
-+ guard(raw_spinlock_irqsave)(&rq->lock);
-+ if (is_idle_task(rq->curr))
-+ resched_curr(rq);
-+ }
-+}
-+
-+bool cpus_share_cache(int this_cpu, int that_cpu)
-+{
-+ if (this_cpu == that_cpu)
-+ return true;
-+
-+ return per_cpu(sd_llc_id, this_cpu) == per_cpu(sd_llc_id, that_cpu);
-+}
-+#else /* !CONFIG_SMP */
-+
-+static inline bool ttwu_queue_wakelist(struct task_struct *p, int cpu, int wake_flags)
-+{
-+ return false;
-+}
-+
-+#endif /* CONFIG_SMP */
-+
-+static inline void ttwu_queue(struct task_struct *p, int cpu, int wake_flags)
-+{
-+ struct rq *rq = cpu_rq(cpu);
-+
-+ if (ttwu_queue_wakelist(p, cpu, wake_flags))
-+ return;
-+
-+ raw_spin_lock(&rq->lock);
-+ update_rq_clock(rq);
-+ ttwu_do_activate(rq, p, wake_flags);
-+ raw_spin_unlock(&rq->lock);
-+}
-+
-+/*
-+ * Invoked from try_to_wake_up() to check whether the task can be woken up.
-+ *
-+ * The caller holds p::pi_lock if p != current or has preemption
-+ * disabled when p == current.
-+ *
-+ * The rules of saved_state:
-+ *
-+ * The related locking code always holds p::pi_lock when updating
-+ * p::saved_state, which means the code is fully serialized in both cases.
-+ *
-+ * For PREEMPT_RT, the lock wait and lock wakeups happen via TASK_RTLOCK_WAIT.
-+ * No other bits set. This allows to distinguish all wakeup scenarios.
-+ *
-+ * For FREEZER, the wakeup happens via TASK_FROZEN. No other bits set. This
-+ * allows us to prevent early wakeup of tasks before they can be run on
-+ * asymmetric ISA architectures (eg ARMv9).
-+ */
-+static __always_inline
-+bool ttwu_state_match(struct task_struct *p, unsigned int state, int *success)
-+{
-+ int match;
-+
-+ if (IS_ENABLED(CONFIG_DEBUG_PREEMPT)) {
-+ WARN_ON_ONCE((state & TASK_RTLOCK_WAIT) &&
-+ state != TASK_RTLOCK_WAIT);
-+ }
-+
-+ *success = !!(match = __task_state_match(p, state));
-+
-+ /*
-+ * Saved state preserves the task state across blocking on
-+ * an RT lock or TASK_FREEZABLE tasks. If the state matches,
-+ * set p::saved_state to TASK_RUNNING, but do not wake the task
-+ * because it waits for a lock wakeup or __thaw_task(). Also
-+ * indicate success because from the regular waker's point of
-+ * view this has succeeded.
-+ *
-+ * After acquiring the lock the task will restore p::__state
-+ * from p::saved_state which ensures that the regular
-+ * wakeup is not lost. The restore will also set
-+ * p::saved_state to TASK_RUNNING so any further tests will
-+ * not result in false positives vs. @success
-+ */
-+ if (match < 0)
-+ p->saved_state = TASK_RUNNING;
-+
-+ return match > 0;
-+}
-+
-+/*
-+ * Notes on Program-Order guarantees on SMP systems.
-+ *
-+ * MIGRATION
-+ *
-+ * The basic program-order guarantee on SMP systems is that when a task [t]
-+ * migrates, all its activity on its old CPU [c0] happens-before any subsequent
-+ * execution on its new CPU [c1].
-+ *
-+ * For migration (of runnable tasks) this is provided by the following means:
-+ *
-+ * A) UNLOCK of the rq(c0)->lock scheduling out task t
-+ * B) migration for t is required to synchronize *both* rq(c0)->lock and
-+ * rq(c1)->lock (if not at the same time, then in that order).
-+ * C) LOCK of the rq(c1)->lock scheduling in task
-+ *
-+ * Transitivity guarantees that B happens after A and C after B.
-+ * Note: we only require RCpc transitivity.
-+ * Note: the CPU doing B need not be c0 or c1
-+ *
-+ * Example:
-+ *
-+ * CPU0 CPU1 CPU2
-+ *
-+ * LOCK rq(0)->lock
-+ * sched-out X
-+ * sched-in Y
-+ * UNLOCK rq(0)->lock
-+ *
-+ * LOCK rq(0)->lock // orders against CPU0
-+ * dequeue X
-+ * UNLOCK rq(0)->lock
-+ *
-+ * LOCK rq(1)->lock
-+ * enqueue X
-+ * UNLOCK rq(1)->lock
-+ *
-+ * LOCK rq(1)->lock // orders against CPU2
-+ * sched-out Z
-+ * sched-in X
-+ * UNLOCK rq(1)->lock
-+ *
-+ *
-+ * BLOCKING -- aka. SLEEP + WAKEUP
-+ *
-+ * For blocking we (obviously) need to provide the same guarantee as for
-+ * migration. However the means are completely different as there is no lock
-+ * chain to provide order. Instead we do:
-+ *
-+ * 1) smp_store_release(X->on_cpu, 0) -- finish_task()
-+ * 2) smp_cond_load_acquire(!X->on_cpu) -- try_to_wake_up()
-+ *
-+ * Example:
-+ *
-+ * CPU0 (schedule) CPU1 (try_to_wake_up) CPU2 (schedule)
-+ *
-+ * LOCK rq(0)->lock LOCK X->pi_lock
-+ * dequeue X
-+ * sched-out X
-+ * smp_store_release(X->on_cpu, 0);
-+ *
-+ * smp_cond_load_acquire(&X->on_cpu, !VAL);
-+ * X->state = WAKING
-+ * set_task_cpu(X,2)
-+ *
-+ * LOCK rq(2)->lock
-+ * enqueue X
-+ * X->state = RUNNING
-+ * UNLOCK rq(2)->lock
-+ *
-+ * LOCK rq(2)->lock // orders against CPU1
-+ * sched-out Z
-+ * sched-in X
-+ * UNLOCK rq(2)->lock
-+ *
-+ * UNLOCK X->pi_lock
-+ * UNLOCK rq(0)->lock
-+ *
-+ *
-+ * However; for wakeups there is a second guarantee we must provide, namely we
-+ * must observe the state that lead to our wakeup. That is, not only must our
-+ * task observe its own prior state, it must also observe the stores prior to
-+ * its wakeup.
-+ *
-+ * This means that any means of doing remote wakeups must order the CPU doing
-+ * the wakeup against the CPU the task is going to end up running on. This,
-+ * however, is already required for the regular Program-Order guarantee above,
-+ * since the waking CPU is the one issueing the ACQUIRE (smp_cond_load_acquire).
-+ *
-+ */
-+
-+/**
-+ * try_to_wake_up - wake up a thread
-+ * @p: the thread to be awakened
-+ * @state: the mask of task states that can be woken
-+ * @wake_flags: wake modifier flags (WF_*)
-+ *
-+ * Conceptually does:
-+ *
-+ * If (@state & @p->state) @p->state = TASK_RUNNING.
-+ *
-+ * If the task was not queued/runnable, also place it back on a runqueue.
-+ *
-+ * This function is atomic against schedule() which would dequeue the task.
-+ *
-+ * It issues a full memory barrier before accessing @p->state, see the comment
-+ * with set_current_state().
-+ *
-+ * Uses p->pi_lock to serialize against concurrent wake-ups.
-+ *
-+ * Relies on p->pi_lock stabilizing:
-+ * - p->sched_class
-+ * - p->cpus_ptr
-+ * - p->sched_task_group
-+ * in order to do migration, see its use of select_task_rq()/set_task_cpu().
-+ *
-+ * Tries really hard to only take one task_rq(p)->lock for performance.
-+ * Takes rq->lock in:
-+ * - ttwu_runnable() -- old rq, unavoidable, see comment there;
-+ * - ttwu_queue() -- new rq, for enqueue of the task;
-+ * - psi_ttwu_dequeue() -- much sadness :-( accounting will kill us.
-+ *
-+ * As a consequence we race really badly with just about everything. See the
-+ * many memory barriers and their comments for details.
-+ *
-+ * Return: %true if @p->state changes (an actual wakeup was done),
-+ * %false otherwise.
-+ */
-+int try_to_wake_up(struct task_struct *p, unsigned int state, int wake_flags)
-+{
-+ guard(preempt)();
-+ int cpu, success = 0;
-+
-+ if (p == current) {
-+ /*
-+ * We're waking current, this means 'p->on_rq' and 'task_cpu(p)
-+ * == smp_processor_id()'. Together this means we can special
-+ * case the whole 'p->on_rq && ttwu_runnable()' case below
-+ * without taking any locks.
-+ *
-+ * In particular:
-+ * - we rely on Program-Order guarantees for all the ordering,
-+ * - we're serialized against set_special_state() by virtue of
-+ * it disabling IRQs (this allows not taking ->pi_lock).
-+ */
-+ if (!ttwu_state_match(p, state, &success))
-+ goto out;
-+
-+ trace_sched_waking(p);
-+ ttwu_do_wakeup(p);
-+ goto out;
-+ }
-+
-+ /*
-+ * If we are going to wake up a thread waiting for CONDITION we
-+ * need to ensure that CONDITION=1 done by the caller can not be
-+ * reordered with p->state check below. This pairs with smp_store_mb()
-+ * in set_current_state() that the waiting thread does.
-+ */
-+ scoped_guard (raw_spinlock_irqsave, &p->pi_lock) {
-+ smp_mb__after_spinlock();
-+ if (!ttwu_state_match(p, state, &success))
-+ break;
-+
-+ trace_sched_waking(p);
-+
-+ /*
-+ * Ensure we load p->on_rq _after_ p->state, otherwise it would
-+ * be possible to, falsely, observe p->on_rq == 0 and get stuck
-+ * in smp_cond_load_acquire() below.
-+ *
-+ * sched_ttwu_pending() try_to_wake_up()
-+ * STORE p->on_rq = 1 LOAD p->state
-+ * UNLOCK rq->lock
-+ *
-+ * __schedule() (switch to task 'p')
-+ * LOCK rq->lock smp_rmb();
-+ * smp_mb__after_spinlock();
-+ * UNLOCK rq->lock
-+ *
-+ * [task p]
-+ * STORE p->state = UNINTERRUPTIBLE LOAD p->on_rq
-+ *
-+ * Pairs with the LOCK+smp_mb__after_spinlock() on rq->lock in
-+ * __schedule(). See the comment for smp_mb__after_spinlock().
-+ *
-+ * A similar smp_rmb() lives in __task_needs_rq_lock().
-+ */
-+ smp_rmb();
-+ if (READ_ONCE(p->on_rq) && ttwu_runnable(p, wake_flags))
-+ break;
-+
-+#ifdef CONFIG_SMP
-+ /*
-+ * Ensure we load p->on_cpu _after_ p->on_rq, otherwise it would be
-+ * possible to, falsely, observe p->on_cpu == 0.
-+ *
-+ * One must be running (->on_cpu == 1) in order to remove oneself
-+ * from the runqueue.
-+ *
-+ * __schedule() (switch to task 'p') try_to_wake_up()
-+ * STORE p->on_cpu = 1 LOAD p->on_rq
-+ * UNLOCK rq->lock
-+ *
-+ * __schedule() (put 'p' to sleep)
-+ * LOCK rq->lock smp_rmb();
-+ * smp_mb__after_spinlock();
-+ * STORE p->on_rq = 0 LOAD p->on_cpu
-+ *
-+ * Pairs with the LOCK+smp_mb__after_spinlock() on rq->lock in
-+ * __schedule(). See the comment for smp_mb__after_spinlock().
-+ *
-+ * Form a control-dep-acquire with p->on_rq == 0 above, to ensure
-+ * schedule()'s deactivate_task() has 'happened' and p will no longer
-+ * care about it's own p->state. See the comment in __schedule().
-+ */
-+ smp_acquire__after_ctrl_dep();
-+
-+ /*
-+ * We're doing the wakeup (@success == 1), they did a dequeue (p->on_rq
-+ * == 0), which means we need to do an enqueue, change p->state to
-+ * TASK_WAKING such that we can unlock p->pi_lock before doing the
-+ * enqueue, such as ttwu_queue_wakelist().
-+ */
-+ WRITE_ONCE(p->__state, TASK_WAKING);
-+
-+ /*
-+ * If the owning (remote) CPU is still in the middle of schedule() with
-+ * this task as prev, considering queueing p on the remote CPUs wake_list
-+ * which potentially sends an IPI instead of spinning on p->on_cpu to
-+ * let the waker make forward progress. This is safe because IRQs are
-+ * disabled and the IPI will deliver after on_cpu is cleared.
-+ *
-+ * Ensure we load task_cpu(p) after p->on_cpu:
-+ *
-+ * set_task_cpu(p, cpu);
-+ * STORE p->cpu = @cpu
-+ * __schedule() (switch to task 'p')
-+ * LOCK rq->lock
-+ * smp_mb__after_spin_lock() smp_cond_load_acquire(&p->on_cpu)
-+ * STORE p->on_cpu = 1 LOAD p->cpu
-+ *
-+ * to ensure we observe the correct CPU on which the task is currently
-+ * scheduling.
-+ */
-+ if (smp_load_acquire(&p->on_cpu) &&
-+ ttwu_queue_wakelist(p, task_cpu(p), wake_flags))
-+ break;
-+
-+ /*
-+ * If the owning (remote) CPU is still in the middle of schedule() with
-+ * this task as prev, wait until it's done referencing the task.
-+ *
-+ * Pairs with the smp_store_release() in finish_task().
-+ *
-+ * This ensures that tasks getting woken will be fully ordered against
-+ * their previous state and preserve Program Order.
-+ */
-+ smp_cond_load_acquire(&p->on_cpu, !VAL);
-+
-+ sched_task_ttwu(p);
-+
-+ if ((wake_flags & WF_CURRENT_CPU) &&
-+ cpumask_test_cpu(smp_processor_id(), p->cpus_ptr))
-+ cpu = smp_processor_id();
-+ else
-+ cpu = select_task_rq(p);
-+
-+ if (cpu != task_cpu(p)) {
-+ if (p->in_iowait) {
-+ delayacct_blkio_end(p);
-+ atomic_dec(&task_rq(p)->nr_iowait);
-+ }
-+
-+ wake_flags |= WF_MIGRATED;
-+ set_task_cpu(p, cpu);
-+ }
-+#else
-+ sched_task_ttwu(p);
-+
-+ cpu = task_cpu(p);
-+#endif /* CONFIG_SMP */
-+
-+ ttwu_queue(p, cpu, wake_flags);
-+ }
-+out:
-+ if (success)
-+ ttwu_stat(p, task_cpu(p), wake_flags);
-+
-+ return success;
-+}
-+
-+static bool __task_needs_rq_lock(struct task_struct *p)
-+{
-+ unsigned int state = READ_ONCE(p->__state);
-+
-+ /*
-+ * Since pi->lock blocks try_to_wake_up(), we don't need rq->lock when
-+ * the task is blocked. Make sure to check @state since ttwu() can drop
-+ * locks at the end, see ttwu_queue_wakelist().
-+ */
-+ if (state == TASK_RUNNING || state == TASK_WAKING)
-+ return true;
-+
-+ /*
-+ * Ensure we load p->on_rq after p->__state, otherwise it would be
-+ * possible to, falsely, observe p->on_rq == 0.
-+ *
-+ * See try_to_wake_up() for a longer comment.
-+ */
-+ smp_rmb();
-+ if (p->on_rq)
-+ return true;
-+
-+#ifdef CONFIG_SMP
-+ /*
-+ * Ensure the task has finished __schedule() and will not be referenced
-+ * anymore. Again, see try_to_wake_up() for a longer comment.
-+ */
-+ smp_rmb();
-+ smp_cond_load_acquire(&p->on_cpu, !VAL);
-+#endif
-+
-+ return false;
-+}
-+
-+/**
-+ * task_call_func - Invoke a function on task in fixed state
-+ * @p: Process for which the function is to be invoked, can be @current.
-+ * @func: Function to invoke.
-+ * @arg: Argument to function.
-+ *
-+ * Fix the task in it's current state by avoiding wakeups and or rq operations
-+ * and call @func(@arg) on it. This function can use ->on_rq and task_curr()
-+ * to work out what the state is, if required. Given that @func can be invoked
-+ * with a runqueue lock held, it had better be quite lightweight.
-+ *
-+ * Returns:
-+ * Whatever @func returns
-+ */
-+int task_call_func(struct task_struct *p, task_call_f func, void *arg)
-+{
-+ struct rq *rq = NULL;
-+ struct rq_flags rf;
-+ int ret;
-+
-+ raw_spin_lock_irqsave(&p->pi_lock, rf.flags);
-+
-+ if (__task_needs_rq_lock(p))
-+ rq = __task_rq_lock(p, &rf);
-+
-+ /*
-+ * At this point the task is pinned; either:
-+ * - blocked and we're holding off wakeups (pi->lock)
-+ * - woken, and we're holding off enqueue (rq->lock)
-+ * - queued, and we're holding off schedule (rq->lock)
-+ * - running, and we're holding off de-schedule (rq->lock)
-+ *
-+ * The called function (@func) can use: task_curr(), p->on_rq and
-+ * p->__state to differentiate between these states.
-+ */
-+ ret = func(p, arg);
-+
-+ if (rq)
-+ __task_rq_unlock(rq, &rf);
-+
-+ raw_spin_unlock_irqrestore(&p->pi_lock, rf.flags);
-+ return ret;
-+}
-+
-+/**
-+ * cpu_curr_snapshot - Return a snapshot of the currently running task
-+ * @cpu: The CPU on which to snapshot the task.
-+ *
-+ * Returns the task_struct pointer of the task "currently" running on
-+ * the specified CPU. If the same task is running on that CPU throughout,
-+ * the return value will be a pointer to that task's task_struct structure.
-+ * If the CPU did any context switches even vaguely concurrently with the
-+ * execution of this function, the return value will be a pointer to the
-+ * task_struct structure of a randomly chosen task that was running on
-+ * that CPU somewhere around the time that this function was executing.
-+ *
-+ * If the specified CPU was offline, the return value is whatever it
-+ * is, perhaps a pointer to the task_struct structure of that CPU's idle
-+ * task, but there is no guarantee. Callers wishing a useful return
-+ * value must take some action to ensure that the specified CPU remains
-+ * online throughout.
-+ *
-+ * This function executes full memory barriers before and after fetching
-+ * the pointer, which permits the caller to confine this function's fetch
-+ * with respect to the caller's accesses to other shared variables.
-+ */
-+struct task_struct *cpu_curr_snapshot(int cpu)
-+{
-+ struct task_struct *t;
-+
-+ smp_mb(); /* Pairing determined by caller's synchronization design. */
-+ t = rcu_dereference(cpu_curr(cpu));
-+ smp_mb(); /* Pairing determined by caller's synchronization design. */
-+ return t;
-+}
-+
-+/**
-+ * wake_up_process - Wake up a specific process
-+ * @p: The process to be woken up.
-+ *
-+ * Attempt to wake up the nominated process and move it to the set of runnable
-+ * processes.
-+ *
-+ * Return: 1 if the process was woken up, 0 if it was already running.
-+ *
-+ * This function executes a full memory barrier before accessing the task state.
-+ */
-+int wake_up_process(struct task_struct *p)
-+{
-+ return try_to_wake_up(p, TASK_NORMAL, 0);
-+}
-+EXPORT_SYMBOL(wake_up_process);
-+
-+int wake_up_state(struct task_struct *p, unsigned int state)
-+{
-+ return try_to_wake_up(p, state, 0);
-+}
-+
-+/*
-+ * Perform scheduler related setup for a newly forked process p.
-+ * p is forked by current.
-+ *
-+ * __sched_fork() is basic setup used by init_idle() too:
-+ */
-+static inline void __sched_fork(unsigned long clone_flags, struct task_struct *p)
-+{
-+ p->on_rq = 0;
-+ p->on_cpu = 0;
-+ p->utime = 0;
-+ p->stime = 0;
-+ p->sched_time = 0;
-+
-+#ifdef CONFIG_SCHEDSTATS
-+ /* Even if schedstat is disabled, there should not be garbage */
-+ memset(&p->stats, 0, sizeof(p->stats));
-+#endif
-+
-+#ifdef CONFIG_PREEMPT_NOTIFIERS
-+ INIT_HLIST_HEAD(&p->preempt_notifiers);
-+#endif
-+
-+#ifdef CONFIG_COMPACTION
-+ p->capture_control = NULL;
-+#endif
-+#ifdef CONFIG_SMP
-+ p->wake_entry.u_flags = CSD_TYPE_TTWU;
-+#endif
-+ init_sched_mm_cid(p);
-+}
-+
-+/*
-+ * fork()/clone()-time setup:
-+ */
-+int sched_fork(unsigned long clone_flags, struct task_struct *p)
-+{
-+ __sched_fork(clone_flags, p);
-+ /*
-+ * We mark the process as NEW here. This guarantees that
-+ * nobody will actually run it, and a signal or other external
-+ * event cannot wake it up and insert it on the runqueue either.
-+ */
-+ p->__state = TASK_NEW;
-+
-+ /*
-+ * Make sure we do not leak PI boosting priority to the child.
-+ */
-+ p->prio = current->normal_prio;
-+
-+ /*
-+ * Revert to default priority/policy on fork if requested.
-+ */
-+ if (unlikely(p->sched_reset_on_fork)) {
-+ if (task_has_rt_policy(p)) {
-+ p->policy = SCHED_NORMAL;
-+ p->static_prio = NICE_TO_PRIO(0);
-+ p->rt_priority = 0;
-+ } else if (PRIO_TO_NICE(p->static_prio) < 0)
-+ p->static_prio = NICE_TO_PRIO(0);
-+
-+ p->prio = p->normal_prio = p->static_prio;
-+
-+ /*
-+ * We don't need the reset flag anymore after the fork. It has
-+ * fulfilled its duty:
-+ */
-+ p->sched_reset_on_fork = 0;
-+ }
-+
-+#ifdef CONFIG_SCHED_INFO
-+ if (unlikely(sched_info_on()))
-+ memset(&p->sched_info, 0, sizeof(p->sched_info));
-+#endif
-+ init_task_preempt_count(p);
-+
-+ return 0;
-+}
-+
-+void sched_cgroup_fork(struct task_struct *p, struct kernel_clone_args *kargs)
-+{
-+ unsigned long flags;
-+ struct rq *rq;
-+
-+ /*
-+ * Because we're not yet on the pid-hash, p->pi_lock isn't strictly
-+ * required yet, but lockdep gets upset if rules are violated.
-+ */
-+ raw_spin_lock_irqsave(&p->pi_lock, flags);
-+ /*
-+ * Share the timeslice between parent and child, thus the
-+ * total amount of pending timeslices in the system doesn't change,
-+ * resulting in more scheduling fairness.
-+ */
-+ rq = this_rq();
-+ raw_spin_lock(&rq->lock);
-+
-+ rq->curr->time_slice /= 2;
-+ p->time_slice = rq->curr->time_slice;
-+#ifdef CONFIG_SCHED_HRTICK
-+ hrtick_start(rq, rq->curr->time_slice);
-+#endif
-+
-+ if (p->time_slice < RESCHED_NS) {
-+ p->time_slice = sysctl_sched_base_slice;
-+ resched_curr(rq);
-+ }
-+ sched_task_fork(p, rq);
-+ raw_spin_unlock(&rq->lock);
-+
-+ rseq_migrate(p);
-+ /*
-+ * We're setting the CPU for the first time, we don't migrate,
-+ * so use __set_task_cpu().
-+ */
-+ __set_task_cpu(p, smp_processor_id());
-+ raw_spin_unlock_irqrestore(&p->pi_lock, flags);
-+}
-+
-+void sched_post_fork(struct task_struct *p)
-+{
-+}
-+
-+#ifdef CONFIG_SCHEDSTATS
-+
-+DEFINE_STATIC_KEY_FALSE(sched_schedstats);
-+
-+static void set_schedstats(bool enabled)
-+{
-+ if (enabled)
-+ static_branch_enable(&sched_schedstats);
-+ else
-+ static_branch_disable(&sched_schedstats);
-+}
-+
-+void force_schedstat_enabled(void)
-+{
-+ if (!schedstat_enabled()) {
-+ pr_info("kernel profiling enabled schedstats, disable via kernel.sched_schedstats.\n");
-+ static_branch_enable(&sched_schedstats);
-+ }
-+}
-+
-+static int __init setup_schedstats(char *str)
-+{
-+ int ret = 0;
-+ if (!str)
-+ goto out;
-+
-+ if (!strcmp(str, "enable")) {
-+ set_schedstats(true);
-+ ret = 1;
-+ } else if (!strcmp(str, "disable")) {
-+ set_schedstats(false);
-+ ret = 1;
-+ }
-+out:
-+ if (!ret)
-+ pr_warn("Unable to parse schedstats=\n");
-+
-+ return ret;
-+}
-+__setup("schedstats=", setup_schedstats);
-+
-+#ifdef CONFIG_PROC_SYSCTL
-+static int sysctl_schedstats(struct ctl_table *table, int write, void *buffer,
-+ size_t *lenp, loff_t *ppos)
-+{
-+ struct ctl_table t;
-+ int err;
-+ int state = static_branch_likely(&sched_schedstats);
-+
-+ if (write && !capable(CAP_SYS_ADMIN))
-+ return -EPERM;
-+
-+ t = *table;
-+ t.data = &state;
-+ err = proc_dointvec_minmax(&t, write, buffer, lenp, ppos);
-+ if (err < 0)
-+ return err;
-+ if (write)
-+ set_schedstats(state);
-+ return err;
-+}
-+
-+static struct ctl_table sched_core_sysctls[] = {
-+ {
-+ .procname = "sched_schedstats",
-+ .data = NULL,
-+ .maxlen = sizeof(unsigned int),
-+ .mode = 0644,
-+ .proc_handler = sysctl_schedstats,
-+ .extra1 = SYSCTL_ZERO,
-+ .extra2 = SYSCTL_ONE,
-+ },
-+ {}
-+};
-+static int __init sched_core_sysctl_init(void)
-+{
-+ register_sysctl_init("kernel", sched_core_sysctls);
-+ return 0;
-+}
-+late_initcall(sched_core_sysctl_init);
-+#endif /* CONFIG_PROC_SYSCTL */
-+#endif /* CONFIG_SCHEDSTATS */
-+
-+/*
-+ * wake_up_new_task - wake up a newly created task for the first time.
-+ *
-+ * This function will do some initial scheduler statistics housekeeping
-+ * that must be done for every newly created context, then puts the task
-+ * on the runqueue and wakes it.
-+ */
-+void wake_up_new_task(struct task_struct *p)
-+{
-+ unsigned long flags;
-+ struct rq *rq;
-+
-+ raw_spin_lock_irqsave(&p->pi_lock, flags);
-+ WRITE_ONCE(p->__state, TASK_RUNNING);
-+ rq = cpu_rq(select_task_rq(p));
-+#ifdef CONFIG_SMP
-+ rseq_migrate(p);
-+ /*
-+ * Fork balancing, do it here and not earlier because:
-+ * - cpus_ptr can change in the fork path
-+ * - any previously selected CPU might disappear through hotplug
-+ *
-+ * Use __set_task_cpu() to avoid calling sched_class::migrate_task_rq,
-+ * as we're not fully set-up yet.
-+ */
-+ __set_task_cpu(p, cpu_of(rq));
-+#endif
-+
-+ raw_spin_lock(&rq->lock);
-+ update_rq_clock(rq);
-+
-+ activate_task(p, rq);
-+ trace_sched_wakeup_new(p);
-+ wakeup_preempt(rq);
-+
-+ raw_spin_unlock(&rq->lock);
-+ raw_spin_unlock_irqrestore(&p->pi_lock, flags);
-+}
-+
-+#ifdef CONFIG_PREEMPT_NOTIFIERS
-+
-+static DEFINE_STATIC_KEY_FALSE(preempt_notifier_key);
-+
-+void preempt_notifier_inc(void)
-+{
-+ static_branch_inc(&preempt_notifier_key);
-+}
-+EXPORT_SYMBOL_GPL(preempt_notifier_inc);
-+
-+void preempt_notifier_dec(void)
-+{
-+ static_branch_dec(&preempt_notifier_key);
-+}
-+EXPORT_SYMBOL_GPL(preempt_notifier_dec);
-+
-+/**
-+ * preempt_notifier_register - tell me when current is being preempted & rescheduled
-+ * @notifier: notifier struct to register
-+ */
-+void preempt_notifier_register(struct preempt_notifier *notifier)
-+{
-+ if (!static_branch_unlikely(&preempt_notifier_key))
-+ WARN(1, "registering preempt_notifier while notifiers disabled\n");
-+
-+ hlist_add_head(&notifier->link, &current->preempt_notifiers);
-+}
-+EXPORT_SYMBOL_GPL(preempt_notifier_register);
-+
-+/**
-+ * preempt_notifier_unregister - no longer interested in preemption notifications
-+ * @notifier: notifier struct to unregister
-+ *
-+ * This is *not* safe to call from within a preemption notifier.
-+ */
-+void preempt_notifier_unregister(struct preempt_notifier *notifier)
-+{
-+ hlist_del(&notifier->link);
-+}
-+EXPORT_SYMBOL_GPL(preempt_notifier_unregister);
-+
-+static void __fire_sched_in_preempt_notifiers(struct task_struct *curr)
-+{
-+ struct preempt_notifier *notifier;
-+
-+ hlist_for_each_entry(notifier, &curr->preempt_notifiers, link)
-+ notifier->ops->sched_in(notifier, raw_smp_processor_id());
-+}
-+
-+static __always_inline void fire_sched_in_preempt_notifiers(struct task_struct *curr)
-+{
-+ if (static_branch_unlikely(&preempt_notifier_key))
-+ __fire_sched_in_preempt_notifiers(curr);
-+}
-+
-+static void
-+__fire_sched_out_preempt_notifiers(struct task_struct *curr,
-+ struct task_struct *next)
-+{
-+ struct preempt_notifier *notifier;
-+
-+ hlist_for_each_entry(notifier, &curr->preempt_notifiers, link)
-+ notifier->ops->sched_out(notifier, next);
-+}
-+
-+static __always_inline void
-+fire_sched_out_preempt_notifiers(struct task_struct *curr,
-+ struct task_struct *next)
-+{
-+ if (static_branch_unlikely(&preempt_notifier_key))
-+ __fire_sched_out_preempt_notifiers(curr, next);
-+}
-+
-+#else /* !CONFIG_PREEMPT_NOTIFIERS */
-+
-+static inline void fire_sched_in_preempt_notifiers(struct task_struct *curr)
-+{
-+}
-+
-+static inline void
-+fire_sched_out_preempt_notifiers(struct task_struct *curr,
-+ struct task_struct *next)
-+{
-+}
-+
-+#endif /* CONFIG_PREEMPT_NOTIFIERS */
-+
-+static inline void prepare_task(struct task_struct *next)
-+{
-+ /*
-+ * Claim the task as running, we do this before switching to it
-+ * such that any running task will have this set.
-+ *
-+ * See the smp_load_acquire(&p->on_cpu) case in ttwu() and
-+ * its ordering comment.
-+ */
-+ WRITE_ONCE(next->on_cpu, 1);
-+}
-+
-+static inline void finish_task(struct task_struct *prev)
-+{
-+#ifdef CONFIG_SMP
-+ /*
-+ * This must be the very last reference to @prev from this CPU. After
-+ * p->on_cpu is cleared, the task can be moved to a different CPU. We
-+ * must ensure this doesn't happen until the switch is completely
-+ * finished.
-+ *
-+ * In particular, the load of prev->state in finish_task_switch() must
-+ * happen before this.
-+ *
-+ * Pairs with the smp_cond_load_acquire() in try_to_wake_up().
-+ */
-+ smp_store_release(&prev->on_cpu, 0);
-+#else
-+ prev->on_cpu = 0;
-+#endif
-+}
-+
-+#ifdef CONFIG_SMP
-+
-+static void do_balance_callbacks(struct rq *rq, struct balance_callback *head)
-+{
-+ void (*func)(struct rq *rq);
-+ struct balance_callback *next;
-+
-+ lockdep_assert_held(&rq->lock);
-+
-+ while (head) {
-+ func = (void (*)(struct rq *))head->func;
-+ next = head->next;
-+ head->next = NULL;
-+ head = next;
-+
-+ func(rq);
-+ }
-+}
-+
-+static void balance_push(struct rq *rq);
-+
-+/*
-+ * balance_push_callback is a right abuse of the callback interface and plays
-+ * by significantly different rules.
-+ *
-+ * Where the normal balance_callback's purpose is to be ran in the same context
-+ * that queued it (only later, when it's safe to drop rq->lock again),
-+ * balance_push_callback is specifically targeted at __schedule().
-+ *
-+ * This abuse is tolerated because it places all the unlikely/odd cases behind
-+ * a single test, namely: rq->balance_callback == NULL.
-+ */
-+struct balance_callback balance_push_callback = {
-+ .next = NULL,
-+ .func = balance_push,
-+};
-+
-+static inline struct balance_callback *
-+__splice_balance_callbacks(struct rq *rq, bool split)
-+{
-+ struct balance_callback *head = rq->balance_callback;
-+
-+ if (likely(!head))
-+ return NULL;
-+
-+ lockdep_assert_rq_held(rq);
-+ /*
-+ * Must not take balance_push_callback off the list when
-+ * splice_balance_callbacks() and balance_callbacks() are not
-+ * in the same rq->lock section.
-+ *
-+ * In that case it would be possible for __schedule() to interleave
-+ * and observe the list empty.
-+ */
-+ if (split && head == &balance_push_callback)
-+ head = NULL;
-+ else
-+ rq->balance_callback = NULL;
-+
-+ return head;
-+}
-+
-+static inline struct balance_callback *splice_balance_callbacks(struct rq *rq)
-+{
-+ return __splice_balance_callbacks(rq, true);
-+}
-+
-+static void __balance_callbacks(struct rq *rq)
-+{
-+ do_balance_callbacks(rq, __splice_balance_callbacks(rq, false));
-+}
-+
-+static inline void balance_callbacks(struct rq *rq, struct balance_callback *head)
-+{
-+ unsigned long flags;
-+
-+ if (unlikely(head)) {
-+ raw_spin_lock_irqsave(&rq->lock, flags);
-+ do_balance_callbacks(rq, head);
-+ raw_spin_unlock_irqrestore(&rq->lock, flags);
-+ }
-+}
-+
-+#else
-+
-+static inline void __balance_callbacks(struct rq *rq)
-+{
-+}
-+
-+static inline struct balance_callback *splice_balance_callbacks(struct rq *rq)
-+{
-+ return NULL;
-+}
-+
-+static inline void balance_callbacks(struct rq *rq, struct balance_callback *head)
-+{
-+}
-+
-+#endif
-+
-+static inline void
-+prepare_lock_switch(struct rq *rq, struct task_struct *next)
-+{
-+ /*
-+ * Since the runqueue lock will be released by the next
-+ * task (which is an invalid locking op but in the case
-+ * of the scheduler it's an obvious special-case), so we
-+ * do an early lockdep release here:
-+ */
-+ spin_release(&rq->lock.dep_map, _THIS_IP_);
-+#ifdef CONFIG_DEBUG_SPINLOCK
-+ /* this is a valid case when another task releases the spinlock */
-+ rq->lock.owner = next;
-+#endif
-+}
-+
-+static inline void finish_lock_switch(struct rq *rq)
-+{
-+ /*
-+ * If we are tracking spinlock dependencies then we have to
-+ * fix up the runqueue lock - which gets 'carried over' from
-+ * prev into current:
-+ */
-+ spin_acquire(&rq->lock.dep_map, 0, 0, _THIS_IP_);
-+ __balance_callbacks(rq);
-+ raw_spin_unlock_irq(&rq->lock);
-+}
-+
-+/*
-+ * NOP if the arch has not defined these:
-+ */
-+
-+#ifndef prepare_arch_switch
-+# define prepare_arch_switch(next) do { } while (0)
-+#endif
-+
-+#ifndef finish_arch_post_lock_switch
-+# define finish_arch_post_lock_switch() do { } while (0)
-+#endif
-+
-+static inline void kmap_local_sched_out(void)
-+{
-+#ifdef CONFIG_KMAP_LOCAL
-+ if (unlikely(current->kmap_ctrl.idx))
-+ __kmap_local_sched_out();
-+#endif
-+}
-+
-+static inline void kmap_local_sched_in(void)
-+{
-+#ifdef CONFIG_KMAP_LOCAL
-+ if (unlikely(current->kmap_ctrl.idx))
-+ __kmap_local_sched_in();
-+#endif
-+}
-+
-+/**
-+ * prepare_task_switch - prepare to switch tasks
-+ * @rq: the runqueue preparing to switch
-+ * @next: the task we are going to switch to.
-+ *
-+ * This is called with the rq lock held and interrupts off. It must
-+ * be paired with a subsequent finish_task_switch after the context
-+ * switch.
-+ *
-+ * prepare_task_switch sets up locking and calls architecture specific
-+ * hooks.
-+ */
-+static inline void
-+prepare_task_switch(struct rq *rq, struct task_struct *prev,
-+ struct task_struct *next)
-+{
-+ kcov_prepare_switch(prev);
-+ sched_info_switch(rq, prev, next);
-+ perf_event_task_sched_out(prev, next);
-+ rseq_preempt(prev);
-+ fire_sched_out_preempt_notifiers(prev, next);
-+ kmap_local_sched_out();
-+ prepare_task(next);
-+ prepare_arch_switch(next);
-+}
-+
-+/**
-+ * finish_task_switch - clean up after a task-switch
-+ * @rq: runqueue associated with task-switch
-+ * @prev: the thread we just switched away from.
-+ *
-+ * finish_task_switch must be called after the context switch, paired
-+ * with a prepare_task_switch call before the context switch.
-+ * finish_task_switch will reconcile locking set up by prepare_task_switch,
-+ * and do any other architecture-specific cleanup actions.
-+ *
-+ * Note that we may have delayed dropping an mm in context_switch(). If
-+ * so, we finish that here outside of the runqueue lock. (Doing it
-+ * with the lock held can cause deadlocks; see schedule() for
-+ * details.)
-+ *
-+ * The context switch have flipped the stack from under us and restored the
-+ * local variables which were saved when this task called schedule() in the
-+ * past. prev == current is still correct but we need to recalculate this_rq
-+ * because prev may have moved to another CPU.
-+ */
-+static struct rq *finish_task_switch(struct task_struct *prev)
-+ __releases(rq->lock)
-+{
-+ struct rq *rq = this_rq();
-+ struct mm_struct *mm = rq->prev_mm;
-+ unsigned int prev_state;
-+
-+ /*
-+ * The previous task will have left us with a preempt_count of 2
-+ * because it left us after:
-+ *
-+ * schedule()
-+ * preempt_disable(); // 1
-+ * __schedule()
-+ * raw_spin_lock_irq(&rq->lock) // 2
-+ *
-+ * Also, see FORK_PREEMPT_COUNT.
-+ */
-+ if (WARN_ONCE(preempt_count() != 2*PREEMPT_DISABLE_OFFSET,
-+ "corrupted preempt_count: %s/%d/0x%x\n",
-+ current->comm, current->pid, preempt_count()))
-+ preempt_count_set(FORK_PREEMPT_COUNT);
-+
-+ rq->prev_mm = NULL;
-+
-+ /*
-+ * A task struct has one reference for the use as "current".
-+ * If a task dies, then it sets TASK_DEAD in tsk->state and calls
-+ * schedule one last time. The schedule call will never return, and
-+ * the scheduled task must drop that reference.
-+ *
-+ * We must observe prev->state before clearing prev->on_cpu (in
-+ * finish_task), otherwise a concurrent wakeup can get prev
-+ * running on another CPU and we could rave with its RUNNING -> DEAD
-+ * transition, resulting in a double drop.
-+ */
-+ prev_state = READ_ONCE(prev->__state);
-+ vtime_task_switch(prev);
-+ perf_event_task_sched_in(prev, current);
-+ finish_task(prev);
-+ tick_nohz_task_switch();
-+ finish_lock_switch(rq);
-+ finish_arch_post_lock_switch();
-+ kcov_finish_switch(current);
-+ /*
-+ * kmap_local_sched_out() is invoked with rq::lock held and
-+ * interrupts disabled. There is no requirement for that, but the
-+ * sched out code does not have an interrupt enabled section.
-+ * Restoring the maps on sched in does not require interrupts being
-+ * disabled either.
-+ */
-+ kmap_local_sched_in();
-+
-+ fire_sched_in_preempt_notifiers(current);
-+ /*
-+ * When switching through a kernel thread, the loop in
-+ * membarrier_{private,global}_expedited() may have observed that
-+ * kernel thread and not issued an IPI. It is therefore possible to
-+ * schedule between user->kernel->user threads without passing though
-+ * switch_mm(). Membarrier requires a barrier after storing to
-+ * rq->curr, before returning to userspace, so provide them here:
-+ *
-+ * - a full memory barrier for {PRIVATE,GLOBAL}_EXPEDITED, implicitly
-+ * provided by mmdrop(),
-+ * - a sync_core for SYNC_CORE.
-+ */
-+ if (mm) {
-+ membarrier_mm_sync_core_before_usermode(mm);
-+ mmdrop_sched(mm);
-+ }
-+ if (unlikely(prev_state == TASK_DEAD)) {
-+ /* Task is done with its stack. */
-+ put_task_stack(prev);
-+
-+ put_task_struct_rcu_user(prev);
-+ }
-+
-+ return rq;
-+}
-+
-+/**
-+ * schedule_tail - first thing a freshly forked thread must call.
-+ * @prev: the thread we just switched away from.
-+ */
-+asmlinkage __visible void schedule_tail(struct task_struct *prev)
-+ __releases(rq->lock)
-+{
-+ /*
-+ * New tasks start with FORK_PREEMPT_COUNT, see there and
-+ * finish_task_switch() for details.
-+ *
-+ * finish_task_switch() will drop rq->lock() and lower preempt_count
-+ * and the preempt_enable() will end up enabling preemption (on
-+ * PREEMPT_COUNT kernels).
-+ */
-+
-+ finish_task_switch(prev);
-+ preempt_enable();
-+
-+ if (current->set_child_tid)
-+ put_user(task_pid_vnr(current), current->set_child_tid);
-+
-+ calculate_sigpending();
-+}
-+
-+/*
-+ * context_switch - switch to the new MM and the new thread's register state.
-+ */
-+static __always_inline struct rq *
-+context_switch(struct rq *rq, struct task_struct *prev,
-+ struct task_struct *next)
-+{
-+ prepare_task_switch(rq, prev, next);
-+
-+ /*
-+ * For paravirt, this is coupled with an exit in switch_to to
-+ * combine the page table reload and the switch backend into
-+ * one hypercall.
-+ */
-+ arch_start_context_switch(prev);
-+
-+ /*
-+ * kernel -> kernel lazy + transfer active
-+ * user -> kernel lazy + mmgrab() active
-+ *
-+ * kernel -> user switch + mmdrop() active
-+ * user -> user switch
-+ *
-+ * switch_mm_cid() needs to be updated if the barriers provided
-+ * by context_switch() are modified.
-+ */
-+ if (!next->mm) { // to kernel
-+ enter_lazy_tlb(prev->active_mm, next);
-+
-+ next->active_mm = prev->active_mm;
-+ if (prev->mm) // from user
-+ mmgrab(prev->active_mm);
-+ else
-+ prev->active_mm = NULL;
-+ } else { // to user
-+ membarrier_switch_mm(rq, prev->active_mm, next->mm);
-+ /*
-+ * sys_membarrier() requires an smp_mb() between setting
-+ * rq->curr / membarrier_switch_mm() and returning to userspace.
-+ *
-+ * The below provides this either through switch_mm(), or in
-+ * case 'prev->active_mm == next->mm' through
-+ * finish_task_switch()'s mmdrop().
-+ */
-+ switch_mm_irqs_off(prev->active_mm, next->mm, next);
-+ lru_gen_use_mm(next->mm);
-+
-+ if (!prev->mm) { // from kernel
-+ /* will mmdrop() in finish_task_switch(). */
-+ rq->prev_mm = prev->active_mm;
-+ prev->active_mm = NULL;
-+ }
-+ }
-+
-+ /* switch_mm_cid() requires the memory barriers above. */
-+ switch_mm_cid(rq, prev, next);
-+
-+ prepare_lock_switch(rq, next);
-+
-+ /* Here we just switch the register state and the stack. */
-+ switch_to(prev, next, prev);
-+ barrier();
-+
-+ return finish_task_switch(prev);
-+}
-+
-+/*
-+ * nr_running, nr_uninterruptible and nr_context_switches:
-+ *
-+ * externally visible scheduler statistics: current number of runnable
-+ * threads, total number of context switches performed since bootup.
-+ */
-+unsigned int nr_running(void)
-+{
-+ unsigned int i, sum = 0;
-+
-+ for_each_online_cpu(i)
-+ sum += cpu_rq(i)->nr_running;
-+
-+ return sum;
-+}
-+
-+/*
-+ * Check if only the current task is running on the CPU.
-+ *
-+ * Caution: this function does not check that the caller has disabled
-+ * preemption, thus the result might have a time-of-check-to-time-of-use
-+ * race. The caller is responsible to use it correctly, for example:
-+ *
-+ * - from a non-preemptible section (of course)
-+ *
-+ * - from a thread that is bound to a single CPU
-+ *
-+ * - in a loop with very short iterations (e.g. a polling loop)
-+ */
-+bool single_task_running(void)
-+{
-+ return raw_rq()->nr_running == 1;
-+}
-+EXPORT_SYMBOL(single_task_running);
-+
-+unsigned long long nr_context_switches_cpu(int cpu)
-+{
-+ return cpu_rq(cpu)->nr_switches;
-+}
-+
-+unsigned long long nr_context_switches(void)
-+{
-+ int i;
-+ unsigned long long sum = 0;
-+
-+ for_each_possible_cpu(i)
-+ sum += cpu_rq(i)->nr_switches;
-+
-+ return sum;
-+}
-+
-+/*
-+ * Consumers of these two interfaces, like for example the cpuidle menu
-+ * governor, are using nonsensical data. Preferring shallow idle state selection
-+ * for a CPU that has IO-wait which might not even end up running the task when
-+ * it does become runnable.
-+ */
-+
-+unsigned int nr_iowait_cpu(int cpu)
-+{
-+ return atomic_read(&cpu_rq(cpu)->nr_iowait);
-+}
-+
-+/*
-+ * IO-wait accounting, and how it's mostly bollocks (on SMP).
-+ *
-+ * The idea behind IO-wait account is to account the idle time that we could
-+ * have spend running if it were not for IO. That is, if we were to improve the
-+ * storage performance, we'd have a proportional reduction in IO-wait time.
-+ *
-+ * This all works nicely on UP, where, when a task blocks on IO, we account
-+ * idle time as IO-wait, because if the storage were faster, it could've been
-+ * running and we'd not be idle.
-+ *
-+ * This has been extended to SMP, by doing the same for each CPU. This however
-+ * is broken.
-+ *
-+ * Imagine for instance the case where two tasks block on one CPU, only the one
-+ * CPU will have IO-wait accounted, while the other has regular idle. Even
-+ * though, if the storage were faster, both could've ran at the same time,
-+ * utilising both CPUs.
-+ *
-+ * This means, that when looking globally, the current IO-wait accounting on
-+ * SMP is a lower bound, by reason of under accounting.
-+ *
-+ * Worse, since the numbers are provided per CPU, they are sometimes
-+ * interpreted per CPU, and that is nonsensical. A blocked task isn't strictly
-+ * associated with any one particular CPU, it can wake to another CPU than it
-+ * blocked on. This means the per CPU IO-wait number is meaningless.
-+ *
-+ * Task CPU affinities can make all that even more 'interesting'.
-+ */
-+
-+unsigned int nr_iowait(void)
-+{
-+ unsigned int i, sum = 0;
-+
-+ for_each_possible_cpu(i)
-+ sum += nr_iowait_cpu(i);
-+
-+ return sum;
-+}
-+
-+#ifdef CONFIG_SMP
-+
-+/*
-+ * sched_exec - execve() is a valuable balancing opportunity, because at
-+ * this point the task has the smallest effective memory and cache
-+ * footprint.
-+ */
-+void sched_exec(void)
-+{
-+}
-+
-+#endif
-+
-+DEFINE_PER_CPU(struct kernel_stat, kstat);
-+DEFINE_PER_CPU(struct kernel_cpustat, kernel_cpustat);
-+
-+EXPORT_PER_CPU_SYMBOL(kstat);
-+EXPORT_PER_CPU_SYMBOL(kernel_cpustat);
-+
-+static inline void update_curr(struct rq *rq, struct task_struct *p)
-+{
-+ s64 ns = rq->clock_task - p->last_ran;
-+
-+ p->sched_time += ns;
-+ cgroup_account_cputime(p, ns);
-+ account_group_exec_runtime(p, ns);
-+
-+ p->time_slice -= ns;
-+ p->last_ran = rq->clock_task;
-+}
-+
-+/*
-+ * Return accounted runtime for the task.
-+ * Return separately the current's pending runtime that have not been
-+ * accounted yet.
-+ */
-+unsigned long long task_sched_runtime(struct task_struct *p)
-+{
-+ unsigned long flags;
-+ struct rq *rq;
-+ raw_spinlock_t *lock;
-+ u64 ns;
-+
-+#if defined(CONFIG_64BIT) && defined(CONFIG_SMP)
-+ /*
-+ * 64-bit doesn't need locks to atomically read a 64-bit value.
-+ * So we have a optimization chance when the task's delta_exec is 0.
-+ * Reading ->on_cpu is racy, but this is ok.
-+ *
-+ * If we race with it leaving CPU, we'll take a lock. So we're correct.
-+ * If we race with it entering CPU, unaccounted time is 0. This is
-+ * indistinguishable from the read occurring a few cycles earlier.
-+ * If we see ->on_cpu without ->on_rq, the task is leaving, and has
-+ * been accounted, so we're correct here as well.
-+ */
-+ if (!p->on_cpu || !task_on_rq_queued(p))
-+ return tsk_seruntime(p);
-+#endif
-+
-+ rq = task_access_lock_irqsave(p, &lock, &flags);
-+ /*
-+ * Must be ->curr _and_ ->on_rq. If dequeued, we would
-+ * project cycles that may never be accounted to this
-+ * thread, breaking clock_gettime().
-+ */
-+ if (p == rq->curr && task_on_rq_queued(p)) {
-+ update_rq_clock(rq);
-+ update_curr(rq, p);
-+ }
-+ ns = tsk_seruntime(p);
-+ task_access_unlock_irqrestore(p, lock, &flags);
-+
-+ return ns;
-+}
-+
-+/* This manages tasks that have run out of timeslice during a scheduler_tick */
-+static inline void scheduler_task_tick(struct rq *rq)
-+{
-+ struct task_struct *p = rq->curr;
-+
-+ if (is_idle_task(p))
-+ return;
-+
-+ update_curr(rq, p);
-+ cpufreq_update_util(rq, 0);
-+
-+ /*
-+ * Tasks have less than RESCHED_NS of time slice left they will be
-+ * rescheduled.
-+ */
-+ if (p->time_slice >= RESCHED_NS)
-+ return;
-+ set_tsk_need_resched(p);
-+ set_preempt_need_resched();
-+}
-+
-+#ifdef CONFIG_SCHED_DEBUG
-+static u64 cpu_resched_latency(struct rq *rq)
-+{
-+ int latency_warn_ms = READ_ONCE(sysctl_resched_latency_warn_ms);
-+ u64 resched_latency, now = rq_clock(rq);
-+ static bool warned_once;
-+
-+ if (sysctl_resched_latency_warn_once && warned_once)
-+ return 0;
-+
-+ if (!need_resched() || !latency_warn_ms)
-+ return 0;
-+
-+ if (system_state == SYSTEM_BOOTING)
-+ return 0;
-+
-+ if (!rq->last_seen_need_resched_ns) {
-+ rq->last_seen_need_resched_ns = now;
-+ rq->ticks_without_resched = 0;
-+ return 0;
-+ }
-+
-+ rq->ticks_without_resched++;
-+ resched_latency = now - rq->last_seen_need_resched_ns;
-+ if (resched_latency <= latency_warn_ms * NSEC_PER_MSEC)
-+ return 0;
-+
-+ warned_once = true;
-+
-+ return resched_latency;
-+}
-+
-+static int __init setup_resched_latency_warn_ms(char *str)
-+{
-+ long val;
-+
-+ if ((kstrtol(str, 0, &val))) {
-+ pr_warn("Unable to set resched_latency_warn_ms\n");
-+ return 1;
-+ }
-+
-+ sysctl_resched_latency_warn_ms = val;
-+ return 1;
-+}
-+__setup("resched_latency_warn_ms=", setup_resched_latency_warn_ms);
-+#else
-+static inline u64 cpu_resched_latency(struct rq *rq) { return 0; }
-+#endif /* CONFIG_SCHED_DEBUG */
-+
-+/*
-+ * This function gets called by the timer code, with HZ frequency.
-+ * We call it with interrupts disabled.
-+ */
-+void scheduler_tick(void)
-+{
-+ int cpu __maybe_unused = smp_processor_id();
-+ struct rq *rq = cpu_rq(cpu);
-+ struct task_struct *curr = rq->curr;
-+ u64 resched_latency;
-+
-+ if (housekeeping_cpu(cpu, HK_TYPE_TICK))
-+ arch_scale_freq_tick();
-+
-+ sched_clock_tick();
-+
-+ raw_spin_lock(&rq->lock);
-+ update_rq_clock(rq);
-+
-+ scheduler_task_tick(rq);
-+ if (sched_feat(LATENCY_WARN))
-+ resched_latency = cpu_resched_latency(rq);
-+ calc_global_load_tick(rq);
-+
-+ task_tick_mm_cid(rq, rq->curr);
-+
-+ raw_spin_unlock(&rq->lock);
-+
-+ if (sched_feat(LATENCY_WARN) && resched_latency)
-+ resched_latency_warn(cpu, resched_latency);
-+
-+ perf_event_task_tick();
-+
-+ if (curr->flags & PF_WQ_WORKER)
-+ wq_worker_tick(curr);
-+}
-+
-+#ifdef CONFIG_SCHED_SMT
-+static inline int sg_balance_cpu_stop(void *data)
-+{
-+ struct rq *rq = this_rq();
-+ struct task_struct *p = data;
-+ cpumask_t tmp;
-+ unsigned long flags;
-+
-+ local_irq_save(flags);
-+
-+ raw_spin_lock(&p->pi_lock);
-+ raw_spin_lock(&rq->lock);
-+
-+ rq->active_balance = 0;
-+ /* _something_ may have changed the task, double check again */
-+ if (task_on_rq_queued(p) && task_rq(p) == rq &&
-+ cpumask_and(&tmp, p->cpus_ptr, &sched_sg_idle_mask) &&
-+ !is_migration_disabled(p)) {
-+ int cpu = cpu_of(rq);
-+ int dcpu = __best_mask_cpu(&tmp, per_cpu(sched_cpu_llc_mask, cpu));
-+ rq = move_queued_task(rq, p, dcpu);
-+ }
-+
-+ raw_spin_unlock(&rq->lock);
-+ raw_spin_unlock(&p->pi_lock);
-+
-+ local_irq_restore(flags);
-+
-+ return 0;
-+}
-+
-+/* sg_balance_trigger - trigger slibing group balance for @cpu */
-+static inline int sg_balance_trigger(const int cpu)
-+{
-+ struct rq *rq= cpu_rq(cpu);
-+ unsigned long flags;
-+ struct task_struct *curr;
-+ int res;
-+
-+ if (!raw_spin_trylock_irqsave(&rq->lock, flags))
-+ return 0;
-+ curr = rq->curr;
-+ res = (!is_idle_task(curr)) && (1 == rq->nr_running) &&\
-+ cpumask_intersects(curr->cpus_ptr, &sched_sg_idle_mask) &&\
-+ !is_migration_disabled(curr) && (!rq->active_balance);
-+
-+ if (res)
-+ rq->active_balance = 1;
-+
-+ raw_spin_unlock_irqrestore(&rq->lock, flags);
-+
-+ if (res)
-+ stop_one_cpu_nowait(cpu, sg_balance_cpu_stop, curr,
-+ &rq->active_balance_work);
-+ return res;
-+}
-+
-+/*
-+ * sg_balance - slibing group balance check for run queue @rq
-+ */
-+static inline void sg_balance(struct rq *rq, int cpu)
-+{
-+ cpumask_t chk;
-+
-+ /* exit when cpu is offline */
-+ if (unlikely(!rq->online))
-+ return;
-+
-+ /*
-+ * Only cpu in slibing idle group will do the checking and then
-+ * find potential cpus which can migrate the current running task
-+ */
-+ if (cpumask_test_cpu(cpu, &sched_sg_idle_mask) &&
-+ cpumask_andnot(&chk, cpu_online_mask, sched_idle_mask) &&
-+ cpumask_andnot(&chk, &chk, &sched_rq_pending_mask)) {
-+ int i;
-+
-+ for_each_cpu_wrap(i, &chk, cpu) {
-+ if (!cpumask_intersects(cpu_smt_mask(i), sched_idle_mask) &&\
-+ sg_balance_trigger(i))
-+ return;
-+ }
-+ }
-+}
-+#endif /* CONFIG_SCHED_SMT */
-+
-+#ifdef CONFIG_NO_HZ_FULL
-+
-+struct tick_work {
-+ int cpu;
-+ atomic_t state;
-+ struct delayed_work work;
-+};
-+/* Values for ->state, see diagram below. */
-+#define TICK_SCHED_REMOTE_OFFLINE 0
-+#define TICK_SCHED_REMOTE_OFFLINING 1
-+#define TICK_SCHED_REMOTE_RUNNING 2
-+
-+/*
-+ * State diagram for ->state:
-+ *
-+ *
-+ * TICK_SCHED_REMOTE_OFFLINE
-+ * | ^
-+ * | |
-+ * | | sched_tick_remote()
-+ * | |
-+ * | |
-+ * +--TICK_SCHED_REMOTE_OFFLINING
-+ * | ^
-+ * | |
-+ * sched_tick_start() | | sched_tick_stop()
-+ * | |
-+ * V |
-+ * TICK_SCHED_REMOTE_RUNNING
-+ *
-+ *
-+ * Other transitions get WARN_ON_ONCE(), except that sched_tick_remote()
-+ * and sched_tick_start() are happy to leave the state in RUNNING.
-+ */
-+
-+static struct tick_work __percpu *tick_work_cpu;
-+
-+static void sched_tick_remote(struct work_struct *work)
-+{
-+ struct delayed_work *dwork = to_delayed_work(work);
-+ struct tick_work *twork = container_of(dwork, struct tick_work, work);
-+ int cpu = twork->cpu;
-+ struct rq *rq = cpu_rq(cpu);
-+ int os;
-+
-+ /*
-+ * Handle the tick only if it appears the remote CPU is running in full
-+ * dynticks mode. The check is racy by nature, but missing a tick or
-+ * having one too much is no big deal because the scheduler tick updates
-+ * statistics and checks timeslices in a time-independent way, regardless
-+ * of when exactly it is running.
-+ */
-+ if (tick_nohz_tick_stopped_cpu(cpu)) {
-+ guard(raw_spinlock_irqsave)(&rq->lock);
-+ struct task_struct *curr = rq->curr;
-+
-+ if (cpu_online(cpu)) {
-+ update_rq_clock(rq);
-+
-+ if (!is_idle_task(curr)) {
-+ /*
-+ * Make sure the next tick runs within a
-+ * reasonable amount of time.
-+ */
-+ u64 delta = rq_clock_task(rq) - curr->last_ran;
-+ WARN_ON_ONCE(delta > (u64)NSEC_PER_SEC * 3);
-+ }
-+ scheduler_task_tick(rq);
-+
-+ calc_load_nohz_remote(rq);
-+ }
-+ }
-+
-+ /*
-+ * Run the remote tick once per second (1Hz). This arbitrary
-+ * frequency is large enough to avoid overload but short enough
-+ * to keep scheduler internal stats reasonably up to date. But
-+ * first update state to reflect hotplug activity if required.
-+ */
-+ os = atomic_fetch_add_unless(&twork->state, -1, TICK_SCHED_REMOTE_RUNNING);
-+ WARN_ON_ONCE(os == TICK_SCHED_REMOTE_OFFLINE);
-+ if (os == TICK_SCHED_REMOTE_RUNNING)
-+ queue_delayed_work(system_unbound_wq, dwork, HZ);
-+}
-+
-+static void sched_tick_start(int cpu)
-+{
-+ int os;
-+ struct tick_work *twork;
-+
-+ if (housekeeping_cpu(cpu, HK_TYPE_TICK))
-+ return;
-+
-+ WARN_ON_ONCE(!tick_work_cpu);
-+
-+ twork = per_cpu_ptr(tick_work_cpu, cpu);
-+ os = atomic_xchg(&twork->state, TICK_SCHED_REMOTE_RUNNING);
-+ WARN_ON_ONCE(os == TICK_SCHED_REMOTE_RUNNING);
-+ if (os == TICK_SCHED_REMOTE_OFFLINE) {
-+ twork->cpu = cpu;
-+ INIT_DELAYED_WORK(&twork->work, sched_tick_remote);
-+ queue_delayed_work(system_unbound_wq, &twork->work, HZ);
-+ }
-+}
-+
-+#ifdef CONFIG_HOTPLUG_CPU
-+static void sched_tick_stop(int cpu)
-+{
-+ struct tick_work *twork;
-+ int os;
-+
-+ if (housekeeping_cpu(cpu, HK_TYPE_TICK))
-+ return;
-+
-+ WARN_ON_ONCE(!tick_work_cpu);
-+
-+ twork = per_cpu_ptr(tick_work_cpu, cpu);
-+ /* There cannot be competing actions, but don't rely on stop-machine. */
-+ os = atomic_xchg(&twork->state, TICK_SCHED_REMOTE_OFFLINING);
-+ WARN_ON_ONCE(os != TICK_SCHED_REMOTE_RUNNING);
-+ /* Don't cancel, as this would mess up the state machine. */
-+}
-+#endif /* CONFIG_HOTPLUG_CPU */
-+
-+int __init sched_tick_offload_init(void)
-+{
-+ tick_work_cpu = alloc_percpu(struct tick_work);
-+ BUG_ON(!tick_work_cpu);
-+ return 0;
-+}
-+
-+#else /* !CONFIG_NO_HZ_FULL */
-+static inline void sched_tick_start(int cpu) { }
-+static inline void sched_tick_stop(int cpu) { }
-+#endif
-+
-+#if defined(CONFIG_PREEMPTION) && (defined(CONFIG_DEBUG_PREEMPT) || \
-+ defined(CONFIG_PREEMPT_TRACER))
-+/*
-+ * If the value passed in is equal to the current preempt count
-+ * then we just disabled preemption. Start timing the latency.
-+ */
-+static inline void preempt_latency_start(int val)
-+{
-+ if (preempt_count() == val) {
-+ unsigned long ip = get_lock_parent_ip();
-+#ifdef CONFIG_DEBUG_PREEMPT
-+ current->preempt_disable_ip = ip;
-+#endif
-+ trace_preempt_off(CALLER_ADDR0, ip);
-+ }
-+}
-+
-+void preempt_count_add(int val)
-+{
-+#ifdef CONFIG_DEBUG_PREEMPT
-+ /*
-+ * Underflow?
-+ */
-+ if (DEBUG_LOCKS_WARN_ON((preempt_count() < 0)))
-+ return;
-+#endif
-+ __preempt_count_add(val);
-+#ifdef CONFIG_DEBUG_PREEMPT
-+ /*
-+ * Spinlock count overflowing soon?
-+ */
-+ DEBUG_LOCKS_WARN_ON((preempt_count() & PREEMPT_MASK) >=
-+ PREEMPT_MASK - 10);
-+#endif
-+ preempt_latency_start(val);
-+}
-+EXPORT_SYMBOL(preempt_count_add);
-+NOKPROBE_SYMBOL(preempt_count_add);
-+
-+/*
-+ * If the value passed in equals to the current preempt count
-+ * then we just enabled preemption. Stop timing the latency.
-+ */
-+static inline void preempt_latency_stop(int val)
-+{
-+ if (preempt_count() == val)
-+ trace_preempt_on(CALLER_ADDR0, get_lock_parent_ip());
-+}
-+
-+void preempt_count_sub(int val)
-+{
-+#ifdef CONFIG_DEBUG_PREEMPT
-+ /*
-+ * Underflow?
-+ */
-+ if (DEBUG_LOCKS_WARN_ON(val > preempt_count()))
-+ return;
-+ /*
-+ * Is the spinlock portion underflowing?
-+ */
-+ if (DEBUG_LOCKS_WARN_ON((val < PREEMPT_MASK) &&
-+ !(preempt_count() & PREEMPT_MASK)))
-+ return;
-+#endif
-+
-+ preempt_latency_stop(val);
-+ __preempt_count_sub(val);
-+}
-+EXPORT_SYMBOL(preempt_count_sub);
-+NOKPROBE_SYMBOL(preempt_count_sub);
-+
-+#else
-+static inline void preempt_latency_start(int val) { }
-+static inline void preempt_latency_stop(int val) { }
-+#endif
-+
-+static inline unsigned long get_preempt_disable_ip(struct task_struct *p)
-+{
-+#ifdef CONFIG_DEBUG_PREEMPT
-+ return p->preempt_disable_ip;
-+#else
-+ return 0;
-+#endif
-+}
-+
-+/*
-+ * Print scheduling while atomic bug:
-+ */
-+static noinline void __schedule_bug(struct task_struct *prev)
-+{
-+ /* Save this before calling printk(), since that will clobber it */
-+ unsigned long preempt_disable_ip = get_preempt_disable_ip(current);
-+
-+ if (oops_in_progress)
-+ return;
-+
-+ printk(KERN_ERR "BUG: scheduling while atomic: %s/%d/0x%08x\n",
-+ prev->comm, prev->pid, preempt_count());
-+
-+ debug_show_held_locks(prev);
-+ print_modules();
-+ if (irqs_disabled())
-+ print_irqtrace_events(prev);
-+ if (IS_ENABLED(CONFIG_DEBUG_PREEMPT)) {
-+ pr_err("Preemption disabled at:");
-+ print_ip_sym(KERN_ERR, preempt_disable_ip);
-+ }
-+ check_panic_on_warn("scheduling while atomic");
-+
-+ dump_stack();
-+ add_taint(TAINT_WARN, LOCKDEP_STILL_OK);
-+}
-+
-+/*
-+ * Various schedule()-time debugging checks and statistics:
-+ */
-+static inline void schedule_debug(struct task_struct *prev, bool preempt)
-+{
-+#ifdef CONFIG_SCHED_STACK_END_CHECK
-+ if (task_stack_end_corrupted(prev))
-+ panic("corrupted stack end detected inside scheduler\n");
-+
-+ if (task_scs_end_corrupted(prev))
-+ panic("corrupted shadow stack detected inside scheduler\n");
-+#endif
-+
-+#ifdef CONFIG_DEBUG_ATOMIC_SLEEP
-+ if (!preempt && READ_ONCE(prev->__state) && prev->non_block_count) {
-+ printk(KERN_ERR "BUG: scheduling in a non-blocking section: %s/%d/%i\n",
-+ prev->comm, prev->pid, prev->non_block_count);
-+ dump_stack();
-+ add_taint(TAINT_WARN, LOCKDEP_STILL_OK);
-+ }
-+#endif
-+
-+ if (unlikely(in_atomic_preempt_off())) {
-+ __schedule_bug(prev);
-+ preempt_count_set(PREEMPT_DISABLED);
-+ }
-+ rcu_sleep_check();
-+ SCHED_WARN_ON(ct_state() == CONTEXT_USER);
-+
-+ profile_hit(SCHED_PROFILING, __builtin_return_address(0));
-+
-+ schedstat_inc(this_rq()->sched_count);
-+}
-+
-+#ifdef ALT_SCHED_DEBUG
-+void alt_sched_debug(void)
-+{
-+ printk(KERN_INFO "sched: pending: 0x%04lx, idle: 0x%04lx, sg_idle: 0x%04lx\n",
-+ sched_rq_pending_mask.bits[0],
-+ sched_idle_mask->bits[0],
-+ sched_sg_idle_mask.bits[0]);
-+}
-+#else
-+inline void alt_sched_debug(void) {}
-+#endif
-+
-+#ifdef CONFIG_SMP
-+
-+#ifdef CONFIG_PREEMPT_RT
-+#define SCHED_NR_MIGRATE_BREAK 8
-+#else
-+#define SCHED_NR_MIGRATE_BREAK 32
-+#endif
-+
-+const_debug unsigned int sysctl_sched_nr_migrate = SCHED_NR_MIGRATE_BREAK;
-+
-+/*
-+ * Migrate pending tasks in @rq to @dest_cpu
-+ */
-+static inline int
-+migrate_pending_tasks(struct rq *rq, struct rq *dest_rq, const int dest_cpu)
-+{
-+ struct task_struct *p, *skip = rq->curr;
-+ int nr_migrated = 0;
-+ int nr_tries = min(rq->nr_running / 2, sysctl_sched_nr_migrate);
-+
-+ /* WA to check rq->curr is still on rq */
-+ if (!task_on_rq_queued(skip))
-+ return 0;
-+
-+ while (skip != rq->idle && nr_tries &&
-+ (p = sched_rq_next_task(skip, rq)) != rq->idle) {
-+ skip = sched_rq_next_task(p, rq);
-+ if (cpumask_test_cpu(dest_cpu, p->cpus_ptr)) {
-+ __SCHED_DEQUEUE_TASK(p, rq, 0, );
-+ set_task_cpu(p, dest_cpu);
-+ sched_task_sanity_check(p, dest_rq);
-+ sched_mm_cid_migrate_to(dest_rq, p, cpu_of(rq));
-+ __SCHED_ENQUEUE_TASK(p, dest_rq, 0);
-+ nr_migrated++;
-+ }
-+ nr_tries--;
-+ }
-+
-+ return nr_migrated;
-+}
-+
-+static inline int take_other_rq_tasks(struct rq *rq, int cpu)
-+{
-+ struct cpumask *topo_mask, *end_mask;
-+
-+ if (unlikely(!rq->online))
-+ return 0;
-+
-+ if (cpumask_empty(&sched_rq_pending_mask))
-+ return 0;
-+
-+ topo_mask = per_cpu(sched_cpu_topo_masks, cpu) + 1;
-+ end_mask = per_cpu(sched_cpu_topo_end_mask, cpu);
-+ do {
-+ int i;
-+ for_each_cpu_and(i, &sched_rq_pending_mask, topo_mask) {
-+ int nr_migrated;
-+ struct rq *src_rq;
-+
-+ src_rq = cpu_rq(i);
-+ if (!do_raw_spin_trylock(&src_rq->lock))
-+ continue;
-+ spin_acquire(&src_rq->lock.dep_map,
-+ SINGLE_DEPTH_NESTING, 1, _RET_IP_);
-+
-+ if ((nr_migrated = migrate_pending_tasks(src_rq, rq, cpu))) {
-+ src_rq->nr_running -= nr_migrated;
-+ if (src_rq->nr_running < 2)
-+ cpumask_clear_cpu(i, &sched_rq_pending_mask);
-+
-+ spin_release(&src_rq->lock.dep_map, _RET_IP_);
-+ do_raw_spin_unlock(&src_rq->lock);
-+
-+ rq->nr_running += nr_migrated;
-+ if (rq->nr_running > 1)
-+ cpumask_set_cpu(cpu, &sched_rq_pending_mask);
-+
-+ update_sched_preempt_mask(rq);
-+ cpufreq_update_util(rq, 0);
-+
-+ return 1;
-+ }
-+
-+ spin_release(&src_rq->lock.dep_map, _RET_IP_);
-+ do_raw_spin_unlock(&src_rq->lock);
-+ }
-+ } while (++topo_mask < end_mask);
-+
-+ return 0;
-+}
-+#endif
-+
-+static inline void time_slice_expired(struct task_struct *p, struct rq *rq)
-+{
-+ p->time_slice = sysctl_sched_base_slice;
-+
-+ sched_task_renew(p, rq);
-+
-+ if (SCHED_FIFO != p->policy && task_on_rq_queued(p))
-+ requeue_task(p, rq, task_sched_prio_idx(p, rq));
-+}
-+
-+/*
-+ * Timeslices below RESCHED_NS are considered as good as expired as there's no
-+ * point rescheduling when there's so little time left.
-+ */
-+static inline void check_curr(struct task_struct *p, struct rq *rq)
-+{
-+ if (unlikely(rq->idle == p))
-+ return;
-+
-+ update_curr(rq, p);
-+
-+ if (p->time_slice < RESCHED_NS)
-+ time_slice_expired(p, rq);
-+}
-+
-+static inline struct task_struct *
-+choose_next_task(struct rq *rq, int cpu)
-+{
-+ struct task_struct *next;
-+
-+ if (unlikely(rq->skip)) {
-+ next = rq_runnable_task(rq);
-+ if (next == rq->idle) {
-+#ifdef CONFIG_SMP
-+ if (!take_other_rq_tasks(rq, cpu)) {
-+#endif
-+ rq->skip = NULL;
-+ schedstat_inc(rq->sched_goidle);
-+ return next;
-+#ifdef CONFIG_SMP
-+ }
-+ next = rq_runnable_task(rq);
-+#endif
-+ }
-+ rq->skip = NULL;
-+#ifdef CONFIG_HIGH_RES_TIMERS
-+ hrtick_start(rq, next->time_slice);
-+#endif
-+ return next;
-+ }
-+
-+ next = sched_rq_first_task(rq);
-+ if (next == rq->idle) {
-+#ifdef CONFIG_SMP
-+ if (!take_other_rq_tasks(rq, cpu)) {
-+#endif
-+ schedstat_inc(rq->sched_goidle);
-+ /*printk(KERN_INFO "sched: choose_next_task(%d) idle %px\n", cpu, next);*/
-+ return next;
-+#ifdef CONFIG_SMP
-+ }
-+ next = sched_rq_first_task(rq);
-+#endif
-+ }
-+#ifdef CONFIG_HIGH_RES_TIMERS
-+ hrtick_start(rq, next->time_slice);
-+#endif
-+ /*printk(KERN_INFO "sched: choose_next_task(%d) next %px\n", cpu, next);*/
-+ return next;
-+}
-+
-+/*
-+ * Constants for the sched_mode argument of __schedule().
-+ *
-+ * The mode argument allows RT enabled kernels to differentiate a
-+ * preemption from blocking on an 'sleeping' spin/rwlock. Note that
-+ * SM_MASK_PREEMPT for !RT has all bits set, which allows the compiler to
-+ * optimize the AND operation out and just check for zero.
-+ */
-+#define SM_NONE 0x0
-+#define SM_PREEMPT 0x1
-+#define SM_RTLOCK_WAIT 0x2
-+
-+#ifndef CONFIG_PREEMPT_RT
-+# define SM_MASK_PREEMPT (~0U)
-+#else
-+# define SM_MASK_PREEMPT SM_PREEMPT
-+#endif
-+
-+/*
-+ * schedule() is the main scheduler function.
-+ *
-+ * The main means of driving the scheduler and thus entering this function are:
-+ *
-+ * 1. Explicit blocking: mutex, semaphore, waitqueue, etc.
-+ *
-+ * 2. TIF_NEED_RESCHED flag is checked on interrupt and userspace return
-+ * paths. For example, see arch/x86/entry_64.S.
-+ *
-+ * To drive preemption between tasks, the scheduler sets the flag in timer
-+ * interrupt handler scheduler_tick().
-+ *
-+ * 3. Wakeups don't really cause entry into schedule(). They add a
-+ * task to the run-queue and that's it.
-+ *
-+ * Now, if the new task added to the run-queue preempts the current
-+ * task, then the wakeup sets TIF_NEED_RESCHED and schedule() gets
-+ * called on the nearest possible occasion:
-+ *
-+ * - If the kernel is preemptible (CONFIG_PREEMPTION=y):
-+ *
-+ * - in syscall or exception context, at the next outmost
-+ * preempt_enable(). (this might be as soon as the wake_up()'s
-+ * spin_unlock()!)
-+ *
-+ * - in IRQ context, return from interrupt-handler to
-+ * preemptible context
-+ *
-+ * - If the kernel is not preemptible (CONFIG_PREEMPTION is not set)
-+ * then at the next:
-+ *
-+ * - cond_resched() call
-+ * - explicit schedule() call
-+ * - return from syscall or exception to user-space
-+ * - return from interrupt-handler to user-space
-+ *
-+ * WARNING: must be called with preemption disabled!
-+ */
-+static void __sched notrace __schedule(unsigned int sched_mode)
-+{
-+ struct task_struct *prev, *next;
-+ unsigned long *switch_count;
-+ unsigned long prev_state;
-+ struct rq *rq;
-+ int cpu;
-+
-+ cpu = smp_processor_id();
-+ rq = cpu_rq(cpu);
-+ prev = rq->curr;
-+
-+ schedule_debug(prev, !!sched_mode);
-+
-+ /* by passing sched_feat(HRTICK) checking which Alt schedule FW doesn't support */
-+ hrtick_clear(rq);
-+
-+ local_irq_disable();
-+ rcu_note_context_switch(!!sched_mode);
-+
-+ /*
-+ * Make sure that signal_pending_state()->signal_pending() below
-+ * can't be reordered with __set_current_state(TASK_INTERRUPTIBLE)
-+ * done by the caller to avoid the race with signal_wake_up():
-+ *
-+ * __set_current_state(@state) signal_wake_up()
-+ * schedule() set_tsk_thread_flag(p, TIF_SIGPENDING)
-+ * wake_up_state(p, state)
-+ * LOCK rq->lock LOCK p->pi_state
-+ * smp_mb__after_spinlock() smp_mb__after_spinlock()
-+ * if (signal_pending_state()) if (p->state & @state)
-+ *
-+ * Also, the membarrier system call requires a full memory barrier
-+ * after coming from user-space, before storing to rq->curr.
-+ */
-+ raw_spin_lock(&rq->lock);
-+ smp_mb__after_spinlock();
-+
-+ update_rq_clock(rq);
-+
-+ switch_count = &prev->nivcsw;
-+ /*
-+ * We must load prev->state once (task_struct::state is volatile), such
-+ * that we form a control dependency vs deactivate_task() below.
-+ */
-+ prev_state = READ_ONCE(prev->__state);
-+ if (!(sched_mode & SM_MASK_PREEMPT) && prev_state) {
-+ if (signal_pending_state(prev_state, prev)) {
-+ WRITE_ONCE(prev->__state, TASK_RUNNING);
-+ } else {
-+ prev->sched_contributes_to_load =
-+ (prev_state & TASK_UNINTERRUPTIBLE) &&
-+ !(prev_state & TASK_NOLOAD) &&
-+ !(prev_state & TASK_FROZEN);
-+
-+ if (prev->sched_contributes_to_load)
-+ rq->nr_uninterruptible++;
-+
-+ /*
-+ * __schedule() ttwu()
-+ * prev_state = prev->state; if (p->on_rq && ...)
-+ * if (prev_state) goto out;
-+ * p->on_rq = 0; smp_acquire__after_ctrl_dep();
-+ * p->state = TASK_WAKING
-+ *
-+ * Where __schedule() and ttwu() have matching control dependencies.
-+ *
-+ * After this, schedule() must not care about p->state any more.
-+ */
-+ sched_task_deactivate(prev, rq);
-+ deactivate_task(prev, rq);
-+
-+ if (prev->in_iowait) {
-+ atomic_inc(&rq->nr_iowait);
-+ delayacct_blkio_start();
-+ }
-+ }
-+ switch_count = &prev->nvcsw;
-+ }
-+
-+ check_curr(prev, rq);
-+
-+ next = choose_next_task(rq, cpu);
-+ clear_tsk_need_resched(prev);
-+ clear_preempt_need_resched();
-+#ifdef CONFIG_SCHED_DEBUG
-+ rq->last_seen_need_resched_ns = 0;
-+#endif
-+
-+ if (likely(prev != next)) {
-+#ifdef CONFIG_SCHED_BMQ
-+ rq->last_ts_switch = rq->clock;
-+#endif
-+ next->last_ran = rq->clock_task;
-+
-+ /*printk(KERN_INFO "sched: %px -> %px\n", prev, next);*/
-+ rq->nr_switches++;
-+ /*
-+ * RCU users of rcu_dereference(rq->curr) may not see
-+ * changes to task_struct made by pick_next_task().
-+ */
-+ RCU_INIT_POINTER(rq->curr, next);
-+ /*
-+ * The membarrier system call requires each architecture
-+ * to have a full memory barrier after updating
-+ * rq->curr, before returning to user-space.
-+ *
-+ * Here are the schemes providing that barrier on the
-+ * various architectures:
-+ * - mm ? switch_mm() : mmdrop() for x86, s390, sparc, PowerPC.
-+ * switch_mm() rely on membarrier_arch_switch_mm() on PowerPC.
-+ * - finish_lock_switch() for weakly-ordered
-+ * architectures where spin_unlock is a full barrier,
-+ * - switch_to() for arm64 (weakly-ordered, spin_unlock
-+ * is a RELEASE barrier),
-+ */
-+ ++*switch_count;
-+
-+ trace_sched_switch(sched_mode & SM_MASK_PREEMPT, prev, next, prev_state);
-+
-+ /* Also unlocks the rq: */
-+ rq = context_switch(rq, prev, next);
-+
-+ cpu = cpu_of(rq);
-+ } else {
-+ __balance_callbacks(rq);
-+ raw_spin_unlock_irq(&rq->lock);
-+ }
-+
-+#ifdef CONFIG_SCHED_SMT
-+ sg_balance(rq, cpu);
-+#endif
-+}
-+
-+void __noreturn do_task_dead(void)
-+{
-+ /* Causes final put_task_struct in finish_task_switch(): */
-+ set_special_state(TASK_DEAD);
-+
-+ /* Tell freezer to ignore us: */
-+ current->flags |= PF_NOFREEZE;
-+
-+ __schedule(SM_NONE);
-+ BUG();
-+
-+ /* Avoid "noreturn function does return" - but don't continue if BUG() is a NOP: */
-+ for (;;)
-+ cpu_relax();
-+}
-+
-+static inline void sched_submit_work(struct task_struct *tsk)
-+{
-+ static DEFINE_WAIT_OVERRIDE_MAP(sched_map, LD_WAIT_CONFIG);
-+ unsigned int task_flags;
-+
-+ /*
-+ * Establish LD_WAIT_CONFIG context to ensure none of the code called
-+ * will use a blocking primitive -- which would lead to recursion.
-+ */
-+ lock_map_acquire_try(&sched_map);
-+
-+ task_flags = tsk->flags;
-+ /*
-+ * If a worker goes to sleep, notify and ask workqueue whether it
-+ * wants to wake up a task to maintain concurrency.
-+ */
-+ if (task_flags & PF_WQ_WORKER)
-+ wq_worker_sleeping(tsk);
-+ else if (task_flags & PF_IO_WORKER)
-+ io_wq_worker_sleeping(tsk);
-+
-+ /*
-+ * spinlock and rwlock must not flush block requests. This will
-+ * deadlock if the callback attempts to acquire a lock which is
-+ * already acquired.
-+ */
-+ SCHED_WARN_ON(current->__state & TASK_RTLOCK_WAIT);
-+
-+ /*
-+ * If we are going to sleep and we have plugged IO queued,
-+ * make sure to submit it to avoid deadlocks.
-+ */
-+ blk_flush_plug(tsk->plug, true);
-+
-+ lock_map_release(&sched_map);
-+}
-+
-+static void sched_update_worker(struct task_struct *tsk)
-+{
-+ if (tsk->flags & (PF_WQ_WORKER | PF_IO_WORKER)) {
-+ if (tsk->flags & PF_WQ_WORKER)
-+ wq_worker_running(tsk);
-+ else
-+ io_wq_worker_running(tsk);
-+ }
-+}
-+
-+static __always_inline void __schedule_loop(unsigned int sched_mode)
-+{
-+ do {
-+ preempt_disable();
-+ __schedule(sched_mode);
-+ sched_preempt_enable_no_resched();
-+ } while (need_resched());
-+}
-+
-+asmlinkage __visible void __sched schedule(void)
-+{
-+ struct task_struct *tsk = current;
-+
-+#ifdef CONFIG_RT_MUTEXES
-+ lockdep_assert(!tsk->sched_rt_mutex);
-+#endif
-+
-+ if (!task_is_running(tsk))
-+ sched_submit_work(tsk);
-+ __schedule_loop(SM_NONE);
-+ sched_update_worker(tsk);
-+}
-+EXPORT_SYMBOL(schedule);
-+
-+/*
-+ * synchronize_rcu_tasks() makes sure that no task is stuck in preempted
-+ * state (have scheduled out non-voluntarily) by making sure that all
-+ * tasks have either left the run queue or have gone into user space.
-+ * As idle tasks do not do either, they must not ever be preempted
-+ * (schedule out non-voluntarily).
-+ *
-+ * schedule_idle() is similar to schedule_preempt_disable() except that it
-+ * never enables preemption because it does not call sched_submit_work().
-+ */
-+void __sched schedule_idle(void)
-+{
-+ /*
-+ * As this skips calling sched_submit_work(), which the idle task does
-+ * regardless because that function is a nop when the task is in a
-+ * TASK_RUNNING state, make sure this isn't used someplace that the
-+ * current task can be in any other state. Note, idle is always in the
-+ * TASK_RUNNING state.
-+ */
-+ WARN_ON_ONCE(current->__state);
-+ do {
-+ __schedule(SM_NONE);
-+ } while (need_resched());
-+}
-+
-+#if defined(CONFIG_CONTEXT_TRACKING_USER) && !defined(CONFIG_HAVE_CONTEXT_TRACKING_USER_OFFSTACK)
-+asmlinkage __visible void __sched schedule_user(void)
-+{
-+ /*
-+ * If we come here after a random call to set_need_resched(),
-+ * or we have been woken up remotely but the IPI has not yet arrived,
-+ * we haven't yet exited the RCU idle mode. Do it here manually until
-+ * we find a better solution.
-+ *
-+ * NB: There are buggy callers of this function. Ideally we
-+ * should warn if prev_state != CONTEXT_USER, but that will trigger
-+ * too frequently to make sense yet.
-+ */
-+ enum ctx_state prev_state = exception_enter();
-+ schedule();
-+ exception_exit(prev_state);
-+}
-+#endif
-+
-+/**
-+ * schedule_preempt_disabled - called with preemption disabled
-+ *
-+ * Returns with preemption disabled. Note: preempt_count must be 1
-+ */
-+void __sched schedule_preempt_disabled(void)
-+{
-+ sched_preempt_enable_no_resched();
-+ schedule();
-+ preempt_disable();
-+}
-+
-+#ifdef CONFIG_PREEMPT_RT
-+void __sched notrace schedule_rtlock(void)
-+{
-+ __schedule_loop(SM_RTLOCK_WAIT);
-+}
-+NOKPROBE_SYMBOL(schedule_rtlock);
-+#endif
-+
-+static void __sched notrace preempt_schedule_common(void)
-+{
-+ do {
-+ /*
-+ * Because the function tracer can trace preempt_count_sub()
-+ * and it also uses preempt_enable/disable_notrace(), if
-+ * NEED_RESCHED is set, the preempt_enable_notrace() called
-+ * by the function tracer will call this function again and
-+ * cause infinite recursion.
-+ *
-+ * Preemption must be disabled here before the function
-+ * tracer can trace. Break up preempt_disable() into two
-+ * calls. One to disable preemption without fear of being
-+ * traced. The other to still record the preemption latency,
-+ * which can also be traced by the function tracer.
-+ */
-+ preempt_disable_notrace();
-+ preempt_latency_start(1);
-+ __schedule(SM_PREEMPT);
-+ preempt_latency_stop(1);
-+ preempt_enable_no_resched_notrace();
-+
-+ /*
-+ * Check again in case we missed a preemption opportunity
-+ * between schedule and now.
-+ */
-+ } while (need_resched());
-+}
-+
-+#ifdef CONFIG_PREEMPTION
-+/*
-+ * This is the entry point to schedule() from in-kernel preemption
-+ * off of preempt_enable.
-+ */
-+asmlinkage __visible void __sched notrace preempt_schedule(void)
-+{
-+ /*
-+ * If there is a non-zero preempt_count or interrupts are disabled,
-+ * we do not want to preempt the current task. Just return..
-+ */
-+ if (likely(!preemptible()))
-+ return;
-+
-+ preempt_schedule_common();
-+}
-+NOKPROBE_SYMBOL(preempt_schedule);
-+EXPORT_SYMBOL(preempt_schedule);
-+
-+#ifdef CONFIG_PREEMPT_DYNAMIC
-+#if defined(CONFIG_HAVE_PREEMPT_DYNAMIC_CALL)
-+#ifndef preempt_schedule_dynamic_enabled
-+#define preempt_schedule_dynamic_enabled preempt_schedule
-+#define preempt_schedule_dynamic_disabled NULL
-+#endif
-+DEFINE_STATIC_CALL(preempt_schedule, preempt_schedule_dynamic_enabled);
-+EXPORT_STATIC_CALL_TRAMP(preempt_schedule);
-+#elif defined(CONFIG_HAVE_PREEMPT_DYNAMIC_KEY)
-+static DEFINE_STATIC_KEY_TRUE(sk_dynamic_preempt_schedule);
-+void __sched notrace dynamic_preempt_schedule(void)
-+{
-+ if (!static_branch_unlikely(&sk_dynamic_preempt_schedule))
-+ return;
-+ preempt_schedule();
-+}
-+NOKPROBE_SYMBOL(dynamic_preempt_schedule);
-+EXPORT_SYMBOL(dynamic_preempt_schedule);
-+#endif
-+#endif
-+
-+/**
-+ * preempt_schedule_notrace - preempt_schedule called by tracing
-+ *
-+ * The tracing infrastructure uses preempt_enable_notrace to prevent
-+ * recursion and tracing preempt enabling caused by the tracing
-+ * infrastructure itself. But as tracing can happen in areas coming
-+ * from userspace or just about to enter userspace, a preempt enable
-+ * can occur before user_exit() is called. This will cause the scheduler
-+ * to be called when the system is still in usermode.
-+ *
-+ * To prevent this, the preempt_enable_notrace will use this function
-+ * instead of preempt_schedule() to exit user context if needed before
-+ * calling the scheduler.
-+ */
-+asmlinkage __visible void __sched notrace preempt_schedule_notrace(void)
-+{
-+ enum ctx_state prev_ctx;
-+
-+ if (likely(!preemptible()))
-+ return;
-+
-+ do {
-+ /*
-+ * Because the function tracer can trace preempt_count_sub()
-+ * and it also uses preempt_enable/disable_notrace(), if
-+ * NEED_RESCHED is set, the preempt_enable_notrace() called
-+ * by the function tracer will call this function again and
-+ * cause infinite recursion.
-+ *
-+ * Preemption must be disabled here before the function
-+ * tracer can trace. Break up preempt_disable() into two
-+ * calls. One to disable preemption without fear of being
-+ * traced. The other to still record the preemption latency,
-+ * which can also be traced by the function tracer.
-+ */
-+ preempt_disable_notrace();
-+ preempt_latency_start(1);
-+ /*
-+ * Needs preempt disabled in case user_exit() is traced
-+ * and the tracer calls preempt_enable_notrace() causing
-+ * an infinite recursion.
-+ */
-+ prev_ctx = exception_enter();
-+ __schedule(SM_PREEMPT);
-+ exception_exit(prev_ctx);
-+
-+ preempt_latency_stop(1);
-+ preempt_enable_no_resched_notrace();
-+ } while (need_resched());
-+}
-+EXPORT_SYMBOL_GPL(preempt_schedule_notrace);
-+
-+#ifdef CONFIG_PREEMPT_DYNAMIC
-+#if defined(CONFIG_HAVE_PREEMPT_DYNAMIC_CALL)
-+#ifndef preempt_schedule_notrace_dynamic_enabled
-+#define preempt_schedule_notrace_dynamic_enabled preempt_schedule_notrace
-+#define preempt_schedule_notrace_dynamic_disabled NULL
-+#endif
-+DEFINE_STATIC_CALL(preempt_schedule_notrace, preempt_schedule_notrace_dynamic_enabled);
-+EXPORT_STATIC_CALL_TRAMP(preempt_schedule_notrace);
-+#elif defined(CONFIG_HAVE_PREEMPT_DYNAMIC_KEY)
-+static DEFINE_STATIC_KEY_TRUE(sk_dynamic_preempt_schedule_notrace);
-+void __sched notrace dynamic_preempt_schedule_notrace(void)
-+{
-+ if (!static_branch_unlikely(&sk_dynamic_preempt_schedule_notrace))
-+ return;
-+ preempt_schedule_notrace();
-+}
-+NOKPROBE_SYMBOL(dynamic_preempt_schedule_notrace);
-+EXPORT_SYMBOL(dynamic_preempt_schedule_notrace);
-+#endif
-+#endif
-+
-+#endif /* CONFIG_PREEMPTION */
-+
-+/*
-+ * This is the entry point to schedule() from kernel preemption
-+ * off of irq context.
-+ * Note, that this is called and return with irqs disabled. This will
-+ * protect us against recursive calling from irq.
-+ */
-+asmlinkage __visible void __sched preempt_schedule_irq(void)
-+{
-+ enum ctx_state prev_state;
-+
-+ /* Catch callers which need to be fixed */
-+ BUG_ON(preempt_count() || !irqs_disabled());
-+
-+ prev_state = exception_enter();
-+
-+ do {
-+ preempt_disable();
-+ local_irq_enable();
-+ __schedule(SM_PREEMPT);
-+ local_irq_disable();
-+ sched_preempt_enable_no_resched();
-+ } while (need_resched());
-+
-+ exception_exit(prev_state);
-+}
-+
-+int default_wake_function(wait_queue_entry_t *curr, unsigned mode, int wake_flags,
-+ void *key)
-+{
-+ WARN_ON_ONCE(IS_ENABLED(CONFIG_SCHED_DEBUG) && wake_flags & ~(WF_SYNC|WF_CURRENT_CPU));
-+ return try_to_wake_up(curr->private, mode, wake_flags);
-+}
-+EXPORT_SYMBOL(default_wake_function);
-+
-+static inline void check_task_changed(struct task_struct *p, struct rq *rq)
-+{
-+ /* Trigger resched if task sched_prio has been modified. */
-+ if (task_on_rq_queued(p)) {
-+ int idx;
-+
-+ update_rq_clock(rq);
-+ idx = task_sched_prio_idx(p, rq);
-+ if (idx != p->sq_idx) {
-+ requeue_task(p, rq, idx);
-+ wakeup_preempt(rq);
-+ }
-+ }
-+}
-+
-+static void __setscheduler_prio(struct task_struct *p, int prio)
-+{
-+ p->prio = prio;
-+}
-+
-+#ifdef CONFIG_RT_MUTEXES
-+
-+/*
-+ * Would be more useful with typeof()/auto_type but they don't mix with
-+ * bit-fields. Since it's a local thing, use int. Keep the generic sounding
-+ * name such that if someone were to implement this function we get to compare
-+ * notes.
-+ */
-+#define fetch_and_set(x, v) ({ int _x = (x); (x) = (v); _x; })
-+
-+void rt_mutex_pre_schedule(void)
-+{
-+ lockdep_assert(!fetch_and_set(current->sched_rt_mutex, 1));
-+ sched_submit_work(current);
-+}
-+
-+void rt_mutex_schedule(void)
-+{
-+ lockdep_assert(current->sched_rt_mutex);
-+ __schedule_loop(SM_NONE);
-+}
-+
-+void rt_mutex_post_schedule(void)
-+{
-+ sched_update_worker(current);
-+ lockdep_assert(fetch_and_set(current->sched_rt_mutex, 0));
-+}
-+
-+static inline int __rt_effective_prio(struct task_struct *pi_task, int prio)
-+{
-+ if (pi_task)
-+ prio = min(prio, pi_task->prio);
-+
-+ return prio;
-+}
-+
-+static inline int rt_effective_prio(struct task_struct *p, int prio)
-+{
-+ struct task_struct *pi_task = rt_mutex_get_top_task(p);
-+
-+ return __rt_effective_prio(pi_task, prio);
-+}
-+
-+/*
-+ * rt_mutex_setprio - set the current priority of a task
-+ * @p: task to boost
-+ * @pi_task: donor task
-+ *
-+ * This function changes the 'effective' priority of a task. It does
-+ * not touch ->normal_prio like __setscheduler().
-+ *
-+ * Used by the rt_mutex code to implement priority inheritance
-+ * logic. Call site only calls if the priority of the task changed.
-+ */
-+void rt_mutex_setprio(struct task_struct *p, struct task_struct *pi_task)
-+{
-+ int prio;
-+ struct rq *rq;
-+ raw_spinlock_t *lock;
-+
-+ /* XXX used to be waiter->prio, not waiter->task->prio */
-+ prio = __rt_effective_prio(pi_task, p->normal_prio);
-+
-+ /*
-+ * If nothing changed; bail early.
-+ */
-+ if (p->pi_top_task == pi_task && prio == p->prio)
-+ return;
-+
-+ rq = __task_access_lock(p, &lock);
-+ /*
-+ * Set under pi_lock && rq->lock, such that the value can be used under
-+ * either lock.
-+ *
-+ * Note that there is loads of tricky to make this pointer cache work
-+ * right. rt_mutex_slowunlock()+rt_mutex_postunlock() work together to
-+ * ensure a task is de-boosted (pi_task is set to NULL) before the
-+ * task is allowed to run again (and can exit). This ensures the pointer
-+ * points to a blocked task -- which guarantees the task is present.
-+ */
-+ p->pi_top_task = pi_task;
-+
-+ /*
-+ * For FIFO/RR we only need to set prio, if that matches we're done.
-+ */
-+ if (prio == p->prio)
-+ goto out_unlock;
-+
-+ /*
-+ * Idle task boosting is a nono in general. There is one
-+ * exception, when PREEMPT_RT and NOHZ is active:
-+ *
-+ * The idle task calls get_next_timer_interrupt() and holds
-+ * the timer wheel base->lock on the CPU and another CPU wants
-+ * to access the timer (probably to cancel it). We can safely
-+ * ignore the boosting request, as the idle CPU runs this code
-+ * with interrupts disabled and will complete the lock
-+ * protected section without being interrupted. So there is no
-+ * real need to boost.
-+ */
-+ if (unlikely(p == rq->idle)) {
-+ WARN_ON(p != rq->curr);
-+ WARN_ON(p->pi_blocked_on);
-+ goto out_unlock;
-+ }
-+
-+ trace_sched_pi_setprio(p, pi_task);
-+
-+ __setscheduler_prio(p, prio);
-+
-+ check_task_changed(p, rq);
-+out_unlock:
-+ /* Avoid rq from going away on us: */
-+ preempt_disable();
-+
-+ __balance_callbacks(rq);
-+ __task_access_unlock(p, lock);
-+
-+ preempt_enable();
-+}
-+#else
-+static inline int rt_effective_prio(struct task_struct *p, int prio)
-+{
-+ return prio;
-+}
-+#endif
-+
-+void set_user_nice(struct task_struct *p, long nice)
-+{
-+ unsigned long flags;
-+ struct rq *rq;
-+ raw_spinlock_t *lock;
-+
-+ if (task_nice(p) == nice || nice < MIN_NICE || nice > MAX_NICE)
-+ return;
-+ /*
-+ * We have to be careful, if called from sys_setpriority(),
-+ * the task might be in the middle of scheduling on another CPU.
-+ */
-+ raw_spin_lock_irqsave(&p->pi_lock, flags);
-+ rq = __task_access_lock(p, &lock);
-+
-+ p->static_prio = NICE_TO_PRIO(nice);
-+ /*
-+ * The RT priorities are set via sched_setscheduler(), but we still
-+ * allow the 'normal' nice value to be set - but as expected
-+ * it won't have any effect on scheduling until the task is
-+ * not SCHED_NORMAL/SCHED_BATCH:
-+ */
-+ if (task_has_rt_policy(p))
-+ goto out_unlock;
-+
-+ p->prio = effective_prio(p);
-+
-+ check_task_changed(p, rq);
-+out_unlock:
-+ __task_access_unlock(p, lock);
-+ raw_spin_unlock_irqrestore(&p->pi_lock, flags);
-+}
-+EXPORT_SYMBOL(set_user_nice);
-+
-+/*
-+ * is_nice_reduction - check if nice value is an actual reduction
-+ *
-+ * Similar to can_nice() but does not perform a capability check.
-+ *
-+ * @p: task
-+ * @nice: nice value
-+ */
-+static bool is_nice_reduction(const struct task_struct *p, const int nice)
-+{
-+ /* Convert nice value [19,-20] to rlimit style value [1,40]: */
-+ int nice_rlim = nice_to_rlimit(nice);
-+
-+ return (nice_rlim <= task_rlimit(p, RLIMIT_NICE));
-+}
-+
-+/*
-+ * can_nice - check if a task can reduce its nice value
-+ * @p: task
-+ * @nice: nice value
-+ */
-+int can_nice(const struct task_struct *p, const int nice)
-+{
-+ return is_nice_reduction(p, nice) || capable(CAP_SYS_NICE);
-+}
-+
-+#ifdef __ARCH_WANT_SYS_NICE
-+
-+/*
-+ * sys_nice - change the priority of the current process.
-+ * @increment: priority increment
-+ *
-+ * sys_setpriority is a more generic, but much slower function that
-+ * does similar things.
-+ */
-+SYSCALL_DEFINE1(nice, int, increment)
-+{
-+ long nice, retval;
-+
-+ /*
-+ * Setpriority might change our priority at the same moment.
-+ * We don't have to worry. Conceptually one call occurs first
-+ * and we have a single winner.
-+ */
-+
-+ increment = clamp(increment, -NICE_WIDTH, NICE_WIDTH);
-+ nice = task_nice(current) + increment;
-+
-+ nice = clamp_val(nice, MIN_NICE, MAX_NICE);
-+ if (increment < 0 && !can_nice(current, nice))
-+ return -EPERM;
-+
-+ retval = security_task_setnice(current, nice);
-+ if (retval)
-+ return retval;
-+
-+ set_user_nice(current, nice);
-+ return 0;
-+}
-+
-+#endif
-+
-+/**
-+ * task_prio - return the priority value of a given task.
-+ * @p: the task in question.
-+ *
-+ * Return: The priority value as seen by users in /proc.
-+ *
-+ * sched policy return value kernel prio user prio/nice
-+ *
-+ * (BMQ)normal, batch, idle[0 ... 53] [100 ... 139] 0/[-20 ... 19]/[-7 ... 7]
-+ * (PDS)normal, batch, idle[0 ... 39] 100 0/[-20 ... 19]
-+ * fifo, rr [-1 ... -100] [99 ... 0] [0 ... 99]
-+ */
-+int task_prio(const struct task_struct *p)
-+{
-+ return (p->prio < MAX_RT_PRIO) ? p->prio - MAX_RT_PRIO :
-+ task_sched_prio_normal(p, task_rq(p));
-+}
-+
-+/**
-+ * idle_cpu - is a given CPU idle currently?
-+ * @cpu: the processor in question.
-+ *
-+ * Return: 1 if the CPU is currently idle. 0 otherwise.
-+ */
-+int idle_cpu(int cpu)
-+{
-+ struct rq *rq = cpu_rq(cpu);
-+
-+ if (rq->curr != rq->idle)
-+ return 0;
-+
-+ if (rq->nr_running)
-+ return 0;
-+
-+#ifdef CONFIG_SMP
-+ if (rq->ttwu_pending)
-+ return 0;
-+#endif
-+
-+ return 1;
-+}
-+
-+/**
-+ * idle_task - return the idle task for a given CPU.
-+ * @cpu: the processor in question.
-+ *
-+ * Return: The idle task for the cpu @cpu.
-+ */
-+struct task_struct *idle_task(int cpu)
-+{
-+ return cpu_rq(cpu)->idle;
-+}
-+
-+/**
-+ * find_process_by_pid - find a process with a matching PID value.
-+ * @pid: the pid in question.
-+ *
-+ * The task of @pid, if found. %NULL otherwise.
-+ */
-+static inline struct task_struct *find_process_by_pid(pid_t pid)
-+{
-+ return pid ? find_task_by_vpid(pid) : current;
-+}
-+
-+static struct task_struct *find_get_task(pid_t pid)
-+{
-+ struct task_struct *p;
-+ guard(rcu)();
-+
-+ p = find_process_by_pid(pid);
-+ if (likely(p))
-+ get_task_struct(p);
-+
-+ return p;
-+}
-+
-+DEFINE_CLASS(find_get_task, struct task_struct *, if (_T) put_task_struct(_T),
-+ find_get_task(pid), pid_t pid)
-+
-+/*
-+ * sched_setparam() passes in -1 for its policy, to let the functions
-+ * it calls know not to change it.
-+ */
-+#define SETPARAM_POLICY -1
-+
-+static void __setscheduler_params(struct task_struct *p,
-+ const struct sched_attr *attr)
-+{
-+ int policy = attr->sched_policy;
-+
-+ if (policy == SETPARAM_POLICY)
-+ policy = p->policy;
-+
-+ p->policy = policy;
-+
-+ /*
-+ * allow normal nice value to be set, but will not have any
-+ * effect on scheduling until the task not SCHED_NORMAL/
-+ * SCHED_BATCH
-+ */
-+ p->static_prio = NICE_TO_PRIO(attr->sched_nice);
-+
-+ /*
-+ * __sched_setscheduler() ensures attr->sched_priority == 0 when
-+ * !rt_policy. Always setting this ensures that things like
-+ * getparam()/getattr() don't report silly values for !rt tasks.
-+ */
-+ p->rt_priority = attr->sched_priority;
-+ p->normal_prio = normal_prio(p);
-+}
-+
-+/*
-+ * check the target process has a UID that matches the current process's
-+ */
-+static bool check_same_owner(struct task_struct *p)
-+{
-+ const struct cred *cred = current_cred(), *pcred;
-+ guard(rcu)();
-+
-+ pcred = __task_cred(p);
-+ return (uid_eq(cred->euid, pcred->euid) ||
-+ uid_eq(cred->euid, pcred->uid));
-+}
-+
-+/*
-+ * Allow unprivileged RT tasks to decrease priority.
-+ * Only issue a capable test if needed and only once to avoid an audit
-+ * event on permitted non-privileged operations:
-+ */
-+static int user_check_sched_setscheduler(struct task_struct *p,
-+ const struct sched_attr *attr,
-+ int policy, int reset_on_fork)
-+{
-+ if (rt_policy(policy)) {
-+ unsigned long rlim_rtprio = task_rlimit(p, RLIMIT_RTPRIO);
-+
-+ /* Can't set/change the rt policy: */
-+ if (policy != p->policy && !rlim_rtprio)
-+ goto req_priv;
-+
-+ /* Can't increase priority: */
-+ if (attr->sched_priority > p->rt_priority &&
-+ attr->sched_priority > rlim_rtprio)
-+ goto req_priv;
-+ }
-+
-+ /* Can't change other user's priorities: */
-+ if (!check_same_owner(p))
-+ goto req_priv;
-+
-+ /* Normal users shall not reset the sched_reset_on_fork flag: */
-+ if (p->sched_reset_on_fork && !reset_on_fork)
-+ goto req_priv;
-+
-+ return 0;
-+
-+req_priv:
-+ if (!capable(CAP_SYS_NICE))
-+ return -EPERM;
-+
-+ return 0;
-+}
-+
-+static int __sched_setscheduler(struct task_struct *p,
-+ const struct sched_attr *attr,
-+ bool user, bool pi)
-+{
-+ const struct sched_attr dl_squash_attr = {
-+ .size = sizeof(struct sched_attr),
-+ .sched_policy = SCHED_FIFO,
-+ .sched_nice = 0,
-+ .sched_priority = 99,
-+ };
-+ int oldpolicy = -1, policy = attr->sched_policy;
-+ int retval, newprio;
-+ struct balance_callback *head;
-+ unsigned long flags;
-+ struct rq *rq;
-+ int reset_on_fork;
-+ raw_spinlock_t *lock;
-+
-+ /* The pi code expects interrupts enabled */
-+ BUG_ON(pi && in_interrupt());
-+
-+ /*
-+ * Alt schedule FW supports SCHED_DEADLINE by squash it as prio 0 SCHED_FIFO
-+ */
-+ if (unlikely(SCHED_DEADLINE == policy)) {
-+ attr = &dl_squash_attr;
-+ policy = attr->sched_policy;
-+ }
-+recheck:
-+ /* Double check policy once rq lock held */
-+ if (policy < 0) {
-+ reset_on_fork = p->sched_reset_on_fork;
-+ policy = oldpolicy = p->policy;
-+ } else {
-+ reset_on_fork = !!(attr->sched_flags & SCHED_RESET_ON_FORK);
-+
-+ if (policy > SCHED_IDLE)
-+ return -EINVAL;
-+ }
-+
-+ if (attr->sched_flags & ~(SCHED_FLAG_ALL))
-+ return -EINVAL;
-+
-+ /*
-+ * Valid priorities for SCHED_FIFO and SCHED_RR are
-+ * 1..MAX_RT_PRIO-1, valid priority for SCHED_NORMAL and
-+ * SCHED_BATCH and SCHED_IDLE is 0.
-+ */
-+ if (attr->sched_priority < 0 ||
-+ (p->mm && attr->sched_priority > MAX_RT_PRIO - 1) ||
-+ (!p->mm && attr->sched_priority > MAX_RT_PRIO - 1))
-+ return -EINVAL;
-+ if ((SCHED_RR == policy || SCHED_FIFO == policy) !=
-+ (attr->sched_priority != 0))
-+ return -EINVAL;
-+
-+ if (user) {
-+ retval = user_check_sched_setscheduler(p, attr, policy, reset_on_fork);
-+ if (retval)
-+ return retval;
-+
-+ retval = security_task_setscheduler(p);
-+ if (retval)
-+ return retval;
-+ }
-+
-+ /*
-+ * Make sure no PI-waiters arrive (or leave) while we are
-+ * changing the priority of the task:
-+ */
-+ raw_spin_lock_irqsave(&p->pi_lock, flags);
-+
-+ /*
-+ * To be able to change p->policy safely, task_access_lock()
-+ * must be called.
-+ * IF use task_access_lock() here:
-+ * For the task p which is not running, reading rq->stop is
-+ * racy but acceptable as ->stop doesn't change much.
-+ * An enhancemnet can be made to read rq->stop saftly.
-+ */
-+ rq = __task_access_lock(p, &lock);
-+
-+ /*
-+ * Changing the policy of the stop threads its a very bad idea
-+ */
-+ if (p == rq->stop) {
-+ retval = -EINVAL;
-+ goto unlock;
-+ }
-+
-+ /*
-+ * If not changing anything there's no need to proceed further:
-+ */
-+ if (unlikely(policy == p->policy)) {
-+ if (rt_policy(policy) && attr->sched_priority != p->rt_priority)
-+ goto change;
-+ if (!rt_policy(policy) &&
-+ NICE_TO_PRIO(attr->sched_nice) != p->static_prio)
-+ goto change;
-+
-+ p->sched_reset_on_fork = reset_on_fork;
-+ retval = 0;
-+ goto unlock;
-+ }
-+change:
-+
-+ /* Re-check policy now with rq lock held */
-+ if (unlikely(oldpolicy != -1 && oldpolicy != p->policy)) {
-+ policy = oldpolicy = -1;
-+ __task_access_unlock(p, lock);
-+ raw_spin_unlock_irqrestore(&p->pi_lock, flags);
-+ goto recheck;
-+ }
-+
-+ p->sched_reset_on_fork = reset_on_fork;
-+
-+ newprio = __normal_prio(policy, attr->sched_priority, NICE_TO_PRIO(attr->sched_nice));
-+ if (pi) {
-+ /*
-+ * Take priority boosted tasks into account. If the new
-+ * effective priority is unchanged, we just store the new
-+ * normal parameters and do not touch the scheduler class and
-+ * the runqueue. This will be done when the task deboost
-+ * itself.
-+ */
-+ newprio = rt_effective_prio(p, newprio);
-+ }
-+
-+ if (!(attr->sched_flags & SCHED_FLAG_KEEP_PARAMS)) {
-+ __setscheduler_params(p, attr);
-+ __setscheduler_prio(p, newprio);
-+ }
-+
-+ check_task_changed(p, rq);
-+
-+ /* Avoid rq from going away on us: */
-+ preempt_disable();
-+ head = splice_balance_callbacks(rq);
-+ __task_access_unlock(p, lock);
-+ raw_spin_unlock_irqrestore(&p->pi_lock, flags);
-+
-+ if (pi)
-+ rt_mutex_adjust_pi(p);
-+
-+ /* Run balance callbacks after we've adjusted the PI chain: */
-+ balance_callbacks(rq, head);
-+ preempt_enable();
-+
-+ return 0;
-+
-+unlock:
-+ __task_access_unlock(p, lock);
-+ raw_spin_unlock_irqrestore(&p->pi_lock, flags);
-+ return retval;
-+}
-+
-+static int _sched_setscheduler(struct task_struct *p, int policy,
-+ const struct sched_param *param, bool check)
-+{
-+ struct sched_attr attr = {
-+ .sched_policy = policy,
-+ .sched_priority = param->sched_priority,
-+ .sched_nice = PRIO_TO_NICE(p->static_prio),
-+ };
-+
-+ /* Fixup the legacy SCHED_RESET_ON_FORK hack. */
-+ if ((policy != SETPARAM_POLICY) && (policy & SCHED_RESET_ON_FORK)) {
-+ attr.sched_flags |= SCHED_FLAG_RESET_ON_FORK;
-+ policy &= ~SCHED_RESET_ON_FORK;
-+ attr.sched_policy = policy;
-+ }
-+
-+ return __sched_setscheduler(p, &attr, check, true);
-+}
-+
-+/**
-+ * sched_setscheduler - change the scheduling policy and/or RT priority of a thread.
-+ * @p: the task in question.
-+ * @policy: new policy.
-+ * @param: structure containing the new RT priority.
-+ *
-+ * Use sched_set_fifo(), read its comment.
-+ *
-+ * Return: 0 on success. An error code otherwise.
-+ *
-+ * NOTE that the task may be already dead.
-+ */
-+int sched_setscheduler(struct task_struct *p, int policy,
-+ const struct sched_param *param)
-+{
-+ return _sched_setscheduler(p, policy, param, true);
-+}
-+
-+int sched_setattr(struct task_struct *p, const struct sched_attr *attr)
-+{
-+ return __sched_setscheduler(p, attr, true, true);
-+}
-+
-+int sched_setattr_nocheck(struct task_struct *p, const struct sched_attr *attr)
-+{
-+ return __sched_setscheduler(p, attr, false, true);
-+}
-+EXPORT_SYMBOL_GPL(sched_setattr_nocheck);
-+
-+/**
-+ * sched_setscheduler_nocheck - change the scheduling policy and/or RT priority of a thread from kernelspace.
-+ * @p: the task in question.
-+ * @policy: new policy.
-+ * @param: structure containing the new RT priority.
-+ *
-+ * Just like sched_setscheduler, only don't bother checking if the
-+ * current context has permission. For example, this is needed in
-+ * stop_machine(): we create temporary high priority worker threads,
-+ * but our caller might not have that capability.
-+ *
-+ * Return: 0 on success. An error code otherwise.
-+ */
-+int sched_setscheduler_nocheck(struct task_struct *p, int policy,
-+ const struct sched_param *param)
-+{
-+ return _sched_setscheduler(p, policy, param, false);
-+}
-+
-+/*
-+ * SCHED_FIFO is a broken scheduler model; that is, it is fundamentally
-+ * incapable of resource management, which is the one thing an OS really should
-+ * be doing.
-+ *
-+ * This is of course the reason it is limited to privileged users only.
-+ *
-+ * Worse still; it is fundamentally impossible to compose static priority
-+ * workloads. You cannot take two correctly working static prio workloads
-+ * and smash them together and still expect them to work.
-+ *
-+ * For this reason 'all' FIFO tasks the kernel creates are basically at:
-+ *
-+ * MAX_RT_PRIO / 2
-+ *
-+ * The administrator _MUST_ configure the system, the kernel simply doesn't
-+ * know enough information to make a sensible choice.
-+ */
-+void sched_set_fifo(struct task_struct *p)
-+{
-+ struct sched_param sp = { .sched_priority = MAX_RT_PRIO / 2 };
-+ WARN_ON_ONCE(sched_setscheduler_nocheck(p, SCHED_FIFO, &sp) != 0);
-+}
-+EXPORT_SYMBOL_GPL(sched_set_fifo);
-+
-+/*
-+ * For when you don't much care about FIFO, but want to be above SCHED_NORMAL.
-+ */
-+void sched_set_fifo_low(struct task_struct *p)
-+{
-+ struct sched_param sp = { .sched_priority = 1 };
-+ WARN_ON_ONCE(sched_setscheduler_nocheck(p, SCHED_FIFO, &sp) != 0);
-+}
-+EXPORT_SYMBOL_GPL(sched_set_fifo_low);
-+
-+void sched_set_normal(struct task_struct *p, int nice)
-+{
-+ struct sched_attr attr = {
-+ .sched_policy = SCHED_NORMAL,
-+ .sched_nice = nice,
-+ };
-+ WARN_ON_ONCE(sched_setattr_nocheck(p, &attr) != 0);
-+}
-+EXPORT_SYMBOL_GPL(sched_set_normal);
-+
-+static int
-+do_sched_setscheduler(pid_t pid, int policy, struct sched_param __user *param)
-+{
-+ struct sched_param lparam;
-+
-+ if (!param || pid < 0)
-+ return -EINVAL;
-+ if (copy_from_user(&lparam, param, sizeof(struct sched_param)))
-+ return -EFAULT;
-+
-+ CLASS(find_get_task, p)(pid);
-+ if (!p)
-+ return -ESRCH;
-+
-+ return sched_setscheduler(p, policy, &lparam);
-+}
-+
-+/*
-+ * Mimics kernel/events/core.c perf_copy_attr().
-+ */
-+static int sched_copy_attr(struct sched_attr __user *uattr, struct sched_attr *attr)
-+{
-+ u32 size;
-+ int ret;
-+
-+ /* Zero the full structure, so that a short copy will be nice: */
-+ memset(attr, 0, sizeof(*attr));
-+
-+ ret = get_user(size, &uattr->size);
-+ if (ret)
-+ return ret;
-+
-+ /* ABI compatibility quirk: */
-+ if (!size)
-+ size = SCHED_ATTR_SIZE_VER0;
-+
-+ if (size < SCHED_ATTR_SIZE_VER0 || size > PAGE_SIZE)
-+ goto err_size;
-+
-+ ret = copy_struct_from_user(attr, sizeof(*attr), uattr, size);
-+ if (ret) {
-+ if (ret == -E2BIG)
-+ goto err_size;
-+ return ret;
-+ }
-+
-+ /*
-+ * XXX: Do we want to be lenient like existing syscalls; or do we want
-+ * to be strict and return an error on out-of-bounds values?
-+ */
-+ attr->sched_nice = clamp(attr->sched_nice, -20, 19);
-+
-+ /* sched/core.c uses zero here but we already know ret is zero */
-+ return 0;
-+
-+err_size:
-+ put_user(sizeof(*attr), &uattr->size);
-+ return -E2BIG;
-+}
-+
-+/**
-+ * sys_sched_setscheduler - set/change the scheduler policy and RT priority
-+ * @pid: the pid in question.
-+ * @policy: new policy.
-+ *
-+ * Return: 0 on success. An error code otherwise.
-+ * @param: structure containing the new RT priority.
-+ */
-+SYSCALL_DEFINE3(sched_setscheduler, pid_t, pid, int, policy, struct sched_param __user *, param)
-+{
-+ if (policy < 0)
-+ return -EINVAL;
-+
-+ return do_sched_setscheduler(pid, policy, param);
-+}
-+
-+/**
-+ * sys_sched_setparam - set/change the RT priority of a thread
-+ * @pid: the pid in question.
-+ * @param: structure containing the new RT priority.
-+ *
-+ * Return: 0 on success. An error code otherwise.
-+ */
-+SYSCALL_DEFINE2(sched_setparam, pid_t, pid, struct sched_param __user *, param)
-+{
-+ return do_sched_setscheduler(pid, SETPARAM_POLICY, param);
-+}
-+
-+static void get_params(struct task_struct *p, struct sched_attr *attr)
-+{
-+ if (task_has_rt_policy(p))
-+ attr->sched_priority = p->rt_priority;
-+ else
-+ attr->sched_nice = task_nice(p);
-+}
-+
-+/**
-+ * sys_sched_setattr - same as above, but with extended sched_attr
-+ * @pid: the pid in question.
-+ * @uattr: structure containing the extended parameters.
-+ */
-+SYSCALL_DEFINE3(sched_setattr, pid_t, pid, struct sched_attr __user *, uattr,
-+ unsigned int, flags)
-+{
-+ struct sched_attr attr;
-+ int retval;
-+
-+ if (!uattr || pid < 0 || flags)
-+ return -EINVAL;
-+
-+ retval = sched_copy_attr(uattr, &attr);
-+ if (retval)
-+ return retval;
-+
-+ if ((int)attr.sched_policy < 0)
-+ return -EINVAL;
-+
-+ CLASS(find_get_task, p)(pid);
-+ if (!p)
-+ return -ESRCH;
-+
-+ if (attr.sched_flags & SCHED_FLAG_KEEP_PARAMS)
-+ get_params(p, &attr);
-+
-+ return sched_setattr(p, &attr);
-+}
-+
-+/**
-+ * sys_sched_getscheduler - get the policy (scheduling class) of a thread
-+ * @pid: the pid in question.
-+ *
-+ * Return: On success, the policy of the thread. Otherwise, a negative error
-+ * code.
-+ */
-+SYSCALL_DEFINE1(sched_getscheduler, pid_t, pid)
-+{
-+ struct task_struct *p;
-+ int retval = -EINVAL;
-+
-+ if (pid < 0)
-+ return -ESRCH;
-+
-+ guard(rcu)();
-+ p = find_process_by_pid(pid);
-+ if (!p)
-+ return -ESRCH;
-+
-+ retval = security_task_getscheduler(p);
-+ if (!retval)
-+ retval = p->policy;
-+
-+ return retval;
-+}
-+
-+/**
-+ * sys_sched_getscheduler - get the RT priority of a thread
-+ * @pid: the pid in question.
-+ * @param: structure containing the RT priority.
-+ *
-+ * Return: On success, 0 and the RT priority is in @param. Otherwise, an error
-+ * code.
-+ */
-+SYSCALL_DEFINE2(sched_getparam, pid_t, pid, struct sched_param __user *, param)
-+{
-+ struct sched_param lp = { .sched_priority = 0 };
-+ struct task_struct *p;
-+
-+ if (!param || pid < 0)
-+ return -EINVAL;
-+
-+ scoped_guard (rcu) {
-+ int retval;
-+
-+ p = find_process_by_pid(pid);
-+ if (!p)
-+ return -EINVAL;
-+
-+ retval = security_task_getscheduler(p);
-+ if (retval)
-+ return retval;
-+
-+ if (task_has_rt_policy(p))
-+ lp.sched_priority = p->rt_priority;
-+ }
-+
-+ /*
-+ * This one might sleep, we cannot do it with a spinlock held ...
-+ */
-+ return copy_to_user(param, &lp, sizeof(*param)) ? -EFAULT : 0;
-+}
-+
-+/*
-+ * Copy the kernel size attribute structure (which might be larger
-+ * than what user-space knows about) to user-space.
-+ *
-+ * Note that all cases are valid: user-space buffer can be larger or
-+ * smaller than the kernel-space buffer. The usual case is that both
-+ * have the same size.
-+ */
-+static int
-+sched_attr_copy_to_user(struct sched_attr __user *uattr,
-+ struct sched_attr *kattr,
-+ unsigned int usize)
-+{
-+ unsigned int ksize = sizeof(*kattr);
-+
-+ if (!access_ok(uattr, usize))
-+ return -EFAULT;
-+
-+ /*
-+ * sched_getattr() ABI forwards and backwards compatibility:
-+ *
-+ * If usize == ksize then we just copy everything to user-space and all is good.
-+ *
-+ * If usize < ksize then we only copy as much as user-space has space for,
-+ * this keeps ABI compatibility as well. We skip the rest.
-+ *
-+ * If usize > ksize then user-space is using a newer version of the ABI,
-+ * which part the kernel doesn't know about. Just ignore it - tooling can
-+ * detect the kernel's knowledge of attributes from the attr->size value
-+ * which is set to ksize in this case.
-+ */
-+ kattr->size = min(usize, ksize);
-+
-+ if (copy_to_user(uattr, kattr, kattr->size))
-+ return -EFAULT;
-+
-+ return 0;
-+}
-+
-+/**
-+ * sys_sched_getattr - similar to sched_getparam, but with sched_attr
-+ * @pid: the pid in question.
-+ * @uattr: structure containing the extended parameters.
-+ * @usize: sizeof(attr) for fwd/bwd comp.
-+ * @flags: for future extension.
-+ */
-+SYSCALL_DEFINE4(sched_getattr, pid_t, pid, struct sched_attr __user *, uattr,
-+ unsigned int, usize, unsigned int, flags)
-+{
-+ struct sched_attr kattr = { };
-+ struct task_struct *p;
-+ int retval;
-+
-+ if (!uattr || pid < 0 || usize > PAGE_SIZE ||
-+ usize < SCHED_ATTR_SIZE_VER0 || flags)
-+ return -EINVAL;
-+
-+ scoped_guard (rcu) {
-+ p = find_process_by_pid(pid);
-+ if (!p)
-+ return -ESRCH;
-+
-+ retval = security_task_getscheduler(p);
-+ if (retval)
-+ return retval;
-+
-+ kattr.sched_policy = p->policy;
-+ if (p->sched_reset_on_fork)
-+ kattr.sched_flags |= SCHED_FLAG_RESET_ON_FORK;
-+ get_params(p, &kattr);
-+ kattr.sched_flags &= SCHED_FLAG_ALL;
-+
-+#ifdef CONFIG_UCLAMP_TASK
-+ kattr.sched_util_min = p->uclamp_req[UCLAMP_MIN].value;
-+ kattr.sched_util_max = p->uclamp_req[UCLAMP_MAX].value;
-+#endif
-+ }
-+
-+ return sched_attr_copy_to_user(uattr, &kattr, usize);
-+}
-+
-+#ifdef CONFIG_SMP
-+int dl_task_check_affinity(struct task_struct *p, const struct cpumask *mask)
-+{
-+ return 0;
-+}
-+#endif
-+
-+static int
-+__sched_setaffinity(struct task_struct *p, struct affinity_context *ctx)
-+{
-+ int retval;
-+ cpumask_var_t cpus_allowed, new_mask;
-+
-+ if (!alloc_cpumask_var(&cpus_allowed, GFP_KERNEL))
-+ return -ENOMEM;
-+
-+ if (!alloc_cpumask_var(&new_mask, GFP_KERNEL)) {
-+ retval = -ENOMEM;
-+ goto out_free_cpus_allowed;
-+ }
-+
-+ cpuset_cpus_allowed(p, cpus_allowed);
-+ cpumask_and(new_mask, ctx->new_mask, cpus_allowed);
-+
-+ ctx->new_mask = new_mask;
-+ ctx->flags |= SCA_CHECK;
-+
-+ retval = __set_cpus_allowed_ptr(p, ctx);
-+ if (retval)
-+ goto out_free_new_mask;
-+
-+ cpuset_cpus_allowed(p, cpus_allowed);
-+ if (!cpumask_subset(new_mask, cpus_allowed)) {
-+ /*
-+ * We must have raced with a concurrent cpuset
-+ * update. Just reset the cpus_allowed to the
-+ * cpuset's cpus_allowed
-+ */
-+ cpumask_copy(new_mask, cpus_allowed);
-+
-+ /*
-+ * If SCA_USER is set, a 2nd call to __set_cpus_allowed_ptr()
-+ * will restore the previous user_cpus_ptr value.
-+ *
-+ * In the unlikely event a previous user_cpus_ptr exists,
-+ * we need to further restrict the mask to what is allowed
-+ * by that old user_cpus_ptr.
-+ */
-+ if (unlikely((ctx->flags & SCA_USER) && ctx->user_mask)) {
-+ bool empty = !cpumask_and(new_mask, new_mask,
-+ ctx->user_mask);
-+
-+ if (WARN_ON_ONCE(empty))
-+ cpumask_copy(new_mask, cpus_allowed);
-+ }
-+ __set_cpus_allowed_ptr(p, ctx);
-+ retval = -EINVAL;
-+ }
-+
-+out_free_new_mask:
-+ free_cpumask_var(new_mask);
-+out_free_cpus_allowed:
-+ free_cpumask_var(cpus_allowed);
-+ return retval;
-+}
-+
-+long sched_setaffinity(pid_t pid, const struct cpumask *in_mask)
-+{
-+ struct affinity_context ac;
-+ struct cpumask *user_mask;
-+ int retval;
-+
-+ CLASS(find_get_task, p)(pid);
-+ if (!p)
-+ return -ESRCH;
-+
-+ if (p->flags & PF_NO_SETAFFINITY)
-+ return -EINVAL;
-+
-+ if (!check_same_owner(p)) {
-+ guard(rcu)();
-+ if (!ns_capable(__task_cred(p)->user_ns, CAP_SYS_NICE))
-+ return -EPERM;
-+ }
-+
-+ retval = security_task_setscheduler(p);
-+ if (retval)
-+ return retval;
-+
-+ /*
-+ * With non-SMP configs, user_cpus_ptr/user_mask isn't used and
-+ * alloc_user_cpus_ptr() returns NULL.
-+ */
-+ user_mask = alloc_user_cpus_ptr(NUMA_NO_NODE);
-+ if (user_mask) {
-+ cpumask_copy(user_mask, in_mask);
-+ } else if (IS_ENABLED(CONFIG_SMP)) {
-+ return -ENOMEM;
-+ }
-+
-+ ac = (struct affinity_context){
-+ .new_mask = in_mask,
-+ .user_mask = user_mask,
-+ .flags = SCA_USER,
-+ };
-+
-+ retval = __sched_setaffinity(p, &ac);
-+ kfree(ac.user_mask);
-+
-+ return retval;
-+}
-+
-+static int get_user_cpu_mask(unsigned long __user *user_mask_ptr, unsigned len,
-+ struct cpumask *new_mask)
-+{
-+ if (len < cpumask_size())
-+ cpumask_clear(new_mask);
-+ else if (len > cpumask_size())
-+ len = cpumask_size();
-+
-+ return copy_from_user(new_mask, user_mask_ptr, len) ? -EFAULT : 0;
-+}
-+
-+/**
-+ * sys_sched_setaffinity - set the CPU affinity of a process
-+ * @pid: pid of the process
-+ * @len: length in bytes of the bitmask pointed to by user_mask_ptr
-+ * @user_mask_ptr: user-space pointer to the new CPU mask
-+ *
-+ * Return: 0 on success. An error code otherwise.
-+ */
-+SYSCALL_DEFINE3(sched_setaffinity, pid_t, pid, unsigned int, len,
-+ unsigned long __user *, user_mask_ptr)
-+{
-+ cpumask_var_t new_mask;
-+ int retval;
-+
-+ if (!alloc_cpumask_var(&new_mask, GFP_KERNEL))
-+ return -ENOMEM;
-+
-+ retval = get_user_cpu_mask(user_mask_ptr, len, new_mask);
-+ if (retval == 0)
-+ retval = sched_setaffinity(pid, new_mask);
-+ free_cpumask_var(new_mask);
-+ return retval;
-+}
-+
-+long sched_getaffinity(pid_t pid, cpumask_t *mask)
-+{
-+ struct task_struct *p;
-+ int retval;
-+
-+ guard(rcu)();
-+ p = find_process_by_pid(pid);
-+ if (!p)
-+ return -ESRCH;
-+
-+ retval = security_task_getscheduler(p);
-+ if (retval)
-+ return retval;
-+
-+ guard(raw_spinlock_irqsave)(&p->pi_lock);
-+ cpumask_and(mask, &p->cpus_mask, cpu_active_mask);
-+
-+ return retval;
-+}
-+
-+/**
-+ * sys_sched_getaffinity - get the CPU affinity of a process
-+ * @pid: pid of the process
-+ * @len: length in bytes of the bitmask pointed to by user_mask_ptr
-+ * @user_mask_ptr: user-space pointer to hold the current CPU mask
-+ *
-+ * Return: size of CPU mask copied to user_mask_ptr on success. An
-+ * error code otherwise.
-+ */
-+SYSCALL_DEFINE3(sched_getaffinity, pid_t, pid, unsigned int, len,
-+ unsigned long __user *, user_mask_ptr)
-+{
-+ int ret;
-+ cpumask_var_t mask;
-+
-+ if ((len * BITS_PER_BYTE) < nr_cpu_ids)
-+ return -EINVAL;
-+ if (len & (sizeof(unsigned long)-1))
-+ return -EINVAL;
-+
-+ if (!zalloc_cpumask_var(&mask, GFP_KERNEL))
-+ return -ENOMEM;
-+
-+ ret = sched_getaffinity(pid, mask);
-+ if (ret == 0) {
-+ unsigned int retlen = min(len, cpumask_size());
-+
-+ if (copy_to_user(user_mask_ptr, cpumask_bits(mask), retlen))
-+ ret = -EFAULT;
-+ else
-+ ret = retlen;
-+ }
-+ free_cpumask_var(mask);
-+
-+ return ret;
-+}
-+
-+static void do_sched_yield(void)
-+{
-+ struct rq *rq;
-+ struct rq_flags rf;
-+ struct task_struct *p;
-+
-+ if (!sched_yield_type)
-+ return;
-+
-+ rq = this_rq_lock_irq(&rf);
-+
-+ schedstat_inc(rq->yld_count);
-+
-+ p = current;
-+ if (rt_task(p)) {
-+ if (task_on_rq_queued(p))
-+ requeue_task(p, rq, task_sched_prio_idx(p, rq));
-+ } else if (rq->nr_running > 1) {
-+ if (1 == sched_yield_type) {
-+ do_sched_yield_type_1(p, rq);
-+ if (task_on_rq_queued(p))
-+ requeue_task(p, rq, task_sched_prio_idx(p, rq));
-+ } else if (2 == sched_yield_type) {
-+ rq->skip = p;
-+ }
-+ }
-+
-+ preempt_disable();
-+ raw_spin_unlock_irq(&rq->lock);
-+ sched_preempt_enable_no_resched();
-+
-+ schedule();
-+}
-+
-+/**
-+ * sys_sched_yield - yield the current processor to other threads.
-+ *
-+ * This function yields the current CPU to other tasks. If there are no
-+ * other threads running on this CPU then this function will return.
-+ *
-+ * Return: 0.
-+ */
-+SYSCALL_DEFINE0(sched_yield)
-+{
-+ do_sched_yield();
-+ return 0;
-+}
-+
-+#if !defined(CONFIG_PREEMPTION) || defined(CONFIG_PREEMPT_DYNAMIC)
-+int __sched __cond_resched(void)
-+{
-+ if (should_resched(0)) {
-+ preempt_schedule_common();
-+ return 1;
-+ }
-+ /*
-+ * In preemptible kernels, ->rcu_read_lock_nesting tells the tick
-+ * whether the current CPU is in an RCU read-side critical section,
-+ * so the tick can report quiescent states even for CPUs looping
-+ * in kernel context. In contrast, in non-preemptible kernels,
-+ * RCU readers leave no in-memory hints, which means that CPU-bound
-+ * processes executing in kernel context might never report an
-+ * RCU quiescent state. Therefore, the following code causes
-+ * cond_resched() to report a quiescent state, but only when RCU
-+ * is in urgent need of one.
-+ */
-+#ifndef CONFIG_PREEMPT_RCU
-+ rcu_all_qs();
-+#endif
-+ return 0;
-+}
-+EXPORT_SYMBOL(__cond_resched);
-+#endif
-+
-+#ifdef CONFIG_PREEMPT_DYNAMIC
-+#if defined(CONFIG_HAVE_PREEMPT_DYNAMIC_CALL)
-+#define cond_resched_dynamic_enabled __cond_resched
-+#define cond_resched_dynamic_disabled ((void *)&__static_call_return0)
-+DEFINE_STATIC_CALL_RET0(cond_resched, __cond_resched);
-+EXPORT_STATIC_CALL_TRAMP(cond_resched);
-+
-+#define might_resched_dynamic_enabled __cond_resched
-+#define might_resched_dynamic_disabled ((void *)&__static_call_return0)
-+DEFINE_STATIC_CALL_RET0(might_resched, __cond_resched);
-+EXPORT_STATIC_CALL_TRAMP(might_resched);
-+#elif defined(CONFIG_HAVE_PREEMPT_DYNAMIC_KEY)
-+static DEFINE_STATIC_KEY_FALSE(sk_dynamic_cond_resched);
-+int __sched dynamic_cond_resched(void)
-+{
-+ klp_sched_try_switch();
-+ if (!static_branch_unlikely(&sk_dynamic_cond_resched))
-+ return 0;
-+ return __cond_resched();
-+}
-+EXPORT_SYMBOL(dynamic_cond_resched);
-+
-+static DEFINE_STATIC_KEY_FALSE(sk_dynamic_might_resched);
-+int __sched dynamic_might_resched(void)
-+{
-+ if (!static_branch_unlikely(&sk_dynamic_might_resched))
-+ return 0;
-+ return __cond_resched();
-+}
-+EXPORT_SYMBOL(dynamic_might_resched);
-+#endif
-+#endif
-+
-+/*
-+ * __cond_resched_lock() - if a reschedule is pending, drop the given lock,
-+ * call schedule, and on return reacquire the lock.
-+ *
-+ * This works OK both with and without CONFIG_PREEMPTION. We do strange low-level
-+ * operations here to prevent schedule() from being called twice (once via
-+ * spin_unlock(), once by hand).
-+ */
-+int __cond_resched_lock(spinlock_t *lock)
-+{
-+ int resched = should_resched(PREEMPT_LOCK_OFFSET);
-+ int ret = 0;
-+
-+ lockdep_assert_held(lock);
-+
-+ if (spin_needbreak(lock) || resched) {
-+ spin_unlock(lock);
-+ if (!_cond_resched())
-+ cpu_relax();
-+ ret = 1;
-+ spin_lock(lock);
-+ }
-+ return ret;
-+}
-+EXPORT_SYMBOL(__cond_resched_lock);
-+
-+int __cond_resched_rwlock_read(rwlock_t *lock)
-+{
-+ int resched = should_resched(PREEMPT_LOCK_OFFSET);
-+ int ret = 0;
-+
-+ lockdep_assert_held_read(lock);
-+
-+ if (rwlock_needbreak(lock) || resched) {
-+ read_unlock(lock);
-+ if (!_cond_resched())
-+ cpu_relax();
-+ ret = 1;
-+ read_lock(lock);
-+ }
-+ return ret;
-+}
-+EXPORT_SYMBOL(__cond_resched_rwlock_read);
-+
-+int __cond_resched_rwlock_write(rwlock_t *lock)
-+{
-+ int resched = should_resched(PREEMPT_LOCK_OFFSET);
-+ int ret = 0;
-+
-+ lockdep_assert_held_write(lock);
-+
-+ if (rwlock_needbreak(lock) || resched) {
-+ write_unlock(lock);
-+ if (!_cond_resched())
-+ cpu_relax();
-+ ret = 1;
-+ write_lock(lock);
-+ }
-+ return ret;
-+}
-+EXPORT_SYMBOL(__cond_resched_rwlock_write);
-+
-+#ifdef CONFIG_PREEMPT_DYNAMIC
-+
-+#ifdef CONFIG_GENERIC_ENTRY
-+#include <linux/entry-common.h>
-+#endif
-+
-+/*
-+ * SC:cond_resched
-+ * SC:might_resched
-+ * SC:preempt_schedule
-+ * SC:preempt_schedule_notrace
-+ * SC:irqentry_exit_cond_resched
-+ *
-+ *
-+ * NONE:
-+ * cond_resched <- __cond_resched
-+ * might_resched <- RET0
-+ * preempt_schedule <- NOP
-+ * preempt_schedule_notrace <- NOP
-+ * irqentry_exit_cond_resched <- NOP
-+ *
-+ * VOLUNTARY:
-+ * cond_resched <- __cond_resched
-+ * might_resched <- __cond_resched
-+ * preempt_schedule <- NOP
-+ * preempt_schedule_notrace <- NOP
-+ * irqentry_exit_cond_resched <- NOP
-+ *
-+ * FULL:
-+ * cond_resched <- RET0
-+ * might_resched <- RET0
-+ * preempt_schedule <- preempt_schedule
-+ * preempt_schedule_notrace <- preempt_schedule_notrace
-+ * irqentry_exit_cond_resched <- irqentry_exit_cond_resched
-+ */
-+
-+enum {
-+ preempt_dynamic_undefined = -1,
-+ preempt_dynamic_none,
-+ preempt_dynamic_voluntary,
-+ preempt_dynamic_full,
-+};
-+
-+int preempt_dynamic_mode = preempt_dynamic_undefined;
-+
-+int sched_dynamic_mode(const char *str)
-+{
-+ if (!strcmp(str, "none"))
-+ return preempt_dynamic_none;
-+
-+ if (!strcmp(str, "voluntary"))
-+ return preempt_dynamic_voluntary;
-+
-+ if (!strcmp(str, "full"))
-+ return preempt_dynamic_full;
-+
-+ return -EINVAL;
-+}
-+
-+#if defined(CONFIG_HAVE_PREEMPT_DYNAMIC_CALL)
-+#define preempt_dynamic_enable(f) static_call_update(f, f##_dynamic_enabled)
-+#define preempt_dynamic_disable(f) static_call_update(f, f##_dynamic_disabled)
-+#elif defined(CONFIG_HAVE_PREEMPT_DYNAMIC_KEY)
-+#define preempt_dynamic_enable(f) static_key_enable(&sk_dynamic_##f.key)
-+#define preempt_dynamic_disable(f) static_key_disable(&sk_dynamic_##f.key)
-+#else
-+#error "Unsupported PREEMPT_DYNAMIC mechanism"
-+#endif
-+
-+static DEFINE_MUTEX(sched_dynamic_mutex);
-+static bool klp_override;
-+
-+static void __sched_dynamic_update(int mode)
-+{
-+ /*
-+ * Avoid {NONE,VOLUNTARY} -> FULL transitions from ever ending up in
-+ * the ZERO state, which is invalid.
-+ */
-+ if (!klp_override)
-+ preempt_dynamic_enable(cond_resched);
-+ preempt_dynamic_enable(cond_resched);
-+ preempt_dynamic_enable(might_resched);
-+ preempt_dynamic_enable(preempt_schedule);
-+ preempt_dynamic_enable(preempt_schedule_notrace);
-+ preempt_dynamic_enable(irqentry_exit_cond_resched);
-+
-+ switch (mode) {
-+ case preempt_dynamic_none:
-+ if (!klp_override)
-+ preempt_dynamic_enable(cond_resched);
-+ preempt_dynamic_disable(might_resched);
-+ preempt_dynamic_disable(preempt_schedule);
-+ preempt_dynamic_disable(preempt_schedule_notrace);
-+ preempt_dynamic_disable(irqentry_exit_cond_resched);
-+ if (mode != preempt_dynamic_mode)
-+ pr_info("Dynamic Preempt: none\n");
-+ break;
-+
-+ case preempt_dynamic_voluntary:
-+ if (!klp_override)
-+ preempt_dynamic_enable(cond_resched);
-+ preempt_dynamic_enable(might_resched);
-+ preempt_dynamic_disable(preempt_schedule);
-+ preempt_dynamic_disable(preempt_schedule_notrace);
-+ preempt_dynamic_disable(irqentry_exit_cond_resched);
-+ if (mode != preempt_dynamic_mode)
-+ pr_info("Dynamic Preempt: voluntary\n");
-+ break;
-+
-+ case preempt_dynamic_full:
-+ if (!klp_override)
-+ preempt_dynamic_enable(cond_resched);
-+ preempt_dynamic_disable(might_resched);
-+ preempt_dynamic_enable(preempt_schedule);
-+ preempt_dynamic_enable(preempt_schedule_notrace);
-+ preempt_dynamic_enable(irqentry_exit_cond_resched);
-+ if (mode != preempt_dynamic_mode)
-+ pr_info("Dynamic Preempt: full\n");
-+ break;
-+ }
-+
-+ preempt_dynamic_mode = mode;
-+}
-+
-+void sched_dynamic_update(int mode)
-+{
-+ mutex_lock(&sched_dynamic_mutex);
-+ __sched_dynamic_update(mode);
-+ mutex_unlock(&sched_dynamic_mutex);
-+}
-+
-+#ifdef CONFIG_HAVE_PREEMPT_DYNAMIC_CALL
-+
-+static int klp_cond_resched(void)
-+{
-+ __klp_sched_try_switch();
-+ return __cond_resched();
-+}
-+
-+void sched_dynamic_klp_enable(void)
-+{
-+ mutex_lock(&sched_dynamic_mutex);
-+
-+ klp_override = true;
-+ static_call_update(cond_resched, klp_cond_resched);
-+
-+ mutex_unlock(&sched_dynamic_mutex);
-+}
-+
-+void sched_dynamic_klp_disable(void)
-+{
-+ mutex_lock(&sched_dynamic_mutex);
-+
-+ klp_override = false;
-+ __sched_dynamic_update(preempt_dynamic_mode);
-+
-+ mutex_unlock(&sched_dynamic_mutex);
-+}
-+
-+#endif /* CONFIG_HAVE_PREEMPT_DYNAMIC_CALL */
-+
-+
-+static int __init setup_preempt_mode(char *str)
-+{
-+ int mode = sched_dynamic_mode(str);
-+ if (mode < 0) {
-+ pr_warn("Dynamic Preempt: unsupported mode: %s\n", str);
-+ return 0;
-+ }
-+
-+ sched_dynamic_update(mode);
-+ return 1;
-+}
-+__setup("preempt=", setup_preempt_mode);
-+
-+static void __init preempt_dynamic_init(void)
-+{
-+ if (preempt_dynamic_mode == preempt_dynamic_undefined) {
-+ if (IS_ENABLED(CONFIG_PREEMPT_NONE)) {
-+ sched_dynamic_update(preempt_dynamic_none);
-+ } else if (IS_ENABLED(CONFIG_PREEMPT_VOLUNTARY)) {
-+ sched_dynamic_update(preempt_dynamic_voluntary);
-+ } else {
-+ /* Default static call setting, nothing to do */
-+ WARN_ON_ONCE(!IS_ENABLED(CONFIG_PREEMPT));
-+ preempt_dynamic_mode = preempt_dynamic_full;
-+ pr_info("Dynamic Preempt: full\n");
-+ }
-+ }
-+}
-+
-+#define PREEMPT_MODEL_ACCESSOR(mode) \
-+ bool preempt_model_##mode(void) \
-+ { \
-+ WARN_ON_ONCE(preempt_dynamic_mode == preempt_dynamic_undefined); \
-+ return preempt_dynamic_mode == preempt_dynamic_##mode; \
-+ } \
-+ EXPORT_SYMBOL_GPL(preempt_model_##mode)
-+
-+PREEMPT_MODEL_ACCESSOR(none);
-+PREEMPT_MODEL_ACCESSOR(voluntary);
-+PREEMPT_MODEL_ACCESSOR(full);
-+
-+#else /* !CONFIG_PREEMPT_DYNAMIC */
-+
-+static inline void preempt_dynamic_init(void) { }
-+
-+#endif /* #ifdef CONFIG_PREEMPT_DYNAMIC */
-+
-+/**
-+ * yield - yield the current processor to other threads.
-+ *
-+ * Do not ever use this function, there's a 99% chance you're doing it wrong.
-+ *
-+ * The scheduler is at all times free to pick the calling task as the most
-+ * eligible task to run, if removing the yield() call from your code breaks
-+ * it, it's already broken.
-+ *
-+ * Typical broken usage is:
-+ *
-+ * while (!event)
-+ * yield();
-+ *
-+ * where one assumes that yield() will let 'the other' process run that will
-+ * make event true. If the current task is a SCHED_FIFO task that will never
-+ * happen. Never use yield() as a progress guarantee!!
-+ *
-+ * If you want to use yield() to wait for something, use wait_event().
-+ * If you want to use yield() to be 'nice' for others, use cond_resched().
-+ * If you still want to use yield(), do not!
-+ */
-+void __sched yield(void)
-+{
-+ set_current_state(TASK_RUNNING);
-+ do_sched_yield();
-+}
-+EXPORT_SYMBOL(yield);
-+
-+/**
-+ * yield_to - yield the current processor to another thread in
-+ * your thread group, or accelerate that thread toward the
-+ * processor it's on.
-+ * @p: target task
-+ * @preempt: whether task preemption is allowed or not
-+ *
-+ * It's the caller's job to ensure that the target task struct
-+ * can't go away on us before we can do any checks.
-+ *
-+ * In Alt schedule FW, yield_to is not supported.
-+ *
-+ * Return:
-+ * true (>0) if we indeed boosted the target task.
-+ * false (0) if we failed to boost the target.
-+ * -ESRCH if there's no task to yield to.
-+ */
-+int __sched yield_to(struct task_struct *p, bool preempt)
-+{
-+ return 0;
-+}
-+EXPORT_SYMBOL_GPL(yield_to);
-+
-+int io_schedule_prepare(void)
-+{
-+ int old_iowait = current->in_iowait;
-+
-+ current->in_iowait = 1;
-+ blk_flush_plug(current->plug, true);
-+ return old_iowait;
-+}
-+
-+void io_schedule_finish(int token)
-+{
-+ current->in_iowait = token;
-+}
-+
-+/*
-+ * This task is about to go to sleep on IO. Increment rq->nr_iowait so
-+ * that process accounting knows that this is a task in IO wait state.
-+ *
-+ * But don't do that if it is a deliberate, throttling IO wait (this task
-+ * has set its backing_dev_info: the queue against which it should throttle)
-+ */
-+
-+long __sched io_schedule_timeout(long timeout)
-+{
-+ int token;
-+ long ret;
-+
-+ token = io_schedule_prepare();
-+ ret = schedule_timeout(timeout);
-+ io_schedule_finish(token);
-+
-+ return ret;
-+}
-+EXPORT_SYMBOL(io_schedule_timeout);
-+
-+void __sched io_schedule(void)
-+{
-+ int token;
-+
-+ token = io_schedule_prepare();
-+ schedule();
-+ io_schedule_finish(token);
-+}
-+EXPORT_SYMBOL(io_schedule);
-+
-+/**
-+ * sys_sched_get_priority_max - return maximum RT priority.
-+ * @policy: scheduling class.
-+ *
-+ * Return: On success, this syscall returns the maximum
-+ * rt_priority that can be used by a given scheduling class.
-+ * On failure, a negative error code is returned.
-+ */
-+SYSCALL_DEFINE1(sched_get_priority_max, int, policy)
-+{
-+ int ret = -EINVAL;
-+
-+ switch (policy) {
-+ case SCHED_FIFO:
-+ case SCHED_RR:
-+ ret = MAX_RT_PRIO - 1;
-+ break;
-+ case SCHED_NORMAL:
-+ case SCHED_BATCH:
-+ case SCHED_IDLE:
-+ ret = 0;
-+ break;
-+ }
-+ return ret;
-+}
-+
-+/**
-+ * sys_sched_get_priority_min - return minimum RT priority.
-+ * @policy: scheduling class.
-+ *
-+ * Return: On success, this syscall returns the minimum
-+ * rt_priority that can be used by a given scheduling class.
-+ * On failure, a negative error code is returned.
-+ */
-+SYSCALL_DEFINE1(sched_get_priority_min, int, policy)
-+{
-+ int ret = -EINVAL;
-+
-+ switch (policy) {
-+ case SCHED_FIFO:
-+ case SCHED_RR:
-+ ret = 1;
-+ break;
-+ case SCHED_NORMAL:
-+ case SCHED_BATCH:
-+ case SCHED_IDLE:
-+ ret = 0;
-+ break;
-+ }
-+ return ret;
-+}
-+
-+static int sched_rr_get_interval(pid_t pid, struct timespec64 *t)
-+{
-+ struct task_struct *p;
-+ int retval;
-+
-+ alt_sched_debug();
-+
-+ if (pid < 0)
-+ return -EINVAL;
-+
-+ guard(rcu)();
-+ p = find_process_by_pid(pid);
-+ if (!p)
-+ return -EINVAL;
-+
-+ retval = security_task_getscheduler(p);
-+ if (retval)
-+ return retval;
-+
-+ *t = ns_to_timespec64(sysctl_sched_base_slice);
-+ return 0;
-+}
-+
-+/**
-+ * sys_sched_rr_get_interval - return the default timeslice of a process.
-+ * @pid: pid of the process.
-+ * @interval: userspace pointer to the timeslice value.
-+ *
-+ *
-+ * Return: On success, 0 and the timeslice is in @interval. Otherwise,
-+ * an error code.
-+ */
-+SYSCALL_DEFINE2(sched_rr_get_interval, pid_t, pid,
-+ struct __kernel_timespec __user *, interval)
-+{
-+ struct timespec64 t;
-+ int retval = sched_rr_get_interval(pid, &t);
-+
-+ if (retval == 0)
-+ retval = put_timespec64(&t, interval);
-+
-+ return retval;
-+}
-+
-+#ifdef CONFIG_COMPAT_32BIT_TIME
-+SYSCALL_DEFINE2(sched_rr_get_interval_time32, pid_t, pid,
-+ struct old_timespec32 __user *, interval)
-+{
-+ struct timespec64 t;
-+ int retval = sched_rr_get_interval(pid, &t);
-+
-+ if (retval == 0)
-+ retval = put_old_timespec32(&t, interval);
-+ return retval;
-+}
-+#endif
-+
-+void sched_show_task(struct task_struct *p)
-+{
-+ unsigned long free = 0;
-+ int ppid;
-+
-+ if (!try_get_task_stack(p))
-+ return;
-+
-+ pr_info("task:%-15.15s state:%c", p->comm, task_state_to_char(p));
-+
-+ if (task_is_running(p))
-+ pr_cont(" running task ");
-+#ifdef CONFIG_DEBUG_STACK_USAGE
-+ free = stack_not_used(p);
-+#endif
-+ ppid = 0;
-+ rcu_read_lock();
-+ if (pid_alive(p))
-+ ppid = task_pid_nr(rcu_dereference(p->real_parent));
-+ rcu_read_unlock();
-+ pr_cont(" stack:%-5lu pid:%-5d tgid:%-5d ppid:%-6d flags:0x%08lx\n",
-+ free, task_pid_nr(p), task_tgid_nr(p),
-+ ppid, read_task_thread_flags(p));
-+
-+ print_worker_info(KERN_INFO, p);
-+ print_stop_info(KERN_INFO, p);
-+ show_stack(p, NULL, KERN_INFO);
-+ put_task_stack(p);
-+}
-+EXPORT_SYMBOL_GPL(sched_show_task);
-+
-+static inline bool
-+state_filter_match(unsigned long state_filter, struct task_struct *p)
-+{
-+ unsigned int state = READ_ONCE(p->__state);
-+
-+ /* no filter, everything matches */
-+ if (!state_filter)
-+ return true;
-+
-+ /* filter, but doesn't match */
-+ if (!(state & state_filter))
-+ return false;
-+
-+ /*
-+ * When looking for TASK_UNINTERRUPTIBLE skip TASK_IDLE (allows
-+ * TASK_KILLABLE).
-+ */
-+ if (state_filter == TASK_UNINTERRUPTIBLE && (state & TASK_NOLOAD))
-+ return false;
-+
-+ return true;
-+}
-+
-+
-+void show_state_filter(unsigned int state_filter)
-+{
-+ struct task_struct *g, *p;
-+
-+ rcu_read_lock();
-+ for_each_process_thread(g, p) {
-+ /*
-+ * reset the NMI-timeout, listing all files on a slow
-+ * console might take a lot of time:
-+ * Also, reset softlockup watchdogs on all CPUs, because
-+ * another CPU might be blocked waiting for us to process
-+ * an IPI.
-+ */
-+ touch_nmi_watchdog();
-+ touch_all_softlockup_watchdogs();
-+ if (state_filter_match(state_filter, p))
-+ sched_show_task(p);
-+ }
-+
-+#ifdef CONFIG_SCHED_DEBUG
-+ /* TODO: Alt schedule FW should support this
-+ if (!state_filter)
-+ sysrq_sched_debug_show();
-+ */
-+#endif
-+ rcu_read_unlock();
-+ /*
-+ * Only show locks if all tasks are dumped:
-+ */
-+ if (!state_filter)
-+ debug_show_all_locks();
-+}
-+
-+void dump_cpu_task(int cpu)
-+{
-+ if (cpu == smp_processor_id() && in_hardirq()) {
-+ struct pt_regs *regs;
-+
-+ regs = get_irq_regs();
-+ if (regs) {
-+ show_regs(regs);
-+ return;
-+ }
-+ }
-+
-+ if (trigger_single_cpu_backtrace(cpu))
-+ return;
-+
-+ pr_info("Task dump for CPU %d:\n", cpu);
-+ sched_show_task(cpu_curr(cpu));
-+}
-+
-+/**
-+ * init_idle - set up an idle thread for a given CPU
-+ * @idle: task in question
-+ * @cpu: CPU the idle task belongs to
-+ *
-+ * NOTE: this function does not set the idle thread's NEED_RESCHED
-+ * flag, to make booting more robust.
-+ */
-+void __init init_idle(struct task_struct *idle, int cpu)
-+{
-+#ifdef CONFIG_SMP
-+ struct affinity_context ac = (struct affinity_context) {
-+ .new_mask = cpumask_of(cpu),
-+ .flags = 0,
-+ };
-+#endif
-+ struct rq *rq = cpu_rq(cpu);
-+ unsigned long flags;
-+
-+ __sched_fork(0, idle);
-+
-+ raw_spin_lock_irqsave(&idle->pi_lock, flags);
-+ raw_spin_lock(&rq->lock);
-+
-+ idle->last_ran = rq->clock_task;
-+ idle->__state = TASK_RUNNING;
-+ /*
-+ * PF_KTHREAD should already be set at this point; regardless, make it
-+ * look like a proper per-CPU kthread.
-+ */
-+ idle->flags |= PF_KTHREAD | PF_NO_SETAFFINITY;
-+ kthread_set_per_cpu(idle, cpu);
-+
-+ sched_queue_init_idle(&rq->queue, idle);
-+
-+#ifdef CONFIG_SMP
-+ /*
-+ * It's possible that init_idle() gets called multiple times on a task,
-+ * in that case do_set_cpus_allowed() will not do the right thing.
-+ *
-+ * And since this is boot we can forgo the serialisation.
-+ */
-+ set_cpus_allowed_common(idle, &ac);
-+#endif
-+
-+ /* Silence PROVE_RCU */
-+ rcu_read_lock();
-+ __set_task_cpu(idle, cpu);
-+ rcu_read_unlock();
-+
-+ rq->idle = idle;
-+ rcu_assign_pointer(rq->curr, idle);
-+ idle->on_cpu = 1;
-+
-+ raw_spin_unlock(&rq->lock);
-+ raw_spin_unlock_irqrestore(&idle->pi_lock, flags);
-+
-+ /* Set the preempt count _outside_ the spinlocks! */
-+ init_idle_preempt_count(idle, cpu);
-+
-+ ftrace_graph_init_idle_task(idle, cpu);
-+ vtime_init_idle(idle, cpu);
-+#ifdef CONFIG_SMP
-+ sprintf(idle->comm, "%s/%d", INIT_TASK_COMM, cpu);
-+#endif
-+}
-+
-+#ifdef CONFIG_SMP
-+
-+int cpuset_cpumask_can_shrink(const struct cpumask __maybe_unused *cur,
-+ const struct cpumask __maybe_unused *trial)
-+{
-+ return 1;
-+}
-+
-+int task_can_attach(struct task_struct *p)
-+{
-+ int ret = 0;
-+
-+ /*
-+ * Kthreads which disallow setaffinity shouldn't be moved
-+ * to a new cpuset; we don't want to change their CPU
-+ * affinity and isolating such threads by their set of
-+ * allowed nodes is unnecessary. Thus, cpusets are not
-+ * applicable for such threads. This prevents checking for
-+ * success of set_cpus_allowed_ptr() on all attached tasks
-+ * before cpus_mask may be changed.
-+ */
-+ if (p->flags & PF_NO_SETAFFINITY)
-+ ret = -EINVAL;
-+
-+ return ret;
-+}
-+
-+bool sched_smp_initialized __read_mostly;
-+
-+#ifdef CONFIG_HOTPLUG_CPU
-+/*
-+ * Ensures that the idle task is using init_mm right before its CPU goes
-+ * offline.
-+ */
-+void idle_task_exit(void)
-+{
-+ struct mm_struct *mm = current->active_mm;
-+
-+ BUG_ON(current != this_rq()->idle);
-+
-+ if (mm != &init_mm) {
-+ switch_mm(mm, &init_mm, current);
-+ finish_arch_post_lock_switch();
-+ }
-+
-+ /* finish_cpu(), as ran on the BP, will clean up the active_mm state */
-+}
-+
-+static int __balance_push_cpu_stop(void *arg)
-+{
-+ struct task_struct *p = arg;
-+ struct rq *rq = this_rq();
-+ struct rq_flags rf;
-+ int cpu;
-+
-+ raw_spin_lock_irq(&p->pi_lock);
-+ rq_lock(rq, &rf);
-+
-+ update_rq_clock(rq);
-+
-+ if (task_rq(p) == rq && task_on_rq_queued(p)) {
-+ cpu = select_fallback_rq(rq->cpu, p);
-+ rq = __migrate_task(rq, p, cpu);
-+ }
-+
-+ rq_unlock(rq, &rf);
-+ raw_spin_unlock_irq(&p->pi_lock);
-+
-+ put_task_struct(p);
-+
-+ return 0;
-+}
-+
-+static DEFINE_PER_CPU(struct cpu_stop_work, push_work);
-+
-+/*
-+ * This is enabled below SCHED_AP_ACTIVE; when !cpu_active(), but only
-+ * effective when the hotplug motion is down.
-+ */
-+static void balance_push(struct rq *rq)
-+{
-+ struct task_struct *push_task = rq->curr;
-+
-+ lockdep_assert_held(&rq->lock);
-+
-+ /*
-+ * Ensure the thing is persistent until balance_push_set(.on = false);
-+ */
-+ rq->balance_callback = &balance_push_callback;
-+
-+ /*
-+ * Only active while going offline and when invoked on the outgoing
-+ * CPU.
-+ */
-+ if (!cpu_dying(rq->cpu) || rq != this_rq())
-+ return;
-+
-+ /*
-+ * Both the cpu-hotplug and stop task are in this case and are
-+ * required to complete the hotplug process.
-+ */
-+ if (kthread_is_per_cpu(push_task) ||
-+ is_migration_disabled(push_task)) {
-+
-+ /*
-+ * If this is the idle task on the outgoing CPU try to wake
-+ * up the hotplug control thread which might wait for the
-+ * last task to vanish. The rcuwait_active() check is
-+ * accurate here because the waiter is pinned on this CPU
-+ * and can't obviously be running in parallel.
-+ *
-+ * On RT kernels this also has to check whether there are
-+ * pinned and scheduled out tasks on the runqueue. They
-+ * need to leave the migrate disabled section first.
-+ */
-+ if (!rq->nr_running && !rq_has_pinned_tasks(rq) &&
-+ rcuwait_active(&rq->hotplug_wait)) {
-+ raw_spin_unlock(&rq->lock);
-+ rcuwait_wake_up(&rq->hotplug_wait);
-+ raw_spin_lock(&rq->lock);
-+ }
-+ return;
-+ }
-+
-+ get_task_struct(push_task);
-+ /*
-+ * Temporarily drop rq->lock such that we can wake-up the stop task.
-+ * Both preemption and IRQs are still disabled.
-+ */
-+ preempt_disable();
-+ raw_spin_unlock(&rq->lock);
-+ stop_one_cpu_nowait(rq->cpu, __balance_push_cpu_stop, push_task,
-+ this_cpu_ptr(&push_work));
-+ preempt_enable();
-+ /*
-+ * At this point need_resched() is true and we'll take the loop in
-+ * schedule(). The next pick is obviously going to be the stop task
-+ * which kthread_is_per_cpu() and will push this task away.
-+ */
-+ raw_spin_lock(&rq->lock);
-+}
-+
-+static void balance_push_set(int cpu, bool on)
-+{
-+ struct rq *rq = cpu_rq(cpu);
-+ struct rq_flags rf;
-+
-+ rq_lock_irqsave(rq, &rf);
-+ if (on) {
-+ WARN_ON_ONCE(rq->balance_callback);
-+ rq->balance_callback = &balance_push_callback;
-+ } else if (rq->balance_callback == &balance_push_callback) {
-+ rq->balance_callback = NULL;
-+ }
-+ rq_unlock_irqrestore(rq, &rf);
-+}
-+
-+/*
-+ * Invoked from a CPUs hotplug control thread after the CPU has been marked
-+ * inactive. All tasks which are not per CPU kernel threads are either
-+ * pushed off this CPU now via balance_push() or placed on a different CPU
-+ * during wakeup. Wait until the CPU is quiescent.
-+ */
-+static void balance_hotplug_wait(void)
-+{
-+ struct rq *rq = this_rq();
-+
-+ rcuwait_wait_event(&rq->hotplug_wait,
-+ rq->nr_running == 1 && !rq_has_pinned_tasks(rq),
-+ TASK_UNINTERRUPTIBLE);
-+}
-+
-+#else
-+
-+static void balance_push(struct rq *rq)
-+{
-+}
-+
-+static void balance_push_set(int cpu, bool on)
-+{
-+}
-+
-+static inline void balance_hotplug_wait(void)
-+{
-+}
-+#endif /* CONFIG_HOTPLUG_CPU */
-+
-+static void set_rq_offline(struct rq *rq)
-+{
-+ if (rq->online) {
-+ update_rq_clock(rq);
-+ rq->online = false;
-+ }
-+}
-+
-+static void set_rq_online(struct rq *rq)
-+{
-+ if (!rq->online)
-+ rq->online = true;
-+}
-+
-+/*
-+ * used to mark begin/end of suspend/resume:
-+ */
-+static int num_cpus_frozen;
-+
-+/*
-+ * Update cpusets according to cpu_active mask. If cpusets are
-+ * disabled, cpuset_update_active_cpus() becomes a simple wrapper
-+ * around partition_sched_domains().
-+ *
-+ * If we come here as part of a suspend/resume, don't touch cpusets because we
-+ * want to restore it back to its original state upon resume anyway.
-+ */
-+static void cpuset_cpu_active(void)
-+{
-+ if (cpuhp_tasks_frozen) {
-+ /*
-+ * num_cpus_frozen tracks how many CPUs are involved in suspend
-+ * resume sequence. As long as this is not the last online
-+ * operation in the resume sequence, just build a single sched
-+ * domain, ignoring cpusets.
-+ */
-+ partition_sched_domains(1, NULL, NULL);
-+ if (--num_cpus_frozen)
-+ return;
-+ /*
-+ * This is the last CPU online operation. So fall through and
-+ * restore the original sched domains by considering the
-+ * cpuset configurations.
-+ */
-+ cpuset_force_rebuild();
-+ }
-+
-+ cpuset_update_active_cpus();
-+}
-+
-+static int cpuset_cpu_inactive(unsigned int cpu)
-+{
-+ if (!cpuhp_tasks_frozen) {
-+ cpuset_update_active_cpus();
-+ } else {
-+ num_cpus_frozen++;
-+ partition_sched_domains(1, NULL, NULL);
-+ }
-+ return 0;
-+}
-+
-+int sched_cpu_activate(unsigned int cpu)
-+{
-+ struct rq *rq = cpu_rq(cpu);
-+ unsigned long flags;
-+
-+ /*
-+ * Clear the balance_push callback and prepare to schedule
-+ * regular tasks.
-+ */
-+ balance_push_set(cpu, false);
-+
-+#ifdef CONFIG_SCHED_SMT
-+ /*
-+ * When going up, increment the number of cores with SMT present.
-+ */
-+ if (cpumask_weight(cpu_smt_mask(cpu)) == 2)
-+ static_branch_inc_cpuslocked(&sched_smt_present);
-+#endif
-+ set_cpu_active(cpu, true);
-+
-+ if (sched_smp_initialized)
-+ cpuset_cpu_active();
-+
-+ /*
-+ * Put the rq online, if not already. This happens:
-+ *
-+ * 1) In the early boot process, because we build the real domains
-+ * after all cpus have been brought up.
-+ *
-+ * 2) At runtime, if cpuset_cpu_active() fails to rebuild the
-+ * domains.
-+ */
-+ raw_spin_lock_irqsave(&rq->lock, flags);
-+ set_rq_online(rq);
-+ raw_spin_unlock_irqrestore(&rq->lock, flags);
-+
-+ return 0;
-+}
-+
-+int sched_cpu_deactivate(unsigned int cpu)
-+{
-+ struct rq *rq = cpu_rq(cpu);
-+ unsigned long flags;
-+ int ret;
-+
-+ set_cpu_active(cpu, false);
-+
-+ /*
-+ * From this point forward, this CPU will refuse to run any task that
-+ * is not: migrate_disable() or KTHREAD_IS_PER_CPU, and will actively
-+ * push those tasks away until this gets cleared, see
-+ * sched_cpu_dying().
-+ */
-+ balance_push_set(cpu, true);
-+
-+ /*
-+ * We've cleared cpu_active_mask, wait for all preempt-disabled and RCU
-+ * users of this state to go away such that all new such users will
-+ * observe it.
-+ *
-+ * Specifically, we rely on ttwu to no longer target this CPU, see
-+ * ttwu_queue_cond() and is_cpu_allowed().
-+ *
-+ * Do sync before park smpboot threads to take care the rcu boost case.
-+ */
-+ synchronize_rcu();
-+
-+ raw_spin_lock_irqsave(&rq->lock, flags);
-+ set_rq_offline(rq);
-+ raw_spin_unlock_irqrestore(&rq->lock, flags);
-+
-+#ifdef CONFIG_SCHED_SMT
-+ /*
-+ * When going down, decrement the number of cores with SMT present.
-+ */
-+ if (cpumask_weight(cpu_smt_mask(cpu)) == 2) {
-+ static_branch_dec_cpuslocked(&sched_smt_present);
-+ if (!static_branch_likely(&sched_smt_present))
-+ cpumask_clear(&sched_sg_idle_mask);
-+ }
-+#endif
-+
-+ if (!sched_smp_initialized)
-+ return 0;
-+
-+ ret = cpuset_cpu_inactive(cpu);
-+ if (ret) {
-+ balance_push_set(cpu, false);
-+ set_cpu_active(cpu, true);
-+ return ret;
-+ }
-+
-+ return 0;
-+}
-+
-+static void sched_rq_cpu_starting(unsigned int cpu)
-+{
-+ struct rq *rq = cpu_rq(cpu);
-+
-+ rq->calc_load_update = calc_load_update;
-+}
-+
-+int sched_cpu_starting(unsigned int cpu)
-+{
-+ sched_rq_cpu_starting(cpu);
-+ sched_tick_start(cpu);
-+ return 0;
-+}
-+
-+#ifdef CONFIG_HOTPLUG_CPU
-+
-+/*
-+ * Invoked immediately before the stopper thread is invoked to bring the
-+ * CPU down completely. At this point all per CPU kthreads except the
-+ * hotplug thread (current) and the stopper thread (inactive) have been
-+ * either parked or have been unbound from the outgoing CPU. Ensure that
-+ * any of those which might be on the way out are gone.
-+ *
-+ * If after this point a bound task is being woken on this CPU then the
-+ * responsible hotplug callback has failed to do it's job.
-+ * sched_cpu_dying() will catch it with the appropriate fireworks.
-+ */
-+int sched_cpu_wait_empty(unsigned int cpu)
-+{
-+ balance_hotplug_wait();
-+ return 0;
-+}
-+
-+/*
-+ * Since this CPU is going 'away' for a while, fold any nr_active delta we
-+ * might have. Called from the CPU stopper task after ensuring that the
-+ * stopper is the last running task on the CPU, so nr_active count is
-+ * stable. We need to take the teardown thread which is calling this into
-+ * account, so we hand in adjust = 1 to the load calculation.
-+ *
-+ * Also see the comment "Global load-average calculations".
-+ */
-+static void calc_load_migrate(struct rq *rq)
-+{
-+ long delta = calc_load_fold_active(rq, 1);
-+
-+ if (delta)
-+ atomic_long_add(delta, &calc_load_tasks);
-+}
-+
-+static void dump_rq_tasks(struct rq *rq, const char *loglvl)
-+{
-+ struct task_struct *g, *p;
-+ int cpu = cpu_of(rq);
-+
-+ lockdep_assert_held(&rq->lock);
-+
-+ printk("%sCPU%d enqueued tasks (%u total):\n", loglvl, cpu, rq->nr_running);
-+ for_each_process_thread(g, p) {
-+ if (task_cpu(p) != cpu)
-+ continue;
-+
-+ if (!task_on_rq_queued(p))
-+ continue;
-+
-+ printk("%s\tpid: %d, name: %s\n", loglvl, p->pid, p->comm);
-+ }
-+}
-+
-+int sched_cpu_dying(unsigned int cpu)
-+{
-+ struct rq *rq = cpu_rq(cpu);
-+ unsigned long flags;
-+
-+ /* Handle pending wakeups and then migrate everything off */
-+ sched_tick_stop(cpu);
-+
-+ raw_spin_lock_irqsave(&rq->lock, flags);
-+ if (rq->nr_running != 1 || rq_has_pinned_tasks(rq)) {
-+ WARN(true, "Dying CPU not properly vacated!");
-+ dump_rq_tasks(rq, KERN_WARNING);
-+ }
-+ raw_spin_unlock_irqrestore(&rq->lock, flags);
-+
-+ calc_load_migrate(rq);
-+ hrtick_clear(rq);
-+ return 0;
-+}
-+#endif
-+
-+#ifdef CONFIG_SMP
-+static void sched_init_topology_cpumask_early(void)
-+{
-+ int cpu;
-+ cpumask_t *tmp;
-+
-+ for_each_possible_cpu(cpu) {
-+ /* init topo masks */
-+ tmp = per_cpu(sched_cpu_topo_masks, cpu);
-+
-+ cpumask_copy(tmp, cpumask_of(cpu));
-+ tmp++;
-+ cpumask_copy(tmp, cpu_possible_mask);
-+ per_cpu(sched_cpu_llc_mask, cpu) = tmp;
-+ per_cpu(sched_cpu_topo_end_mask, cpu) = ++tmp;
-+ /*per_cpu(sd_llc_id, cpu) = cpu;*/
-+ }
-+}
-+
-+#define TOPOLOGY_CPUMASK(name, mask, last)\
-+ if (cpumask_and(topo, topo, mask)) { \
-+ cpumask_copy(topo, mask); \
-+ printk(KERN_INFO "sched: cpu#%02d topo: 0x%08lx - "#name, \
-+ cpu, (topo++)->bits[0]); \
-+ } \
-+ if (!last) \
-+ bitmap_complement(cpumask_bits(topo), cpumask_bits(mask), \
-+ nr_cpumask_bits);
-+
-+static void sched_init_topology_cpumask(void)
-+{
-+ int cpu;
-+ cpumask_t *topo;
-+
-+ for_each_online_cpu(cpu) {
-+ /* take chance to reset time slice for idle tasks */
-+ cpu_rq(cpu)->idle->time_slice = sysctl_sched_base_slice;
-+
-+ topo = per_cpu(sched_cpu_topo_masks, cpu) + 1;
-+
-+ bitmap_complement(cpumask_bits(topo), cpumask_bits(cpumask_of(cpu)),
-+ nr_cpumask_bits);
-+#ifdef CONFIG_SCHED_SMT
-+ TOPOLOGY_CPUMASK(smt, topology_sibling_cpumask(cpu), false);
-+#endif
-+ per_cpu(sd_llc_id, cpu) = cpumask_first(cpu_coregroup_mask(cpu));
-+ per_cpu(sched_cpu_llc_mask, cpu) = topo;
-+ TOPOLOGY_CPUMASK(coregroup, cpu_coregroup_mask(cpu), false);
-+
-+ TOPOLOGY_CPUMASK(core, topology_core_cpumask(cpu), false);
-+
-+ TOPOLOGY_CPUMASK(others, cpu_online_mask, true);
-+
-+ per_cpu(sched_cpu_topo_end_mask, cpu) = topo;
-+ printk(KERN_INFO "sched: cpu#%02d llc_id = %d, llc_mask idx = %d\n",
-+ cpu, per_cpu(sd_llc_id, cpu),
-+ (int) (per_cpu(sched_cpu_llc_mask, cpu) -
-+ per_cpu(sched_cpu_topo_masks, cpu)));
-+ }
-+}
-+#endif
-+
-+void __init sched_init_smp(void)
-+{
-+ /* Move init over to a non-isolated CPU */
-+ if (set_cpus_allowed_ptr(current, housekeeping_cpumask(HK_TYPE_DOMAIN)) < 0)
-+ BUG();
-+ current->flags &= ~PF_NO_SETAFFINITY;
-+
-+ sched_init_topology_cpumask();
-+
-+ sched_smp_initialized = true;
-+}
-+
-+static int __init migration_init(void)
-+{
-+ sched_cpu_starting(smp_processor_id());
-+ return 0;
-+}
-+early_initcall(migration_init);
-+
-+#else
-+void __init sched_init_smp(void)
-+{
-+ cpu_rq(0)->idle->time_slice = sysctl_sched_base_slice;
-+}
-+#endif /* CONFIG_SMP */
-+
-+int in_sched_functions(unsigned long addr)
-+{
-+ return in_lock_functions(addr) ||
-+ (addr >= (unsigned long)__sched_text_start
-+ && addr < (unsigned long)__sched_text_end);
-+}
-+
-+#ifdef CONFIG_CGROUP_SCHED
-+/* task group related information */
-+struct task_group {
-+ struct cgroup_subsys_state css;
-+
-+ struct rcu_head rcu;
-+ struct list_head list;
-+
-+ struct task_group *parent;
-+ struct list_head siblings;
-+ struct list_head children;
-+#ifdef CONFIG_FAIR_GROUP_SCHED
-+ unsigned long shares;
-+#endif
-+};
-+
-+/*
-+ * Default task group.
-+ * Every task in system belongs to this group at bootup.
-+ */
-+struct task_group root_task_group;
-+LIST_HEAD(task_groups);
-+
-+/* Cacheline aligned slab cache for task_group */
-+static struct kmem_cache *task_group_cache __ro_after_init;
-+#endif /* CONFIG_CGROUP_SCHED */
-+
-+void __init sched_init(void)
-+{
-+ int i;
-+ struct rq *rq;
-+
-+ printk(KERN_INFO "sched/alt: "ALT_SCHED_NAME" CPU Scheduler "ALT_SCHED_VERSION\
-+ " by Alfred Chen.\n");
-+
-+ wait_bit_init();
-+
-+#ifdef CONFIG_SMP
-+ for (i = 0; i < SCHED_QUEUE_BITS; i++)
-+ cpumask_copy(sched_preempt_mask + i, cpu_present_mask);
-+#endif
-+
-+#ifdef CONFIG_CGROUP_SCHED
-+ task_group_cache = KMEM_CACHE(task_group, 0);
-+
-+ list_add(&root_task_group.list, &task_groups);
-+ INIT_LIST_HEAD(&root_task_group.children);
-+ INIT_LIST_HEAD(&root_task_group.siblings);
-+#endif /* CONFIG_CGROUP_SCHED */
-+ for_each_possible_cpu(i) {
-+ rq = cpu_rq(i);
-+
-+ sched_queue_init(&rq->queue);
-+ rq->prio = IDLE_TASK_SCHED_PRIO;
-+ rq->skip = NULL;
-+
-+ raw_spin_lock_init(&rq->lock);
-+ rq->nr_running = rq->nr_uninterruptible = 0;
-+ rq->calc_load_active = 0;
-+ rq->calc_load_update = jiffies + LOAD_FREQ;
-+#ifdef CONFIG_SMP
-+ rq->online = false;
-+ rq->cpu = i;
-+
-+#ifdef CONFIG_SCHED_SMT
-+ rq->active_balance = 0;
-+#endif
-+
-+#ifdef CONFIG_NO_HZ_COMMON
-+ INIT_CSD(&rq->nohz_csd, nohz_csd_func, rq);
-+#endif
-+ rq->balance_callback = &balance_push_callback;
-+#ifdef CONFIG_HOTPLUG_CPU
-+ rcuwait_init(&rq->hotplug_wait);
-+#endif
-+#endif /* CONFIG_SMP */
-+ rq->nr_switches = 0;
-+
-+ hrtick_rq_init(rq);
-+ atomic_set(&rq->nr_iowait, 0);
-+
-+ zalloc_cpumask_var_node(&rq->scratch_mask, GFP_KERNEL, cpu_to_node(i));
-+ }
-+#ifdef CONFIG_SMP
-+ /* Set rq->online for cpu 0 */
-+ cpu_rq(0)->online = true;
-+#endif
-+ /*
-+ * The boot idle thread does lazy MMU switching as well:
-+ */
-+ mmgrab(&init_mm);
-+ enter_lazy_tlb(&init_mm, current);
-+
-+ /*
-+ * The idle task doesn't need the kthread struct to function, but it
-+ * is dressed up as a per-CPU kthread and thus needs to play the part
-+ * if we want to avoid special-casing it in code that deals with per-CPU
-+ * kthreads.
-+ */
-+ WARN_ON(!set_kthread_struct(current));
-+
-+ /*
-+ * Make us the idle thread. Technically, schedule() should not be
-+ * called from this thread, however somewhere below it might be,
-+ * but because we are the idle thread, we just pick up running again
-+ * when this runqueue becomes "idle".
-+ */
-+ init_idle(current, smp_processor_id());
-+
-+ calc_load_update = jiffies + LOAD_FREQ;
-+
-+#ifdef CONFIG_SMP
-+ idle_thread_set_boot_cpu();
-+ balance_push_set(smp_processor_id(), false);
-+
-+ sched_init_topology_cpumask_early();
-+#endif /* SMP */
-+
-+ preempt_dynamic_init();
-+}
-+
-+#ifdef CONFIG_DEBUG_ATOMIC_SLEEP
-+
-+void __might_sleep(const char *file, int line)
-+{
-+ unsigned int state = get_current_state();
-+ /*
-+ * Blocking primitives will set (and therefore destroy) current->state,
-+ * since we will exit with TASK_RUNNING make sure we enter with it,
-+ * otherwise we will destroy state.
-+ */
-+ WARN_ONCE(state != TASK_RUNNING && current->task_state_change,
-+ "do not call blocking ops when !TASK_RUNNING; "
-+ "state=%x set at [<%p>] %pS\n", state,
-+ (void *)current->task_state_change,
-+ (void *)current->task_state_change);
-+
-+ __might_resched(file, line, 0);
-+}
-+EXPORT_SYMBOL(__might_sleep);
-+
-+static void print_preempt_disable_ip(int preempt_offset, unsigned long ip)
-+{
-+ if (!IS_ENABLED(CONFIG_DEBUG_PREEMPT))
-+ return;
-+
-+ if (preempt_count() == preempt_offset)
-+ return;
-+
-+ pr_err("Preemption disabled at:");
-+ print_ip_sym(KERN_ERR, ip);
-+}
-+
-+static inline bool resched_offsets_ok(unsigned int offsets)
-+{
-+ unsigned int nested = preempt_count();
-+
-+ nested += rcu_preempt_depth() << MIGHT_RESCHED_RCU_SHIFT;
-+
-+ return nested == offsets;
-+}
-+
-+void __might_resched(const char *file, int line, unsigned int offsets)
-+{
-+ /* Ratelimiting timestamp: */
-+ static unsigned long prev_jiffy;
-+
-+ unsigned long preempt_disable_ip;
-+
-+ /* WARN_ON_ONCE() by default, no rate limit required: */
-+ rcu_sleep_check();
-+
-+ if ((resched_offsets_ok(offsets) && !irqs_disabled() &&
-+ !is_idle_task(current) && !current->non_block_count) ||
-+ system_state == SYSTEM_BOOTING || system_state > SYSTEM_RUNNING ||
-+ oops_in_progress)
-+ return;
-+ if (time_before(jiffies, prev_jiffy + HZ) && prev_jiffy)
-+ return;
-+ prev_jiffy = jiffies;
-+
-+ /* Save this before calling printk(), since that will clobber it: */
-+ preempt_disable_ip = get_preempt_disable_ip(current);
-+
-+ pr_err("BUG: sleeping function called from invalid context at %s:%d\n",
-+ file, line);
-+ pr_err("in_atomic(): %d, irqs_disabled(): %d, non_block: %d, pid: %d, name: %s\n",
-+ in_atomic(), irqs_disabled(), current->non_block_count,
-+ current->pid, current->comm);
-+ pr_err("preempt_count: %x, expected: %x\n", preempt_count(),
-+ offsets & MIGHT_RESCHED_PREEMPT_MASK);
-+
-+ if (IS_ENABLED(CONFIG_PREEMPT_RCU)) {
-+ pr_err("RCU nest depth: %d, expected: %u\n",
-+ rcu_preempt_depth(), offsets >> MIGHT_RESCHED_RCU_SHIFT);
-+ }
-+
-+ if (task_stack_end_corrupted(current))
-+ pr_emerg("Thread overran stack, or stack corrupted\n");
-+
-+ debug_show_held_locks(current);
-+ if (irqs_disabled())
-+ print_irqtrace_events(current);
-+
-+ print_preempt_disable_ip(offsets & MIGHT_RESCHED_PREEMPT_MASK,
-+ preempt_disable_ip);
-+
-+ dump_stack();
-+ add_taint(TAINT_WARN, LOCKDEP_STILL_OK);
-+}
-+EXPORT_SYMBOL(__might_resched);
-+
-+void __cant_sleep(const char *file, int line, int preempt_offset)
-+{
-+ static unsigned long prev_jiffy;
-+
-+ if (irqs_disabled())
-+ return;
-+
-+ if (!IS_ENABLED(CONFIG_PREEMPT_COUNT))
-+ return;
-+
-+ if (preempt_count() > preempt_offset)
-+ return;
-+
-+ if (time_before(jiffies, prev_jiffy + HZ) && prev_jiffy)
-+ return;
-+ prev_jiffy = jiffies;
-+
-+ printk(KERN_ERR "BUG: assuming atomic context at %s:%d\n", file, line);
-+ printk(KERN_ERR "in_atomic(): %d, irqs_disabled(): %d, pid: %d, name: %s\n",
-+ in_atomic(), irqs_disabled(),
-+ current->pid, current->comm);
-+
-+ debug_show_held_locks(current);
-+ dump_stack();
-+ add_taint(TAINT_WARN, LOCKDEP_STILL_OK);
-+}
-+EXPORT_SYMBOL_GPL(__cant_sleep);
-+
-+#ifdef CONFIG_SMP
-+void __cant_migrate(const char *file, int line)
-+{
-+ static unsigned long prev_jiffy;
-+
-+ if (irqs_disabled())
-+ return;
-+
-+ if (is_migration_disabled(current))
-+ return;
-+
-+ if (!IS_ENABLED(CONFIG_PREEMPT_COUNT))
-+ return;
-+
-+ if (preempt_count() > 0)
-+ return;
-+
-+ if (current->migration_flags & MDF_FORCE_ENABLED)
-+ return;
-+
-+ if (time_before(jiffies, prev_jiffy + HZ) && prev_jiffy)
-+ return;
-+ prev_jiffy = jiffies;
-+
-+ pr_err("BUG: assuming non migratable context at %s:%d\n", file, line);
-+ pr_err("in_atomic(): %d, irqs_disabled(): %d, migration_disabled() %u pid: %d, name: %s\n",
-+ in_atomic(), irqs_disabled(), is_migration_disabled(current),
-+ current->pid, current->comm);
-+
-+ debug_show_held_locks(current);
-+ dump_stack();
-+ add_taint(TAINT_WARN, LOCKDEP_STILL_OK);
-+}
-+EXPORT_SYMBOL_GPL(__cant_migrate);
-+#endif
-+#endif
-+
-+#ifdef CONFIG_MAGIC_SYSRQ
-+void normalize_rt_tasks(void)
-+{
-+ struct task_struct *g, *p;
-+ struct sched_attr attr = {
-+ .sched_policy = SCHED_NORMAL,
-+ };
-+
-+ read_lock(&tasklist_lock);
-+ for_each_process_thread(g, p) {
-+ /*
-+ * Only normalize user tasks:
-+ */
-+ if (p->flags & PF_KTHREAD)
-+ continue;
-+
-+ schedstat_set(p->stats.wait_start, 0);
-+ schedstat_set(p->stats.sleep_start, 0);
-+ schedstat_set(p->stats.block_start, 0);
-+
-+ if (!rt_task(p)) {
-+ /*
-+ * Renice negative nice level userspace
-+ * tasks back to 0:
-+ */
-+ if (task_nice(p) < 0)
-+ set_user_nice(p, 0);
-+ continue;
-+ }
-+
-+ __sched_setscheduler(p, &attr, false, false);
-+ }
-+ read_unlock(&tasklist_lock);
-+}
-+#endif /* CONFIG_MAGIC_SYSRQ */
-+
-+#if defined(CONFIG_KGDB_KDB)
-+/*
-+ * These functions are only useful for kdb.
-+ *
-+ * They can only be called when the whole system has been
-+ * stopped - every CPU needs to be quiescent, and no scheduling
-+ * activity can take place. Using them for anything else would
-+ * be a serious bug, and as a result, they aren't even visible
-+ * under any other configuration.
-+ */
-+
-+/**
-+ * curr_task - return the current task for a given CPU.
-+ * @cpu: the processor in question.
-+ *
-+ * ONLY VALID WHEN THE WHOLE SYSTEM IS STOPPED!
-+ *
-+ * Return: The current task for @cpu.
-+ */
-+struct task_struct *curr_task(int cpu)
-+{
-+ return cpu_curr(cpu);
-+}
-+
-+#endif /* defined(CONFIG_KGDB_KDB) */
-+
-+#ifdef CONFIG_CGROUP_SCHED
-+static void sched_free_group(struct task_group *tg)
-+{
-+ kmem_cache_free(task_group_cache, tg);
-+}
-+
-+static void sched_free_group_rcu(struct rcu_head *rhp)
-+{
-+ sched_free_group(container_of(rhp, struct task_group, rcu));
-+}
-+
-+static void sched_unregister_group(struct task_group *tg)
-+{
-+ /*
-+ * We have to wait for yet another RCU grace period to expire, as
-+ * print_cfs_stats() might run concurrently.
-+ */
-+ call_rcu(&tg->rcu, sched_free_group_rcu);
-+}
-+
-+/* allocate runqueue etc for a new task group */
-+struct task_group *sched_create_group(struct task_group *parent)
-+{
-+ struct task_group *tg;
-+
-+ tg = kmem_cache_alloc(task_group_cache, GFP_KERNEL | __GFP_ZERO);
-+ if (!tg)
-+ return ERR_PTR(-ENOMEM);
-+
-+ return tg;
-+}
-+
-+void sched_online_group(struct task_group *tg, struct task_group *parent)
-+{
-+}
-+
-+/* rcu callback to free various structures associated with a task group */
-+static void sched_unregister_group_rcu(struct rcu_head *rhp)
-+{
-+ /* Now it should be safe to free those cfs_rqs: */
-+ sched_unregister_group(container_of(rhp, struct task_group, rcu));
-+}
-+
-+void sched_destroy_group(struct task_group *tg)
-+{
-+ /* Wait for possible concurrent references to cfs_rqs complete: */
-+ call_rcu(&tg->rcu, sched_unregister_group_rcu);
-+}
-+
-+void sched_release_group(struct task_group *tg)
-+{
-+}
-+
-+static inline struct task_group *css_tg(struct cgroup_subsys_state *css)
-+{
-+ return css ? container_of(css, struct task_group, css) : NULL;
-+}
-+
-+static struct cgroup_subsys_state *
-+cpu_cgroup_css_alloc(struct cgroup_subsys_state *parent_css)
-+{
-+ struct task_group *parent = css_tg(parent_css);
-+ struct task_group *tg;
-+
-+ if (!parent) {
-+ /* This is early initialization for the top cgroup */
-+ return &root_task_group.css;
-+ }
-+
-+ tg = sched_create_group(parent);
-+ if (IS_ERR(tg))
-+ return ERR_PTR(-ENOMEM);
-+ return &tg->css;
-+}
-+
-+/* Expose task group only after completing cgroup initialization */
-+static int cpu_cgroup_css_online(struct cgroup_subsys_state *css)
-+{
-+ struct task_group *tg = css_tg(css);
-+ struct task_group *parent = css_tg(css->parent);
-+
-+ if (parent)
-+ sched_online_group(tg, parent);
-+ return 0;
-+}
-+
-+static void cpu_cgroup_css_released(struct cgroup_subsys_state *css)
-+{
-+ struct task_group *tg = css_tg(css);
-+
-+ sched_release_group(tg);
-+}
-+
-+static void cpu_cgroup_css_free(struct cgroup_subsys_state *css)
-+{
-+ struct task_group *tg = css_tg(css);
-+
-+ /*
-+ * Relies on the RCU grace period between css_released() and this.
-+ */
-+ sched_unregister_group(tg);
-+}
-+
-+#ifdef CONFIG_RT_GROUP_SCHED
-+static int cpu_cgroup_can_attach(struct cgroup_taskset *tset)
-+{
-+ return 0;
-+}
-+#endif
-+
-+static void cpu_cgroup_attach(struct cgroup_taskset *tset)
-+{
-+}
-+
-+#ifdef CONFIG_FAIR_GROUP_SCHED
-+static DEFINE_MUTEX(shares_mutex);
-+
-+int sched_group_set_shares(struct task_group *tg, unsigned long shares)
-+{
-+ /*
-+ * We can't change the weight of the root cgroup.
-+ */
-+ if (&root_task_group == tg)
-+ return -EINVAL;
-+
-+ shares = clamp(shares, scale_load(MIN_SHARES), scale_load(MAX_SHARES));
-+
-+ mutex_lock(&shares_mutex);
-+ if (tg->shares == shares)
-+ goto done;
-+
-+ tg->shares = shares;
-+done:
-+ mutex_unlock(&shares_mutex);
-+ return 0;
-+}
-+
-+static int cpu_shares_write_u64(struct cgroup_subsys_state *css,
-+ struct cftype *cftype, u64 shareval)
-+{
-+ if (shareval > scale_load_down(ULONG_MAX))
-+ shareval = MAX_SHARES;
-+ return sched_group_set_shares(css_tg(css), scale_load(shareval));
-+}
-+
-+static u64 cpu_shares_read_u64(struct cgroup_subsys_state *css,
-+ struct cftype *cft)
-+{
-+ struct task_group *tg = css_tg(css);
-+
-+ return (u64) scale_load_down(tg->shares);
-+}
-+#endif
-+
-+static s64 cpu_cfs_quota_read_s64(struct cgroup_subsys_state *css,
-+ struct cftype *cft)
-+{
-+ return 0;
-+}
-+
-+static int cpu_cfs_quota_write_s64(struct cgroup_subsys_state *css,
-+ struct cftype *cftype, s64 cfs_quota_us)
-+{
-+ return 0;
-+}
-+
-+static u64 cpu_cfs_period_read_u64(struct cgroup_subsys_state *css,
-+ struct cftype *cft)
-+{
-+ return 0;
-+}
-+
-+static int cpu_cfs_period_write_u64(struct cgroup_subsys_state *css,
-+ struct cftype *cftype, u64 cfs_period_us)
-+{
-+ return 0;
-+}
-+
-+static u64 cpu_cfs_burst_read_u64(struct cgroup_subsys_state *css,
-+ struct cftype *cft)
-+{
-+ return 0;
-+}
-+
-+static int cpu_cfs_burst_write_u64(struct cgroup_subsys_state *css,
-+ struct cftype *cftype, u64 cfs_burst_us)
-+{
-+ return 0;
-+}
-+
-+static int cpu_cfs_stat_show(struct seq_file *sf, void *v)
-+{
-+ return 0;
-+}
-+
-+static int cpu_cfs_local_stat_show(struct seq_file *sf, void *v)
-+{
-+ return 0;
-+}
-+
-+static int cpu_rt_runtime_write(struct cgroup_subsys_state *css,
-+ struct cftype *cft, s64 val)
-+{
-+ return 0;
-+}
-+
-+static s64 cpu_rt_runtime_read(struct cgroup_subsys_state *css,
-+ struct cftype *cft)
-+{
-+ return 0;
-+}
-+
-+static int cpu_rt_period_write_uint(struct cgroup_subsys_state *css,
-+ struct cftype *cftype, u64 rt_period_us)
-+{
-+ return 0;
-+}
-+
-+static u64 cpu_rt_period_read_uint(struct cgroup_subsys_state *css,
-+ struct cftype *cft)
-+{
-+ return 0;
-+}
-+
-+static int cpu_uclamp_min_show(struct seq_file *sf, void *v)
-+{
-+ return 0;
-+}
-+
-+static int cpu_uclamp_max_show(struct seq_file *sf, void *v)
-+{
-+ return 0;
-+}
-+
-+static ssize_t cpu_uclamp_min_write(struct kernfs_open_file *of,
-+ char *buf, size_t nbytes,
-+ loff_t off)
-+{
-+ return nbytes;
-+}
-+
-+static ssize_t cpu_uclamp_max_write(struct kernfs_open_file *of,
-+ char *buf, size_t nbytes,
-+ loff_t off)
-+{
-+ return nbytes;
-+}
-+
-+static struct cftype cpu_legacy_files[] = {
-+#ifdef CONFIG_FAIR_GROUP_SCHED
-+ {
-+ .name = "shares",
-+ .read_u64 = cpu_shares_read_u64,
-+ .write_u64 = cpu_shares_write_u64,
-+ },
-+#endif
-+ {
-+ .name = "cfs_quota_us",
-+ .read_s64 = cpu_cfs_quota_read_s64,
-+ .write_s64 = cpu_cfs_quota_write_s64,
-+ },
-+ {
-+ .name = "cfs_period_us",
-+ .read_u64 = cpu_cfs_period_read_u64,
-+ .write_u64 = cpu_cfs_period_write_u64,
-+ },
-+ {
-+ .name = "cfs_burst_us",
-+ .read_u64 = cpu_cfs_burst_read_u64,
-+ .write_u64 = cpu_cfs_burst_write_u64,
-+ },
-+ {
-+ .name = "stat",
-+ .seq_show = cpu_cfs_stat_show,
-+ },
-+ {
-+ .name = "stat.local",
-+ .seq_show = cpu_cfs_local_stat_show,
-+ },
-+ {
-+ .name = "rt_runtime_us",
-+ .read_s64 = cpu_rt_runtime_read,
-+ .write_s64 = cpu_rt_runtime_write,
-+ },
-+ {
-+ .name = "rt_period_us",
-+ .read_u64 = cpu_rt_period_read_uint,
-+ .write_u64 = cpu_rt_period_write_uint,
-+ },
-+ {
-+ .name = "uclamp.min",
-+ .flags = CFTYPE_NOT_ON_ROOT,
-+ .seq_show = cpu_uclamp_min_show,
-+ .write = cpu_uclamp_min_write,
-+ },
-+ {
-+ .name = "uclamp.max",
-+ .flags = CFTYPE_NOT_ON_ROOT,
-+ .seq_show = cpu_uclamp_max_show,
-+ .write = cpu_uclamp_max_write,
-+ },
-+ { } /* Terminate */
-+};
-+
-+static u64 cpu_weight_read_u64(struct cgroup_subsys_state *css,
-+ struct cftype *cft)
-+{
-+ return 0;
-+}
-+
-+static int cpu_weight_write_u64(struct cgroup_subsys_state *css,
-+ struct cftype *cft, u64 weight)
-+{
-+ return 0;
-+}
-+
-+static s64 cpu_weight_nice_read_s64(struct cgroup_subsys_state *css,
-+ struct cftype *cft)
-+{
-+ return 0;
-+}
-+
-+static int cpu_weight_nice_write_s64(struct cgroup_subsys_state *css,
-+ struct cftype *cft, s64 nice)
-+{
-+ return 0;
-+}
-+
-+static s64 cpu_idle_read_s64(struct cgroup_subsys_state *css,
-+ struct cftype *cft)
-+{
-+ return 0;
-+}
-+
-+static int cpu_idle_write_s64(struct cgroup_subsys_state *css,
-+ struct cftype *cft, s64 idle)
-+{
-+ return 0;
-+}
-+
-+static int cpu_max_show(struct seq_file *sf, void *v)
-+{
-+ return 0;
-+}
-+
-+static ssize_t cpu_max_write(struct kernfs_open_file *of,
-+ char *buf, size_t nbytes, loff_t off)
-+{
-+ return nbytes;
-+}
-+
-+static struct cftype cpu_files[] = {
-+ {
-+ .name = "weight",
-+ .flags = CFTYPE_NOT_ON_ROOT,
-+ .read_u64 = cpu_weight_read_u64,
-+ .write_u64 = cpu_weight_write_u64,
-+ },
-+ {
-+ .name = "weight.nice",
-+ .flags = CFTYPE_NOT_ON_ROOT,
-+ .read_s64 = cpu_weight_nice_read_s64,
-+ .write_s64 = cpu_weight_nice_write_s64,
-+ },
-+ {
-+ .name = "idle",
-+ .flags = CFTYPE_NOT_ON_ROOT,
-+ .read_s64 = cpu_idle_read_s64,
-+ .write_s64 = cpu_idle_write_s64,
-+ },
-+ {
-+ .name = "max",
-+ .flags = CFTYPE_NOT_ON_ROOT,
-+ .seq_show = cpu_max_show,
-+ .write = cpu_max_write,
-+ },
-+ {
-+ .name = "max.burst",
-+ .flags = CFTYPE_NOT_ON_ROOT,
-+ .read_u64 = cpu_cfs_burst_read_u64,
-+ .write_u64 = cpu_cfs_burst_write_u64,
-+ },
-+ {
-+ .name = "uclamp.min",
-+ .flags = CFTYPE_NOT_ON_ROOT,
-+ .seq_show = cpu_uclamp_min_show,
-+ .write = cpu_uclamp_min_write,
-+ },
-+ {
-+ .name = "uclamp.max",
-+ .flags = CFTYPE_NOT_ON_ROOT,
-+ .seq_show = cpu_uclamp_max_show,
-+ .write = cpu_uclamp_max_write,
-+ },
-+ { } /* terminate */
-+};
-+
-+static int cpu_extra_stat_show(struct seq_file *sf,
-+ struct cgroup_subsys_state *css)
-+{
-+ return 0;
-+}
-+
-+static int cpu_local_stat_show(struct seq_file *sf,
-+ struct cgroup_subsys_state *css)
-+{
-+ return 0;
-+}
-+
-+struct cgroup_subsys cpu_cgrp_subsys = {
-+ .css_alloc = cpu_cgroup_css_alloc,
-+ .css_online = cpu_cgroup_css_online,
-+ .css_released = cpu_cgroup_css_released,
-+ .css_free = cpu_cgroup_css_free,
-+ .css_extra_stat_show = cpu_extra_stat_show,
-+ .css_local_stat_show = cpu_local_stat_show,
-+#ifdef CONFIG_RT_GROUP_SCHED
-+ .can_attach = cpu_cgroup_can_attach,
-+#endif
-+ .attach = cpu_cgroup_attach,
-+ .legacy_cftypes = cpu_legacy_files,
-+ .dfl_cftypes = cpu_files,
-+ .early_init = true,
-+ .threaded = true,
-+};
-+#endif /* CONFIG_CGROUP_SCHED */
-+
-+#undef CREATE_TRACE_POINTS
-+
-+#ifdef CONFIG_SCHED_MM_CID
-+
-+#
-+/*
-+ * @cid_lock: Guarantee forward-progress of cid allocation.
-+ *
-+ * Concurrency ID allocation within a bitmap is mostly lock-free. The cid_lock
-+ * is only used when contention is detected by the lock-free allocation so
-+ * forward progress can be guaranteed.
-+ */
-+DEFINE_RAW_SPINLOCK(cid_lock);
-+
-+/*
-+ * @use_cid_lock: Select cid allocation behavior: lock-free vs spinlock.
-+ *
-+ * When @use_cid_lock is 0, the cid allocation is lock-free. When contention is
-+ * detected, it is set to 1 to ensure that all newly coming allocations are
-+ * serialized by @cid_lock until the allocation which detected contention
-+ * completes and sets @use_cid_lock back to 0. This guarantees forward progress
-+ * of a cid allocation.
-+ */
-+int use_cid_lock;
-+
-+/*
-+ * mm_cid remote-clear implements a lock-free algorithm to clear per-mm/cpu cid
-+ * concurrently with respect to the execution of the source runqueue context
-+ * switch.
-+ *
-+ * There is one basic properties we want to guarantee here:
-+ *
-+ * (1) Remote-clear should _never_ mark a per-cpu cid UNSET when it is actively
-+ * used by a task. That would lead to concurrent allocation of the cid and
-+ * userspace corruption.
-+ *
-+ * Provide this guarantee by introducing a Dekker memory ordering to guarantee
-+ * that a pair of loads observe at least one of a pair of stores, which can be
-+ * shown as:
-+ *
-+ * X = Y = 0
-+ *
-+ * w[X]=1 w[Y]=1
-+ * MB MB
-+ * r[Y]=y r[X]=x
-+ *
-+ * Which guarantees that x==0 && y==0 is impossible. But rather than using
-+ * values 0 and 1, this algorithm cares about specific state transitions of the
-+ * runqueue current task (as updated by the scheduler context switch), and the
-+ * per-mm/cpu cid value.
-+ *
-+ * Let's introduce task (Y) which has task->mm == mm and task (N) which has
-+ * task->mm != mm for the rest of the discussion. There are two scheduler state
-+ * transitions on context switch we care about:
-+ *
-+ * (TSA) Store to rq->curr with transition from (N) to (Y)
-+ *
-+ * (TSB) Store to rq->curr with transition from (Y) to (N)
-+ *
-+ * On the remote-clear side, there is one transition we care about:
-+ *
-+ * (TMA) cmpxchg to *pcpu_cid to set the LAZY flag
-+ *
-+ * There is also a transition to UNSET state which can be performed from all
-+ * sides (scheduler, remote-clear). It is always performed with a cmpxchg which
-+ * guarantees that only a single thread will succeed:
-+ *
-+ * (TMB) cmpxchg to *pcpu_cid to mark UNSET
-+ *
-+ * Just to be clear, what we do _not_ want to happen is a transition to UNSET
-+ * when a thread is actively using the cid (property (1)).
-+ *
-+ * Let's looks at the relevant combinations of TSA/TSB, and TMA transitions.
-+ *
-+ * Scenario A) (TSA)+(TMA) (from next task perspective)
-+ *
-+ * CPU0 CPU1
-+ *
-+ * Context switch CS-1 Remote-clear
-+ * - store to rq->curr: (N)->(Y) (TSA) - cmpxchg to *pcpu_id to LAZY (TMA)
-+ * (implied barrier after cmpxchg)
-+ * - switch_mm_cid()
-+ * - memory barrier (see switch_mm_cid()
-+ * comment explaining how this barrier
-+ * is combined with other scheduler
-+ * barriers)
-+ * - mm_cid_get (next)
-+ * - READ_ONCE(*pcpu_cid) - rcu_dereference(src_rq->curr)
-+ *
-+ * This Dekker ensures that either task (Y) is observed by the
-+ * rcu_dereference() or the LAZY flag is observed by READ_ONCE(), or both are
-+ * observed.
-+ *
-+ * If task (Y) store is observed by rcu_dereference(), it means that there is
-+ * still an active task on the cpu. Remote-clear will therefore not transition
-+ * to UNSET, which fulfills property (1).
-+ *
-+ * If task (Y) is not observed, but the lazy flag is observed by READ_ONCE(),
-+ * it will move its state to UNSET, which clears the percpu cid perhaps
-+ * uselessly (which is not an issue for correctness). Because task (Y) is not
-+ * observed, CPU1 can move ahead to set the state to UNSET. Because moving
-+ * state to UNSET is done with a cmpxchg expecting that the old state has the
-+ * LAZY flag set, only one thread will successfully UNSET.
-+ *
-+ * If both states (LAZY flag and task (Y)) are observed, the thread on CPU0
-+ * will observe the LAZY flag and transition to UNSET (perhaps uselessly), and
-+ * CPU1 will observe task (Y) and do nothing more, which is fine.
-+ *
-+ * What we are effectively preventing with this Dekker is a scenario where
-+ * neither LAZY flag nor store (Y) are observed, which would fail property (1)
-+ * because this would UNSET a cid which is actively used.
-+ */
-+
-+void sched_mm_cid_migrate_from(struct task_struct *t)
-+{
-+ t->migrate_from_cpu = task_cpu(t);
-+}
-+
-+static
-+int __sched_mm_cid_migrate_from_fetch_cid(struct rq *src_rq,
-+ struct task_struct *t,
-+ struct mm_cid *src_pcpu_cid)
-+{
-+ struct mm_struct *mm = t->mm;
-+ struct task_struct *src_task;
-+ int src_cid, last_mm_cid;
-+
-+ if (!mm)
-+ return -1;
-+
-+ last_mm_cid = t->last_mm_cid;
-+ /*
-+ * If the migrated task has no last cid, or if the current
-+ * task on src rq uses the cid, it means the source cid does not need
-+ * to be moved to the destination cpu.
-+ */
-+ if (last_mm_cid == -1)
-+ return -1;
-+ src_cid = READ_ONCE(src_pcpu_cid->cid);
-+ if (!mm_cid_is_valid(src_cid) || last_mm_cid != src_cid)
-+ return -1;
-+
-+ /*
-+ * If we observe an active task using the mm on this rq, it means we
-+ * are not the last task to be migrated from this cpu for this mm, so
-+ * there is no need to move src_cid to the destination cpu.
-+ */
-+ rcu_read_lock();
-+ src_task = rcu_dereference(src_rq->curr);
-+ if (READ_ONCE(src_task->mm_cid_active) && src_task->mm == mm) {
-+ rcu_read_unlock();
-+ t->last_mm_cid = -1;
-+ return -1;
-+ }
-+ rcu_read_unlock();
-+
-+ return src_cid;
-+}
-+
-+static
-+int __sched_mm_cid_migrate_from_try_steal_cid(struct rq *src_rq,
-+ struct task_struct *t,
-+ struct mm_cid *src_pcpu_cid,
-+ int src_cid)
-+{
-+ struct task_struct *src_task;
-+ struct mm_struct *mm = t->mm;
-+ int lazy_cid;
-+
-+ if (src_cid == -1)
-+ return -1;
-+
-+ /*
-+ * Attempt to clear the source cpu cid to move it to the destination
-+ * cpu.
-+ */
-+ lazy_cid = mm_cid_set_lazy_put(src_cid);
-+ if (!try_cmpxchg(&src_pcpu_cid->cid, &src_cid, lazy_cid))
-+ return -1;
-+
-+ /*
-+ * The implicit barrier after cmpxchg per-mm/cpu cid before loading
-+ * rq->curr->mm matches the scheduler barrier in context_switch()
-+ * between store to rq->curr and load of prev and next task's
-+ * per-mm/cpu cid.
-+ *
-+ * The implicit barrier after cmpxchg per-mm/cpu cid before loading
-+ * rq->curr->mm_cid_active matches the barrier in
-+ * sched_mm_cid_exit_signals(), sched_mm_cid_before_execve(), and
-+ * sched_mm_cid_after_execve() between store to t->mm_cid_active and
-+ * load of per-mm/cpu cid.
-+ */
-+
-+ /*
-+ * If we observe an active task using the mm on this rq after setting
-+ * the lazy-put flag, this task will be responsible for transitioning
-+ * from lazy-put flag set to MM_CID_UNSET.
-+ */
-+ scoped_guard (rcu) {
-+ src_task = rcu_dereference(src_rq->curr);
-+ if (READ_ONCE(src_task->mm_cid_active) && src_task->mm == mm) {
-+ rcu_read_unlock();
-+ /*
-+ * We observed an active task for this mm, there is therefore
-+ * no point in moving this cid to the destination cpu.
-+ */
-+ t->last_mm_cid = -1;
-+ return -1;
-+ }
-+ }
-+
-+ /*
-+ * The src_cid is unused, so it can be unset.
-+ */
-+ if (!try_cmpxchg(&src_pcpu_cid->cid, &lazy_cid, MM_CID_UNSET))
-+ return -1;
-+ return src_cid;
-+}
-+
-+/*
-+ * Migration to dst cpu. Called with dst_rq lock held.
-+ * Interrupts are disabled, which keeps the window of cid ownership without the
-+ * source rq lock held small.
-+ */
-+void sched_mm_cid_migrate_to(struct rq *dst_rq, struct task_struct *t, int src_cpu)
-+{
-+ struct mm_cid *src_pcpu_cid, *dst_pcpu_cid;
-+ struct mm_struct *mm = t->mm;
-+ int src_cid, dst_cid;
-+ struct rq *src_rq;
-+
-+ lockdep_assert_rq_held(dst_rq);
-+
-+ if (!mm)
-+ return;
-+ if (src_cpu == -1) {
-+ t->last_mm_cid = -1;
-+ return;
-+ }
-+ /*
-+ * Move the src cid if the dst cid is unset. This keeps id
-+ * allocation closest to 0 in cases where few threads migrate around
-+ * many cpus.
-+ *
-+ * If destination cid is already set, we may have to just clear
-+ * the src cid to ensure compactness in frequent migrations
-+ * scenarios.
-+ *
-+ * It is not useful to clear the src cid when the number of threads is
-+ * greater or equal to the number of allowed cpus, because user-space
-+ * can expect that the number of allowed cids can reach the number of
-+ * allowed cpus.
-+ */
-+ dst_pcpu_cid = per_cpu_ptr(mm->pcpu_cid, cpu_of(dst_rq));
-+ dst_cid = READ_ONCE(dst_pcpu_cid->cid);
-+ if (!mm_cid_is_unset(dst_cid) &&
-+ atomic_read(&mm->mm_users) >= t->nr_cpus_allowed)
-+ return;
-+ src_pcpu_cid = per_cpu_ptr(mm->pcpu_cid, src_cpu);
-+ src_rq = cpu_rq(src_cpu);
-+ src_cid = __sched_mm_cid_migrate_from_fetch_cid(src_rq, t, src_pcpu_cid);
-+ if (src_cid == -1)
-+ return;
-+ src_cid = __sched_mm_cid_migrate_from_try_steal_cid(src_rq, t, src_pcpu_cid,
-+ src_cid);
-+ if (src_cid == -1)
-+ return;
-+ if (!mm_cid_is_unset(dst_cid)) {
-+ __mm_cid_put(mm, src_cid);
-+ return;
-+ }
-+ /* Move src_cid to dst cpu. */
-+ mm_cid_snapshot_time(dst_rq, mm);
-+ WRITE_ONCE(dst_pcpu_cid->cid, src_cid);
-+}
-+
-+static void sched_mm_cid_remote_clear(struct mm_struct *mm, struct mm_cid *pcpu_cid,
-+ int cpu)
-+{
-+ struct rq *rq = cpu_rq(cpu);
-+ struct task_struct *t;
-+ int cid, lazy_cid;
-+
-+ cid = READ_ONCE(pcpu_cid->cid);
-+ if (!mm_cid_is_valid(cid))
-+ return;
-+
-+ /*
-+ * Clear the cpu cid if it is set to keep cid allocation compact. If
-+ * there happens to be other tasks left on the source cpu using this
-+ * mm, the next task using this mm will reallocate its cid on context
-+ * switch.
-+ */
-+ lazy_cid = mm_cid_set_lazy_put(cid);
-+ if (!try_cmpxchg(&pcpu_cid->cid, &cid, lazy_cid))
-+ return;
-+
-+ /*
-+ * The implicit barrier after cmpxchg per-mm/cpu cid before loading
-+ * rq->curr->mm matches the scheduler barrier in context_switch()
-+ * between store to rq->curr and load of prev and next task's
-+ * per-mm/cpu cid.
-+ *
-+ * The implicit barrier after cmpxchg per-mm/cpu cid before loading
-+ * rq->curr->mm_cid_active matches the barrier in
-+ * sched_mm_cid_exit_signals(), sched_mm_cid_before_execve(), and
-+ * sched_mm_cid_after_execve() between store to t->mm_cid_active and
-+ * load of per-mm/cpu cid.
-+ */
-+
-+ /*
-+ * If we observe an active task using the mm on this rq after setting
-+ * the lazy-put flag, that task will be responsible for transitioning
-+ * from lazy-put flag set to MM_CID_UNSET.
-+ */
-+ scoped_guard (rcu) {
-+ t = rcu_dereference(rq->curr);
-+ if (READ_ONCE(t->mm_cid_active) && t->mm == mm)
-+ return;
-+ }
-+
-+ /*
-+ * The cid is unused, so it can be unset.
-+ * Disable interrupts to keep the window of cid ownership without rq
-+ * lock small.
-+ */
-+ scoped_guard (irqsave) {
-+ if (try_cmpxchg(&pcpu_cid->cid, &lazy_cid, MM_CID_UNSET))
-+ __mm_cid_put(mm, cid);
-+ }
-+}
-+
-+static void sched_mm_cid_remote_clear_old(struct mm_struct *mm, int cpu)
-+{
-+ struct rq *rq = cpu_rq(cpu);
-+ struct mm_cid *pcpu_cid;
-+ struct task_struct *curr;
-+ u64 rq_clock;
-+
-+ /*
-+ * rq->clock load is racy on 32-bit but one spurious clear once in a
-+ * while is irrelevant.
-+ */
-+ rq_clock = READ_ONCE(rq->clock);
-+ pcpu_cid = per_cpu_ptr(mm->pcpu_cid, cpu);
-+
-+ /*
-+ * In order to take care of infrequently scheduled tasks, bump the time
-+ * snapshot associated with this cid if an active task using the mm is
-+ * observed on this rq.
-+ */
-+ scoped_guard (rcu) {
-+ curr = rcu_dereference(rq->curr);
-+ if (READ_ONCE(curr->mm_cid_active) && curr->mm == mm) {
-+ WRITE_ONCE(pcpu_cid->time, rq_clock);
-+ return;
-+ }
-+ }
-+
-+ if (rq_clock < pcpu_cid->time + SCHED_MM_CID_PERIOD_NS)
-+ return;
-+ sched_mm_cid_remote_clear(mm, pcpu_cid, cpu);
-+}
-+
-+static void sched_mm_cid_remote_clear_weight(struct mm_struct *mm, int cpu,
-+ int weight)
-+{
-+ struct mm_cid *pcpu_cid;
-+ int cid;
-+
-+ pcpu_cid = per_cpu_ptr(mm->pcpu_cid, cpu);
-+ cid = READ_ONCE(pcpu_cid->cid);
-+ if (!mm_cid_is_valid(cid) || cid < weight)
-+ return;
-+ sched_mm_cid_remote_clear(mm, pcpu_cid, cpu);
-+}
-+
-+static void task_mm_cid_work(struct callback_head *work)
-+{
-+ unsigned long now = jiffies, old_scan, next_scan;
-+ struct task_struct *t = current;
-+ struct cpumask *cidmask;
-+ struct mm_struct *mm;
-+ int weight, cpu;
-+
-+ SCHED_WARN_ON(t != container_of(work, struct task_struct, cid_work));
-+
-+ work->next = work; /* Prevent double-add */
-+ if (t->flags & PF_EXITING)
-+ return;
-+ mm = t->mm;
-+ if (!mm)
-+ return;
-+ old_scan = READ_ONCE(mm->mm_cid_next_scan);
-+ next_scan = now + msecs_to_jiffies(MM_CID_SCAN_DELAY);
-+ if (!old_scan) {
-+ unsigned long res;
-+
-+ res = cmpxchg(&mm->mm_cid_next_scan, old_scan, next_scan);
-+ if (res != old_scan)
-+ old_scan = res;
-+ else
-+ old_scan = next_scan;
-+ }
-+ if (time_before(now, old_scan))
-+ return;
-+ if (!try_cmpxchg(&mm->mm_cid_next_scan, &old_scan, next_scan))
-+ return;
-+ cidmask = mm_cidmask(mm);
-+ /* Clear cids that were not recently used. */
-+ for_each_possible_cpu(cpu)
-+ sched_mm_cid_remote_clear_old(mm, cpu);
-+ weight = cpumask_weight(cidmask);
-+ /*
-+ * Clear cids that are greater or equal to the cidmask weight to
-+ * recompact it.
-+ */
-+ for_each_possible_cpu(cpu)
-+ sched_mm_cid_remote_clear_weight(mm, cpu, weight);
-+}
-+
-+void init_sched_mm_cid(struct task_struct *t)
-+{
-+ struct mm_struct *mm = t->mm;
-+ int mm_users = 0;
-+
-+ if (mm) {
-+ mm_users = atomic_read(&mm->mm_users);
-+ if (mm_users == 1)
-+ mm->mm_cid_next_scan = jiffies + msecs_to_jiffies(MM_CID_SCAN_DELAY);
-+ }
-+ t->cid_work.next = &t->cid_work; /* Protect against double add */
-+ init_task_work(&t->cid_work, task_mm_cid_work);
-+}
-+
-+void task_tick_mm_cid(struct rq *rq, struct task_struct *curr)
-+{
-+ struct callback_head *work = &curr->cid_work;
-+ unsigned long now = jiffies;
-+
-+ if (!curr->mm || (curr->flags & (PF_EXITING | PF_KTHREAD)) ||
-+ work->next != work)
-+ return;
-+ if (time_before(now, READ_ONCE(curr->mm->mm_cid_next_scan)))
-+ return;
-+ task_work_add(curr, work, TWA_RESUME);
-+}
-+
-+void sched_mm_cid_exit_signals(struct task_struct *t)
-+{
-+ struct mm_struct *mm = t->mm;
-+ struct rq *rq;
-+
-+ if (!mm)
-+ return;
-+
-+ preempt_disable();
-+ rq = this_rq();
-+ guard(rq_lock_irqsave)(rq);
-+ preempt_enable_no_resched(); /* holding spinlock */
-+ WRITE_ONCE(t->mm_cid_active, 0);
-+ /*
-+ * Store t->mm_cid_active before loading per-mm/cpu cid.
-+ * Matches barrier in sched_mm_cid_remote_clear_old().
-+ */
-+ smp_mb();
-+ mm_cid_put(mm);
-+ t->last_mm_cid = t->mm_cid = -1;
-+}
-+
-+void sched_mm_cid_before_execve(struct task_struct *t)
-+{
-+ struct mm_struct *mm = t->mm;
-+ struct rq *rq;
-+
-+ if (!mm)
-+ return;
-+
-+ preempt_disable();
-+ rq = this_rq();
-+ guard(rq_lock_irqsave)(rq);
-+ preempt_enable_no_resched(); /* holding spinlock */
-+ WRITE_ONCE(t->mm_cid_active, 0);
-+ /*
-+ * Store t->mm_cid_active before loading per-mm/cpu cid.
-+ * Matches barrier in sched_mm_cid_remote_clear_old().
-+ */
-+ smp_mb();
-+ mm_cid_put(mm);
-+ t->last_mm_cid = t->mm_cid = -1;
-+}
-+
-+void sched_mm_cid_after_execve(struct task_struct *t)
-+{
-+ struct mm_struct *mm = t->mm;
-+ struct rq *rq;
-+
-+ if (!mm)
-+ return;
-+
-+ preempt_disable();
-+ rq = this_rq();
-+ scoped_guard (rq_lock_irqsave, rq) {
-+ preempt_enable_no_resched(); /* holding spinlock */
-+ WRITE_ONCE(t->mm_cid_active, 1);
-+ /*
-+ * Store t->mm_cid_active before loading per-mm/cpu cid.
-+ * Matches barrier in sched_mm_cid_remote_clear_old().
-+ */
-+ smp_mb();
-+ t->last_mm_cid = t->mm_cid = mm_cid_get(rq, mm);
-+ }
-+ rseq_set_notify_resume(t);
-+}
-+
-+void sched_mm_cid_fork(struct task_struct *t)
-+{
-+ WARN_ON_ONCE(!t->mm || t->mm_cid != -1);
-+ t->mm_cid_active = 1;
-+}
-+#endif
-diff --git a/kernel/sched/alt_debug.c b/kernel/sched/alt_debug.c
-new file mode 100644
-index 000000000000..1212a031700e
---- /dev/null
-+++ b/kernel/sched/alt_debug.c
-@@ -0,0 +1,31 @@
-+/*
-+ * kernel/sched/alt_debug.c
-+ *
-+ * Print the alt scheduler debugging details
-+ *
-+ * Author: Alfred Chen
-+ * Date : 2020
-+ */
-+#include "sched.h"
-+
-+/*
-+ * This allows printing both to /proc/sched_debug and
-+ * to the console
-+ */
-+#define SEQ_printf(m, x...) \
-+ do { \
-+ if (m) \
-+ seq_printf(m, x); \
-+ else \
-+ pr_cont(x); \
-+ } while (0)
-+
-+void proc_sched_show_task(struct task_struct *p, struct pid_namespace *ns,
-+ struct seq_file *m)
-+{
-+ SEQ_printf(m, "%s (%d, #threads: %d)\n", p->comm, task_pid_nr_ns(p, ns),
-+ get_nr_threads(p));
-+}
-+
-+void proc_sched_set_task(struct task_struct *p)
-+{}
-diff --git a/kernel/sched/alt_sched.h b/kernel/sched/alt_sched.h
-new file mode 100644
-index 000000000000..0eff5391092c
---- /dev/null
-+++ b/kernel/sched/alt_sched.h
-@@ -0,0 +1,923 @@
-+#ifndef ALT_SCHED_H
-+#define ALT_SCHED_H
-+
-+#include <linux/context_tracking.h>
-+#include <linux/profile.h>
-+#include <linux/stop_machine.h>
-+#include <linux/syscalls.h>
-+#include <linux/tick.h>
-+
-+#include <trace/events/power.h>
-+#include <trace/events/sched.h>
-+
-+#include "../workqueue_internal.h"
-+
-+#include "cpupri.h"
-+
-+#define MIN_SCHED_NORMAL_PRIO (32)
-+/*
-+ * levels: RT(0-24), reserved(25-31), NORMAL(32-63), cpu idle task(64)
-+ *
-+ * -- BMQ --
-+ * NORMAL: (lower boost range 12, NICE_WIDTH 40, higher boost range 12) / 2
-+ * -- PDS --
-+ * NORMAL: SCHED_EDGE_DELTA + ((NICE_WIDTH 40) / 2)
-+ */
-+#define SCHED_LEVELS (64 + 1)
-+
-+#define IDLE_TASK_SCHED_PRIO (SCHED_LEVELS - 1)
-+
-+#ifdef CONFIG_SCHED_DEBUG
-+# define SCHED_WARN_ON(x) WARN_ONCE(x, #x)
-+extern void resched_latency_warn(int cpu, u64 latency);
-+#else
-+# define SCHED_WARN_ON(x) ({ (void)(x), 0; })
-+static inline void resched_latency_warn(int cpu, u64 latency) {}
-+#endif
-+
-+/*
-+ * Increase resolution of nice-level calculations for 64-bit architectures.
-+ * The extra resolution improves shares distribution and load balancing of
-+ * low-weight task groups (eg. nice +19 on an autogroup), deeper taskgroup
-+ * hierarchies, especially on larger systems. This is not a user-visible change
-+ * and does not change the user-interface for setting shares/weights.
-+ *
-+ * We increase resolution only if we have enough bits to allow this increased
-+ * resolution (i.e. 64-bit). The costs for increasing resolution when 32-bit
-+ * are pretty high and the returns do not justify the increased costs.
-+ *
-+ * Really only required when CONFIG_FAIR_GROUP_SCHED=y is also set, but to
-+ * increase coverage and consistency always enable it on 64-bit platforms.
-+ */
-+#ifdef CONFIG_64BIT
-+# define NICE_0_LOAD_SHIFT (SCHED_FIXEDPOINT_SHIFT + SCHED_FIXEDPOINT_SHIFT)
-+# define scale_load(w) ((w) << SCHED_FIXEDPOINT_SHIFT)
-+# define scale_load_down(w) \
-+({ \
-+ unsigned long __w = (w); \
-+ if (__w) \
-+ __w = max(2UL, __w >> SCHED_FIXEDPOINT_SHIFT); \
-+ __w; \
-+})
-+#else
-+# define NICE_0_LOAD_SHIFT (SCHED_FIXEDPOINT_SHIFT)
-+# define scale_load(w) (w)
-+# define scale_load_down(w) (w)
-+#endif
-+
-+#ifdef CONFIG_FAIR_GROUP_SCHED
-+#define ROOT_TASK_GROUP_LOAD NICE_0_LOAD
-+
-+/*
-+ * A weight of 0 or 1 can cause arithmetics problems.
-+ * A weight of a cfs_rq is the sum of weights of which entities
-+ * are queued on this cfs_rq, so a weight of a entity should not be
-+ * too large, so as the shares value of a task group.
-+ * (The default weight is 1024 - so there's no practical
-+ * limitation from this.)
-+ */
-+#define MIN_SHARES (1UL << 1)
-+#define MAX_SHARES (1UL << 18)
-+#endif
-+
-+/*
-+ * Tunables that become constants when CONFIG_SCHED_DEBUG is off:
-+ */
-+#ifdef CONFIG_SCHED_DEBUG
-+# define const_debug __read_mostly
-+#else
-+# define const_debug const
-+#endif
-+
-+/* task_struct::on_rq states: */
-+#define TASK_ON_RQ_QUEUED 1
-+#define TASK_ON_RQ_MIGRATING 2
-+
-+static inline int task_on_rq_queued(struct task_struct *p)
-+{
-+ return p->on_rq == TASK_ON_RQ_QUEUED;
-+}
-+
-+static inline int task_on_rq_migrating(struct task_struct *p)
-+{
-+ return READ_ONCE(p->on_rq) == TASK_ON_RQ_MIGRATING;
-+}
-+
-+/* Wake flags. The first three directly map to some SD flag value */
-+#define WF_EXEC 0x02 /* Wakeup after exec; maps to SD_BALANCE_EXEC */
-+#define WF_FORK 0x04 /* Wakeup after fork; maps to SD_BALANCE_FORK */
-+#define WF_TTWU 0x08 /* Wakeup; maps to SD_BALANCE_WAKE */
-+
-+#define WF_SYNC 0x10 /* Waker goes to sleep after wakeup */
-+#define WF_MIGRATED 0x20 /* Internal use, task got migrated */
-+#define WF_CURRENT_CPU 0x40 /* Prefer to move the wakee to the current CPU. */
-+
-+#ifdef CONFIG_SMP
-+static_assert(WF_EXEC == SD_BALANCE_EXEC);
-+static_assert(WF_FORK == SD_BALANCE_FORK);
-+static_assert(WF_TTWU == SD_BALANCE_WAKE);
-+#endif
-+
-+#define SCHED_QUEUE_BITS (SCHED_LEVELS - 1)
-+
-+struct sched_queue {
-+ DECLARE_BITMAP(bitmap, SCHED_QUEUE_BITS);
-+ struct list_head heads[SCHED_LEVELS];
-+};
-+
-+struct rq;
-+struct cpuidle_state;
-+
-+struct balance_callback {
-+ struct balance_callback *next;
-+ void (*func)(struct rq *rq);
-+};
-+
-+/*
-+ * This is the main, per-CPU runqueue data structure.
-+ * This data should only be modified by the local cpu.
-+ */
-+struct rq {
-+ /* runqueue lock: */
-+ raw_spinlock_t lock;
-+
-+ struct task_struct __rcu *curr;
-+ struct task_struct *idle;
-+ struct task_struct *stop;
-+ struct task_struct *skip;
-+ struct mm_struct *prev_mm;
-+
-+ struct sched_queue queue;
-+#ifdef CONFIG_SCHED_PDS
-+ u64 time_edge;
-+#endif
-+ unsigned long prio;
-+
-+ /* switch count */
-+ u64 nr_switches;
-+
-+ atomic_t nr_iowait;
-+
-+#ifdef CONFIG_SCHED_DEBUG
-+ u64 last_seen_need_resched_ns;
-+ int ticks_without_resched;
-+#endif
-+
-+#ifdef CONFIG_MEMBARRIER
-+ int membarrier_state;
-+#endif
-+
-+#ifdef CONFIG_SMP
-+ int cpu; /* cpu of this runqueue */
-+ bool online;
-+
-+ unsigned int ttwu_pending;
-+ unsigned char nohz_idle_balance;
-+ unsigned char idle_balance;
-+
-+#ifdef CONFIG_HAVE_SCHED_AVG_IRQ
-+ struct sched_avg avg_irq;
-+#endif
-+
-+#ifdef CONFIG_SCHED_SMT
-+ int active_balance;
-+ struct cpu_stop_work active_balance_work;
-+#endif
-+ struct balance_callback *balance_callback;
-+#ifdef CONFIG_HOTPLUG_CPU
-+ struct rcuwait hotplug_wait;
-+#endif
-+ unsigned int nr_pinned;
-+
-+#endif /* CONFIG_SMP */
-+#ifdef CONFIG_IRQ_TIME_ACCOUNTING
-+ u64 prev_irq_time;
-+#endif /* CONFIG_IRQ_TIME_ACCOUNTING */
-+#ifdef CONFIG_PARAVIRT
-+ u64 prev_steal_time;
-+#endif /* CONFIG_PARAVIRT */
-+#ifdef CONFIG_PARAVIRT_TIME_ACCOUNTING
-+ u64 prev_steal_time_rq;
-+#endif /* CONFIG_PARAVIRT_TIME_ACCOUNTING */
-+
-+ /* For genenal cpu load util */
-+ s32 load_history;
-+ u64 load_block;
-+ u64 load_stamp;
-+
-+ /* calc_load related fields */
-+ unsigned long calc_load_update;
-+ long calc_load_active;
-+
-+ /* Ensure that all clocks are in the same cache line */
-+ u64 clock ____cacheline_aligned;
-+ u64 clock_task;
-+#ifdef CONFIG_SCHED_BMQ
-+ u64 last_ts_switch;
-+#endif
-+
-+ unsigned int nr_running;
-+ unsigned long nr_uninterruptible;
-+
-+#ifdef CONFIG_SCHED_HRTICK
-+#ifdef CONFIG_SMP
-+ call_single_data_t hrtick_csd;
-+#endif
-+ struct hrtimer hrtick_timer;
-+ ktime_t hrtick_time;
-+#endif
-+
-+#ifdef CONFIG_SCHEDSTATS
-+
-+ /* latency stats */
-+ struct sched_info rq_sched_info;
-+ unsigned long long rq_cpu_time;
-+ /* could above be rq->cfs_rq.exec_clock + rq->rt_rq.rt_runtime ? */
-+
-+ /* sys_sched_yield() stats */
-+ unsigned int yld_count;
-+
-+ /* schedule() stats */
-+ unsigned int sched_switch;
-+ unsigned int sched_count;
-+ unsigned int sched_goidle;
-+
-+ /* try_to_wake_up() stats */
-+ unsigned int ttwu_count;
-+ unsigned int ttwu_local;
-+#endif /* CONFIG_SCHEDSTATS */
-+
-+#ifdef CONFIG_CPU_IDLE
-+ /* Must be inspected within a rcu lock section */
-+ struct cpuidle_state *idle_state;
-+#endif
-+
-+#ifdef CONFIG_NO_HZ_COMMON
-+#ifdef CONFIG_SMP
-+ call_single_data_t nohz_csd;
-+#endif
-+ atomic_t nohz_flags;
-+#endif /* CONFIG_NO_HZ_COMMON */
-+
-+ /* Scratch cpumask to be temporarily used under rq_lock */
-+ cpumask_var_t scratch_mask;
-+};
-+
-+extern unsigned int sysctl_sched_base_slice;
-+
-+extern unsigned long rq_load_util(struct rq *rq, unsigned long max);
-+
-+extern unsigned long calc_load_update;
-+extern atomic_long_t calc_load_tasks;
-+
-+extern void calc_global_load_tick(struct rq *this_rq);
-+extern long calc_load_fold_active(struct rq *this_rq, long adjust);
-+
-+DECLARE_PER_CPU_SHARED_ALIGNED(struct rq, runqueues);
-+#define cpu_rq(cpu) (&per_cpu(runqueues, (cpu)))
-+#define this_rq() this_cpu_ptr(&runqueues)
-+#define task_rq(p) cpu_rq(task_cpu(p))
-+#define cpu_curr(cpu) (cpu_rq(cpu)->curr)
-+#define raw_rq() raw_cpu_ptr(&runqueues)
-+
-+#ifdef CONFIG_SMP
-+#if defined(CONFIG_SCHED_DEBUG) && defined(CONFIG_SYSCTL)
-+void register_sched_domain_sysctl(void);
-+void unregister_sched_domain_sysctl(void);
-+#else
-+static inline void register_sched_domain_sysctl(void)
-+{
-+}
-+static inline void unregister_sched_domain_sysctl(void)
-+{
-+}
-+#endif
-+
-+extern bool sched_smp_initialized;
-+
-+enum {
-+ ITSELF_LEVEL_SPACE_HOLDER,
-+#ifdef CONFIG_SCHED_SMT
-+ SMT_LEVEL_SPACE_HOLDER,
-+#endif
-+ COREGROUP_LEVEL_SPACE_HOLDER,
-+ CORE_LEVEL_SPACE_HOLDER,
-+ OTHER_LEVEL_SPACE_HOLDER,
-+ NR_CPU_AFFINITY_LEVELS
-+};
-+
-+DECLARE_PER_CPU_ALIGNED(cpumask_t [NR_CPU_AFFINITY_LEVELS], sched_cpu_topo_masks);
-+
-+static inline int
-+__best_mask_cpu(const cpumask_t *cpumask, const cpumask_t *mask)
-+{
-+ int cpu;
-+
-+ while ((cpu = cpumask_any_and(cpumask, mask)) >= nr_cpu_ids)
-+ mask++;
-+
-+ return cpu;
-+}
-+
-+static inline int best_mask_cpu(int cpu, const cpumask_t *mask)
-+{
-+ return __best_mask_cpu(mask, per_cpu(sched_cpu_topo_masks, cpu));
-+}
-+
-+extern void flush_smp_call_function_queue(void);
-+
-+#else /* !CONFIG_SMP */
-+static inline void flush_smp_call_function_queue(void) { }
-+#endif
-+
-+#ifndef arch_scale_freq_tick
-+static __always_inline
-+void arch_scale_freq_tick(void)
-+{
-+}
-+#endif
-+
-+#ifndef arch_scale_freq_capacity
-+static __always_inline
-+unsigned long arch_scale_freq_capacity(int cpu)
-+{
-+ return SCHED_CAPACITY_SCALE;
-+}
-+#endif
-+
-+static inline u64 __rq_clock_broken(struct rq *rq)
-+{
-+ return READ_ONCE(rq->clock);
-+}
-+
-+static inline u64 rq_clock(struct rq *rq)
-+{
-+ /*
-+ * Relax lockdep_assert_held() checking as in VRQ, call to
-+ * sched_info_xxxx() may not held rq->lock
-+ * lockdep_assert_held(&rq->lock);
-+ */
-+ return rq->clock;
-+}
-+
-+static inline u64 rq_clock_task(struct rq *rq)
-+{
-+ /*
-+ * Relax lockdep_assert_held() checking as in VRQ, call to
-+ * sched_info_xxxx() may not held rq->lock
-+ * lockdep_assert_held(&rq->lock);
-+ */
-+ return rq->clock_task;
-+}
-+
-+/*
-+ * {de,en}queue flags:
-+ *
-+ * DEQUEUE_SLEEP - task is no longer runnable
-+ * ENQUEUE_WAKEUP - task just became runnable
-+ *
-+ */
-+
-+#define DEQUEUE_SLEEP 0x01
-+
-+#define ENQUEUE_WAKEUP 0x01
-+
-+
-+/*
-+ * Below are scheduler API which using in other kernel code
-+ * It use the dummy rq_flags
-+ * ToDo : BMQ need to support these APIs for compatibility with mainline
-+ * scheduler code.
-+ */
-+struct rq_flags {
-+ unsigned long flags;
-+};
-+
-+struct rq *__task_rq_lock(struct task_struct *p, struct rq_flags *rf)
-+ __acquires(rq->lock);
-+
-+struct rq *task_rq_lock(struct task_struct *p, struct rq_flags *rf)
-+ __acquires(p->pi_lock)
-+ __acquires(rq->lock);
-+
-+static inline void __task_rq_unlock(struct rq *rq, struct rq_flags *rf)
-+ __releases(rq->lock)
-+{
-+ raw_spin_unlock(&rq->lock);
-+}
-+
-+static inline void
-+task_rq_unlock(struct rq *rq, struct task_struct *p, struct rq_flags *rf)
-+ __releases(rq->lock)
-+ __releases(p->pi_lock)
-+{
-+ raw_spin_unlock(&rq->lock);
-+ raw_spin_unlock_irqrestore(&p->pi_lock, rf->flags);
-+}
-+
-+static inline void
-+rq_lock(struct rq *rq, struct rq_flags *rf)
-+ __acquires(rq->lock)
-+{
-+ raw_spin_lock(&rq->lock);
-+}
-+
-+static inline void
-+rq_unlock(struct rq *rq, struct rq_flags *rf)
-+ __releases(rq->lock)
-+{
-+ raw_spin_unlock(&rq->lock);
-+}
-+
-+static inline void
-+rq_lock_irq(struct rq *rq, struct rq_flags *rf)
-+ __acquires(rq->lock)
-+{
-+ raw_spin_lock_irq(&rq->lock);
-+}
-+
-+static inline void
-+rq_unlock_irq(struct rq *rq, struct rq_flags *rf)
-+ __releases(rq->lock)
-+{
-+ raw_spin_unlock_irq(&rq->lock);
-+}
-+
-+static inline struct rq *
-+this_rq_lock_irq(struct rq_flags *rf)
-+ __acquires(rq->lock)
-+{
-+ struct rq *rq;
-+
-+ local_irq_disable();
-+ rq = this_rq();
-+ raw_spin_lock(&rq->lock);
-+
-+ return rq;
-+}
-+
-+static inline raw_spinlock_t *__rq_lockp(struct rq *rq)
-+{
-+ return &rq->lock;
-+}
-+
-+static inline raw_spinlock_t *rq_lockp(struct rq *rq)
-+{
-+ return __rq_lockp(rq);
-+}
-+
-+static inline void lockdep_assert_rq_held(struct rq *rq)
-+{
-+ lockdep_assert_held(__rq_lockp(rq));
-+}
-+
-+extern void raw_spin_rq_lock_nested(struct rq *rq, int subclass);
-+extern void raw_spin_rq_unlock(struct rq *rq);
-+
-+static inline void raw_spin_rq_lock(struct rq *rq)
-+{
-+ raw_spin_rq_lock_nested(rq, 0);
-+}
-+
-+static inline void raw_spin_rq_lock_irq(struct rq *rq)
-+{
-+ local_irq_disable();
-+ raw_spin_rq_lock(rq);
-+}
-+
-+static inline void raw_spin_rq_unlock_irq(struct rq *rq)
-+{
-+ raw_spin_rq_unlock(rq);
-+ local_irq_enable();
-+}
-+
-+static inline int task_current(struct rq *rq, struct task_struct *p)
-+{
-+ return rq->curr == p;
-+}
-+
-+static inline bool task_on_cpu(struct task_struct *p)
-+{
-+ return p->on_cpu;
-+}
-+
-+extern int task_running_nice(struct task_struct *p);
-+
-+extern struct static_key_false sched_schedstats;
-+
-+#ifdef CONFIG_CPU_IDLE
-+static inline void idle_set_state(struct rq *rq,
-+ struct cpuidle_state *idle_state)
-+{
-+ rq->idle_state = idle_state;
-+}
-+
-+static inline struct cpuidle_state *idle_get_state(struct rq *rq)
-+{
-+ WARN_ON(!rcu_read_lock_held());
-+ return rq->idle_state;
-+}
-+#else
-+static inline void idle_set_state(struct rq *rq,
-+ struct cpuidle_state *idle_state)
-+{
-+}
-+
-+static inline struct cpuidle_state *idle_get_state(struct rq *rq)
-+{
-+ return NULL;
-+}
-+#endif
-+
-+static inline int cpu_of(const struct rq *rq)
-+{
-+#ifdef CONFIG_SMP
-+ return rq->cpu;
-+#else
-+ return 0;
-+#endif
-+}
-+
-+#include "stats.h"
-+
-+#ifdef CONFIG_NO_HZ_COMMON
-+#define NOHZ_BALANCE_KICK_BIT 0
-+#define NOHZ_STATS_KICK_BIT 1
-+
-+#define NOHZ_BALANCE_KICK BIT(NOHZ_BALANCE_KICK_BIT)
-+#define NOHZ_STATS_KICK BIT(NOHZ_STATS_KICK_BIT)
-+
-+#define NOHZ_KICK_MASK (NOHZ_BALANCE_KICK | NOHZ_STATS_KICK)
-+
-+#define nohz_flags(cpu) (&cpu_rq(cpu)->nohz_flags)
-+
-+/* TODO: needed?
-+extern void nohz_balance_exit_idle(struct rq *rq);
-+#else
-+static inline void nohz_balance_exit_idle(struct rq *rq) { }
-+*/
-+#endif
-+
-+#ifdef CONFIG_IRQ_TIME_ACCOUNTING
-+struct irqtime {
-+ u64 total;
-+ u64 tick_delta;
-+ u64 irq_start_time;
-+ struct u64_stats_sync sync;
-+};
-+
-+DECLARE_PER_CPU(struct irqtime, cpu_irqtime);
-+
-+/*
-+ * Returns the irqtime minus the softirq time computed by ksoftirqd.
-+ * Otherwise ksoftirqd's sum_exec_runtime is substracted its own runtime
-+ * and never move forward.
-+ */
-+static inline u64 irq_time_read(int cpu)
-+{
-+ struct irqtime *irqtime = &per_cpu(cpu_irqtime, cpu);
-+ unsigned int seq;
-+ u64 total;
-+
-+ do {
-+ seq = __u64_stats_fetch_begin(&irqtime->sync);
-+ total = irqtime->total;
-+ } while (__u64_stats_fetch_retry(&irqtime->sync, seq));
-+
-+ return total;
-+}
-+#endif /* CONFIG_IRQ_TIME_ACCOUNTING */
-+
-+#ifdef CONFIG_CPU_FREQ
-+DECLARE_PER_CPU(struct update_util_data __rcu *, cpufreq_update_util_data);
-+#endif /* CONFIG_CPU_FREQ */
-+
-+#ifdef CONFIG_NO_HZ_FULL
-+extern int __init sched_tick_offload_init(void);
-+#else
-+static inline int sched_tick_offload_init(void) { return 0; }
-+#endif
-+
-+#ifdef arch_scale_freq_capacity
-+#ifndef arch_scale_freq_invariant
-+#define arch_scale_freq_invariant() (true)
-+#endif
-+#else /* arch_scale_freq_capacity */
-+#define arch_scale_freq_invariant() (false)
-+#endif
-+
-+extern void schedule_idle(void);
-+
-+#define cap_scale(v, s) ((v)*(s) >> SCHED_CAPACITY_SHIFT)
-+
-+/*
-+ * !! For sched_setattr_nocheck() (kernel) only !!
-+ *
-+ * This is actually gross. :(
-+ *
-+ * It is used to make schedutil kworker(s) higher priority than SCHED_DEADLINE
-+ * tasks, but still be able to sleep. We need this on platforms that cannot
-+ * atomically change clock frequency. Remove once fast switching will be
-+ * available on such platforms.
-+ *
-+ * SUGOV stands for SchedUtil GOVernor.
-+ */
-+#define SCHED_FLAG_SUGOV 0x10000000
-+
-+#ifdef CONFIG_MEMBARRIER
-+/*
-+ * The scheduler provides memory barriers required by membarrier between:
-+ * - prior user-space memory accesses and store to rq->membarrier_state,
-+ * - store to rq->membarrier_state and following user-space memory accesses.
-+ * In the same way it provides those guarantees around store to rq->curr.
-+ */
-+static inline void membarrier_switch_mm(struct rq *rq,
-+ struct mm_struct *prev_mm,
-+ struct mm_struct *next_mm)
-+{
-+ int membarrier_state;
-+
-+ if (prev_mm == next_mm)
-+ return;
-+
-+ membarrier_state = atomic_read(&next_mm->membarrier_state);
-+ if (READ_ONCE(rq->membarrier_state) == membarrier_state)
-+ return;
-+
-+ WRITE_ONCE(rq->membarrier_state, membarrier_state);
-+}
-+#else
-+static inline void membarrier_switch_mm(struct rq *rq,
-+ struct mm_struct *prev_mm,
-+ struct mm_struct *next_mm)
-+{
-+}
-+#endif
-+
-+#ifdef CONFIG_NUMA
-+extern int sched_numa_find_closest(const struct cpumask *cpus, int cpu);
-+#else
-+static inline int sched_numa_find_closest(const struct cpumask *cpus, int cpu)
-+{
-+ return nr_cpu_ids;
-+}
-+#endif
-+
-+extern void swake_up_all_locked(struct swait_queue_head *q);
-+extern void __prepare_to_swait(struct swait_queue_head *q, struct swait_queue *wait);
-+
-+extern int try_to_wake_up(struct task_struct *tsk, unsigned int state, int wake_flags);
-+
-+#ifdef CONFIG_PREEMPT_DYNAMIC
-+extern int preempt_dynamic_mode;
-+extern int sched_dynamic_mode(const char *str);
-+extern void sched_dynamic_update(int mode);
-+#endif
-+
-+static inline void nohz_run_idle_balance(int cpu) { }
-+
-+static inline
-+unsigned long uclamp_rq_util_with(struct rq *rq, unsigned long util,
-+ struct task_struct *p)
-+{
-+ return util;
-+}
-+
-+static inline bool uclamp_rq_is_capped(struct rq *rq) { return false; }
-+
-+#ifdef CONFIG_SCHED_MM_CID
-+
-+#define SCHED_MM_CID_PERIOD_NS (100ULL * 1000000) /* 100ms */
-+#define MM_CID_SCAN_DELAY 100 /* 100ms */
-+
-+extern raw_spinlock_t cid_lock;
-+extern int use_cid_lock;
-+
-+extern void sched_mm_cid_migrate_from(struct task_struct *t);
-+extern void sched_mm_cid_migrate_to(struct rq *dst_rq, struct task_struct *t, int src_cpu);
-+extern void task_tick_mm_cid(struct rq *rq, struct task_struct *curr);
-+extern void init_sched_mm_cid(struct task_struct *t);
-+
-+static inline void __mm_cid_put(struct mm_struct *mm, int cid)
-+{
-+ if (cid < 0)
-+ return;
-+ cpumask_clear_cpu(cid, mm_cidmask(mm));
-+}
-+
-+/*
-+ * The per-mm/cpu cid can have the MM_CID_LAZY_PUT flag set or transition to
-+ * the MM_CID_UNSET state without holding the rq lock, but the rq lock needs to
-+ * be held to transition to other states.
-+ *
-+ * State transitions synchronized with cmpxchg or try_cmpxchg need to be
-+ * consistent across cpus, which prevents use of this_cpu_cmpxchg.
-+ */
-+static inline void mm_cid_put_lazy(struct task_struct *t)
-+{
-+ struct mm_struct *mm = t->mm;
-+ struct mm_cid __percpu *pcpu_cid = mm->pcpu_cid;
-+ int cid;
-+
-+ lockdep_assert_irqs_disabled();
-+ cid = __this_cpu_read(pcpu_cid->cid);
-+ if (!mm_cid_is_lazy_put(cid) ||
-+ !try_cmpxchg(&this_cpu_ptr(pcpu_cid)->cid, &cid, MM_CID_UNSET))
-+ return;
-+ __mm_cid_put(mm, mm_cid_clear_lazy_put(cid));
-+}
-+
-+static inline int mm_cid_pcpu_unset(struct mm_struct *mm)
-+{
-+ struct mm_cid __percpu *pcpu_cid = mm->pcpu_cid;
-+ int cid, res;
-+
-+ lockdep_assert_irqs_disabled();
-+ cid = __this_cpu_read(pcpu_cid->cid);
-+ for (;;) {
-+ if (mm_cid_is_unset(cid))
-+ return MM_CID_UNSET;
-+ /*
-+ * Attempt transition from valid or lazy-put to unset.
-+ */
-+ res = cmpxchg(&this_cpu_ptr(pcpu_cid)->cid, cid, MM_CID_UNSET);
-+ if (res == cid)
-+ break;
-+ cid = res;
-+ }
-+ return cid;
-+}
-+
-+static inline void mm_cid_put(struct mm_struct *mm)
-+{
-+ int cid;
-+
-+ lockdep_assert_irqs_disabled();
-+ cid = mm_cid_pcpu_unset(mm);
-+ if (cid == MM_CID_UNSET)
-+ return;
-+ __mm_cid_put(mm, mm_cid_clear_lazy_put(cid));
-+}
-+
-+static inline int __mm_cid_try_get(struct mm_struct *mm)
-+{
-+ struct cpumask *cpumask;
-+ int cid;
-+
-+ cpumask = mm_cidmask(mm);
-+ /*
-+ * Retry finding first zero bit if the mask is temporarily
-+ * filled. This only happens during concurrent remote-clear
-+ * which owns a cid without holding a rq lock.
-+ */
-+ for (;;) {
-+ cid = cpumask_first_zero(cpumask);
-+ if (cid < nr_cpu_ids)
-+ break;
-+ cpu_relax();
-+ }
-+ if (cpumask_test_and_set_cpu(cid, cpumask))
-+ return -1;
-+ return cid;
-+}
-+
-+/*
-+ * Save a snapshot of the current runqueue time of this cpu
-+ * with the per-cpu cid value, allowing to estimate how recently it was used.
-+ */
-+static inline void mm_cid_snapshot_time(struct rq *rq, struct mm_struct *mm)
-+{
-+ struct mm_cid *pcpu_cid = per_cpu_ptr(mm->pcpu_cid, cpu_of(rq));
-+
-+ lockdep_assert_rq_held(rq);
-+ WRITE_ONCE(pcpu_cid->time, rq->clock);
-+}
-+
-+static inline int __mm_cid_get(struct rq *rq, struct mm_struct *mm)
-+{
-+ int cid;
-+
-+ /*
-+ * All allocations (even those using the cid_lock) are lock-free. If
-+ * use_cid_lock is set, hold the cid_lock to perform cid allocation to
-+ * guarantee forward progress.
-+ */
-+ if (!READ_ONCE(use_cid_lock)) {
-+ cid = __mm_cid_try_get(mm);
-+ if (cid >= 0)
-+ goto end;
-+ raw_spin_lock(&cid_lock);
-+ } else {
-+ raw_spin_lock(&cid_lock);
-+ cid = __mm_cid_try_get(mm);
-+ if (cid >= 0)
-+ goto unlock;
-+ }
-+
-+ /*
-+ * cid concurrently allocated. Retry while forcing following
-+ * allocations to use the cid_lock to ensure forward progress.
-+ */
-+ WRITE_ONCE(use_cid_lock, 1);
-+ /*
-+ * Set use_cid_lock before allocation. Only care about program order
-+ * because this is only required for forward progress.
-+ */
-+ barrier();
-+ /*
-+ * Retry until it succeeds. It is guaranteed to eventually succeed once
-+ * all newcoming allocations observe the use_cid_lock flag set.
-+ */
-+ do {
-+ cid = __mm_cid_try_get(mm);
-+ cpu_relax();
-+ } while (cid < 0);
-+ /*
-+ * Allocate before clearing use_cid_lock. Only care about
-+ * program order because this is for forward progress.
-+ */
-+ barrier();
-+ WRITE_ONCE(use_cid_lock, 0);
-+unlock:
-+ raw_spin_unlock(&cid_lock);
-+end:
-+ mm_cid_snapshot_time(rq, mm);
-+ return cid;
-+}
-+
-+static inline int mm_cid_get(struct rq *rq, struct mm_struct *mm)
-+{
-+ struct mm_cid __percpu *pcpu_cid = mm->pcpu_cid;
-+ struct cpumask *cpumask;
-+ int cid;
-+
-+ lockdep_assert_rq_held(rq);
-+ cpumask = mm_cidmask(mm);
-+ cid = __this_cpu_read(pcpu_cid->cid);
-+ if (mm_cid_is_valid(cid)) {
-+ mm_cid_snapshot_time(rq, mm);
-+ return cid;
-+ }
-+ if (mm_cid_is_lazy_put(cid)) {
-+ if (try_cmpxchg(&this_cpu_ptr(pcpu_cid)->cid, &cid, MM_CID_UNSET))
-+ __mm_cid_put(mm, mm_cid_clear_lazy_put(cid));
-+ }
-+ cid = __mm_cid_get(rq, mm);
-+ __this_cpu_write(pcpu_cid->cid, cid);
-+ return cid;
-+}
-+
-+static inline void switch_mm_cid(struct rq *rq,
-+ struct task_struct *prev,
-+ struct task_struct *next)
-+{
-+ /*
-+ * Provide a memory barrier between rq->curr store and load of
-+ * {prev,next}->mm->pcpu_cid[cpu] on rq->curr->mm transition.
-+ *
-+ * Should be adapted if context_switch() is modified.
-+ */
-+ if (!next->mm) { // to kernel
-+ /*
-+ * user -> kernel transition does not guarantee a barrier, but
-+ * we can use the fact that it performs an atomic operation in
-+ * mmgrab().
-+ */
-+ if (prev->mm) // from user
-+ smp_mb__after_mmgrab();
-+ /*
-+ * kernel -> kernel transition does not change rq->curr->mm
-+ * state. It stays NULL.
-+ */
-+ } else { // to user
-+ /*
-+ * kernel -> user transition does not provide a barrier
-+ * between rq->curr store and load of {prev,next}->mm->pcpu_cid[cpu].
-+ * Provide it here.
-+ */
-+ if (!prev->mm) // from kernel
-+ smp_mb();
-+ /*
-+ * user -> user transition guarantees a memory barrier through
-+ * switch_mm() when current->mm changes. If current->mm is
-+ * unchanged, no barrier is needed.
-+ */
-+ }
-+ if (prev->mm_cid_active) {
-+ mm_cid_snapshot_time(rq, prev->mm);
-+ mm_cid_put_lazy(prev);
-+ prev->mm_cid = -1;
-+ }
-+ if (next->mm_cid_active)
-+ next->last_mm_cid = next->mm_cid = mm_cid_get(rq, next->mm);
-+}
-+
-+#else
-+static inline void switch_mm_cid(struct rq *rq, struct task_struct *prev, struct task_struct *next) { }
-+static inline void sched_mm_cid_migrate_from(struct task_struct *t) { }
-+static inline void sched_mm_cid_migrate_to(struct rq *dst_rq, struct task_struct *t, int src_cpu) { }
-+static inline void task_tick_mm_cid(struct rq *rq, struct task_struct *curr) { }
-+static inline void init_sched_mm_cid(struct task_struct *t) { }
-+#endif
-+
-+#endif /* ALT_SCHED_H */
-diff --git a/kernel/sched/bmq.h b/kernel/sched/bmq.h
-new file mode 100644
-index 000000000000..840009dc1e8d
---- /dev/null
-+++ b/kernel/sched/bmq.h
-@@ -0,0 +1,99 @@
-+#define ALT_SCHED_NAME "BMQ"
-+
-+/*
-+ * BMQ only routines
-+ */
-+#define rq_switch_time(rq) ((rq)->clock - (rq)->last_ts_switch)
-+#define boost_threshold(p) (sysctl_sched_base_slice >> ((14 - (p)->boost_prio) / 2))
-+
-+static inline void boost_task(struct task_struct *p)
-+{
-+ int limit;
-+
-+ switch (p->policy) {
-+ case SCHED_NORMAL:
-+ limit = -MAX_PRIORITY_ADJ;
-+ break;
-+ case SCHED_BATCH:
-+ case SCHED_IDLE:
-+ limit = 0;
-+ break;
-+ default:
-+ return;
-+ }
-+
-+ if (p->boost_prio > limit)
-+ p->boost_prio--;
-+}
-+
-+static inline void deboost_task(struct task_struct *p)
-+{
-+ if (p->boost_prio < MAX_PRIORITY_ADJ)
-+ p->boost_prio++;
-+}
-+
-+/*
-+ * Common interfaces
-+ */
-+static inline void sched_timeslice_imp(const int timeslice_ms) {}
-+
-+static inline int
-+task_sched_prio_normal(const struct task_struct *p, const struct rq *rq)
-+{
-+ return p->prio + p->boost_prio - MAX_RT_PRIO;
-+}
-+
-+static inline int task_sched_prio(const struct task_struct *p)
-+{
-+ return (p->prio < MAX_RT_PRIO)? (p->prio >> 2) :
-+ MIN_SCHED_NORMAL_PRIO + (p->prio + p->boost_prio - MAX_RT_PRIO) / 2;
-+}
-+
-+static inline int
-+task_sched_prio_idx(const struct task_struct *p, const struct rq *rq)
-+{
-+ return task_sched_prio(p);
-+}
-+
-+static inline int sched_prio2idx(int prio, struct rq *rq)
-+{
-+ return prio;
-+}
-+
-+static inline int sched_idx2prio(int idx, struct rq *rq)
-+{
-+ return idx;
-+}
-+
-+inline int task_running_nice(struct task_struct *p)
-+{
-+ return (p->prio + p->boost_prio > DEFAULT_PRIO + MAX_PRIORITY_ADJ);
-+}
-+
-+static inline void sched_update_rq_clock(struct rq *rq) {}
-+
-+static inline void sched_task_renew(struct task_struct *p, const struct rq *rq)
-+{
-+ if (rq_switch_time(rq) > sysctl_sched_base_slice)
-+ deboost_task(p);
-+}
-+
-+static inline void sched_task_sanity_check(struct task_struct *p, struct rq *rq) {}
-+static void sched_task_fork(struct task_struct *p, struct rq *rq) {}
-+
-+static inline void do_sched_yield_type_1(struct task_struct *p, struct rq *rq)
-+{
-+ p->boost_prio = MAX_PRIORITY_ADJ;
-+}
-+
-+static inline void sched_task_ttwu(struct task_struct *p)
-+{
-+ if(this_rq()->clock_task - p->last_ran > sysctl_sched_base_slice)
-+ boost_task(p);
-+}
-+
-+static inline void sched_task_deactivate(struct task_struct *p, struct rq *rq)
-+{
-+ if (rq_switch_time(rq) < boost_threshold(p))
-+ boost_task(p);
-+}
-diff --git a/kernel/sched/build_policy.c b/kernel/sched/build_policy.c
-index d9dc9ab3773f..71a25540d65e 100644
---- a/kernel/sched/build_policy.c
-+++ b/kernel/sched/build_policy.c
-@@ -42,13 +42,19 @@
-
- #include "idle.c"
-
-+#ifndef CONFIG_SCHED_ALT
- #include "rt.c"
-+#endif
-
- #ifdef CONFIG_SMP
-+#ifndef CONFIG_SCHED_ALT
- # include "cpudeadline.c"
-+#endif
- # include "pelt.c"
- #endif
-
- #include "cputime.c"
--#include "deadline.c"
-
-+#ifndef CONFIG_SCHED_ALT
-+#include "deadline.c"
-+#endif
-diff --git a/kernel/sched/build_utility.c b/kernel/sched/build_utility.c
-index 80a3df49ab47..bc17d5a6fc41 100644
---- a/kernel/sched/build_utility.c
-+++ b/kernel/sched/build_utility.c
-@@ -84,7 +84,9 @@
-
- #ifdef CONFIG_SMP
- # include "cpupri.c"
-+#ifndef CONFIG_SCHED_ALT
- # include "stop_task.c"
-+#endif
- # include "topology.c"
- #endif
-
-diff --git a/kernel/sched/cpufreq_schedutil.c b/kernel/sched/cpufreq_schedutil.c
-index 5888176354e2..6ab2534714f6 100644
---- a/kernel/sched/cpufreq_schedutil.c
-+++ b/kernel/sched/cpufreq_schedutil.c
-@@ -155,12 +155,18 @@ static unsigned int get_next_freq(struct sugov_policy *sg_policy,
-
- static void sugov_get_util(struct sugov_cpu *sg_cpu)
- {
-- unsigned long util = cpu_util_cfs_boost(sg_cpu->cpu);
- struct rq *rq = cpu_rq(sg_cpu->cpu);
-
-+#ifndef CONFIG_SCHED_ALT
-+ unsigned long util = cpu_util_cfs_boost(sg_cpu->cpu);
-+
- sg_cpu->bw_dl = cpu_bw_dl(rq);
- sg_cpu->util = effective_cpu_util(sg_cpu->cpu, util,
- FREQUENCY_UTIL, NULL);
-+#else
-+ sg_cpu->bw_dl = 0;
-+ sg_cpu->util = rq_load_util(rq, arch_scale_cpu_capacity(sg_cpu->cpu));
-+#endif /* CONFIG_SCHED_ALT */
- }
-
- /**
-@@ -306,8 +312,10 @@ static inline bool sugov_cpu_is_busy(struct sugov_cpu *sg_cpu) { return false; }
- */
- static inline void ignore_dl_rate_limit(struct sugov_cpu *sg_cpu)
- {
-+#ifndef CONFIG_SCHED_ALT
- if (cpu_bw_dl(cpu_rq(sg_cpu->cpu)) > sg_cpu->bw_dl)
- sg_cpu->sg_policy->limits_changed = true;
-+#endif
- }
-
- static inline bool sugov_update_single_common(struct sugov_cpu *sg_cpu,
-@@ -636,6 +644,7 @@ static int sugov_kthread_create(struct sugov_policy *sg_policy)
- }
-
- ret = sched_setattr_nocheck(thread, &attr);
-+
- if (ret) {
- kthread_stop(thread);
- pr_warn("%s: failed to set SCHED_DEADLINE\n", __func__);
-diff --git a/kernel/sched/cputime.c b/kernel/sched/cputime.c
-index af7952f12e6c..6461cbbb734d 100644
---- a/kernel/sched/cputime.c
-+++ b/kernel/sched/cputime.c
-@@ -126,7 +126,7 @@ void account_user_time(struct task_struct *p, u64 cputime)
- p->utime += cputime;
- account_group_user_time(p, cputime);
-
-- index = (task_nice(p) > 0) ? CPUTIME_NICE : CPUTIME_USER;
-+ index = task_running_nice(p) ? CPUTIME_NICE : CPUTIME_USER;
-
- /* Add user time to cpustat. */
- task_group_account_field(p, index, cputime);
-@@ -150,7 +150,7 @@ void account_guest_time(struct task_struct *p, u64 cputime)
- p->gtime += cputime;
-
- /* Add guest time to cpustat. */
-- if (task_nice(p) > 0) {
-+ if (task_running_nice(p)) {
- task_group_account_field(p, CPUTIME_NICE, cputime);
- cpustat[CPUTIME_GUEST_NICE] += cputime;
- } else {
-@@ -288,7 +288,7 @@ static inline u64 account_other_time(u64 max)
- #ifdef CONFIG_64BIT
- static inline u64 read_sum_exec_runtime(struct task_struct *t)
- {
-- return t->se.sum_exec_runtime;
-+ return tsk_seruntime(t);
- }
- #else
- static u64 read_sum_exec_runtime(struct task_struct *t)
-@@ -298,7 +298,7 @@ static u64 read_sum_exec_runtime(struct task_struct *t)
- struct rq *rq;
-
- rq = task_rq_lock(t, &rf);
-- ns = t->se.sum_exec_runtime;
-+ ns = tsk_seruntime(t);
- task_rq_unlock(rq, t, &rf);
-
- return ns;
-@@ -630,7 +630,7 @@ void cputime_adjust(struct task_cputime *curr, struct prev_cputime *prev,
- void task_cputime_adjusted(struct task_struct *p, u64 *ut, u64 *st)
- {
- struct task_cputime cputime = {
-- .sum_exec_runtime = p->se.sum_exec_runtime,
-+ .sum_exec_runtime = tsk_seruntime(p),
- };
-
- if (task_cputime(p, &cputime.utime, &cputime.stime))
-diff --git a/kernel/sched/debug.c b/kernel/sched/debug.c
-index 4580a450700e..8c8fd7da4617 100644
---- a/kernel/sched/debug.c
-+++ b/kernel/sched/debug.c
-@@ -7,6 +7,7 @@
- * Copyright(C) 2007, Red Hat, Inc., Ingo Molnar
- */
-
-+#ifndef CONFIG_SCHED_ALT
- /*
- * This allows printing both to /sys/kernel/debug/sched/debug and
- * to the console
-@@ -215,6 +216,7 @@ static const struct file_operations sched_scaling_fops = {
- };
-
- #endif /* SMP */
-+#endif /* !CONFIG_SCHED_ALT */
-
- #ifdef CONFIG_PREEMPT_DYNAMIC
-
-@@ -278,6 +280,7 @@ static const struct file_operations sched_dynamic_fops = {
-
- #endif /* CONFIG_PREEMPT_DYNAMIC */
-
-+#ifndef CONFIG_SCHED_ALT
- __read_mostly bool sched_debug_verbose;
-
- #ifdef CONFIG_SMP
-@@ -332,6 +335,7 @@ static const struct file_operations sched_debug_fops = {
- .llseek = seq_lseek,
- .release = seq_release,
- };
-+#endif /* !CONFIG_SCHED_ALT */
-
- static struct dentry *debugfs_sched;
-
-@@ -341,14 +345,17 @@ static __init int sched_init_debug(void)
-
- debugfs_sched = debugfs_create_dir("sched", NULL);
-
-+#ifndef CONFIG_SCHED_ALT
- debugfs_create_file("features", 0644, debugfs_sched, NULL, &sched_feat_fops);
- debugfs_create_file_unsafe("verbose", 0644, debugfs_sched, &sched_debug_verbose, &sched_verbose_fops);
-+#endif /* !CONFIG_SCHED_ALT */
- #ifdef CONFIG_PREEMPT_DYNAMIC
- debugfs_create_file("preempt", 0644, debugfs_sched, NULL, &sched_dynamic_fops);
- #endif
-
- debugfs_create_u32("base_slice_ns", 0644, debugfs_sched, &sysctl_sched_base_slice);
-
-+#ifndef CONFIG_SCHED_ALT
- debugfs_create_u32("latency_warn_ms", 0644, debugfs_sched, &sysctl_resched_latency_warn_ms);
- debugfs_create_u32("latency_warn_once", 0644, debugfs_sched, &sysctl_resched_latency_warn_once);
-
-@@ -373,11 +380,13 @@ static __init int sched_init_debug(void)
- #endif
-
- debugfs_create_file("debug", 0444, debugfs_sched, NULL, &sched_debug_fops);
-+#endif /* !CONFIG_SCHED_ALT */
-
- return 0;
- }
- late_initcall(sched_init_debug);
-
-+#ifndef CONFIG_SCHED_ALT
- #ifdef CONFIG_SMP
-
- static cpumask_var_t sd_sysctl_cpus;
-@@ -1106,6 +1115,7 @@ void proc_sched_set_task(struct task_struct *p)
- memset(&p->stats, 0, sizeof(p->stats));
- #endif
- }
-+#endif /* !CONFIG_SCHED_ALT */
-
- void resched_latency_warn(int cpu, u64 latency)
- {
-diff --git a/kernel/sched/idle.c b/kernel/sched/idle.c
-index 565f8374ddbb..67d51e05a8ac 100644
---- a/kernel/sched/idle.c
-+++ b/kernel/sched/idle.c
-@@ -380,6 +380,7 @@ void cpu_startup_entry(enum cpuhp_state state)
- do_idle();
- }
-
-+#ifndef CONFIG_SCHED_ALT
- /*
- * idle-task scheduling class.
- */
-@@ -501,3 +502,4 @@ DEFINE_SCHED_CLASS(idle) = {
- .switched_to = switched_to_idle,
- .update_curr = update_curr_idle,
- };
-+#endif
-diff --git a/kernel/sched/pds.h b/kernel/sched/pds.h
-new file mode 100644
-index 000000000000..c35dfb909f23
---- /dev/null
-+++ b/kernel/sched/pds.h
-@@ -0,0 +1,141 @@
-+#define ALT_SCHED_NAME "PDS"
-+
-+static const u64 RT_MASK = ((1ULL << MIN_SCHED_NORMAL_PRIO) - 1);
-+
-+#define SCHED_NORMAL_PRIO_NUM (32)
-+#define SCHED_EDGE_DELTA (SCHED_NORMAL_PRIO_NUM - NICE_WIDTH / 2)
-+
-+/* PDS assume NORMAL_PRIO_NUM is power of 2 */
-+#define SCHED_NORMAL_PRIO_MOD(x) ((x) & (SCHED_NORMAL_PRIO_NUM - 1))
-+
-+/* default time slice 4ms -> shift 22, 2 time slice slots -> shift 23 */
-+static __read_mostly int sched_timeslice_shift = 23;
-+
-+/*
-+ * Common interfaces
-+ */
-+static inline void sched_timeslice_imp(const int timeslice_ms)
-+{
-+ if (2 == timeslice_ms)
-+ sched_timeslice_shift = 22;
-+}
-+
-+static inline int
-+task_sched_prio_normal(const struct task_struct *p, const struct rq *rq)
-+{
-+ s64 delta = p->deadline - rq->time_edge + SCHED_EDGE_DELTA;
-+
-+#ifdef ALT_SCHED_DEBUG
-+ if (WARN_ONCE(delta > NORMAL_PRIO_NUM - 1,
-+ "pds: task_sched_prio_normal() delta %lld\n", delta))
-+ return SCHED_NORMAL_PRIO_NUM - 1;
-+#endif
-+
-+ return max(0LL, delta);
-+}
-+
-+static inline int task_sched_prio(const struct task_struct *p)
-+{
-+ return (p->prio < MIN_NORMAL_PRIO) ? (p->prio >> 2) :
-+ MIN_SCHED_NORMAL_PRIO + task_sched_prio_normal(p, task_rq(p));
-+}
-+
-+static inline int
-+task_sched_prio_idx(const struct task_struct *p, const struct rq *rq)
-+{
-+ u64 idx;
-+
-+ if (p->prio < MIN_NORMAL_PRIO)
-+ return p->prio >> 2;
-+
-+ idx = max(p->deadline + SCHED_EDGE_DELTA, rq->time_edge);
-+ /*printk(KERN_INFO "sched: task_sched_prio_idx edge:%llu, deadline=%llu idx=%llu\n", rq->time_edge, p->deadline, idx);*/
-+ return MIN_SCHED_NORMAL_PRIO + SCHED_NORMAL_PRIO_MOD(idx);
-+}
-+
-+static inline int sched_prio2idx(int sched_prio, struct rq *rq)
-+{
-+ return (IDLE_TASK_SCHED_PRIO == sched_prio || sched_prio < MIN_SCHED_NORMAL_PRIO) ?
-+ sched_prio :
-+ MIN_SCHED_NORMAL_PRIO + SCHED_NORMAL_PRIO_MOD(sched_prio + rq->time_edge);
-+}
-+
-+static inline int sched_idx2prio(int sched_idx, struct rq *rq)
-+{
-+ return (sched_idx < MIN_SCHED_NORMAL_PRIO) ?
-+ sched_idx :
-+ MIN_SCHED_NORMAL_PRIO + SCHED_NORMAL_PRIO_MOD(sched_idx - rq->time_edge);
-+}
-+
-+int task_running_nice(struct task_struct *p)
-+{
-+ return (p->prio > DEFAULT_PRIO);
-+}
-+
-+static inline void sched_update_rq_clock(struct rq *rq)
-+{
-+ struct list_head head;
-+ u64 old = rq->time_edge;
-+ u64 now = rq->clock >> sched_timeslice_shift;
-+ u64 prio, delta;
-+ DECLARE_BITMAP(normal, SCHED_QUEUE_BITS);
-+
-+ if (now == old)
-+ return;
-+
-+ rq->time_edge = now;
-+ delta = min_t(u64, SCHED_NORMAL_PRIO_NUM, now - old);
-+ INIT_LIST_HEAD(&head);
-+
-+ prio = MIN_SCHED_NORMAL_PRIO;
-+ for_each_set_bit_from(prio, rq->queue.bitmap, MIN_SCHED_NORMAL_PRIO + delta)
-+ list_splice_tail_init(rq->queue.heads + MIN_SCHED_NORMAL_PRIO +
-+ SCHED_NORMAL_PRIO_MOD(prio + old), &head);
-+
-+ bitmap_shift_right(normal, rq->queue.bitmap, delta, SCHED_QUEUE_BITS);
-+ if (!list_empty(&head)) {
-+ struct task_struct *p;
-+ u64 idx = MIN_SCHED_NORMAL_PRIO + SCHED_NORMAL_PRIO_MOD(now);
-+
-+ list_for_each_entry(p, &head, sq_node)
-+ p->sq_idx = idx;
-+
-+ list_splice(&head, rq->queue.heads + idx);
-+ set_bit(MIN_SCHED_NORMAL_PRIO, normal);
-+ }
-+ bitmap_replace(rq->queue.bitmap, normal, rq->queue.bitmap,
-+ (const unsigned long *)&RT_MASK, SCHED_QUEUE_BITS);
-+
-+ if (rq->prio < MIN_SCHED_NORMAL_PRIO || IDLE_TASK_SCHED_PRIO == rq->prio)
-+ return;
-+
-+ rq->prio = (rq->prio < MIN_SCHED_NORMAL_PRIO + delta) ?
-+ MIN_SCHED_NORMAL_PRIO : rq->prio - delta;
-+}
-+
-+static inline void sched_task_renew(struct task_struct *p, const struct rq *rq)
-+{
-+ if (p->prio >= MIN_NORMAL_PRIO)
-+ p->deadline = rq->time_edge + (p->static_prio - (MAX_PRIO - NICE_WIDTH)) / 2;
-+}
-+
-+static inline void sched_task_sanity_check(struct task_struct *p, struct rq *rq)
-+{
-+ u64 max_dl = rq->time_edge + NICE_WIDTH / 2 - 1;
-+ if (unlikely(p->deadline > max_dl))
-+ p->deadline = max_dl;
-+}
-+
-+static void sched_task_fork(struct task_struct *p, struct rq *rq)
-+{
-+ sched_task_renew(p, rq);
-+}
-+
-+static inline void do_sched_yield_type_1(struct task_struct *p, struct rq *rq)
-+{
-+ p->time_slice = sysctl_sched_base_slice;
-+ sched_task_renew(p, rq);
-+}
-+
-+static inline void sched_task_ttwu(struct task_struct *p) {}
-+static inline void sched_task_deactivate(struct task_struct *p, struct rq *rq) {}
-diff --git a/kernel/sched/pelt.c b/kernel/sched/pelt.c
-index 63b6cf898220..9ca10ece4d3a 100644
---- a/kernel/sched/pelt.c
-+++ b/kernel/sched/pelt.c
-@@ -266,6 +266,7 @@ ___update_load_avg(struct sched_avg *sa, unsigned long load)
- WRITE_ONCE(sa->util_avg, sa->util_sum / divider);
- }
-
-+#ifndef CONFIG_SCHED_ALT
- /*
- * sched_entity:
- *
-@@ -383,8 +384,9 @@ int update_dl_rq_load_avg(u64 now, struct rq *rq, int running)
-
- return 0;
- }
-+#endif
-
--#ifdef CONFIG_SCHED_THERMAL_PRESSURE
-+#if defined(CONFIG_SCHED_THERMAL_PRESSURE) && !defined(CONFIG_SCHED_ALT)
- /*
- * thermal:
- *
-diff --git a/kernel/sched/pelt.h b/kernel/sched/pelt.h
-index 3a0e0dc28721..e8a7d84aa5a5 100644
---- a/kernel/sched/pelt.h
-+++ b/kernel/sched/pelt.h
-@@ -1,13 +1,15 @@
- #ifdef CONFIG_SMP
- #include "sched-pelt.h"
-
-+#ifndef CONFIG_SCHED_ALT
- int __update_load_avg_blocked_se(u64 now, struct sched_entity *se);
- int __update_load_avg_se(u64 now, struct cfs_rq *cfs_rq, struct sched_entity *se);
- int __update_load_avg_cfs_rq(u64 now, struct cfs_rq *cfs_rq);
- int update_rt_rq_load_avg(u64 now, struct rq *rq, int running);
- int update_dl_rq_load_avg(u64 now, struct rq *rq, int running);
-+#endif
-
--#ifdef CONFIG_SCHED_THERMAL_PRESSURE
-+#if defined(CONFIG_SCHED_THERMAL_PRESSURE) && !defined(CONFIG_SCHED_ALT)
- int update_thermal_load_avg(u64 now, struct rq *rq, u64 capacity);
-
- static inline u64 thermal_load_avg(struct rq *rq)
-@@ -44,6 +46,7 @@ static inline u32 get_pelt_divider(struct sched_avg *avg)
- return PELT_MIN_DIVIDER + avg->period_contrib;
- }
-
-+#ifndef CONFIG_SCHED_ALT
- static inline void cfs_se_util_change(struct sched_avg *avg)
- {
- unsigned int enqueued;
-@@ -180,9 +183,11 @@ static inline u64 cfs_rq_clock_pelt(struct cfs_rq *cfs_rq)
- return rq_clock_pelt(rq_of(cfs_rq));
- }
- #endif
-+#endif /* CONFIG_SCHED_ALT */
-
- #else
-
-+#ifndef CONFIG_SCHED_ALT
- static inline int
- update_cfs_rq_load_avg(u64 now, struct cfs_rq *cfs_rq)
- {
-@@ -200,6 +205,7 @@ update_dl_rq_load_avg(u64 now, struct rq *rq, int running)
- {
- return 0;
- }
-+#endif
-
- static inline int
- update_thermal_load_avg(u64 now, struct rq *rq, u64 capacity)
-diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h
-index 2e5a95486a42..0c86131a2a64 100644
---- a/kernel/sched/sched.h
-+++ b/kernel/sched/sched.h
-@@ -5,6 +5,10 @@
- #ifndef _KERNEL_SCHED_SCHED_H
- #define _KERNEL_SCHED_SCHED_H
-
-+#ifdef CONFIG_SCHED_ALT
-+#include "alt_sched.h"
-+#else
-+
- #include <linux/sched/affinity.h>
- #include <linux/sched/autogroup.h>
- #include <linux/sched/cpufreq.h>
-@@ -3509,4 +3513,9 @@ static inline void init_sched_mm_cid(struct task_struct *t) { }
- extern u64 avg_vruntime(struct cfs_rq *cfs_rq);
- extern int entity_eligible(struct cfs_rq *cfs_rq, struct sched_entity *se);
-
-+static inline int task_running_nice(struct task_struct *p)
-+{
-+ return (task_nice(p) > 0);
-+}
-+#endif /* !CONFIG_SCHED_ALT */
- #endif /* _KERNEL_SCHED_SCHED_H */
-diff --git a/kernel/sched/stats.c b/kernel/sched/stats.c
-index 857f837f52cb..5486c63e4790 100644
---- a/kernel/sched/stats.c
-+++ b/kernel/sched/stats.c
-@@ -125,8 +125,10 @@ static int show_schedstat(struct seq_file *seq, void *v)
- } else {
- struct rq *rq;
- #ifdef CONFIG_SMP
-+#ifndef CONFIG_SCHED_ALT
- struct sched_domain *sd;
- int dcount = 0;
-+#endif
- #endif
- cpu = (unsigned long)(v - 2);
- rq = cpu_rq(cpu);
-@@ -143,6 +145,7 @@ static int show_schedstat(struct seq_file *seq, void *v)
- seq_printf(seq, "\n");
-
- #ifdef CONFIG_SMP
-+#ifndef CONFIG_SCHED_ALT
- /* domain-specific stats */
- rcu_read_lock();
- for_each_domain(cpu, sd) {
-@@ -171,6 +174,7 @@ static int show_schedstat(struct seq_file *seq, void *v)
- sd->ttwu_move_balance);
- }
- rcu_read_unlock();
-+#endif
- #endif
- }
- return 0;
-diff --git a/kernel/sched/stats.h b/kernel/sched/stats.h
-index 38f3698f5e5b..b9d597394316 100644
---- a/kernel/sched/stats.h
-+++ b/kernel/sched/stats.h
-@@ -89,6 +89,7 @@ static inline void rq_sched_info_depart (struct rq *rq, unsigned long long delt
-
- #endif /* CONFIG_SCHEDSTATS */
-
-+#ifndef CONFIG_SCHED_ALT
- #ifdef CONFIG_FAIR_GROUP_SCHED
- struct sched_entity_stats {
- struct sched_entity se;
-@@ -105,6 +106,7 @@ __schedstats_from_se(struct sched_entity *se)
- #endif
- return &task_of(se)->stats;
- }
-+#endif /* CONFIG_SCHED_ALT */
-
- #ifdef CONFIG_PSI
- void psi_task_change(struct task_struct *task, int clear, int set);
-diff --git a/kernel/sched/topology.c b/kernel/sched/topology.c
-index 10d1391e7416..120933a5b206 100644
---- a/kernel/sched/topology.c
-+++ b/kernel/sched/topology.c
-@@ -3,6 +3,7 @@
- * Scheduler topology setup/handling methods
- */
-
-+#ifndef CONFIG_SCHED_ALT
- #include <linux/bsearch.h>
-
- DEFINE_MUTEX(sched_domains_mutex);
-@@ -1445,8 +1446,10 @@ static void asym_cpu_capacity_scan(void)
- */
-
- static int default_relax_domain_level = -1;
-+#endif /* CONFIG_SCHED_ALT */
- int sched_domain_level_max;
-
-+#ifndef CONFIG_SCHED_ALT
- static int __init setup_relax_domain_level(char *str)
- {
- if (kstrtoint(str, 0, &default_relax_domain_level))
-@@ -1680,6 +1683,7 @@ sd_init(struct sched_domain_topology_level *tl,
-
- return sd;
- }
-+#endif /* CONFIG_SCHED_ALT */
-
- /*
- * Topology list, bottom-up.
-@@ -1716,6 +1720,7 @@ void __init set_sched_topology(struct sched_domain_topology_level *tl)
- sched_domain_topology_saved = NULL;
- }
-
-+#ifndef CONFIG_SCHED_ALT
- #ifdef CONFIG_NUMA
-
- static const struct cpumask *sd_numa_mask(int cpu)
-@@ -2793,3 +2798,20 @@ void partition_sched_domains(int ndoms_new, cpumask_var_t doms_new[],
- partition_sched_domains_locked(ndoms_new, doms_new, dattr_new);
- mutex_unlock(&sched_domains_mutex);
- }
-+#else /* CONFIG_SCHED_ALT */
-+void partition_sched_domains(int ndoms_new, cpumask_var_t doms_new[],
-+ struct sched_domain_attr *dattr_new)
-+{}
-+
-+#ifdef CONFIG_NUMA
-+int sched_numa_find_closest(const struct cpumask *cpus, int cpu)
-+{
-+ return best_mask_cpu(cpu, cpus);
-+}
-+
-+int sched_numa_find_nth_cpu(const struct cpumask *cpus, int cpu, int node)
-+{
-+ return cpumask_nth(cpu, cpus);
-+}
-+#endif /* CONFIG_NUMA */
-+#endif
-diff --git a/kernel/sysctl.c b/kernel/sysctl.c
-index 157f7ce2942d..63083a9a2935 100644
---- a/kernel/sysctl.c
-+++ b/kernel/sysctl.c
-@@ -92,6 +92,10 @@ EXPORT_SYMBOL_GPL(sysctl_long_vals);
-
- /* Constants used for minimum and maximum */
-
-+#ifdef CONFIG_SCHED_ALT
-+extern int sched_yield_type;
-+#endif
-+
- #ifdef CONFIG_PERF_EVENTS
- static const int six_hundred_forty_kb = 640 * 1024;
- #endif
-@@ -1912,6 +1916,17 @@ static struct ctl_table kern_table[] = {
- .proc_handler = proc_dointvec,
- },
- #endif
-+#ifdef CONFIG_SCHED_ALT
-+ {
-+ .procname = "yield_type",
-+ .data = &sched_yield_type,
-+ .maxlen = sizeof (int),
-+ .mode = 0644,
-+ .proc_handler = &proc_dointvec_minmax,
-+ .extra1 = SYSCTL_ZERO,
-+ .extra2 = SYSCTL_TWO,
-+ },
-+#endif
- #if defined(CONFIG_S390) && defined(CONFIG_SMP)
- {
- .procname = "spin_retry",
-diff --git a/kernel/time/hrtimer.c b/kernel/time/hrtimer.c
-index 760793998cdd..3198ed8ab40a 100644
---- a/kernel/time/hrtimer.c
-+++ b/kernel/time/hrtimer.c
-@@ -2091,8 +2091,10 @@ long hrtimer_nanosleep(ktime_t rqtp, const enum hrtimer_mode mode,
- int ret = 0;
- u64 slack;
-
-+#ifndef CONFIG_SCHED_ALT
- slack = current->timer_slack_ns;
-- if (rt_task(current))
-+ if (dl_task(current) || rt_task(current))
-+#endif
- slack = 0;
-
- hrtimer_init_sleeper_on_stack(&t, clockid, mode);
-diff --git a/kernel/time/posix-cpu-timers.c b/kernel/time/posix-cpu-timers.c
-index e9c6f9d0e42c..43ee0a94abdd 100644
---- a/kernel/time/posix-cpu-timers.c
-+++ b/kernel/time/posix-cpu-timers.c
-@@ -223,7 +223,7 @@ static void task_sample_cputime(struct task_struct *p, u64 *samples)
- u64 stime, utime;
-
- task_cputime(p, &utime, &stime);
-- store_samples(samples, stime, utime, p->se.sum_exec_runtime);
-+ store_samples(samples, stime, utime, tsk_seruntime(p));
- }
-
- static void proc_sample_cputime_atomic(struct task_cputime_atomic *at,
-@@ -867,6 +867,7 @@ static void collect_posix_cputimers(struct posix_cputimers *pct, u64 *samples,
- }
- }
-
-+#ifndef CONFIG_SCHED_ALT
- static inline void check_dl_overrun(struct task_struct *tsk)
- {
- if (tsk->dl.dl_overrun) {
-@@ -874,6 +875,7 @@ static inline void check_dl_overrun(struct task_struct *tsk)
- send_signal_locked(SIGXCPU, SEND_SIG_PRIV, tsk, PIDTYPE_TGID);
- }
- }
-+#endif
-
- static bool check_rlimit(u64 time, u64 limit, int signo, bool rt, bool hard)
- {
-@@ -901,8 +903,10 @@ static void check_thread_timers(struct task_struct *tsk,
- u64 samples[CPUCLOCK_MAX];
- unsigned long soft;
-
-+#ifndef CONFIG_SCHED_ALT
- if (dl_task(tsk))
- check_dl_overrun(tsk);
-+#endif
-
- if (expiry_cache_is_inactive(pct))
- return;
-@@ -916,7 +920,7 @@ static void check_thread_timers(struct task_struct *tsk,
- soft = task_rlimit(tsk, RLIMIT_RTTIME);
- if (soft != RLIM_INFINITY) {
- /* Task RT timeout is accounted in jiffies. RTTIME is usec */
-- unsigned long rttime = tsk->rt.timeout * (USEC_PER_SEC / HZ);
-+ unsigned long rttime = tsk_rttimeout(tsk) * (USEC_PER_SEC / HZ);
- unsigned long hard = task_rlimit_max(tsk, RLIMIT_RTTIME);
-
- /* At the hard limit, send SIGKILL. No further action. */
-@@ -1152,8 +1156,10 @@ static inline bool fastpath_timer_check(struct task_struct *tsk)
- return true;
- }
-
-+#ifndef CONFIG_SCHED_ALT
- if (dl_task(tsk) && tsk->dl.dl_overrun)
- return true;
-+#endif
-
- return false;
- }
-diff --git a/kernel/trace/trace_selftest.c b/kernel/trace/trace_selftest.c
-index 529590499b1f..d04bb99b4f0e 100644
---- a/kernel/trace/trace_selftest.c
-+++ b/kernel/trace/trace_selftest.c
-@@ -1155,10 +1155,15 @@ static int trace_wakeup_test_thread(void *data)
- {
- /* Make this a -deadline thread */
- static const struct sched_attr attr = {
-+#ifdef CONFIG_SCHED_ALT
-+ /* No deadline on BMQ/PDS, use RR */
-+ .sched_policy = SCHED_RR,
-+#else
- .sched_policy = SCHED_DEADLINE,
- .sched_runtime = 100000ULL,
- .sched_deadline = 10000000ULL,
- .sched_period = 10000000ULL
-+#endif
- };
- struct wakeup_test_data *x = data;
-
-diff --git a/kernel/workqueue.c b/kernel/workqueue.c
-index 2989b57e154a..7313d9f5585f 100644
---- a/kernel/workqueue.c
-+++ b/kernel/workqueue.c
-@@ -1114,6 +1114,7 @@ static bool kick_pool(struct worker_pool *pool)
-
- p = worker->task;
-
-+#ifndef CONFIG_SCHED_ALT
- #ifdef CONFIG_SMP
- /*
- * Idle @worker is about to execute @work and waking up provides an
-@@ -1139,6 +1140,8 @@ static bool kick_pool(struct worker_pool *pool)
- get_work_pwq(work)->stats[PWQ_STAT_REPATRIATED]++;
- }
- #endif
-+#endif /* !CONFIG_SCHED_ALT */
-+
- wake_up_process(p);
- return true;
- }
-@@ -1263,7 +1266,11 @@ void wq_worker_running(struct task_struct *task)
- * CPU intensive auto-detection cares about how long a work item hogged
- * CPU without sleeping. Reset the starting timestamp on wakeup.
- */
-+#ifdef CONFIG_SCHED_ALT
-+ worker->current_at = worker->task->sched_time;
-+#else
- worker->current_at = worker->task->se.sum_exec_runtime;
-+#endif
-
- WRITE_ONCE(worker->sleeping, 0);
- }
-@@ -1348,7 +1355,11 @@ void wq_worker_tick(struct task_struct *task)
- * We probably want to make this prettier in the future.
- */
- if ((worker->flags & WORKER_NOT_RUNNING) || READ_ONCE(worker->sleeping) ||
-+#ifdef CONFIG_SCHED_ALT
-+ worker->task->sched_time - worker->current_at <
-+#else
- worker->task->se.sum_exec_runtime - worker->current_at <
-+#endif
- wq_cpu_intensive_thresh_us * NSEC_PER_USEC)
- return;
-
-@@ -2559,7 +2570,11 @@ __acquires(&pool->lock)
- worker->current_work = work;
- worker->current_func = work->func;
- worker->current_pwq = pwq;
-+#ifdef CONFIG_SCHED_ALT
-+ worker->current_at = worker->task->sched_time;
-+#else
- worker->current_at = worker->task->se.sum_exec_runtime;
-+#endif
- work_data = *work_data_bits(work);
- worker->current_color = get_work_color(work_data);
-
-From 58a9cabf63a961c5fc501cf1ade12e1dc6029642 Mon Sep 17 00:00:00 2001
-From: Steven Barrett <steven@liquorix.net>
-Date: Sun, 28 Jan 2024 10:22:43 -0600
-Subject: [PATCH] sched/alt: [Sync] 9feae65845f7 sched/topology: Introduce
- sched_numa_hop_mask()
-
----
- kernel/sched/topology.c | 6 ++++++
- 1 file changed, 6 insertions(+)
-
-diff --git a/kernel/sched/topology.c b/kernel/sched/topology.c
-index 120933a5b206..dc717683342e 100644
---- a/kernel/sched/topology.c
-+++ b/kernel/sched/topology.c
-@@ -2813,5 +2813,11 @@ int sched_numa_find_nth_cpu(const struct cpumask *cpus, int cpu, int node)
- {
- return cpumask_nth(cpu, cpus);
- }
-+
-+const struct cpumask *sched_numa_hop_mask(unsigned int node, unsigned int hops)
-+{
-+ return ERR_PTR(-EOPNOTSUPP);
-+}
-+EXPORT_SYMBOL_GPL(sched_numa_hop_mask);
- #endif /* CONFIG_NUMA */
- #endif
diff --git a/SOURCES/tkg-unprivileged-CLONE_NEWUSER.patch b/SOURCES/tkg-unprivileged-CLONE_NEWUSER.patch
index c12229d..dc18c8e 100644
--- a/SOURCES/tkg-unprivileged-CLONE_NEWUSER.patch
+++ b/SOURCES/tkg-unprivileged-CLONE_NEWUSER.patch
@@ -66,9 +66,9 @@ diff --git a/kernel/fork.c b/kernel/fork.c
index 08969f5aa38d59..ff601cb7a1fae0 100644
--- a/kernel/fork.c
+++ b/kernel/fork.c
-@@ -100,6 +100,10 @@
- #include <linux/user_events.h>
+@@ -102,6 +102,10 @@
#include <linux/iommu.h>
+ #include <linux/rseq.h>
+#ifdef CONFIG_USER_NS
+#include <linux/user_namespace.h>
diff --git a/SOURCES/tkg.patch b/SOURCES/tkg.patch
index ab9f76f..aeffc95 100644
--- a/SOURCES/tkg.patch
+++ b/SOURCES/tkg.patch
@@ -613,7 +613,7 @@ index 5f1ae07d724b88..97cda629c9e909 100644
#else /* CONFIG_HUGETLB_PAGE */
/* If huge pages are not used, group by MAX_ORDER_NR_PAGES */
--#define pageblock_order MAX_ORDER
+-#define pageblock_order MAX_PAGE_ORDER
+#define pageblock_order PAGE_ALLOC_COSTLY_ORDER
#endif /* CONFIG_HUGETLB_PAGE */
@@ -710,16 +710,16 @@ diff --git a/Makefile b/Makefile
index 3f6628780eb2..35a5ae1ede42 100644
--- a/Makefile
+++ b/Makefile
-@@ -1069,6 +1069,9 @@ endif
- # perform bounds checking.
- KBUILD_CFLAGS += $(call cc-option, -fstrict-flex-arrays=3)
-
+@@ -1002,6 +1002,9 @@
+ KBUILD_CFLAGS-$(CONFIG_CC_NO_STRINGOP_OVERFLOW) += $(call cc-option, -Wno-stringop-overflow)
+ KBUILD_CFLAGS-$(CONFIG_CC_STRINGOP_OVERFLOW) += $(call cc-option, -Wstringop-overflow)
+
+# disable GCC vectorization on trees
+KBUILD_CFLAGS += $(call cc-option, -fno-tree-vectorize)
+
# disable invalid "can't wrap" optimizations for signed / pointers
KBUILD_CFLAGS += -fno-strict-overflow
-
+
--
2.39.1
diff --git a/SOURCES/valve-gamescope-framerate-control-fixups.patch b/SOURCES/valve-gamescope-framerate-control-fixups.patch
index 425ee09..40053c3 100644
--- a/SOURCES/valve-gamescope-framerate-control-fixups.patch
+++ b/SOURCES/valve-gamescope-framerate-control-fixups.patch
@@ -32,368 +32,6 @@ index 7dab01803..81672738a 100644
--
2.43.0
-From 38f2149c7e97f379210c658c21124d547e7b503a Mon Sep 17 00:00:00 2001
-From: Simon Ser <contact@emersion.fr>
-Date: Tue, 30 Aug 2022 17:29:43 +0000
-Subject: [PATCH] drm: introduce DRM_CAP_ATOMIC_ASYNC_PAGE_FLIP
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-This new kernel capability indicates whether async page-flips are
-supported via the atomic uAPI. DRM clients can use it to check
-for support before feeding DRM_MODE_PAGE_FLIP_ASYNC to the kernel.
-
-Make it clear that DRM_CAP_ASYNC_PAGE_FLIP is for legacy uAPI only.
-
-Signed-off-by: Simon Ser <contact@emersion.fr>
-Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
-Cc: Joshua Ashton <joshua@froggi.es>
-Cc: Melissa Wen <mwen@igalia.com>
-Cc: Alex Deucher <alexander.deucher@amd.com>
-Cc: Harry Wentland <hwentlan@amd.com>
-Cc: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com>
-Cc: André Almeida <andrealmeid@igalia.com>
-Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
-Signed-off-by: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
-Link: https://lore.kernel.org/r/20220830172851.269402-6-contact@emersion.fr
----
- drivers/gpu/drm/drm_ioctl.c | 5 +++++
- include/uapi/drm/drm.h | 10 +++++++++-
- 2 files changed, 14 insertions(+), 1 deletion(-)
-
-diff --git a/drivers/gpu/drm/drm_ioctl.c b/drivers/gpu/drm/drm_ioctl.c
-index ca2a6e6101dc8..5b1591e2b46c9 100644
---- a/drivers/gpu/drm/drm_ioctl.c
-+++ b/drivers/gpu/drm/drm_ioctl.c
-@@ -302,6 +302,11 @@ static int drm_getcap(struct drm_device *dev, void *data, struct drm_file *file_
- case DRM_CAP_CRTC_IN_VBLANK_EVENT:
- req->value = 1;
- break;
-+ case DRM_CAP_ATOMIC_ASYNC_PAGE_FLIP:
-+ req->value = drm_core_check_feature(dev, DRIVER_ATOMIC) &&
-+ dev->mode_config.async_page_flip &&
-+ !dev->mode_config.atomic_async_page_flip_not_supported;
-+ break;
- default:
- return -EINVAL;
- }
-diff --git a/include/uapi/drm/drm.h b/include/uapi/drm/drm.h
-index 642808520d922..b1962628ecda9 100644
---- a/include/uapi/drm/drm.h
-+++ b/include/uapi/drm/drm.h
-@@ -706,7 +706,8 @@ struct drm_gem_open {
- /**
- * DRM_CAP_ASYNC_PAGE_FLIP
- *
-- * If set to 1, the driver supports &DRM_MODE_PAGE_FLIP_ASYNC.
-+ * If set to 1, the driver supports &DRM_MODE_PAGE_FLIP_ASYNC for legacy
-+ * page-flips.
- */
- #define DRM_CAP_ASYNC_PAGE_FLIP 0x7
- /**
-@@ -773,6 +773,13 @@
- * :ref:`drm_sync_objects`.
- */
- #define DRM_CAP_SYNCOBJ_TIMELINE 0x14
-+/**
-+ * DRM_CAP_ATOMIC_ASYNC_PAGE_FLIP
-+ *
-+ * If set to 1, the driver supports &DRM_MODE_PAGE_FLIP_ASYNC for atomic
-+ * commits.
-+ */
-+#define DRM_CAP_ATOMIC_ASYNC_PAGE_FLIP 0x15
-
- /* DRM_IOCTL_GET_CAP ioctl argument type */
- struct drm_get_cap {
---
-GitLab
-
-From f6de551227de6244119f9f2bea3ae81543ee7c4f Mon Sep 17 00:00:00 2001
-From: Simon Ser <contact@emersion.fr>
-Date: Tue, 30 Aug 2022 17:29:35 +0000
-Subject: [PATCH] drm: allow DRM_MODE_PAGE_FLIP_ASYNC for atomic commits
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-If the driver supports it, allow user-space to supply the
-DRM_MODE_PAGE_FLIP_ASYNC flag to request an async page-flip.
-Set drm_crtc_state.async_flip accordingly.
-
-Document that drivers will reject atomic commits if an async
-flip isn't possible. This allows user-space to fall back to
-something else. For instance, Xorg falls back to a blit.
-Another option is to wait as close to the next vblank as
-possible before performing the page-flip to reduce latency.
-
-v2: document new uAPI
-
-Signed-off-by: Simon Ser <contact@emersion.fr>
-Co-developed-by: André Almeida <andrealmeid@igalia.com>
-Signed-off-by: André Almeida <andrealmeid@igalia.com>
-Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
-Cc: Joshua Ashton <joshua@froggi.es>
-Cc: Melissa Wen <mwen@igalia.com>
-Cc: Alex Deucher <alexander.deucher@amd.com>
-Cc: Harry Wentland <hwentlan@amd.com>
-Cc: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com>
-Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
-Signed-off-by: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
-Link: https://lore.kernel.org/r/20220830172851.269402-5-contact@emersion.fr
----
- drivers/gpu/drm/drm_atomic_uapi.c | 28 +++++++++++++++++++++++++---
- include/uapi/drm/drm_mode.h | 4 ++++
- 2 files changed, 29 insertions(+), 3 deletions(-)
-
-diff --git a/drivers/gpu/drm/drm_atomic_uapi.c b/drivers/gpu/drm/drm_atomic_uapi.c
-index c06d0639d552d..945761968428e 100644
---- a/drivers/gpu/drm/drm_atomic_uapi.c
-+++ b/drivers/gpu/drm/drm_atomic_uapi.c
-@@ -1282,6 +1282,18 @@ static void complete_signaling(struct drm_device *dev,
- kfree(fence_state);
- }
-
-+static void
-+set_async_flip(struct drm_atomic_state *state)
-+{
-+ struct drm_crtc *crtc;
-+ struct drm_crtc_state *crtc_state;
-+ int i;
-+
-+ for_each_new_crtc_in_state(state, crtc, crtc_state, i) {
-+ crtc_state->async_flip = true;
-+ }
-+}
-+
- int drm_mode_atomic_ioctl(struct drm_device *dev,
- void *data, struct drm_file *file_priv)
- {
-@@ -1322,9 +1334,16 @@ int drm_mode_atomic_ioctl(struct drm_device *dev,
- }
-
- if (arg->flags & DRM_MODE_PAGE_FLIP_ASYNC) {
-- drm_dbg_atomic(dev,
-- "commit failed: invalid flag DRM_MODE_PAGE_FLIP_ASYNC\n");
-- return -EINVAL;
-+ if (!dev->mode_config.async_page_flip) {
-+ drm_dbg_atomic(dev,
-+ "commit failed: DRM_MODE_PAGE_FLIP_ASYNC not supported\n");
-+ return -EINVAL;
-+ }
-+ if (dev->mode_config.atomic_async_page_flip_not_supported) {
-+ drm_dbg_atomic(dev,
-+ "commit failed: DRM_MODE_PAGE_FLIP_ASYNC not supported with atomic\n");
-+ return -EINVAL;
-+ }
- }
-
- /* can't test and expect an event at the same time. */
-@@ -1422,6 +1441,9 @@ int drm_mode_atomic_ioctl(struct drm_device *dev,
- if (ret)
- goto out;
-
-+ if (arg->flags & DRM_MODE_PAGE_FLIP_ASYNC)
-+ set_async_flip(state);
-+
- if (arg->flags & DRM_MODE_ATOMIC_TEST_ONLY) {
- ret = drm_atomic_check_only(state);
- } else if (arg->flags & DRM_MODE_ATOMIC_NONBLOCK) {
-diff --git a/include/uapi/drm/drm_mode.h b/include/uapi/drm/drm_mode.h
-index 46becedf5b2fc..f1422c8387224 100644
---- a/include/uapi/drm/drm_mode.h
-+++ b/include/uapi/drm/drm_mode.h
-@@ -949,6 +949,10 @@ struct hdr_output_metadata {
- * Request that the page-flip is performed as soon as possible, ie. with no
- * delay due to waiting for vblank. This may cause tearing to be visible on
- * the screen.
-+ *
-+ * When used with atomic uAPI, the driver will return an error if the hardware
-+ * doesn't support performing an asynchronous page-flip for this update.
-+ * User-space should handle this, e.g. by falling back to a regular page-flip.
- */
- #define DRM_MODE_PAGE_FLIP_ASYNC 0x02
- #define DRM_MODE_PAGE_FLIP_TARGET_ABSOLUTE 0x4
---
-GitLab
-
-From 9d923e79d060d8c7218c8229c65c964b7f04e864 Mon Sep 17 00:00:00 2001
-From: Simon Ser <contact@emersion.fr>
-Date: Tue, 30 Aug 2022 17:29:26 +0000
-Subject: [PATCH] drm: introduce
- drm_mode_config.atomic_async_page_flip_not_supported
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-This new field indicates whether the driver has the necessary logic
-to support async page-flips via the atomic uAPI. This is leveraged by
-the next commit to allow user-space to use this functionality.
-
-All atomic drivers setting drm_mode_config.async_page_flip are updated
-to also set drm_mode_config.atomic_async_page_flip_not_supported. We
-will gradually check and update these drivers to properly handle
-drm_crtc_state.async_flip in their atomic logic.
-
-The goal of this negative flag is the same as
-fb_modifiers_not_supported: we want to eventually get rid of all
-drivers missing atomic support for async flips. New drivers should not
-set this flag, instead they should support atomic async flips (if
-they support async flips at all). IOW, we don't want more drivers
-with async flip support for legacy but not atomic.
-
-v2: only set the flag on atomic drivers (remove it on amdgpu DCE and
-on radeon)
-
-Signed-off-by: Simon Ser <contact@emersion.fr>
-Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
-Cc: Joshua Ashton <joshua@froggi.es>
-Cc: Melissa Wen <mwen@igalia.com>
-Cc: Alex Deucher <alexander.deucher@amd.com>
-Cc: Harry Wentland <hwentlan@amd.com>
-Cc: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com>
-Cc: André Almeida <andrealmeid@igalia.com>
-Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
-Signed-off-by: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
-Link: https://lore.kernel.org/r/20220830172851.269402-4-contact@emersion.fr
----
- drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 1 +
- drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c | 1 +
- drivers/gpu/drm/i915/display/intel_display_driver.c | 1 +
- drivers/gpu/drm/nouveau/nouveau_display.c | 1 +
- drivers/gpu/drm/vc4/vc4_kms.c | 1 +
- include/drm/drm_mode_config.h | 11 +++++++++++
- 6 files changed, 16 insertions(+)
-
-diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
-index 81672738a..05c404fcc 100644
---- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
-+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
-@@ -3998,6 +3998,7 @@ static int amdgpu_dm_mode_config_init(struct amdgpu_device *adev)
- adev_to_drm(adev)->mode_config.prefer_shadow = 1;
- /* indicates support for immediate flip */
- adev_to_drm(adev)->mode_config.async_page_flip = true;
-+ adev_to_drm(adev)->mode_config.atomic_async_page_flip_not_supported = true;
-
- state = kzalloc(sizeof(*state), GFP_KERNEL);
- if (!state)
-diff --git a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c
-index fa0f9a93d..301b222c4 100644
---- a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c
-+++ b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c
-@@ -639,6 +639,7 @@ static int atmel_hlcdc_dc_modeset_init(struct drm_device *dev)
- dev->mode_config.max_height = dc->desc->max_height;
- dev->mode_config.funcs = &mode_config_funcs;
- dev->mode_config.async_page_flip = true;
-+ dev->mode_config.atomic_async_page_flip_not_supported = true;
-
- return 0;
- }
-diff --git a/drivers/gpu/drm/i915/display/intel_display_driver.c b/drivers/gpu/drm/i915/display/intel_display_driver.c
-index 8f144d4d3..f290c5c2e 100644
---- a/drivers/gpu/drm/i915/display/intel_display_driver.c
-+++ b/drivers/gpu/drm/i915/display/intel_display_driver.c
-@@ -126,6 +126,7 @@
- mode_config->helper_private = &intel_mode_config_funcs;
-
- mode_config->async_page_flip = HAS_ASYNC_FLIPS(i915) && !i915->params.disable_async_page_flip;
-+ mode_config->atomic_async_page_flip_not_supported = true;
-
- /*
- * Maximum framebuffer dimensions, chosen to match
-diff --git a/drivers/gpu/drm/nouveau/nouveau_display.c b/drivers/gpu/drm/nouveau/nouveau_display.c
-index 99977e5fe..540895dab 100644
---- a/drivers/gpu/drm/nouveau/nouveau_display.c
-+++ b/drivers/gpu/drm/nouveau/nouveau_display.c
-@@ -720,6 +720,7 @@ nouveau_display_create(struct drm_device *dev)
- dev->mode_config.async_page_flip = false;
- else
- dev->mode_config.async_page_flip = true;
-+ dev->mode_config.atomic_async_page_flip_not_supported = true;
-
- drm_kms_helper_poll_init(dev);
- drm_kms_helper_poll_disable(dev);
-diff --git a/drivers/gpu/drm/vc4/vc4_kms.c b/drivers/gpu/drm/vc4/vc4_kms.c
-index 5495f2a94..5b6b311e7 100644
---- a/drivers/gpu/drm/vc4/vc4_kms.c
-+++ b/drivers/gpu/drm/vc4/vc4_kms.c
-@@ -1068,6 +1068,7 @@ int vc4_kms_load(struct drm_device *dev)
- dev->mode_config.helper_private = &vc4_mode_config_helpers;
- dev->mode_config.preferred_depth = 24;
- dev->mode_config.async_page_flip = true;
-+ dev->mode_config.atomic_async_page_flip_not_supported = true;
- dev->mode_config.normalize_zpos = true;
-
- ret = vc4_ctm_obj_init(vc4);
-diff --git a/include/drm/drm_mode_config.h b/include/drm/drm_mode_config.h
-index 973119a91..47b005671 100644
---- a/include/drm/drm_mode_config.h
-+++ b/include/drm/drm_mode_config.h
-@@ -918,6 +918,17 @@ struct drm_mode_config {
- */
- bool async_page_flip;
-
-+ /**
-+ * @atomic_async_page_flip_not_supported:
-+ *
-+ * If true, the driver does not support async page-flips with the
-+ * atomic uAPI. This is only used by old drivers which haven't yet
-+ * accomodated for &drm_crtc_state.async_flip in their atomic logic,
-+ * even if they have &drm_mode_config.async_page_flip set to true.
-+ * New drivers shall not set this flag.
-+ */
-+ bool atomic_async_page_flip_not_supported;
-+
- /**
- * @fb_modifiers_not_supported:
- *
---
-2.43.0
-
-From 24ac301d6208f1135644fe32514994799e79a6a0 Mon Sep 17 00:00:00 2001
-From: Simon Ser <contact@emersion.fr>
-Date: Tue, 30 Aug 2022 17:29:52 +0000
-Subject: [PATCH] amd/display: indicate support for atomic async page-flips on
- DC
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-amdgpu_dm_commit_planes() already sets the flip_immediate flag for
-async page-flips. This flag is used to set the UNP_FLIP_CONTROL
-register. Thus, no additional change is required to handle async
-page-flips with the atomic uAPI.
-
-v2: make it clear this commit is about DC and not only DCN
-
-Signed-off-by: Simon Ser <contact@emersion.fr>
-Cc: Joshua Ashton <joshua@froggi.es>
-Cc: Melissa Wen <mwen@igalia.com>
-Cc: Alex Deucher <alexander.deucher@amd.com>
-Cc: Harry Wentland <hwentlan@amd.com>
-Cc: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com>
-Cc: André Almeida <andrealmeid@igalia.com>
-Signed-off-by: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
-Link: https://lore.kernel.org/r/20220830172851.269402-7-contact@emersion.fr
----
- drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 1 -
- 1 file changed, 1 deletion(-)
-
-diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
-index 27a1e3a0046c9..a003e796aa183 100644
---- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
-+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
-@@ -3980,7 +3980,6 @@ static int amdgpu_dm_mode_config_init(struct amdgpu_device *adev)
- adev_to_drm(adev)->mode_config.prefer_shadow = 1;
- /* indicates support for immediate flip */
- adev_to_drm(adev)->mode_config.async_page_flip = true;
-- adev_to_drm(adev)->mode_config.atomic_async_page_flip_not_supported = true;
-
- state = kzalloc(sizeof(*state), GFP_KERNEL);
- if (!state)
---
-GitLab
-
From 32993fef83542e3bea66ed3ceec4944b3ae9d4f1 Mon Sep 17 00:00:00 2001
From: Joshua Ashton <joshua@froggi.es>
Date: Mon, 14 Nov 2022 19:52:30 +0000
@@ -439,164 +77,6 @@ index 81672738a..8eb14c74a 100644
--
2.43.0
-From 0af59135c2a9e05af87bc82f492fab13fff52fbd Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Andr=C3=A9=20Almeida?= <andrealmeid@igalia.com>
-Date: Wed, 22 Nov 2023 13:19:38 -0300
-Subject: [PATCH] drm: Refuse to async flip with atomic prop changes
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Given that prop changes may lead to modesetting, which would defeat the
-fast path of the async flip, refuse any atomic prop change for async
-flips in atomic API. The only exception is the framebuffer ID to flip
-to. Currently the only plane type supported is the primary one.
-
-Signed-off-by: André Almeida <andrealmeid@igalia.com>
-Reviewed-by: Simon Ser <contact@emersion.fr>
----
- drivers/gpu/drm/drm_atomic_uapi.c | 52 +++++++++++++++++++++++++++--
- drivers/gpu/drm/drm_crtc_internal.h | 2 +-
- drivers/gpu/drm/drm_mode_object.c | 2 +-
- 3 files changed, 51 insertions(+), 5 deletions(-)
-
-diff --git a/drivers/gpu/drm/drm_atomic_uapi.c b/drivers/gpu/drm/drm_atomic_uapi.c
-index 37caa6c33e22b3..86083184ac6bb2 100644
---- a/drivers/gpu/drm/drm_atomic_uapi.c
-+++ b/drivers/gpu/drm/drm_atomic_uapi.c
-@@ -964,13 +964,28 @@ int drm_atomic_connector_commit_dpms(struct drm_atomic_state *state,
- return ret;
- }
-
-+static int drm_atomic_check_prop_changes(int ret, uint64_t old_val, uint64_t prop_value,
-+ struct drm_property *prop)
-+{
-+ if (ret != 0 || old_val != prop_value) {
-+ drm_dbg_atomic(prop->dev,
-+ "[PROP:%d:%s] No prop can be changed during async flip\n",
-+ prop->base.id, prop->name);
-+ return -EINVAL;
-+ }
-+
-+ return 0;
-+}
-+
- int drm_atomic_set_property(struct drm_atomic_state *state,
- struct drm_file *file_priv,
- struct drm_mode_object *obj,
- struct drm_property *prop,
-- uint64_t prop_value)
-+ uint64_t prop_value,
-+ bool async_flip)
- {
- struct drm_mode_object *ref;
-+ uint64_t old_val;
- int ret;
-
- if (!drm_property_change_valid_get(prop, prop_value, &ref))
-@@ -987,6 +1002,13 @@ int drm_atomic_set_property(struct drm_atomic_state *state,
- break;
- }
-
-+ if (async_flip) {
-+ ret = drm_atomic_connector_get_property(connector, connector_state,
-+ prop, &old_val);
-+ ret = drm_atomic_check_prop_changes(ret, old_val, prop_value, prop);
-+ break;
-+ }
-+
- ret = drm_atomic_connector_set_property(connector,
- connector_state, file_priv,
- prop, prop_value);
-@@ -1002,6 +1024,13 @@ int drm_atomic_set_property(struct drm_atomic_state *state,
- break;
- }
-
-+ if (async_flip) {
-+ ret = drm_atomic_crtc_get_property(crtc, crtc_state,
-+ prop, &old_val);
-+ ret = drm_atomic_check_prop_changes(ret, old_val, prop_value, prop);
-+ break;
-+ }
-+
- ret = drm_atomic_crtc_set_property(crtc,
- crtc_state, prop, prop_value);
- break;
-@@ -1009,6 +1038,7 @@ int drm_atomic_set_property(struct drm_atomic_state *state,
- case DRM_MODE_OBJECT_PLANE: {
- struct drm_plane *plane = obj_to_plane(obj);
- struct drm_plane_state *plane_state;
-+ struct drm_mode_config *config = &plane->dev->mode_config;
-
- plane_state = drm_atomic_get_plane_state(state, plane);
- if (IS_ERR(plane_state)) {
-@@ -1016,6 +1046,21 @@ int drm_atomic_set_property(struct drm_atomic_state *state,
- break;
- }
-
-+ if (async_flip && prop != config->prop_fb_id) {
-+ ret = drm_atomic_plane_get_property(plane, plane_state,
-+ prop, &old_val);
-+ ret = drm_atomic_check_prop_changes(ret, old_val, prop_value, prop);
-+ break;
-+ }
-+
-+ if (async_flip && plane_state->plane->type != DRM_PLANE_TYPE_PRIMARY) {
-+ drm_dbg_atomic(prop->dev,
-+ "[OBJECT:%d] Only primary planes can be changed during async flip\n",
-+ obj->id);
-+ ret = -EINVAL;
-+ break;
-+ }
-+
- ret = drm_atomic_plane_set_property(plane,
- plane_state, file_priv,
- prop, prop_value);
-@@ -1295,6 +1340,7 @@ int drm_mode_atomic_ioctl(struct drm_device *dev,
- struct drm_out_fence_state *fence_state;
- int ret = 0;
- unsigned int i, j, num_fences;
-+ bool async_flip = false;
-
- /* disallow for drivers not supporting atomic: */
- if (!drm_core_check_feature(dev, DRIVER_ATOMIC))
-@@ -1408,8 +1454,8 @@ int drm_mode_atomic_ioctl(struct drm_device *dev,
- goto out;
- }
-
-- ret = drm_atomic_set_property(state, file_priv,
-- obj, prop, prop_value);
-+ ret = drm_atomic_set_property(state, file_priv, obj,
-+ prop, prop_value, async_flip);
- if (ret) {
- drm_mode_object_put(obj);
- goto out;
-diff --git a/drivers/gpu/drm/drm_crtc_internal.h b/drivers/gpu/drm/drm_crtc_internal.h
-index 501a10edd0e1dc..381130cebe811c 100644
---- a/drivers/gpu/drm/drm_crtc_internal.h
-+++ b/drivers/gpu/drm/drm_crtc_internal.h
-@@ -251,7 +251,7 @@ int drm_atomic_set_property(struct drm_atomic_state *state,
- struct drm_file *file_priv,
- struct drm_mode_object *obj,
- struct drm_property *prop,
-- uint64_t prop_value);
-+ uint64_t prop_value, bool async_flip);
- int drm_atomic_get_property(struct drm_mode_object *obj,
- struct drm_property *property, uint64_t *val);
-
-diff --git a/drivers/gpu/drm/drm_mode_object.c b/drivers/gpu/drm/drm_mode_object.c
-index ac0d2ce3f87041..0e8355063eee36 100644
---- a/drivers/gpu/drm/drm_mode_object.c
-+++ b/drivers/gpu/drm/drm_mode_object.c
-@@ -538,7 +538,7 @@ static int set_property_atomic(struct drm_mode_object *obj,
- obj_to_connector(obj),
- prop_value);
- } else {
-- ret = drm_atomic_set_property(state, file_priv, obj, prop, prop_value);
-+ ret = drm_atomic_set_property(state, file_priv, obj, prop, prop_value, false);
- if (ret)
- goto out;
- ret = drm_atomic_commit(state);
From 1edf3fbbeb36440e1222c2fe0e8127fb804c5278 Mon Sep 17 00:00:00 2001
From: Hamza Mahfooz <hamza.mahfooz@amd.com>
Date: Fri, 4 Aug 2023 11:13:04 -0400
diff --git a/SPECS/kernel.spec b/SPECS/kernel.spec
index fd7d7a7..ad4b4ca 100644
--- a/SPECS/kernel.spec
+++ b/SPECS/kernel.spec
@@ -160,18 +160,18 @@ Summary: The Linux kernel
# the --with-release option overrides this setting.)
%define debugbuildsenabled 1
%define buildid .fsync
-%define specrpmversion 6.7.11
-%define specversion 6.7.11
-%define patchversion 6.7
+%define specrpmversion 6.8.2
+%define specversion 6.8.2
+%define patchversion 6.8
%define pkgrelease 200
%define kversion 6
-%define tarfile_release 6.7.11
+%define tarfile_release 6.8.2
# This is needed to do merge window version magic
-%define patchlevel 7
+%define patchlevel 8
# This allows pkg_release to have configurable %%{?dist} tag
-%define specrelease 202%{?buildid}%{?dist}
+%define specrelease 210%{?buildid}%{?dist}
# This defines the kabi tarball version
-%define kabiversion 6.7.11
+%define kabiversion 6.8.2
# If this variable is set to 1, a bpf selftests build failure will cause a
# fatal kernel package build error
@@ -301,11 +301,6 @@ Summary: The Linux kernel
%define with_ipaclones 0
# no stablelist
%define with_kernel_abi_stablelists 0
-# Fedora builds these separately
-%define with_perf 1
-%define with_libperf 1
-%define with_tools 1
-%define with_bpftool 1
# No realtime fedora variants
%define with_realtime 0
%define with_arm64_64k 0
@@ -396,8 +391,6 @@ Summary: The Linux kernel
%define with_bpftool 0
%define with_kernel_abi_stablelists 0
%define with_selftests 0
-%define with_cross 0
-%define with_cross_headers 0
%define with_ipaclones 0
%endif
@@ -427,8 +420,6 @@ Summary: The Linux kernel
%define with_bpftool 0
%define with_kernel_abi_stablelists 0
%define with_selftests 0
-%define with_cross 0
-%define with_cross_headers 0
%define with_ipaclones 0
%define with_headers 0
%define with_efiuki 0
@@ -674,14 +665,11 @@ BuildRequires: kernel-rpm-macros
# glibc-static is required for a consistent build environment (specifically
# CONFIG_CC_CAN_LINK_STATIC=y).
BuildRequires: glibc-static
-%ifnarch %{nobuildarches} noarch
-BuildRequires: bpftool
-%endif
%if %{with_headers}
BuildRequires: rsync
%endif
%if %{with_doc}
-BuildRequires: xmlto, asciidoc, python3-sphinx, python3-sphinx_rtd_theme
+BuildRequires: xmlto, asciidoc, python3-sphinx, python3-sphinx_rtd_theme, python3-pyyaml
%endif
%if %{with_sparse}
BuildRequires: sparse
@@ -833,13 +821,13 @@ Source13: redhatsecureboot301.cer
Source14: secureboot_s390.cer
Source15: secureboot_ppc.cer
-%define secureboot_ca_1 %{SOURCE10}
-%define secureboot_ca_0 %{SOURCE11}
+%define secureboot_ca_0 %{SOURCE10}
+%define secureboot_ca_1 %{SOURCE11}
%ifarch x86_64 aarch64
-%define secureboot_key_1 %{SOURCE12}
-%define pesign_name_1 redhatsecureboot501
-%define secureboot_key_0 %{SOURCE13}
-%define pesign_name_0 redhatsecureboot301
+%define secureboot_key_0 %{SOURCE12}
+%define pesign_name_0 redhatsecureboot501
+%define secureboot_key_1 %{SOURCE13}
+%define pesign_name_1 redhatsecureboot301
%endif
%ifarch s390x
%define secureboot_key_0 %{SOURCE14}
@@ -858,12 +846,12 @@ Source11: redhatsecurebootca2.cer
Source12: redhatsecureboot401.cer
Source13: redhatsecureboot003.cer
-%define secureboot_ca_1 %{SOURCE10}
-%define secureboot_ca_0 %{SOURCE11}
-%define secureboot_key_1 %{SOURCE12}
-%define pesign_name_1 redhatsecureboot401
-%define secureboot_key_0 %{SOURCE13}
-%define pesign_name_0 redhatsecureboot003
+%define secureboot_ca_0 %{SOURCE10}
+%define secureboot_ca_1 %{SOURCE11}
+%define secureboot_key_0 %{SOURCE12}
+%define pesign_name_0 redhatsecureboot401
+%define secureboot_key_1 %{SOURCE13}
+%define pesign_name_1 redhatsecureboot003
# released_kernel
%endif
@@ -943,6 +931,7 @@ Source87: flavors
Source100: rheldup3.x509
Source101: rhelkpatch1.x509
+Source102: nvidiagpuoot001.x509
Source200: check-kabi
@@ -997,15 +986,12 @@ Patch200: tkg.patch
Patch202: fsync.patch
Patch203: OpenRGB.patch
Patch206: amdgpu-si-cik-default.patch
-Patch207: nouveau-gsp-default.patch
Patch211: tkg-misc-additions.patch
Patch212: tkg-unprivileged-CLONE_NEWUSER.patch
Patch213: cachy-bore.patch
# device specific patches
Patch300: linux-surface.patch
-Patch301: steam-deck.patch
-Patch329: steam-deck-valve15.patch
Patch302: asus-linux.patch
Patch303: lenovo-legion-laptop.patch
# workaround for i915 getting stuck during async page flips on Nvidia PRIME systems
@@ -1037,7 +1023,8 @@ Patch330: valve-gamescope-framerate-control-fixups.patch
# https://gitlab.freedesktop.org/drm/amd/-/issues/1839
Patch331: amdgpu-HAINAN-variant-fixup.patch
-# steamdeck oled patches
+# steamdeck patches
+Patch301: steam-deck.patch
Patch310: steamdeck-oled-wifi.patch
Patch312: steamdeck-oled-audio.patch
Patch313: steamdeck-oled-hw-quirks.patch
@@ -1046,7 +1033,7 @@ Patch313: steamdeck-oled-hw-quirks.patch
Patch332: t2linux.patch
# temporary patches
-Patch401: 0001-Remove-REBAR-size-quirk-for-Sapphire-RX-5600-XT-Puls.patch
+Patch401: 0001-Revert-PCI-Add-a-REBAR-size-quirk-for-Sapphire-RX-56.patch
Patch405: mt76:-mt7921:-Disable-powersave-features-by-default.patch
Patch408: 0001-acpi-proc-idle-skip-dummy-wait.patch
# Fixes the steam deck not coming back from hibernation
@@ -1210,13 +1197,12 @@ This package provides debug information for the perf python bindings.
%if %{with_libperf}
%package -n libperf
Summary: The perf library from kernel source
-License: GPL-2.0-only AND (LGPL-2.1-only OR BSD-2-Clause)
%description -n libperf
This package contains the kernel source perf library.
%package -n libperf-devel
Summary: Developement files for the perf library from kernel source
-License: GPL-2.0-only AND (LGPL-2.1-only OR BSD-2-Clause)
+Requires: libperf = %{version}-%{release}
%description -n libperf-devel
This package includes libraries and header files needed for development
of applications which use perf library from kernel source.
@@ -1233,7 +1219,7 @@ This package provides debug information for the libperf package.
# symlinks because of the trailing nonmatching alternation and
# the leading .*, because of find-debuginfo.sh's buggy handling
# of matching the pattern against the symlinks file.
-%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{_libdir}/libperf.so(\.debug)?|XXX' -o libperf-debuginfo.list}
+%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{_libdir}/libperf.so.*(\.debug)?|XXX' -o libperf-debuginfo.list}
# with_libperf
%endif
@@ -1315,14 +1301,25 @@ analysing the logical and timing behavior of Linux.
%if %{with_bpftool}
+%if 0%{?fedora}
+# bpftoolverion doesn't bump with stable updates so let's stick with
+# upstream kernel version for the package name. We still get correct
+# output with bpftool -V.
+%define bpftoolversion %specrpmversion
+%else
+%define bpftoolversion 7.4.0
+%endif
+
%package -n bpftool
Summary: Inspection and simple manipulation of eBPF programs and maps
+Version: %{bpftoolversion}
%description -n bpftool
This package contains the bpftool, which allows inspection and simple
manipulation of eBPF programs and maps.
%package -n bpftool-debuginfo
Summary: Debug information for package bpftool
+Version: %{bpftoolversion}
Group: Development/Debug
Requires: %{name}-debuginfo-common-%{_target_cpu} = %{specrpmversion}-%{release}
AutoReqProv: no
@@ -1797,11 +1794,21 @@ Prebuilt 64k unified kernel image for virtual machines.
%kernel_ipaclones_package
%endif
+%define log_msg() \
+ { set +x; } 2>/dev/null \
+ _log_msglineno=$(grep -n %{*} %{_specdir}/${RPM_PACKAGE_NAME}.spec | grep log_msg | cut -d":" -f1) \
+ echo "kernel.spec:${_log_msglineno}: %{*}" \
+ set -x
+
%prep
+%{log_msg "Start of prep stage"}
+
+%{log_msg "Sanity checks"}
+
# do a few sanity-checks for --with *only builds
%if %{with_baseonly}
%if !%{with_up}
-echo "Cannot build --with baseonly, up build is disabled"
+%{log_msg "Cannot build --with baseonly, up build is disabled"}
exit 1
%endif
%endif
@@ -1810,7 +1817,7 @@ exit 1
if [ "%{patches}" != "%%{patches}" ] ; then
for patch in %{patches} ; do
if [ ! -f $patch ] ; then
- echo "ERROR: Patch ${patch##/*/} listed in specfile but is missing"
+ %{log_msg "ERROR: Patch ${patch##/*/} listed in specfile but is missing"}
exit 1
fi
done
@@ -1826,7 +1833,7 @@ ApplyPatch()
fi
if ! grep -E "^Patch[0-9]+: $patch\$" %{_specdir}/${RPM_PACKAGE_NAME}.spec ; then
if [ "${patch:0:8}" != "patch-%{kversion}." ] ; then
- echo "ERROR: Patch $patch not listed as a source patch in specfile"
+ %{log_msg "ERROR: Patch $patch not listed as a source patch in specfile"}
exit 1
fi
fi 2>/dev/null
@@ -1843,6 +1850,7 @@ ApplyOptionalPatch()
{
local patch=$1
shift
+ %{log_msg "ApplyOptionalPatch: $1"}
if [ ! -f $RPM_SOURCE_DIR/$patch ]; then
exit 1
fi
@@ -1852,12 +1860,14 @@ ApplyOptionalPatch()
fi
}
+%{log_msg "Untar kernel tarball"}
%setup -q -n kernel-%{tarfile_release} -c
mv linux-%{tarfile_release} linux-%{KVERREL}
cd linux-%{KVERREL}
cp -a %{SOURCE1} .
+%{log_msg "Start of patch applications"}
%if !%{nopatches}
ApplyOptionalPatch patch-%{patchversion}-redhat.patch
@@ -1867,15 +1877,12 @@ ApplyOptionalPatch tkg.patch
ApplyOptionalPatch fsync.patch
ApplyOptionalPatch OpenRGB.patch
ApplyOptionalPatch amdgpu-si-cik-default.patch
-ApplyOptionalPatch nouveau-gsp-default.patch
ApplyOptionalPatch tkg-misc-additions.patch
ApplyOptionalPatch tkg-unprivileged-CLONE_NEWUSER.patch
ApplyOptionalPatch cachy-bore.patch
# device specific patches
ApplyOptionalPatch linux-surface.patch
-ApplyOptionalPatch steam-deck.patch
-#ApplyOptionalPatch steam-deck-valve15.patch
ApplyOptionalPatch asus-linux.patch
ApplyOptionalPatch lenovo-legion-laptop.patch
# workaround for i915 getting stuck during async page flips on Nvidia PRIME systems
@@ -1883,7 +1890,7 @@ ApplyOptionalPatch 0001-drm-i915-quirks-disable-async-flipping-on-specific-d.pat
ApplyOptionalPatch 0002-drm-i915-add-kernel-parameter-to-disable-async-page-.patch
# improve AMD SFH 1.1 gyro and accel sensitivity
ApplyOptionalPatch 0001-bump-the-sensitivity-of-AMD-SFH.patch
-# ROG Ally
+# ROG Ally-
ApplyOptionalPatch rog-ally-audio-fix.patch
ApplyOptionalPatch ROG-ALLY-NCT6775-PLATFORM.patch
ApplyOptionalPatch v14.8-0001-HID-asus-fix-more-n-key-report-descriptors-if-.patch
@@ -1907,7 +1914,8 @@ ApplyOptionalPatch valve-gamescope-framerate-control-fixups.patch
# https://gitlab.freedesktop.org/drm/amd/-/issues/1839
ApplyOptionalPatch amdgpu-HAINAN-variant-fixup.patch
-# steamdeck oled patches
+# steamdeck patches
+ApplyOptionalPatch steam-deck.patch
ApplyOptionalPatch steamdeck-oled-wifi.patch
ApplyOptionalPatch steamdeck-oled-audio.patch
ApplyOptionalPatch steamdeck-oled-hw-quirks.patch
@@ -1916,7 +1924,7 @@ ApplyOptionalPatch steamdeck-oled-hw-quirks.patch
ApplyOptionalPatch t2linux.patch
# temporary patches
-ApplyOptionalPatch 0001-Remove-REBAR-size-quirk-for-Sapphire-RX-5600-XT-Puls.patch
+ApplyOptionalPatch 0001-Revert-PCI-Add-a-REBAR-size-quirk-for-Sapphire-RX-56.patch
# mediatek fixups
ApplyOptionalPatch mt76:-mt7921:-Disable-powersave-features-by-default.patch
ApplyOptionalPatch 0001-acpi-proc-idle-skip-dummy-wait.patch
@@ -1941,10 +1949,11 @@ ApplyOptionalPatch set-ps4-bt-poll-rate-1000hz.patch
ApplyOptionalPatch linux-kernel-test.patch
+%{log_msg "End of patch applications"}
# END OF PATCH APPLICATIONS
# Any further pre-build tree manipulations happen here.
-
+%{log_msg "Pre-build tree manipulations"}
chmod +x scripts/checkpatch.pl
mv COPYING COPYING-%{specrpmversion}-%{release}
@@ -1959,7 +1968,7 @@ rm -f localversion-next
# This fixes errors such as
# *** ERROR: ambiguous python shebang in /usr/bin/kvm_stat: #!/usr/bin/python. Change it to python3 (or python2) explicitly.
# We patch all sources below for which we got a report/error.
-echo "Fixing Python shebangs..."
+%{log_msg "Fixing Python shebangs..."}
%py3_shebang_fix \
tools/kvm/kvm_stat/kvm_stat \
scripts/show_delta \
@@ -1979,6 +1988,7 @@ fi
mkdir configs
cd configs
+%{log_msg "Copy additional source files into buildroot"}
# Drop some necessary files from the source dir into the buildroot
cp $RPM_SOURCE_DIR/%{name}-*.config .
cp %{SOURCE80} .
@@ -1990,6 +2000,7 @@ cp %{SOURCE3001} partial-kernel-local-debug-snip.config
FLAVOR=%{primary_target} SPECPACKAGE_NAME=%{name} SPECVERSION=%{specversion} SPECRPMVERSION=%{specrpmversion} ./generate_all_configs.sh %{debugbuildsenabled}
# Collect custom defined config options
+%{log_msg "Collect custom defined config options"}
PARTIAL_CONFIGS=""
%if %{with_gcov}
PARTIAL_CONFIGS="$PARTIAL_CONFIGS %{SOURCE70} %{SOURCE71}"
@@ -2015,6 +2026,7 @@ GetArch()
}
# Merge in any user-provided local config option changes
+%{log_msg "Merge in any user-provided local config option changes"}
%ifnarch %nobuildarches
for i in %{all_configs}
do
@@ -2039,10 +2051,12 @@ done
# Add DUP and kpatch certificates to system trusted keys for RHEL
%if 0%{?rhel}
+%{log_msg "Add DUP and kpatch certificates to system trusted keys for RHEL"}
%if %{signkernel}%{signmodules}
openssl x509 -inform der -in %{SOURCE100} -out rheldup3.pem
openssl x509 -inform der -in %{SOURCE101} -out rhelkpatch1.pem
-cat rheldup3.pem rhelkpatch1.pem > ../certs/rhel.pem
+openssl x509 -inform der -in %{SOURCE102} -out nvidiagpuoot001.pem
+cat rheldup3.pem rhelkpatch1.pem nvidiagpuoot001.pem > ../certs/rhel.pem
%ifarch s390x ppc64le
openssl x509 -inform der -in %{secureboot_ca_0} -out secureboot.pem
cat secureboot.pem >> ../certs/rhel.pem
@@ -2055,11 +2069,13 @@ done
# Adjust FIPS module name for RHEL
%if 0%{?rhel}
+%{log_msg "Adjust FIPS module name for RHEL"}
for i in *.config; do
sed -i 's/CONFIG_CRYPTO_FIPS_NAME=.*/CONFIG_CRYPTO_FIPS_NAME="Red Hat Enterprise Linux %{rhel} - Kernel Cryptographic API"/' $i
done
%endif
+%{log_msg "Set process_configs.sh $OPTS"}
cp %{SOURCE81} .
OPTS=""
%if %{with_configchecks}
@@ -2070,6 +2086,7 @@ for opt in %{clang_make_opts}; do
OPTS="$OPTS -m $opt"
done
%endif
+%{log_msg "Generate redhat configs"}
RHJOBS=$RPM_BUILD_NCPUS SPECPACKAGE_NAME=%{name} ./process_configs.sh $OPTS %{specrpmversion}
# We may want to override files from the primary target in case of building
@@ -2084,20 +2101,21 @@ update_scripts() {
done
}
+%{log_msg "Set scripts/SOURCES targets"}
update_target=%{primary_target}
if [ "%{primary_target}" == "rhel" ]; then
: # no-op to avoid empty if-fi error
%if 0%{?centos}
update_scripts $update_target
- echo "Updating scripts/sources to centos version"
+ %{log_msg "Updating scripts/sources to centos version"}
update_target=centos
%endif
fi
update_scripts $update_target
-# end of kernel config
%endif
+%{log_msg "End of kernel config"}
cd ..
# # End of Configs stuff
@@ -2113,7 +2131,9 @@ cd ..
### build
###
%build
+%{log_msg "Start of build stage"}
+%{log_msg "General arch build configuration"}
rm -rf %{buildroot_unstripped} || true
mkdir -p %{buildroot_unstripped}
@@ -2137,6 +2157,9 @@ cp_vmlinux()
%define make %{__make} %{?cross_opts} %{?make_opts} HOSTCFLAGS="%{?build_hostcflags}" HOSTLDFLAGS="%{?build_hostldflags}"
InitBuildVars() {
+ %{log_msg "InitBuildVars for $1"}
+
+ %{log_msg "InitBuildVars: Initialize build variables"}
# Initialize the kernel .config file and create some variables that are
# needed for the actual build process.
@@ -2148,6 +2171,7 @@ InitBuildVars() {
KernelVer=%{specversion}-%{release}.%{_target_cpu}${Variant:++${Variant}}
+ %{log_msg "InitBuildVars: Update Makefile"}
# make sure EXTRAVERSION says what we want it to say
# Trim the release if this is a CI build, since KERNELVERSION is limited to 64 characters
ShortRel=$(perl -e "print \"%{release}\" =~ s/\.pr\.[0-9A-Fa-f]{32}//r")
@@ -2157,6 +2181,7 @@ InitBuildVars() {
# if we are post rc1 this should match anyway so this won't matter
perl -p -i -e 's/^PATCHLEVEL.*/PATCHLEVEL = %{patchlevel}/' Makefile
+ %{log_msg "InitBuildVars: Copy files"}
%{make} %{?_smp_mflags} mrproper
cp configs/$Config .config
@@ -2165,23 +2190,26 @@ InitBuildVars() {
%endif
Arch=`head -1 .config | cut -b 3-`
- echo USING ARCH=$Arch
+ %{log_msg "InitBuildVars: USING ARCH=$Arch"}
- KCFLAGS="%{?kcflags}"
+ KCFLAGS="%{?kcflags} -DAMD_PRIVATE_COLOR"
# add kpatch flags for base kernel
+ %{log_msg "InitBuildVars: Configure KCFLAGS"}
if [ "$Variant" == "" ]; then
KCFLAGS="$KCFLAGS %{?kpatch_kcflags}"
fi
}
BuildKernel() {
+ %{log_msg "BuildKernel for $4"}
MakeTarget=$1
KernelImage=$2
DoVDSO=$3
Variant=$4
InstallName=${5:-vmlinuz}
+ %{log_msg "Setup variables"}
DoModules=1
if [ "$Variant" = "zfcpdump" ]; then
DoModules=0
@@ -2196,22 +2224,25 @@ BuildKernel() {
fi
%if %{with_gcov}
+ %{log_msg "Setup build directories"}
# Make build directory unique for each variant, so that gcno symlinks
# are also unique for each variant.
if [ -n "$Variant" ]; then
ln -s $(pwd) ../linux-%{KVERREL}-${Variant}
fi
- echo "GCOV - continuing build in: $(pwd)"
+ %{log_msg "GCOV - continuing build in: $(pwd)"}
pushd ../linux-%{KVERREL}${Variant:+-${Variant}}
pwd > ../kernel${Variant:+-${Variant}}-gcov.list
%endif
+ %{log_msg "Calling InitBuildVars for $Variant"}
InitBuildVars $Variant
- echo BUILDING A KERNEL FOR ${Variant} %{_target_cpu}...
+ %{log_msg "BUILDING A KERNEL FOR ${Variant} %{_target_cpu}..."}
%{make} ARCH=$Arch olddefconfig >/dev/null
+ %{log_msg "Setup build-ids"}
# This ensures build-ids are unique to allow parallel debuginfo
perl -p -i -e "s/^CONFIG_BUILD_SALT.*/CONFIG_BUILD_SALT=\"%{KVERREL}\"/" .config
%{make} ARCH=$Arch KCFLAGS="$KCFLAGS" WITH_GCOV="%{?with_gcov}" %{?_smp_mflags} $MakeTarget %{?sparse_mflags} %{?kernel_mflags}
@@ -2219,6 +2250,7 @@ BuildKernel() {
%{make} ARCH=$Arch KCFLAGS="$KCFLAGS" WITH_GCOV="%{?with_gcov}" %{?_smp_mflags} modules %{?sparse_mflags} || exit 1
fi
+ %{log_msg "Setup RPM_BUILD_ROOT directories"}
mkdir -p $RPM_BUILD_ROOT/%{image_install_path}
mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer
mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/systemtap
@@ -2227,32 +2259,38 @@ BuildKernel() {
%endif
%ifarch aarch64
+ %{log_msg "Build dtb kernel"}
%{make} ARCH=$Arch dtbs INSTALL_DTBS_PATH=$RPM_BUILD_ROOT/%{image_install_path}/dtb-$KernelVer
%{make} ARCH=$Arch dtbs_install INSTALL_DTBS_PATH=$RPM_BUILD_ROOT/%{image_install_path}/dtb-$KernelVer
cp -r $RPM_BUILD_ROOT/%{image_install_path}/dtb-$KernelVer $RPM_BUILD_ROOT/lib/modules/$KernelVer/dtb
find arch/$Arch/boot/dts -name '*.dtb' -type f -delete
%endif
+ %{log_msg "Cleanup temp btf files"}
# Remove large intermediate files we no longer need to save space
# (-f required for zfcpdump builds that do not enable BTF)
rm -f vmlinux.o .tmp_vmlinux.btf
+ %{log_msg "Install files to RPM_BUILD_ROOT"}
# Start installing the results
install -m 644 .config $RPM_BUILD_ROOT/boot/config-$KernelVer
install -m 644 .config $RPM_BUILD_ROOT/lib/modules/$KernelVer/config
install -m 644 System.map $RPM_BUILD_ROOT/boot/System.map-$KernelVer
install -m 644 System.map $RPM_BUILD_ROOT/lib/modules/$KernelVer/System.map
+ %{log_msg "Create initrfamfs"}
# We estimate the size of the initramfs because rpm needs to take this size
# into consideration when performing disk space calculations. (See bz #530778)
dd if=/dev/zero of=$RPM_BUILD_ROOT/boot/initramfs-$KernelVer.img bs=1M count=20
if [ -f arch/$Arch/boot/zImage.stub ]; then
+ %{log_msg "Copy zImage.stub to RPM_BUILD_ROOT"}
cp arch/$Arch/boot/zImage.stub $RPM_BUILD_ROOT/%{image_install_path}/zImage.stub-$KernelVer || :
cp arch/$Arch/boot/zImage.stub $RPM_BUILD_ROOT/lib/modules/$KernelVer/zImage.stub-$KernelVer || :
fi
%if %{signkernel}
+ %{log_msg "Copy kernel for signing"}
if [ "$KernelImage" = vmlinux ]; then
# We can't strip and sign $KernelImage in place, because
# we need to preserve original vmlinux for debuginfo.
@@ -2265,6 +2303,7 @@ BuildKernel() {
SignImage=$KernelImage
%ifarch x86_64 aarch64
+ %{log_msg "Sign kernel image"}
%pesign -s -i $SignImage -o vmlinuz.tmp -a %{secureboot_ca_0} -c %{secureboot_key_0} -n %{pesign_name_0}
%pesign -s -i vmlinuz.tmp -o vmlinuz.signed -a %{secureboot_ca_1} -c %{secureboot_key_1} -n %{pesign_name_1}
rm vmlinuz.tmp
@@ -2281,31 +2320,35 @@ BuildKernel() {
%endif
if [ ! -s vmlinuz.signed ]; then
- echo "pesigning failed"
+ %{log_msg "pesigning failed"}
exit 1
fi
mv vmlinuz.signed $SignImage
# signkernel
%endif
+ %{log_msg "copy signed kernel"}
$CopyKernel $KernelImage \
$RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer
chmod 755 $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer
cp $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer $RPM_BUILD_ROOT/lib/modules/$KernelVer/$InstallName
# hmac sign the kernel for FIPS
- echo "Creating hmac file: $RPM_BUILD_ROOT/%{image_install_path}/.vmlinuz-$KernelVer.hmac"
+ %{log_msg "hmac sign the kernel for FIPS"}
+ %{log_msg "Creating hmac file: $RPM_BUILD_ROOT/%{image_install_path}/.vmlinuz-$KernelVer.hmac"}
ls -l $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer
(cd $RPM_BUILD_ROOT/%{image_install_path} && sha512hmac $InstallName-$KernelVer) > $RPM_BUILD_ROOT/%{image_install_path}/.vmlinuz-$KernelVer.hmac;
cp $RPM_BUILD_ROOT/%{image_install_path}/.vmlinuz-$KernelVer.hmac $RPM_BUILD_ROOT/lib/modules/$KernelVer/.vmlinuz.hmac
if [ $DoModules -eq 1 ]; then
+ %{log_msg "Install modules in RPM_BUILD_ROOT"}
# Override $(mod-fw) because we don't want it to install any firmware
# we'll get it from the linux-firmware package and we don't want conflicts
%{make} %{?_smp_mflags} ARCH=$Arch INSTALL_MOD_PATH=$RPM_BUILD_ROOT %{?_smp_mflags} modules_install KERNELRELEASE=$KernelVer mod-fw=
fi
%if %{with_gcov}
+ %{log_msg "install gcov-needed files to $BUILDROOT/$BUILD/"}
# install gcov-needed files to $BUILDROOT/$BUILD/...:
# gcov_info->filename is absolute path
# gcno references to sources can use absolute paths (e.g. in out-of-tree builds)
@@ -2313,6 +2356,7 @@ BuildKernel() {
find . \( -name '*.gcno' -o -name '*.[chS]' \) -exec install -D '{}' "$RPM_BUILD_ROOT/$(pwd)/{}" \;
%endif
+ %{log_msg "Add VDSO files"}
# add an a noop %%defattr statement 'cause rpm doesn't like empty file list files
echo '%%defattr(-,-,-)' > ../kernel${Variant:+-${Variant}}-ldsoconf.list
if [ $DoVDSO -ne 0 ]; then
@@ -2326,6 +2370,7 @@ BuildKernel() {
rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/vdso/.build-id
fi
+ %{log_msg "Save headers/makefiles, etc. for kernel-headers"}
# And save the headers/makefiles etc for building modules against
#
# This all looks scary, but the end result is supposed to be:
@@ -2360,12 +2405,12 @@ BuildKernel() {
# NOTENOTE: script which dynamically adds exported kernel symbol
# NOTENOTE: checksums to the rpm metadata provides list.
# NOTENOTE: if you change the symvers name, update the backend too
- echo "**** GENERATING kernel ABI metadata ****"
+ %{log_msg "GENERATING kernel ABI metadata"}
%compression --stdout %compression_flags < Module.symvers > $RPM_BUILD_ROOT/boot/symvers-$KernelVer.%compext
cp $RPM_BUILD_ROOT/boot/symvers-$KernelVer.%compext $RPM_BUILD_ROOT/lib/modules/$KernelVer/symvers.%compext
%if %{with_kabichk}
- echo "**** kABI checking is enabled in kernel SPEC file. ****"
+ %{log_msg "kABI checking is enabled in kernel SPEC file."}
chmod 0755 $RPM_SOURCE_DIR/check-kabi
if [ -e $RPM_SOURCE_DIR/Module.kabi_%{_target_cpu}$Variant ]; then
cp $RPM_SOURCE_DIR/Module.kabi_%{_target_cpu}$Variant $RPM_BUILD_ROOT/Module.kabi
@@ -2373,19 +2418,19 @@ BuildKernel() {
# for now, don't keep it around.
rm $RPM_BUILD_ROOT/Module.kabi
else
- echo "**** NOTE: Cannot find reference Module.kabi file. ****"
+ %{log_msg "NOTE: Cannot find reference Module.kabi file."}
fi
%endif
%if %{with_kabidupchk}
- echo "**** kABI DUP checking is enabled in kernel SPEC file. ****"
+ %{log_msg "kABI DUP checking is enabled in kernel SPEC file."}
if [ -e $RPM_SOURCE_DIR/Module.kabi_dup_%{_target_cpu}$Variant ]; then
cp $RPM_SOURCE_DIR/Module.kabi_dup_%{_target_cpu}$Variant $RPM_BUILD_ROOT/Module.kabi
$RPM_SOURCE_DIR/check-kabi -k $RPM_BUILD_ROOT/Module.kabi -s Module.symvers || exit 1
# for now, don't keep it around.
rm $RPM_BUILD_ROOT/Module.kabi
else
- echo "**** NOTE: Cannot find DUP reference Module.kabi file. ****"
+ %{log_msg "NOTE: Cannot find DUP reference Module.kabi file."}
fi
%endif
@@ -2398,7 +2443,7 @@ BuildKernel() {
mkdir -p $RPM_BUILD_ROOT/kabi-dwarf/stablelists
tar -xvf %{SOURCE300} -C $RPM_BUILD_ROOT/kabi-dwarf/stablelists
- echo "**** GENERATING DWARF-based kABI baseline dataset ****"
+ %{log_msg "GENERATING DWARF-based kABI baseline dataset"}
chmod 0755 $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh
$RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh generate \
"$RPM_BUILD_ROOT/kabi-dwarf/stablelists/kabi-current/kabi_stablelist_%{_target_cpu}" \
@@ -2417,26 +2462,27 @@ BuildKernel() {
mkdir -p $RPM_BUILD_ROOT/kabi-dwarf/stablelists
tar -xvf %{SOURCE300} -C $RPM_BUILD_ROOT/kabi-dwarf/stablelists
- echo "**** GENERATING DWARF-based kABI dataset ****"
+ %{log_msg "GENERATING DWARF-based kABI dataset"}
chmod 0755 $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh
$RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh generate \
"$RPM_BUILD_ROOT/kabi-dwarf/stablelists/kabi-current/kabi_stablelist_%{_target_cpu}" \
"$(pwd)" \
"$RPM_BUILD_ROOT/kabi-dwarf/base/%{_target_cpu}${Variant:+.${Variant}}.tmp" || :
- echo "**** kABI DWARF-based comparison report ****"
+ %{log_msg "kABI DWARF-based comparison report"}
$RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh compare \
"$RPM_BUILD_ROOT/kabi-dwarf/base/%{_target_cpu}${Variant:+.${Variant}}" \
"$RPM_BUILD_ROOT/kabi-dwarf/base/%{_target_cpu}${Variant:+.${Variant}}.tmp" || :
- echo "**** End of kABI DWARF-based comparison report ****"
+ %{log_msg "End of kABI DWARF-based comparison report"}
else
- echo "**** Baseline dataset for kABI DWARF-BASED comparison report not found ****"
+ %{log_msg "Baseline dataset for kABI DWARF-BASED comparison report not found"}
fi
rm -rf $RPM_BUILD_ROOT/kabi-dwarf
fi
%endif
+ %{log_msg "Cleanup Makefiles/Kconfig files"}
# then drop all but the needed Makefiles/Kconfig files
rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts
rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include
@@ -2448,11 +2494,13 @@ BuildKernel() {
%ifarch s390x
# CONFIG_EXPOLINE_EXTERN=y produces arch/s390/lib/expoline/expoline.o
# which is needed during external module build.
+ %{log_msg "Copy expoline.o"}
if [ -f arch/s390/lib/expoline/expoline.o ]; then
cp -a --parents arch/s390/lib/expoline/expoline.o $RPM_BUILD_ROOT/lib/modules/$KernelVer/build
fi
%endif
+ %{log_msg "Copy additional files for make targets"}
# Files for 'make scripts' to succeed with kernel-devel.
mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/security/selinux/include
cp -a --parents security/selinux/include/classmap.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build
@@ -2546,6 +2594,7 @@ BuildKernel() {
cp -a --parents tools/objtool/arch/x86/ $RPM_BUILD_ROOT/lib/modules/$KernelVer/build
%endif
+ %{log_msg "Clean up intermediate tools files"}
# Clean up intermediate tools files
find $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/tools \( -iname "*.o" -o -iname "*.cmd" \) -exec rm -f {} +
@@ -2559,6 +2608,7 @@ BuildKernel() {
eu-readelf -n vmlinux | grep "Build ID" | awk '{print $NF}' > vmlinux.id
cp vmlinux.id $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/vmlinux.id
+ %{log_msg "Copy additional files for kernel-debuginfo rpm"}
#
# save the vmlinux file for kernel debugging into the kernel-debuginfo rpm
# (use mv + symlink instead of cp to reduce disk space requirements)
@@ -2576,15 +2626,23 @@ BuildKernel() {
cp %{vmlinux_decompressor} $RPM_BUILD_ROOT%{debuginfodir}/lib/modules/$KernelVer/vmlinux.decompressor
fi
fi
+
+ # build and copy the vmlinux-gdb plugin files into kernel-debuginfo
+ %{make} ARCH=$Arch %{?_smp_mflags} scripts_gdb
+ cp -a --parents scripts/gdb/{,linux/}*.py $RPM_BUILD_ROOT%{debuginfodir}/lib/modules/$KernelVer
+ # this should be a relative symlink (Kbuild creates an absolute one)
+ ln -s scripts/gdb/vmlinux-gdb.py $RPM_BUILD_ROOT%{debuginfodir}/lib/modules/$KernelVer/vmlinux-gdb.py
+ %py_byte_compile %{python3} $RPM_BUILD_ROOT%{debuginfodir}/lib/modules/$KernelVer/scripts/gdb
%endif
+ %{log_msg "Create modnames"}
find $RPM_BUILD_ROOT/lib/modules/$KernelVer -name "*.ko" -type f >modnames
# mark modules executable so that strip-to-file can strip them
xargs --no-run-if-empty chmod u+x < modnames
# Generate a list of modules for block and networking.
-
+ %{log_msg "Generate a list of modules for block and networking"}
grep -F /drivers/ modnames | xargs --no-run-if-empty nm -upA |
sed -n 's,^.*/\([^/]*\.ko\): *U \(.*\)$,\1 \2,p' > drivers.undef
@@ -2606,6 +2664,7 @@ BuildKernel() {
collect_modules_list modesetting \
'drm_crtc_init'
+ %{log_msg "detect missing or incorrect license tags"}
# detect missing or incorrect license tags
( find $RPM_BUILD_ROOT/lib/modules/$KernelVer -name '*.ko' | xargs /sbin/modinfo -l | \
grep -E -v 'GPL( v2)?$|Dual BSD/GPL$|Dual MPL/GPL$|GPL and additional rights$' ) && exit 1
@@ -2621,8 +2680,10 @@ BuildKernel() {
popd
}
+ %{log_msg "Remove depmod files"}
remove_depmod_files
+ %{log_msg "Identify modules in kenrel-modules-* packages"}
# Identify modules in the kernel-modules-extras package
%{SOURCE20} $RPM_BUILD_ROOT lib/modules/$KernelVer $(realpath configs/mod-extra.list)
# Identify modules in the kernel-modules-internal package
@@ -2639,6 +2700,7 @@ BuildKernel() {
#
# Generate the kernel-core and kernel-modules files lists
#
+ %{log_msg "Gemerate the kernel-core and kernel-modules files lists"}
# Copy the System.map file for depmod to use, and create a backup of the
# full module tree so we can restore it after we're done filtering
@@ -2648,6 +2710,7 @@ BuildKernel() {
mkdir restore
cp -r lib/modules/$KernelVer/* restore/.
+ %{log_msg "Remove files in the kernel-modules-* file lists"}
# don't include anything going into kernel-modules-extra in the file lists
xargs rm -rf < mod-extra.list
# don't include anything going into kernel-modules-internal in the file lists
@@ -2662,6 +2725,7 @@ BuildKernel() {
fi
if [ $DoModules -eq 1 ]; then
+ %{log_msg "Filter files into core and modules lists"}
# Find all the module files and filter them out into the core and
# modules lists. This actually removes anything going into -modules
# from the dir.
@@ -2672,13 +2736,14 @@ BuildKernel() {
# Run depmod on the resulting module tree and make sure it isn't broken
depmod -b . -aeF ./System.map $KernelVer &> depmod.out
if [ -s depmod.out ]; then
- echo "Depmod failure"
+ %{log_msg "Depmod failure"}
cat depmod.out
exit 1
else
rm depmod.out
fi
else
+ %{log_msg "Create empty files for RPM packaging"}
# Ensure important files/directories exist to let the packaging succeed
echo '%%defattr(-,-,-)' > modules.list
echo '%%defattr(-,-,-)' > k-d.list
@@ -2690,9 +2755,10 @@ BuildKernel() {
fi
if [[ "$Variant" == "rt" || "$Variant" == "rt-debug" ]]; then
- echo "Skipping efiuki build"
+ %{log_msg "Skipping efiuki build"}
else
%if %{with_efiuki}
+ %{log_msg "Setup the EFI UKI kernel"}
popd
KernelUnifiedImageDir="$RPM_BUILD_ROOT/lib/modules/$KernelVer"
@@ -2712,13 +2778,13 @@ BuildKernel() {
$KernelUnifiedImage
%if %{signkernel}
-
+ %{log_msg "Sign the EFI UKI kernel"}
%pesign -s -i $KernelUnifiedImage -o $KernelUnifiedImage.tmp -a %{secureboot_ca_0} -c %{secureboot_key_0} -n %{pesign_name_0}
%pesign -s -i $KernelUnifiedImage.tmp -o $KernelUnifiedImage.signed -a %{secureboot_ca_1} -c %{secureboot_key_1} -n %{pesign_name_1}
rm -f $KernelUnifiedImage.tmp
if [ ! -s $KernelUnifiedImage.signed ]; then
- echo "pesigning failed"
+ %{log_msg "pesigning failed"}
exit 1
fi
mv $KernelUnifiedImage.signed $KernelUnifiedImage
@@ -2740,6 +2806,7 @@ BuildKernel() {
find lib/modules/$KernelVer/kernel -mindepth 1 -type d | sort -n > module-dirs.list
# Cleanup
+ %{log_msg "Cleanup build files"}
rm System.map
# Just "cp -r" can be very slow: here, it rewrites _existing files_
# with open(O_TRUNC). Many filesystems synchronously wait for metadata
@@ -2754,6 +2821,7 @@ BuildKernel() {
# Make sure the files lists start with absolute paths or rpmbuild fails.
# Also add in the dir entries
+ %{log_msg "Create module list files for all kernel variants"}
sed -e 's/^lib*/\/lib/' %{?zipsed} $RPM_BUILD_ROOT/k-d.list > ../kernel${Variant:+-${Variant}}-modules.list
sed -e 's/^lib*/%dir \/lib/' %{?zipsed} $RPM_BUILD_ROOT/module-dirs.list > ../kernel${Variant:+-${Variant}}-modules-core.list
sed -e 's/^lib*/\/lib/' %{?zipsed} $RPM_BUILD_ROOT/modules.list >> ../kernel${Variant:+-${Variant}}-modules-core.list
@@ -2762,7 +2830,8 @@ BuildKernel() {
sed -e 's/^lib*/\/lib/' %{?zipsed} $RPM_BUILD_ROOT/mod-kvm.list >> ../kernel${Variant:+-${Variant}}-kvm.list
fi
- # Cleanup
+ # Cleanup kernel variant module lists
+ %{log_msg "Clean up kernel variant module lists"}
rm -f $RPM_BUILD_ROOT/k-d.list
rm -f $RPM_BUILD_ROOT/modules.list
rm -f $RPM_BUILD_ROOT/module-dirs.list
@@ -2777,6 +2846,7 @@ BuildKernel() {
%if %{signmodules}
if [ $DoModules -eq 1 ]; then
+ %{log_msg "Save the signing keys for modules"}
# Save the signing keys so we can sign the modules in __modsign_install_post
cp certs/signing_key.pem certs/signing_key.pem.sign${Variant:++${Variant}}
cp certs/signing_key.x509 certs/signing_key.x509.sign${Variant:++${Variant}}
@@ -2784,6 +2854,7 @@ BuildKernel() {
%endif
# Move the devel headers out of the root file system
+ %{log_msg "Move the devel headers to RPM_BUILD_ROOT"}
mkdir -p $RPM_BUILD_ROOT/usr/src/kernels
mv $RPM_BUILD_ROOT/lib/modules/$KernelVer/build $RPM_BUILD_ROOT/$DevelDir
@@ -2796,15 +2867,23 @@ BuildKernel() {
# Generate vmlinux.h and put it to kernel-devel path
# zfcpdump build does not have btf anymore
if [ "$Variant" != "zfcpdump" ]; then
- bpftool btf dump file vmlinux format c > $RPM_BUILD_ROOT/$DevelDir/vmlinux.h
+ %{log_msg "Build the bootstrap bpftool to generate vmlinux.h"}
+ # Build the bootstrap bpftool to generate vmlinux.h
+ export BPFBOOTSTRAP_CFLAGS=$(echo "%{__global_compiler_flags}" | sed -r "s/\-specs=[^\ ]+\/redhat-annobin-cc1//")
+ export BPFBOOTSTRAP_LDFLAGS=$(echo "%{__global_ldflags}" | sed -r "s/\-specs=[^\ ]+\/redhat-annobin-cc1//")
+ CFLAGS="" LDFLAGS="" make EXTRA_CFLAGS="${BPFBOOTSTRAP_CFLAGS}" EXTRA_LDFLAGS="${BPFBOOTSTRAP_LDFLAGS}" %{?make_opts} %{?clang_make_opts} V=1 -C tools/bpf/bpftool bootstrap
+
+ tools/bpf/bpftool/bootstrap/bpftool btf dump file vmlinux format c > $RPM_BUILD_ROOT/$DevelDir/vmlinux.h
fi
+ %{log_msg "Cleanup kernel-devel and kernel-debuginfo files"}
# prune junk from kernel-devel
find $RPM_BUILD_ROOT/usr/src/kernels -name ".*.cmd" -delete
# prune junk from kernel-debuginfo
find $RPM_BUILD_ROOT/usr/src/kernels -name "*.mod.c" -delete
# Red Hat UEFI Secure Boot CA cert, which can be used to authenticate the kernel
+ %{log_msg "Install certs"}
mkdir -p $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer
%ifarch x86_64 aarch64
install -m 0644 %{secureboot_ca_0} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca-20200609.cer
@@ -2826,6 +2905,7 @@ BuildKernel() {
%endif
%if %{with_ipaclones}
+ %{log_msg "install IPA clones"}
MAXPROCS=$(echo %{?_smp_mflags} | sed -n 's/-j\s*\([0-9]\+\)/\1/p')
if [ -z "$MAXPROCS" ]; then
MAXPROCS=1
@@ -2852,10 +2932,8 @@ mkdir -p $RPM_BUILD_ROOT%{_libexecdir}
cd linux-%{KVERREL}
-
%if %{with_debug}
%if %{with_realtime}
-echo "building rt-debug"
BuildKernel %make_target %kernel_image %{_use_vdso} rt-debug
%endif
@@ -2868,7 +2946,6 @@ BuildKernel %make_target %kernel_image %{_use_vdso} 64k-debug
%endif
%if %{with_up}
-echo "building main debug package"
BuildKernel %make_target %kernel_image %{_use_vdso} debug
%endif
%endif
@@ -2897,6 +2974,7 @@ BuildKernel %make_target %kernel_image %{_use_vdso}
%if !%{with_debug} && !%{with_zfcpdump} && !%{with_up} && !%{with_arm64_16k} && !%{with_arm64_64k} && !%{with_realtime}
# If only building the user space tools, then initialize the build environment
# and some variables so that the various userspace tools can be built.
+%{log_msg "Initialize userspace tools build environment"}
InitBuildVars
%endif
%endif
@@ -2906,14 +2984,22 @@ InitBuildVars
%endif
# LIBBPF_DYNAMIC=1 temporarily removed from the next command, it breaks the build on f39 and 38
%global perf_make \
- %{__make} %{?make_opts} EXTRA_CFLAGS="${RPM_OPT_FLAGS}" LDFLAGS="%{__global_ldflags} -Wl,-E" %{?cross_opts} -C tools/perf V=1 NO_PERF_READ_VDSO32=1 NO_PERF_READ_VDSOX32=1 WERROR=0 NO_LIBUNWIND=1 HAVE_CPLUS_DEMANGLE=1 NO_GTK2=1 NO_STRLCPY=1 NO_BIONIC=1 LIBTRACEEVENT_DYNAMIC=1 %{?perf_build_extra_opts} prefix=%{_prefix} PYTHON=%{__python3}
+ %{__make} %{?make_opts} EXTRA_CFLAGS="${RPM_OPT_FLAGS}" EXTRA_CXXFLAGS="${RPM_OPT_FLAGS}" LDFLAGS="%{__global_ldflags} -Wl,-E" %{?cross_opts} -C tools/perf V=1 NO_PERF_READ_VDSO32=1 NO_PERF_READ_VDSOX32=1 WERROR=0 NO_LIBUNWIND=1 HAVE_CPLUS_DEMANGLE=1 NO_GTK2=1 NO_STRLCPY=1 NO_BIONIC=1 LIBTRACEEVENT_DYNAMIC=1 %{?perf_build_extra_opts} prefix=%{_prefix} PYTHON=%{__python3}
%if %{with_perf}
+%{log_msg "Build perf"}
# perf
# make sure check-headers.sh is executable
chmod +x tools/perf/check-headers.sh
%{perf_make} DESTDIR=$RPM_BUILD_ROOT all
%endif
+%if %{with_libperf}
+%global libperf_make \
+ %{__make} %{?make_opts} EXTRA_CFLAGS="${RPM_OPT_FLAGS}" LDFLAGS="%{__global_ldflags}" %{?cross_opts} -C tools/lib/perf V=1
+ %{log_msg "build libperf"}
+%{libperf_make} DESTDIR=$RPM_BUILD_ROOT
+%endif
+
%global tools_make \
CFLAGS="${RPM_OPT_FLAGS}" LDFLAGS="%{__global_ldflags}" %{make} %{?make_opts}
@@ -2922,44 +3008,56 @@ chmod +x tools/perf/check-headers.sh
# cpupower
# make sure version-gen.sh is executable.
chmod +x tools/power/cpupower/utils/version-gen.sh
+%{log_msg "build cpupower"}
%{tools_make} %{?_smp_mflags} -C tools/power/cpupower CPUFREQ_BENCH=false DEBUG=false
%ifarch x86_64
pushd tools/power/cpupower/debug/x86_64
+ %{log_msg "build centrino-decode powernow-k8-decode"}
%{tools_make} %{?_smp_mflags} centrino-decode powernow-k8-decode
popd
%endif
%ifarch x86_64
pushd tools/power/x86/x86_energy_perf_policy/
+ %{log_msg "build x86_energy_perf_policy"}
%{tools_make}
popd
pushd tools/power/x86/turbostat
+ %{log_msg "build turbostat"}
%{tools_make}
popd
pushd tools/power/x86/intel-speed-select
+ %{log_msg "build intel-speed-select"}
%{tools_make}
popd
pushd tools/arch/x86/intel_sdsi
+ %{log_msg "build intel_sdsi"}
%{tools_make} CFLAGS="${RPM_OPT_FLAGS}"
popd
%endif
%endif
pushd tools/thermal/tmon/
+%{log_msg "build tmon"}
%{tools_make}
popd
pushd tools/iio/
+%{log_msg "build iio"}
%{tools_make}
popd
pushd tools/gpio/
+%{log_msg "build gpio"}
%{tools_make}
popd
# build VM tools
pushd tools/mm/
+%{log_msg "build slabinfo page_owner_sort"}
%{tools_make} slabinfo page_owner_sort
popd
pushd tools/verification/rv/
+%{log_msg "build rv"}
%{tools_make}
popd
pushd tools/tracing/rtla
+%{log_msg "build rtla"}
%{tools_make}
popd
%endif
@@ -2971,26 +3069,31 @@ fi
%if %{with_bpftool}
%global bpftool_make \
%{__make} EXTRA_CFLAGS="${RPM_OPT_FLAGS}" EXTRA_LDFLAGS="%{__global_ldflags}" DESTDIR=$RPM_BUILD_ROOT %{?make_opts} VMLINUX_H="${RPM_VMLINUX_H}" V=1
+%{log_msg "build bpftool"}
pushd tools/bpf/bpftool
%{bpftool_make}
popd
%else
-echo "bpftools disabled ... disabling selftests"
+%{log_msg "bpftools disabled ... disabling selftests"}
%endif
%if %{with_selftests}
+%{log_msg "start build selftests"}
# Unfortunately, samples/bpf/Makefile expects that the headers are installed
# in the source tree. We installed them previously to $RPM_BUILD_ROOT/usr
# but there's no way to tell the Makefile to take them from there.
+%{log_msg "install headers for selftests"}
%{make} %{?_smp_mflags} headers_install
# If we re building only tools without kernel, we need to generate config
# headers and prepare tree for modules building. The modules_prepare target
# will cover both.
if [ ! -f include/generated/autoconf.h ]; then
+ %{log_msg "modules_prepare for selftests"}
%{make} %{?_smp_mflags} modules_prepare
fi
+%{log_msg "build samples/bpf"}
%{make} %{?_smp_mflags} ARCH=$Arch V=1 M=samples/bpf/ VMLINUX_H="${RPM_VMLINUX_H}" || true
# Prevent bpf selftests to build bpftool repeatedly:
@@ -3005,10 +3108,12 @@ pushd tools/testing/selftests
force_targets=""
%endif
+%{log_msg "main selftests compile"}
%{make} %{?_smp_mflags} ARCH=$Arch V=1 TARGETS="bpf mm livepatch net net/forwarding net/mptcp netfilter tc-testing memfd drivers/net/bonding" SKIP_TARGETS="" $force_targets INSTALL_PATH=%{buildroot}%{_libexecdir}/kselftests VMLINUX_H="${RPM_VMLINUX_H}" install
# 'make install' for bpf is broken and upstream refuses to fix it.
# Install the needed files manually.
+%{log_msg "install selftests"}
for dir in bpf bpf/no_alu32 bpf/progs; do
# In ARK, the rpm build continues even if some of the selftests
# cannot be built. It's not always possible to build selftests,
@@ -3025,15 +3130,19 @@ done
%buildroot_save_unstripped "usr/libexec/kselftests/bpf/test_progs-no_alu32"
popd
export -n BPFTOOL
+%{log_msg "end build selftests"}
%endif
%if %{with_doc}
+%{log_msg "start install docs"}
# Make the HTML pages.
+%{log_msg "build html docs"}
%{__make} PYTHON=/usr/bin/python3 htmldocs || %{doc_build_fail}
# sometimes non-world-readable files sneak into the kernel source tree
chmod -R a=rX Documentation
find Documentation -type d | xargs chmod u+w
+%{log_msg "end install docs"}
%endif
# Module signing (modsign)
@@ -3045,17 +3154,17 @@ find Documentation -type d | xargs chmod u+w
%define __modsign_install_post \
if [ "%{signmodules}" -eq "1" ]; then \
- echo "Signing kernel modules ..." \
+ %{log_msg "Signing kernel modules ..."} \
modules_dirs="$(shopt -s nullglob; echo $RPM_BUILD_ROOT/lib/modules/%{KVERREL}*)" \
for modules_dir in $modules_dirs; do \
variant_suffix="${modules_dir#$RPM_BUILD_ROOT/lib/modules/%{KVERREL}}" \
[ "$variant_suffix" == "+zfcpdump" ] && continue \
- echo "Signing modules for %{KVERREL}${variant_suffix}" \
+ %{log_msg "Signing modules for %{KVERREL}${variant_suffix}"} \
%{modsign_cmd} certs/signing_key.pem.sign${variant_suffix} certs/signing_key.x509.sign${variant_suffix} $modules_dir/ \
done \
fi \
if [ "%{zipmodules}" -eq "1" ]; then \
- echo "Compressing kernel modules ..." \
+ %{log_msg "Compressing kernel modules ..."} \
find $RPM_BUILD_ROOT/lib/modules/ -type f -name '*.ko' | xargs -n 16 -P${RPM_BUILD_NCPUS} -r %compression %compression_flags; \
fi \
%{nil}
@@ -3196,10 +3305,9 @@ rm -rf %{buildroot}%{_libdir}/traceevent
%endif
%if %{with_libperf}
-pushd tools/lib/perf
-%{tools_make} DESTDIR=%{buildroot} prefix=%{_prefix} libdir=%{_libdir} install install_headers
+%{libperf_make} DESTDIR=%{buildroot} prefix=%{_prefix} libdir=%{_libdir} install install_headers
+# This is installed on some arches and we don't want to ship it
rm -rf %{buildroot}%{_libdir}/libperf.a
-popd
%endif
%if %{with_tools}
@@ -3859,7 +3967,7 @@ fi\
%ghost /%{image_install_path}/dtb-%{KVERREL}%{?3:+%{3}} \
%endif\
/lib/modules/%{KVERREL}%{?3:+%{3}}/System.map\
-%ghost %attr(0600, root, root) /boot/System.map-%{KVERREL}%{?3:+%{3}}\
+%ghost /boot/System.map-%{KVERREL}%{?3:+%{3}}\
%dir /lib/modules\
%dir /lib/modules/%{KVERREL}%{?3:+%{3}}\
/lib/modules/%{KVERREL}%{?3:+%{3}}/symvers.%compext\
@@ -3998,85 +4106,139 @@ fi\
#
#
%changelog
-* Sat Apr 06 2024 Jan200101 <sentrycraft123@gmail.com> - 6.7.11-202.fsync.1
-- kernel-fsync v6.7.11 BORE migration
+* Sat Apr 06 2024 Jan200101 <sentrycraft123@gmail.com> - 6.8.2-210.fsync
+- kernel-fsync v6.8.2
-* Fri Mar 29 2024 Jan200101 <sentrycraft123@gmail.com> - 6.7.11-201.fsync
-- kernel-fsync v6.7.11
-
-* Wed Mar 27 2024 Augusto Caringi <acaringi@redhat.com> [6.7.11-0]
+* Tue Mar 26 2024 Justin M. Forbes <jforbes@fedoraproject.org> [6.8.2-200]
+- Revert "cpupower: Bump soname version" (Justin M. Forbes)
+- Drop soname for libcpupower.so since we reverted the bump (Justin M. Forbes)
- Config updates for stable (Justin M. Forbes)
+
+* Tue Mar 26 2024 Justin M. Forbes <jforbes@fedoraproject.org> [6.8.2-0]
- xfs: fix SEEK_HOLE/DATA for regions with active COW extents (Dave Chinner)
+- redhat: make libperf-devel require libperf %%{version}-%%{release} (Jan Stancek)
+- kernel.spec: drop custom mode also for System.map ghost entry (Jan Stancek)
+- kernel.spec: fix libperf-debuginfo content (Jan Stancek)
+- redhat/kernel.spec.template: enable cross for base/RT (Peter Robinson)
+- redhat/kernel.spec.template: Fix cross compiling (Peter Robinson)
+- Add more bugs to BugsFixed (Justin M. Forbes)
+- Add bug to BugsFixed (Justin M. Forbes)
+- Turn on CONFIG_READ_ONLY_THP_FOR_FS for Fedora (Justin M. Forbes)
+- Change fedora-stable-release.sh to use git am (Justin M. Forbes)
+- drivers/firmware: skip simpledrm if nvidia-drm.modeset=1 is set (Javier Martinez Canillas)
+- Revert libcpupower soname bump for F38/39 (Justin M. Forbes)
+- Fix up requires for UKI (Justin M. Forbes)
- drm/amd: Flush GFXOFF requests in prepare stage (Mario Limonciello)
-- Linux v6.7.11
+- Linux v6.8.2
-* Mon Mar 18 2024 Augusto Caringi <acaringi@redhat.com> [6.7.10-0]
+* Wed Mar 20 2024 Augusto Caringi <acaringi@redhat.com> [6.8.1-0]
- redhat/configs: Enable CONFIG_MITIGATION_RFDS (Augusto Caringi)
-- Linux v6.7.10
-
-* Wed Mar 06 2024 Augusto Caringi <acaringi@redhat.com> [6.7.9-0]
-- Add some CVE fixes for 6.7.9 (Justin M. Forbes)
-- Bluetooth: rfcomm: Fix null-ptr-deref in rfcomm_check_security (Yuxuan Hu)
-- Linux v6.7.9
-
-* Sun Mar 03 2024 Justin M. Forbes <jforbes@fedoraproject.org> [6.7.8-0]
-- Linux v6.7.8
-
-* Fri Mar 01 2024 Augusto Caringi <acaringi@redhat.com> [6.7.7-0]
-- Add rhbz 2266309 to BugsFixed (Justin M. Forbes)
+- fedora: Enable MCP9600 (Peter Robinson)
+- temporarily remove LIBBPF_DYNAMIC=1 from perf build (Thorsten Leemhuis)
+- Added required files for rebase (Augusto Caringi)
+- Linux v6.8.1
+
+* Tue Mar 12 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.8.0-1]
+- redhat: remove "END OF CHANGELOG" marker from kernel.changelog (Herton R. Krzesinski)
+- gitlab-ci: enable all variants for rawhide/eln builder image gating (Michael Hofmann)
+- Fedora: enable Microchip and their useful drivers (Peter Robinson)
+- spec: suppress "set +x" output (Jan Stancek)
+- redhat/configs: Disable CONFIG_RDMA_SIW (Kamal Heib)
+- redhat/configs: Disable CONFIG_RDMA_RXE (Kamal Heib)
+- redhat/configs: Disable CONFIG_MLX4 (Kamal Heib)
+- redhat/configs: Disable CONFIG_INFINIBAND_HFI1 and CONFIG_INFINIBAND_RDMAVT (Kamal Heib)
+- Consolidate 6.8 configs to common (Justin M. Forbes)
+- Remove rt-automated and master-rt-devel logic (Don Zickus)
+- Add support for CI octopus merging (Don Zickus)
+- redhat/configs: Disable CONFIG_INFINIBAND_VMWARE_PVRDMA (Kamal Heib)
+- gitlab-ci: fix merge tree URL for gating pipelines (Michael Hofmann)
+- Revert "net: bump CONFIG_MAX_SKB_FRAGS to 45" (Marcelo Ricardo Leitner)
+- uki: use systemd-pcrphase dracut module (Gerd Hoffmann)
- Add libperf-debuginfo subpackage (Justin M. Forbes)
-- Linux v6.7.7
-
-* Fri Feb 23 2024 Justin M. Forbes <jforbes@fedoraproject.org> [6.7.6-0]
-- Add CVE fix for 6.7.6 (Justin M. Forbes)
-- Linux v6.7.6
-
-* Sat Feb 17 2024 Justin M. Forbes <jforbes@fedoraproject.org> [6.7.5-0]
-- Backported some CVE fixes lets note them in BugsFixed (Justin M. Forbes)
-- selftests: openvswitch: Add validation for the recursion test (Aaron Conole)
-- net: openvswitch: limit the number of recursions from action sets (Aaron Conole)
-- dm: limit the number of targets and parameter size area (Mikulas Patocka)
-- Add btrfs bug for 6.7.5 (Justin M. Forbes)
-- btrfs: don't refill whole delayed refs block reserve when starting transaction (Filipe Manana)
-- Add 6.7.5 fix to BugsFixed (Justin M. Forbes)
-- drm/amd: Stop evicting resources on APUs in suspend (Mario Limonciello)
-- Revert "drm/amd: flush any delayed gfxoff on suspend entry" (Mario Limonciello)
-- smb: client: set correct id, uid and cruid for multiuser automounts (Paulo Alcantara)
+- redhat/kernel.spec.template: Add log_msg macro (Prarit Bhargava)
+- redhat/configs: Disable CONFIG_INFINIBAND_USNIC (Kamal Heib)
+- Enable CONFIG_BMI323_I2C=m for Fedora x86_64 builds (Hans de Goede)
+- gitlab-ci: drop test_makefile job (Scott Weaver)
+- Enable merge-rt pipeline (Don Zickus)
+- kernel.spec: include the GDB plugin in kernel-debuginfo (Ondrej Mosnacek)
+- Turn on DRM_NOUVEAU_GSP_DEFAULT for Fedora (Justin M. Forbes)
+- Set late new config HDC3020 for Fedora (Justin M. Forbes)
+- redhat/self-test: Update CROSS_DISABLED_PACKAGES (Prarit Bhargava)
+- redhat: Do not build libperf with cross builds (Prarit Bhargava)
+- redhat/configs: enable CONFIG_PINCTRL_INTEL_PLATFORM for RHEL (David Arcari)
+- redhat/configs: enable CONFIG_PINCTRL_METEORPOINT for RHEL (David Arcari)
+- redhat/configs: intel pinctrl config cleanup (David Arcari)
+- redhat/configs: For aarch64/RT, default kstack randomization off (Jeremy Linton)
+- redhat/Makefile: remove an unused target (Ondrej Mosnacek)
+- redhat/Makefile: fix setup-source and document its caveat (Ondrej Mosnacek)
+- redhat/Makefile: fix race condition when making the KABI tarball (Ondrej Mosnacek)
+- redhat/Makefile: refactor KABI tarball creation (Ondrej Mosnacek)
+- Turn XFS_SUPPORT_V4 back on for Fedora (Justin M. Forbes)
+- Add xe to drm module filters (Justin M. Forbes)
+- Turn off the DRM_XE_KUNIT_TEST for Fedora (Justin M. Forbes)
+- Flip secureboot signature order (Justin M. Forbes)
+- all: clean up some removed configs (Peter Robinson)
+- redhat: add nvidia oot signing key (Dave Airlie)
+- gitlab-ci: support CI for zfcpdump kernel on ELN (Michael Hofmann)
+- Fedora configs for 6.8 (Justin M. Forbes)
- Turn off CONFIG_INTEL_VSC for Fedora (Justin M. Forbes)
-- platform/x86: Support for mode FN key (Mark Pearson)
-- Linux v6.7.5
-
-* Mon Feb 05 2024 Augusto Caringi <acaringi@redhat.com> [6.7.4-0]
-- Add keyboard resume bugfixes (Justin M. Forbes)
-- Input: atkbd - do not skip atkbd_deactivate() when skipping ATKBD_CMD_GETID (Hans de Goede)
-- Input: atkbd - skip ATKBD_CMD_SETLEDS when skipping ATKBD_CMD_GETID (Hans de Goede)
-- Linux v6.7.4
-
-* Wed Jan 31 2024 Justin M. Forbes <jforbes@fedoraproject.org> [6.7.3-0]
-- Config update for stable backport (Justin M. Forbes)
-- Add some more bugs to BugsFixed (Justin M. Forbes)
-- Linux v6.7.3
-
-* Fri Jan 26 2024 Justin M. Forbes <jforbes@fedoraproject.org> [6.7.2-0]
+- redhat/configs: rhel wireless requests (Jose Ignacio Tornos Martinez)
+- spec: Set EXTRA_CXXFLAGS for perf demangle-cxx.o (Josh Stone) [2233269]
+- Flip values for FSCACHE and NETFS_SUPPORT to avoid mismatch (Justin M. Forbes)
+- Turn on SECURITY_DMESG_RESTRICT (Justin M. Forbes)
+- redhat: forward-port genlog.py updates from c9s (Jan Stancek)
+- arch/x86: mark x86_64-v1 and x86_64-v2 processors as deprecated (Prarit Bhargava)
+- fedora: Enable more Renesas RZ platform drivers (Peter Robinson)
+- fedora: a few aarch64 drivers and cleanups (Peter Robinson)
+- fedora: cavium nitrox cnn55xx (Peter Robinson)
+- Fix dist-get-buildreqs breakage around perl(ExtUtils::Embed) (Don Zickus)
+- gitlab-ci: merge ark-latest fixes when running ELN pipelines (Michael Hofmann)
+- gitlab-ci: use all arches for container image gating (Michael Hofmann)
+- Add new os-build targets: rt-devel and automotive-devel (Don Zickus)
+- Remove defines forcing tools on, they override cmdline (Justin M. Forbes)
+- Remove separate license tag for libperf (Justin M. Forbes)
+- Don't use upstream bpftool version for Fedora package (Justin M. Forbes)
+- Don't ship libperf.a in libperf-devel (Justin M. Forbes)
+- add libperf packages and enable perf, libperf, tools and bpftool packages (Thorsten Leemhuis)
+- Add scaffolding to build the kernel-headers package for Fedora (Justin M. Forbes)
+- redhat/spec: use distro CFLAGS when building bootstrap bpftool (Artem Savkov)
+- spec: use just-built bpftool for vmlinux.h generation (Yauheni Kaliuta) [2120968]
+- gitlab-ci: enable native tools for Rawhide CI (Michael Hofmann)
+- Revert "Merge branch 'fix-kabi-build-race' into 'os-build'" (Justin M. Forbes)
+- redhat: configs: fedora: Enable sii902x bridge chip driver (Erico Nunes)
+- Enable CONFIG_TCP_CONG_ILLINOIS for RHEL (Davide Caratti)
+- redhat/Makefile: fix setup-source and document its caveat (Ondrej Mosnacek)
+- redhat/Makefile: fix race condition when making the KABI tarball (Ondrej Mosnacek)
+- redhat/Makefile: refactor KABI tarball creation (Ondrej Mosnacek)
+- redhat/configs: Remove HOTPLUG_CPU0 configs (Prarit Bhargava)
+- gitlab-ci: merge ark-latest before building in MR pipelines (Michael Hofmann)
+- CI: include aarch64 in CKI container image gating (Tales Aparecida)
- redhat: spec: Fix update_scripts run for CentOS builds (Neal Gompa)
-- BPF Tool versioning seems incompatible with stable Fedroa (Justin M. Forbes)
-- Linux v6.7.2
-
-* Sat Jan 20 2024 Justin M. Forbes <jforbes@fedoraproject.org> [6.7.1-0]
-- Fix up requires for UKI (Justin M. Forbes)
-- Fix up libperf install (Justin M. Forbes)
-- Drop soname for libcpupower.so since we reverted the bump (Justin M. Forbes)
+- New configs in drivers/crypto (Fedora Kernel Team)
+- net: bump CONFIG_MAX_SKB_FRAGS to 45 (Marcelo Ricardo Leitner)
+- Enable CONFIG_MARVELL_88Q2XXX_PHY (Izabela Bakollari)
+- Remove CONFIG_NET_EMATCH_STACK file for RHEL (Justin M. Forbes)
+- CONFIG_NETFS_SUPPORT should be m after the merge (Justin M. Forbes)
+- Turn FSCACHE and NETFS from m to y in pending (Justin M. Forbes)
- Turn on CONFIG_TCP_AO for Fedora (Justin M. Forbes)
-- temporarily remove LIBBPF_DYNAMIC=1 from perf build (Thorsten Leemhuis)
-- add libperf packages and enable perf, libperf, tools and bpftool packages (Thorsten Leemhuis)
-- Revert "cpupower: Bump soname version" (Justin M. Forbes)
+- Turn on IAA_CRYPTO_STATS for Fedora (Justin M. Forbes)
+- fedora: new drivers and cleanups (Peter Robinson)
- Turn on Renesas RZ for Fedora IOT rhbz2257913 (Justin M. Forbes)
-- Add bugs to BugsFixed (Justin M. Forbes)
-- wifi: ath10k: fix NULL pointer dereference in ath10k_wmi_tlv_op_pull_mgmt_tx_compl_ev() (Xingyuan Mo)
-- drivers/firmware: skip simpledrm if nvidia-drm.modeset=1 is set (Javier Martinez Canillas)
-- Basic scaffolding to create a kernel-headers package (Justin M. Forbes)
-- Initial config for fedora-6.7 branch (Justin M. Forbes)
-- Reset RHEL_RELEASE for 6.8 series (Justin M. Forbes)
+- redhat: filter-modules.sh.rhel: add dell-smm-hwmon (Scott Weaver)
+- Add CONFIG_INTEL_MEI_GSC_PROXY=m for DRM 9.4 stable backport (Mika Penttilä)
+- Set configs for ZRAM_TRACK_ENTRY_ACTIME (Justin M. Forbes)
+- Add python3-pyyaml to buildreqs for kernel-docs (Justin M. Forbes)
+- Add nb7vpq904m to singlemods for ppc64le (Thorsten Leemhuis)
+- include drm bridge helpers in kernel-core package (Thorsten Leemhuis)
+- Add dell-smm-hwmon to singlemods (Thorsten Leemhuis)
+- Add drm_gem_shmem_test to mod-internal.list (Thorsten Leemhuis)
+- redhat: kABI: add missing RH_KABI_SIZE_ALIGN_CHECKS Kconfig option (Sabrina Dubroca)
+- redhat: rh_kabi: introduce RH_KABI_EXCLUDE_WITH_SIZE (Sabrina Dubroca)
+- redhat: rh_kabi: move semicolon inside __RH_KABI_CHECK_SIZE (Sabrina Dubroca)
+- Fix up ZRAM_TRACK_ENTRY_ACTIME in pending (Justin M. Forbes)
+- random: replace import_single_range() with import_ubuf() (Justin M. Forbes)
+- Flip CONFIG_INTEL_PMC_CORE to m for Fedora (Justin M. Forbes)
+- Add CONFIG_ZRAM_TRACK_ENTRY_ACTIME=y to avoid a mismatch (Justin M. Forbes)
- common: cleanup MX3_IPU (Peter Robinson)
- all: The Octeon MDIO driver is aarch64/mips (Peter Robinson)
- common: rtc: remove bq4802 config (Peter Robinson)
@@ -4103,143 +4265,36 @@ fi\
- uki-virt: add virtiofs dracut module (Gerd Hoffmann)
- common: disable the FB device creation (Peter Robinson)
- s390x: There's no FB on Z-series (Peter Robinson)
-- Linux v6.7.1
-
-* Mon Jan 08 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-68]
- fedora: aarch64: enable SM_VIDEOCC_8350 (Peter Robinson)
-- Linux v6.7.0
-
-* Sun Jan 07 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc8.52b1853b080a.67]
-- Linux v6.7.0-0.rc8.52b1853b080a
-
-* Sat Jan 06 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc8.95c8a35f1c01.66]
- fedora: arm64: enable ethernet on newer TI industrial (Peter Robinson)
- fedora: arm64: Disable VIDEO_IMX_MEDIA (Peter Robinson)
- fedora: use common config for Siemens Simatic IPC (Peter Robinson)
- fedora: arm: enable Rockchip SPI flash (Peter Robinson)
- fedora: arm64: enable DRM_TI_SN65DSI83 (Peter Robinson)
-- Linux v6.7.0-0.rc8.95c8a35f1c01
-
-* Fri Jan 05 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc8.1f874787ed9a.65]
-- Linux v6.7.0-0.rc8.1f874787ed9a
-
-* Thu Jan 04 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc8.ac865f00af29.64]
-- Linux v6.7.0-0.rc8.ac865f00af29
-
-* Wed Jan 03 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc8.63]
- kernel.spec: remove kernel-smp reference from scripts (Jan Stancek)
-
-* Tue Jan 02 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc8.62]
- redhat: do not compress the full kernel changelog in the src.rpm (Herton R. Krzesinski)
-
-* Mon Jan 01 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc8.61]
-- Linux v6.7.0-0.rc8
-
-* Sun Dec 31 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc7.453f5db0619e.60]
-- Linux v6.7.0-0.rc7.453f5db0619e
-
-* Sat Dec 30 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc7.f016f7547aee.59]
- Auto consolidate configs for the 6.7 cycle (Justin M. Forbes)
-- Linux v6.7.0-0.rc7.f016f7547aee
-
-* Fri Dec 29 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc7.8735c7c84d1b.58]
-- Linux v6.7.0-0.rc7.8735c7c84d1b
-
-* Thu Dec 28 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc7.f5837722ffec.57]
-- Linux v6.7.0-0.rc7.f5837722ffec
-
-* Tue Dec 26 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc7.fbafc3e621c3.56]
-- Linux v6.7.0-0.rc7.fbafc3e621c3
-
-* Mon Dec 25 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc7.55]
- Enable sound for a line of Huawei laptops (TomZanna)
-
-* Sun Dec 24 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc7.54]
-- Linux v6.7.0-0.rc7
-
-* Sat Dec 23 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc6.5254c0cbc92d.53]
-- Linux v6.7.0-0.rc6.5254c0cbc92d
-
-* Fri Dec 22 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc6.24e0d2e527a3.52]
- fedora: a few cleanups and driver enablements (Peter Robinson)
- fedora: arm64: cleanup Allwinner Pinctrl drivers (Peter Robinson)
- fedora: aarch64: Enable some DW drivers (Peter Robinson)
-- Linux v6.7.0-0.rc6.24e0d2e527a3
-
-* Thu Dec 21 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc6.a4aebe936554.51]
- redhat: ship all the changelog from source git into kernel-doc (Herton R. Krzesinski)
- redhat: create an empty changelog file when changing its name (Herton R. Krzesinski)
-- Linux v6.7.0-0.rc6.a4aebe936554
-
-* Wed Dec 20 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc6.55cb5f43689d.50]
- redhat/self-test: Remove --all from git query (Prarit Bhargava)
-- Linux v6.7.0-0.rc6.55cb5f43689d
-
-* Tue Dec 19 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc6.2cf4f94d8e86.49]
-- Linux v6.7.0-0.rc6.2cf4f94d8e86
-
-* Mon Dec 18 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc6.48]
- Disable accel drivers for Fedora x86 (Kate Hsuan)
- redhat: scripts: An automation script for disabling unused driver for x86 (Kate Hsuan)
- Fix up Fedora LJCA configs and filters (Justin M. Forbes)
-- Linux v6.7.0-0.rc6
-
-* Sun Dec 17 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc5.3b8a9b2e6809.47]
-- Linux v6.7.0-0.rc5.3b8a9b2e6809
-
-* Sat Dec 16 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc5.c8e97fc6b4c0.46]
- Fedora configs for 6.7 (Justin M. Forbes)
-- Linux v6.7.0-0.rc5.c8e97fc6b4c0
-
-* Fri Dec 15 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc5.3f7168591ebf.45]
-- Linux v6.7.0-0.rc5.3f7168591ebf
-
-* Thu Dec 14 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc5.5bd7ef53ffe5.44]
-- Linux v6.7.0-0.rc5.5bd7ef53ffe5
-
-* Wed Dec 13 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc5.88035e5694a8.43]
- Some Fedora config updates for MLX5 (Justin M. Forbes)
- Turn on DRM_ACCEL drivers for Fedora (Justin M. Forbes)
-- Linux v6.7.0-0.rc5.88035e5694a8
-
-* Tue Dec 12 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc5.26aff849438c.42]
- redhat: enable the kfence test (Nico Pache)
-- Linux v6.7.0-0.rc5.26aff849438c
-
-* Mon Dec 11 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc5.41]
- redhat/configs: Enable UCLAMP_TASK for PipeWire and WirePlumber (Neal Gompa)
-- Linux v6.7.0-0.rc5
-
-* Sun Dec 10 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc4.c527f5606aa5.40]
-- Linux v6.7.0-0.rc4.c527f5606aa5
-
-* Sat Dec 09 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc4.f2e8a57ee903.39]
-- Linux v6.7.0-0.rc4.f2e8a57ee903
-
-* Fri Dec 08 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc4.5e3f5b81de80.38]
- Turn on CONFIG_SECURITY_DMESG_RESTRICT for Fedora (Justin M. Forbes)
-- Linux v6.7.0-0.rc4.5e3f5b81de80
-
-* Wed Dec 06 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc4.bee0e7762ad2.37]
- Turn off shellcheck for the fedora-stable-release script (Justin M. Forbes)
-
-* Tue Dec 05 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc4.bee0e7762ad2.36]
- Add some initial Fedora stable branch script to redhat/scripts/fedora/ (Justin M. Forbes)
-- Linux v6.7.0-0.rc4.bee0e7762ad2
-
-* Mon Dec 04 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc4.35]
-- Linux v6.7.0-0.rc4
-
-* Sun Dec 03 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc3.968f35f4ab1c.34]
-- Linux v6.7.0-0.rc3.968f35f4ab1c
-
-* Sat Dec 02 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc3.815fb87b7530.33]
- redhat: disable iptables-legacy compatibility layer (Florian Westphal)
- redhat: disable dccp conntrack support (Florian Westphal)
- configs: enable netfilter_netlink_hook in fedora too (Florian Westphal)
-- Linux v6.7.0-0.rc3.815fb87b7530
-
-* Fri Dec 01 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc3.994d5c58e50e.32]
- ext4: Mark mounting fs-verity filesystems as tech-preview (Alexander Larsson)
- erofs: Add tech preview markers at mount (Alexander Larsson)
- Enable fs-verity (Alexander Larsson)
@@ -4247,121 +4302,30 @@ fi\
- aarch64: enable uki (Gerd Hoffmann)
- redhat: enable CONFIG_SND_SOC_INTEL_SOF_DA7219_MACH as a module for x86 (Patrick Talbert)
- Turn CONFIG_MFD_CS42L43_SDW on for RHEL (Justin M. Forbes)
-- Linux v6.7.0-0.rc3.994d5c58e50e
-
-* Thu Nov 30 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc3.3b47bc037bd4.31]
-- Linux v6.7.0-0.rc3.3b47bc037bd4
-
-* Wed Nov 29 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc3.18d46e76d7c2.30]
- Enable cryptographic acceleration config flags for PowerPC (Mamatha Inamdar)
- Also make vmlinuz-virt.efi world readable (Zbigniew Jędrzejewski-Szmek)
- Drop custom mode for System.map file (Zbigniew Jędrzejewski-Szmek)
-- Linux v6.7.0-0.rc3.18d46e76d7c2
-
-* Tue Nov 28 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc3.df60cee26a2e.29]
- Add drm_exec_test to mod-internal.list for depmod to succeed (Mika Penttilä)
- RHEL 9.4 DRM backport (upto v6.6 kernel), sync Kconfigs (Mika Penttilä)
-- Linux v6.7.0-0.rc3.df60cee26a2e
-
-* Mon Nov 27 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc3.28]
-- Linux v6.7.0-0.rc3
-
-* Sun Nov 26 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc2.090472ed9c92.27]
-- Linux v6.7.0-0.rc2.090472ed9c92
-
-* Sat Nov 25 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc2.0f5cc96c367f.26]
-- Linux v6.7.0-0.rc2.0f5cc96c367f
-
-* Fri Nov 24 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc2.f1a09972a45a.25]
-- Linux v6.7.0-0.rc2.f1a09972a45a
-
-* Thu Nov 23 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc2.9b6de136b5f0.24]
- Turn on USB_DWC3 for Fedora (rhbz 2250955) (Justin M. Forbes)
-- Linux v6.7.0-0.rc2.9b6de136b5f0
-
-* Wed Nov 22 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc2.c2d5304e6c64.23]
- redhat/configs: Move IOMMUFD to common (Alex Williamson)
- redhat: Really remove cpupower files (Prarit Bhargava)
- redhat: remove update_scripts.sh (Prarit Bhargava)
-- Linux v6.7.0-0.rc2.c2d5304e6c64
-
-* Mon Nov 20 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc2.22]
- Fix s390 zfcpfdump bpf build failures for cgroups (Don Zickus)
-- Linux v6.7.0-0.rc2
-
-* Sun Nov 19 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc1.037266a5f723.21]
-- Linux v6.7.0-0.rc1.037266a5f723
-
-* Sat Nov 18 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc1.791c8ab095f7.20]
-- Linux v6.7.0-0.rc1.791c8ab095f7
-
-* Fri Nov 17 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc1.7475e51b8796.19]
-- Linux v6.7.0-0.rc1.7475e51b8796
-
-* Wed Nov 15 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc1.c42d9eeef8e5.18]
-- Linux v6.7.0-0.rc1.c42d9eeef8e5
-
-* Tue Nov 14 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc1.9bacdd8996c7.17]
-- Linux v6.7.0-0.rc1.9bacdd8996c7
-
-* Mon Nov 13 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc1.16]
-- Linux v6.7.0-0.rc1
-
-* Sun Nov 12 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc0.1b907d050735.15]
-- Linux v6.7.0-0.rc0.1b907d050735
-
-* Sat Nov 11 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc0.3ca112b71f35.14]
- Flip CONFIG_NVME_AUTH to m in pending (Justin M. Forbes)
-- Linux v6.7.0-0.rc0.3ca112b71f35
-
-* Fri Nov 10 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc0.89cdf9d55601.13]
-- Linux v6.7.0-0.rc0.89cdf9d55601
-
-* Thu Nov 09 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc0.6bc986ab839c.12]
-- Linux v6.7.0-0.rc0.6bc986ab839c
-
-* Wed Nov 08 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc0.305230142ae0.11]
- Turn CONFIG_SND_SOC_INTEL_AVS_MACH_RT5514 on for Fedora x86 (Jason Montleon)
- kernel/rh_messages.c: Mark functions as possibly unused (Prarit Bhargava)
- Add snd-hda-cirrus-scodec-test to mod-internal.list (Scott Weaver)
-- Linux v6.7.0-0.rc0.305230142ae0
-
-* Tue Nov 07 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc0.be3ca57cfb77.10]
- Turn off BPF_SYSCALL in pending for zfcpdump (Justin M. Forbes)
-- Linux v6.7.0-0.rc0.be3ca57cfb77
-
-* Mon Nov 06 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc0.d2f51b3516da.9]
-- Linux v6.7.0-0.rc0.d2f51b3516da
-
-* Sun Nov 05 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc0.1c41041124bd.8]
-- Linux v6.7.0-0.rc0.1c41041124bd
-
-* Sat Nov 04 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc0.90b0c2b2edd1.7]
- Add mean_and_variance_test to mod-internal.list (Justin M. Forbes)
- Add cfg80211-tests and mac80211-tests to mod-internal.list (Justin M. Forbes)
-- Linux v6.7.0-0.rc0.90b0c2b2edd1
-
-* Fri Nov 03 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc0.8f6f76a6a29f.6]
- Turn on CONFIG_MFD_CS42L43_SDW for RHEL in pending (Justin M. Forbes)
-- Linux v6.7.0-0.rc0.8f6f76a6a29f
-
-* Fri Nov 03 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc0.21e80f3841c0.5]
- Turn on bcachefs for Fedora (Justin M. Forbes)
- redhat: configs: fedora: Enable QSEECOM and friends (Andrew Halaney)
-
-* Thu Nov 02 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc0.21e80f3841c0.4]
- Add clk-fractional-divider_test to mod-internal.list (Thorsten Leemhuis)
- Add gso_test to mod-internal.list (Thorsten Leemhuis)
- Add property-entry-test to mod-internal.list (Thorsten Leemhuis)
-- Linux v6.7.0-0.rc0.21e80f3841c0
-
-* Wed Nov 01 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc0.8bc9e6515183.3]
- Fedora 6.7 configs part 1 (Justin M. Forbes)
-- Trim changelog after version bump (Justin M. Forbes)
-- Linux v6.7.0-0.rc0.8bc9e6515183
-
-* Tue Oct 31 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.7.0-0.rc0.5a6a09e97199.2]
-- Reset RHEL_RELEASE for rebase (Justin M. Forbes)
- [Scheduled job] Catch config mismatches early during upstream merge (Don Zickus)
- redhat/self-test: Update data for KABI xz change (Prarit Bhargava)
- redhat/scripts: Switch KABI tarballs to xz (Prarit Bhargava)
@@ -4443,7 +4407,6 @@ fi\
- redhat: bump libcpupower soname to match upstream (Patrick Talbert)
- Turn on MEMFD_CREATE in pending as it is selected by CONFIG_TMPFS (Justin M. Forbes)
- redhat: drop unneeded build-time dependency gcc-plugin-devel (Coiby Xu)
-- Reset RHEL release and trim changelog after rebase (Justin M. Forbes)
- all: x86: move wayward x86 specific config home (Peter Robinson)
- all: de-dupe non standard config options (Peter Robinson)
- all: x86: clean up microcode loading options (Peter Robinson)
@@ -4572,7 +4535,6 @@ fi\
- Add strcat_kunit to mod-internal.list (Thorsten Leemhuis)
- Add input_test to mod-intenal.list (Thorsten Leemhuis)
- Revert "Remove EXPERT from ARCH_FORCE_MAX_ORDER for aarch64" (Justin M. Forbes)
-- Reset the release number and dedup the changelog after rebase (Justin M. Forbes)
- Fix up rebase issue with CONFIG_ARCH_FORCE_MAX_ORDER (Justin M. Forbes)
- redhat/kernel.spec.template: Disable 'extracting debug info' messages (Prarit Bhargava)
- kernel/rh_messages.c: Another gcc12 warning on redundant NULL test (Florian Weimer) [2216678]
@@ -4675,8 +4637,6 @@ fi\
- Add apple_bl to fedora module_filter (Justin M. Forbes)
- Fix up some config mismatches in new Fedora config items (Justin M. Forbes)
- redhat/configs: disable CONFIG_USB_NET_SR9700 for aarch64 (Jose Ignacio Tornos Martinez)
-- Reset changelog for 6.4 series (Justin M. Forbes)
-- Reset RHEL_RELEASE for the 6.4 cycle (Justin M. Forbes)
- Fix up the RHEL configs for xtables and ipset (Justin M. Forbes)
- ark: enable wifi on aarch64 (Íñigo Huguet)
- fedora: wifi: hermes: disable 802.11b driver (Peter Robinson)
@@ -4760,8 +4720,6 @@ fi\
- kernel.spec: move modules.builtin to kernel-core (Jan Stancek)
- Turn on IDLE_INJECT for x86 (Justin M. Forbes)
- Flip CONFIG_IDLE_INJECT in pending (Justin M. Forbes)
-- Trim Changelog for 6.3 series (Justin M. Forbes)
-- Reset RHEL_RELEASE to 0 for the 6.3 cycle (Justin M. Forbes)
- redhat/configs: Enable CONFIG_V4L_TEST_DRIVERS related drivers (Enric Balletbo i Serra)
- redhat/configs: Enable UCSI_CCG support (David Marlin)
- Fix underline mark-up after text change (Justin M. Forbes)
@@ -4842,8 +4800,6 @@ fi\
- Add drm_kunit_helpers to mod-internal.list (Justin M. Forbes)
- Fix up configs for Fedora so we don't have a mismatch (Justin M. Forbes)
- Turn on CONFIG_SQUASHFS_DECOMP_SINGLE in pending (Justin M. Forbes)
-- Trim changelog for 6.2 cycle (Justin M. Forbes)
-- Reset RHEL_RELEASE for the 6.2 window. (Justin M. Forbes)
- redhat/kernel.spec.template: Fix cpupower file error (Prarit Bhargava)
- redhat/configs: aarhc64: clean up some erratum configs (Mark Salter)
- More Fedora configs for 6.1 as deps were switched on (Justin M. Forbes)
@@ -4938,8 +4894,6 @@ fi\
- Add module filters for Fedora as acpi video has new deps (Justin M. Forbes)
- One more mismatch (Justin M. Forbes)
- Fix up pending for mismatches (Justin M. Forbes)
-- Trim changelog with the reset (Justin M. Forbes)
-- Reset the RHEL_RELEASE in Makefile.rhelver (Justin M. Forbes)
- Forgot too remove this from pending, it is set properly in ark (Justin M. Forbes)
- redhat/Makefile: Add DIST to git tags for RHEL (Prarit Bhargava)
- redhat/configs: Move CONFIG_ARM_SMMU_QCOM_DEBUG to common (Jerry Snitselaar)
@@ -5033,7 +4987,6 @@ fi\
- Leave CONFIG_ACPI_VIDEO on for x86 only (Justin M. Forbes)
- Fix BLAKE2S_ARM and BLAKE2S_X86 configs in pending (Justin M. Forbes)
- Fix pending for ACPI_VIDEO (Justin M. Forbes)
-- Reset release (Justin M. Forbes)
- redhat/configs: Fix rm warning on config warnings (Eric Chanudet)
- redhat/Makefile: Deprecate PREBUILD_GIT_ONLY variable (Prarit Bhargava)
- redhat/Makefile: Deprecate SINGLE_TARBALL variable (Prarit Bhargava)
@@ -5134,9 +5087,7 @@ fi\
- Fix versioning on stable Fedora (Justin M. Forbes)
- Enable PAGE_POOL_STATS for arm only (Justin M. Forbes)
- Revert "Merge branch 'fix-ci-20220523' into 'os-build'" (Patrick Talbert)
-- Fix changelog one more time post rebase (Justin M. Forbes)
- Flip CONFIG_RADIO_ADAPTERS to module for Fedora (Justin M. Forbes)
-- Reset Release for 5.19 (Justin M. Forbes)
- redhat/Makefile: Drop quotation marks around string definitions (Prarit Bhargava)
- Fedora: arm: Updates for QCom devices (Peter Robinson)
- Fedora arm and generic updates for 5.17 (Peter Robinson)
@@ -5297,9 +5248,7 @@ fi\
- SATA_MOBILE_LPM_POLICY is now SATA_LPM_POLICY (Justin M. Forbes)
- Define SNAPSHOT correctly when VERSION_ON_UPSTREAM is 0 (Justin M. Forbes)
- redhat/Makefile: Fix dist-git (Prarit Bhargava)
-- Clean up the changelog (Justin M. Forbes)
- Change the pending-ark CONFIG_DAX to y due to mismatch (Justin M. Forbes)
-- Reset Makefile.rhelver for the 5.18 cycle (Justin M. Forbes)
- Enable net reference count trackers in all debug kernels (Jiri Benc)
- redhat/Makefile: Reorganize variables (Prarit Bhargava)
- redhat/Makefile: Add some descriptions (Prarit Bhargava)
@@ -5485,7 +5434,6 @@ fi\
- redhat/configs: enable KEXEC_SIG for aarch64 RHEL (Coiby Xu) [1994858]
- Fix up fedora and pending configs for PREEMPT to end mismatch (Justin M. Forbes)
- Enable binder for fedora (Justin M. Forbes)
-- Reset RHEL_RELEASE for 5.16 (Justin M. Forbes)
- redhat: configs: Update configs for vmware (Kamal Heib)
- Fedora configs for 5.15 (Justin M. Forbes)
- redhat/kernel.spec.template: don't hardcode gcov arches (Jan Stancek)
@@ -6458,7 +6406,8 @@ fi\
- [initial commit] Add scripts (Laura Abbott)
- [initial commit] Add configs (Laura Abbott)
- [initial commit] Add Makefiles (Laura Abbott)
-- Linux v6.7.0-0.rc0.5a6a09e97199
+- Linux v6.8.0
+
###
# The following Emacs magic makes C-c C-e use UTC dates.