From f329488d85832f60f151b8d42991ae1ae8b32282 Mon Sep 17 00:00:00 2001 From: Sasha Levin Date: Mon, 2 Jun 2025 09:05:53 -0400 Subject: [PATCH] Fixes for 6.12 Signed-off-by: Sasha Levin --- ...-restore-auto-mute-mode-for-dell-chr.patch | 39 ++++ ...-add-sanity-check-fallback-in-read-h.patch | 68 +++++++ ...dev-fix-uninitialized-use-of-sva-in-.patch | 60 +++++++ ...check-stream-id-dml21-wrapper-to-get.patch | 131 ++++++++++++++ ...fix-link_set_dpms_off-multi-display-.patch | 71 ++++++++ ...-gt-pointer-in-lrc-and-drop-the-tile.patch | 70 ++++++++ .../drm-xe-xe2hpg-add-wa_22021007897.patch | 55 ++++++ ...ser-fix-potential-out-of-bound-write.patch | 65 +++++++ ...data-xpg-alpha-wireless-mouse-suppor.patch | 50 ++++++ ...irst_entry_or_null-for-opinfo_get_li.patch | 45 +++++ ...am65-cpsw-lower-random-mac-address-e.patch | 41 +++++ ...ng-data-while-holding-directory-lock.patch | 110 ++++++++++++ ...pnfs-ds-connections-between-net-name.patch | 166 ++++++++++++++++++ ...e_quirk_no_deepest_ps-quirk-for-soli.patch | 41 +++++ ...-samsung-hdptx-fix-phy-pll-output-50.patch | 45 +++++ ...110-usb-fix-usb-2.0-host-occasional-.patch | 57 ++++++ ...itsu-laptop-support-lifebook-s2110-h.patch | 111 ++++++++++++ ...nkpad_acpi-ignore-battery-threshold-.patch | 56 ++++++ ...nkpad_acpi-support-also-nec-lavie-x1.patch | 59 +++++++ queue-6.12/series | 21 +++ .../spi-spi-sun4i-fix-early-activation.patch | 52 ++++++ ...n-properly-clean-underlying-subarch-.patch | 59 +++++++ 22 files changed, 1472 insertions(+) create mode 100644 queue-6.12/alsa-hda-realtek-restore-auto-mute-mode-for-dell-chr.patch create mode 100644 queue-6.12/char-tpm-tpm-buf-add-sanity-check-fallback-in-read-h.patch create mode 100644 queue-6.12/dmaengine-idxd-cdev-fix-uninitialized-use-of-sva-in-.patch create mode 100644 queue-6.12/drm-amd-display-check-stream-id-dml21-wrapper-to-get.patch create mode 100644 queue-6.12/drm-amd-display-fix-link_set_dpms_off-multi-display-.patch create mode 100644 queue-6.12/drm-xe-save-the-gt-pointer-in-lrc-and-drop-the-tile.patch create mode 100644 queue-6.12/drm-xe-xe2hpg-add-wa_22021007897.patch create mode 100644 queue-6.12/gpio-virtuser-fix-potential-out-of-bound-write.patch create mode 100644 queue-6.12/hid-quirks-add-adata-xpg-alpha-wireless-mouse-suppor.patch create mode 100644 queue-6.12/ksmbd-use-list_first_entry_or_null-for-opinfo_get_li.patch create mode 100644 queue-6.12/net-ethernet-ti-am65-cpsw-lower-random-mac-address-e.patch create mode 100644 queue-6.12/nfs-avoid-flushing-data-while-holding-directory-lock.patch create mode 100644 queue-6.12/nfs-don-t-share-pnfs-ds-connections-between-net-name.patch create mode 100644 queue-6.12/nvme-pci-add-nvme_quirk_no_deepest_ps-quirk-for-soli.patch create mode 100644 queue-6.12/phy-phy-rockchip-samsung-hdptx-fix-phy-pll-output-50.patch create mode 100644 queue-6.12/phy-starfive-jh7110-usb-fix-usb-2.0-host-occasional-.patch create mode 100644 queue-6.12/platform-x86-fujitsu-laptop-support-lifebook-s2110-h.patch create mode 100644 queue-6.12/platform-x86-thinkpad_acpi-ignore-battery-threshold-.patch create mode 100644 queue-6.12/platform-x86-thinkpad_acpi-support-also-nec-lavie-x1.patch create mode 100644 queue-6.12/spi-spi-sun4i-fix-early-activation.patch create mode 100644 queue-6.12/um-let-make-clean-properly-clean-underlying-subarch-.patch diff --git a/queue-6.12/alsa-hda-realtek-restore-auto-mute-mode-for-dell-chr.patch b/queue-6.12/alsa-hda-realtek-restore-auto-mute-mode-for-dell-chr.patch new file mode 100644 index 0000000000..6c505f1ce8 --- /dev/null +++ b/queue-6.12/alsa-hda-realtek-restore-auto-mute-mode-for-dell-chr.patch @@ -0,0 +1,39 @@ +From c59aa1a81be8360c170909802bf1bafcfd7e865d Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Fri, 16 May 2025 14:53:37 +0800 +Subject: ALSA: hda/realtek - restore auto-mute mode for Dell Chrome platform + +From: Kailang Yang + +[ 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 +Links: https://lore.kernel.org/ee8bbe5236464c369719d96269ba8ef8@realtek.com +Signed-off-by: Takashi Iwai +Signed-off-by: Sasha Levin +--- + 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 13ffc9a6555f6..dce5680912006 100644 +--- a/sound/pci/hda/patch_realtek.c ++++ b/sound/pci/hda/patch_realtek.c +@@ -6813,7 +6813,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.12/char-tpm-tpm-buf-add-sanity-check-fallback-in-read-h.patch b/queue-6.12/char-tpm-tpm-buf-add-sanity-check-fallback-in-read-h.patch new file mode 100644 index 0000000000..5ef0cc4f94 --- /dev/null +++ b/queue-6.12/char-tpm-tpm-buf-add-sanity-check-fallback-in-read-h.patch @@ -0,0 +1,68 @@ +From 6a2b5fca8d04e5991ea76a2b6a41c5959d5ea1c3 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Thu, 10 Apr 2025 16:04:42 +0530 +Subject: char: tpm: tpm-buf: Add sanity check fallback in read helpers + +From: Purva Yeshi + +[ 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 +Reviewed-by: Stefano Garzarella +Reviewed-by: Jarkko Sakkinen +Signed-off-by: Jarkko Sakkinen +Signed-off-by: Sasha Levin +--- + 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.12/dmaengine-idxd-cdev-fix-uninitialized-use-of-sva-in-.patch b/queue-6.12/dmaengine-idxd-cdev-fix-uninitialized-use-of-sva-in-.patch new file mode 100644 index 0000000000..268c3ce2ac --- /dev/null +++ b/queue-6.12/dmaengine-idxd-cdev-fix-uninitialized-use-of-sva-in-.patch @@ -0,0 +1,60 @@ +From 7e5f79277d40f4c2844e91f7bbfc11f3fc9f57ed Mon Sep 17 00:00:00 2001 +From: Sasha Levin +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 + +[ 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 +Reviewed-by: Dave Jiang +Acked-by: Vinicius Costa Gomes +Link: https://lore.kernel.org/r/20250410110216.21592-1-purvayeshi550@gmail.com +Signed-off-by: Vinod Koul +Signed-off-by: Sasha Levin +--- + 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 22aa2bab3693c..19a58c4ecef3f 100644 +--- a/drivers/dma/idxd/cdev.c ++++ b/drivers/dma/idxd/cdev.c +@@ -225,7 +225,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; + +@@ -322,7 +322,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.12/drm-amd-display-check-stream-id-dml21-wrapper-to-get.patch b/queue-6.12/drm-amd-display-check-stream-id-dml21-wrapper-to-get.patch new file mode 100644 index 0000000000..53facf83ec --- /dev/null +++ b/queue-6.12/drm-amd-display-check-stream-id-dml21-wrapper-to-get.patch @@ -0,0 +1,131 @@ +From 2ca062501c16b880d76582f2426d136694e8ce35 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +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 + +[ 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] +[ 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 +Signed-off-by: Aurabindo Pillai +Signed-off-by: Ray Wu +Tested-by: Daniel Wheeler +Signed-off-by: Alex Deucher +(cherry picked from commit f8ad62c0a93e5dd94243e10f1b742232e4d6411e) +Signed-off-by: Sasha Levin +--- + .../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 55014c1521167..7e3d506bb79b9 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 +@@ -887,7 +887,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; + +@@ -895,10 +895,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; ++ } + } + } + } +@@ -921,14 +923,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; + } +@@ -1013,7 +1015,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++; +@@ -1024,7 +1026,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.12/drm-amd-display-fix-link_set_dpms_off-multi-display-.patch b/queue-6.12/drm-amd-display-fix-link_set_dpms_off-multi-display-.patch new file mode 100644 index 0000000000..61635db0e2 --- /dev/null +++ b/queue-6.12/drm-amd-display-fix-link_set_dpms_off-multi-display-.patch @@ -0,0 +1,71 @@ +From da681738d4474e779cd7680d5aab40feb5ef7dba Mon Sep 17 00:00:00 2001 +From: Sasha Levin +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 + +[ 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 +Signed-off-by: George Shen +Signed-off-by: Ray Wu +Tested-by: Daniel Wheeler +Signed-off-by: Alex Deucher +(cherry picked from commit 1561782686ccc36af844d55d31b44c938dd412dc) +Signed-off-by: Sasha Levin +--- + 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 c4e03482ba9ae..aa28001297675 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.12/drm-xe-save-the-gt-pointer-in-lrc-and-drop-the-tile.patch b/queue-6.12/drm-xe-save-the-gt-pointer-in-lrc-and-drop-the-tile.patch new file mode 100644 index 0000000000..eedc12371d --- /dev/null +++ b/queue-6.12/drm-xe-save-the-gt-pointer-in-lrc-and-drop-the-tile.patch @@ -0,0 +1,70 @@ +From 9057d98bdb583292fa2a13d9e502e6018d60063e Mon Sep 17 00:00:00 2001 +From: Sasha Levin +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 + +[ 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 +Reviewed-by: Matthew Brost +Reviewed-by: Lucas De Marchi +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 +Signed-off-by: Sasha Levin +--- + 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 2d4e38b3bab19..ce6d2167b94ad 100644 +--- a/drivers/gpu/drm/xe/xe_lrc.c ++++ b/drivers/gpu/drm/xe/xe_lrc.c +@@ -874,7 +874,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)); +@@ -905,6 +905,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)) +@@ -923,7 +924,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.12/drm-xe-xe2hpg-add-wa_22021007897.patch b/queue-6.12/drm-xe-xe2hpg-add-wa_22021007897.patch new file mode 100644 index 0000000000..95cbddd1f1 --- /dev/null +++ b/queue-6.12/drm-xe-xe2hpg-add-wa_22021007897.patch @@ -0,0 +1,55 @@ +From 2707f1bd37afbc2dc7dc78a73e95cd48ba2b0d2a Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Mon, 12 May 2025 06:50:04 +0000 +Subject: drm/xe/xe2hpg: Add Wa_22021007897 + +From: Aradhya Bhatia + +[ 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 +Reviewed-by: Tejas Upadhyay +Signed-off-by: Aradhya Bhatia +Link: https://lore.kernel.org/r/20250512065004.2576-1-aradhya.bhatia@intel.com +Signed-off-by: Matt Roper +(cherry picked from commit e5c13e2c505b73a8667ef9a0fd5cbd4227e483e6) +Signed-off-by: Lucas De Marchi +Signed-off-by: Sasha Levin +--- + 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 5404de2aea545..c160b015d178a 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 0a1905f8d380a..aea6034a81079 100644 +--- a/drivers/gpu/drm/xe/xe_wa.c ++++ b/drivers/gpu/drm/xe/xe_wa.c +@@ -783,6 +783,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.12/gpio-virtuser-fix-potential-out-of-bound-write.patch b/queue-6.12/gpio-virtuser-fix-potential-out-of-bound-write.patch new file mode 100644 index 0000000000..fb0419bf71 --- /dev/null +++ b/queue-6.12/gpio-virtuser-fix-potential-out-of-bound-write.patch @@ -0,0 +1,65 @@ +From 2969f999c670f42147438bc7e926cc1dc8d1b722 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Fri, 9 May 2025 17:04:59 +0200 +Subject: gpio: virtuser: fix potential out-of-bound write + +From: Markus Burri + +[ 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 +Closes: https://lore.kernel.org/oe-kbuild-all/202505091754.285hHbr2-lkp@intel.com/ +Signed-off-by: Markus Burri +Link: https://lore.kernel.org/r/20250509150459.115489-1-markus.burri@mt.com +Signed-off-by: Bartosz Golaszewski +Signed-off-by: Sasha Levin +--- + 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.12/hid-quirks-add-adata-xpg-alpha-wireless-mouse-suppor.patch b/queue-6.12/hid-quirks-add-adata-xpg-alpha-wireless-mouse-suppor.patch new file mode 100644 index 0000000000..c589ef1fec --- /dev/null +++ b/queue-6.12/hid-quirks-add-adata-xpg-alpha-wireless-mouse-suppor.patch @@ -0,0 +1,50 @@ +From 2385257220afa030330393a8d95044071f24b59b Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Wed, 9 Apr 2025 00:04:28 -0600 +Subject: HID: quirks: Add ADATA XPG alpha wireless mouse support + +From: Milton Barrera + +[ 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 +Signed-off-by: Jiri Kosina +Signed-off-by: Sasha Levin +--- + 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 92baa34f42f28..c6424f6259487 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.12/ksmbd-use-list_first_entry_or_null-for-opinfo_get_li.patch b/queue-6.12/ksmbd-use-list_first_entry_or_null-for-opinfo_get_li.patch new file mode 100644 index 0000000000..a71ae537ed --- /dev/null +++ b/queue-6.12/ksmbd-use-list_first_entry_or_null-for-opinfo_get_li.patch @@ -0,0 +1,45 @@ +From 059c145b840a78ec76590740691e014d488774f6 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 20 May 2025 09:25:03 +0900 +Subject: ksmbd: use list_first_entry_or_null for opinfo_get_list() + +From: Namjae Jeon + +[ 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 +Reported-by: Dan Carpenter +Closes: https://lore.kernel.org/r/202505080231.7OXwq4Te-lkp@intel.com/ +Signed-off-by: Namjae Jeon +Signed-off-by: Steve French +Signed-off-by: Sasha Levin +--- + 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.12/net-ethernet-ti-am65-cpsw-lower-random-mac-address-e.patch b/queue-6.12/net-ethernet-ti-am65-cpsw-lower-random-mac-address-e.patch new file mode 100644 index 0000000000..beddb4d209 --- /dev/null +++ b/queue-6.12/net-ethernet-ti-am65-cpsw-lower-random-mac-address-e.patch @@ -0,0 +1,41 @@ +From 9fdd71578190890007da64deff4ce505d7661e49 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +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 + +[ 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 +Reviewed-by: Simon Horman +Reviewed-by: Roger Quadros +Link: https://patch.msgid.link/20250516122655.442808-1-nm@ti.com +Signed-off-by: Jakub Kicinski +Signed-off-by: Sasha Levin +--- + 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 a21e7c0afbfdc..61788a43cb861 100644 +--- a/drivers/net/ethernet/ti/am65-cpsw-nuss.c ++++ b/drivers/net/ethernet/ti/am65-cpsw-nuss.c +@@ -2699,7 +2699,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.12/nfs-avoid-flushing-data-while-holding-directory-lock.patch b/queue-6.12/nfs-avoid-flushing-data-while-holding-directory-lock.patch new file mode 100644 index 0000000000..4ff23b36e6 --- /dev/null +++ b/queue-6.12/nfs-avoid-flushing-data-while-holding-directory-lock.patch @@ -0,0 +1,110 @@ +From f63b08bc565c33de74d19280fdf5b003dcf67122 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Sun, 27 Apr 2025 18:21:06 -0400 +Subject: NFS: Avoid flushing data while holding directory locks in + nfs_rename() + +From: Trond Myklebust + +[ 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 +Reviewed-by: Jeff Layton +Signed-off-by: Sasha Levin +--- + 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 03ecc77656151..4503758e9594b 100644 +--- a/fs/nfs/client.c ++++ b/fs/nfs/client.c +@@ -1096,6 +1096,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 492cffd9d3d84..f9f4a92f63e92 100644 +--- a/fs/nfs/dir.c ++++ b/fs/nfs/dir.c +@@ -2690,6 +2690,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 +@@ -2777,7 +2789,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 81ab18658d72d..2cff5cafbaa78 100644 +--- a/include/linux/nfs_fs_sb.h ++++ b/include/linux/nfs_fs_sb.h +@@ -211,6 +211,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 +@@ -234,9 +243,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.12/nfs-don-t-share-pnfs-ds-connections-between-net-name.patch b/queue-6.12/nfs-don-t-share-pnfs-ds-connections-between-net-name.patch new file mode 100644 index 0000000000..a023a639b1 --- /dev/null +++ b/queue-6.12/nfs-don-t-share-pnfs-ds-connections-between-net-name.patch @@ -0,0 +1,166 @@ +From 2f6316cc047cbb98ac00db35dd00114b6fcf15b4 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Thu, 10 Apr 2025 16:42:03 -0400 +Subject: nfs: don't share pNFS DS connections between net namespaces + +From: Jeff Layton + +[ 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 +Reported-by: Sargun Dillon +Closes: https://lore.kernel.org/linux-nfs/Z_ArpQC_vREh_hEA@telecaster/ +Tested-by: Sargun Dillon +Signed-off-by: Jeff Layton +Reviewed-by: Benjamin Coddington +Link: https://lore.kernel.org/r/20250410-nfs-ds-netns-v2-1-f80b7979ba80@kernel.org +Signed-off-by: Trond Myklebust +Signed-off-by: Sasha Levin +--- + 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.12/nvme-pci-add-nvme_quirk_no_deepest_ps-quirk-for-soli.patch b/queue-6.12/nvme-pci-add-nvme_quirk_no_deepest_ps-quirk-for-soli.patch new file mode 100644 index 0000000000..faef159046 --- /dev/null +++ b/queue-6.12/nvme-pci-add-nvme_quirk_no_deepest_ps-quirk-for-soli.patch @@ -0,0 +1,41 @@ +From d94e0e3e79d1cda50b7ae7cc864ab9b33f863582 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +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 + +[ 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 +Signed-off-by: Christoph Hellwig +Signed-off-by: Sasha Levin +--- + 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 cd8a10f6accff..37fd1a8ace127 100644 +--- a/drivers/nvme/host/pci.c ++++ b/drivers/nvme/host/pci.c +@@ -3701,6 +3701,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.12/phy-phy-rockchip-samsung-hdptx-fix-phy-pll-output-50.patch b/queue-6.12/phy-phy-rockchip-samsung-hdptx-fix-phy-pll-output-50.patch new file mode 100644 index 0000000000..5627109668 --- /dev/null +++ b/queue-6.12/phy-phy-rockchip-samsung-hdptx-fix-phy-pll-output-50.patch @@ -0,0 +1,45 @@ +From 70ca686e505bac76c79ae69f08f6a5dd40ce427c Mon Sep 17 00:00:00 2001 +From: Sasha Levin +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 + +[ 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 +Reviewed-by: Cristian Ciocaltea +Acked-by: Heiko Stuebner +Link: https://lore.kernel.org/r/20250427095124.3354439-1-algea.cao@rock-chips.com +Signed-off-by: Vinod Koul +Signed-off-by: Sasha Levin +--- + 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 dc6e01dff5c74..9b99fdd43f5f5 100644 +--- a/drivers/phy/rockchip/phy-rockchip-samsung-hdptx.c ++++ b/drivers/phy/rockchip/phy-rockchip-samsung-hdptx.c +@@ -328,6 +328,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.12/phy-starfive-jh7110-usb-fix-usb-2.0-host-occasional-.patch b/queue-6.12/phy-starfive-jh7110-usb-fix-usb-2.0-host-occasional-.patch new file mode 100644 index 0000000000..b831d2d3e2 --- /dev/null +++ b/queue-6.12/phy-starfive-jh7110-usb-fix-usb-2.0-host-occasional-.patch @@ -0,0 +1,57 @@ +From 7a84cbb362eb14fab6b7a278e3c00d23bcdbfb1a Mon Sep 17 00:00:00 2001 +From: Sasha Levin +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 + +[ 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 +Link: https://lore.kernel.org/r/20250422101244.51686-1-hal.feng@starfivetech.com +Signed-off-by: Vinod Koul +Signed-off-by: Sasha Levin +--- + 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 + + #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.12/platform-x86-fujitsu-laptop-support-lifebook-s2110-h.patch b/queue-6.12/platform-x86-fujitsu-laptop-support-lifebook-s2110-h.patch new file mode 100644 index 0000000000..2d3bd5bd35 --- /dev/null +++ b/queue-6.12/platform-x86-fujitsu-laptop-support-lifebook-s2110-h.patch @@ -0,0 +1,111 @@ +From 8ec683211f1c1ebc50854d48c7df87049c71e573 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +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 + +[ 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 +Acked-by: Jonathan Woithe +Link: https://lore.kernel.org/r/20250509184251.713003-1-vkoskiv@gmail.com +Reviewed-by: Ilpo Järvinen +Signed-off-by: Ilpo Järvinen +Signed-off-by: Sasha Levin +--- + 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 ae992ac1ab4ac..6d5300c54a421 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.12/platform-x86-thinkpad_acpi-ignore-battery-threshold-.patch b/queue-6.12/platform-x86-thinkpad_acpi-ignore-battery-threshold-.patch new file mode 100644 index 0000000000..0327735105 --- /dev/null +++ b/queue-6.12/platform-x86-thinkpad_acpi-ignore-battery-threshold-.patch @@ -0,0 +1,56 @@ +From 45f0fd654582a15a28a5d899da49021776e797c0 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +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 + +[ 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 +Closes: https://lore.kernel.org/platform-driver-x86/7e9a1c47-5d9c-4978-af20-3949d53fb5dc@app.fastmail.com/T/#m5f5b9ae31d3fbf30d7d9a9d76c15fb3502dfd903 +Signed-off-by: Mark Pearson +Reviewed-by: Hans de Goede +Reviewed-by: Armin Wolf +Link: https://lore.kernel.org/r/20250517023348.2962591-1-mpearson-lenovo@squebb.ca +Reviewed-by: Ilpo Järvinen +Signed-off-by: Ilpo Järvinen +Signed-off-by: Sasha Levin +--- + 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 fa60a221cfb14..0528af4ed8d69 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 */ +@@ -3778,6 +3779,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.12/platform-x86-thinkpad_acpi-support-also-nec-lavie-x1.patch b/queue-6.12/platform-x86-thinkpad_acpi-support-also-nec-lavie-x1.patch new file mode 100644 index 0000000000..c5d2f8e3b1 --- /dev/null +++ b/queue-6.12/platform-x86-thinkpad_acpi-support-also-nec-lavie-x1.patch @@ -0,0 +1,59 @@ +From c76565c4147ee79e594a69aa4605d826a9f2d230 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +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 + +[ 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 +Link: https://lore.kernel.org/r/20250504165513.295135-1-johnchau@0atlas.com +Reviewed-by: Ilpo Järvinen +Signed-off-by: Ilpo Järvinen +Signed-off-by: Sasha Levin +--- + 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 dea40da867552..fa60a221cfb14 100644 +--- a/drivers/platform/x86/thinkpad_acpi.c ++++ b/drivers/platform/x86/thinkpad_acpi.c +@@ -11472,6 +11472,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 + diff --git a/queue-6.12/series b/queue-6.12/series index 17e94b5ed1..489bd5fcfe 100644 --- a/queue-6.12/series +++ b/queue-6.12/series @@ -32,3 +32,24 @@ perf-arm-cmn-initialise-cmn-cpu-earlier.patch perf-arm-cmn-add-cmn-s3-acpi-binding.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-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 +um-let-make-clean-properly-clean-underlying-subarch-.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 +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-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.12/spi-spi-sun4i-fix-early-activation.patch b/queue-6.12/spi-spi-sun4i-fix-early-activation.patch new file mode 100644 index 0000000000..8f28779d1e --- /dev/null +++ b/queue-6.12/spi-spi-sun4i-fix-early-activation.patch @@ -0,0 +1,52 @@ +From 64c4ba0bcb79c673b088b0772fc669fdaf32411e Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Fri, 2 May 2025 11:55:20 +0200 +Subject: spi: spi-sun4i: fix early activation + +From: Alessandro Grassi + +[ 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 +Link: https://patch.msgid.link/20250502095520.13825-1-alessandro.grassi@mailbox.org +Signed-off-by: Mark Brown +Signed-off-by: Sasha Levin +--- + 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 2ee6755b43f54..3019f57e65841 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.12/um-let-make-clean-properly-clean-underlying-subarch-.patch b/queue-6.12/um-let-make-clean-properly-clean-underlying-subarch-.patch new file mode 100644 index 0000000000..632ab39a72 --- /dev/null +++ b/queue-6.12/um-let-make-clean-properly-clean-underlying-subarch-.patch @@ -0,0 +1,59 @@ +From 1a54623bea4af8262a95f267a9b43f93c0b99feb Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Wed, 7 May 2025 16:49:33 +0900 +Subject: um: let 'make clean' properly clean underlying SUBARCH as well + +From: Masahiro Yamada + +[ 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 +Closes: https://lore.kernel.org/lkml/20250502172459.14175-1-skhan@linuxfoundation.org/ +Signed-off-by: Masahiro Yamada +Acked-by: Johannes Berg +Reviewed-by: David Gow +Reviewed-by: Shuah Khan +Signed-off-by: Sasha Levin +--- + arch/um/Makefile | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/arch/um/Makefile b/arch/um/Makefile +index 00b63bac5effb..3317d87e20920 100644 +--- a/arch/um/Makefile ++++ b/arch/um/Makefile +@@ -151,5 +151,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 + -- 2.47.2