]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
Fixes for 6.14
authorSasha Levin <sashal@kernel.org>
Mon, 2 Jun 2025 13:05:53 +0000 (09:05 -0400)
committerSasha Levin <sashal@kernel.org>
Mon, 2 Jun 2025 13:05:53 +0000 (09:05 -0400)
Signed-off-by: Sasha Levin <sashal@kernel.org>
27 files changed:
queue-6.14/alsa-hda-realtek-restore-auto-mute-mode-for-dell-chr.patch [new file with mode: 0644]
queue-6.14/char-tpm-tpm-buf-add-sanity-check-fallback-in-read-h.patch [new file with mode: 0644]
queue-6.14/dmaengine-idxd-cdev-fix-uninitialized-use-of-sva-in-.patch [new file with mode: 0644]
queue-6.14/drm-amd-display-check-stream-id-dml21-wrapper-to-get.patch [new file with mode: 0644]
queue-6.14/drm-amd-display-fix-link_set_dpms_off-multi-display-.patch [new file with mode: 0644]
queue-6.14/drm-xe-save-the-gt-pointer-in-lrc-and-drop-the-tile.patch [new file with mode: 0644]
queue-6.14/drm-xe-xe2hpg-add-wa_22021007897.patch [new file with mode: 0644]
queue-6.14/gpio-virtuser-fix-potential-out-of-bound-write.patch [new file with mode: 0644]
queue-6.14/hid-amd_sfh-avoid-clearing-reports-for-sra-sensor.patch [new file with mode: 0644]
queue-6.14/hid-quirks-add-adata-xpg-alpha-wireless-mouse-suppor.patch [new file with mode: 0644]
queue-6.14/kbuild-require-pahole-v1.28-or-v1.29-with-gendwarfks.patch [new file with mode: 0644]
queue-6.14/ksmbd-use-list_first_entry_or_null-for-opinfo_get_li.patch [new file with mode: 0644]
queue-6.14/net-ethernet-ti-am65-cpsw-lower-random-mac-address-e.patch [new file with mode: 0644]
queue-6.14/nfs-avoid-flushing-data-while-holding-directory-lock.patch [new file with mode: 0644]
queue-6.14/nfs-don-t-share-pnfs-ds-connections-between-net-name.patch [new file with mode: 0644]
queue-6.14/nvme-all-namespaces-in-a-subsystem-must-adhere-to-a-.patch [new file with mode: 0644]
queue-6.14/nvme-multipath-enable-blk_feat_atomic_writes-for-mul.patch [new file with mode: 0644]
queue-6.14/nvme-pci-add-nvme_quirk_no_deepest_ps-quirk-for-soli.patch [new file with mode: 0644]
queue-6.14/nvmet-pci-epf-cleanup-nvmet_pci_epf_raise_irq.patch [new file with mode: 0644]
queue-6.14/phy-phy-rockchip-samsung-hdptx-fix-phy-pll-output-50.patch [new file with mode: 0644]
queue-6.14/phy-starfive-jh7110-usb-fix-usb-2.0-host-occasional-.patch [new file with mode: 0644]
queue-6.14/platform-x86-fujitsu-laptop-support-lifebook-s2110-h.patch [new file with mode: 0644]
queue-6.14/platform-x86-thinkpad_acpi-ignore-battery-threshold-.patch [new file with mode: 0644]
queue-6.14/platform-x86-thinkpad_acpi-support-also-nec-lavie-x1.patch [new file with mode: 0644]
queue-6.14/series
queue-6.14/spi-spi-sun4i-fix-early-activation.patch [new file with mode: 0644]
queue-6.14/um-let-make-clean-properly-clean-underlying-subarch-.patch [new file with mode: 0644]

diff --git a/queue-6.14/alsa-hda-realtek-restore-auto-mute-mode-for-dell-chr.patch b/queue-6.14/alsa-hda-realtek-restore-auto-mute-mode-for-dell-chr.patch
new file mode 100644 (file)
index 0000000..c917a7c
--- /dev/null
@@ -0,0 +1,39 @@
+From 3444a3c1570edf1067246be094aa8c000ac1db3a Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 16 May 2025 14:53:37 +0800
+Subject: ALSA: hda/realtek - restore auto-mute mode for Dell Chrome platform
+
+From: Kailang Yang <kailang@realtek.com>
+
+[ Upstream commit 5ad8a4ddc45048bc2fe23b75357b6bf185db004f ]
+
+This board need to shutdown Class-D amp to avoid EMI issue.
+Restore the Auto-Mute mode item will off pin control when Auto-mute mode was enable.
+
+Signed-off-by: Kailang Yang <kailang@realtek.com>
+Links: https://lore.kernel.org/ee8bbe5236464c369719d96269ba8ef8@realtek.com
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ sound/pci/hda/patch_realtek.c | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
+index 9e5c36ad8f52d..3f09ceac08ada 100644
+--- a/sound/pci/hda/patch_realtek.c
++++ b/sound/pci/hda/patch_realtek.c
+@@ -6811,7 +6811,10 @@ static void alc256_fixup_chromebook(struct hda_codec *codec,
+       switch (action) {
+       case HDA_FIXUP_ACT_PRE_PROBE:
+-              spec->gen.suppress_auto_mute = 1;
++              if (codec->core.subsystem_id == 0x10280d76)
++                      spec->gen.suppress_auto_mute = 0;
++              else
++                      spec->gen.suppress_auto_mute = 1;
+               spec->gen.suppress_auto_mic = 1;
+               spec->en_3kpull_low = false;
+               break;
+-- 
+2.39.5
+
diff --git a/queue-6.14/char-tpm-tpm-buf-add-sanity-check-fallback-in-read-h.patch b/queue-6.14/char-tpm-tpm-buf-add-sanity-check-fallback-in-read-h.patch
new file mode 100644 (file)
index 0000000..51985b4
--- /dev/null
@@ -0,0 +1,68 @@
+From 91b6dc38b8258ce65fae977af12e1e5b27ec649a Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 10 Apr 2025 16:04:42 +0530
+Subject: char: tpm: tpm-buf: Add sanity check fallback in read helpers
+
+From: Purva Yeshi <purvayeshi550@gmail.com>
+
+[ Upstream commit 32d495b384a2db7d23c2295e03e6b6edb1c0db8d ]
+
+Fix Smatch-detected issue:
+
+drivers/char/tpm/tpm-buf.c:208 tpm_buf_read_u8() error:
+uninitialized symbol 'value'.
+drivers/char/tpm/tpm-buf.c:225 tpm_buf_read_u16() error:
+uninitialized symbol 'value'.
+drivers/char/tpm/tpm-buf.c:242 tpm_buf_read_u32() error:
+uninitialized symbol 'value'.
+
+Zero-initialize the return values in tpm_buf_read_u8(), tpm_buf_read_u16(),
+and tpm_buf_read_u32() to guard against uninitialized data in case of a
+boundary overflow.
+
+Add defensive initialization ensures the return values are always defined,
+preventing undefined behavior if the unexpected happens.
+
+Signed-off-by: Purva Yeshi <purvayeshi550@gmail.com>
+Reviewed-by: Stefano Garzarella <sgarzare@redhat.com>
+Reviewed-by: Jarkko Sakkinen <jarkko@kernel.org>
+Signed-off-by: Jarkko Sakkinen <jarkko@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/char/tpm/tpm-buf.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/char/tpm/tpm-buf.c b/drivers/char/tpm/tpm-buf.c
+index e49a19fea3bdf..dc882fc9fa9ef 100644
+--- a/drivers/char/tpm/tpm-buf.c
++++ b/drivers/char/tpm/tpm-buf.c
+@@ -201,7 +201,7 @@ static void tpm_buf_read(struct tpm_buf *buf, off_t *offset, size_t count, void
+  */
+ u8 tpm_buf_read_u8(struct tpm_buf *buf, off_t *offset)
+ {
+-      u8 value;
++      u8 value = 0;
+       tpm_buf_read(buf, offset, sizeof(value), &value);
+@@ -218,7 +218,7 @@ EXPORT_SYMBOL_GPL(tpm_buf_read_u8);
+  */
+ u16 tpm_buf_read_u16(struct tpm_buf *buf, off_t *offset)
+ {
+-      u16 value;
++      u16 value = 0;
+       tpm_buf_read(buf, offset, sizeof(value), &value);
+@@ -235,7 +235,7 @@ EXPORT_SYMBOL_GPL(tpm_buf_read_u16);
+  */
+ u32 tpm_buf_read_u32(struct tpm_buf *buf, off_t *offset)
+ {
+-      u32 value;
++      u32 value = 0;
+       tpm_buf_read(buf, offset, sizeof(value), &value);
+-- 
+2.39.5
+
diff --git a/queue-6.14/dmaengine-idxd-cdev-fix-uninitialized-use-of-sva-in-.patch b/queue-6.14/dmaengine-idxd-cdev-fix-uninitialized-use-of-sva-in-.patch
new file mode 100644 (file)
index 0000000..7a414d6
--- /dev/null
@@ -0,0 +1,60 @@
+From 9d8e3ad1505d05f76338e8648be325533e466e71 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 10 Apr 2025 16:32:16 +0530
+Subject: dmaengine: idxd: cdev: Fix uninitialized use of sva in idxd_cdev_open
+
+From: Purva Yeshi <purvayeshi550@gmail.com>
+
+[ Upstream commit 97994333de2b8062d2df4e6ce0dc65c2dc0f40dc ]
+
+Fix Smatch-detected issue:
+drivers/dma/idxd/cdev.c:321 idxd_cdev_open() error:
+uninitialized symbol 'sva'.
+
+'sva' pointer may be used uninitialized in error handling paths.
+Specifically, if PASID support is enabled and iommu_sva_bind_device()
+returns an error, the code jumps to the cleanup label and attempts to
+call iommu_sva_unbind_device(sva) without ensuring that sva was
+successfully assigned. This triggers a Smatch warning about an
+uninitialized symbol.
+
+Initialize sva to NULL at declaration and add a check using
+IS_ERR_OR_NULL() before unbinding the device. This ensures the
+function does not use an invalid or uninitialized pointer during
+cleanup.
+
+Signed-off-by: Purva Yeshi <purvayeshi550@gmail.com>
+Reviewed-by: Dave Jiang <dave.jiang@intel.com>
+Acked-by: Vinicius Costa Gomes <vinicius.gomes@intel.com>
+Link: https://lore.kernel.org/r/20250410110216.21592-1-purvayeshi550@gmail.com
+Signed-off-by: Vinod Koul <vkoul@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/dma/idxd/cdev.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/dma/idxd/cdev.c b/drivers/dma/idxd/cdev.c
+index cd57067e82180..6d12033649f81 100644
+--- a/drivers/dma/idxd/cdev.c
++++ b/drivers/dma/idxd/cdev.c
+@@ -222,7 +222,7 @@ static int idxd_cdev_open(struct inode *inode, struct file *filp)
+       struct idxd_wq *wq;
+       struct device *dev, *fdev;
+       int rc = 0;
+-      struct iommu_sva *sva;
++      struct iommu_sva *sva = NULL;
+       unsigned int pasid;
+       struct idxd_cdev *idxd_cdev;
+@@ -317,7 +317,7 @@ static int idxd_cdev_open(struct inode *inode, struct file *filp)
+       if (device_user_pasid_enabled(idxd))
+               idxd_xa_pasid_remove(ctx);
+ failed_get_pasid:
+-      if (device_user_pasid_enabled(idxd))
++      if (device_user_pasid_enabled(idxd) && !IS_ERR_OR_NULL(sva))
+               iommu_sva_unbind_device(sva);
+ failed:
+       mutex_unlock(&wq->wq_lock);
+-- 
+2.39.5
+
diff --git a/queue-6.14/drm-amd-display-check-stream-id-dml21-wrapper-to-get.patch b/queue-6.14/drm-amd-display-check-stream-id-dml21-wrapper-to-get.patch
new file mode 100644 (file)
index 0000000..57b1b65
--- /dev/null
@@ -0,0 +1,131 @@
+From fd5771fec9227f08ef533aad96bec9eaba697333 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 29 Apr 2025 05:03:30 +0800
+Subject: drm/amd/display: check stream id dml21 wrapper to get plane_id
+
+From: Aurabindo Pillai <aurabindo.pillai@amd.com>
+
+[ Upstream commit 2ddac70fed50485aa4ae49cdb7478ce41d8d4715 ]
+
+[Why & How]
+Fix a false positive warning which occurs due to lack of correct checks
+when querying plane_id in DML21. This fixes the warning when performing a
+mode1 reset (cat /sys/kernel/debug/dri/1/amdgpu_gpu_recover):
+
+[   35.751250] WARNING: CPU: 11 PID: 326 at /tmp/amd.PHpyAl7v/amd/amdgpu/../display/dc/dml2/dml2_dc_resource_mgmt.c:91 dml2_map_dc_pipes+0x243d/0x3f40 [amdgpu]
+[   35.751434] Modules linked in: amdgpu(OE) amddrm_ttm_helper(OE) amdttm(OE) amddrm_buddy(OE) amdxcp(OE) amddrm_exec(OE) amd_sched(OE) amdkcl(OE) drm_suballoc_helper drm_ttm_helper ttm drm_display_helper cec rc_core i2c_algo_bit rfcomm qrtr cmac algif_hash algif_skcipher af_alg bnep amd_atl intel_rapl_msr intel_rapl_common snd_hda_codec_hdmi snd_hda_intel edac_mce_amd snd_intel_dspcfg snd_intel_sdw_acpi snd_hda_codec kvm_amd snd_hda_core snd_hwdep snd_pcm kvm snd_seq_midi snd_seq_midi_event snd_rawmidi crct10dif_pclmul polyval_clmulni polyval_generic btusb ghash_clmulni_intel sha256_ssse3 btrtl sha1_ssse3 snd_seq btintel aesni_intel btbcm btmtk snd_seq_device crypto_simd sunrpc cryptd bluetooth snd_timer ccp binfmt_misc rapl snd i2c_piix4 wmi_bmof gigabyte_wmi k10temp i2c_smbus soundcore gpio_amdpt mac_hid sch_fq_codel msr parport_pc ppdev lp parport efi_pstore nfnetlink dmi_sysfs ip_tables x_tables autofs4 hid_generic usbhid hid crc32_pclmul igc ahci xhci_pci libahci xhci_pci_renesas video wmi
+[   35.751501] CPU: 11 UID: 0 PID: 326 Comm: kworker/u64:9 Tainted: G           OE      6.11.0-21-generic #21~24.04.1-Ubuntu
+[   35.751504] Tainted: [O]=OOT_MODULE, [E]=UNSIGNED_MODULE
+[   35.751505] Hardware name: Gigabyte Technology Co., Ltd. X670E AORUS PRO X/X670E AORUS PRO X, BIOS F30 05/22/2024
+[   35.751506] Workqueue: amdgpu-reset-dev amdgpu_debugfs_reset_work [amdgpu]
+[   35.751638] RIP: 0010:dml2_map_dc_pipes+0x243d/0x3f40 [amdgpu]
+[   35.751794] Code: 6d 0c 00 00 8b 84 24 88 00 00 00 41 3b 44 9c 20 0f 84 fc 07 00 00 48 83 c3 01 48 83 fb 06 75 b3 4c 8b 64 24 68 4c 8b 6c 24 40 <0f> 0b b8 06 00 00 00 49 8b 94 24 a0 49 00 00 89 c3 83 f8 07 0f 87
+[   35.751796] RSP: 0018:ffffbfa3805d7680 EFLAGS: 00010246
+[   35.751798] RAX: 0000000000010000 RBX: 0000000000000006 RCX: 0000000000000000
+[   35.751799] RDX: 0000000000000000 RSI: 0000000000000005 RDI: 0000000000000000
+[   35.751800] RBP: ffffbfa3805d78f0 R08: 0000000000000000 R09: 0000000000000000
+[   35.751801] R10: 0000000000000000 R11: 0000000000000000 R12: ffffbfa383249000
+[   35.751802] R13: ffffa0e68f280000 R14: ffffbfa383249658 R15: 0000000000000000
+[   35.751803] FS:  0000000000000000(0000) GS:ffffa0edbe580000(0000) knlGS:0000000000000000
+[   35.751804] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
+[   35.751805] CR2: 00005d847ef96c58 CR3: 000000041de3e000 CR4: 0000000000f50ef0
+[   35.751806] PKRU: 55555554
+[   35.751807] Call Trace:
+[   35.751810]  <TASK>
+[   35.751816]  ? show_regs+0x6c/0x80
+[   35.751820]  ? __warn+0x88/0x140
+[   35.751822]  ? dml2_map_dc_pipes+0x243d/0x3f40 [amdgpu]
+[   35.751964]  ? report_bug+0x182/0x1b0
+[   35.751969]  ? handle_bug+0x6e/0xb0
+[   35.751972]  ? exc_invalid_op+0x18/0x80
+[   35.751974]  ? asm_exc_invalid_op+0x1b/0x20
+[   35.751978]  ? dml2_map_dc_pipes+0x243d/0x3f40 [amdgpu]
+[   35.752117]  ? math_pow+0x48/0xa0 [amdgpu]
+[   35.752256]  ? srso_alias_return_thunk+0x5/0xfbef5
+[   35.752260]  ? math_pow+0x48/0xa0 [amdgpu]
+[   35.752400]  ? srso_alias_return_thunk+0x5/0xfbef5
+[   35.752403]  ? math_pow+0x11/0xa0 [amdgpu]
+[   35.752524]  ? srso_alias_return_thunk+0x5/0xfbef5
+[   35.752526]  ? core_dcn4_mode_programming+0xe4d/0x20d0 [amdgpu]
+[   35.752663]  ? srso_alias_return_thunk+0x5/0xfbef5
+[   35.752669]  dml21_validate+0x3d4/0x980 [amdgpu]
+
+Reviewed-by: Austin Zheng <austin.zheng@amd.com>
+Signed-off-by: Aurabindo Pillai <aurabindo.pillai@amd.com>
+Signed-off-by: Ray Wu <ray.wu@amd.com>
+Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+(cherry picked from commit f8ad62c0a93e5dd94243e10f1b742232e4d6411e)
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ .../dc/dml2/dml21/dml21_translation_helper.c  | 20 ++++++++++---------
+ 1 file changed, 11 insertions(+), 9 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/display/dc/dml2/dml21/dml21_translation_helper.c b/drivers/gpu/drm/amd/display/dc/dml2/dml21/dml21_translation_helper.c
+index 0c8ec30ea6726..731fbd4bc600b 100644
+--- a/drivers/gpu/drm/amd/display/dc/dml2/dml21/dml21_translation_helper.c
++++ b/drivers/gpu/drm/amd/display/dc/dml2/dml21/dml21_translation_helper.c
+@@ -910,7 +910,7 @@ static void populate_dml21_plane_config_from_plane_state(struct dml2_context *dm
+ }
+ //TODO : Could be possibly moved to a common helper layer.
+-static bool dml21_wrapper_get_plane_id(const struct dc_state *context, const struct dc_plane_state *plane, unsigned int *plane_id)
++static bool dml21_wrapper_get_plane_id(const struct dc_state *context, unsigned int stream_id, const struct dc_plane_state *plane, unsigned int *plane_id)
+ {
+       int i, j;
+@@ -918,10 +918,12 @@ static bool dml21_wrapper_get_plane_id(const struct dc_state *context, const str
+               return false;
+       for (i = 0; i < context->stream_count; i++) {
+-              for (j = 0; j < context->stream_status[i].plane_count; j++) {
+-                      if (context->stream_status[i].plane_states[j] == plane) {
+-                              *plane_id = (i << 16) | j;
+-                              return true;
++              if (context->streams[i]->stream_id == stream_id) {
++                      for (j = 0; j < context->stream_status[i].plane_count; j++) {
++                              if (context->stream_status[i].plane_states[j] == plane) {
++                                      *plane_id = (i << 16) | j;
++                                      return true;
++                              }
+                       }
+               }
+       }
+@@ -944,14 +946,14 @@ static unsigned int map_stream_to_dml21_display_cfg(const struct dml2_context *d
+       return location;
+ }
+-static unsigned int map_plane_to_dml21_display_cfg(const struct dml2_context *dml_ctx,
++static unsigned int map_plane_to_dml21_display_cfg(const struct dml2_context *dml_ctx, unsigned int stream_id,
+               const struct dc_plane_state *plane, const struct dc_state *context)
+ {
+       unsigned int plane_id;
+       int i = 0;
+       int location = -1;
+-      if (!dml21_wrapper_get_plane_id(context, plane, &plane_id)) {
++      if (!dml21_wrapper_get_plane_id(context, stream_id, plane, &plane_id)) {
+               ASSERT(false);
+               return -1;
+       }
+@@ -1037,7 +1039,7 @@ bool dml21_map_dc_state_into_dml_display_cfg(const struct dc *in_dc, struct dc_s
+                       dml_dispcfg->plane_descriptors[disp_cfg_plane_location].stream_index = disp_cfg_stream_location;
+               } else {
+                       for (plane_index = 0; plane_index < context->stream_status[stream_index].plane_count; plane_index++) {
+-                              disp_cfg_plane_location = map_plane_to_dml21_display_cfg(dml_ctx, context->stream_status[stream_index].plane_states[plane_index], context);
++                              disp_cfg_plane_location = map_plane_to_dml21_display_cfg(dml_ctx, context->streams[stream_index]->stream_id, context->stream_status[stream_index].plane_states[plane_index], context);
+                               if (disp_cfg_plane_location < 0)
+                                       disp_cfg_plane_location = dml_dispcfg->num_planes++;
+@@ -1048,7 +1050,7 @@ bool dml21_map_dc_state_into_dml_display_cfg(const struct dc *in_dc, struct dc_s
+                               populate_dml21_plane_config_from_plane_state(dml_ctx, &dml_dispcfg->plane_descriptors[disp_cfg_plane_location], context->stream_status[stream_index].plane_states[plane_index], context, stream_index);
+                               dml_dispcfg->plane_descriptors[disp_cfg_plane_location].stream_index = disp_cfg_stream_location;
+-                              if (dml21_wrapper_get_plane_id(context, context->stream_status[stream_index].plane_states[plane_index], &dml_ctx->v21.dml_to_dc_pipe_mapping.disp_cfg_to_plane_id[disp_cfg_plane_location]))
++                              if (dml21_wrapper_get_plane_id(context, context->streams[stream_index]->stream_id, context->stream_status[stream_index].plane_states[plane_index], &dml_ctx->v21.dml_to_dc_pipe_mapping.disp_cfg_to_plane_id[disp_cfg_plane_location]))
+                                       dml_ctx->v21.dml_to_dc_pipe_mapping.disp_cfg_to_plane_id_valid[disp_cfg_plane_location] = true;
+                               /* apply forced pstate policy */
+-- 
+2.39.5
+
diff --git a/queue-6.14/drm-amd-display-fix-link_set_dpms_off-multi-display-.patch b/queue-6.14/drm-amd-display-fix-link_set_dpms_off-multi-display-.patch
new file mode 100644 (file)
index 0000000..11329aa
--- /dev/null
@@ -0,0 +1,71 @@
+From 4325215b42e04cf9facf03e906ccd5be961d3ee4 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 24 Apr 2025 10:02:59 -0400
+Subject: drm/amd/display: fix link_set_dpms_off multi-display MST corner case
+
+From: George Shen <george.shen@amd.com>
+
+[ Upstream commit 3c1a467372e0c356b1d3c59f6d199ed5a6612dd1 ]
+
+[Why & How]
+When MST config is unplugged/replugged too quickly, it can potentially
+result in a scenario where previous DC state has not been reset before
+the HPD link detection sequence begins. In this case, driver will
+disable the streams/link prior to re-enabling the link for link
+training.
+
+There is a bug in the current logic that does not account for the fact
+that current_state can be released and cleared prior to swapping to a
+new state (resulting in the pipe_ctx stream pointers to be cleared) in
+between disabling streams.
+
+To resolve this, cache the original streams prior to committing any
+stream updates.
+
+Reviewed-by: Wenjing Liu <wenjing.liu@amd.com>
+Signed-off-by: George Shen <george.shen@amd.com>
+Signed-off-by: Ray Wu <ray.wu@amd.com>
+Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+(cherry picked from commit 1561782686ccc36af844d55d31b44c938dd412dc)
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/gpu/drm/amd/display/dc/link/link_dpms.c | 13 +++++++++++--
+ 1 file changed, 11 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/display/dc/link/link_dpms.c b/drivers/gpu/drm/amd/display/dc/link/link_dpms.c
+index ec7de9c01fab0..e95ec72b4096c 100644
+--- a/drivers/gpu/drm/amd/display/dc/link/link_dpms.c
++++ b/drivers/gpu/drm/amd/display/dc/link/link_dpms.c
+@@ -148,6 +148,7 @@ void link_blank_dp_stream(struct dc_link *link, bool hw_init)
+ void link_set_all_streams_dpms_off_for_link(struct dc_link *link)
+ {
+       struct pipe_ctx *pipes[MAX_PIPES];
++      struct dc_stream_state *streams[MAX_PIPES];
+       struct dc_state *state = link->dc->current_state;
+       uint8_t count;
+       int i;
+@@ -160,10 +161,18 @@ void link_set_all_streams_dpms_off_for_link(struct dc_link *link)
+       link_get_master_pipes_with_dpms_on(link, state, &count, pipes);
++      /* The subsequent call to dc_commit_updates_for_stream for a full update
++       * will release the current state and swap to a new state. Releasing the
++       * current state results in the stream pointers in the pipe_ctx structs
++       * to be zero'd. Hence, cache all streams prior to dc_commit_updates_for_stream.
++       */
++      for (i = 0; i < count; i++)
++              streams[i] = pipes[i]->stream;
++
+       for (i = 0; i < count; i++) {
+-              stream_update.stream = pipes[i]->stream;
++              stream_update.stream = streams[i];
+               dc_commit_updates_for_stream(link->ctx->dc, NULL, 0,
+-                              pipes[i]->stream, &stream_update,
++                              streams[i], &stream_update,
+                               state);
+       }
+-- 
+2.39.5
+
diff --git a/queue-6.14/drm-xe-save-the-gt-pointer-in-lrc-and-drop-the-tile.patch b/queue-6.14/drm-xe-save-the-gt-pointer-in-lrc-and-drop-the-tile.patch
new file mode 100644 (file)
index 0000000..5c06472
--- /dev/null
@@ -0,0 +1,70 @@
+From 920a1279aac5d8bfcb69fd99919f94467aaccff0 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 9 May 2025 09:12:02 -0700
+Subject: drm/xe: Save the gt pointer in lrc and drop the tile
+
+From: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
+
+[ Upstream commit ce15563e49fb0b5c802564433ff8468acd1339eb ]
+
+Save the gt pointer in the lrc so that it can used for gt based helpers.
+
+Signed-off-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
+Reviewed-by: Matthew Brost <matthew.brost@intel.com>
+Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com>
+Link: https://lore.kernel.org/r/20250509161159.2173069-7-umesh.nerlige.ramappa@intel.com
+(cherry picked from commit 741d3ef8b8b88fab2729ca89de1180e49bc9cef0)
+Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/gpu/drm/xe/xe_lrc.c       | 4 ++--
+ drivers/gpu/drm/xe/xe_lrc_types.h | 4 ++--
+ 2 files changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/gpu/drm/xe/xe_lrc.c b/drivers/gpu/drm/xe/xe_lrc.c
+index 2a953c4f7d5dd..5d7629bb6b8dd 100644
+--- a/drivers/gpu/drm/xe/xe_lrc.c
++++ b/drivers/gpu/drm/xe/xe_lrc.c
+@@ -864,7 +864,7 @@ static void *empty_lrc_data(struct xe_hw_engine *hwe)
+ static void xe_lrc_set_ppgtt(struct xe_lrc *lrc, struct xe_vm *vm)
+ {
+-      u64 desc = xe_vm_pdp4_descriptor(vm, lrc->tile);
++      u64 desc = xe_vm_pdp4_descriptor(vm, gt_to_tile(lrc->gt));
+       xe_lrc_write_ctx_reg(lrc, CTX_PDP0_UDW, upper_32_bits(desc));
+       xe_lrc_write_ctx_reg(lrc, CTX_PDP0_LDW, lower_32_bits(desc));
+@@ -895,6 +895,7 @@ static int xe_lrc_init(struct xe_lrc *lrc, struct xe_hw_engine *hwe,
+       int err;
+       kref_init(&lrc->refcount);
++      lrc->gt = gt;
+       lrc->flags = 0;
+       lrc_size = ring_size + xe_gt_lrc_size(gt, hwe->class);
+       if (xe_gt_has_indirect_ring_state(gt))
+@@ -913,7 +914,6 @@ static int xe_lrc_init(struct xe_lrc *lrc, struct xe_hw_engine *hwe,
+               return PTR_ERR(lrc->bo);
+       lrc->size = lrc_size;
+-      lrc->tile = gt_to_tile(hwe->gt);
+       lrc->ring.size = ring_size;
+       lrc->ring.tail = 0;
+       lrc->ctx_timestamp = 0;
+diff --git a/drivers/gpu/drm/xe/xe_lrc_types.h b/drivers/gpu/drm/xe/xe_lrc_types.h
+index 71ecb453f811a..cd38586ae9893 100644
+--- a/drivers/gpu/drm/xe/xe_lrc_types.h
++++ b/drivers/gpu/drm/xe/xe_lrc_types.h
+@@ -25,8 +25,8 @@ struct xe_lrc {
+       /** @size: size of lrc including any indirect ring state page */
+       u32 size;
+-      /** @tile: tile which this LRC belongs to */
+-      struct xe_tile *tile;
++      /** @gt: gt which this LRC belongs to */
++      struct xe_gt *gt;
+       /** @flags: LRC flags */
+ #define XE_LRC_FLAG_INDIRECT_RING_STATE               0x1
+-- 
+2.39.5
+
diff --git a/queue-6.14/drm-xe-xe2hpg-add-wa_22021007897.patch b/queue-6.14/drm-xe-xe2hpg-add-wa_22021007897.patch
new file mode 100644 (file)
index 0000000..0d945e0
--- /dev/null
@@ -0,0 +1,55 @@
+From 5caa984e84a8cd26b000b634ff6acdad0d4a5692 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 12 May 2025 06:50:04 +0000
+Subject: drm/xe/xe2hpg: Add Wa_22021007897
+
+From: Aradhya Bhatia <aradhya.bhatia@intel.com>
+
+[ Upstream commit b1f704107cf27906a9cea542b626b96019104663 ]
+
+Add Wa_22021007897 for the Xe2_HPG (graphics version: 20.01) IP. It is
+a permanent workaround, and applicable on all the steppings.
+
+Reviewed-by: Gustavo Sousa <gustavo.sousa@intel.com>
+Reviewed-by: Tejas Upadhyay <tejas.upadhyay@intel.com>
+Signed-off-by: Aradhya Bhatia <aradhya.bhatia@intel.com>
+Link: https://lore.kernel.org/r/20250512065004.2576-1-aradhya.bhatia@intel.com
+Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
+(cherry picked from commit e5c13e2c505b73a8667ef9a0fd5cbd4227e483e6)
+Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/gpu/drm/xe/regs/xe_gt_regs.h | 1 +
+ drivers/gpu/drm/xe/xe_wa.c           | 4 ++++
+ 2 files changed, 5 insertions(+)
+
+diff --git a/drivers/gpu/drm/xe/regs/xe_gt_regs.h b/drivers/gpu/drm/xe/regs/xe_gt_regs.h
+index d0ea8a55fd9c2..ab95d3545a72c 100644
+--- a/drivers/gpu/drm/xe/regs/xe_gt_regs.h
++++ b/drivers/gpu/drm/xe/regs/xe_gt_regs.h
+@@ -157,6 +157,7 @@
+ #define XEHPG_SC_INSTDONE_EXTRA2              XE_REG_MCR(0x7108)
+ #define COMMON_SLICE_CHICKEN4                 XE_REG(0x7300, XE_REG_OPTION_MASKED)
++#define   SBE_PUSH_CONSTANT_BEHIND_FIX_ENABLE REG_BIT(12)
+ #define   DISABLE_TDC_LOAD_BALANCING_CALC     REG_BIT(6)
+ #define COMMON_SLICE_CHICKEN3                         XE_REG(0x7304, XE_REG_OPTION_MASKED)
+diff --git a/drivers/gpu/drm/xe/xe_wa.c b/drivers/gpu/drm/xe/xe_wa.c
+index 65bfb2f894d00..56257430b3642 100644
+--- a/drivers/gpu/drm/xe/xe_wa.c
++++ b/drivers/gpu/drm/xe/xe_wa.c
+@@ -801,6 +801,10 @@ static const struct xe_rtp_entry_sr lrc_was[] = {
+         XE_RTP_RULES(GRAPHICS_VERSION(2001), ENGINE_CLASS(RENDER)),
+         XE_RTP_ACTIONS(SET(CHICKEN_RASTER_1, DIS_CLIP_NEGATIVE_BOUNDING_BOX))
+       },
++      { XE_RTP_NAME("22021007897"),
++        XE_RTP_RULES(GRAPHICS_VERSION(2001), ENGINE_CLASS(RENDER)),
++        XE_RTP_ACTIONS(SET(COMMON_SLICE_CHICKEN4, SBE_PUSH_CONSTANT_BEHIND_FIX_ENABLE))
++      },
+       /* Xe3_LPG */
+       { XE_RTP_NAME("14021490052"),
+-- 
+2.39.5
+
diff --git a/queue-6.14/gpio-virtuser-fix-potential-out-of-bound-write.patch b/queue-6.14/gpio-virtuser-fix-potential-out-of-bound-write.patch
new file mode 100644 (file)
index 0000000..11de2a8
--- /dev/null
@@ -0,0 +1,65 @@
+From 3dd64788d9be0fb0b446f5eb9618f2766e2c8d51 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 9 May 2025 17:04:59 +0200
+Subject: gpio: virtuser: fix potential out-of-bound write
+
+From: Markus Burri <markus.burri@mt.com>
+
+[ Upstream commit 7118be7c6072f40391923543fdd1563b8d56377c ]
+
+If the caller wrote more characters, count is truncated to the max
+available space in "simple_write_to_buffer". Check that the input
+size does not exceed the buffer size. Write a zero termination
+afterwards.
+
+Reported-by: kernel test robot <lkp@intel.com>
+Closes: https://lore.kernel.org/oe-kbuild-all/202505091754.285hHbr2-lkp@intel.com/
+Signed-off-by: Markus Burri <markus.burri@mt.com>
+Link: https://lore.kernel.org/r/20250509150459.115489-1-markus.burri@mt.com
+Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/gpio/gpio-virtuser.c | 12 ++++++++++--
+ 1 file changed, 10 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/gpio/gpio-virtuser.c b/drivers/gpio/gpio-virtuser.c
+index e89f299f21400..dcecb7a259117 100644
+--- a/drivers/gpio/gpio-virtuser.c
++++ b/drivers/gpio/gpio-virtuser.c
+@@ -400,10 +400,15 @@ static ssize_t gpio_virtuser_direction_do_write(struct file *file,
+       char buf[32], *trimmed;
+       int ret, dir, val = 0;
+-      ret = simple_write_to_buffer(buf, sizeof(buf), ppos, user_buf, count);
++      if (count >= sizeof(buf))
++              return -EINVAL;
++
++      ret = simple_write_to_buffer(buf, sizeof(buf) - 1, ppos, user_buf, count);
+       if (ret < 0)
+               return ret;
++      buf[ret] = '\0';
++
+       trimmed = strim(buf);
+       if (strcmp(trimmed, "input") == 0) {
+@@ -622,12 +627,15 @@ static ssize_t gpio_virtuser_consumer_write(struct file *file,
+       char buf[GPIO_VIRTUSER_NAME_BUF_LEN + 2];
+       int ret;
++      if (count >= sizeof(buf))
++              return -EINVAL;
++
+       ret = simple_write_to_buffer(buf, GPIO_VIRTUSER_NAME_BUF_LEN, ppos,
+                                    user_buf, count);
+       if (ret < 0)
+               return ret;
+-      buf[strlen(buf) - 1] = '\0';
++      buf[ret] = '\0';
+       ret = gpiod_set_consumer_name(data->ad.desc, buf);
+       if (ret)
+-- 
+2.39.5
+
diff --git a/queue-6.14/hid-amd_sfh-avoid-clearing-reports-for-sra-sensor.patch b/queue-6.14/hid-amd_sfh-avoid-clearing-reports-for-sra-sensor.patch
new file mode 100644 (file)
index 0000000..e4a8a2e
--- /dev/null
@@ -0,0 +1,47 @@
+From 40897ff7478959e6e4aebc789ebc4f35b38e9420 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 21 Apr 2025 16:32:10 -0500
+Subject: HID: amd_sfh: Avoid clearing reports for SRA sensor
+
+From: Mario Limonciello <mario.limonciello@amd.com>
+
+[ Upstream commit f32e8c8095490152b5bc5f467d5034387a4bbd1b ]
+
+SRA sensor doesn't allocate any memory for reports.  Skip
+trying to clear memory for that sensor in cleanup path.
+
+Suggested-by: Basavaraj Natikar <Basavaraj.Natikar@amd.com>
+Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
+Acked-by: Basavaraj Natikar <Basavaraj.Natikar@amd.com>
+Signed-off-by: Jiri Kosina <jkosina@suse.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/hid/amd-sfh-hid/sfh1_1/amd_sfh_init.c | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/drivers/hid/amd-sfh-hid/sfh1_1/amd_sfh_init.c b/drivers/hid/amd-sfh-hid/sfh1_1/amd_sfh_init.c
+index a02969fd50686..08acc707938d3 100644
+--- a/drivers/hid/amd-sfh-hid/sfh1_1/amd_sfh_init.c
++++ b/drivers/hid/amd-sfh-hid/sfh1_1/amd_sfh_init.c
+@@ -83,6 +83,9 @@ static int amd_sfh_hid_client_deinit(struct amd_mp2_dev *privdata)
+               case ALS_IDX:
+                       privdata->dev_en.is_als_present = false;
+                       break;
++              case SRA_IDX:
++                      privdata->dev_en.is_sra_present = false;
++                      break;
+               }
+               if (cl_data->sensor_sts[i] == SENSOR_ENABLED) {
+@@ -235,6 +238,8 @@ static int amd_sfh1_1_hid_client_init(struct amd_mp2_dev *privdata)
+ cleanup:
+       amd_sfh_hid_client_deinit(privdata);
+       for (i = 0; i < cl_data->num_hid_devices; i++) {
++              if (cl_data->sensor_idx[i] == SRA_IDX)
++                      continue;
+               devm_kfree(dev, cl_data->feature_report[i]);
+               devm_kfree(dev, in_data->input_report[i]);
+               devm_kfree(dev, cl_data->report_descr[i]);
+-- 
+2.39.5
+
diff --git a/queue-6.14/hid-quirks-add-adata-xpg-alpha-wireless-mouse-suppor.patch b/queue-6.14/hid-quirks-add-adata-xpg-alpha-wireless-mouse-suppor.patch
new file mode 100644 (file)
index 0000000..02966a9
--- /dev/null
@@ -0,0 +1,50 @@
+From 24adca49994c2960594ca12a90c907068fd0676b Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 9 Apr 2025 00:04:28 -0600
+Subject: HID: quirks: Add ADATA XPG alpha wireless mouse support
+
+From: Milton Barrera <miltonjosue2001@gmail.com>
+
+[ Upstream commit fa9fdeea1b7d6440c22efa6d59a769eae8bc89f1 ]
+
+This patch adds HID_QUIRK_ALWAYS_POLL for the ADATA XPG wireless gaming mouse (USB ID 125f:7505) and its USB dongle (USB ID 125f:7506). Without this quirk, the device does not generate input events properly.
+
+Signed-off-by: Milton Barrera <miltonjosue2001@gmail.com>
+Signed-off-by: Jiri Kosina <jkosina@suse.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/hid/hid-ids.h    | 4 ++++
+ drivers/hid/hid-quirks.c | 2 ++
+ 2 files changed, 6 insertions(+)
+
+diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
+index 288a2b864cc41..1062731315a2a 100644
+--- a/drivers/hid/hid-ids.h
++++ b/drivers/hid/hid-ids.h
+@@ -41,6 +41,10 @@
+ #define USB_VENDOR_ID_ACTIONSTAR      0x2101
+ #define USB_DEVICE_ID_ACTIONSTAR_1011 0x1011
++#define USB_VENDOR_ID_ADATA_XPG 0x125f
++#define USB_VENDOR_ID_ADATA_XPG_WL_GAMING_MOUSE 0x7505
++#define USB_VENDOR_ID_ADATA_XPG_WL_GAMING_MOUSE_DONGLE 0x7506
++
+ #define USB_VENDOR_ID_ADS_TECH                0x06e1
+ #define USB_DEVICE_ID_ADS_TECH_RADIO_SI470X   0xa155
+diff --git a/drivers/hid/hid-quirks.c b/drivers/hid/hid-quirks.c
+index 5d7a418ccdbec..73979643315bf 100644
+--- a/drivers/hid/hid-quirks.c
++++ b/drivers/hid/hid-quirks.c
+@@ -27,6 +27,8 @@
+ static const struct hid_device_id hid_quirks[] = {
+       { HID_USB_DEVICE(USB_VENDOR_ID_AASHIMA, USB_DEVICE_ID_AASHIMA_GAMEPAD), HID_QUIRK_BADPAD },
+       { HID_USB_DEVICE(USB_VENDOR_ID_AASHIMA, USB_DEVICE_ID_AASHIMA_PREDATOR), HID_QUIRK_BADPAD },
++      { HID_USB_DEVICE(USB_VENDOR_ID_ADATA_XPG, USB_VENDOR_ID_ADATA_XPG_WL_GAMING_MOUSE), HID_QUIRK_ALWAYS_POLL },
++      { HID_USB_DEVICE(USB_VENDOR_ID_ADATA_XPG, USB_VENDOR_ID_ADATA_XPG_WL_GAMING_MOUSE_DONGLE), HID_QUIRK_ALWAYS_POLL },
+       { HID_USB_DEVICE(USB_VENDOR_ID_AFATECH, USB_DEVICE_ID_AFATECH_AF9016), HID_QUIRK_FULLSPEED_INTERVAL },
+       { HID_USB_DEVICE(USB_VENDOR_ID_AIREN, USB_DEVICE_ID_AIREN_SLIMPLUS), HID_QUIRK_NOGET },
+       { HID_USB_DEVICE(USB_VENDOR_ID_AKAI_09E8, USB_DEVICE_ID_AKAI_09E8_MIDIMIX), HID_QUIRK_NO_INIT_REPORTS },
+-- 
+2.39.5
+
diff --git a/queue-6.14/kbuild-require-pahole-v1.28-or-v1.29-with-gendwarfks.patch b/queue-6.14/kbuild-require-pahole-v1.28-or-v1.29-with-gendwarfks.patch
new file mode 100644 (file)
index 0000000..ea76855
--- /dev/null
@@ -0,0 +1,58 @@
+From 81e678d1db64712489cb0d2ff691cb01b9f23d4b Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 7 Apr 2025 23:08:44 +0000
+Subject: kbuild: Require pahole <v1.28 or >v1.29 with GENDWARFKSYMS on X86
+
+From: Sami Tolvanen <samitolvanen@google.com>
+
+[ Upstream commit 9520a2b3f0b5e182f73410e45b9b92ea51d9b828 ]
+
+With CONFIG_GENDWARFKSYMS, __gendwarfksyms_ptr variables are
+added to the kernel in EXPORT_SYMBOL() to ensure DWARF type
+information is available for exported symbols in the TUs where
+they're actually exported. These symbols are dropped when linking
+vmlinux, but dangling references to them remain in DWARF.
+
+With CONFIG_DEBUG_INFO_BTF enabled on X86, pahole versions after
+commit 47dcb534e253 ("btf_encoder: Stop indexing symbols for
+VARs") and before commit 9810758003ce ("btf_encoder: Verify 0
+address DWARF variables are in ELF section") place these symbols
+in the .data..percpu section, which results in an "Invalid
+offset" error in btf_datasec_check_meta() during boot, as all
+the variables are at zero offset and have non-zero size. If
+CONFIG_DEBUG_INFO_BTF_MODULES is enabled, this also results in a
+failure to load modules with:
+
+  failed to validate module [$module] BTF: -22
+
+As the issue occurs in pahole v1.28 and the fix was merged
+after v1.29 was released, require pahole <v1.28 or >v1.29 when
+GENDWARFKSYMS is enabled with DEBUG_INFO_BTF on X86.
+
+Reported-by: Paolo Pisati <paolo.pisati@canonical.com>
+Signed-off-by: Sami Tolvanen <samitolvanen@google.com>
+Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ kernel/module/Kconfig | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/kernel/module/Kconfig b/kernel/module/Kconfig
+index d7762ef5949a2..39278737bb68f 100644
+--- a/kernel/module/Kconfig
++++ b/kernel/module/Kconfig
+@@ -192,6 +192,11 @@ config GENDWARFKSYMS
+       depends on !DEBUG_INFO_REDUCED && !DEBUG_INFO_SPLIT
+       # Requires ELF object files.
+       depends on !LTO
++      # To avoid conflicts with the discarded __gendwarfksyms_ptr symbols on
++      # X86, requires pahole before commit 47dcb534e253 ("btf_encoder: Stop
++      # indexing symbols for VARs") or after commit 9810758003ce ("btf_encoder:
++      # Verify 0 address DWARF variables are in ELF section").
++      depends on !X86 || !DEBUG_INFO_BTF || PAHOLE_VERSION < 128 || PAHOLE_VERSION > 129
+       help
+         Calculate symbol versions from DWARF debugging information using
+         gendwarfksyms. Requires DEBUG_INFO to be enabled.
+-- 
+2.39.5
+
diff --git a/queue-6.14/ksmbd-use-list_first_entry_or_null-for-opinfo_get_li.patch b/queue-6.14/ksmbd-use-list_first_entry_or_null-for-opinfo_get_li.patch
new file mode 100644 (file)
index 0000000..18e65b5
--- /dev/null
@@ -0,0 +1,45 @@
+From 02dc2d76056fbf7626e1b5690573bb3650b9af2c Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 20 May 2025 09:25:03 +0900
+Subject: ksmbd: use list_first_entry_or_null for opinfo_get_list()
+
+From: Namjae Jeon <linkinjeon@kernel.org>
+
+[ Upstream commit 10379171f346e6f61d30d9949500a8de4336444a ]
+
+The list_first_entry() macro never returns NULL.  If the list is
+empty then it returns an invalid pointer.  Use list_first_entry_or_null()
+to check if the list is empty.
+
+Reported-by: kernel test robot <lkp@intel.com>
+Reported-by: Dan Carpenter <dan.carpenter@linaro.org>
+Closes: https://lore.kernel.org/r/202505080231.7OXwq4Te-lkp@intel.com/
+Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
+Signed-off-by: Steve French <stfrench@microsoft.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/smb/server/oplock.c | 7 ++-----
+ 1 file changed, 2 insertions(+), 5 deletions(-)
+
+diff --git a/fs/smb/server/oplock.c b/fs/smb/server/oplock.c
+index 03f606afad93a..d7a8a580d0136 100644
+--- a/fs/smb/server/oplock.c
++++ b/fs/smb/server/oplock.c
+@@ -146,12 +146,9 @@ static struct oplock_info *opinfo_get_list(struct ksmbd_inode *ci)
+ {
+       struct oplock_info *opinfo;
+-      if (list_empty(&ci->m_op_list))
+-              return NULL;
+-
+       down_read(&ci->m_lock);
+-      opinfo = list_first_entry(&ci->m_op_list, struct oplock_info,
+-                                      op_entry);
++      opinfo = list_first_entry_or_null(&ci->m_op_list, struct oplock_info,
++                                        op_entry);
+       if (opinfo) {
+               if (opinfo->conn == NULL ||
+                   !atomic_inc_not_zero(&opinfo->refcount))
+-- 
+2.39.5
+
diff --git a/queue-6.14/net-ethernet-ti-am65-cpsw-lower-random-mac-address-e.patch b/queue-6.14/net-ethernet-ti-am65-cpsw-lower-random-mac-address-e.patch
new file mode 100644 (file)
index 0000000..cc21fd5
--- /dev/null
@@ -0,0 +1,41 @@
+From 4704700875841ddf539fb7302dd822ef0a191b53 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 16 May 2025 07:26:55 -0500
+Subject: net: ethernet: ti: am65-cpsw: Lower random mac address error print to
+ info
+
+From: Nishanth Menon <nm@ti.com>
+
+[ Upstream commit 50980d8da71a0c2e045e85bba93c0099ab73a209 ]
+
+Using random mac address is not an error since the driver continues to
+function, it should be informative that the system has not assigned
+a MAC address. This is inline with other drivers such as ax88796c,
+dm9051 etc. Drop the error level to info level.
+
+Signed-off-by: Nishanth Menon <nm@ti.com>
+Reviewed-by: Simon Horman <horms@kernel.org>
+Reviewed-by: Roger Quadros <rogerq@kernel.org>
+Link: https://patch.msgid.link/20250516122655.442808-1-nm@ti.com
+Signed-off-by: Jakub Kicinski <kuba@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/ethernet/ti/am65-cpsw-nuss.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/net/ethernet/ti/am65-cpsw-nuss.c b/drivers/net/ethernet/ti/am65-cpsw-nuss.c
+index cac67babe4559..1141107407165 100644
+--- a/drivers/net/ethernet/ti/am65-cpsw-nuss.c
++++ b/drivers/net/ethernet/ti/am65-cpsw-nuss.c
+@@ -2775,7 +2775,7 @@ static int am65_cpsw_nuss_init_slave_ports(struct am65_cpsw_common *common)
+                                                       port->slave.mac_addr);
+                       if (!is_valid_ether_addr(port->slave.mac_addr)) {
+                               eth_random_addr(port->slave.mac_addr);
+-                              dev_err(dev, "Use random MAC address\n");
++                              dev_info(dev, "Use random MAC address\n");
+                       }
+               }
+-- 
+2.39.5
+
diff --git a/queue-6.14/nfs-avoid-flushing-data-while-holding-directory-lock.patch b/queue-6.14/nfs-avoid-flushing-data-while-holding-directory-lock.patch
new file mode 100644 (file)
index 0000000..fa3c046
--- /dev/null
@@ -0,0 +1,110 @@
+From 0e59f9005dff6fd92ec64c42a6e4d02d7392de9d Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun, 27 Apr 2025 18:21:06 -0400
+Subject: NFS: Avoid flushing data while holding directory locks in
+ nfs_rename()
+
+From: Trond Myklebust <trond.myklebust@hammerspace.com>
+
+[ Upstream commit dcd21b609d4abc7303f8683bce4f35d78d7d6830 ]
+
+The Linux client assumes that all filehandles are non-volatile for
+renames within the same directory (otherwise sillyrename cannot work).
+However, the existence of the Linux 'subtree_check' export option has
+meant that nfs_rename() has always assumed it needs to flush writes
+before attempting to rename.
+
+Since NFSv4 does allow the client to query whether or not the server
+exhibits this behaviour, and since knfsd does actually set the
+appropriate flag when 'subtree_check' is enabled on an export, it
+should be OK to optimise away the write flushing behaviour in the cases
+where it is clearly not needed.
+
+Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
+Reviewed-by: Jeff Layton <jlayton@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/nfs/client.c           |  2 ++
+ fs/nfs/dir.c              | 15 ++++++++++++++-
+ include/linux/nfs_fs_sb.h | 12 +++++++++---
+ 3 files changed, 25 insertions(+), 4 deletions(-)
+
+diff --git a/fs/nfs/client.c b/fs/nfs/client.c
+index 3b0918ade53cd..a10d39150abc8 100644
+--- a/fs/nfs/client.c
++++ b/fs/nfs/client.c
+@@ -1100,6 +1100,8 @@ struct nfs_server *nfs_create_server(struct fs_context *fc)
+               if (server->namelen == 0 || server->namelen > NFS2_MAXNAMLEN)
+                       server->namelen = NFS2_MAXNAMLEN;
+       }
++      /* Linux 'subtree_check' borkenness mandates this setting */
++      server->fh_expire_type = NFS_FH_VOL_RENAME;
+       if (!(fattr->valid & NFS_ATTR_FATTR)) {
+               error = ctx->nfs_mod->rpc_ops->getattr(server, ctx->mntfh,
+diff --git a/fs/nfs/dir.c b/fs/nfs/dir.c
+index 2b04038b0e405..34f3471ce813b 100644
+--- a/fs/nfs/dir.c
++++ b/fs/nfs/dir.c
+@@ -2678,6 +2678,18 @@ nfs_unblock_rename(struct rpc_task *task, struct nfs_renamedata *data)
+       unblock_revalidate(new_dentry);
+ }
++static bool nfs_rename_is_unsafe_cross_dir(struct dentry *old_dentry,
++                                         struct dentry *new_dentry)
++{
++      struct nfs_server *server = NFS_SB(old_dentry->d_sb);
++
++      if (old_dentry->d_parent != new_dentry->d_parent)
++              return false;
++      if (server->fh_expire_type & NFS_FH_RENAME_UNSAFE)
++              return !(server->fh_expire_type & NFS_FH_NOEXPIRE_WITH_OPEN);
++      return true;
++}
++
+ /*
+  * RENAME
+  * FIXME: Some nfsds, like the Linux user space nfsd, may generate a
+@@ -2765,7 +2777,8 @@ int nfs_rename(struct mnt_idmap *idmap, struct inode *old_dir,
+       }
+-      if (S_ISREG(old_inode->i_mode))
++      if (S_ISREG(old_inode->i_mode) &&
++          nfs_rename_is_unsafe_cross_dir(old_dentry, new_dentry))
+               nfs_sync_inode(old_inode);
+       task = nfs_async_rename(old_dir, new_dir, old_dentry, new_dentry,
+                               must_unblock ? nfs_unblock_rename : NULL);
+diff --git a/include/linux/nfs_fs_sb.h b/include/linux/nfs_fs_sb.h
+index 108862d81b579..8baaad2dfbe40 100644
+--- a/include/linux/nfs_fs_sb.h
++++ b/include/linux/nfs_fs_sb.h
+@@ -210,6 +210,15 @@ struct nfs_server {
+       char                    *fscache_uniq;  /* Uniquifier (or NULL) */
+ #endif
++      /* The following #defines numerically match the NFSv4 equivalents */
++#define NFS_FH_NOEXPIRE_WITH_OPEN (0x1)
++#define NFS_FH_VOLATILE_ANY (0x2)
++#define NFS_FH_VOL_MIGRATION (0x4)
++#define NFS_FH_VOL_RENAME (0x8)
++#define NFS_FH_RENAME_UNSAFE (NFS_FH_VOLATILE_ANY | NFS_FH_VOL_RENAME)
++      u32                     fh_expire_type; /* V4 bitmask representing file
++                                                 handle volatility type for
++                                                 this filesystem */
+       u32                     pnfs_blksize;   /* layout_blksize attr */
+ #if IS_ENABLED(CONFIG_NFS_V4)
+       u32                     attr_bitmask[3];/* V4 bitmask representing the set
+@@ -233,9 +242,6 @@ struct nfs_server {
+       u32                     acl_bitmask;    /* V4 bitmask representing the ACEs
+                                                  that are supported on this
+                                                  filesystem */
+-      u32                     fh_expire_type; /* V4 bitmask representing file
+-                                                 handle volatility type for
+-                                                 this filesystem */
+       struct pnfs_layoutdriver_type  *pnfs_curr_ld; /* Active layout driver */
+       struct rpc_wait_queue   roc_rpcwaitq;
+       void                    *pnfs_ld_data;  /* per mount point data */
+-- 
+2.39.5
+
diff --git a/queue-6.14/nfs-don-t-share-pnfs-ds-connections-between-net-name.patch b/queue-6.14/nfs-don-t-share-pnfs-ds-connections-between-net-name.patch
new file mode 100644 (file)
index 0000000..b3b4c4b
--- /dev/null
@@ -0,0 +1,166 @@
+From 6a1a86e8333063b24e7e75e502e005edbd1535e8 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 10 Apr 2025 16:42:03 -0400
+Subject: nfs: don't share pNFS DS connections between net namespaces
+
+From: Jeff Layton <jlayton@kernel.org>
+
+[ Upstream commit 6b9785dc8b13d9fb75ceec8cf4ea7ec3f3b1edbc ]
+
+Currently, different NFS clients can share the same DS connections, even
+when they are in different net namespaces. If a containerized client
+creates a DS connection, another container can find and use it. When the
+first client exits, the connection will close which can lead to stalls
+in other clients.
+
+Add a net namespace pointer to struct nfs4_pnfs_ds, and compare those
+value to the caller's netns in _data_server_lookup_locked() when
+searching for a nfs4_pnfs_ds to match.
+
+Reported-by: Omar Sandoval <osandov@osandov.com>
+Reported-by: Sargun Dillon <sargun@sargun.me>
+Closes: https://lore.kernel.org/linux-nfs/Z_ArpQC_vREh_hEA@telecaster/
+Tested-by: Sargun Dillon <sargun@sargun.me>
+Signed-off-by: Jeff Layton <jlayton@kernel.org>
+Reviewed-by: Benjamin Coddington <bcodding@redhat.com>
+Link: https://lore.kernel.org/r/20250410-nfs-ds-netns-v2-1-f80b7979ba80@kernel.org
+Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/nfs/filelayout/filelayoutdev.c         | 6 +++---
+ fs/nfs/flexfilelayout/flexfilelayoutdev.c | 6 +++---
+ fs/nfs/pnfs.h                             | 4 +++-
+ fs/nfs/pnfs_nfs.c                         | 9 +++++----
+ 4 files changed, 14 insertions(+), 11 deletions(-)
+
+diff --git a/fs/nfs/filelayout/filelayoutdev.c b/fs/nfs/filelayout/filelayoutdev.c
+index 4fa304fa5bc4b..29d9234d5c085 100644
+--- a/fs/nfs/filelayout/filelayoutdev.c
++++ b/fs/nfs/filelayout/filelayoutdev.c
+@@ -76,6 +76,7 @@ nfs4_fl_alloc_deviceid_node(struct nfs_server *server, struct pnfs_device *pdev,
+       struct page *scratch;
+       struct list_head dsaddrs;
+       struct nfs4_pnfs_ds_addr *da;
++      struct net *net = server->nfs_client->cl_net;
+       /* set up xdr stream */
+       scratch = alloc_page(gfp_flags);
+@@ -159,8 +160,7 @@ nfs4_fl_alloc_deviceid_node(struct nfs_server *server, struct pnfs_device *pdev,
+               mp_count = be32_to_cpup(p); /* multipath count */
+               for (j = 0; j < mp_count; j++) {
+-                      da = nfs4_decode_mp_ds_addr(server->nfs_client->cl_net,
+-                                                  &stream, gfp_flags);
++                      da = nfs4_decode_mp_ds_addr(net, &stream, gfp_flags);
+                       if (da)
+                               list_add_tail(&da->da_node, &dsaddrs);
+               }
+@@ -170,7 +170,7 @@ nfs4_fl_alloc_deviceid_node(struct nfs_server *server, struct pnfs_device *pdev,
+                       goto out_err_free_deviceid;
+               }
+-              dsaddr->ds_list[i] = nfs4_pnfs_ds_add(&dsaddrs, gfp_flags);
++              dsaddr->ds_list[i] = nfs4_pnfs_ds_add(net, &dsaddrs, gfp_flags);
+               if (!dsaddr->ds_list[i])
+                       goto out_err_drain_dsaddrs;
+               trace_fl_getdevinfo(server, &pdev->dev_id, dsaddr->ds_list[i]->ds_remotestr);
+diff --git a/fs/nfs/flexfilelayout/flexfilelayoutdev.c b/fs/nfs/flexfilelayout/flexfilelayoutdev.c
+index e58bedfb1dcc1..4a304cf17c4b0 100644
+--- a/fs/nfs/flexfilelayout/flexfilelayoutdev.c
++++ b/fs/nfs/flexfilelayout/flexfilelayoutdev.c
+@@ -49,6 +49,7 @@ nfs4_ff_alloc_deviceid_node(struct nfs_server *server, struct pnfs_device *pdev,
+       struct nfs4_pnfs_ds_addr *da;
+       struct nfs4_ff_layout_ds *new_ds = NULL;
+       struct nfs4_ff_ds_version *ds_versions = NULL;
++      struct net *net = server->nfs_client->cl_net;
+       u32 mp_count;
+       u32 version_count;
+       __be32 *p;
+@@ -80,8 +81,7 @@ nfs4_ff_alloc_deviceid_node(struct nfs_server *server, struct pnfs_device *pdev,
+       for (i = 0; i < mp_count; i++) {
+               /* multipath ds */
+-              da = nfs4_decode_mp_ds_addr(server->nfs_client->cl_net,
+-                                          &stream, gfp_flags);
++              da = nfs4_decode_mp_ds_addr(net, &stream, gfp_flags);
+               if (da)
+                       list_add_tail(&da->da_node, &dsaddrs);
+       }
+@@ -149,7 +149,7 @@ nfs4_ff_alloc_deviceid_node(struct nfs_server *server, struct pnfs_device *pdev,
+       new_ds->ds_versions = ds_versions;
+       new_ds->ds_versions_cnt = version_count;
+-      new_ds->ds = nfs4_pnfs_ds_add(&dsaddrs, gfp_flags);
++      new_ds->ds = nfs4_pnfs_ds_add(net, &dsaddrs, gfp_flags);
+       if (!new_ds->ds)
+               goto out_err_drain_dsaddrs;
+diff --git a/fs/nfs/pnfs.h b/fs/nfs/pnfs.h
+index 30d2613e912b8..91ff877185c8a 100644
+--- a/fs/nfs/pnfs.h
++++ b/fs/nfs/pnfs.h
+@@ -60,6 +60,7 @@ struct nfs4_pnfs_ds {
+       struct list_head        ds_node;  /* nfs4_pnfs_dev_hlist dev_dslist */
+       char                    *ds_remotestr;  /* comma sep list of addrs */
+       struct list_head        ds_addrs;
++      const struct net        *ds_net;
+       struct nfs_client       *ds_clp;
+       refcount_t              ds_count;
+       unsigned long           ds_state;
+@@ -415,7 +416,8 @@ int pnfs_generic_commit_pagelist(struct inode *inode,
+ int pnfs_generic_scan_commit_lists(struct nfs_commit_info *cinfo, int max);
+ void pnfs_generic_write_commit_done(struct rpc_task *task, void *data);
+ void nfs4_pnfs_ds_put(struct nfs4_pnfs_ds *ds);
+-struct nfs4_pnfs_ds *nfs4_pnfs_ds_add(struct list_head *dsaddrs,
++struct nfs4_pnfs_ds *nfs4_pnfs_ds_add(const struct net *net,
++                                    struct list_head *dsaddrs,
+                                     gfp_t gfp_flags);
+ void nfs4_pnfs_v3_ds_connect_unload(void);
+ int nfs4_pnfs_ds_connect(struct nfs_server *mds_srv, struct nfs4_pnfs_ds *ds,
+diff --git a/fs/nfs/pnfs_nfs.c b/fs/nfs/pnfs_nfs.c
+index dbef837e871ad..2ee20a0f0b36d 100644
+--- a/fs/nfs/pnfs_nfs.c
++++ b/fs/nfs/pnfs_nfs.c
+@@ -604,12 +604,12 @@ _same_data_server_addrs_locked(const struct list_head *dsaddrs1,
+  * Lookup DS by addresses.  nfs4_ds_cache_lock is held
+  */
+ static struct nfs4_pnfs_ds *
+-_data_server_lookup_locked(const struct list_head *dsaddrs)
++_data_server_lookup_locked(const struct net *net, const struct list_head *dsaddrs)
+ {
+       struct nfs4_pnfs_ds *ds;
+       list_for_each_entry(ds, &nfs4_data_server_cache, ds_node)
+-              if (_same_data_server_addrs_locked(&ds->ds_addrs, dsaddrs))
++              if (ds->ds_net == net && _same_data_server_addrs_locked(&ds->ds_addrs, dsaddrs))
+                       return ds;
+       return NULL;
+ }
+@@ -716,7 +716,7 @@ nfs4_pnfs_remotestr(struct list_head *dsaddrs, gfp_t gfp_flags)
+  * uncached and return cached struct nfs4_pnfs_ds.
+  */
+ struct nfs4_pnfs_ds *
+-nfs4_pnfs_ds_add(struct list_head *dsaddrs, gfp_t gfp_flags)
++nfs4_pnfs_ds_add(const struct net *net, struct list_head *dsaddrs, gfp_t gfp_flags)
+ {
+       struct nfs4_pnfs_ds *tmp_ds, *ds = NULL;
+       char *remotestr;
+@@ -734,13 +734,14 @@ nfs4_pnfs_ds_add(struct list_head *dsaddrs, gfp_t gfp_flags)
+       remotestr = nfs4_pnfs_remotestr(dsaddrs, gfp_flags);
+       spin_lock(&nfs4_ds_cache_lock);
+-      tmp_ds = _data_server_lookup_locked(dsaddrs);
++      tmp_ds = _data_server_lookup_locked(net, dsaddrs);
+       if (tmp_ds == NULL) {
+               INIT_LIST_HEAD(&ds->ds_addrs);
+               list_splice_init(dsaddrs, &ds->ds_addrs);
+               ds->ds_remotestr = remotestr;
+               refcount_set(&ds->ds_count, 1);
+               INIT_LIST_HEAD(&ds->ds_node);
++              ds->ds_net = net;
+               ds->ds_clp = NULL;
+               list_add(&ds->ds_node, &nfs4_data_server_cache);
+               dprintk("%s add new data server %s\n", __func__,
+-- 
+2.39.5
+
diff --git a/queue-6.14/nvme-all-namespaces-in-a-subsystem-must-adhere-to-a-.patch b/queue-6.14/nvme-all-namespaces-in-a-subsystem-must-adhere-to-a-.patch
new file mode 100644 (file)
index 0000000..c6f24d9
--- /dev/null
@@ -0,0 +1,116 @@
+From 7b5aebb893761a7ddc0e497cdd2a3dc7dd0e92ad Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 8 May 2025 15:38:01 -0700
+Subject: nvme: all namespaces in a subsystem must adhere to a common atomic
+ write size
+
+From: Alan Adamson <alan.adamson@oracle.com>
+
+[ Upstream commit 8695f060a02953b33ac6240895dcb9c7ce16c91c ]
+
+The first namespace configured in a subsystem sets the subsystem's
+atomic write size based on its AWUPF or NAWUPF. Subsequent namespaces
+must have an atomic write size (per their AWUPF or NAWUPF) less than or
+equal to the subsystem's atomic write size, or their probing will be
+rejected.
+
+Signed-off-by: Alan Adamson <alan.adamson@oracle.com>
+[hch: fold in review comments from John Garry]
+Signed-off-by: Christoph Hellwig <hch@lst.de>
+Reviewed-by: John Garry <john.g.garry@oracle.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/nvme/host/core.c | 30 +++++++++++++++++++++++++++---
+ drivers/nvme/host/nvme.h |  3 ++-
+ 2 files changed, 29 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c
+index a27149e37a988..8863c9fcb4aab 100644
+--- a/drivers/nvme/host/core.c
++++ b/drivers/nvme/host/core.c
+@@ -2059,7 +2059,21 @@ static bool nvme_update_disk_info(struct nvme_ns *ns, struct nvme_id_ns *id,
+               if (id->nsfeat & NVME_NS_FEAT_ATOMICS && id->nawupf)
+                       atomic_bs = (1 + le16_to_cpu(id->nawupf)) * bs;
+               else
+-                      atomic_bs = (1 + ns->ctrl->subsys->awupf) * bs;
++                      atomic_bs = (1 + ns->ctrl->awupf) * bs;
++
++              /*
++               * Set subsystem atomic bs.
++               */
++              if (ns->ctrl->subsys->atomic_bs) {
++                      if (atomic_bs != ns->ctrl->subsys->atomic_bs) {
++                              dev_err_ratelimited(ns->ctrl->device,
++                                      "%s: Inconsistent Atomic Write Size, Namespace will not be added: Subsystem=%d bytes, Controller/Namespace=%d bytes\n",
++                                      ns->disk ? ns->disk->disk_name : "?",
++                                      ns->ctrl->subsys->atomic_bs,
++                                      atomic_bs);
++                      }
++              } else
++                      ns->ctrl->subsys->atomic_bs = atomic_bs;
+               nvme_update_atomic_write_disk_info(ns, id, lim, bs, atomic_bs);
+       }
+@@ -2201,6 +2215,17 @@ static int nvme_update_ns_info_block(struct nvme_ns *ns,
+       nvme_set_chunk_sectors(ns, id, &lim);
+       if (!nvme_update_disk_info(ns, id, &lim))
+               capacity = 0;
++
++      /*
++       * Validate the max atomic write size fits within the subsystem's
++       * atomic write capabilities.
++       */
++      if (lim.atomic_write_hw_max > ns->ctrl->subsys->atomic_bs) {
++              blk_mq_unfreeze_queue(ns->disk->queue, memflags);
++              ret = -ENXIO;
++              goto out;
++      }
++
+       nvme_config_discard(ns, &lim);
+       if (IS_ENABLED(CONFIG_BLK_DEV_ZONED) &&
+           ns->head->ids.csi == NVME_CSI_ZNS)
+@@ -3031,7 +3056,6 @@ static int nvme_init_subsystem(struct nvme_ctrl *ctrl, struct nvme_id_ctrl *id)
+               kfree(subsys);
+               return -EINVAL;
+       }
+-      subsys->awupf = le16_to_cpu(id->awupf);
+       nvme_mpath_default_iopolicy(subsys);
+       subsys->dev.class = &nvme_subsys_class;
+@@ -3441,7 +3465,7 @@ static int nvme_init_identify(struct nvme_ctrl *ctrl)
+               dev_pm_qos_expose_latency_tolerance(ctrl->device);
+       else if (!ctrl->apst_enabled && prev_apst_enabled)
+               dev_pm_qos_hide_latency_tolerance(ctrl->device);
+-
++      ctrl->awupf = le16_to_cpu(id->awupf);
+ out_free:
+       kfree(id);
+       return ret;
+diff --git a/drivers/nvme/host/nvme.h b/drivers/nvme/host/nvme.h
+index 7be92d07430e9..3804f91b19420 100644
+--- a/drivers/nvme/host/nvme.h
++++ b/drivers/nvme/host/nvme.h
+@@ -410,6 +410,7 @@ struct nvme_ctrl {
+       enum nvme_ctrl_type cntrltype;
+       enum nvme_dctype dctype;
++      u16 awupf; /* 0's based value. */
+ };
+ static inline enum nvme_ctrl_state nvme_ctrl_state(struct nvme_ctrl *ctrl)
+@@ -442,11 +443,11 @@ struct nvme_subsystem {
+       u8                      cmic;
+       enum nvme_subsys_type   subtype;
+       u16                     vendor_id;
+-      u16                     awupf;  /* 0's based awupf value. */
+       struct ida              ns_ida;
+ #ifdef CONFIG_NVME_MULTIPATH
+       enum nvme_iopolicy      iopolicy;
+ #endif
++      u32                     atomic_bs;
+ };
+ /*
+-- 
+2.39.5
+
diff --git a/queue-6.14/nvme-multipath-enable-blk_feat_atomic_writes-for-mul.patch b/queue-6.14/nvme-multipath-enable-blk_feat_atomic_writes-for-mul.patch
new file mode 100644 (file)
index 0000000..897d415
--- /dev/null
@@ -0,0 +1,49 @@
+From 395f1dcd4074855c8227b087c781fa242ad4f977 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 8 May 2025 15:38:00 -0700
+Subject: nvme: multipath: enable BLK_FEAT_ATOMIC_WRITES for multipathing
+
+From: Alan Adamson <alan.adamson@oracle.com>
+
+[ Upstream commit a21675ee3b1ba094e229ae4cd8bddf7d215ab1b9 ]
+
+A change to QEMU resulted in all nvme controllers (single and
+multi-controller subsystems) to have its CMIC.MCTRS bit set which
+indicates the subsystem supports multiple controllers and it is possible
+a namespace can be shared between those multiple controllers in a
+multipath configuration.
+
+When a namespace of a CMIC.MCTRS enabled subsystem is allocated, a
+multipath node is created.  The queue limits for this node are inherited
+from the namespace being allocated. When inheriting queue limits, the
+features being inherited need to be specified. The atomic write feature
+(BLK_FEAT_ATOMIC_WRITES) was not specified so the atomic queue limits
+were not inherited by the multipath disk node which resulted in the sysfs
+atomic write attributes being zeroed. The fix is to include
+BLK_FEAT_ATOMIC_WRITES in the list of features to be inherited.
+
+Signed-off-by: Alan Adamson <alan.adamson@oracle.com>
+Reviewed-by: John Garry <john.g.garry@oracle.com>
+Signed-off-by: Christoph Hellwig <hch@lst.de>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/nvme/host/multipath.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/nvme/host/multipath.c b/drivers/nvme/host/multipath.c
+index f39823cde62c7..ac17e650327f1 100644
+--- a/drivers/nvme/host/multipath.c
++++ b/drivers/nvme/host/multipath.c
+@@ -638,7 +638,8 @@ int nvme_mpath_alloc_disk(struct nvme_ctrl *ctrl, struct nvme_ns_head *head)
+       blk_set_stacking_limits(&lim);
+       lim.dma_alignment = 3;
+-      lim.features |= BLK_FEAT_IO_STAT | BLK_FEAT_NOWAIT | BLK_FEAT_POLL;
++      lim.features |= BLK_FEAT_IO_STAT | BLK_FEAT_NOWAIT |
++              BLK_FEAT_POLL | BLK_FEAT_ATOMIC_WRITES;
+       if (head->ids.csi == NVME_CSI_ZNS)
+               lim.features |= BLK_FEAT_ZONED;
+-- 
+2.39.5
+
diff --git a/queue-6.14/nvme-pci-add-nvme_quirk_no_deepest_ps-quirk-for-soli.patch b/queue-6.14/nvme-pci-add-nvme_quirk_no_deepest_ps-quirk-for-soli.patch
new file mode 100644 (file)
index 0000000..9e25eb7
--- /dev/null
@@ -0,0 +1,41 @@
+From a1237c78eab827e9949fdb5f8c2e577d25327d5c Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sat, 10 May 2025 19:21:30 +0900
+Subject: nvme-pci: add NVME_QUIRK_NO_DEEPEST_PS quirk for SOLIDIGM P44 Pro
+
+From: Ilya Guterman <amfernusus@gmail.com>
+
+[ Upstream commit e765bf89f42b5c82132a556b630affeb82b2a21f ]
+
+This commit adds the NVME_QUIRK_NO_DEEPEST_PS quirk for device
+[126f:2262], which belongs to device SOLIDIGM P44 Pro SSDPFKKW020X7
+
+The device frequently have trouble exiting the deepest power state (5),
+resulting in the entire disk being unresponsive.
+
+Verified by setting nvme_core.default_ps_max_latency_us=10000 and
+observing the expected behavior.
+
+Signed-off-by: Ilya Guterman <amfernusus@gmail.com>
+Signed-off-by: Christoph Hellwig <hch@lst.de>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/nvme/host/pci.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/drivers/nvme/host/pci.c b/drivers/nvme/host/pci.c
+index abd097eba6623..28f560f86e912 100644
+--- a/drivers/nvme/host/pci.c
++++ b/drivers/nvme/host/pci.c
+@@ -3742,6 +3742,8 @@ static const struct pci_device_id nvme_id_table[] = {
+               .driver_data = NVME_QUIRK_NO_DEEPEST_PS, },
+       { PCI_DEVICE(0x1e49, 0x0041),   /* ZHITAI TiPro7000 NVMe SSD */
+               .driver_data = NVME_QUIRK_NO_DEEPEST_PS, },
++      { PCI_DEVICE(0x025e, 0xf1ac),   /* SOLIDIGM  P44 pro SSDPFKKW020X7  */
++              .driver_data = NVME_QUIRK_NO_DEEPEST_PS, },
+       { PCI_DEVICE(0xc0a9, 0x540a),   /* Crucial P2 */
+               .driver_data = NVME_QUIRK_BOGUS_NID, },
+       { PCI_DEVICE(0x1d97, 0x2263), /* Lexar NM610 */
+-- 
+2.39.5
+
diff --git a/queue-6.14/nvmet-pci-epf-cleanup-nvmet_pci_epf_raise_irq.patch b/queue-6.14/nvmet-pci-epf-cleanup-nvmet_pci_epf_raise_irq.patch
new file mode 100644 (file)
index 0000000..cc95f9c
--- /dev/null
@@ -0,0 +1,65 @@
+From b93f1f61b27bae19c40f3ad8c7fe3d99e811cd2a Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 9 May 2025 08:25:02 +0900
+Subject: nvmet: pci-epf: cleanup nvmet_pci_epf_raise_irq()
+
+From: Damien Le Moal <dlemoal@kernel.org>
+
+[ Upstream commit 4236e600bf902202214aa6277e84c4738c56f762 ]
+
+There is no point in taking the controller irq_lock and calling
+nvmet_pci_epf_should_raise_irq() for a completion queue which does not
+have IRQ enabled (NVMET_PCI_EPF_Q_IRQ_ENABLED flag is not set).
+Move the test for the NVMET_PCI_EPF_Q_IRQ_ENABLED flag out of
+nvmet_pci_epf_should_raise_irq() to the top of nvmet_pci_epf_raise_irq()
+to return early when no IRQ should be raised.
+
+Also, use dev_err_ratelimited() to avoid a message storm under load when
+raising IRQs is failing.
+
+Signed-off-by: Damien Le Moal <dlemoal@kernel.org>
+Reviewed-by: Niklas Cassel <cassel@kernel.org>
+Signed-off-by: Christoph Hellwig <hch@lst.de>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/nvme/target/pci-epf.c | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/drivers/nvme/target/pci-epf.c b/drivers/nvme/target/pci-epf.c
+index fbc167f47d8a6..17c0e5ee731a4 100644
+--- a/drivers/nvme/target/pci-epf.c
++++ b/drivers/nvme/target/pci-epf.c
+@@ -596,9 +596,6 @@ static bool nvmet_pci_epf_should_raise_irq(struct nvmet_pci_epf_ctrl *ctrl,
+       struct nvmet_pci_epf_irq_vector *iv = cq->iv;
+       bool ret;
+-      if (!test_bit(NVMET_PCI_EPF_Q_IRQ_ENABLED, &cq->flags))
+-              return false;
+-
+       /* IRQ coalescing for the admin queue is not allowed. */
+       if (!cq->qid)
+               return true;
+@@ -625,7 +622,8 @@ static void nvmet_pci_epf_raise_irq(struct nvmet_pci_epf_ctrl *ctrl,
+       struct pci_epf *epf = nvme_epf->epf;
+       int ret = 0;
+-      if (!test_bit(NVMET_PCI_EPF_Q_LIVE, &cq->flags))
++      if (!test_bit(NVMET_PCI_EPF_Q_LIVE, &cq->flags) ||
++          !test_bit(NVMET_PCI_EPF_Q_IRQ_ENABLED, &cq->flags))
+               return;
+       mutex_lock(&ctrl->irq_lock);
+@@ -656,7 +654,9 @@ static void nvmet_pci_epf_raise_irq(struct nvmet_pci_epf_ctrl *ctrl,
+       }
+       if (ret)
+-              dev_err(ctrl->dev, "Failed to raise IRQ (err=%d)\n", ret);
++              dev_err_ratelimited(ctrl->dev,
++                                  "CQ[%u]: Failed to raise IRQ (err=%d)\n",
++                                  cq->qid, ret);
+ unlock:
+       mutex_unlock(&ctrl->irq_lock);
+-- 
+2.39.5
+
diff --git a/queue-6.14/phy-phy-rockchip-samsung-hdptx-fix-phy-pll-output-50.patch b/queue-6.14/phy-phy-rockchip-samsung-hdptx-fix-phy-pll-output-50.patch
new file mode 100644 (file)
index 0000000..f7e0963
--- /dev/null
@@ -0,0 +1,45 @@
+From 371607d9ad5dc82f9242808e7499ef1aac0d97d0 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun, 27 Apr 2025 17:51:24 +0800
+Subject: phy: phy-rockchip-samsung-hdptx: Fix PHY PLL output 50.25MHz error
+
+From: Algea Cao <algea.cao@rock-chips.com>
+
+[ Upstream commit f9475055b11c0c70979bd1667a76b2ebae638eb7 ]
+
+When using HDMI PLL frequency division coefficient at 50.25MHz
+that is calculated by rk_hdptx_phy_clk_pll_calc(), it fails to
+get PHY LANE lock. Although the calculated values are within the
+allowable range of PHY PLL configuration.
+
+In order to fix the PHY LANE lock error and provide the expected
+50.25MHz output, manually compute the required PHY PLL frequency
+division coefficient and add it to ropll_tmds_cfg configuration
+table.
+
+Signed-off-by: Algea Cao <algea.cao@rock-chips.com>
+Reviewed-by: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
+Acked-by: Heiko Stuebner <heiko@sntech.de>
+Link: https://lore.kernel.org/r/20250427095124.3354439-1-algea.cao@rock-chips.com
+Signed-off-by: Vinod Koul <vkoul@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/phy/rockchip/phy-rockchip-samsung-hdptx.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/drivers/phy/rockchip/phy-rockchip-samsung-hdptx.c b/drivers/phy/rockchip/phy-rockchip-samsung-hdptx.c
+index 920abf6fa9bdd..28a4235bfd5fb 100644
+--- a/drivers/phy/rockchip/phy-rockchip-samsung-hdptx.c
++++ b/drivers/phy/rockchip/phy-rockchip-samsung-hdptx.c
+@@ -325,6 +325,8 @@ static const struct ropll_config ropll_tmds_cfg[] = {
+         1, 1, 0, 0x20, 0x0c, 1, 0x0e, 0, 0, },
+       { 650000, 162, 162, 1, 1, 11, 1, 1, 1, 1, 1, 1, 1, 54, 0, 16, 4, 1,
+         1, 1, 0, 0x20, 0x0c, 1, 0x0e, 0, 0, },
++      { 502500, 84, 84, 1, 1, 7, 1, 1, 1, 1, 1, 1, 1, 11, 1, 4, 5,
++        4, 11, 1, 0, 0x20, 0x0c, 1, 0x0e, 0, 0, },
+       { 337500, 0x70, 0x70, 1, 1, 0xf, 1, 1, 1, 1, 1, 1, 1, 0x2, 0, 0x01, 5,
+         1, 1, 1, 0, 0x20, 0x0c, 1, 0x0e, 0, 0, },
+       { 400000, 100, 100, 1, 1, 11, 1, 1, 0, 1, 0, 1, 1, 0x9, 0, 0x05, 0,
+-- 
+2.39.5
+
diff --git a/queue-6.14/phy-starfive-jh7110-usb-fix-usb-2.0-host-occasional-.patch b/queue-6.14/phy-starfive-jh7110-usb-fix-usb-2.0-host-occasional-.patch
new file mode 100644 (file)
index 0000000..da5dc74
--- /dev/null
@@ -0,0 +1,57 @@
+From b6b7ba872ea198f9ba75cd09958b42de3650b96f Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 22 Apr 2025 18:12:44 +0800
+Subject: phy: starfive: jh7110-usb: Fix USB 2.0 host occasional detection
+ failure
+
+From: Hal Feng <hal.feng@starfivetech.com>
+
+[ Upstream commit 3f097adb9b6c804636bcf8d01e0e7bc037bee0d3 ]
+
+JH7110 USB 2.0 host fails to detect USB 2.0 devices occasionally. With a
+long time of debugging and testing, we found that setting Rx clock gating
+control signal to normal power consumption mode can solve this problem.
+
+Signed-off-by: Hal Feng <hal.feng@starfivetech.com>
+Link: https://lore.kernel.org/r/20250422101244.51686-1-hal.feng@starfivetech.com
+Signed-off-by: Vinod Koul <vkoul@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/phy/starfive/phy-jh7110-usb.c | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+diff --git a/drivers/phy/starfive/phy-jh7110-usb.c b/drivers/phy/starfive/phy-jh7110-usb.c
+index cb5454fbe2c8f..b505d89860b43 100644
+--- a/drivers/phy/starfive/phy-jh7110-usb.c
++++ b/drivers/phy/starfive/phy-jh7110-usb.c
+@@ -18,6 +18,8 @@
+ #include <linux/usb/of.h>
+ #define USB_125M_CLK_RATE             125000000
++#define USB_CLK_MODE_OFF              0x0
++#define USB_CLK_MODE_RX_NORMAL_PWR    BIT(1)
+ #define USB_LS_KEEPALIVE_OFF          0x4
+ #define USB_LS_KEEPALIVE_ENABLE               BIT(4)
+@@ -78,6 +80,7 @@ static int jh7110_usb2_phy_init(struct phy *_phy)
+ {
+       struct jh7110_usb2_phy *phy = phy_get_drvdata(_phy);
+       int ret;
++      unsigned int val;
+       ret = clk_set_rate(phy->usb_125m_clk, USB_125M_CLK_RATE);
+       if (ret)
+@@ -87,6 +90,10 @@ static int jh7110_usb2_phy_init(struct phy *_phy)
+       if (ret)
+               return ret;
++      val = readl(phy->regs + USB_CLK_MODE_OFF);
++      val |= USB_CLK_MODE_RX_NORMAL_PWR;
++      writel(val, phy->regs + USB_CLK_MODE_OFF);
++
+       return 0;
+ }
+-- 
+2.39.5
+
diff --git a/queue-6.14/platform-x86-fujitsu-laptop-support-lifebook-s2110-h.patch b/queue-6.14/platform-x86-fujitsu-laptop-support-lifebook-s2110-h.patch
new file mode 100644 (file)
index 0000000..31adbf2
--- /dev/null
@@ -0,0 +1,111 @@
+From 9a9a0f149889e3dd86f83609788acc0d322203cd Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 9 May 2025 21:42:49 +0300
+Subject: platform/x86: fujitsu-laptop: Support Lifebook S2110 hotkeys
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Valtteri Koskivuori <vkoskiv@gmail.com>
+
+[ Upstream commit a7e255ff9fe4d9b8b902023aaf5b7a673786bb50 ]
+
+The S2110 has an additional set of media playback control keys enabled
+by a hardware toggle button that switches the keys between "Application"
+and "Player" modes. Toggling "Player" mode just shifts the scancode of
+each hotkey up by 4.
+
+Add defines for new scancodes, and a keymap and dmi id for the S2110.
+
+Tested on a Fujitsu Lifebook S2110.
+
+Signed-off-by: Valtteri Koskivuori <vkoskiv@gmail.com>
+Acked-by: Jonathan Woithe <jwoithe@just42.net>
+Link: https://lore.kernel.org/r/20250509184251.713003-1-vkoskiv@gmail.com
+Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
+Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/platform/x86/fujitsu-laptop.c | 33 +++++++++++++++++++++++----
+ 1 file changed, 29 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/platform/x86/fujitsu-laptop.c b/drivers/platform/x86/fujitsu-laptop.c
+index a0eae24ca9e60..162809140f68a 100644
+--- a/drivers/platform/x86/fujitsu-laptop.c
++++ b/drivers/platform/x86/fujitsu-laptop.c
+@@ -17,13 +17,13 @@
+ /*
+  * fujitsu-laptop.c - Fujitsu laptop support, providing access to additional
+  * features made available on a range of Fujitsu laptops including the
+- * P2xxx/P5xxx/S6xxx/S7xxx series.
++ * P2xxx/P5xxx/S2xxx/S6xxx/S7xxx series.
+  *
+  * This driver implements a vendor-specific backlight control interface for
+  * Fujitsu laptops and provides support for hotkeys present on certain Fujitsu
+  * laptops.
+  *
+- * This driver has been tested on a Fujitsu Lifebook S6410, S7020 and
++ * This driver has been tested on a Fujitsu Lifebook S2110, S6410, S7020 and
+  * P8010.  It should work on most P-series and S-series Lifebooks, but
+  * YMMV.
+  *
+@@ -107,7 +107,11 @@
+ #define KEY2_CODE                     0x411
+ #define KEY3_CODE                     0x412
+ #define KEY4_CODE                     0x413
+-#define KEY5_CODE                     0x420
++#define KEY5_CODE                     0x414
++#define KEY6_CODE                     0x415
++#define KEY7_CODE                     0x416
++#define KEY8_CODE                     0x417
++#define KEY9_CODE                     0x420
+ /* Hotkey ringbuffer limits */
+ #define MAX_HOTKEY_RINGBUFFER_SIZE    100
+@@ -560,7 +564,7 @@ static const struct key_entry keymap_default[] = {
+       { KE_KEY, KEY2_CODE,            { KEY_PROG2 } },
+       { KE_KEY, KEY3_CODE,            { KEY_PROG3 } },
+       { KE_KEY, KEY4_CODE,            { KEY_PROG4 } },
+-      { KE_KEY, KEY5_CODE,            { KEY_RFKILL } },
++      { KE_KEY, KEY9_CODE,            { KEY_RFKILL } },
+       /* Soft keys read from status flags */
+       { KE_KEY, FLAG_RFKILL,          { KEY_RFKILL } },
+       { KE_KEY, FLAG_TOUCHPAD_TOGGLE, { KEY_TOUCHPAD_TOGGLE } },
+@@ -584,6 +588,18 @@ static const struct key_entry keymap_p8010[] = {
+       { KE_END, 0 }
+ };
++static const struct key_entry keymap_s2110[] = {
++      { KE_KEY, KEY1_CODE, { KEY_PROG1 } }, /* "A" */
++      { KE_KEY, KEY2_CODE, { KEY_PROG2 } }, /* "B" */
++      { KE_KEY, KEY3_CODE, { KEY_WWW } },   /* "Internet" */
++      { KE_KEY, KEY4_CODE, { KEY_EMAIL } }, /* "E-mail" */
++      { KE_KEY, KEY5_CODE, { KEY_STOPCD } },
++      { KE_KEY, KEY6_CODE, { KEY_PLAYPAUSE } },
++      { KE_KEY, KEY7_CODE, { KEY_PREVIOUSSONG } },
++      { KE_KEY, KEY8_CODE, { KEY_NEXTSONG } },
++      { KE_END, 0 }
++};
++
+ static const struct key_entry *keymap = keymap_default;
+ static int fujitsu_laptop_dmi_keymap_override(const struct dmi_system_id *id)
+@@ -621,6 +637,15 @@ static const struct dmi_system_id fujitsu_laptop_dmi_table[] = {
+               },
+               .driver_data = (void *)keymap_p8010
+       },
++      {
++              .callback = fujitsu_laptop_dmi_keymap_override,
++              .ident = "Fujitsu LifeBook S2110",
++              .matches = {
++                      DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"),
++                      DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK S2110"),
++              },
++              .driver_data = (void *)keymap_s2110
++      },
+       {}
+ };
+-- 
+2.39.5
+
diff --git a/queue-6.14/platform-x86-thinkpad_acpi-ignore-battery-threshold-.patch b/queue-6.14/platform-x86-thinkpad_acpi-ignore-battery-threshold-.patch
new file mode 100644 (file)
index 0000000..20e77c7
--- /dev/null
@@ -0,0 +1,56 @@
+From 61e649d4e2118997f0d6554355e84798969eb4d9 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 16 May 2025 22:33:37 -0400
+Subject: platform/x86: thinkpad_acpi: Ignore battery threshold change event
+ notification
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Mark Pearson <mpearson-lenovo@squebb.ca>
+
+[ Upstream commit 29e4e6b4235fefa5930affb531fe449cac330a72 ]
+
+If user modifies the battery charge threshold an ACPI event is generated.
+Confirmed with Lenovo FW team this is only generated on user event. As no
+action is needed, ignore the event and prevent spurious kernel logs.
+
+Reported-by: Derek Barbosa <debarbos@redhat.com>
+Closes: https://lore.kernel.org/platform-driver-x86/7e9a1c47-5d9c-4978-af20-3949d53fb5dc@app.fastmail.com/T/#m5f5b9ae31d3fbf30d7d9a9d76c15fb3502dfd903
+Signed-off-by: Mark Pearson <mpearson-lenovo@squebb.ca>
+Reviewed-by: Hans de Goede <hdegoede@redhat.com>
+Reviewed-by: Armin Wolf <W_Armin@gmx.de>
+Link: https://lore.kernel.org/r/20250517023348.2962591-1-mpearson-lenovo@squebb.ca
+Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
+Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/platform/x86/thinkpad_acpi.c | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c
+index ace1cd14d4ba3..d0376ee1f8ce0 100644
+--- a/drivers/platform/x86/thinkpad_acpi.c
++++ b/drivers/platform/x86/thinkpad_acpi.c
+@@ -232,6 +232,7 @@ enum tpacpi_hkey_event_t {
+       /* Thermal events */
+       TP_HKEY_EV_ALARM_BAT_HOT        = 0x6011, /* battery too hot */
+       TP_HKEY_EV_ALARM_BAT_XHOT       = 0x6012, /* battery critically hot */
++      TP_HKEY_EV_ALARM_BAT_LIM_CHANGE = 0x6013, /* battery charge limit changed*/
+       TP_HKEY_EV_ALARM_SENSOR_HOT     = 0x6021, /* sensor too hot */
+       TP_HKEY_EV_ALARM_SENSOR_XHOT    = 0x6022, /* sensor critically hot */
+       TP_HKEY_EV_THM_TABLE_CHANGED    = 0x6030, /* windows; thermal table changed */
+@@ -3780,6 +3781,10 @@ static bool hotkey_notify_6xxx(const u32 hkey, bool *send_acpi_ev)
+               pr_alert("THERMAL EMERGENCY: battery is extremely hot!\n");
+               /* recommended action: immediate sleep/hibernate */
+               break;
++      case TP_HKEY_EV_ALARM_BAT_LIM_CHANGE:
++              pr_debug("Battery Info: battery charge threshold changed\n");
++              /* User changed charging threshold. No action needed */
++              return true;
+       case TP_HKEY_EV_ALARM_SENSOR_HOT:
+               pr_crit("THERMAL ALARM: a sensor reports something is too hot!\n");
+               /* recommended action: warn user through gui, that */
+-- 
+2.39.5
+
diff --git a/queue-6.14/platform-x86-thinkpad_acpi-support-also-nec-lavie-x1.patch b/queue-6.14/platform-x86-thinkpad_acpi-support-also-nec-lavie-x1.patch
new file mode 100644 (file)
index 0000000..6e1e58c
--- /dev/null
@@ -0,0 +1,59 @@
+From c738691c9fcb0de0563eaacab02197085e35cca7 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 5 May 2025 01:55:13 +0900
+Subject: platform/x86: thinkpad_acpi: Support also NEC Lavie X1475JAS
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: John Chau <johnchau@0atlas.com>
+
+[ Upstream commit a032f29a15412fab9f4352e0032836d51420a338 ]
+
+Change get_thinkpad_model_data() to check for additional vendor name
+"NEC" in order to support NEC Lavie X1475JAS notebook (and perhaps
+more).
+
+The reason of this works with minimal changes is because NEC Lavie
+X1475JAS is a Thinkpad inside. ACPI dumps reveals its OEM ID to be
+"LENOVO", BIOS version "R2PET30W" matches typical Lenovo BIOS version,
+the existence of HKEY of LEN0268, with DMI fw string is "R2PHT24W".
+
+I compiled and tested with my own machine, attached the dmesg
+below as proof of work:
+[    6.288932] thinkpad_acpi: ThinkPad ACPI Extras v0.26
+[    6.288937] thinkpad_acpi: http://ibm-acpi.sf.net/
+[    6.288938] thinkpad_acpi: ThinkPad BIOS R2PET30W (1.11 ), EC R2PHT24W
+[    6.307000] thinkpad_acpi: radio switch found; radios are enabled
+[    6.307030] thinkpad_acpi: This ThinkPad has standard ACPI backlight brightness control, supported by the ACPI video driver
+[    6.307033] thinkpad_acpi: Disabling thinkpad-acpi brightness events by default...
+[    6.320322] thinkpad_acpi: rfkill switch tpacpi_bluetooth_sw: radio is unblocked
+[    6.371963] thinkpad_acpi: secondary fan control detected & enabled
+[    6.391922] thinkpad_acpi: battery 1 registered (start 0, stop 85, behaviours: 0x7)
+[    6.398375] input: ThinkPad Extra Buttons as /devices/platform/thinkpad_acpi/input/input13
+
+Signed-off-by: John Chau <johnchau@0atlas.com>
+Link: https://lore.kernel.org/r/20250504165513.295135-1-johnchau@0atlas.com
+Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
+Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/platform/x86/thinkpad_acpi.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c
+index 2ff38ca9ddb40..ace1cd14d4ba3 100644
+--- a/drivers/platform/x86/thinkpad_acpi.c
++++ b/drivers/platform/x86/thinkpad_acpi.c
+@@ -11481,6 +11481,8 @@ static int __must_check __init get_thinkpad_model_data(
+               tp->vendor = PCI_VENDOR_ID_IBM;
+       else if (dmi_name_in_vendors("LENOVO"))
+               tp->vendor = PCI_VENDOR_ID_LENOVO;
++      else if (dmi_name_in_vendors("NEC"))
++              tp->vendor = PCI_VENDOR_ID_LENOVO;
+       else
+               return 0;
+-- 
+2.39.5
+
index 88db121fcf3d79196af923c3cf8bba361536f0f9..f3f80e3543165fc2ac4f64dd50f948e79d9a9585 100644 (file)
@@ -45,3 +45,29 @@ perf-arm-cmn-add-cmn-s3-acpi-binding.patch
 iommu-handle-yet-another-race-around-registration.patch
 coredump-fix-error-handling-for-replace_fd.patch
 coredump-hand-a-pidfd-to-the-usermode-coredump-helper.patch
+dmaengine-idxd-cdev-fix-uninitialized-use-of-sva-in-.patch
+hid-amd_sfh-avoid-clearing-reports-for-sra-sensor.patch
+hid-quirks-add-adata-xpg-alpha-wireless-mouse-suppor.patch
+nfs-don-t-share-pnfs-ds-connections-between-net-name.patch
+platform-x86-thinkpad_acpi-support-also-nec-lavie-x1.patch
+kbuild-require-pahole-v1.28-or-v1.29-with-gendwarfks.patch
+um-let-make-clean-properly-clean-underlying-subarch-.patch
+nvmet-pci-epf-cleanup-nvmet_pci_epf_raise_irq.patch
+gpio-virtuser-fix-potential-out-of-bound-write.patch
+drm-amd-display-fix-link_set_dpms_off-multi-display-.patch
+drm-amd-display-check-stream-id-dml21-wrapper-to-get.patch
+nvme-multipath-enable-blk_feat_atomic_writes-for-mul.patch
+phy-starfive-jh7110-usb-fix-usb-2.0-host-occasional-.patch
+phy-phy-rockchip-samsung-hdptx-fix-phy-pll-output-50.patch
+spi-spi-sun4i-fix-early-activation.patch
+nvme-all-namespaces-in-a-subsystem-must-adhere-to-a-.patch
+nvme-pci-add-nvme_quirk_no_deepest_ps-quirk-for-soli.patch
+drm-xe-xe2hpg-add-wa_22021007897.patch
+drm-xe-save-the-gt-pointer-in-lrc-and-drop-the-tile.patch
+char-tpm-tpm-buf-add-sanity-check-fallback-in-read-h.patch
+nfs-avoid-flushing-data-while-holding-directory-lock.patch
+platform-x86-fujitsu-laptop-support-lifebook-s2110-h.patch
+alsa-hda-realtek-restore-auto-mute-mode-for-dell-chr.patch
+platform-x86-thinkpad_acpi-ignore-battery-threshold-.patch
+net-ethernet-ti-am65-cpsw-lower-random-mac-address-e.patch
+ksmbd-use-list_first_entry_or_null-for-opinfo_get_li.patch
diff --git a/queue-6.14/spi-spi-sun4i-fix-early-activation.patch b/queue-6.14/spi-spi-sun4i-fix-early-activation.patch
new file mode 100644 (file)
index 0000000..040e31f
--- /dev/null
@@ -0,0 +1,52 @@
+From 28273d20afc913c7f5b6d54a14f620872e75710e Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 2 May 2025 11:55:20 +0200
+Subject: spi: spi-sun4i: fix early activation
+
+From: Alessandro Grassi <alessandro.grassi@mailbox.org>
+
+[ Upstream commit fb98bd0a13de2c9d96cb5c00c81b5ca118ac9d71 ]
+
+The SPI interface is activated before the CPOL setting is applied. In
+that moment, the clock idles high and CS goes low. After a short delay,
+CPOL and other settings are applied, which may cause the clock to change
+state and idle low. This transition is not part of a clock cycle, and it
+can confuse the receiving device.
+
+To prevent this unexpected transition, activate the interface while CPOL
+and the other settings are being applied.
+
+Signed-off-by: Alessandro Grassi <alessandro.grassi@mailbox.org>
+Link: https://patch.msgid.link/20250502095520.13825-1-alessandro.grassi@mailbox.org
+Signed-off-by: Mark Brown <broonie@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/spi/spi-sun4i.c | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/spi/spi-sun4i.c b/drivers/spi/spi-sun4i.c
+index fcbe864c9b7d6..4b070377e3d1d 100644
+--- a/drivers/spi/spi-sun4i.c
++++ b/drivers/spi/spi-sun4i.c
+@@ -264,6 +264,9 @@ static int sun4i_spi_transfer_one(struct spi_controller *host,
+       else
+               reg |= SUN4I_CTL_DHB;
++      /* Now that the settings are correct, enable the interface */
++      reg |= SUN4I_CTL_ENABLE;
++
+       sun4i_spi_write(sspi, SUN4I_CTL_REG, reg);
+       /* Ensure that we have a parent clock fast enough */
+@@ -404,7 +407,7 @@ static int sun4i_spi_runtime_resume(struct device *dev)
+       }
+       sun4i_spi_write(sspi, SUN4I_CTL_REG,
+-                      SUN4I_CTL_ENABLE | SUN4I_CTL_MASTER | SUN4I_CTL_TP);
++                      SUN4I_CTL_MASTER | SUN4I_CTL_TP);
+       return 0;
+-- 
+2.39.5
+
diff --git a/queue-6.14/um-let-make-clean-properly-clean-underlying-subarch-.patch b/queue-6.14/um-let-make-clean-properly-clean-underlying-subarch-.patch
new file mode 100644 (file)
index 0000000..0847e6d
--- /dev/null
@@ -0,0 +1,59 @@
+From a8e69a881fefb8f2368a4a1b5980832f353432f1 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 7 May 2025 16:49:33 +0900
+Subject: um: let 'make clean' properly clean underlying SUBARCH as well
+
+From: Masahiro Yamada <masahiroy@kernel.org>
+
+[ Upstream commit ab09da75700e9d25c7dfbc7f7934920beb5e39b9 ]
+
+Building the kernel with O= is affected by stale in-tree build artifacts.
+
+So, if the source tree is not clean, Kbuild displays the following:
+
+  $ make ARCH=um O=build defconfig
+  make[1]: Entering directory '/.../linux/build'
+  ***
+  *** The source tree is not clean, please run 'make ARCH=um mrproper'
+  *** in /.../linux
+  ***
+  make[2]: *** [/.../linux/Makefile:673: outputmakefile] Error 1
+  make[1]: *** [/.../linux/Makefile:248: __sub-make] Error 2
+  make[1]: Leaving directory '/.../linux/build'
+  make: *** [Makefile:248: __sub-make] Error 2
+
+Usually, running 'make mrproper' is sufficient for cleaning the source
+tree for out-of-tree builds.
+
+However, building UML generates build artifacts not only in arch/um/,
+but also in the SUBARCH directory (i.e., arch/x86/). If in-tree stale
+files remain under arch/x86/, Kbuild will reuse them instead of creating
+new ones under the specified build directory.
+
+This commit makes 'make ARCH=um clean' recurse into the SUBARCH directory.
+
+Reported-by: Shuah Khan <skhan@linuxfoundation.org>
+Closes: https://lore.kernel.org/lkml/20250502172459.14175-1-skhan@linuxfoundation.org/
+Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
+Acked-by: Johannes Berg <johannes@sipsolutions.net>
+Reviewed-by: David Gow <davidgow@google.com>
+Reviewed-by: Shuah Khan <skhan@linuxfoundation.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/um/Makefile | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/arch/um/Makefile b/arch/um/Makefile
+index 1d36a613aad83..9ed792e565c91 100644
+--- a/arch/um/Makefile
++++ b/arch/um/Makefile
+@@ -154,5 +154,6 @@ MRPROPER_FILES += $(HOST_DIR)/include/generated
+ archclean:
+       @find . \( -name '*.bb' -o -name '*.bbg' -o -name '*.da' \
+               -o -name '*.gcov' \) -type f -print | xargs rm -f
++      $(Q)$(MAKE) -f $(srctree)/Makefile ARCH=$(HEADER_ARCH) clean
+ export HEADER_ARCH SUBARCH USER_CFLAGS CFLAGS_NO_HARDENING DEV_NULL_PATH
+-- 
+2.39.5
+