]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
Fixes for 5.4
authorSasha Levin <sashal@kernel.org>
Thu, 22 May 2025 20:52:58 +0000 (16:52 -0400)
committerSasha Levin <sashal@kernel.org>
Thu, 22 May 2025 20:52:58 +0000 (16:52 -0400)
Signed-off-by: Sasha Levin <sashal@kernel.org>
87 files changed:
queue-5.4/__legitimize_mnt-check-for-mnt_sync_umount-should-be.patch [new file with mode: 0644]
queue-5.4/acpi-hed-always-initialize-before-evged.patch [new file with mode: 0644]
queue-5.4/arm-tegra-switch-dsi-b-clock-parent-to-plld-on-tegra.patch [new file with mode: 0644]
queue-5.4/asoc-intel-bytcr_rt5640-add-dmi-quirk-for-acer-aspir.patch [new file with mode: 0644]
queue-5.4/asoc-ops-enforce-platform-maximum-on-initial-value.patch [new file with mode: 0644]
queue-5.4/bonding-report-duplicate-mac-address-in-all-situatio.patch [new file with mode: 0644]
queue-5.4/bpftool-fix-readlink-usage-in-get_fd_type.patch [new file with mode: 0644]
queue-5.4/btrfs-avoid-linker-error-in-btrfs_find_create_tree_b.patch [new file with mode: 0644]
queue-5.4/btrfs-correct-the-order-of-prelim_ref-arguments-in-b.patch [new file with mode: 0644]
queue-5.4/btrfs-send-return-enametoolong-when-attempting-a-pat.patch [new file with mode: 0644]
queue-5.4/cgroup-fix-compilation-issue-due-to-cgroup_mutex-not.patch [new file with mode: 0644]
queue-5.4/cpuidle-menu-avoid-discarding-useful-information.patch [new file with mode: 0644]
queue-5.4/dm-cache-prevent-bug_on-by-blocking-retries-on-faile.patch [new file with mode: 0644]
queue-5.4/dm-restrict-dm-device-size-to-2-63-512-bytes.patch [new file with mode: 0644]
queue-5.4/dma-mapping-avoid-potential-unused-data-compilation-.patch [new file with mode: 0644]
queue-5.4/dql-fix-dql-limit-value-when-reset.patch [new file with mode: 0644]
queue-5.4/drm-add-valid-clones-check.patch [new file with mode: 0644]
queue-5.4/drm-amdkfd-kfd-release_work-possible-circular-lockin.patch [new file with mode: 0644]
queue-5.4/drm-atomic-clarify-the-rules-around-drm_atomic_state.patch [new file with mode: 0644]
queue-5.4/drm-mediatek-mtk_dpi-add-checks-for-reg_h_fre_con-ex.patch [new file with mode: 0644]
queue-5.4/edac-ie31200-work-around-false-positive-build-warnin.patch [new file with mode: 0644]
queue-5.4/exit-fix-the-usage-of-delay_group_leader-exit_code-i.patch [new file with mode: 0644]
queue-5.4/ext4-reorder-capability-check-last.patch [new file with mode: 0644]
queue-5.4/fbdev-core-tileblit-implement-missing-margin-clearin.patch [new file with mode: 0644]
queue-5.4/fbdev-fsl-diu-fb-add-missing-device_remove_file.patch [new file with mode: 0644]
queue-5.4/fpga-altera-cvp-increase-credit-timeout.patch [new file with mode: 0644]
queue-5.4/hid-usbkbd-fix-the-bit-shift-number-for-led_kana.patch [new file with mode: 0644]
queue-5.4/hwmon-gpio-fan-add-missing-mutex-locks.patch [new file with mode: 0644]
queue-5.4/hwmon-xgene-hwmon-use-appropriate-type-for-the-laten.patch [new file with mode: 0644]
queue-5.4/i2c-pxa-fix-call-balance-of-i2c-clk-handling-routine.patch [new file with mode: 0644]
queue-5.4/ieee802154-ca8210-use-proper-setters-and-getters-for.patch [new file with mode: 0644]
queue-5.4/ip-fib_rules-fetch-net-from-fib_rule-in-fib-46-_rule.patch [new file with mode: 0644]
queue-5.4/kbuild-fix-argument-parsing-in-scripts-config.patch [new file with mode: 0644]
queue-5.4/kconfig-merge_config-use-an-empty-file-as-initfile.patch [new file with mode: 0644]
queue-5.4/libnvdimm-labels-fix-divide-error-in-nd_label_data_i.patch [new file with mode: 0644]
queue-5.4/mailbox-use-error-ret-code-of-of_parse_phandle_with_.patch [new file with mode: 0644]
queue-5.4/media-c8sectpfe-call-of_node_put-i2c_bus-only-once-i.patch [new file with mode: 0644]
queue-5.4/media-cx231xx-set-device_caps-for-417.patch [new file with mode: 0644]
queue-5.4/mips-pm-cps-use-per-cpu-variables-as-per-cpu-not-per.patch [new file with mode: 0644]
queue-5.4/mips-use-arch-specific-syscall-name-match-function.patch [new file with mode: 0644]
queue-5.4/mmc-host-wait-for-vdd-to-settle-on-card-power-off.patch [new file with mode: 0644]
queue-5.4/mmc-sdhci-disable-sd-card-clock-before-changing-para.patch [new file with mode: 0644]
queue-5.4/net-mlx4_core-avoid-impossible-mlx4_db_alloc-order-v.patch [new file with mode: 0644]
queue-5.4/net-mlx5-apply-rate-limiting-to-high-temperature-war.patch [new file with mode: 0644]
queue-5.4/net-mlx5-avoid-report-two-health-errors-on-same-synd.patch [new file with mode: 0644]
queue-5.4/net-mlx5-extend-ethtool-loopback-selftest-to-support.patch [new file with mode: 0644]
queue-5.4/net-mlx5-modify-lsb-bitmask-in-temperature-event-to-.patch [new file with mode: 0644]
queue-5.4/net-mlx5e-reduce-rep-rxq-depth-to-256-for-ecpf.patch [new file with mode: 0644]
queue-5.4/net-mlx5e-set-the-tx_queue_len-for-pfifo_fast.patch [new file with mode: 0644]
queue-5.4/net-pktgen-fix-access-outside-of-user-given-buffer-i.patch [new file with mode: 0644]
queue-5.4/net-pktgen-fix-mpls-maximum-labels-list-parsing.patch [new file with mode: 0644]
queue-5.4/net-xgene-v2-remove-incorrect-acpi_ptr-annotation.patch [new file with mode: 0644]
queue-5.4/netfilter-conntrack-bound-nf_conntrack-sysctl-writes.patch [new file with mode: 0644]
queue-5.4/nfsv4-treat-enetunreach-errors-as-fatal-for-state-re.patch [new file with mode: 0644]
queue-5.4/nvmet-tcp-don-t-restore-null-sk_state_change.patch [new file with mode: 0644]
queue-5.4/orangefs-do-not-truncate-file-size.patch [new file with mode: 0644]
queue-5.4/pci-fix-old_size-lower-bound-in-calculate_iosize-too.patch [new file with mode: 0644]
queue-5.4/phy-core-don-t-require-set_mode-callback-for-phy_get.patch [new file with mode: 0644]
queue-5.4/pinctrl-bcm281xx-use-unsigned-int-instead-of-bare-un.patch [new file with mode: 0644]
queue-5.4/pinctrl-devicetree-do-not-goto-err-when-probing-hogs.patch [new file with mode: 0644]
queue-5.4/pinctrl-meson-define-the-pull-up-down-resistor-value.patch [new file with mode: 0644]
queue-5.4/pnfs-flexfiles-report-enetdown-as-a-connection-error.patch [new file with mode: 0644]
queue-5.4/posix-timers-add-cond_resched-to-posix_timer_add-sea.patch [new file with mode: 0644]
queue-5.4/powerpc-prom_init-fixup-missing-size-cells-on-powerb.patch [new file with mode: 0644]
queue-5.4/rcu-fix-header-guard-for-rcu_all_qs.patch [new file with mode: 0644]
queue-5.4/rcu-handle-quiescent-states-for-preempt_rcu-n-preemp.patch [new file with mode: 0644]
queue-5.4/regulator-ad5398-add-device-tree-support.patch [new file with mode: 0644]
queue-5.4/rtc-ds1307-stop-disabling-alarms-on-probe.patch [new file with mode: 0644]
queue-5.4/scsi-lpfc-handle-duplicate-d_ids-in-ndlp-search-by-d.patch [new file with mode: 0644]
queue-5.4/scsi-mpt3sas-send-a-diag-reset-if-target-reset-fails.patch [new file with mode: 0644]
queue-5.4/scsi-st-erase-does-not-change-tape-location.patch [new file with mode: 0644]
queue-5.4/scsi-st-restore-some-drive-settings-after-reset.patch [new file with mode: 0644]
queue-5.4/scsi-st-tighten-the-page-format-heuristics-with-mode.patch [new file with mode: 0644]
queue-5.4/scsi-target-iscsi-fix-timeout-on-deleted-connection.patch [new file with mode: 0644]
queue-5.4/series
queue-5.4/smack-recognize-ipv4-cipso-w-o-categories.patch [new file with mode: 0644]
queue-5.4/sunrpc-rpc_clnt_set_transport-must-not-change-the-au.patch [new file with mode: 0644]
queue-5.4/tools-build-don-t-pass-test-log-files-to-linker.patch [new file with mode: 0644]
queue-5.4/um-store-full-csgsfs-and-ss-register-from-mcontext.patch [new file with mode: 0644]
queue-5.4/um-update-min_low_pfn-to-match-changes-in-uml_reserv.patch [new file with mode: 0644]
queue-5.4/vxlan-annotate-fdb-data-races.patch [new file with mode: 0644]
queue-5.4/wifi-rtw88-don-t-use-static-local-variable-in-rtw882.patch [new file with mode: 0644]
queue-5.4/wifi-rtw88-fix-rtw_init_ht_cap-for-rtl8814au.patch [new file with mode: 0644]
queue-5.4/x86-bugs-make-spectre-user-default-depend-on-mitigat.patch [new file with mode: 0644]
queue-5.4/x86-nmi-add-an-emergency-handler-in-nmi_desc-use-it-.patch [new file with mode: 0644]
queue-5.4/xen-add-support-for-xenserver-6.1-platform-device.patch [new file with mode: 0644]
queue-5.4/xenbus-allow-pvh-dom0-a-non-local-xenstore.patch [new file with mode: 0644]

diff --git a/queue-5.4/__legitimize_mnt-check-for-mnt_sync_umount-should-be.patch b/queue-5.4/__legitimize_mnt-check-for-mnt_sync_umount-should-be.patch
new file mode 100644 (file)
index 0000000..140b6c7
--- /dev/null
@@ -0,0 +1,48 @@
+From 465a442c2aef3e717fd23aa1169f723d18a6835b Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun, 27 Apr 2025 15:41:51 -0400
+Subject: __legitimize_mnt(): check for MNT_SYNC_UMOUNT should be under
+ mount_lock
+
+From: Al Viro <viro@zeniv.linux.org.uk>
+
+[ Upstream commit 250cf3693060a5f803c5f1ddc082bb06b16112a9 ]
+
+... or we risk stealing final mntput from sync umount - raising mnt_count
+after umount(2) has verified that victim is not busy, but before it
+has set MNT_SYNC_UMOUNT; in that case __legitimize_mnt() doesn't see
+that it's safe to quietly undo mnt_count increment and leaves dropping
+the reference to caller, where it'll be a full-blown mntput().
+
+Check under mount_lock is needed; leaving the current one done before
+taking that makes no sense - it's nowhere near common enough to bother
+with.
+
+Reviewed-by: Christian Brauner <brauner@kernel.org>
+Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/namespace.c | 6 +-----
+ 1 file changed, 1 insertion(+), 5 deletions(-)
+
+diff --git a/fs/namespace.c b/fs/namespace.c
+index 809ec3acb147c..a5cb608778b1e 100644
+--- a/fs/namespace.c
++++ b/fs/namespace.c
+@@ -572,12 +572,8 @@ int __legitimize_mnt(struct vfsmount *bastard, unsigned seq)
+       smp_mb();               // see mntput_no_expire() and do_umount()
+       if (likely(!read_seqretry(&mount_lock, seq)))
+               return 0;
+-      if (bastard->mnt_flags & MNT_SYNC_UMOUNT) {
+-              mnt_add_count(mnt, -1);
+-              return 1;
+-      }
+       lock_mount_hash();
+-      if (unlikely(bastard->mnt_flags & MNT_DOOMED)) {
++      if (unlikely(bastard->mnt_flags & (MNT_SYNC_UMOUNT | MNT_DOOMED))) {
+               mnt_add_count(mnt, -1);
+               unlock_mount_hash();
+               return 1;
+-- 
+2.39.5
+
diff --git a/queue-5.4/acpi-hed-always-initialize-before-evged.patch b/queue-5.4/acpi-hed-always-initialize-before-evged.patch
new file mode 100644 (file)
index 0000000..7c6e828
--- /dev/null
@@ -0,0 +1,67 @@
+From 07b0bad8ba0b92c9d07ac9bfee42c6518d72c71f Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 12 Feb 2025 14:34:08 +0800
+Subject: ACPI: HED: Always initialize before evged
+
+From: Xiaofei Tan <tanxiaofei@huawei.com>
+
+[ Upstream commit cccf6ee090c8c133072d5d5b52ae25f3bc907a16 ]
+
+When the HED driver is built-in, it initializes after evged because they
+both are at the same initcall level, so the initialization ordering
+depends on the Makefile order.  However, this prevents RAS records
+coming in between the evged driver initialization and the HED driver
+initialization from being handled.
+
+If the number of such RAS records is above the APEI HEST error source
+number, the HEST resources may be exhausted, and that may affect
+subsequent RAS error reporting.
+
+To fix this issue, change the initcall level of HED to subsys_initcall
+and prevent the driver from being built as a module by changing ACPI_HED
+in Kconfig from "tristate" to "bool".
+
+Signed-off-by: Xiaofei Tan <tanxiaofei@huawei.com>
+Link: https://patch.msgid.link/20250212063408.927666-1-tanxiaofei@huawei.com
+[ rjw: Changelog edits ]
+Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/acpi/Kconfig | 2 +-
+ drivers/acpi/hed.c   | 7 ++++++-
+ 2 files changed, 7 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/acpi/Kconfig b/drivers/acpi/Kconfig
+index ebe1e9e5fd81c..3902fe64c484d 100644
+--- a/drivers/acpi/Kconfig
++++ b/drivers/acpi/Kconfig
+@@ -431,7 +431,7 @@ config ACPI_SBS
+         the modules will be called sbs and sbshc.
+ config ACPI_HED
+-      tristate "Hardware Error Device"
++      bool "Hardware Error Device"
+       help
+         This driver supports the Hardware Error Device (PNP0C33),
+         which is used to report some hardware errors notified via
+diff --git a/drivers/acpi/hed.c b/drivers/acpi/hed.c
+index cf148287e2baf..75166839c99e0 100644
+--- a/drivers/acpi/hed.c
++++ b/drivers/acpi/hed.c
+@@ -72,7 +72,12 @@ static struct acpi_driver acpi_hed_driver = {
+               .notify = acpi_hed_notify,
+       },
+ };
+-module_acpi_driver(acpi_hed_driver);
++
++static int __init acpi_hed_driver_init(void)
++{
++      return acpi_bus_register_driver(&acpi_hed_driver);
++}
++subsys_initcall(acpi_hed_driver_init);
+ ACPI_MODULE_NAME("hed");
+ MODULE_AUTHOR("Huang Ying");
+-- 
+2.39.5
+
diff --git a/queue-5.4/arm-tegra-switch-dsi-b-clock-parent-to-plld-on-tegra.patch b/queue-5.4/arm-tegra-switch-dsi-b-clock-parent-to-plld-on-tegra.patch
new file mode 100644 (file)
index 0000000..a1917e8
--- /dev/null
@@ -0,0 +1,36 @@
+From c040e2be1956a11fef07b4e4c8fcf509354ba799 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 26 Feb 2025 12:56:11 +0200
+Subject: ARM: tegra: Switch DSI-B clock parent to PLLD on Tegra114
+
+From: Svyatoslav Ryhel <clamor95@gmail.com>
+
+[ Upstream commit 2b3db788f2f614b875b257cdb079adadedc060f3 ]
+
+PLLD is usually used as parent clock for internal video devices, like
+DSI for example, while PLLD2 is used as parent for HDMI.
+
+Signed-off-by: Svyatoslav Ryhel <clamor95@gmail.com>
+Link: https://lore.kernel.org/r/20250226105615.61087-3-clamor95@gmail.com
+Signed-off-by: Thierry Reding <treding@nvidia.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/arm/boot/dts/tegra114.dtsi | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/arch/arm/boot/dts/tegra114.dtsi b/arch/arm/boot/dts/tegra114.dtsi
+index 0d7a6327e404a..fe1ebc3c5aa86 100644
+--- a/arch/arm/boot/dts/tegra114.dtsi
++++ b/arch/arm/boot/dts/tegra114.dtsi
+@@ -123,7 +123,7 @@ dsi@54400000 {
+                       reg = <0x54400000 0x00040000>;
+                       clocks = <&tegra_car TEGRA114_CLK_DSIB>,
+                                <&tegra_car TEGRA114_CLK_DSIBLP>,
+-                               <&tegra_car TEGRA114_CLK_PLL_D2_OUT0>;
++                               <&tegra_car TEGRA114_CLK_PLL_D_OUT0>;
+                       clock-names = "dsi", "lp", "parent";
+                       resets = <&tegra_car 82>;
+                       reset-names = "dsi";
+-- 
+2.39.5
+
diff --git a/queue-5.4/asoc-intel-bytcr_rt5640-add-dmi-quirk-for-acer-aspir.patch b/queue-5.4/asoc-intel-bytcr_rt5640-add-dmi-quirk-for-acer-aspir.patch
new file mode 100644 (file)
index 0000000..51d1a41
--- /dev/null
@@ -0,0 +1,48 @@
+From f9b6a6550a78d8f8596332aa6bdb10593ddc8556 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun, 20 Apr 2025 10:56:59 +0200
+Subject: ASoC: Intel: bytcr_rt5640: Add DMI quirk for Acer Aspire SW3-013
+
+From: Takashi Iwai <tiwai@suse.de>
+
+[ Upstream commit a549b927ea3f5e50b1394209b64e6e17e31d4db8 ]
+
+Acer Aspire SW3-013 requires the very same quirk as other Acer Aspire
+model for making it working.
+
+Link: https://bugzilla.kernel.org/show_bug.cgi?id=220011
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Link: https://patch.msgid.link/20250420085716.12095-1-tiwai@suse.de
+Signed-off-by: Mark Brown <broonie@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ sound/soc/intel/boards/bytcr_rt5640.c | 13 +++++++++++++
+ 1 file changed, 13 insertions(+)
+
+diff --git a/sound/soc/intel/boards/bytcr_rt5640.c b/sound/soc/intel/boards/bytcr_rt5640.c
+index 104cfb56d225f..5a8e86ba29004 100644
+--- a/sound/soc/intel/boards/bytcr_rt5640.c
++++ b/sound/soc/intel/boards/bytcr_rt5640.c
+@@ -428,6 +428,19 @@ static const struct dmi_system_id byt_rt5640_quirk_table[] = {
+                                       BYT_RT5640_SSP0_AIF2 |
+                                       BYT_RT5640_MCLK_EN),
+       },
++      {       /* Acer Aspire SW3-013 */
++              .matches = {
++                      DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
++                      DMI_MATCH(DMI_PRODUCT_NAME, "Aspire SW3-013"),
++              },
++              .driver_data = (void *)(BYT_RT5640_DMIC1_MAP |
++                                      BYT_RT5640_JD_SRC_JD2_IN4N |
++                                      BYT_RT5640_OVCD_TH_2000UA |
++                                      BYT_RT5640_OVCD_SF_0P75 |
++                                      BYT_RT5640_DIFF_MIC |
++                                      BYT_RT5640_SSP0_AIF1 |
++                                      BYT_RT5640_MCLK_EN),
++      },
+       {
+               .matches = {
+                       DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
+-- 
+2.39.5
+
diff --git a/queue-5.4/asoc-ops-enforce-platform-maximum-on-initial-value.patch b/queue-5.4/asoc-ops-enforce-platform-maximum-on-initial-value.patch
new file mode 100644 (file)
index 0000000..00c82c6
--- /dev/null
@@ -0,0 +1,75 @@
+From f5b13a3fa8e7063cf96ef71811f7fa9a3a030c79 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sat, 8 Feb 2025 00:57:22 +0000
+Subject: ASoC: ops: Enforce platform maximum on initial value
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Martin PoviÅ¡er <povik+lin@cutebit.org>
+
+[ Upstream commit 783db6851c1821d8b983ffb12b99c279ff64f2ee ]
+
+Lower the volume if it is violating the platform maximum at its initial
+value (i.e. at the time of the 'snd_soc_limit_volume' call).
+
+Signed-off-by: Martin PoviÅ¡er <povik+lin@cutebit.org>
+[Cherry picked from the Asahi kernel with fixups -- broonie]
+Signed-off-by: Mark Brown <broonie@kernel.org>
+Link: https://patch.msgid.link/20250208-asoc-volume-limit-v1-1-b98fcf4cdbad@kernel.org
+Signed-off-by: Mark Brown <broonie@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ sound/soc/soc-ops.c | 29 ++++++++++++++++++++++++++++-
+ 1 file changed, 28 insertions(+), 1 deletion(-)
+
+diff --git a/sound/soc/soc-ops.c b/sound/soc/soc-ops.c
+index 08ed973b2d975..a3b1f1c064ddc 100644
+--- a/sound/soc/soc-ops.c
++++ b/sound/soc/soc-ops.c
+@@ -635,6 +635,33 @@ int snd_soc_get_volsw_range(struct snd_kcontrol *kcontrol,
+ }
+ EXPORT_SYMBOL_GPL(snd_soc_get_volsw_range);
++static int snd_soc_clip_to_platform_max(struct snd_kcontrol *kctl)
++{
++      struct soc_mixer_control *mc = (struct soc_mixer_control *)kctl->private_value;
++      struct snd_ctl_elem_value uctl;
++      int ret;
++
++      if (!mc->platform_max)
++              return 0;
++
++      ret = kctl->get(kctl, &uctl);
++      if (ret < 0)
++              return ret;
++
++      if (uctl.value.integer.value[0] > mc->platform_max)
++              uctl.value.integer.value[0] = mc->platform_max;
++
++      if (snd_soc_volsw_is_stereo(mc) &&
++          uctl.value.integer.value[1] > mc->platform_max)
++              uctl.value.integer.value[1] = mc->platform_max;
++
++      ret = kctl->put(kctl, &uctl);
++      if (ret < 0)
++              return ret;
++
++      return 0;
++}
++
+ /**
+  * snd_soc_limit_volume - Set new limit to an existing volume control.
+  *
+@@ -667,7 +694,7 @@ int snd_soc_limit_volume(struct snd_soc_card *card,
+               mc = (struct soc_mixer_control *)kctl->private_value;
+               if (max <= mc->max) {
+                       mc->platform_max = max;
+-                      ret = 0;
++                      ret = snd_soc_clip_to_platform_max(kctl);
+               }
+       }
+       return ret;
+-- 
+2.39.5
+
diff --git a/queue-5.4/bonding-report-duplicate-mac-address-in-all-situatio.patch b/queue-5.4/bonding-report-duplicate-mac-address-in-all-situatio.patch
new file mode 100644 (file)
index 0000000..d2bfb6c
--- /dev/null
@@ -0,0 +1,47 @@
+From 6dec356a4ab03391543fdc9fbb6eb68d4c1af659 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 25 Feb 2025 03:39:14 +0000
+Subject: bonding: report duplicate MAC address in all situations
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Hangbin Liu <liuhangbin@gmail.com>
+
+[ Upstream commit 28d68d396a1cd21591e8c6d74afbde33a7ea107e ]
+
+Normally, a bond uses the MAC address of the first added slave as the bond’s
+MAC address. And the bond will set active slave’s MAC address to bond’s
+address if fail_over_mac is set to none (0) or follow (2).
+
+When the first slave is removed, the bond will still use the removed slave’s
+MAC address, which can lead to a duplicate MAC address and potentially cause
+issues with the switch. To avoid confusion, let's warn the user in all
+situations, including when fail_over_mac is set to 2 or not in active-backup
+mode.
+
+Signed-off-by: Hangbin Liu <liuhangbin@gmail.com>
+Reviewed-by: Nikolay Aleksandrov <razor@blackwall.org>
+Link: https://patch.msgid.link/20250225033914.18617-1-liuhangbin@gmail.com
+Signed-off-by: Jakub Kicinski <kuba@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/bonding/bond_main.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
+index 89797b2575733..3b235a269c1b8 100644
+--- a/drivers/net/bonding/bond_main.c
++++ b/drivers/net/bonding/bond_main.c
+@@ -1954,7 +1954,7 @@ static int __bond_release_one(struct net_device *bond_dev,
+       RCU_INIT_POINTER(bond->current_arp_slave, NULL);
+-      if (!all && (!bond->params.fail_over_mac ||
++      if (!all && (bond->params.fail_over_mac != BOND_FOM_ACTIVE ||
+                    BOND_MODE(bond) != BOND_MODE_ACTIVEBACKUP)) {
+               if (ether_addr_equal_64bits(bond_dev->dev_addr, slave->perm_hwaddr) &&
+                   bond_has_slaves(bond))
+-- 
+2.39.5
+
diff --git a/queue-5.4/bpftool-fix-readlink-usage-in-get_fd_type.patch b/queue-5.4/bpftool-fix-readlink-usage-in-get_fd_type.patch
new file mode 100644 (file)
index 0000000..3d33997
--- /dev/null
@@ -0,0 +1,49 @@
+From 300b0977bb8f6df4e5170240b870ea23028b5a5e Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 29 Jan 2025 08:18:57 +0100
+Subject: bpftool: Fix readlink usage in get_fd_type
+
+From: Viktor Malik <vmalik@redhat.com>
+
+[ Upstream commit 0053f7d39d491b6138d7c526876d13885cbb65f1 ]
+
+The `readlink(path, buf, sizeof(buf))` call reads at most sizeof(buf)
+bytes and *does not* append null-terminator to buf. With respect to
+that, fix two pieces in get_fd_type:
+
+1. Change the truncation check to contain sizeof(buf) rather than
+   sizeof(path).
+2. Append null-terminator to buf.
+
+Reported by Coverity.
+
+Signed-off-by: Viktor Malik <vmalik@redhat.com>
+Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
+Reviewed-by: Quentin Monnet <qmo@kernel.org>
+Link: https://lore.kernel.org/bpf/20250129071857.75182-1-vmalik@redhat.com
+Signed-off-by: Alexei Starovoitov <ast@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ tools/bpf/bpftool/common.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/tools/bpf/bpftool/common.c b/tools/bpf/bpftool/common.c
+index a209f53901b8c..91bf7575493b5 100644
+--- a/tools/bpf/bpftool/common.c
++++ b/tools/bpf/bpftool/common.c
+@@ -283,10 +283,11 @@ int get_fd_type(int fd)
+               p_err("can't read link type: %s", strerror(errno));
+               return -1;
+       }
+-      if (n == sizeof(path)) {
++      if (n == sizeof(buf)) {
+               p_err("can't read link type: path too long!");
+               return -1;
+       }
++      buf[n] = '\0';
+       if (strstr(buf, "bpf-map"))
+               return BPF_OBJ_MAP;
+-- 
+2.39.5
+
diff --git a/queue-5.4/btrfs-avoid-linker-error-in-btrfs_find_create_tree_b.patch b/queue-5.4/btrfs-avoid-linker-error-in-btrfs_find_create_tree_b.patch
new file mode 100644 (file)
index 0000000..65261f5
--- /dev/null
@@ -0,0 +1,61 @@
+From 0fca7292bb763d5db15edb23f5704267c75a0f21 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 6 Mar 2025 10:58:46 +0000
+Subject: btrfs: avoid linker error in btrfs_find_create_tree_block()
+
+From: Mark Harmstone <maharmstone@fb.com>
+
+[ Upstream commit 7ef3cbf17d2734ca66c4ed8573be45f4e461e7ee ]
+
+The inline function btrfs_is_testing() is hardcoded to return 0 if
+CONFIG_BTRFS_FS_RUN_SANITY_TESTS is not set. Currently we're relying on
+the compiler optimizing out the call to alloc_test_extent_buffer() in
+btrfs_find_create_tree_block(), as it's not been defined (it's behind an
+ #ifdef).
+
+Add a stub version of alloc_test_extent_buffer() to avoid linker errors
+on non-standard optimization levels. This problem was seen on GCC 14
+with -O0 and is helps to see symbols that would be otherwise optimized
+out.
+
+Reviewed-by: Qu Wenruo <wqu@suse.com>
+Signed-off-by: Mark Harmstone <maharmstone@fb.com>
+Reviewed-by: David Sterba <dsterba@suse.com>
+Signed-off-by: David Sterba <dsterba@suse.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/btrfs/extent_io.c | 7 +++++--
+ 1 file changed, 5 insertions(+), 2 deletions(-)
+
+diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c
+index 04788940afafc..64af1c7f95c24 100644
+--- a/fs/btrfs/extent_io.c
++++ b/fs/btrfs/extent_io.c
+@@ -5134,10 +5134,10 @@ struct extent_buffer *find_extent_buffer(struct btrfs_fs_info *fs_info,
+       return NULL;
+ }
+-#ifdef CONFIG_BTRFS_FS_RUN_SANITY_TESTS
+ struct extent_buffer *alloc_test_extent_buffer(struct btrfs_fs_info *fs_info,
+                                       u64 start)
+ {
++#ifdef CONFIG_BTRFS_FS_RUN_SANITY_TESTS
+       struct extent_buffer *eb, *exists = NULL;
+       int ret;
+@@ -5173,8 +5173,11 @@ struct extent_buffer *alloc_test_extent_buffer(struct btrfs_fs_info *fs_info,
+ free_eb:
+       btrfs_release_extent_buffer(eb);
+       return exists;
+-}
++#else
++      /* Stub to avoid linker error when compiled with optimizations turned off. */
++      return NULL;
+ #endif
++}
+ struct extent_buffer *alloc_extent_buffer(struct btrfs_fs_info *fs_info,
+                                         u64 start)
+-- 
+2.39.5
+
diff --git a/queue-5.4/btrfs-correct-the-order-of-prelim_ref-arguments-in-b.patch b/queue-5.4/btrfs-correct-the-order-of-prelim_ref-arguments-in-b.patch
new file mode 100644 (file)
index 0000000..0eef22d
--- /dev/null
@@ -0,0 +1,82 @@
+From 2b47c6afb0c6d1c2f225d79402d35994e665b885 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 25 Apr 2025 09:25:06 -0400
+Subject: btrfs: correct the order of prelim_ref arguments in btrfs__prelim_ref
+
+From: Goldwyn Rodrigues <rgoldwyn@suse.de>
+
+[ Upstream commit bc7e0975093567f51be8e1bdf4aa5900a3cf0b1e ]
+
+btrfs_prelim_ref() calls the old and new reference variables in the
+incorrect order. This causes a NULL pointer dereference because oldref
+is passed as NULL to trace_btrfs_prelim_ref_insert().
+
+Note, trace_btrfs_prelim_ref_insert() is being called with newref as
+oldref (and oldref as NULL) on purpose in order to print out
+the values of newref.
+
+To reproduce:
+echo 1 > /sys/kernel/debug/tracing/events/btrfs/btrfs_prelim_ref_insert/enable
+
+Perform some writeback operations.
+
+Backtrace:
+BUG: kernel NULL pointer dereference, address: 0000000000000018
+ #PF: supervisor read access in kernel mode
+ #PF: error_code(0x0000) - not-present page
+ PGD 115949067 P4D 115949067 PUD 11594a067 PMD 0
+ Oops: Oops: 0000 [#1] SMP NOPTI
+ CPU: 1 UID: 0 PID: 1188 Comm: fsstress Not tainted 6.15.0-rc2-tester+ #47 PREEMPT(voluntary)  7ca2cef72d5e9c600f0c7718adb6462de8149622
+ Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS rel-1.16.3-2-gc13ff2cd-prebuilt.qemu.org 04/01/2014
+ RIP: 0010:trace_event_raw_event_btrfs__prelim_ref+0x72/0x130
+ Code: e8 43 81 9f ff 48 85 c0 74 78 4d 85 e4 0f 84 8f 00 00 00 49 8b 94 24 c0 06 00 00 48 8b 0a 48 89 48 08 48 8b 52 08 48 89 50 10 <49> 8b 55 18 48 89 50 18 49 8b 55 20 48 89 50 20 41 0f b6 55 28 88
+ RSP: 0018:ffffce44820077a0 EFLAGS: 00010286
+ RAX: ffff8c6b403f9014 RBX: ffff8c6b55825730 RCX: 304994edf9cf506b
+ RDX: d8b11eb7f0fdb699 RSI: ffff8c6b403f9010 RDI: ffff8c6b403f9010
+ RBP: 0000000000000001 R08: 0000000000000001 R09: 0000000000000010
+ R10: 00000000ffffffff R11: 0000000000000000 R12: ffff8c6b4e8fb000
+ R13: 0000000000000000 R14: ffffce44820077a8 R15: ffff8c6b4abd1540
+ FS:  00007f4dc6813740(0000) GS:ffff8c6c1d378000(0000) knlGS:0000000000000000
+ CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
+ CR2: 0000000000000018 CR3: 000000010eb42000 CR4: 0000000000750ef0
+ PKRU: 55555554
+ Call Trace:
+  <TASK>
+  prelim_ref_insert+0x1c1/0x270
+  find_parent_nodes+0x12a6/0x1ee0
+  ? __entry_text_end+0x101f06/0x101f09
+  ? srso_alias_return_thunk+0x5/0xfbef5
+  ? srso_alias_return_thunk+0x5/0xfbef5
+  ? srso_alias_return_thunk+0x5/0xfbef5
+  ? srso_alias_return_thunk+0x5/0xfbef5
+  btrfs_is_data_extent_shared+0x167/0x640
+  ? fiemap_process_hole+0xd0/0x2c0
+  extent_fiemap+0xa5c/0xbc0
+  ? __entry_text_end+0x101f05/0x101f09
+  btrfs_fiemap+0x7e/0xd0
+  do_vfs_ioctl+0x425/0x9d0
+  __x64_sys_ioctl+0x75/0xc0
+
+Signed-off-by: Goldwyn Rodrigues <rgoldwyn@suse.com>
+Signed-off-by: David Sterba <dsterba@suse.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ include/trace/events/btrfs.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/include/trace/events/btrfs.h b/include/trace/events/btrfs.h
+index 94a3adb65b8af..fe4d7e165050b 100644
+--- a/include/trace/events/btrfs.h
++++ b/include/trace/events/btrfs.h
+@@ -1773,7 +1773,7 @@ DECLARE_EVENT_CLASS(btrfs__prelim_ref,
+       TP_PROTO(const struct btrfs_fs_info *fs_info,
+                const struct prelim_ref *oldref,
+                const struct prelim_ref *newref, u64 tree_size),
+-      TP_ARGS(fs_info, newref, oldref, tree_size),
++      TP_ARGS(fs_info, oldref, newref, tree_size),
+       TP_STRUCT__entry_btrfs(
+               __field(        u64,  root_id           )
+-- 
+2.39.5
+
diff --git a/queue-5.4/btrfs-send-return-enametoolong-when-attempting-a-pat.patch b/queue-5.4/btrfs-send-return-enametoolong-when-attempting-a-pat.patch
new file mode 100644 (file)
index 0000000..e14f6d2
--- /dev/null
@@ -0,0 +1,46 @@
+From d97de352d9d628c735ef8e1af1210aa22e79727d Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 5 Feb 2025 13:09:25 +0000
+Subject: btrfs: send: return -ENAMETOOLONG when attempting a path that is too
+ long
+
+From: Filipe Manana <fdmanana@suse.com>
+
+[ Upstream commit a77749b3e21813566cea050bbb3414ae74562eba ]
+
+When attempting to build a too long path we are currently returning
+-ENOMEM, which is very odd and misleading. So update fs_path_ensure_buf()
+to return -ENAMETOOLONG instead. Also, while at it, move the WARN_ON()
+into the if statement's expression, as it makes it clear what is being
+tested and also has the effect of adding 'unlikely' to the statement,
+which allows the compiler to generate better code as this condition is
+never expected to happen.
+
+Signed-off-by: Filipe Manana <fdmanana@suse.com>
+Reviewed-by: David Sterba <dsterba@suse.com>
+Signed-off-by: David Sterba <dsterba@suse.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/btrfs/send.c | 6 ++----
+ 1 file changed, 2 insertions(+), 4 deletions(-)
+
+diff --git a/fs/btrfs/send.c b/fs/btrfs/send.c
+index e1063ef3dece5..b0933d9525939 100644
+--- a/fs/btrfs/send.c
++++ b/fs/btrfs/send.c
+@@ -397,10 +397,8 @@ static int fs_path_ensure_buf(struct fs_path *p, int len)
+       if (p->buf_len >= len)
+               return 0;
+-      if (len > PATH_MAX) {
+-              WARN_ON(1);
+-              return -ENOMEM;
+-      }
++      if (WARN_ON(len > PATH_MAX))
++              return -ENAMETOOLONG;
+       path_len = p->end - p->start;
+       old_buf_len = p->buf_len;
+-- 
+2.39.5
+
diff --git a/queue-5.4/cgroup-fix-compilation-issue-due-to-cgroup_mutex-not.patch b/queue-5.4/cgroup-fix-compilation-issue-due-to-cgroup_mutex-not.patch
new file mode 100644 (file)
index 0000000..df8f863
--- /dev/null
@@ -0,0 +1,48 @@
+From 09e7ed213b65621a57c99b4b5f94792f7f9c4be7 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 17 Apr 2025 07:30:00 +0000
+Subject: cgroup: Fix compilation issue due to cgroup_mutex not being exported
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: gaoxu <gaoxu2@honor.com>
+
+[ Upstream commit 87c259a7a359e73e6c52c68fcbec79988999b4e6 ]
+
+When adding folio_memcg function call in the zram module for
+Android16-6.12, the following error occurs during compilation:
+ERROR: modpost: "cgroup_mutex" [../soc-repo/zram.ko] undefined!
+
+This error is caused by the indirect call to lockdep_is_held(&cgroup_mutex)
+within folio_memcg. The export setting for cgroup_mutex is controlled by
+the CONFIG_PROVE_RCU macro. If CONFIG_LOCKDEP is enabled while
+CONFIG_PROVE_RCU is not, this compilation error will occur.
+
+To resolve this issue, add a parallel macro CONFIG_LOCKDEP control to
+ensure cgroup_mutex is properly exported when needed.
+
+Signed-off-by: gao xu <gaoxu2@honor.com>
+Acked-by: Michal Koutný <mkoutny@suse.com>
+Signed-off-by: Tejun Heo <tj@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ kernel/cgroup/cgroup.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/kernel/cgroup/cgroup.c b/kernel/cgroup/cgroup.c
+index 273a8a42cb721..801022a8899b5 100644
+--- a/kernel/cgroup/cgroup.c
++++ b/kernel/cgroup/cgroup.c
+@@ -81,7 +81,7 @@
+ DEFINE_MUTEX(cgroup_mutex);
+ DEFINE_SPINLOCK(css_set_lock);
+-#ifdef CONFIG_PROVE_RCU
++#if (defined CONFIG_PROVE_RCU || defined CONFIG_LOCKDEP)
+ EXPORT_SYMBOL_GPL(cgroup_mutex);
+ EXPORT_SYMBOL_GPL(css_set_lock);
+ #endif
+-- 
+2.39.5
+
diff --git a/queue-5.4/cpuidle-menu-avoid-discarding-useful-information.patch b/queue-5.4/cpuidle-menu-avoid-discarding-useful-information.patch
new file mode 100644 (file)
index 0000000..2f2c48a
--- /dev/null
@@ -0,0 +1,65 @@
+From f0e3a54fafd529ae5332ec3f393354dc0e9497dd Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 6 Feb 2025 15:29:05 +0100
+Subject: cpuidle: menu: Avoid discarding useful information
+
+From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
+
+[ Upstream commit 85975daeaa4d6ec560bfcd354fc9c08ad7f38888 ]
+
+When giving up on making a high-confidence prediction,
+get_typical_interval() always returns UINT_MAX which means that the
+next idle interval prediction will be based entirely on the time till
+the next timer.  However, the information represented by the most
+recent intervals may not be completely useless in those cases.
+
+Namely, the largest recent idle interval is an upper bound on the
+recently observed idle duration, so it is reasonable to assume that
+the next idle duration is unlikely to exceed it.  Moreover, this is
+still true after eliminating the suspected outliers if the sample
+set still under consideration is at least as large as 50% of the
+maximum sample set size.
+
+Accordingly, make get_typical_interval() return the current maximum
+recent interval value in that case instead of UINT_MAX.
+
+Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
+Reported-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
+Tested-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
+Reviewed-by: Christian Loehle <christian.loehle@arm.com>
+Tested-by: Christian Loehle <christian.loehle@arm.com>
+Tested-by: Aboorva Devarajan <aboorvad@linux.ibm.com>
+Link: https://patch.msgid.link/7770672.EvYhyI6sBW@rjwysocki.net
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/cpuidle/governors/menu.c | 13 ++++++++++++-
+ 1 file changed, 12 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/cpuidle/governors/menu.c b/drivers/cpuidle/governors/menu.c
+index e5a5d0c8d66b1..bb7288f6adbf6 100644
+--- a/drivers/cpuidle/governors/menu.c
++++ b/drivers/cpuidle/governors/menu.c
+@@ -259,8 +259,19 @@ static unsigned int get_typical_interval(struct menu_device *data,
+        * This can deal with workloads that have long pauses interspersed
+        * with sporadic activity with a bunch of short pauses.
+        */
+-      if ((divisor * 4) <= INTERVALS * 3)
++      if (divisor * 4 <= INTERVALS * 3) {
++              /*
++               * If there are sufficiently many data points still under
++               * consideration after the outliers have been eliminated,
++               * returning without a prediction would be a mistake because it
++               * is likely that the next interval will not exceed the current
++               * maximum, so return the latter in that case.
++               */
++              if (divisor >= INTERVALS / 2)
++                      return max;
++
+               return UINT_MAX;
++      }
+       thresh = max - 1;
+       goto again;
+-- 
+2.39.5
+
diff --git a/queue-5.4/dm-cache-prevent-bug_on-by-blocking-retries-on-faile.patch b/queue-5.4/dm-cache-prevent-bug_on-by-blocking-retries-on-faile.patch
new file mode 100644 (file)
index 0000000..4b645b6
--- /dev/null
@@ -0,0 +1,121 @@
+From 096bbabcc8915079e44fa48cc0569f32165bb82f Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 6 Mar 2025 16:41:50 +0800
+Subject: dm cache: prevent BUG_ON by blocking retries on failed device resumes
+
+From: Ming-Hung Tsai <mtsai@redhat.com>
+
+[ Upstream commit 5da692e2262b8f81993baa9592f57d12c2703dea ]
+
+A cache device failing to resume due to mapping errors should not be
+retried, as the failure leaves a partially initialized policy object.
+Repeating the resume operation risks triggering BUG_ON when reloading
+cache mappings into the incomplete policy object.
+
+Reproduce steps:
+
+1. create a cache metadata consisting of 512 or more cache blocks,
+   with some mappings stored in the first array block of the mapping
+   array. Here we use cache_restore v1.0 to build the metadata.
+
+cat <<EOF >> cmeta.xml
+<superblock uuid="" block_size="128" nr_cache_blocks="512" \
+policy="smq" hint_width="4">
+  <mappings>
+    <mapping cache_block="0" origin_block="0" dirty="false"/>
+  </mappings>
+</superblock>
+EOF
+dmsetup create cmeta --table "0 8192 linear /dev/sdc 0"
+cache_restore -i cmeta.xml -o /dev/mapper/cmeta --metadata-version=2
+dmsetup remove cmeta
+
+2. wipe the second array block of the mapping array to simulate
+   data degradations.
+
+mapping_root=$(dd if=/dev/sdc bs=1c count=8 skip=192 \
+2>/dev/null | hexdump -e '1/8 "%u\n"')
+ablock=$(dd if=/dev/sdc bs=1c count=8 skip=$((4096*mapping_root+2056)) \
+2>/dev/null | hexdump -e '1/8 "%u\n"')
+dd if=/dev/zero of=/dev/sdc bs=4k count=1 seek=$ablock
+
+3. try bringing up the cache device. The resume is expected to fail
+   due to the broken array block.
+
+dmsetup create cmeta --table "0 8192 linear /dev/sdc 0"
+dmsetup create cdata --table "0 65536 linear /dev/sdc 8192"
+dmsetup create corig --table "0 524288 linear /dev/sdc 262144"
+dmsetup create cache --notable
+dmsetup load cache --table "0 524288 cache /dev/mapper/cmeta \
+/dev/mapper/cdata /dev/mapper/corig 128 2 metadata2 writethrough smq 0"
+dmsetup resume cache
+
+4. try resuming the cache again. An unexpected BUG_ON is triggered
+   while loading cache mappings.
+
+dmsetup resume cache
+
+Kernel logs:
+
+(snip)
+------------[ cut here ]------------
+kernel BUG at drivers/md/dm-cache-policy-smq.c:752!
+Oops: invalid opcode: 0000 [#1] PREEMPT SMP KASAN NOPTI
+CPU: 0 UID: 0 PID: 332 Comm: dmsetup Not tainted 6.13.4 #3
+RIP: 0010:smq_load_mapping+0x3e5/0x570
+
+Fix by disallowing resume operations for devices that failed the
+initial attempt.
+
+Signed-off-by: Ming-Hung Tsai <mtsai@redhat.com>
+Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/md/dm-cache-target.c | 24 ++++++++++++++++++++++++
+ 1 file changed, 24 insertions(+)
+
+diff --git a/drivers/md/dm-cache-target.c b/drivers/md/dm-cache-target.c
+index c1d2e3376afcd..0aa22a994c86a 100644
+--- a/drivers/md/dm-cache-target.c
++++ b/drivers/md/dm-cache-target.c
+@@ -2996,6 +2996,27 @@ static dm_cblock_t get_cache_dev_size(struct cache *cache)
+       return to_cblock(size);
+ }
++static bool can_resume(struct cache *cache)
++{
++      /*
++       * Disallow retrying the resume operation for devices that failed the
++       * first resume attempt, as the failure leaves the policy object partially
++       * initialized. Retrying could trigger BUG_ON when loading cache mappings
++       * into the incomplete policy object.
++       */
++      if (cache->sized && !cache->loaded_mappings) {
++              if (get_cache_mode(cache) != CM_WRITE)
++                      DMERR("%s: unable to resume a failed-loaded cache, please check metadata.",
++                            cache_device_name(cache));
++              else
++                      DMERR("%s: unable to resume cache due to missing proper cache table reload",
++                            cache_device_name(cache));
++              return false;
++      }
++
++      return true;
++}
++
+ static bool can_resize(struct cache *cache, dm_cblock_t new_size)
+ {
+       if (from_cblock(new_size) > from_cblock(cache->cache_size)) {
+@@ -3044,6 +3065,9 @@ static int cache_preresume(struct dm_target *ti)
+       struct cache *cache = ti->private;
+       dm_cblock_t csize = get_cache_dev_size(cache);
++      if (!can_resume(cache))
++              return -EINVAL;
++
+       /*
+        * Check to see if the cache has resized.
+        */
+-- 
+2.39.5
+
diff --git a/queue-5.4/dm-restrict-dm-device-size-to-2-63-512-bytes.patch b/queue-5.4/dm-restrict-dm-device-size-to-2-63-512-bytes.patch
new file mode 100644 (file)
index 0000000..c2ec256
--- /dev/null
@@ -0,0 +1,39 @@
+From 0e6a53c72d4faced30e5e8ccea9566280d2a5d95 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 14 Mar 2025 13:51:32 +0100
+Subject: dm: restrict dm device size to 2^63-512 bytes
+
+From: Mikulas Patocka <mpatocka@redhat.com>
+
+[ Upstream commit 45fc728515c14f53f6205789de5bfd72a95af3b8 ]
+
+The devices with size >= 2^63 bytes can't be used reliably by userspace
+because the type off_t is a signed 64-bit integer.
+
+Therefore, we limit the maximum size of a device mapper device to
+2^63-512 bytes.
+
+Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/md/dm-table.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/drivers/md/dm-table.c b/drivers/md/dm-table.c
+index a56d03eefb83c..7002846afb308 100644
+--- a/drivers/md/dm-table.c
++++ b/drivers/md/dm-table.c
+@@ -742,6 +742,10 @@ int dm_table_add_target(struct dm_table *t, const char *type,
+               DMERR("%s: zero-length target", dm_device_name(t->md));
+               return -EINVAL;
+       }
++      if (start + len < start || start + len > LLONG_MAX >> SECTOR_SHIFT) {
++              DMERR("%s: too large device", dm_device_name(t->md));
++              return -EINVAL;
++      }
+       tgt->type = dm_get_target_type(type);
+       if (!tgt->type) {
+-- 
+2.39.5
+
diff --git a/queue-5.4/dma-mapping-avoid-potential-unused-data-compilation-.patch b/queue-5.4/dma-mapping-avoid-potential-unused-data-compilation-.patch
new file mode 100644 (file)
index 0000000..d463b5a
--- /dev/null
@@ -0,0 +1,50 @@
+From c1e7181a32d1426c433cd77f9013ad8676042814 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 15 Apr 2025 09:56:59 +0200
+Subject: dma-mapping: avoid potential unused data compilation warning
+
+From: Marek Szyprowski <m.szyprowski@samsung.com>
+
+[ Upstream commit c9b19ea63036fc537a69265acea1b18dabd1cbd3 ]
+
+When CONFIG_NEED_DMA_MAP_STATE is not defined, dma-mapping clients might
+report unused data compilation warnings for dma_unmap_*() calls
+arguments. Redefine macros for those calls to let compiler to notice that
+it is okay when the provided arguments are not used.
+
+Reported-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
+Suggested-by: Jakub Kicinski <kuba@kernel.org>
+Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
+Tested-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
+Link: https://lore.kernel.org/r/20250415075659.428549-1-m.szyprowski@samsung.com
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ include/linux/dma-mapping.h | 12 ++++++++----
+ 1 file changed, 8 insertions(+), 4 deletions(-)
+
+diff --git a/include/linux/dma-mapping.h b/include/linux/dma-mapping.h
+index 87cbae4b051f1..ead09620e2138 100644
+--- a/include/linux/dma-mapping.h
++++ b/include/linux/dma-mapping.h
+@@ -895,10 +895,14 @@ static inline int dma_mmap_wc(struct device *dev,
+ #else
+ #define DEFINE_DMA_UNMAP_ADDR(ADDR_NAME)
+ #define DEFINE_DMA_UNMAP_LEN(LEN_NAME)
+-#define dma_unmap_addr(PTR, ADDR_NAME)           (0)
+-#define dma_unmap_addr_set(PTR, ADDR_NAME, VAL)  do { } while (0)
+-#define dma_unmap_len(PTR, LEN_NAME)             (0)
+-#define dma_unmap_len_set(PTR, LEN_NAME, VAL)    do { } while (0)
++#define dma_unmap_addr(PTR, ADDR_NAME)           \
++      ({ typeof(PTR) __p __maybe_unused = PTR; 0; })
++#define dma_unmap_addr_set(PTR, ADDR_NAME, VAL)  \
++      do { typeof(PTR) __p __maybe_unused = PTR; } while (0)
++#define dma_unmap_len(PTR, LEN_NAME)             \
++      ({ typeof(PTR) __p __maybe_unused = PTR; 0; })
++#define dma_unmap_len_set(PTR, LEN_NAME, VAL)    \
++      do { typeof(PTR) __p __maybe_unused = PTR; } while (0)
+ #endif
+ #endif
+-- 
+2.39.5
+
diff --git a/queue-5.4/dql-fix-dql-limit-value-when-reset.patch b/queue-5.4/dql-fix-dql-limit-value-when-reset.patch
new file mode 100644 (file)
index 0000000..96d1080
--- /dev/null
@@ -0,0 +1,46 @@
+From 42083a5cb8d4b74d7b37ce52d1445545708ddfae Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 19 Mar 2025 16:57:51 +0800
+Subject: dql: Fix dql->limit value when reset.
+
+From: Jing Su <jingsusu@didiglobal.com>
+
+[ Upstream commit 3a17f23f7c36bac3a3584aaf97d3e3e0b2790396 ]
+
+Executing dql_reset after setting a non-zero value for limit_min can
+lead to an unreasonable situation where dql->limit is less than
+dql->limit_min.
+
+For instance, after setting
+/sys/class/net/eth*/queues/tx-0/byte_queue_limits/limit_min,
+an ifconfig down/up operation might cause the ethernet driver to call
+netdev_tx_reset_queue, which in turn invokes dql_reset.
+
+In this case, dql->limit is reset to 0 while dql->limit_min remains
+non-zero value, which is unexpected. The limit should always be
+greater than or equal to limit_min.
+
+Signed-off-by: Jing Su <jingsusu@didiglobal.com>
+Link: https://patch.msgid.link/Z9qHD1s/NEuQBdgH@pilot-ThinkCentre-M930t-N000
+Signed-off-by: Jakub Kicinski <kuba@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ lib/dynamic_queue_limits.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/lib/dynamic_queue_limits.c b/lib/dynamic_queue_limits.c
+index e659a027036ec..f6807062b32a3 100644
+--- a/lib/dynamic_queue_limits.c
++++ b/lib/dynamic_queue_limits.c
+@@ -116,7 +116,7 @@ EXPORT_SYMBOL(dql_completed);
+ void dql_reset(struct dql *dql)
+ {
+       /* Reset all dynamic values */
+-      dql->limit = 0;
++      dql->limit = dql->min_limit;
+       dql->num_queued = 0;
+       dql->num_completed = 0;
+       dql->last_obj_cnt = 0;
+-- 
+2.39.5
+
diff --git a/queue-5.4/drm-add-valid-clones-check.patch b/queue-5.4/drm-add-valid-clones-check.patch
new file mode 100644 (file)
index 0000000..d3af851
--- /dev/null
@@ -0,0 +1,70 @@
+From dcf90b5b9d9c5d73f7feff72574f64e6557641c2 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 16 Dec 2024 16:43:14 -0800
+Subject: drm: Add valid clones check
+
+From: Jessica Zhang <quic_jesszhan@quicinc.com>
+
+[ Upstream commit 41b4b11da02157c7474caf41d56baae0e941d01a ]
+
+Check that all encoders attached to a given CRTC are valid
+possible_clones of each other.
+
+Signed-off-by: Jessica Zhang <quic_jesszhan@quicinc.com>
+Reviewed-by: Maxime Ripard <mripard@kernel.org>
+Link: https://patchwork.freedesktop.org/patch/msgid/20241216-concurrent-wb-v4-3-fe220297a7f0@quicinc.com
+Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/gpu/drm/drm_atomic_helper.c | 28 ++++++++++++++++++++++++++++
+ 1 file changed, 28 insertions(+)
+
+diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c
+index 70d97a7fc6864..678dba387d838 100644
+--- a/drivers/gpu/drm/drm_atomic_helper.c
++++ b/drivers/gpu/drm/drm_atomic_helper.c
+@@ -561,6 +561,30 @@ mode_valid(struct drm_atomic_state *state)
+       return 0;
+ }
++static int drm_atomic_check_valid_clones(struct drm_atomic_state *state,
++                                       struct drm_crtc *crtc)
++{
++      struct drm_encoder *drm_enc;
++      struct drm_crtc_state *crtc_state = drm_atomic_get_new_crtc_state(state,
++                                                                        crtc);
++
++      drm_for_each_encoder_mask(drm_enc, crtc->dev, crtc_state->encoder_mask) {
++              if (!drm_enc->possible_clones) {
++                      DRM_DEBUG("enc%d possible_clones is 0\n", drm_enc->base.id);
++                      continue;
++              }
++
++              if ((crtc_state->encoder_mask & drm_enc->possible_clones) !=
++                  crtc_state->encoder_mask) {
++                      DRM_DEBUG("crtc%d failed valid clone check for mask 0x%x\n",
++                                crtc->base.id, crtc_state->encoder_mask);
++                      return -EINVAL;
++              }
++      }
++
++      return 0;
++}
++
+ /**
+  * drm_atomic_helper_check_modeset - validate state object for modeset changes
+  * @dev: DRM device
+@@ -724,6 +748,10 @@ drm_atomic_helper_check_modeset(struct drm_device *dev,
+               ret = drm_atomic_add_affected_planes(state, crtc);
+               if (ret != 0)
+                       return ret;
++
++              ret = drm_atomic_check_valid_clones(state, crtc);
++              if (ret != 0)
++                      return ret;
+       }
+       /*
+-- 
+2.39.5
+
diff --git a/queue-5.4/drm-amdkfd-kfd-release_work-possible-circular-lockin.patch b/queue-5.4/drm-amdkfd-kfd-release_work-possible-circular-lockin.patch
new file mode 100644 (file)
index 0000000..3525235
--- /dev/null
@@ -0,0 +1,80 @@
+From d7aba8d6980b7ee2e00fa43958b2512e34452ee5 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 17 Feb 2025 20:08:29 -0500
+Subject: drm/amdkfd: KFD release_work possible circular locking
+
+From: Philip Yang <Philip.Yang@amd.com>
+
+[ Upstream commit 1b9366c601039d60546794c63fbb83ce8e53b978 ]
+
+If waiting for gpu reset done in KFD release_work, thers is WARNING:
+possible circular locking dependency detected
+
+  #2  kfd_create_process
+        kfd_process_mutex
+          flush kfd release work
+
+  #1  kfd release work
+        wait for amdgpu reset work
+
+  #0  amdgpu_device_gpu_reset
+        kgd2kfd_pre_reset
+          kfd_process_mutex
+
+  Possible unsafe locking scenario:
+
+        CPU0                    CPU1
+        ----                    ----
+   lock((work_completion)(&p->release_work));
+                  lock((wq_completion)kfd_process_wq);
+                  lock((work_completion)(&p->release_work));
+   lock((wq_completion)amdgpu-reset-dev);
+
+To fix this, KFD create process move flush release work outside
+kfd_process_mutex.
+
+Signed-off-by: Philip Yang <Philip.Yang@amd.com>
+Reviewed-by: Felix Kuehling <felix.kuehling@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/gpu/drm/amd/amdkfd/kfd_process.c | 16 ++++++++--------
+ 1 file changed, 8 insertions(+), 8 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_process.c b/drivers/gpu/drm/amd/amdkfd/kfd_process.c
+index 662e4d973f13a..b07deeb987475 100644
+--- a/drivers/gpu/drm/amd/amdkfd/kfd_process.c
++++ b/drivers/gpu/drm/amd/amdkfd/kfd_process.c
+@@ -277,6 +277,14 @@ struct kfd_process *kfd_create_process(struct file *filep)
+       if (thread->group_leader->mm != thread->mm)
+               return ERR_PTR(-EINVAL);
++      /* If the process just called exec(3), it is possible that the
++       * cleanup of the kfd_process (following the release of the mm
++       * of the old process image) is still in the cleanup work queue.
++       * Make sure to drain any job before trying to recreate any
++       * resource for this process.
++       */
++      flush_workqueue(kfd_process_wq);
++
+       /*
+        * take kfd processes mutex before starting of process creation
+        * so there won't be a case where two threads of the same process
+@@ -289,14 +297,6 @@ struct kfd_process *kfd_create_process(struct file *filep)
+       if (process) {
+               pr_debug("Process already found\n");
+       } else {
+-              /* If the process just called exec(3), it is possible that the
+-               * cleanup of the kfd_process (following the release of the mm
+-               * of the old process image) is still in the cleanup work queue.
+-               * Make sure to drain any job before trying to recreate any
+-               * resource for this process.
+-               */
+-              flush_workqueue(kfd_process_wq);
+-
+               process = create_process(thread);
+               if (IS_ERR(process))
+                       goto out;
+-- 
+2.39.5
+
diff --git a/queue-5.4/drm-atomic-clarify-the-rules-around-drm_atomic_state.patch b/queue-5.4/drm-atomic-clarify-the-rules-around-drm_atomic_state.patch
new file mode 100644 (file)
index 0000000..e1a5f3c
--- /dev/null
@@ -0,0 +1,90 @@
+From 3b9a8bc86fb719c553695b6e71926bc49862b410 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 8 Jan 2025 18:24:16 +0100
+Subject: drm/atomic: clarify the rules around drm_atomic_state->allow_modeset
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Simona Vetter <simona.vetter@ffwll.ch>
+
+[ Upstream commit c5e3306a424b52e38ad2c28c7f3399fcd03e383d ]
+
+msm is automagically upgrading normal commits to full modesets, and
+that's a big no-no:
+
+- for one this results in full on->off->on transitions on all these
+  crtc, at least if you're using the usual helpers. Which seems to be
+  the case, and is breaking uapi
+
+- further even if the ctm change itself would not result in flicker,
+  this can hide modesets for other reasons. Which again breaks the
+  uapi
+
+v2: I forgot the case of adding unrelated crtc state. Add that case
+and link to the existing kerneldoc explainers. This has come up in an
+irc discussion with Manasi and Ville about intel's bigjoiner mode.
+Also cc everyone involved in the msm irc discussion, more people
+joined after I sent out v1.
+
+v3: Wording polish from Pekka and Thomas
+
+Acked-by: Pekka Paalanen <pekka.paalanen@collabora.com>
+Acked-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
+Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
+Cc: Maxime Ripard <mripard@kernel.org>
+Cc: Thomas Zimmermann <tzimmermann@suse.de>
+Cc: David Airlie <airlied@gmail.com>
+Cc: Daniel Vetter <daniel@ffwll.ch>
+Cc: Pekka Paalanen <pekka.paalanen@collabora.com>
+Cc: Rob Clark <robdclark@gmail.com>
+Cc: Simon Ser <contact@emersion.fr>
+Cc: Manasi Navare <navaremanasi@google.com>
+Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
+Cc: Abhinav Kumar <quic_abhinavk@quicinc.com>
+Cc: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
+Signed-off-by: Simona Vetter <simona.vetter@intel.com>
+Signed-off-by: Simona Vetter <simona.vetter@ffwll.ch>
+Link: https://patchwork.freedesktop.org/patch/msgid/20250108172417.160831-1-simona.vetter@ffwll.ch
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ include/drm/drm_atomic.h | 23 +++++++++++++++++++++--
+ 1 file changed, 21 insertions(+), 2 deletions(-)
+
+diff --git a/include/drm/drm_atomic.h b/include/drm/drm_atomic.h
+index 927e1205d7aa4..202975db784c6 100644
+--- a/include/drm/drm_atomic.h
++++ b/include/drm/drm_atomic.h
+@@ -323,8 +323,27 @@ struct drm_atomic_state {
+        *
+        * Allow full modeset. This is used by the ATOMIC IOCTL handler to
+        * implement the DRM_MODE_ATOMIC_ALLOW_MODESET flag. Drivers should
+-       * never consult this flag, instead looking at the output of
+-       * drm_atomic_crtc_needs_modeset().
++       * generally not consult this flag, but instead look at the output of
++       * drm_atomic_crtc_needs_modeset(). The detailed rules are:
++       *
++       * - Drivers must not consult @allow_modeset in the atomic commit path.
++       *   Use drm_atomic_crtc_needs_modeset() instead.
++       *
++       * - Drivers must consult @allow_modeset before adding unrelated struct
++       *   drm_crtc_state to this commit by calling
++       *   drm_atomic_get_crtc_state(). See also the warning in the
++       *   documentation for that function.
++       *
++       * - Drivers must never change this flag, it is under the exclusive
++       *   control of userspace.
++       *
++       * - Drivers may consult @allow_modeset in the atomic check path, if
++       *   they have the choice between an optimal hardware configuration
++       *   which requires a modeset, and a less optimal configuration which
++       *   can be committed without a modeset. An example would be suboptimal
++       *   scanout FIFO allocation resulting in increased idle power
++       *   consumption. This allows userspace to avoid flickering and delays
++       *   for the normal composition loop at reasonable cost.
+        */
+       bool allow_modeset : 1;
+       bool legacy_cursor_update : 1;
+-- 
+2.39.5
+
diff --git a/queue-5.4/drm-mediatek-mtk_dpi-add-checks-for-reg_h_fre_con-ex.patch b/queue-5.4/drm-mediatek-mtk_dpi-add-checks-for-reg_h_fre_con-ex.patch
new file mode 100644 (file)
index 0000000..3a28caa
--- /dev/null
@@ -0,0 +1,51 @@
+From 54af1bf1630cdbb199219d4d40899447de645887 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 17 Feb 2025 16:47:58 +0100
+Subject: drm/mediatek: mtk_dpi: Add checks for reg_h_fre_con existence
+
+From: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
+
+[ Upstream commit 8c9da7cd0bbcc90ab444454fecf535320456a312 ]
+
+In preparation for adding support for newer DPI instances which
+do support direct-pin but do not have any H_FRE_CON register,
+like the one found in MT8195 and MT8188, add a branch to check
+if the reg_h_fre_con variable was declared in the mtk_dpi_conf
+structure for the probed SoC DPI version.
+
+As a note, this is useful specifically only for cases in which
+the support_direct_pin variable is true, so mt8195-dpintf is
+not affected by any issue.
+
+Reviewed-by: CK Hu <ck.hu@mediatek.com>
+Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
+Link: https://patchwork.kernel.org/project/dri-devel/patch/20250217154836.108895-6-angelogioacchino.delregno@collabora.com/
+Signed-off-by: Chun-Kuang Hu <chunkuang.hu@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/gpu/drm/mediatek/mtk_dpi.c | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/gpu/drm/mediatek/mtk_dpi.c b/drivers/gpu/drm/mediatek/mtk_dpi.c
+index 191e0cec004b4..6d105e8aae459 100644
+--- a/drivers/gpu/drm/mediatek/mtk_dpi.c
++++ b/drivers/gpu/drm/mediatek/mtk_dpi.c
+@@ -337,12 +337,13 @@ static void mtk_dpi_config_swap_input(struct mtk_dpi *dpi, bool enable)
+ static void mtk_dpi_config_2n_h_fre(struct mtk_dpi *dpi)
+ {
+-      mtk_dpi_mask(dpi, dpi->conf->reg_h_fre_con, H_FRE_2N, H_FRE_2N);
++      if (dpi->conf->reg_h_fre_con)
++              mtk_dpi_mask(dpi, dpi->conf->reg_h_fre_con, H_FRE_2N, H_FRE_2N);
+ }
+ static void mtk_dpi_config_disable_edge(struct mtk_dpi *dpi)
+ {
+-      if (dpi->conf->edge_sel_en)
++      if (dpi->conf->edge_sel_en && dpi->conf->reg_h_fre_con)
+               mtk_dpi_mask(dpi, dpi->conf->reg_h_fre_con, 0, EDGE_SEL_EN);
+ }
+-- 
+2.39.5
+
diff --git a/queue-5.4/edac-ie31200-work-around-false-positive-build-warnin.patch b/queue-5.4/edac-ie31200-work-around-false-positive-build-warnin.patch
new file mode 100644 (file)
index 0000000..3bda507
--- /dev/null
@@ -0,0 +1,105 @@
+From 436f06752792753d36ca324145e5527e45327363 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 22 Jan 2025 07:50:26 +0100
+Subject: EDAC/ie31200: work around false positive build warning
+
+From: Arnd Bergmann <arnd@arndb.de>
+
+[ Upstream commit c29dfd661fe2f8d1b48c7f00590929c04b25bf40 ]
+
+gcc-14 produces a bogus warning in some configurations:
+
+drivers/edac/ie31200_edac.c: In function 'ie31200_probe1.isra':
+drivers/edac/ie31200_edac.c:412:26: error: 'dimm_info' is used uninitialized [-Werror=uninitialized]
+  412 |         struct dimm_data dimm_info[IE31200_CHANNELS][IE31200_DIMMS_PER_CHANNEL];
+      |                          ^~~~~~~~~
+drivers/edac/ie31200_edac.c:412:26: note: 'dimm_info' declared here
+  412 |         struct dimm_data dimm_info[IE31200_CHANNELS][IE31200_DIMMS_PER_CHANNEL];
+      |                          ^~~~~~~~~
+
+I don't see any way the unintialized access could really happen here,
+but I can see why the compiler gets confused by the two loops.
+
+Instead, rework the two nested loops to only read the addr_decode
+registers and then keep only one instance of the dimm info structure.
+
+[Tony: Qiuxu pointed out that the "populate DIMM info" comment was left
+behind in the refactor and suggested moving it. I deleted the comment
+as unnecessry in front os a call to populate_dimm_info(). That seems
+pretty self-describing.]
+
+Signed-off-by: Arnd Bergmann <arnd@arndb.de>
+Acked-by: Jason Baron <jbaron@akamai.com>
+Signed-off-by: Tony Luck <tony.luck@intel.com>
+Link: https://lore.kernel.org/all/20250122065031.1321015-1-arnd@kernel.org
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/edac/ie31200_edac.c | 28 +++++++++++++---------------
+ 1 file changed, 13 insertions(+), 15 deletions(-)
+
+diff --git a/drivers/edac/ie31200_edac.c b/drivers/edac/ie31200_edac.c
+index d3d9916b1ba3f..f865528728d75 100644
+--- a/drivers/edac/ie31200_edac.c
++++ b/drivers/edac/ie31200_edac.c
+@@ -398,10 +398,9 @@ static int ie31200_probe1(struct pci_dev *pdev, int dev_idx)
+       int i, j, ret;
+       struct mem_ctl_info *mci = NULL;
+       struct edac_mc_layer layers[2];
+-      struct dimm_data dimm_info[IE31200_CHANNELS][IE31200_DIMMS_PER_CHANNEL];
+       void __iomem *window;
+       struct ie31200_priv *priv;
+-      u32 addr_decode, mad_offset;
++      u32 addr_decode[IE31200_CHANNELS], mad_offset;
+       /*
+        * Kaby Lake, Coffee Lake seem to work like Skylake. Please re-visit
+@@ -459,19 +458,10 @@ static int ie31200_probe1(struct pci_dev *pdev, int dev_idx)
+               mad_offset = IE31200_MAD_DIMM_0_OFFSET;
+       }
+-      /* populate DIMM info */
+       for (i = 0; i < IE31200_CHANNELS; i++) {
+-              addr_decode = readl(window + mad_offset +
++              addr_decode[i] = readl(window + mad_offset +
+                                       (i * 4));
+-              edac_dbg(0, "addr_decode: 0x%x\n", addr_decode);
+-              for (j = 0; j < IE31200_DIMMS_PER_CHANNEL; j++) {
+-                      populate_dimm_info(&dimm_info[i][j], addr_decode, j,
+-                                         skl);
+-                      edac_dbg(0, "size: 0x%x, rank: %d, width: %d\n",
+-                               dimm_info[i][j].size,
+-                               dimm_info[i][j].dual_rank,
+-                               dimm_info[i][j].x16_width);
+-              }
++              edac_dbg(0, "addr_decode: 0x%x\n", addr_decode[i]);
+       }
+       /*
+@@ -482,14 +472,22 @@ static int ie31200_probe1(struct pci_dev *pdev, int dev_idx)
+        */
+       for (i = 0; i < IE31200_DIMMS_PER_CHANNEL; i++) {
+               for (j = 0; j < IE31200_CHANNELS; j++) {
++                      struct dimm_data dimm_info;
+                       struct dimm_info *dimm;
+                       unsigned long nr_pages;
+-                      nr_pages = IE31200_PAGES(dimm_info[j][i].size, skl);
++                      populate_dimm_info(&dimm_info, addr_decode[j], i,
++                                         skl);
++                      edac_dbg(0, "size: 0x%x, rank: %d, width: %d\n",
++                               dimm_info.size,
++                               dimm_info.dual_rank,
++                               dimm_info.x16_width);
++
++                      nr_pages = IE31200_PAGES(dimm_info.size, skl);
+                       if (nr_pages == 0)
+                               continue;
+-                      if (dimm_info[j][i].dual_rank) {
++                      if (dimm_info.dual_rank) {
+                               nr_pages = nr_pages / 2;
+                               dimm = EDAC_DIMM_PTR(mci->layers, mci->dimms,
+                                                    mci->n_layers, (i * 2) + 1,
+-- 
+2.39.5
+
diff --git a/queue-5.4/exit-fix-the-usage-of-delay_group_leader-exit_code-i.patch b/queue-5.4/exit-fix-the-usage-of-delay_group_leader-exit_code-i.patch
new file mode 100644 (file)
index 0000000..95b0ef0
--- /dev/null
@@ -0,0 +1,52 @@
+From af236fb6e7c5cd027b37ec565c28f3758dac1b54 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 24 Mar 2025 18:19:41 +0100
+Subject: exit: fix the usage of delay_group_leader->exit_code in
+ do_notify_parent() and pidfs_exit()
+
+From: Oleg Nesterov <oleg@redhat.com>
+
+[ Upstream commit 9133607de37a4887c6f89ed937176a0a0c1ebb17 ]
+
+Consider a process with a group leader L and a sub-thread T.
+L does sys_exit(1), then T does sys_exit_group(2).
+
+In this case wait_task_zombie(L) will notice SIGNAL_GROUP_EXIT and use
+L->signal->group_exit_code, this is correct.
+
+But, before that, do_notify_parent(L) called by release_task(T) will use
+L->exit_code != L->signal->group_exit_code, and this is not consistent.
+We don't really care, I think that nobody relies on the info which comes
+with SIGCHLD, if nothing else SIGCHLD < SIGRTMIN can be queued only once.
+
+But pidfs_exit() is more problematic, I think pidfs_exit_info->exit_code
+should report ->group_exit_code in this case, just like wait_task_zombie().
+
+TODO: with this change we can hopefully cleanup (or may be even kill) the
+similar SIGNAL_GROUP_EXIT checks, at least in wait_task_zombie().
+
+Signed-off-by: Oleg Nesterov <oleg@redhat.com>
+Link: https://lore.kernel.org/r/20250324171941.GA13114@redhat.com
+Signed-off-by: Christian Brauner <brauner@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ kernel/exit.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/kernel/exit.c b/kernel/exit.c
+index 56d3a099825fb..5015ecdda6d95 100644
+--- a/kernel/exit.c
++++ b/kernel/exit.c
+@@ -262,6 +262,9 @@ void release_task(struct task_struct *p)
+       leader = p->group_leader;
+       if (leader != p && thread_group_empty(leader)
+                       && leader->exit_state == EXIT_ZOMBIE) {
++              /* for pidfs_exit() and do_notify_parent() */
++              if (leader->signal->flags & SIGNAL_GROUP_EXIT)
++                      leader->exit_code = leader->signal->group_exit_code;
+               /*
+                * If we were the last child thread and the leader has
+                * exited already, and the leader's parent ignores SIGCHLD,
+-- 
+2.39.5
+
diff --git a/queue-5.4/ext4-reorder-capability-check-last.patch b/queue-5.4/ext4-reorder-capability-check-last.patch
new file mode 100644 (file)
index 0000000..04d0813
--- /dev/null
@@ -0,0 +1,55 @@
+From 8fba96b39835181f9f6b55ea6b98f0a7cadeeda0 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun, 2 Mar 2025 17:06:39 +0100
+Subject: ext4: reorder capability check last
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Christian Göttsche <cgzones@googlemail.com>
+
+[ Upstream commit 1b419c889c0767a5b66d0a6c566cae491f1cb0f7 ]
+
+capable() calls refer to enabled LSMs whether to permit or deny the
+request.  This is relevant in connection with SELinux, where a
+capability check results in a policy decision and by default a denial
+message on insufficient permission is issued.
+It can lead to three undesired cases:
+  1. A denial message is generated, even in case the operation was an
+     unprivileged one and thus the syscall succeeded, creating noise.
+  2. To avoid the noise from 1. the policy writer adds a rule to ignore
+     those denial messages, hiding future syscalls, where the task
+     performs an actual privileged operation, leading to hidden limited
+     functionality of that task.
+  3. To avoid the noise from 1. the policy writer adds a rule to permit
+     the task the requested capability, while it does not need it,
+     violating the principle of least privilege.
+
+Signed-off-by: Christian Göttsche <cgzones@googlemail.com>
+Reviewed-by: Serge Hallyn <serge@hallyn.com>
+Reviewed-by: Jan Kara <jack@suse.cz>
+Link: https://patch.msgid.link/20250302160657.127253-2-cgoettsche@seltendoof.de
+Signed-off-by: Theodore Ts'o <tytso@mit.edu>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/ext4/balloc.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/fs/ext4/balloc.c b/fs/ext4/balloc.c
+index b68cee75f5c58..a32eb67a8f0e2 100644
+--- a/fs/ext4/balloc.c
++++ b/fs/ext4/balloc.c
+@@ -609,8 +609,8 @@ static int ext4_has_free_clusters(struct ext4_sb_info *sbi,
+       /* Hm, nope.  Are (enough) root reserved clusters available? */
+       if (uid_eq(sbi->s_resuid, current_fsuid()) ||
+           (!gid_eq(sbi->s_resgid, GLOBAL_ROOT_GID) && in_group_p(sbi->s_resgid)) ||
+-          capable(CAP_SYS_RESOURCE) ||
+-          (flags & EXT4_MB_USE_ROOT_BLOCKS)) {
++          (flags & EXT4_MB_USE_ROOT_BLOCKS) ||
++          capable(CAP_SYS_RESOURCE)) {
+               if (free_clusters >= (nclusters + dirty_clusters +
+                                     resv_clusters))
+-- 
+2.39.5
+
diff --git a/queue-5.4/fbdev-core-tileblit-implement-missing-margin-clearin.patch b/queue-5.4/fbdev-core-tileblit-implement-missing-margin-clearin.patch
new file mode 100644 (file)
index 0000000..67834de
--- /dev/null
@@ -0,0 +1,95 @@
+From a304718bcef6f33d3f22925ca0da1564d74f6c66 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sat, 1 Feb 2025 09:18:09 +0100
+Subject: fbdev: core: tileblit: Implement missing margin clearing for tileblit
+
+From: Zsolt Kajtar <soci@c64.rulez.org>
+
+[ Upstream commit 76d3ca89981354e1f85a3e0ad9ac4217d351cc72 ]
+
+I was wondering why there's garbage at the bottom of the screen when
+tile blitting is used with an odd mode like 1080, 600 or 200. Sure there's
+only space for half a tile but the same area is clean when the buffer
+is bitmap.
+
+Then later I found that it's supposed to be cleaned but that's not
+implemented. So I took what's in bitblit and adapted it for tileblit.
+
+This implementation was tested for both the horizontal and vertical case,
+and now does the same as what's done for bitmap buffers.
+
+If anyone is interested to reproduce the problem then I could bet that'd
+be on a S3 or Ark. Just set up a mode with an odd line count and make
+sure that the virtual size covers the complete tile at the bottom. E.g.
+for 600 lines that's 608 virtual lines for a 16 tall tile. Then the
+bottom area should be cleaned.
+
+For the right side it's more difficult as there the drivers won't let an
+odd size happen, unless the code is modified. But once it reports back a
+few pixel columns short then fbcon won't use the last column. With the
+patch that column is now clean.
+
+Btw. the virtual size should be rounded up by the driver for both axes
+(not only the horizontal) so that it's dividable by the tile size.
+That's a driver bug but correcting it is not in scope for this patch.
+
+Implement missing margin clearing for tileblit
+
+Signed-off-by: Zsolt Kajtar <soci@c64.rulez.org>
+Signed-off-by: Helge Deller <deller@gmx.de>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/video/fbdev/core/tileblit.c | 37 ++++++++++++++++++++++++++++-
+ 1 file changed, 36 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/video/fbdev/core/tileblit.c b/drivers/video/fbdev/core/tileblit.c
+index adff8d6ffe6f9..64c60fcb92d75 100644
+--- a/drivers/video/fbdev/core/tileblit.c
++++ b/drivers/video/fbdev/core/tileblit.c
+@@ -77,7 +77,42 @@ static void tile_putcs(struct vc_data *vc, struct fb_info *info,
+ static void tile_clear_margins(struct vc_data *vc, struct fb_info *info,
+                              int color, int bottom_only)
+ {
+-      return;
++      unsigned int cw = vc->vc_font.width;
++      unsigned int ch = vc->vc_font.height;
++      unsigned int rw = info->var.xres - (vc->vc_cols*cw);
++      unsigned int bh = info->var.yres - (vc->vc_rows*ch);
++      unsigned int rs = info->var.xres - rw;
++      unsigned int bs = info->var.yres - bh;
++      unsigned int vwt = info->var.xres_virtual / cw;
++      unsigned int vht = info->var.yres_virtual / ch;
++      struct fb_tilerect rect;
++
++      rect.index = vc->vc_video_erase_char &
++              ((vc->vc_hi_font_mask) ? 0x1ff : 0xff);
++      rect.fg = color;
++      rect.bg = color;
++
++      if ((int) rw > 0 && !bottom_only) {
++              rect.sx = (info->var.xoffset + rs + cw - 1) / cw;
++              rect.sy = 0;
++              rect.width = (rw + cw - 1) / cw;
++              rect.height = vht;
++              if (rect.width + rect.sx > vwt)
++                      rect.width = vwt - rect.sx;
++              if (rect.sx < vwt)
++                      info->tileops->fb_tilefill(info, &rect);
++      }
++
++      if ((int) bh > 0) {
++              rect.sx = info->var.xoffset / cw;
++              rect.sy = (info->var.yoffset + bs) / ch;
++              rect.width = rs / cw;
++              rect.height = (bh + ch - 1) / ch;
++              if (rect.height + rect.sy > vht)
++                      rect.height = vht - rect.sy;
++              if (rect.sy < vht)
++                      info->tileops->fb_tilefill(info, &rect);
++      }
+ }
+ static void tile_cursor(struct vc_data *vc, struct fb_info *info, int mode,
+-- 
+2.39.5
+
diff --git a/queue-5.4/fbdev-fsl-diu-fb-add-missing-device_remove_file.patch b/queue-5.4/fbdev-fsl-diu-fb-add-missing-device_remove_file.patch
new file mode 100644 (file)
index 0000000..a86de32
--- /dev/null
@@ -0,0 +1,33 @@
+From 4378ba5dd3097b0e8fc878495f5d0b613b19321a Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 10 Mar 2025 09:54:31 +0800
+Subject: fbdev: fsl-diu-fb: add missing device_remove_file()
+
+From: Shixiong Ou <oushixiong@kylinos.cn>
+
+[ Upstream commit 86d16cd12efa547ed43d16ba7a782c1251c80ea8 ]
+
+Call device_remove_file() when driver remove.
+
+Signed-off-by: Shixiong Ou <oushixiong@kylinos.cn>
+Signed-off-by: Helge Deller <deller@gmx.de>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/video/fbdev/fsl-diu-fb.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/drivers/video/fbdev/fsl-diu-fb.c b/drivers/video/fbdev/fsl-diu-fb.c
+index d4c2a6b3839ec..3dc399704adc1 100644
+--- a/drivers/video/fbdev/fsl-diu-fb.c
++++ b/drivers/video/fbdev/fsl-diu-fb.c
+@@ -1828,6 +1828,7 @@ static int fsl_diu_remove(struct platform_device *pdev)
+       int i;
+       data = dev_get_drvdata(&pdev->dev);
++      device_remove_file(&pdev->dev, &data->dev_attr);
+       disable_lcdc(&data->fsl_diu_info[0]);
+       free_irq(data->irq, data->diu_reg);
+-- 
+2.39.5
+
diff --git a/queue-5.4/fpga-altera-cvp-increase-credit-timeout.patch b/queue-5.4/fpga-altera-cvp-increase-credit-timeout.patch
new file mode 100644 (file)
index 0000000..641ab9f
--- /dev/null
@@ -0,0 +1,43 @@
+From 7e82011ee8a8765588a7c94a79ff46a495e3bd84 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 13 Feb 2025 06:12:49 +0800
+Subject: fpga: altera-cvp: Increase credit timeout
+
+From: Kuhanh Murugasen Krishnan <kuhanh.murugasen.krishnan@intel.com>
+
+[ Upstream commit 0f05886a40fdc55016ba4d9ae0a9c41f8312f15b ]
+
+Increase the timeout for SDM (Secure device manager) data credits from
+20ms to 40ms. Internal stress tests running at 500 loops failed with the
+current timeout of 20ms. At the start of a FPGA configuration, the CVP
+host driver reads the transmit credits from SDM. It then sends bitstream
+FPGA data to SDM based on the total credits. Each credit allows the
+CVP host driver to send 4kBytes of data. There are situations whereby,
+the SDM did not respond in time during testing.
+
+Signed-off-by: Ang Tien Sung <tien.sung.ang@intel.com>
+Signed-off-by: Kuhanh Murugasen Krishnan <kuhanh.murugasen.krishnan@intel.com>
+Acked-by: Xu Yilun <yilun.xu@intel.com>
+Link: https://lore.kernel.org/r/20250212221249.2715929-1-tien.sung.ang@intel.com
+Signed-off-by: Xu Yilun <yilun.xu@linux.intel.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/fpga/altera-cvp.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/fpga/altera-cvp.c b/drivers/fpga/altera-cvp.c
+index 4e0edb60bfba6..d107ad73a188c 100644
+--- a/drivers/fpga/altera-cvp.c
++++ b/drivers/fpga/altera-cvp.c
+@@ -52,7 +52,7 @@
+ /* V2 Defines */
+ #define VSE_CVP_TX_CREDITS            0x49    /* 8bit */
+-#define V2_CREDIT_TIMEOUT_US          20000
++#define V2_CREDIT_TIMEOUT_US          40000
+ #define V2_CHECK_CREDIT_US            10
+ #define V2_POLL_TIMEOUT_US            1000000
+ #define V2_USER_TIMEOUT_US            500000
+-- 
+2.39.5
+
diff --git a/queue-5.4/hid-usbkbd-fix-the-bit-shift-number-for-led_kana.patch b/queue-5.4/hid-usbkbd-fix-the-bit-shift-number-for-led_kana.patch
new file mode 100644 (file)
index 0000000..e58cfa1
--- /dev/null
@@ -0,0 +1,34 @@
+From f45df10a22250de3c7d70cce11396314095aa9f4 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 28 Nov 2024 10:35:18 +0800
+Subject: HID: usbkbd: Fix the bit shift number for LED_KANA
+
+From: junan <junan76@163.com>
+
+[ Upstream commit d73a4bfa2881a6859b384b75a414c33d4898b055 ]
+
+Since "LED_KANA" was defined as "0x04", the shift number should be "4".
+
+Signed-off-by: junan <junan76@163.com>
+Signed-off-by: Jiri Kosina <jkosina@suse.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/hid/usbhid/usbkbd.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/hid/usbhid/usbkbd.c b/drivers/hid/usbhid/usbkbd.c
+index d5b7a696a68c5..50c5b204bf04c 100644
+--- a/drivers/hid/usbhid/usbkbd.c
++++ b/drivers/hid/usbhid/usbkbd.c
+@@ -160,7 +160,7 @@ static int usb_kbd_event(struct input_dev *dev, unsigned int type,
+               return -1;
+       spin_lock_irqsave(&kbd->leds_lock, flags);
+-      kbd->newleds = (!!test_bit(LED_KANA,    dev->led) << 3) | (!!test_bit(LED_COMPOSE, dev->led) << 3) |
++      kbd->newleds = (!!test_bit(LED_KANA,    dev->led) << 4) | (!!test_bit(LED_COMPOSE, dev->led) << 3) |
+                      (!!test_bit(LED_SCROLLL, dev->led) << 2) | (!!test_bit(LED_CAPSL,   dev->led) << 1) |
+                      (!!test_bit(LED_NUML,    dev->led));
+-- 
+2.39.5
+
diff --git a/queue-5.4/hwmon-gpio-fan-add-missing-mutex-locks.patch b/queue-5.4/hwmon-gpio-fan-add-missing-mutex-locks.patch
new file mode 100644 (file)
index 0000000..b446509
--- /dev/null
@@ -0,0 +1,75 @@
+From 1c2d07fa2fc59f139443f408af3b40e91949ec9f Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 10 Feb 2025 15:59:30 +0100
+Subject: hwmon: (gpio-fan) Add missing mutex locks
+
+From: Alexander Stein <alexander.stein@ew.tq-group.com>
+
+[ Upstream commit 9fee7d19bab635f89223cc40dfd2c8797fdc4988 ]
+
+set_fan_speed() is expected to be called with fan_data->lock being locked.
+Add locking for proper synchronization.
+
+Signed-off-by: Alexander Stein <alexander.stein@ew.tq-group.com>
+Link: https://lore.kernel.org/r/20250210145934.761280-3-alexander.stein@ew.tq-group.com
+Signed-off-by: Guenter Roeck <linux@roeck-us.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/hwmon/gpio-fan.c | 16 +++++++++++++++-
+ 1 file changed, 15 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/hwmon/gpio-fan.c b/drivers/hwmon/gpio-fan.c
+index d96e435cc42b1..e0b3917dfe6f9 100644
+--- a/drivers/hwmon/gpio-fan.c
++++ b/drivers/hwmon/gpio-fan.c
+@@ -394,7 +394,12 @@ static int gpio_fan_set_cur_state(struct thermal_cooling_device *cdev,
+       if (state >= fan_data->num_speed)
+               return -EINVAL;
++      mutex_lock(&fan_data->lock);
++
+       set_fan_speed(fan_data, state);
++
++      mutex_unlock(&fan_data->lock);
++
+       return 0;
+ }
+@@ -490,7 +495,11 @@ MODULE_DEVICE_TABLE(of, of_gpio_fan_match);
+ static void gpio_fan_stop(void *data)
+ {
++      struct gpio_fan_data *fan_data = data;
++
++      mutex_lock(&fan_data->lock);
+       set_fan_speed(data, 0);
++      mutex_unlock(&fan_data->lock);
+ }
+ static int gpio_fan_probe(struct platform_device *pdev)
+@@ -564,7 +573,9 @@ static int gpio_fan_suspend(struct device *dev)
+       if (fan_data->gpios) {
+               fan_data->resume_speed = fan_data->speed_index;
++              mutex_lock(&fan_data->lock);
+               set_fan_speed(fan_data, 0);
++              mutex_unlock(&fan_data->lock);
+       }
+       return 0;
+@@ -574,8 +585,11 @@ static int gpio_fan_resume(struct device *dev)
+ {
+       struct gpio_fan_data *fan_data = dev_get_drvdata(dev);
+-      if (fan_data->gpios)
++      if (fan_data->gpios) {
++              mutex_lock(&fan_data->lock);
+               set_fan_speed(fan_data, fan_data->resume_speed);
++              mutex_unlock(&fan_data->lock);
++      }
+       return 0;
+ }
+-- 
+2.39.5
+
diff --git a/queue-5.4/hwmon-xgene-hwmon-use-appropriate-type-for-the-laten.patch b/queue-5.4/hwmon-xgene-hwmon-use-appropriate-type-for-the-laten.patch
new file mode 100644 (file)
index 0000000..85b0fea
--- /dev/null
@@ -0,0 +1,45 @@
+From eb84af621724cd6a14c58b1a4c5ce8ea94a0d71d Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 4 Feb 2025 09:54:08 +0000
+Subject: hwmon: (xgene-hwmon) use appropriate type for the latency value
+
+From: Andrey Vatoropin <a.vatoropin@crpt.ru>
+
+[ Upstream commit 8df0f002827e18632dcd986f7546c1abf1953a6f ]
+
+The expression PCC_NUM_RETRIES * pcc_chan->latency is currently being
+evaluated using 32-bit arithmetic.
+
+Since a value of type 'u64' is used to store the eventual result,
+and this result is later sent to the function usecs_to_jiffies with
+input parameter unsigned int, the current data type is too wide to
+store the value of ctx->usecs_lat.
+
+Change the data type of "usecs_lat" to a more suitable (narrower) type.
+
+Found by Linux Verification Center (linuxtesting.org) with SVACE.
+
+Signed-off-by: Andrey Vatoropin <a.vatoropin@crpt.ru>
+Link: https://lore.kernel.org/r/20250204095400.95013-1-a.vatoropin@crpt.ru
+Signed-off-by: Guenter Roeck <linux@roeck-us.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/hwmon/xgene-hwmon.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/hwmon/xgene-hwmon.c b/drivers/hwmon/xgene-hwmon.c
+index 559a73bab51e8..15889bcc85875 100644
+--- a/drivers/hwmon/xgene-hwmon.c
++++ b/drivers/hwmon/xgene-hwmon.c
+@@ -110,7 +110,7 @@ struct xgene_hwmon_dev {
+       phys_addr_t             comm_base_addr;
+       void                    *pcc_comm_addr;
+-      u64                     usecs_lat;
++      unsigned int            usecs_lat;
+ };
+ /*
+-- 
+2.39.5
+
diff --git a/queue-5.4/i2c-pxa-fix-call-balance-of-i2c-clk-handling-routine.patch b/queue-5.4/i2c-pxa-fix-call-balance-of-i2c-clk-handling-routine.patch
new file mode 100644 (file)
index 0000000..0a0db3f
--- /dev/null
@@ -0,0 +1,41 @@
+From 5c8ed64b503be0efc95f92892040df73bb7f6563 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 12 Feb 2025 20:28:03 +0300
+Subject: i2c: pxa: fix call balance of i2c->clk handling routines
+
+From: Vitalii Mordan <mordan@ispras.ru>
+
+[ Upstream commit be7113d2e2a6f20cbee99c98d261a1fd6fd7b549 ]
+
+If the clock i2c->clk was not enabled in i2c_pxa_probe(), it should not be
+disabled in any path.
+
+Found by Linux Verification Center (linuxtesting.org) with Klever.
+
+Signed-off-by: Vitalii Mordan <mordan@ispras.ru>
+Signed-off-by: Andi Shyti <andi.shyti@kernel.org>
+Link: https://lore.kernel.org/r/20250212172803.1422136-1-mordan@ispras.ru
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/i2c/busses/i2c-pxa.c | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/i2c/busses/i2c-pxa.c b/drivers/i2c/busses/i2c-pxa.c
+index d0c557c8d80f5..c5a6e7527baf7 100644
+--- a/drivers/i2c/busses/i2c-pxa.c
++++ b/drivers/i2c/busses/i2c-pxa.c
+@@ -1284,7 +1284,10 @@ static int i2c_pxa_probe(struct platform_device *dev)
+                               i2c->adap.name);
+       }
+-      clk_prepare_enable(i2c->clk);
++      ret = clk_prepare_enable(i2c->clk);
++      if (ret)
++              return dev_err_probe(&dev->dev, ret,
++                                   "failed to enable clock\n");
+       if (i2c->use_pio) {
+               i2c->adap.algo = &i2c_pxa_pio_algorithm;
+-- 
+2.39.5
+
diff --git a/queue-5.4/ieee802154-ca8210-use-proper-setters-and-getters-for.patch b/queue-5.4/ieee802154-ca8210-use-proper-setters-and-getters-for.patch
new file mode 100644 (file)
index 0000000..6291f40
--- /dev/null
@@ -0,0 +1,77 @@
+From be37436ed13c34369ba6bcad6bfbb21ab68479c8 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 5 Mar 2025 12:55:34 +0200
+Subject: ieee802154: ca8210: Use proper setters and getters for bitwise types
+
+From: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
+
+[ Upstream commit 169b2262205836a5d1213ff44dca2962276bece1 ]
+
+Sparse complains that the driver doesn't respect the bitwise types:
+
+drivers/net/ieee802154/ca8210.c:1796:27: warning: incorrect type in assignment (different base types)
+drivers/net/ieee802154/ca8210.c:1796:27:    expected restricted __le16 [addressable] [assigned] [usertype] pan_id
+drivers/net/ieee802154/ca8210.c:1796:27:    got unsigned short [usertype]
+drivers/net/ieee802154/ca8210.c:1801:25: warning: incorrect type in assignment (different base types)
+drivers/net/ieee802154/ca8210.c:1801:25:    expected restricted __le16 [addressable] [assigned] [usertype] pan_id
+drivers/net/ieee802154/ca8210.c:1801:25:    got unsigned short [usertype]
+drivers/net/ieee802154/ca8210.c:1928:28: warning: incorrect type in argument 3 (different base types)
+drivers/net/ieee802154/ca8210.c:1928:28:    expected unsigned short [usertype] dst_pan_id
+drivers/net/ieee802154/ca8210.c:1928:28:    got restricted __le16 [addressable] [usertype] pan_id
+
+Use proper setters and getters for bitwise types.
+
+Note, in accordance with [1] the protocol is little endian.
+
+Link: https://www.cascoda.com/wp-content/uploads/2018/11/CA-8210_datasheet_0418.pdf [1]
+Reviewed-by: Miquel Raynal <miquel.raynal@bootlin.com>
+Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
+Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
+Link: https://lore.kernel.org/20250305105656.2133487-2-andriy.shevchenko@linux.intel.com
+Signed-off-by: Stefan Schmidt <stefan@datenfreihafen.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/ieee802154/ca8210.c | 9 ++++-----
+ 1 file changed, 4 insertions(+), 5 deletions(-)
+
+diff --git a/drivers/net/ieee802154/ca8210.c b/drivers/net/ieee802154/ca8210.c
+index d394e2b65054d..d99976034027c 100644
+--- a/drivers/net/ieee802154/ca8210.c
++++ b/drivers/net/ieee802154/ca8210.c
+@@ -1487,8 +1487,7 @@ static u8 mcps_data_request(
+       command.pdata.data_req.src_addr_mode = src_addr_mode;
+       command.pdata.data_req.dst.mode = dst_address_mode;
+       if (dst_address_mode != MAC_MODE_NO_ADDR) {
+-              command.pdata.data_req.dst.pan_id[0] = LS_BYTE(dst_pan_id);
+-              command.pdata.data_req.dst.pan_id[1] = MS_BYTE(dst_pan_id);
++              put_unaligned_le16(dst_pan_id, command.pdata.data_req.dst.pan_id);
+               if (dst_address_mode == MAC_MODE_SHORT_ADDR) {
+                       command.pdata.data_req.dst.address[0] = LS_BYTE(
+                               dst_addr->short_address
+@@ -1837,12 +1836,12 @@ static int ca8210_skb_rx(
+       }
+       hdr.source.mode = data_ind[0];
+       dev_dbg(&priv->spi->dev, "srcAddrMode: %#03x\n", hdr.source.mode);
+-      hdr.source.pan_id = *(u16 *)&data_ind[1];
++      hdr.source.pan_id = cpu_to_le16(get_unaligned_le16(&data_ind[1]));
+       dev_dbg(&priv->spi->dev, "srcPanId: %#06x\n", hdr.source.pan_id);
+       memcpy(&hdr.source.extended_addr, &data_ind[3], 8);
+       hdr.dest.mode = data_ind[11];
+       dev_dbg(&priv->spi->dev, "dstAddrMode: %#03x\n", hdr.dest.mode);
+-      hdr.dest.pan_id = *(u16 *)&data_ind[12];
++      hdr.dest.pan_id = cpu_to_le16(get_unaligned_le16(&data_ind[12]));
+       dev_dbg(&priv->spi->dev, "dstPanId: %#06x\n", hdr.dest.pan_id);
+       memcpy(&hdr.dest.extended_addr, &data_ind[14], 8);
+@@ -1969,7 +1968,7 @@ static int ca8210_skb_tx(
+       status =  mcps_data_request(
+               header.source.mode,
+               header.dest.mode,
+-              header.dest.pan_id,
++              le16_to_cpu(header.dest.pan_id),
+               (union macaddr *)&header.dest.extended_addr,
+               skb->len - mac_len,
+               &skb->data[mac_len],
+-- 
+2.39.5
+
diff --git a/queue-5.4/ip-fib_rules-fetch-net-from-fib_rule-in-fib-46-_rule.patch b/queue-5.4/ip-fib_rules-fetch-net-from-fib_rule-in-fib-46-_rule.patch
new file mode 100644 (file)
index 0000000..373557e
--- /dev/null
@@ -0,0 +1,61 @@
+From 6031837a5a99cbe20f657de9b90860b2ff88640c Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 7 Feb 2025 16:24:58 +0900
+Subject: ip: fib_rules: Fetch net from fib_rule in fib[46]_rule_configure().
+
+From: Kuniyuki Iwashima <kuniyu@amazon.com>
+
+[ Upstream commit 5a1ccffd30a08f5a2428cd5fbb3ab03e8eb6c66d ]
+
+The following patch will not set skb->sk from VRF path.
+
+Let's fetch net from fib_rule->fr_net instead of sock_net(skb->sk)
+in fib[46]_rule_configure().
+
+Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com>
+Reviewed-by: Eric Dumazet <edumazet@google.com>
+Reviewed-by: Ido Schimmel <idosch@nvidia.com>
+Tested-by: Ido Schimmel <idosch@nvidia.com>
+Link: https://patch.msgid.link/20250207072502.87775-5-kuniyu@amazon.com
+Signed-off-by: Jakub Kicinski <kuba@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ net/ipv4/fib_rules.c  | 4 ++--
+ net/ipv6/fib6_rules.c | 4 ++--
+ 2 files changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/net/ipv4/fib_rules.c b/net/ipv4/fib_rules.c
+index e9a3cc9e98dfa..1617ea18fae3a 100644
+--- a/net/ipv4/fib_rules.c
++++ b/net/ipv4/fib_rules.c
+@@ -220,9 +220,9 @@ static int fib4_rule_configure(struct fib_rule *rule, struct sk_buff *skb,
+                              struct nlattr **tb,
+                              struct netlink_ext_ack *extack)
+ {
+-      struct net *net = sock_net(skb->sk);
++      struct fib4_rule *rule4 = (struct fib4_rule *)rule;
++      struct net *net = rule->fr_net;
+       int err = -EINVAL;
+-      struct fib4_rule *rule4 = (struct fib4_rule *) rule;
+       if (frh->tos & ~IPTOS_TOS_MASK) {
+               NL_SET_ERR_MSG(extack, "Invalid tos");
+diff --git a/net/ipv6/fib6_rules.c b/net/ipv6/fib6_rules.c
+index 3cf9dc2231036..acb8610c9a9df 100644
+--- a/net/ipv6/fib6_rules.c
++++ b/net/ipv6/fib6_rules.c
+@@ -344,9 +344,9 @@ static int fib6_rule_configure(struct fib_rule *rule, struct sk_buff *skb,
+                              struct nlattr **tb,
+                              struct netlink_ext_ack *extack)
+ {
++      struct fib6_rule *rule6 = (struct fib6_rule *)rule;
++      struct net *net = rule->fr_net;
+       int err = -EINVAL;
+-      struct net *net = sock_net(skb->sk);
+-      struct fib6_rule *rule6 = (struct fib6_rule *) rule;
+       if (rule->action == FR_ACT_TO_TBL && !rule->l3mdev) {
+               if (rule->table == RT6_TABLE_UNSPEC) {
+-- 
+2.39.5
+
diff --git a/queue-5.4/kbuild-fix-argument-parsing-in-scripts-config.patch b/queue-5.4/kbuild-fix-argument-parsing-in-scripts-config.patch
new file mode 100644 (file)
index 0000000..4708eed
--- /dev/null
@@ -0,0 +1,82 @@
+From 35bb8e467bea976d77026e178260717d61b186e2 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sat, 1 Mar 2025 17:21:37 -0500
+Subject: kbuild: fix argument parsing in scripts/config
+
+From: Seyediman Seyedarab <imandevel@gmail.com>
+
+[ Upstream commit f757f6011c92b5a01db742c39149bed9e526478f ]
+
+The script previously assumed --file was always the first argument,
+which caused issues when it appeared later. This patch updates the
+parsing logic to scan all arguments to find --file, sets the config
+file correctly, and resets the argument list with the remaining
+commands.
+
+It also fixes --refresh to respect --file by passing KCONFIG_CONFIG=$FN
+to make oldconfig.
+
+Signed-off-by: Seyediman Seyedarab <imandevel@gmail.com>
+Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ scripts/config | 26 ++++++++++++++++----------
+ 1 file changed, 16 insertions(+), 10 deletions(-)
+
+diff --git a/scripts/config b/scripts/config
+index 8c8d7c3d7accc..330bef88fd5ef 100755
+--- a/scripts/config
++++ b/scripts/config
+@@ -32,6 +32,7 @@ commands:
+                              Disable option directly after other option
+       --module-after|-M beforeopt option
+                              Turn option into module directly after other option
++      --refresh            Refresh the config using old settings
+       commands can be repeated multiple times
+@@ -124,16 +125,22 @@ undef_var() {
+       txt_delete "^# $name is not set" "$FN"
+ }
+-if [ "$1" = "--file" ]; then
+-      FN="$2"
+-      if [ "$FN" = "" ] ; then
+-              usage
++FN=.config
++CMDS=()
++while [[ $# -gt 0 ]]; do
++      if [ "$1" = "--file" ]; then
++              if [ "$2" = "" ]; then
++                      usage
++              fi
++              FN="$2"
++              shift 2
++      else
++              CMDS+=("$1")
++              shift
+       fi
+-      shift 2
+-else
+-      FN=.config
+-fi
++done
++set -- "${CMDS[@]}"
+ if [ "$1" = "" ] ; then
+       usage
+ fi
+@@ -217,9 +224,8 @@ while [ "$1" != "" ] ; do
+               set_var "${CONFIG_}$B" "${CONFIG_}$B=m" "${CONFIG_}$A"
+               ;;
+-      # undocumented because it ignores --file (fixme)
+       --refresh)
+-              yes "" | make oldconfig
++              yes "" | make oldconfig KCONFIG_CONFIG=$FN
+               ;;
+       *)
+-- 
+2.39.5
+
diff --git a/queue-5.4/kconfig-merge_config-use-an-empty-file-as-initfile.patch b/queue-5.4/kconfig-merge_config-use-an-empty-file-as-initfile.patch
new file mode 100644 (file)
index 0000000..1aa3842
--- /dev/null
@@ -0,0 +1,48 @@
+From 5d0f43e8cc1f4b9eccb32efee1d82b18520e91b1 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 28 Mar 2025 14:28:37 +0000
+Subject: kconfig: merge_config: use an empty file as initfile
+
+From: Daniel Gomez <da.gomez@samsung.com>
+
+[ Upstream commit a26fe287eed112b4e21e854f173c8918a6a8596d ]
+
+The scripts/kconfig/merge_config.sh script requires an existing
+$INITFILE (or the $1 argument) as a base file for merging Kconfig
+fragments. However, an empty $INITFILE can serve as an initial starting
+point, later referenced by the KCONFIG_ALLCONFIG Makefile variable
+if -m is not used. This variable can point to any configuration file
+containing preset config symbols (the merged output) as stated in
+Documentation/kbuild/kconfig.rst. When -m is used $INITFILE will
+contain just the merge output requiring the user to run make (i.e.
+KCONFIG_ALLCONFIG=<$INITFILE> make <allnoconfig/alldefconfig> or make
+olddefconfig).
+
+Instead of failing when `$INITFILE` is missing, create an empty file and
+use it as the starting point for merges.
+
+Signed-off-by: Daniel Gomez <da.gomez@samsung.com>
+Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ scripts/kconfig/merge_config.sh | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/scripts/kconfig/merge_config.sh b/scripts/kconfig/merge_config.sh
+index d7d5c58b8b6aa..557f37f481fdf 100755
+--- a/scripts/kconfig/merge_config.sh
++++ b/scripts/kconfig/merge_config.sh
+@@ -98,8 +98,8 @@ INITFILE=$1
+ shift;
+ if [ ! -r "$INITFILE" ]; then
+-      echo "The base file '$INITFILE' does not exist.  Exit." >&2
+-      exit 1
++      echo "The base file '$INITFILE' does not exist. Creating one..." >&2
++      touch "$INITFILE"
+ fi
+ MERGE_LIST=$*
+-- 
+2.39.5
+
diff --git a/queue-5.4/libnvdimm-labels-fix-divide-error-in-nd_label_data_i.patch b/queue-5.4/libnvdimm-labels-fix-divide-error-in-nd_label_data_i.patch
new file mode 100644 (file)
index 0000000..efb51d9
--- /dev/null
@@ -0,0 +1,64 @@
+From 887fe30605b0d5c1796bddf86f2a02cbe4c848d6 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 20 Mar 2025 12:22:22 +0100
+Subject: libnvdimm/labels: Fix divide error in nd_label_data_init()
+
+From: Robert Richter <rrichter@amd.com>
+
+[ Upstream commit ef1d3455bbc1922f94a91ed58d3d7db440652959 ]
+
+If a faulty CXL memory device returns a broken zero LSA size in its
+memory device information (Identify Memory Device (Opcode 4000h), CXL
+spec. 3.1, 8.2.9.9.1.1), a divide error occurs in the libnvdimm
+driver:
+
+ Oops: divide error: 0000 [#1] PREEMPT SMP NOPTI
+ RIP: 0010:nd_label_data_init+0x10e/0x800 [libnvdimm]
+
+Code and flow:
+
+1) CXL Command 4000h returns LSA size = 0
+2) config_size is assigned to zero LSA size (CXL pmem driver):
+
+drivers/cxl/pmem.c:             .config_size = mds->lsa_size,
+
+3) max_xfer is set to zero (nvdimm driver):
+
+drivers/nvdimm/label.c: max_xfer = min_t(size_t, ndd->nsarea.max_xfer, config_size);
+
+4) A subsequent DIV_ROUND_UP() causes a division by zero:
+
+drivers/nvdimm/label.c: /* Make our initial read size a multiple of max_xfer size */
+drivers/nvdimm/label.c: read_size = min(DIV_ROUND_UP(read_size, max_xfer) * max_xfer,
+drivers/nvdimm/label.c-                 config_size);
+
+Fix this by checking the config size parameter by extending an
+existing check.
+
+Signed-off-by: Robert Richter <rrichter@amd.com>
+Reviewed-by: Pankaj Gupta <pankaj.gupta@amd.com>
+Reviewed-by: Ira Weiny <ira.weiny@intel.com>
+Link: https://patch.msgid.link/20250320112223.608320-1-rrichter@amd.com
+Signed-off-by: Ira Weiny <ira.weiny@intel.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/nvdimm/label.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/nvdimm/label.c b/drivers/nvdimm/label.c
+index 9251441fd8a35..5251058adc4d1 100644
+--- a/drivers/nvdimm/label.c
++++ b/drivers/nvdimm/label.c
+@@ -421,7 +421,8 @@ int nd_label_data_init(struct nvdimm_drvdata *ndd)
+       if (ndd->data)
+               return 0;
+-      if (ndd->nsarea.status || ndd->nsarea.max_xfer == 0) {
++      if (ndd->nsarea.status || ndd->nsarea.max_xfer == 0 ||
++          ndd->nsarea.config_size == 0) {
+               dev_dbg(ndd->dev, "failed to init config data area: (%u:%u)\n",
+                       ndd->nsarea.max_xfer, ndd->nsarea.config_size);
+               return -ENXIO;
+-- 
+2.39.5
+
diff --git a/queue-5.4/mailbox-use-error-ret-code-of-of_parse_phandle_with_.patch b/queue-5.4/mailbox-use-error-ret-code-of-of_parse_phandle_with_.patch
new file mode 100644 (file)
index 0000000..61de172
--- /dev/null
@@ -0,0 +1,45 @@
+From bf3656bf67d1f8af37d25cf59d9dc27841d67417 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 24 Feb 2025 08:27:13 +0000
+Subject: mailbox: use error ret code of of_parse_phandle_with_args()
+
+From: Tudor Ambarus <tudor.ambarus@linaro.org>
+
+[ Upstream commit 24fdd5074b205cfb0ef4cd0751a2d03031455929 ]
+
+In case of error, of_parse_phandle_with_args() returns -EINVAL when the
+passed index is negative, or -ENOENT when the index is for an empty
+phandle. The mailbox core overwrote the error return code with a less
+precise -ENODEV. Use the error returned code from
+of_parse_phandle_with_args().
+
+Signed-off-by: Tudor Ambarus <tudor.ambarus@linaro.org>
+Signed-off-by: Jassi Brar <jassisinghbrar@gmail.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/mailbox/mailbox.c | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/mailbox/mailbox.c b/drivers/mailbox/mailbox.c
+index 4229b9b5da98f..6f54501dc7762 100644
+--- a/drivers/mailbox/mailbox.c
++++ b/drivers/mailbox/mailbox.c
+@@ -350,11 +350,12 @@ struct mbox_chan *mbox_request_channel(struct mbox_client *cl, int index)
+       mutex_lock(&con_mutex);
+-      if (of_parse_phandle_with_args(dev->of_node, "mboxes",
+-                                     "#mbox-cells", index, &spec)) {
++      ret = of_parse_phandle_with_args(dev->of_node, "mboxes", "#mbox-cells",
++                                       index, &spec);
++      if (ret) {
+               dev_dbg(dev, "%s: can't parse \"mboxes\" property\n", __func__);
+               mutex_unlock(&con_mutex);
+-              return ERR_PTR(-ENODEV);
++              return ERR_PTR(ret);
+       }
+       chan = ERR_PTR(-EPROBE_DEFER);
+-- 
+2.39.5
+
diff --git a/queue-5.4/media-c8sectpfe-call-of_node_put-i2c_bus-only-once-i.patch b/queue-5.4/media-c8sectpfe-call-of_node_put-i2c_bus-only-once-i.patch
new file mode 100644 (file)
index 0000000..0215b57
--- /dev/null
@@ -0,0 +1,45 @@
+From 4f986786cb58f55b9623c8581ce56462bca99167 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 4 Oct 2024 15:50:15 +0200
+Subject: media: c8sectpfe: Call of_node_put(i2c_bus) only once in
+ c8sectpfe_probe()
+
+From: Markus Elfring <elfring@users.sourceforge.net>
+
+[ Upstream commit b773530a34df0687020520015057075f8b7b4ac4 ]
+
+An of_node_put(i2c_bus) call was immediately used after a pointer check
+for an of_find_i2c_adapter_by_node() call in this function implementation.
+Thus call such a function only once instead directly before the check.
+
+This issue was transformed by using the Coccinelle software.
+
+Signed-off-by: Markus Elfring <elfring@users.sourceforge.net>
+Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/media/platform/sti/c8sectpfe/c8sectpfe-core.c | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+diff --git a/drivers/media/platform/sti/c8sectpfe/c8sectpfe-core.c b/drivers/media/platform/sti/c8sectpfe/c8sectpfe-core.c
+index 69070b7068318..8229fbb88a8db 100644
+--- a/drivers/media/platform/sti/c8sectpfe/c8sectpfe-core.c
++++ b/drivers/media/platform/sti/c8sectpfe/c8sectpfe-core.c
+@@ -813,13 +813,12 @@ static int c8sectpfe_probe(struct platform_device *pdev)
+               }
+               tsin->i2c_adapter =
+                       of_find_i2c_adapter_by_node(i2c_bus);
++              of_node_put(i2c_bus);
+               if (!tsin->i2c_adapter) {
+                       dev_err(&pdev->dev, "No i2c adapter found\n");
+-                      of_node_put(i2c_bus);
+                       ret = -ENODEV;
+                       goto err_clk_disable;
+               }
+-              of_node_put(i2c_bus);
+               tsin->rst_gpio = of_get_named_gpio(child, "reset-gpios", 0);
+-- 
+2.39.5
+
diff --git a/queue-5.4/media-cx231xx-set-device_caps-for-417.patch b/queue-5.4/media-cx231xx-set-device_caps-for-417.patch
new file mode 100644 (file)
index 0000000..6d59204
--- /dev/null
@@ -0,0 +1,40 @@
+From b18dcbae8df217149a64e385e9d6d527ad4fce5b Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 24 Feb 2025 14:13:24 +0100
+Subject: media: cx231xx: set device_caps for 417
+
+From: Hans Verkuil <hverkuil@xs4all.nl>
+
+[ Upstream commit a79efc44b51432490538a55b9753a721f7d3ea42 ]
+
+The video_device for the MPEG encoder did not set device_caps.
+
+Add this, otherwise the video device can't be registered (you get a
+WARN_ON instead).
+
+Not seen before since currently 417 support is disabled, but I found
+this while experimenting with it.
+
+Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
+Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/media/usb/cx231xx/cx231xx-417.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/drivers/media/usb/cx231xx/cx231xx-417.c b/drivers/media/usb/cx231xx/cx231xx-417.c
+index 6d218a0369661..a9d080823f10a 100644
+--- a/drivers/media/usb/cx231xx/cx231xx-417.c
++++ b/drivers/media/usb/cx231xx/cx231xx-417.c
+@@ -1966,6 +1966,8 @@ static void cx231xx_video_dev_init(
+       vfd->lock = &dev->lock;
+       vfd->release = video_device_release_empty;
+       vfd->ctrl_handler = &dev->mpeg_ctrl_handler.hdl;
++      vfd->device_caps = V4L2_CAP_READWRITE | V4L2_CAP_STREAMING |
++                         V4L2_CAP_VIDEO_CAPTURE;
+       video_set_drvdata(vfd, dev);
+       if (dev->tuner_type == TUNER_ABSENT) {
+               v4l2_disable_ioctl(vfd, VIDIOC_G_FREQUENCY);
+-- 
+2.39.5
+
diff --git a/queue-5.4/mips-pm-cps-use-per-cpu-variables-as-per-cpu-not-per.patch b/queue-5.4/mips-pm-cps-use-per-cpu-variables-as-per-cpu-not-per.patch
new file mode 100644 (file)
index 0000000..6f8cf4f
--- /dev/null
@@ -0,0 +1,128 @@
+From 132d487f2b70fb5ef7436947a8a6ad68db50c578 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 29 Jan 2025 13:32:48 +0100
+Subject: MIPS: pm-cps: Use per-CPU variables as per-CPU, not per-core
+
+From: Paul Burton <paulburton@kernel.org>
+
+[ Upstream commit 00a134fc2bb4a5f8fada58cf7ff4259149691d64 ]
+
+The pm-cps code has up until now used per-CPU variables indexed by core,
+rather than CPU number, in order to share data amongst sibling CPUs (ie.
+VPs/threads in a core). This works fine for single cluster systems, but
+with multi-cluster systems a core number is no longer unique in the
+system, leading to sharing between CPUs that are not actually siblings.
+
+Avoid this issue by using per-CPU variables as they are more generally
+used - ie. access them using CPU numbers rather than core numbers.
+Sharing between siblings is then accomplished by:
+ - Assigning the same pointer to entries for each sibling CPU for the
+   nc_asm_enter & ready_count variables, which allow this by virtue of
+   being per-CPU pointers.
+
+ - Indexing by the first CPU set in a CPUs cpu_sibling_map in the case
+   of pm_barrier, for which we can't use the previous approach because
+   the per-CPU variable is not a pointer.
+
+Signed-off-by: Paul Burton <paulburton@kernel.org>
+Signed-off-by: Dragan Mladjenovic <dragan.mladjenovic@syrmia.com>
+Signed-off-by: Aleksandar Rikalo <arikalo@gmail.com>
+Tested-by: Serge Semin <fancer.lancer@gmail.com>
+Tested-by: Gregory CLEMENT <gregory.clement@bootlin.com>
+Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/mips/kernel/pm-cps.c | 30 +++++++++++++++++-------------
+ 1 file changed, 17 insertions(+), 13 deletions(-)
+
+diff --git a/arch/mips/kernel/pm-cps.c b/arch/mips/kernel/pm-cps.c
+index a26f40db15d00..cb09536fb986b 100644
+--- a/arch/mips/kernel/pm-cps.c
++++ b/arch/mips/kernel/pm-cps.c
+@@ -56,10 +56,7 @@ static DEFINE_PER_CPU_ALIGNED(u32*, ready_count);
+ /* Indicates online CPUs coupled with the current CPU */
+ static DEFINE_PER_CPU_ALIGNED(cpumask_t, online_coupled);
+-/*
+- * Used to synchronize entry to deep idle states. Actually per-core rather
+- * than per-CPU.
+- */
++/* Used to synchronize entry to deep idle states */
+ static DEFINE_PER_CPU_ALIGNED(atomic_t, pm_barrier);
+ /* Saved CPU state across the CPS_PM_POWER_GATED state */
+@@ -118,9 +115,10 @@ int cps_pm_enter_state(enum cps_pm_state state)
+       cps_nc_entry_fn entry;
+       struct core_boot_config *core_cfg;
+       struct vpe_boot_config *vpe_cfg;
++      atomic_t *barrier;
+       /* Check that there is an entry function for this state */
+-      entry = per_cpu(nc_asm_enter, core)[state];
++      entry = per_cpu(nc_asm_enter, cpu)[state];
+       if (!entry)
+               return -EINVAL;
+@@ -156,7 +154,7 @@ int cps_pm_enter_state(enum cps_pm_state state)
+       smp_mb__after_atomic();
+       /* Create a non-coherent mapping of the core ready_count */
+-      core_ready_count = per_cpu(ready_count, core);
++      core_ready_count = per_cpu(ready_count, cpu);
+       nc_addr = kmap_noncoherent(virt_to_page(core_ready_count),
+                                  (unsigned long)core_ready_count);
+       nc_addr += ((unsigned long)core_ready_count & ~PAGE_MASK);
+@@ -164,7 +162,8 @@ int cps_pm_enter_state(enum cps_pm_state state)
+       /* Ensure ready_count is zero-initialised before the assembly runs */
+       WRITE_ONCE(*nc_core_ready_count, 0);
+-      coupled_barrier(&per_cpu(pm_barrier, core), online);
++      barrier = &per_cpu(pm_barrier, cpumask_first(&cpu_sibling_map[cpu]));
++      coupled_barrier(barrier, online);
+       /* Run the generated entry code */
+       left = entry(online, nc_core_ready_count);
+@@ -635,12 +634,14 @@ static void *cps_gen_entry_code(unsigned cpu, enum cps_pm_state state)
+ static int cps_pm_online_cpu(unsigned int cpu)
+ {
+-      enum cps_pm_state state;
+-      unsigned core = cpu_core(&cpu_data[cpu]);
++      unsigned int sibling, core;
+       void *entry_fn, *core_rc;
++      enum cps_pm_state state;
++
++      core = cpu_core(&cpu_data[cpu]);
+       for (state = CPS_PM_NC_WAIT; state < CPS_PM_STATE_COUNT; state++) {
+-              if (per_cpu(nc_asm_enter, core)[state])
++              if (per_cpu(nc_asm_enter, cpu)[state])
+                       continue;
+               if (!test_bit(state, state_support))
+                       continue;
+@@ -652,16 +653,19 @@ static int cps_pm_online_cpu(unsigned int cpu)
+                       clear_bit(state, state_support);
+               }
+-              per_cpu(nc_asm_enter, core)[state] = entry_fn;
++              for_each_cpu(sibling, &cpu_sibling_map[cpu])
++                      per_cpu(nc_asm_enter, sibling)[state] = entry_fn;
+       }
+-      if (!per_cpu(ready_count, core)) {
++      if (!per_cpu(ready_count, cpu)) {
+               core_rc = kmalloc(sizeof(u32), GFP_KERNEL);
+               if (!core_rc) {
+                       pr_err("Failed allocate core %u ready_count\n", core);
+                       return -ENOMEM;
+               }
+-              per_cpu(ready_count, core) = core_rc;
++
++              for_each_cpu(sibling, &cpu_sibling_map[cpu])
++                      per_cpu(ready_count, sibling) = core_rc;
+       }
+       return 0;
+-- 
+2.39.5
+
diff --git a/queue-5.4/mips-use-arch-specific-syscall-name-match-function.patch b/queue-5.4/mips-use-arch-specific-syscall-name-match-function.patch
new file mode 100644 (file)
index 0000000..3ef3e4e
--- /dev/null
@@ -0,0 +1,55 @@
+From 92ddd6232d4a5973090070ab59bca59c7cdbbe76 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 9 Jun 2020 10:54:35 +0800
+Subject: MIPS: Use arch specific syscall name match function
+
+From: Bibo Mao <maobibo@loongson.cn>
+
+[ Upstream commit 756276ce78d5624dc814f9d99f7d16c8fd51076e ]
+
+On MIPS system, most of the syscall function name begin with prefix
+sys_. Some syscalls are special such as clone/fork, function name of
+these begin with __sys_. Since scratch registers need be saved in
+stack when these system calls happens.
+
+With ftrace system call method, system call functions are declared with
+SYSCALL_DEFINEx, metadata of the system call symbol name begins with
+sys_. Here mips specific function arch_syscall_match_sym_name is used to
+compare function name between sys_call_table[] and metadata of syscall
+symbol.
+
+Signed-off-by: Bibo Mao <maobibo@loongson.cn>
+Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/mips/include/asm/ftrace.h | 16 ++++++++++++++++
+ 1 file changed, 16 insertions(+)
+
+diff --git a/arch/mips/include/asm/ftrace.h b/arch/mips/include/asm/ftrace.h
+index b463f2aa5a613..7acbe701afd69 100644
+--- a/arch/mips/include/asm/ftrace.h
++++ b/arch/mips/include/asm/ftrace.h
+@@ -87,4 +87,20 @@ struct dyn_arch_ftrace {
+ #endif /*  CONFIG_DYNAMIC_FTRACE */
+ #endif /* __ASSEMBLY__ */
+ #endif /* CONFIG_FUNCTION_TRACER */
++
++#ifdef CONFIG_FTRACE_SYSCALLS
++#ifndef __ASSEMBLY__
++/*
++ * Some syscall entry functions on mips start with "__sys_" (fork and clone,
++ * for instance). We should also match the sys_ variant with those.
++ */
++#define ARCH_HAS_SYSCALL_MATCH_SYM_NAME
++static inline bool arch_syscall_match_sym_name(const char *sym,
++                                             const char *name)
++{
++      return !strcmp(sym, name) ||
++              (!strncmp(sym, "__sys_", 6) && !strcmp(sym + 6, name + 4));
++}
++#endif /* __ASSEMBLY__ */
++#endif /* CONFIG_FTRACE_SYSCALLS */
+ #endif /* _ASM_MIPS_FTRACE_H */
+-- 
+2.39.5
+
diff --git a/queue-5.4/mmc-host-wait-for-vdd-to-settle-on-card-power-off.patch b/queue-5.4/mmc-host-wait-for-vdd-to-settle-on-card-power-off.patch
new file mode 100644 (file)
index 0000000..8bea406
--- /dev/null
@@ -0,0 +1,46 @@
+From a94588988ebe450aa82ed236215894fcd1a2d1cc Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 14 Mar 2025 14:50:21 -0500
+Subject: mmc: host: Wait for Vdd to settle on card power off
+
+From: Erick Shepherd <erick.shepherd@ni.com>
+
+[ Upstream commit 31e75ed964582257f59156ce6a42860e1ae4cc39 ]
+
+The SD spec version 6.0 section 6.4.1.5 requires that Vdd must be
+lowered to less than 0.5V for a minimum of 1 ms when powering off a
+card. Increase wait to 15 ms so that voltage has time to drain down
+to 0.5V and cards can power off correctly. Issues with voltage drain
+time were only observed on Apollo Lake and Bay Trail host controllers
+so this fix is limited to those devices.
+
+Signed-off-by: Erick Shepherd <erick.shepherd@ni.com>
+Acked-by: Adrian Hunter <adrian.hunter@intel.com>
+Link: https://lore.kernel.org/r/20250314195021.1588090-1-erick.shepherd@ni.com
+Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/mmc/host/sdhci-pci-core.c | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/mmc/host/sdhci-pci-core.c b/drivers/mmc/host/sdhci-pci-core.c
+index 390caef1bdabc..22978057b94a1 100644
+--- a/drivers/mmc/host/sdhci-pci-core.c
++++ b/drivers/mmc/host/sdhci-pci-core.c
+@@ -669,8 +669,12 @@ static void sdhci_intel_set_power(struct sdhci_host *host, unsigned char mode,
+       sdhci_set_power(host, mode, vdd);
+-      if (mode == MMC_POWER_OFF)
++      if (mode == MMC_POWER_OFF) {
++              if (slot->chip->pdev->device == PCI_DEVICE_ID_INTEL_APL_SD ||
++                  slot->chip->pdev->device == PCI_DEVICE_ID_INTEL_BYT_SD)
++                      usleep_range(15000, 17500);
+               return;
++      }
+       /*
+        * Bus power might not enable after D3 -> D0 transition due to the
+-- 
+2.39.5
+
diff --git a/queue-5.4/mmc-sdhci-disable-sd-card-clock-before-changing-para.patch b/queue-5.4/mmc-sdhci-disable-sd-card-clock-before-changing-para.patch
new file mode 100644 (file)
index 0000000..ff13af0
--- /dev/null
@@ -0,0 +1,54 @@
+From 50576bda9c9063205821f2f432e5860e8a6c4142 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 11 Feb 2025 15:46:45 -0600
+Subject: mmc: sdhci: Disable SD card clock before changing parameters
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Erick Shepherd <erick.shepherd@ni.com>
+
+[ Upstream commit fb3bbc46c94f261b6156ee863c1b06c84cf157dc ]
+
+Per the SD Host Controller Simplified Specification v4.20 Â§3.2.3, change
+the SD card clock parameters only after first disabling the external card
+clock. Doing this fixes a spurious clock pulse on Baytrail and Apollo Lake
+SD controllers which otherwise breaks voltage switching with a specific
+Swissbit SD card.
+
+Signed-off-by: Kyle Roeschley <kyle.roeschley@ni.com>
+Signed-off-by: Brad Mouring <brad.mouring@ni.com>
+Signed-off-by: Erick Shepherd <erick.shepherd@ni.com>
+Acked-by: Adrian Hunter <adrian.hunter@intel.com>
+Link: https://lore.kernel.org/r/20250211214645.469279-1-erick.shepherd@ni.com
+Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/mmc/host/sdhci.c | 9 +++++++--
+ 1 file changed, 7 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
+index 4004e4e7b6226..f8d0a0e49abec 100644
+--- a/drivers/mmc/host/sdhci.c
++++ b/drivers/mmc/host/sdhci.c
+@@ -1708,10 +1708,15 @@ void sdhci_set_clock(struct sdhci_host *host, unsigned int clock)
+       host->mmc->actual_clock = 0;
+-      sdhci_writew(host, 0, SDHCI_CLOCK_CONTROL);
++      clk = sdhci_readw(host, SDHCI_CLOCK_CONTROL);
++      if (clk & SDHCI_CLOCK_CARD_EN)
++              sdhci_writew(host, clk & ~SDHCI_CLOCK_CARD_EN,
++                      SDHCI_CLOCK_CONTROL);
+-      if (clock == 0)
++      if (clock == 0) {
++              sdhci_writew(host, 0, SDHCI_CLOCK_CONTROL);
+               return;
++      }
+       clk = sdhci_calc_clk(host, clock, &host->mmc->actual_clock);
+       sdhci_enable_clk(host, clk);
+-- 
+2.39.5
+
diff --git a/queue-5.4/net-mlx4_core-avoid-impossible-mlx4_db_alloc-order-v.patch b/queue-5.4/net-mlx4_core-avoid-impossible-mlx4_db_alloc-order-v.patch
new file mode 100644 (file)
index 0000000..4bb577c
--- /dev/null
@@ -0,0 +1,78 @@
+From db9d46445fc71fc0a264f5d880720d5e9a8013a5 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 10 Feb 2025 09:45:05 -0800
+Subject: net/mlx4_core: Avoid impossible mlx4_db_alloc() order value
+
+From: Kees Cook <kees@kernel.org>
+
+[ Upstream commit 4a6f18f28627e121bd1f74b5fcc9f945d6dbeb1e ]
+
+GCC can see that the value range for "order" is capped, but this leads
+it to consider that it might be negative, leading to a false positive
+warning (with GCC 15 with -Warray-bounds -fdiagnostics-details):
+
+../drivers/net/ethernet/mellanox/mlx4/alloc.c:691:47: error: array subscript -1 is below array bounds of 'long unsigned int *[2]' [-Werror=array-bounds=]
+  691 |                 i = find_first_bit(pgdir->bits[o], MLX4_DB_PER_PAGE >> o);
+      |                                    ~~~~~~~~~~~^~~
+  'mlx4_alloc_db_from_pgdir': events 1-2
+  691 |                 i = find_first_bit(pgdir->bits[o], MLX4_DB_PER_PAGE >> o);                        |                     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+      |                     |                         |                                                   |                     |                         (2) out of array bounds here
+      |                     (1) when the condition is evaluated to true                             In file included from ../drivers/net/ethernet/mellanox/mlx4/mlx4.h:53,
+                 from ../drivers/net/ethernet/mellanox/mlx4/alloc.c:42:
+../include/linux/mlx4/device.h:664:33: note: while referencing 'bits'
+  664 |         unsigned long          *bits[2];
+      |                                 ^~~~
+
+Switch the argument to unsigned int, which removes the compiler needing
+to consider negative values.
+
+Signed-off-by: Kees Cook <kees@kernel.org>
+Link: https://patch.msgid.link/20250210174504.work.075-kees@kernel.org
+Signed-off-by: Jakub Kicinski <kuba@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/ethernet/mellanox/mlx4/alloc.c | 6 +++---
+ include/linux/mlx4/device.h                | 2 +-
+ 2 files changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/net/ethernet/mellanox/mlx4/alloc.c b/drivers/net/ethernet/mellanox/mlx4/alloc.c
+index b330020dc0d67..f2bded847e61d 100644
+--- a/drivers/net/ethernet/mellanox/mlx4/alloc.c
++++ b/drivers/net/ethernet/mellanox/mlx4/alloc.c
+@@ -682,9 +682,9 @@ static struct mlx4_db_pgdir *mlx4_alloc_db_pgdir(struct device *dma_device)
+ }
+ static int mlx4_alloc_db_from_pgdir(struct mlx4_db_pgdir *pgdir,
+-                                  struct mlx4_db *db, int order)
++                                  struct mlx4_db *db, unsigned int order)
+ {
+-      int o;
++      unsigned int o;
+       int i;
+       for (o = order; o <= 1; ++o) {
+@@ -712,7 +712,7 @@ static int mlx4_alloc_db_from_pgdir(struct mlx4_db_pgdir *pgdir,
+       return 0;
+ }
+-int mlx4_db_alloc(struct mlx4_dev *dev, struct mlx4_db *db, int order)
++int mlx4_db_alloc(struct mlx4_dev *dev, struct mlx4_db *db, unsigned int order)
+ {
+       struct mlx4_priv *priv = mlx4_priv(dev);
+       struct mlx4_db_pgdir *pgdir;
+diff --git a/include/linux/mlx4/device.h b/include/linux/mlx4/device.h
+index 35b4e324e17f2..7c399831540d7 100644
+--- a/include/linux/mlx4/device.h
++++ b/include/linux/mlx4/device.h
+@@ -1128,7 +1128,7 @@ int mlx4_write_mtt(struct mlx4_dev *dev, struct mlx4_mtt *mtt,
+ int mlx4_buf_write_mtt(struct mlx4_dev *dev, struct mlx4_mtt *mtt,
+                      struct mlx4_buf *buf);
+-int mlx4_db_alloc(struct mlx4_dev *dev, struct mlx4_db *db, int order);
++int mlx4_db_alloc(struct mlx4_dev *dev, struct mlx4_db *db, unsigned int order);
+ void mlx4_db_free(struct mlx4_dev *dev, struct mlx4_db *db);
+ int mlx4_alloc_hwq_res(struct mlx4_dev *dev, struct mlx4_hwq_resources *wqres,
+-- 
+2.39.5
+
diff --git a/queue-5.4/net-mlx5-apply-rate-limiting-to-high-temperature-war.patch b/queue-5.4/net-mlx5-apply-rate-limiting-to-high-temperature-war.patch
new file mode 100644 (file)
index 0000000..5e5e043
--- /dev/null
@@ -0,0 +1,45 @@
+From 339a41285450209f8ee659bc985c35b94793a020 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 13 Feb 2025 11:46:38 +0200
+Subject: net/mlx5: Apply rate-limiting to high temperature warning
+
+From: Shahar Shitrit <shshitrit@nvidia.com>
+
+[ Upstream commit 9dd3d5d258aceb37bdf09c8b91fa448f58ea81f0 ]
+
+Wrap the high temperature warning in a temperature event with
+a call to net_ratelimit() to prevent flooding the kernel log
+with repeated warning messages when temperature exceeds the
+threshold multiple times within a short duration.
+
+Signed-off-by: Shahar Shitrit <shshitrit@nvidia.com>
+Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
+Reviewed-by: Mateusz Polchlopek <mateusz.polchlopek@intel.com>
+Link: https://patch.msgid.link/20250213094641.226501-2-tariqt@nvidia.com
+Signed-off-by: Jakub Kicinski <kuba@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/ethernet/mellanox/mlx5/core/events.c | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/net/ethernet/mellanox/mlx5/core/events.c b/drivers/net/ethernet/mellanox/mlx5/core/events.c
+index 9d7b0a4cc48a9..5e8db7a6185a4 100644
+--- a/drivers/net/ethernet/mellanox/mlx5/core/events.c
++++ b/drivers/net/ethernet/mellanox/mlx5/core/events.c
+@@ -162,9 +162,10 @@ static int temp_warn(struct notifier_block *nb, unsigned long type, void *data)
+       value_lsb &= 0x1;
+       value_msb = be64_to_cpu(eqe->data.temp_warning.sensor_warning_msb);
+-      mlx5_core_warn(events->dev,
+-                     "High temperature on sensors with bit set %llx %llx",
+-                     value_msb, value_lsb);
++      if (net_ratelimit())
++              mlx5_core_warn(events->dev,
++                             "High temperature on sensors with bit set %llx %llx",
++                             value_msb, value_lsb);
+       return NOTIFY_OK;
+ }
+-- 
+2.39.5
+
diff --git a/queue-5.4/net-mlx5-avoid-report-two-health-errors-on-same-synd.patch b/queue-5.4/net-mlx5-avoid-report-two-health-errors-on-same-synd.patch
new file mode 100644 (file)
index 0000000..7ef179a
--- /dev/null
@@ -0,0 +1,42 @@
+From 839e114a8f02454fafcf11ff270bd6f96aa01f38 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 26 Feb 2025 14:25:40 +0200
+Subject: net/mlx5: Avoid report two health errors on same syndrome
+
+From: Moshe Shemesh <moshe@nvidia.com>
+
+[ Upstream commit b5d7b2f04ebcff740f44ef4d295b3401aeb029f4 ]
+
+In case health counter has not increased for few polling intervals, miss
+counter will reach max misses threshold and health report will be
+triggered for FW health reporter. In case syndrome found on same health
+poll another health report will be triggered.
+
+Avoid two health reports on same syndrome by marking this syndrome as
+already known.
+
+Signed-off-by: Moshe Shemesh <moshe@nvidia.com>
+Reviewed-by: Shahar Shitrit <shshitrit@nvidia.com>
+Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
+Reviewed-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/ethernet/mellanox/mlx5/core/health.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/drivers/net/ethernet/mellanox/mlx5/core/health.c b/drivers/net/ethernet/mellanox/mlx5/core/health.c
+index d4ad0e4192bbe..44e3f8cfecacb 100644
+--- a/drivers/net/ethernet/mellanox/mlx5/core/health.c
++++ b/drivers/net/ethernet/mellanox/mlx5/core/health.c
+@@ -736,6 +736,7 @@ static void poll_health(struct timer_list *t)
+       health->prev = count;
+       if (health->miss_counter == MAX_MISSES) {
+               mlx5_core_err(dev, "device's health compromised - reached miss count\n");
++              health->synd = ioread8(&h->synd);
+               print_health_info(dev);
+               queue_work(health->wq, &health->report_work);
+       }
+-- 
+2.39.5
+
diff --git a/queue-5.4/net-mlx5-extend-ethtool-loopback-selftest-to-support.patch b/queue-5.4/net-mlx5-extend-ethtool-loopback-selftest-to-support.patch
new file mode 100644 (file)
index 0000000..5359ca6
--- /dev/null
@@ -0,0 +1,41 @@
+From 19905ec7943c2327f650db215cc5c084be540de2 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun, 9 Feb 2025 12:17:15 +0200
+Subject: net/mlx5: Extend Ethtool loopback selftest to support non-linear SKB
+
+From: Alexei Lazar <alazar@nvidia.com>
+
+[ Upstream commit 95b9606b15bb3ce1198d28d2393dd0e1f0a5f3e9 ]
+
+Current loopback test validation ignores non-linear SKB case in
+the SKB access, which can lead to failures in scenarios such as
+when HW GRO is enabled.
+Linearize the SKB so both cases will be handled.
+
+Signed-off-by: Alexei Lazar <alazar@nvidia.com>
+Reviewed-by: Dragos Tatulea <dtatulea@nvidia.com>
+Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
+Link: https://patch.msgid.link/20250209101716.112774-15-tariqt@nvidia.com
+Signed-off-by: Jakub Kicinski <kuba@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/ethernet/mellanox/mlx5/core/en_selftest.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_selftest.c b/drivers/net/ethernet/mellanox/mlx5/core/en_selftest.c
+index bbff8d8ded767..abb88a61e4d98 100644
+--- a/drivers/net/ethernet/mellanox/mlx5/core/en_selftest.c
++++ b/drivers/net/ethernet/mellanox/mlx5/core/en_selftest.c
+@@ -189,6 +189,9 @@ mlx5e_test_loopback_validate(struct sk_buff *skb,
+       struct udphdr *udph;
+       struct iphdr *iph;
++      if (skb_linearize(skb))
++              goto out;
++
+       /* We are only going to peek, no need to clone the SKB */
+       if (MLX5E_TEST_PKT_SIZE - ETH_HLEN > skb_headlen(skb))
+               goto out;
+-- 
+2.39.5
+
diff --git a/queue-5.4/net-mlx5-modify-lsb-bitmask-in-temperature-event-to-.patch b/queue-5.4/net-mlx5-modify-lsb-bitmask-in-temperature-event-to-.patch
new file mode 100644 (file)
index 0000000..5451420
--- /dev/null
@@ -0,0 +1,46 @@
+From ecebbafdcd31858d3c09717eb59e8cd468c91625 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 13 Feb 2025 11:46:40 +0200
+Subject: net/mlx5: Modify LSB bitmask in temperature event to include only the
+ first bit
+
+From: Shahar Shitrit <shshitrit@nvidia.com>
+
+[ Upstream commit 633f16d7e07c129a36b882c05379e01ce5bdb542 ]
+
+In the sensor_count field of the MTEWE register, bits 1-62 are
+supported only for unmanaged switches, not for NICs, and bit 63
+is reserved for internal use.
+
+To prevent confusing output that may include set bits that are
+not relevant to NIC sensors, we update the bitmask to retain only
+the first bit, which corresponds to the sensor ASIC.
+
+Signed-off-by: Shahar Shitrit <shshitrit@nvidia.com>
+Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
+Reviewed-by: Mateusz Polchlopek <mateusz.polchlopek@intel.com>
+Link: https://patch.msgid.link/20250213094641.226501-4-tariqt@nvidia.com
+Signed-off-by: Jakub Kicinski <kuba@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/ethernet/mellanox/mlx5/core/events.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/drivers/net/ethernet/mellanox/mlx5/core/events.c b/drivers/net/ethernet/mellanox/mlx5/core/events.c
+index 3ce17c3d7a001..9d7b0a4cc48a9 100644
+--- a/drivers/net/ethernet/mellanox/mlx5/core/events.c
++++ b/drivers/net/ethernet/mellanox/mlx5/core/events.c
+@@ -156,6 +156,10 @@ static int temp_warn(struct notifier_block *nb, unsigned long type, void *data)
+       u64 value_msb;
+       value_lsb = be64_to_cpu(eqe->data.temp_warning.sensor_warning_lsb);
++      /* bit 1-63 are not supported for NICs,
++       * hence read only bit 0 (asic) from lsb.
++       */
++      value_lsb &= 0x1;
+       value_msb = be64_to_cpu(eqe->data.temp_warning.sensor_warning_msb);
+       mlx5_core_warn(events->dev,
+-- 
+2.39.5
+
diff --git a/queue-5.4/net-mlx5e-reduce-rep-rxq-depth-to-256-for-ecpf.patch b/queue-5.4/net-mlx5e-reduce-rep-rxq-depth-to-256-for-ecpf.patch
new file mode 100644 (file)
index 0000000..e78641a
--- /dev/null
@@ -0,0 +1,75 @@
+From 727f689486fd677fdcdd2335e6768f7812f82723 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun, 9 Feb 2025 12:17:08 +0200
+Subject: net/mlx5e: reduce rep rxq depth to 256 for ECPF
+
+From: William Tu <witu@nvidia.com>
+
+[ Upstream commit b9cc8f9d700867aaa77aedddfea85e53d5e5d584 ]
+
+By experiments, a single queue representor netdev consumes kernel
+memory around 2.8MB, and 1.8MB out of the 2.8MB is due to page
+pool for the RXQ. Scaling to a thousand representors consumes 2.8GB,
+which becomes a memory pressure issue for embedded devices such as
+BlueField-2 16GB / BlueField-3 32GB memory.
+
+Since representor netdevs mostly handles miss traffic, and ideally,
+most of the traffic will be offloaded, reduce the default non-uplink
+rep netdev's RXQ default depth from 1024 to 256 if mdev is ecpf eswitch
+manager. This saves around 1MB of memory per regular RQ,
+(1024 - 256) * 2KB, allocated from page pool.
+
+With rxq depth of 256, the netlink page pool tool reports
+$./tools/net/ynl/cli.py --spec Documentation/netlink/specs/netdev.yaml \
+        --dump page-pool-get
+ {'id': 277,
+  'ifindex': 9,
+  'inflight': 128,
+  'inflight-mem': 786432,
+  'napi-id': 775}]
+
+This is due to mtu 1500 + headroom consumes half pages, so 256 rxq
+entries consumes around 128 pages (thus create a page pool with
+size 128), shown above at inflight.
+
+Note that each netdev has multiple types of RQs, including
+Regular RQ, XSK, PTP, Drop, Trap RQ. Since non-uplink representor
+only supports regular rq, this patch only changes the regular RQ's
+default depth.
+
+Signed-off-by: William Tu <witu@nvidia.com>
+Reviewed-by: Bodong Wang <bodong@nvidia.com>
+Reviewed-by: Saeed Mahameed <saeedm@nvidia.com>
+Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
+Reviewed-by: Michal Swiatkowski <michal.swiatkowski@linux.intel.com>
+Link: https://patch.msgid.link/20250209101716.112774-8-tariqt@nvidia.com
+Signed-off-by: Jakub Kicinski <kuba@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/ethernet/mellanox/mlx5/core/en_rep.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_rep.c b/drivers/net/ethernet/mellanox/mlx5/core/en_rep.c
+index 26a9d38d1e2a7..479304afdada2 100644
+--- a/drivers/net/ethernet/mellanox/mlx5/core/en_rep.c
++++ b/drivers/net/ethernet/mellanox/mlx5/core/en_rep.c
+@@ -53,6 +53,7 @@
+ #define MLX5E_REP_PARAMS_DEF_LOG_SQ_SIZE \
+         max(0x7, MLX5E_PARAMS_MINIMUM_LOG_SQ_SIZE)
+ #define MLX5E_REP_PARAMS_DEF_NUM_CHANNELS 1
++#define MLX5E_REP_PARAMS_DEF_LOG_RQ_SIZE 0x8
+ static const char mlx5e_rep_driver_name[] = "mlx5e_rep";
+@@ -1430,6 +1431,8 @@ static void mlx5e_build_rep_params(struct net_device *netdev)
+       /* RQ */
+       mlx5e_build_rq_params(mdev, params);
++      if (!mlx5e_is_uplink_rep(priv) && mlx5_core_is_ecpf(mdev))
++              params->log_rq_mtu_frames = MLX5E_REP_PARAMS_DEF_LOG_RQ_SIZE;
+       /* CQ moderation params */
+       params->rx_dim_enabled = MLX5_CAP_GEN(mdev, cq_moderation);
+-- 
+2.39.5
+
diff --git a/queue-5.4/net-mlx5e-set-the-tx_queue_len-for-pfifo_fast.patch b/queue-5.4/net-mlx5e-set-the-tx_queue_len-for-pfifo_fast.patch
new file mode 100644 (file)
index 0000000..e514ebd
--- /dev/null
@@ -0,0 +1,44 @@
+From a81e14da214cf15ba4e9b19b0c3e35a3b8b149d3 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun, 9 Feb 2025 12:17:09 +0200
+Subject: net/mlx5e: set the tx_queue_len for pfifo_fast
+
+From: William Tu <witu@nvidia.com>
+
+[ Upstream commit a38cc5706fb9f7dc4ee3a443f61de13ce1e410ed ]
+
+By default, the mq netdev creates a pfifo_fast qdisc. On a
+system with 16 core, the pfifo_fast with 3 bands consumes
+16 * 3 * 8 (size of pointer) * 1024 (default tx queue len)
+= 393KB. The patch sets the tx qlen to representor default
+value, 128 (1<<MLX5E_REP_PARAMS_DEF_LOG_SQ_SIZE), which
+consumes 16 * 3 * 8 * 128 = 49KB, saving 344KB for each
+representor at ECPF.
+
+Signed-off-by: William Tu <witu@nvidia.com>
+Reviewed-by: Daniel Jurgens <danielj@nvidia.com>
+Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
+Reviewed-by: Michal Swiatkowski <michal.swiatkowski@linux.intel.com>
+Link: https://patch.msgid.link/20250209101716.112774-9-tariqt@nvidia.com
+Signed-off-by: Jakub Kicinski <kuba@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/ethernet/mellanox/mlx5/core/en_rep.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_rep.c b/drivers/net/ethernet/mellanox/mlx5/core/en_rep.c
+index a40fecfdb10ca..26a9d38d1e2a7 100644
+--- a/drivers/net/ethernet/mellanox/mlx5/core/en_rep.c
++++ b/drivers/net/ethernet/mellanox/mlx5/core/en_rep.c
+@@ -1470,6 +1470,8 @@ static void mlx5e_build_rep_netdev(struct net_device *netdev)
+       }
+       netdev->watchdog_timeo    = 15 * HZ;
++      if (mlx5_core_is_ecpf(mdev))
++              netdev->tx_queue_len = 1 << MLX5E_REP_PARAMS_DEF_LOG_SQ_SIZE;
+       netdev->features       |= NETIF_F_NETNS_LOCAL;
+-- 
+2.39.5
+
diff --git a/queue-5.4/net-pktgen-fix-access-outside-of-user-given-buffer-i.patch b/queue-5.4/net-pktgen-fix-access-outside-of-user-given-buffer-i.patch
new file mode 100644 (file)
index 0000000..6958186
--- /dev/null
@@ -0,0 +1,50 @@
+From 034faf5aac9c5fd625c04d3d8137220e4ee9d4b8 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 19 Feb 2025 09:45:27 +0100
+Subject: net: pktgen: fix access outside of user given buffer in
+ pktgen_thread_write()
+
+From: Peter Seiderer <ps.report@gmx.net>
+
+[ Upstream commit 425e64440ad0a2f03bdaf04be0ae53dededbaa77 ]
+
+Honour the user given buffer size for the strn_len() calls (otherwise
+strn_len() will access memory outside of the user given buffer).
+
+Signed-off-by: Peter Seiderer <ps.report@gmx.net>
+Reviewed-by: Simon Horman <horms@kernel.org>
+Link: https://patch.msgid.link/20250219084527.20488-8-ps.report@gmx.net
+Signed-off-by: Jakub Kicinski <kuba@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ net/core/pktgen.c | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+diff --git a/net/core/pktgen.c b/net/core/pktgen.c
+index e7cde4f097908..4fd66e6466d29 100644
+--- a/net/core/pktgen.c
++++ b/net/core/pktgen.c
+@@ -1770,8 +1770,8 @@ static ssize_t pktgen_thread_write(struct file *file,
+       i = len;
+       /* Read variable name */
+-
+-      len = strn_len(&user_buffer[i], sizeof(name) - 1);
++      max = min(sizeof(name) - 1, count - i);
++      len = strn_len(&user_buffer[i], max);
+       if (len < 0)
+               return len;
+@@ -1801,7 +1801,8 @@ static ssize_t pktgen_thread_write(struct file *file,
+       if (!strcmp(name, "add_device")) {
+               char f[32];
+               memset(f, 0, 32);
+-              len = strn_len(&user_buffer[i], sizeof(f) - 1);
++              max = min(sizeof(f) - 1, count - i);
++              len = strn_len(&user_buffer[i], max);
+               if (len < 0) {
+                       ret = len;
+                       goto out;
+-- 
+2.39.5
+
diff --git a/queue-5.4/net-pktgen-fix-mpls-maximum-labels-list-parsing.patch b/queue-5.4/net-pktgen-fix-mpls-maximum-labels-list-parsing.patch
new file mode 100644 (file)
index 0000000..b469c46
--- /dev/null
@@ -0,0 +1,52 @@
+From b202dc98bd80fc2eab4609c55dd377f302e5759f Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 27 Feb 2025 14:56:00 +0100
+Subject: net: pktgen: fix mpls maximum labels list parsing
+
+From: Peter Seiderer <ps.report@gmx.net>
+
+[ Upstream commit 2b15a0693f70d1e8119743ee89edbfb1271b3ea8 ]
+
+Fix mpls maximum labels list parsing up to MAX_MPLS_LABELS entries (instead
+of up to MAX_MPLS_LABELS - 1).
+
+Addresses the following:
+
+       $ echo "mpls 00000f00,00000f01,00000f02,00000f03,00000f04,00000f05,00000f06,00000f07,00000f08,00000f09,00000f0a,00000f0b,00000f0c,00000f0d,00000f0e,00000f0f" > /proc/net/pktgen/lo\@0
+       -bash: echo: write error: Argument list too long
+
+Signed-off-by: Peter Seiderer <ps.report@gmx.net>
+Reviewed-by: Simon Horman <horms@kernel.org>
+Signed-off-by: Paolo Abeni <pabeni@redhat.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ net/core/pktgen.c | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/net/core/pktgen.c b/net/core/pktgen.c
+index 5e9bd9d80b393..e7cde4f097908 100644
+--- a/net/core/pktgen.c
++++ b/net/core/pktgen.c
+@@ -805,6 +805,10 @@ static ssize_t get_labels(const char __user *buffer, struct pktgen_dev *pkt_dev)
+       pkt_dev->nr_labels = 0;
+       do {
+               __u32 tmp;
++
++              if (n >= MAX_MPLS_LABELS)
++                      return -E2BIG;
++
+               len = hex32_arg(&buffer[i], 8, &tmp);
+               if (len <= 0)
+                       return len;
+@@ -816,8 +820,6 @@ static ssize_t get_labels(const char __user *buffer, struct pktgen_dev *pkt_dev)
+                       return -EFAULT;
+               i++;
+               n++;
+-              if (n >= MAX_MPLS_LABELS)
+-                      return -E2BIG;
+       } while (c == ',');
+       pkt_dev->nr_labels = n;
+-- 
+2.39.5
+
diff --git a/queue-5.4/net-xgene-v2-remove-incorrect-acpi_ptr-annotation.patch b/queue-5.4/net-xgene-v2-remove-incorrect-acpi_ptr-annotation.patch
new file mode 100644 (file)
index 0000000..d24235b
--- /dev/null
@@ -0,0 +1,47 @@
+From 7e9a5d402618b77d62d802c19e92f60464af76bb Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 25 Feb 2025 17:33:33 +0100
+Subject: net: xgene-v2: remove incorrect ACPI_PTR annotation
+
+From: Arnd Bergmann <arnd@arndb.de>
+
+[ Upstream commit 01358e8fe922f716c05d7864ac2213b2440026e7 ]
+
+Building with W=1 shows a warning about xge_acpi_match being unused when
+CONFIG_ACPI is disabled:
+
+drivers/net/ethernet/apm/xgene-v2/main.c:723:36: error: unused variable 'xge_acpi_match' [-Werror,-Wunused-const-variable]
+
+Signed-off-by: Arnd Bergmann <arnd@arndb.de>
+Link: https://patch.msgid.link/20250225163341.4168238-2-arnd@kernel.org
+Signed-off-by: Paolo Abeni <pabeni@redhat.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/ethernet/apm/xgene-v2/main.c | 4 +---
+ 1 file changed, 1 insertion(+), 3 deletions(-)
+
+diff --git a/drivers/net/ethernet/apm/xgene-v2/main.c b/drivers/net/ethernet/apm/xgene-v2/main.c
+index 848be6bf2fd1f..514a121d96aeb 100644
+--- a/drivers/net/ethernet/apm/xgene-v2/main.c
++++ b/drivers/net/ethernet/apm/xgene-v2/main.c
+@@ -9,8 +9,6 @@
+ #include "main.h"
+-static const struct acpi_device_id xge_acpi_match[];
+-
+ static int xge_get_resources(struct xge_pdata *pdata)
+ {
+       struct platform_device *pdev;
+@@ -733,7 +731,7 @@ MODULE_DEVICE_TABLE(acpi, xge_acpi_match);
+ static struct platform_driver xge_driver = {
+       .driver = {
+                  .name = "xgene-enet-v2",
+-                 .acpi_match_table = ACPI_PTR(xge_acpi_match),
++                 .acpi_match_table = xge_acpi_match,
+       },
+       .probe = xge_probe,
+       .remove = xge_remove,
+-- 
+2.39.5
+
diff --git a/queue-5.4/netfilter-conntrack-bound-nf_conntrack-sysctl-writes.patch b/queue-5.4/netfilter-conntrack-bound-nf_conntrack-sysctl-writes.patch
new file mode 100644 (file)
index 0000000..d02c587
--- /dev/null
@@ -0,0 +1,85 @@
+From ed0f4bf155e734c72a0b38765f53325dd64b90d4 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 29 Jan 2025 18:06:30 +0100
+Subject: netfilter: conntrack: Bound nf_conntrack sysctl writes
+
+From: Nicolas Bouchinet <nicolas.bouchinet@ssi.gouv.fr>
+
+[ Upstream commit 8b6861390ffee6b8ed78b9395e3776c16fec6579 ]
+
+nf_conntrack_max and nf_conntrack_expect_max sysctls were authorized to
+be written any negative value, which would then be stored in the
+unsigned int variables nf_conntrack_max and nf_ct_expect_max variables.
+
+While the do_proc_dointvec_conv function is supposed to limit writing
+handled by proc_dointvec proc_handler to INT_MAX. Such a negative value
+being written in an unsigned int leads to a very high value, exceeding
+this limit.
+
+Moreover, the nf_conntrack_expect_max sysctl documentation specifies the
+minimum value is 1.
+
+The proc_handlers have thus been updated to proc_dointvec_minmax in
+order to specify the following write bounds :
+
+* Bound nf_conntrack_max sysctl writings between SYSCTL_ZERO
+  and SYSCTL_INT_MAX.
+
+* Bound nf_conntrack_expect_max sysctl writings between SYSCTL_ONE
+  and SYSCTL_INT_MAX as defined in the sysctl documentation.
+
+With this patch applied, sysctl writes outside the defined in the bound
+will thus lead to a write error :
+
+```
+sysctl -w net.netfilter.nf_conntrack_expect_max=-1
+sysctl: setting key "net.netfilter.nf_conntrack_expect_max": Invalid argument
+```
+
+Signed-off-by: Nicolas Bouchinet <nicolas.bouchinet@ssi.gouv.fr>
+Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ net/netfilter/nf_conntrack_standalone.c | 12 +++++++++---
+ 1 file changed, 9 insertions(+), 3 deletions(-)
+
+diff --git a/net/netfilter/nf_conntrack_standalone.c b/net/netfilter/nf_conntrack_standalone.c
+index 1e3dbed9d7840..de330dffa0a28 100644
+--- a/net/netfilter/nf_conntrack_standalone.c
++++ b/net/netfilter/nf_conntrack_standalone.c
+@@ -608,7 +608,9 @@ static struct ctl_table nf_ct_sysctl_table[] = {
+               .data           = &nf_conntrack_max,
+               .maxlen         = sizeof(int),
+               .mode           = 0644,
+-              .proc_handler   = proc_dointvec,
++              .proc_handler   = proc_dointvec_minmax,
++              .extra1         = SYSCTL_ZERO,
++              .extra2         = SYSCTL_INT_MAX,
+       },
+       [NF_SYSCTL_CT_COUNT] = {
+               .procname       = "nf_conntrack_count",
+@@ -647,7 +649,9 @@ static struct ctl_table nf_ct_sysctl_table[] = {
+               .data           = &nf_ct_expect_max,
+               .maxlen         = sizeof(int),
+               .mode           = 0644,
+-              .proc_handler   = proc_dointvec,
++              .proc_handler   = proc_dointvec_minmax,
++              .extra1         = SYSCTL_ONE,
++              .extra2         = SYSCTL_INT_MAX,
+       },
+       [NF_SYSCTL_CT_ACCT] = {
+               .procname       = "nf_conntrack_acct",
+@@ -926,7 +930,9 @@ static struct ctl_table nf_ct_netfilter_table[] = {
+               .data           = &nf_conntrack_max,
+               .maxlen         = sizeof(int),
+               .mode           = 0644,
+-              .proc_handler   = proc_dointvec,
++              .proc_handler   = proc_dointvec_minmax,
++              .extra1         = SYSCTL_ZERO,
++              .extra2         = SYSCTL_INT_MAX,
+       },
+       { }
+ };
+-- 
+2.39.5
+
diff --git a/queue-5.4/nfsv4-treat-enetunreach-errors-as-fatal-for-state-re.patch b/queue-5.4/nfsv4-treat-enetunreach-errors-as-fatal-for-state-re.patch
new file mode 100644 (file)
index 0000000..83ad985
--- /dev/null
@@ -0,0 +1,46 @@
+From e22975b3c895355126599807d9463bc25d7ab08f Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 24 Mar 2025 20:35:33 -0400
+Subject: NFSv4: Treat ENETUNREACH errors as fatal for state recovery
+
+From: Trond Myklebust <trond.myklebust@hammerspace.com>
+
+[ Upstream commit 0af5fb5ed3d2fd9e110c6112271f022b744a849a ]
+
+If a containerised process is killed and causes an ENETUNREACH or
+ENETDOWN error to be propagated to the state manager, then mark the
+nfs_client as being dead so that we don't loop in functions that are
+expecting recovery to succeed.
+
+Reviewed-by: Jeff Layton <jlayton@kernel.org>
+Reviewed-by: Benjamin Coddington <bcodding@redhat.com>
+Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/nfs/nfs4state.c | 10 +++++++++-
+ 1 file changed, 9 insertions(+), 1 deletion(-)
+
+diff --git a/fs/nfs/nfs4state.c b/fs/nfs/nfs4state.c
+index 1d38484e0a53b..b64a3751c3e4a 100644
+--- a/fs/nfs/nfs4state.c
++++ b/fs/nfs/nfs4state.c
+@@ -2655,7 +2655,15 @@ static void nfs4_state_manager(struct nfs_client *clp)
+       pr_warn_ratelimited("NFS: state manager%s%s failed on NFSv4 server %s"
+                       " with error %d\n", section_sep, section,
+                       clp->cl_hostname, -status);
+-      ssleep(1);
++      switch (status) {
++      case -ENETDOWN:
++      case -ENETUNREACH:
++              nfs_mark_client_ready(clp, -EIO);
++              break;
++      default:
++              ssleep(1);
++              break;
++      }
+ out_drain:
+       memalloc_nofs_restore(memflags);
+       nfs4_end_drain_session(clp);
+-- 
+2.39.5
+
diff --git a/queue-5.4/nvmet-tcp-don-t-restore-null-sk_state_change.patch b/queue-5.4/nvmet-tcp-don-t-restore-null-sk_state_change.patch
new file mode 100644 (file)
index 0000000..62e4f22
--- /dev/null
@@ -0,0 +1,227 @@
+From 0169ee85a1cb4b4aa4c875f938716be8ed5dc01f Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 23 Apr 2025 16:06:21 +1000
+Subject: nvmet-tcp: don't restore null sk_state_change
+
+From: Alistair Francis <alistair.francis@wdc.com>
+
+[ Upstream commit 46d22b47df2741996af277a2838b95f130436c13 ]
+
+queue->state_change is set as part of nvmet_tcp_set_queue_sock(), but if
+the TCP connection isn't established when nvmet_tcp_set_queue_sock() is
+called then queue->state_change isn't set and sock->sk->sk_state_change
+isn't replaced.
+
+As such we don't need to restore sock->sk->sk_state_change if
+queue->state_change is NULL.
+
+This avoids NULL pointer dereferences such as this:
+
+[  286.462026][    C0] BUG: kernel NULL pointer dereference, address: 0000000000000000
+[  286.462814][    C0] #PF: supervisor instruction fetch in kernel mode
+[  286.463796][    C0] #PF: error_code(0x0010) - not-present page
+[  286.464392][    C0] PGD 8000000140620067 P4D 8000000140620067 PUD 114201067 PMD 0
+[  286.465086][    C0] Oops: Oops: 0010 [#1] SMP KASAN PTI
+[  286.465559][    C0] CPU: 0 UID: 0 PID: 1628 Comm: nvme Not tainted 6.15.0-rc2+ #11 PREEMPT(voluntary)
+[  286.466393][    C0] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.16.3-3.fc41 04/01/2014
+[  286.467147][    C0] RIP: 0010:0x0
+[  286.467420][    C0] Code: Unable to access opcode bytes at 0xffffffffffffffd6.
+[  286.467977][    C0] RSP: 0018:ffff8883ae008580 EFLAGS: 00010246
+[  286.468425][    C0] RAX: 0000000000000000 RBX: ffff88813fd34100 RCX: ffffffffa386cc43
+[  286.469019][    C0] RDX: 1ffff11027fa68b6 RSI: 0000000000000008 RDI: ffff88813fd34100
+[  286.469545][    C0] RBP: ffff88813fd34160 R08: 0000000000000000 R09: ffffed1027fa682c
+[  286.470072][    C0] R10: ffff88813fd34167 R11: 0000000000000000 R12: ffff88813fd344c3
+[  286.470585][    C0] R13: ffff88813fd34112 R14: ffff88813fd34aec R15: ffff888132cdd268
+[  286.471070][    C0] FS:  00007fe3c04c7d80(0000) GS:ffff88840743f000(0000) knlGS:0000000000000000
+[  286.471644][    C0] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
+[  286.472543][    C0] CR2: ffffffffffffffd6 CR3: 000000012daca000 CR4: 00000000000006f0
+[  286.473500][    C0] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
+[  286.474467][    C0] DR3: 0000000000000000 DR6: 00000000ffff07f0 DR7: 0000000000000400
+[  286.475453][    C0] Call Trace:
+[  286.476102][    C0]  <IRQ>
+[  286.476719][    C0]  tcp_fin+0x2bb/0x440
+[  286.477429][    C0]  tcp_data_queue+0x190f/0x4e60
+[  286.478174][    C0]  ? __build_skb_around+0x234/0x330
+[  286.478940][    C0]  ? rcu_is_watching+0x11/0xb0
+[  286.479659][    C0]  ? __pfx_tcp_data_queue+0x10/0x10
+[  286.480431][    C0]  ? tcp_try_undo_loss+0x640/0x6c0
+[  286.481196][    C0]  ? seqcount_lockdep_reader_access.constprop.0+0x82/0x90
+[  286.482046][    C0]  ? kvm_clock_get_cycles+0x14/0x30
+[  286.482769][    C0]  ? ktime_get+0x66/0x150
+[  286.483433][    C0]  ? rcu_is_watching+0x11/0xb0
+[  286.484146][    C0]  tcp_rcv_established+0x6e4/0x2050
+[  286.484857][    C0]  ? rcu_is_watching+0x11/0xb0
+[  286.485523][    C0]  ? ipv4_dst_check+0x160/0x2b0
+[  286.486203][    C0]  ? __pfx_tcp_rcv_established+0x10/0x10
+[  286.486917][    C0]  ? lock_release+0x217/0x2c0
+[  286.487595][    C0]  tcp_v4_do_rcv+0x4d6/0x9b0
+[  286.488279][    C0]  tcp_v4_rcv+0x2af8/0x3e30
+[  286.488904][    C0]  ? raw_local_deliver+0x51b/0xad0
+[  286.489551][    C0]  ? rcu_is_watching+0x11/0xb0
+[  286.490198][    C0]  ? __pfx_tcp_v4_rcv+0x10/0x10
+[  286.490813][    C0]  ? __pfx_raw_local_deliver+0x10/0x10
+[  286.491487][    C0]  ? __pfx_nf_confirm+0x10/0x10 [nf_conntrack]
+[  286.492275][    C0]  ? rcu_is_watching+0x11/0xb0
+[  286.492900][    C0]  ip_protocol_deliver_rcu+0x8f/0x370
+[  286.493579][    C0]  ip_local_deliver_finish+0x297/0x420
+[  286.494268][    C0]  ip_local_deliver+0x168/0x430
+[  286.494867][    C0]  ? __pfx_ip_local_deliver+0x10/0x10
+[  286.495498][    C0]  ? __pfx_ip_local_deliver_finish+0x10/0x10
+[  286.496204][    C0]  ? ip_rcv_finish_core+0x19a/0x1f20
+[  286.496806][    C0]  ? lock_release+0x217/0x2c0
+[  286.497414][    C0]  ip_rcv+0x455/0x6e0
+[  286.497945][    C0]  ? __pfx_ip_rcv+0x10/0x10
+[  286.498550][    C0]  ? rcu_is_watching+0x11/0xb0
+[  286.499137][    C0]  ? __pfx_ip_rcv_finish+0x10/0x10
+[  286.499763][    C0]  ? lock_release+0x217/0x2c0
+[  286.500327][    C0]  ? dl_scaled_delta_exec+0xd1/0x2c0
+[  286.500922][    C0]  ? __pfx_ip_rcv+0x10/0x10
+[  286.501480][    C0]  __netif_receive_skb_one_core+0x166/0x1b0
+[  286.502173][    C0]  ? __pfx___netif_receive_skb_one_core+0x10/0x10
+[  286.502903][    C0]  ? lock_acquire+0x2b2/0x310
+[  286.503487][    C0]  ? process_backlog+0x372/0x1350
+[  286.504087][    C0]  ? lock_release+0x217/0x2c0
+[  286.504642][    C0]  process_backlog+0x3b9/0x1350
+[  286.505214][    C0]  ? process_backlog+0x372/0x1350
+[  286.505779][    C0]  __napi_poll.constprop.0+0xa6/0x490
+[  286.506363][    C0]  net_rx_action+0x92e/0xe10
+[  286.506889][    C0]  ? __pfx_net_rx_action+0x10/0x10
+[  286.507437][    C0]  ? timerqueue_add+0x1f0/0x320
+[  286.507977][    C0]  ? sched_clock_cpu+0x68/0x540
+[  286.508492][    C0]  ? lock_acquire+0x2b2/0x310
+[  286.509043][    C0]  ? kvm_sched_clock_read+0xd/0x20
+[  286.509607][    C0]  ? handle_softirqs+0x1aa/0x7d0
+[  286.510187][    C0]  handle_softirqs+0x1f2/0x7d0
+[  286.510754][    C0]  ? __pfx_handle_softirqs+0x10/0x10
+[  286.511348][    C0]  ? irqtime_account_irq+0x181/0x290
+[  286.511937][    C0]  ? __dev_queue_xmit+0x85d/0x3450
+[  286.512510][    C0]  do_softirq.part.0+0x89/0xc0
+[  286.513100][    C0]  </IRQ>
+[  286.513548][    C0]  <TASK>
+[  286.513953][    C0]  __local_bh_enable_ip+0x112/0x140
+[  286.514522][    C0]  ? __dev_queue_xmit+0x85d/0x3450
+[  286.515072][    C0]  __dev_queue_xmit+0x872/0x3450
+[  286.515619][    C0]  ? nft_do_chain+0xe16/0x15b0 [nf_tables]
+[  286.516252][    C0]  ? __pfx___dev_queue_xmit+0x10/0x10
+[  286.516817][    C0]  ? selinux_ip_postroute+0x43c/0xc50
+[  286.517433][    C0]  ? __pfx_selinux_ip_postroute+0x10/0x10
+[  286.518061][    C0]  ? rcu_is_watching+0x11/0xb0
+[  286.518606][    C0]  ? ip_output+0x164/0x4a0
+[  286.519149][    C0]  ? rcu_is_watching+0x11/0xb0
+[  286.519671][    C0]  ? ip_finish_output2+0x17d5/0x1fb0
+[  286.520258][    C0]  ip_finish_output2+0xb4b/0x1fb0
+[  286.520787][    C0]  ? __pfx_ip_finish_output2+0x10/0x10
+[  286.521355][    C0]  ? __ip_finish_output+0x15d/0x750
+[  286.521890][    C0]  ip_output+0x164/0x4a0
+[  286.522372][    C0]  ? __pfx_ip_output+0x10/0x10
+[  286.522872][    C0]  ? rcu_is_watching+0x11/0xb0
+[  286.523402][    C0]  ? _raw_spin_unlock_irqrestore+0x4c/0x60
+[  286.524031][    C0]  ? __pfx_ip_finish_output+0x10/0x10
+[  286.524605][    C0]  ? __ip_queue_xmit+0x999/0x2260
+[  286.525200][    C0]  ? rcu_is_watching+0x11/0xb0
+[  286.525744][    C0]  ? ipv4_dst_check+0x16a/0x2b0
+[  286.526279][    C0]  ? lock_release+0x217/0x2c0
+[  286.526793][    C0]  __ip_queue_xmit+0x1883/0x2260
+[  286.527324][    C0]  ? __skb_clone+0x54c/0x730
+[  286.527827][    C0]  __tcp_transmit_skb+0x209b/0x37a0
+[  286.528374][    C0]  ? __pfx___tcp_transmit_skb+0x10/0x10
+[  286.528952][    C0]  ? rcu_is_watching+0x11/0xb0
+[  286.529472][    C0]  ? seqcount_lockdep_reader_access.constprop.0+0x82/0x90
+[  286.530152][    C0]  ? trace_hardirqs_on+0x12/0x120
+[  286.530691][    C0]  tcp_write_xmit+0xb81/0x88b0
+[  286.531224][    C0]  ? mod_memcg_state+0x4d/0x60
+[  286.531736][    C0]  ? rcu_is_watching+0x11/0xb0
+[  286.532253][    C0]  __tcp_push_pending_frames+0x90/0x320
+[  286.532826][    C0]  tcp_send_fin+0x141/0xb50
+[  286.533352][    C0]  ? __pfx_tcp_send_fin+0x10/0x10
+[  286.533908][    C0]  ? __local_bh_enable_ip+0xab/0x140
+[  286.534495][    C0]  inet_shutdown+0x243/0x320
+[  286.535077][    C0]  nvme_tcp_alloc_queue+0xb3b/0x2590 [nvme_tcp]
+[  286.535709][    C0]  ? do_raw_spin_lock+0x129/0x260
+[  286.536314][    C0]  ? __pfx_nvme_tcp_alloc_queue+0x10/0x10 [nvme_tcp]
+[  286.536996][    C0]  ? do_raw_spin_unlock+0x54/0x1e0
+[  286.537550][    C0]  ? _raw_spin_unlock+0x29/0x50
+[  286.538127][    C0]  ? do_raw_spin_lock+0x129/0x260
+[  286.538664][    C0]  ? __pfx_do_raw_spin_lock+0x10/0x10
+[  286.539249][    C0]  ? nvme_tcp_alloc_admin_queue+0xd5/0x340 [nvme_tcp]
+[  286.539892][    C0]  ? __wake_up+0x40/0x60
+[  286.540392][    C0]  nvme_tcp_alloc_admin_queue+0xd5/0x340 [nvme_tcp]
+[  286.541047][    C0]  ? rcu_is_watching+0x11/0xb0
+[  286.541589][    C0]  nvme_tcp_setup_ctrl+0x8b/0x7a0 [nvme_tcp]
+[  286.542254][    C0]  ? _raw_spin_unlock_irqrestore+0x4c/0x60
+[  286.542887][    C0]  ? __pfx_nvme_tcp_setup_ctrl+0x10/0x10 [nvme_tcp]
+[  286.543568][    C0]  ? trace_hardirqs_on+0x12/0x120
+[  286.544166][    C0]  ? _raw_spin_unlock_irqrestore+0x35/0x60
+[  286.544792][    C0]  ? nvme_change_ctrl_state+0x196/0x2e0 [nvme_core]
+[  286.545477][    C0]  nvme_tcp_create_ctrl+0x839/0xb90 [nvme_tcp]
+[  286.546126][    C0]  nvmf_dev_write+0x3db/0x7e0 [nvme_fabrics]
+[  286.546775][    C0]  ? rw_verify_area+0x69/0x520
+[  286.547334][    C0]  vfs_write+0x218/0xe90
+[  286.547854][    C0]  ? do_syscall_64+0x9f/0x190
+[  286.548408][    C0]  ? trace_hardirqs_on_prepare+0xdb/0x120
+[  286.549037][    C0]  ? syscall_exit_to_user_mode+0x93/0x280
+[  286.549659][    C0]  ? __pfx_vfs_write+0x10/0x10
+[  286.550259][    C0]  ? do_syscall_64+0x9f/0x190
+[  286.550840][    C0]  ? syscall_exit_to_user_mode+0x8e/0x280
+[  286.551516][    C0]  ? trace_hardirqs_on_prepare+0xdb/0x120
+[  286.552180][    C0]  ? syscall_exit_to_user_mode+0x93/0x280
+[  286.552834][    C0]  ? ksys_read+0xf5/0x1c0
+[  286.553386][    C0]  ? __pfx_ksys_read+0x10/0x10
+[  286.553964][    C0]  ksys_write+0xf5/0x1c0
+[  286.554499][    C0]  ? __pfx_ksys_write+0x10/0x10
+[  286.555072][    C0]  ? trace_hardirqs_on_prepare+0xdb/0x120
+[  286.555698][    C0]  ? syscall_exit_to_user_mode+0x93/0x280
+[  286.556319][    C0]  ? do_syscall_64+0x54/0x190
+[  286.556866][    C0]  do_syscall_64+0x93/0x190
+[  286.557420][    C0]  ? rcu_read_unlock+0x17/0x60
+[  286.557986][    C0]  ? rcu_is_watching+0x11/0xb0
+[  286.558526][    C0]  ? lock_release+0x217/0x2c0
+[  286.559087][    C0]  ? rcu_is_watching+0x11/0xb0
+[  286.559659][    C0]  ? count_memcg_events.constprop.0+0x4a/0x60
+[  286.560476][    C0]  ? exc_page_fault+0x7a/0x110
+[  286.561064][    C0]  ? rcu_is_watching+0x11/0xb0
+[  286.561647][    C0]  ? lock_release+0x217/0x2c0
+[  286.562257][    C0]  ? do_user_addr_fault+0x171/0xa00
+[  286.562839][    C0]  ? do_user_addr_fault+0x4a2/0xa00
+[  286.563453][    C0]  ? irqentry_exit_to_user_mode+0x84/0x270
+[  286.564112][    C0]  ? rcu_is_watching+0x11/0xb0
+[  286.564677][    C0]  ? irqentry_exit_to_user_mode+0x84/0x270
+[  286.565317][    C0]  ? trace_hardirqs_on_prepare+0xdb/0x120
+[  286.565922][    C0]  entry_SYSCALL_64_after_hwframe+0x76/0x7e
+[  286.566542][    C0] RIP: 0033:0x7fe3c05e6504
+[  286.567102][    C0] Code: c7 00 16 00 00 00 b8 ff ff ff ff c3 66 2e 0f 1f 84 00 00 00 00 00 f3 0f 1e fa 80 3d c5 8b 10 00 00 74 13 b8 01 00 00 00 0f 05 <48> 3d 00 f0 ff ff 77 54 c3 0f 1f 00 55 48 89 e5 48 83 ec 20 48 89
+[  286.568931][    C0] RSP: 002b:00007fff76444f58 EFLAGS: 00000202 ORIG_RAX: 0000000000000001
+[  286.569807][    C0] RAX: ffffffffffffffda RBX: 000000003b40d930 RCX: 00007fe3c05e6504
+[  286.570621][    C0] RDX: 00000000000000cf RSI: 000000003b40d930 RDI: 0000000000000003
+[  286.571443][    C0] RBP: 0000000000000003 R08: 00000000000000cf R09: 000000003b40d930
+[  286.572246][    C0] R10: 0000000000000000 R11: 0000000000000202 R12: 000000003b40cd60
+[  286.573069][    C0] R13: 00000000000000cf R14: 00007fe3c07417f8 R15: 00007fe3c073502e
+[  286.573886][    C0]  </TASK>
+
+Closes: https://lore.kernel.org/linux-nvme/5hdonndzoqa265oq3bj6iarwtfk5dewxxjtbjvn5uqnwclpwt6@a2n6w3taxxex/
+Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
+Reviewed-by: Sagi Grimberg <sagi@grimberg.me>
+Tested-by: Shin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>
+Signed-off-by: Christoph Hellwig <hch@lst.de>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/nvme/target/tcp.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/drivers/nvme/target/tcp.c b/drivers/nvme/target/tcp.c
+index 11c8506e04ca3..bac81baa49c13 100644
+--- a/drivers/nvme/target/tcp.c
++++ b/drivers/nvme/target/tcp.c
+@@ -1338,6 +1338,9 @@ static void nvmet_tcp_restore_socket_callbacks(struct nvmet_tcp_queue *queue)
+ {
+       struct socket *sock = queue->sock;
++      if (!queue->state_change)
++              return;
++
+       write_lock_bh(&sock->sk->sk_callback_lock);
+       sock->sk->sk_data_ready =  queue->data_ready;
+       sock->sk->sk_state_change = queue->state_change;
+-- 
+2.39.5
+
diff --git a/queue-5.4/orangefs-do-not-truncate-file-size.patch b/queue-5.4/orangefs-do-not-truncate-file-size.patch
new file mode 100644 (file)
index 0000000..9306012
--- /dev/null
@@ -0,0 +1,50 @@
+From 90dd00a1256f815b373965f76aeba03100bcb587 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 5 Mar 2025 20:47:25 +0000
+Subject: orangefs: Do not truncate file size
+
+From: Matthew Wilcox (Oracle) <willy@infradead.org>
+
+[ Upstream commit 062e8093592fb866b8e016641a8b27feb6ac509d ]
+
+'len' is used to store the result of i_size_read(), so making 'len'
+a size_t results in truncation to 4GiB on 32-bit systems.
+
+Signed-off-by: "Matthew Wilcox (Oracle)" <willy@infradead.org>
+Link: https://lore.kernel.org/r/20250305204734.1475264-2-willy@infradead.org
+Tested-by: Mike Marshall <hubcap@omnibond.com>
+Signed-off-by: Christian Brauner <brauner@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/orangefs/inode.c | 7 +++----
+ 1 file changed, 3 insertions(+), 4 deletions(-)
+
+diff --git a/fs/orangefs/inode.c b/fs/orangefs/inode.c
+index 636892ffec0ba..238773a508bac 100644
+--- a/fs/orangefs/inode.c
++++ b/fs/orangefs/inode.c
+@@ -22,9 +22,9 @@ static int orangefs_writepage_locked(struct page *page,
+       struct orangefs_write_range *wr = NULL;
+       struct iov_iter iter;
+       struct bio_vec bv;
+-      size_t len, wlen;
++      size_t wlen;
+       ssize_t ret;
+-      loff_t off;
++      loff_t len, off;
+       set_page_writeback(page);
+@@ -98,8 +98,7 @@ static int orangefs_writepages_work(struct orangefs_writepages *ow,
+       struct orangefs_write_range *wrp, wr;
+       struct iov_iter iter;
+       ssize_t ret;
+-      size_t len;
+-      loff_t off;
++      loff_t len, off;
+       int i;
+       len = i_size_read(inode);
+-- 
+2.39.5
+
diff --git a/queue-5.4/pci-fix-old_size-lower-bound-in-calculate_iosize-too.patch b/queue-5.4/pci-fix-old_size-lower-bound-in-calculate_iosize-too.patch
new file mode 100644 (file)
index 0000000..d43be32
--- /dev/null
@@ -0,0 +1,48 @@
+From 4deb85e55f4c879fc9637f27ca29b4522f3834d1 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 16 Dec 2024 19:56:12 +0200
+Subject: PCI: Fix old_size lower bound in calculate_iosize() too
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
+
+[ Upstream commit ff61f380de5652e723168341480cc7adf1dd6213 ]
+
+Commit 903534fa7d30 ("PCI: Fix resource double counting on remove &
+rescan") fixed double counting of mem resources because of old_size being
+applied too early.
+
+Fix a similar counting bug on the io resource side.
+
+Link: https://lore.kernel.org/r/20241216175632.4175-6-ilpo.jarvinen@linux.intel.com
+Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
+Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
+Tested-by: Xiaochun Lee <lixc17@lenovo.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/pci/setup-bus.c | 6 ++----
+ 1 file changed, 2 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/pci/setup-bus.c b/drivers/pci/setup-bus.c
+index 32e34ade736c3..1793e1084aeb3 100644
+--- a/drivers/pci/setup-bus.c
++++ b/drivers/pci/setup-bus.c
+@@ -800,11 +800,9 @@ static resource_size_t calculate_iosize(resource_size_t size,
+       size = (size & 0xff) + ((size & ~0xffUL) << 2);
+ #endif
+       size = size + size1;
+-      if (size < old_size)
+-              size = old_size;
+-      size = ALIGN(max(size, add_size) + children_add_size, align);
+-      return size;
++      size = max(size, add_size) + children_add_size;
++      return ALIGN(max(size, old_size), align);
+ }
+ static resource_size_t calculate_memsize(resource_size_t size,
+-- 
+2.39.5
+
diff --git a/queue-5.4/phy-core-don-t-require-set_mode-callback-for-phy_get.patch b/queue-5.4/phy-core-don-t-require-set_mode-callback-for-phy_get.patch
new file mode 100644 (file)
index 0000000..ebed0a5
--- /dev/null
@@ -0,0 +1,54 @@
+From c79ed38d56bbdce89db090215a4252b0ff88c939 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun, 9 Feb 2025 14:31:45 +0200
+Subject: phy: core: don't require set_mode() callback for phy_get_mode() to
+ work
+
+From: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
+
+[ Upstream commit d58c04e305afbaa9dda7969151f06c4efe2c98b0 ]
+
+As reported by Damon Ding, the phy_get_mode() call doesn't work as
+expected unless the PHY driver has a .set_mode() call. This prompts PHY
+drivers to have empty stubs for .set_mode() for the sake of being able
+to get the mode.
+
+Make .set_mode() callback truly optional and update PHY's mode even if
+it there is none.
+
+Cc: Damon Ding <damon.ding@rock-chips.com>
+Link: https://lore.kernel.org/r/96f8310f-93f1-4bcb-8637-137e1159ff83@rock-chips.com
+Tested-by: Damon Ding <damon.ding@rock-chips.com>
+Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
+Link: https://lore.kernel.org/r/20250209-phy-fix-set-moe-v2-1-76e248503856@linaro.org
+Signed-off-by: Vinod Koul <vkoul@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/phy/phy-core.c | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/phy/phy-core.c b/drivers/phy/phy-core.c
+index c94a0d2c45161..917e01af4769f 100644
+--- a/drivers/phy/phy-core.c
++++ b/drivers/phy/phy-core.c
+@@ -360,13 +360,14 @@ EXPORT_SYMBOL_GPL(phy_power_off);
+ int phy_set_mode_ext(struct phy *phy, enum phy_mode mode, int submode)
+ {
+-      int ret;
++      int ret = 0;
+-      if (!phy || !phy->ops->set_mode)
++      if (!phy)
+               return 0;
+       mutex_lock(&phy->mutex);
+-      ret = phy->ops->set_mode(phy, mode, submode);
++      if (phy->ops->set_mode)
++              ret = phy->ops->set_mode(phy, mode, submode);
+       if (!ret)
+               phy->attrs.mode = mode;
+       mutex_unlock(&phy->mutex);
+-- 
+2.39.5
+
diff --git a/queue-5.4/pinctrl-bcm281xx-use-unsigned-int-instead-of-bare-un.patch b/queue-5.4/pinctrl-bcm281xx-use-unsigned-int-instead-of-bare-un.patch
new file mode 100644 (file)
index 0000000..722197b
--- /dev/null
@@ -0,0 +1,177 @@
+From 43e57480a7db91c9977c28733e2054a87bc8f938 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 3 Mar 2025 21:54:47 +0100
+Subject: pinctrl: bcm281xx: Use "unsigned int" instead of bare "unsigned"
+
+From: Artur Weber <aweber.kernel@gmail.com>
+
+[ Upstream commit 07b5a2a13f4704c5eae3be7277ec54ffdba45f72 ]
+
+Replace uses of bare "unsigned" with "unsigned int" to fix checkpatch
+warnings. No functional change.
+
+Signed-off-by: Artur Weber <aweber.kernel@gmail.com>
+Link: https://lore.kernel.org/20250303-bcm21664-pinctrl-v3-2-5f8b80e4ab51@gmail.com
+Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/pinctrl/bcm/pinctrl-bcm281xx.c | 44 +++++++++++++-------------
+ 1 file changed, 22 insertions(+), 22 deletions(-)
+
+diff --git a/drivers/pinctrl/bcm/pinctrl-bcm281xx.c b/drivers/pinctrl/bcm/pinctrl-bcm281xx.c
+index 3452005342ad6..69e8d7856fff7 100644
+--- a/drivers/pinctrl/bcm/pinctrl-bcm281xx.c
++++ b/drivers/pinctrl/bcm/pinctrl-bcm281xx.c
+@@ -79,7 +79,7 @@ static enum bcm281xx_pin_type hdmi_pin = BCM281XX_PIN_TYPE_HDMI;
+ struct bcm281xx_pin_function {
+       const char *name;
+       const char * const *groups;
+-      const unsigned ngroups;
++      const unsigned int ngroups;
+ };
+ /**
+@@ -91,10 +91,10 @@ struct bcm281xx_pinctrl_data {
+       /* List of all pins */
+       const struct pinctrl_pin_desc *pins;
+-      const unsigned npins;
++      const unsigned int npins;
+       const struct bcm281xx_pin_function *functions;
+-      const unsigned nfunctions;
++      const unsigned int nfunctions;
+       struct regmap *regmap;
+ };
+@@ -948,7 +948,7 @@ static struct bcm281xx_pinctrl_data bcm281xx_pinctrl = {
+ };
+ static inline enum bcm281xx_pin_type pin_type_get(struct pinctrl_dev *pctldev,
+-                                                unsigned pin)
++                                                unsigned int pin)
+ {
+       struct bcm281xx_pinctrl_data *pdata = pinctrl_dev_get_drvdata(pctldev);
+@@ -992,7 +992,7 @@ static int bcm281xx_pinctrl_get_groups_count(struct pinctrl_dev *pctldev)
+ }
+ static const char *bcm281xx_pinctrl_get_group_name(struct pinctrl_dev *pctldev,
+-                                                 unsigned group)
++                                                 unsigned int group)
+ {
+       struct bcm281xx_pinctrl_data *pdata = pinctrl_dev_get_drvdata(pctldev);
+@@ -1000,9 +1000,9 @@ static const char *bcm281xx_pinctrl_get_group_name(struct pinctrl_dev *pctldev,
+ }
+ static int bcm281xx_pinctrl_get_group_pins(struct pinctrl_dev *pctldev,
+-                                         unsigned group,
++                                         unsigned int group,
+                                          const unsigned **pins,
+-                                         unsigned *num_pins)
++                                         unsigned int *num_pins)
+ {
+       struct bcm281xx_pinctrl_data *pdata = pinctrl_dev_get_drvdata(pctldev);
+@@ -1014,7 +1014,7 @@ static int bcm281xx_pinctrl_get_group_pins(struct pinctrl_dev *pctldev,
+ static void bcm281xx_pinctrl_pin_dbg_show(struct pinctrl_dev *pctldev,
+                                         struct seq_file *s,
+-                                        unsigned offset)
++                                        unsigned int offset)
+ {
+       seq_printf(s, " %s", dev_name(pctldev->dev));
+ }
+@@ -1036,7 +1036,7 @@ static int bcm281xx_pinctrl_get_fcns_count(struct pinctrl_dev *pctldev)
+ }
+ static const char *bcm281xx_pinctrl_get_fcn_name(struct pinctrl_dev *pctldev,
+-                                               unsigned function)
++                                               unsigned int function)
+ {
+       struct bcm281xx_pinctrl_data *pdata = pinctrl_dev_get_drvdata(pctldev);
+@@ -1044,9 +1044,9 @@ static const char *bcm281xx_pinctrl_get_fcn_name(struct pinctrl_dev *pctldev,
+ }
+ static int bcm281xx_pinctrl_get_fcn_groups(struct pinctrl_dev *pctldev,
+-                                         unsigned function,
++                                         unsigned int function,
+                                          const char * const **groups,
+-                                         unsigned * const num_groups)
++                                         unsigned int * const num_groups)
+ {
+       struct bcm281xx_pinctrl_data *pdata = pinctrl_dev_get_drvdata(pctldev);
+@@ -1057,8 +1057,8 @@ static int bcm281xx_pinctrl_get_fcn_groups(struct pinctrl_dev *pctldev,
+ }
+ static int bcm281xx_pinmux_set(struct pinctrl_dev *pctldev,
+-                             unsigned function,
+-                             unsigned group)
++                             unsigned int function,
++                             unsigned int group)
+ {
+       struct bcm281xx_pinctrl_data *pdata = pinctrl_dev_get_drvdata(pctldev);
+       const struct bcm281xx_pin_function *f = &pdata->functions[function];
+@@ -1089,7 +1089,7 @@ static const struct pinmux_ops bcm281xx_pinctrl_pinmux_ops = {
+ };
+ static int bcm281xx_pinctrl_pin_config_get(struct pinctrl_dev *pctldev,
+-                                         unsigned pin,
++                                         unsigned int pin,
+                                          unsigned long *config)
+ {
+       return -ENOTSUPP;
+@@ -1098,9 +1098,9 @@ static int bcm281xx_pinctrl_pin_config_get(struct pinctrl_dev *pctldev,
+ /* Goes through the configs and update register val/mask */
+ static int bcm281xx_std_pin_update(struct pinctrl_dev *pctldev,
+-                                 unsigned pin,
++                                 unsigned int pin,
+                                  unsigned long *configs,
+-                                 unsigned num_configs,
++                                 unsigned int num_configs,
+                                  u32 *val,
+                                  u32 *mask)
+ {
+@@ -1214,9 +1214,9 @@ static const u16 bcm281xx_pullup_map[] = {
+ /* Goes through the configs and update register val/mask */
+ static int bcm281xx_i2c_pin_update(struct pinctrl_dev *pctldev,
+-                                 unsigned pin,
++                                 unsigned int pin,
+                                  unsigned long *configs,
+-                                 unsigned num_configs,
++                                 unsigned int num_configs,
+                                  u32 *val,
+                                  u32 *mask)
+ {
+@@ -1284,9 +1284,9 @@ static int bcm281xx_i2c_pin_update(struct pinctrl_dev *pctldev,
+ /* Goes through the configs and update register val/mask */
+ static int bcm281xx_hdmi_pin_update(struct pinctrl_dev *pctldev,
+-                                  unsigned pin,
++                                  unsigned int pin,
+                                   unsigned long *configs,
+-                                  unsigned num_configs,
++                                  unsigned int num_configs,
+                                   u32 *val,
+                                   u32 *mask)
+ {
+@@ -1328,9 +1328,9 @@ static int bcm281xx_hdmi_pin_update(struct pinctrl_dev *pctldev,
+ }
+ static int bcm281xx_pinctrl_pin_config_set(struct pinctrl_dev *pctldev,
+-                                         unsigned pin,
++                                         unsigned int pin,
+                                          unsigned long *configs,
+-                                         unsigned num_configs)
++                                         unsigned int num_configs)
+ {
+       struct bcm281xx_pinctrl_data *pdata = pinctrl_dev_get_drvdata(pctldev);
+       enum bcm281xx_pin_type pin_type;
+-- 
+2.39.5
+
diff --git a/queue-5.4/pinctrl-devicetree-do-not-goto-err-when-probing-hogs.patch b/queue-5.4/pinctrl-devicetree-do-not-goto-err-when-probing-hogs.patch
new file mode 100644 (file)
index 0000000..6853a6c
--- /dev/null
@@ -0,0 +1,110 @@
+From 001cced0069665ced2392840ffa6d88ec4067e50 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 16 Jan 2025 18:00:09 +0100
+Subject: pinctrl: devicetree: do not goto err when probing hogs in
+ pinctrl_dt_to_map
+
+From: Valentin Caron <valentin.caron@foss.st.com>
+
+[ Upstream commit c98868e816209e568c9d72023ba0bc1e4d96e611 ]
+
+Cross case in pinctrl framework make impossible to an hogged pin and
+another, not hogged, used within the same device-tree node. For example
+with this simplified device-tree :
+
+  &pinctrl {
+    pinctrl_pin_1: pinctrl-pin-1 {
+      pins = "dummy-pinctrl-pin";
+    };
+  };
+
+  &rtc {
+    pinctrl-names = "default"
+    pinctrl-0 = <&pinctrl_pin_1 &rtc_pin_1>
+
+    rtc_pin_1: rtc-pin-1 {
+      pins = "dummy-rtc-pin";
+    };
+  };
+
+"pinctrl_pin_1" configuration is never set. This produces this path in
+the code:
+
+  really_probe()
+    pinctrl_bind_pins()
+    | devm_pinctrl_get()
+    |   pinctrl_get()
+    |     create_pinctrl()
+    |       pinctrl_dt_to_map()
+    |         // Hog pin create an abort for all pins of the node
+    |         ret = dt_to_map_one_config()
+    |         | /* Do not defer probing of hogs (circular loop) */
+    |         | if (np_pctldev == p->dev->of_node)
+    |         |   return -ENODEV;
+    |         if (ret)
+    |           goto err
+    |
+    call_driver_probe()
+      stm32_rtc_probe()
+        pinctrl_enable()
+          pinctrl_claim_hogs()
+            create_pinctrl()
+              for_each_maps(maps_node, i, map)
+                // Not hog pin is skipped
+                if (pctldev && strcmp(dev_name(pctldev->dev),
+                                      map->ctrl_dev_name))
+                  continue;
+
+At the first call of create_pinctrl() the hogged pin produces an abort to
+avoid a defer of hogged pins. All other pin configurations are trashed.
+
+At the second call, create_pinctrl is now called with pctldev parameter to
+get hogs, but in this context only hogs are set. And other pins are
+skipped.
+
+To handle this, do not produce an abort in the first call of
+create_pinctrl(). Classic pin configuration will be set in
+pinctrl_bind_pins() context. And the hogged pin configuration will be set
+in pinctrl_claim_hogs() context.
+
+Signed-off-by: Valentin Caron <valentin.caron@foss.st.com>
+Link: https://lore.kernel.org/20250116170009.2075544-1-valentin.caron@foss.st.com
+Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/pinctrl/devicetree.c | 10 ++++++++--
+ 1 file changed, 8 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/pinctrl/devicetree.c b/drivers/pinctrl/devicetree.c
+index 200357094e3be..e9bfb96a2e0e8 100644
+--- a/drivers/pinctrl/devicetree.c
++++ b/drivers/pinctrl/devicetree.c
+@@ -141,10 +141,14 @@ static int dt_to_map_one_config(struct pinctrl *p,
+               pctldev = get_pinctrl_dev_from_of_node(np_pctldev);
+               if (pctldev)
+                       break;
+-              /* Do not defer probing of hogs (circular loop) */
++              /*
++               * Do not defer probing of hogs (circular loop)
++               *
++               * Return 1 to let the caller catch the case.
++               */
+               if (np_pctldev == p->dev->of_node) {
+                       of_node_put(np_pctldev);
+-                      return -ENODEV;
++                      return 1;
+               }
+       }
+       of_node_put(np_pctldev);
+@@ -268,6 +272,8 @@ int pinctrl_dt_to_map(struct pinctrl *p, struct pinctrl_dev *pctldev)
+                       ret = dt_to_map_one_config(p, pctldev, statename,
+                                                  np_config);
+                       of_node_put(np_config);
++                      if (ret == 1)
++                              continue;
+                       if (ret < 0)
+                               goto err;
+               }
+-- 
+2.39.5
+
diff --git a/queue-5.4/pinctrl-meson-define-the-pull-up-down-resistor-value.patch b/queue-5.4/pinctrl-meson-define-the-pull-up-down-resistor-value.patch
new file mode 100644 (file)
index 0000000..3b7786c
--- /dev/null
@@ -0,0 +1,53 @@
+From 0a34665ac2938e95d37b53e46e92a4916d7c63dc Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sat, 29 Mar 2025 20:01:32 +0100
+Subject: pinctrl: meson: define the pull up/down resistor value as 60 kOhm
+
+From: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
+
+[ Upstream commit e56088a13708757da68ad035269d69b93ac8c389 ]
+
+The public datasheets of the following Amlogic SoCs describe a typical
+resistor value for the built-in pull up/down resistor:
+- Meson8/8b/8m2: not documented
+- GXBB (S905): 60 kOhm
+- GXL (S905X): 60 kOhm
+- GXM (S912): 60 kOhm
+- G12B (S922X): 60 kOhm
+- SM1 (S905D3): 60 kOhm
+
+The public G12B and SM1 datasheets additionally state min and max
+values:
+- min value: 50 kOhm for both, pull-up and pull-down
+- max value for the pull-up: 70 kOhm
+- max value for the pull-down: 130 kOhm
+
+Use 60 kOhm in the pinctrl-meson driver as well so it's shown in the
+debugfs output. It may not be accurate for Meson8/8b/8m2 but in reality
+60 kOhm is closer to the actual value than 1 Ohm.
+
+Signed-off-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
+Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>
+Link: https://lore.kernel.org/20250329190132.855196-1-martin.blumenstingl@googlemail.com
+Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/pinctrl/meson/pinctrl-meson.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/pinctrl/meson/pinctrl-meson.c b/drivers/pinctrl/meson/pinctrl-meson.c
+index aba479a1150c8..f3b381370e5ed 100644
+--- a/drivers/pinctrl/meson/pinctrl-meson.c
++++ b/drivers/pinctrl/meson/pinctrl-meson.c
+@@ -480,7 +480,7 @@ static int meson_pinconf_get(struct pinctrl_dev *pcdev, unsigned int pin,
+       case PIN_CONFIG_BIAS_PULL_DOWN:
+       case PIN_CONFIG_BIAS_PULL_UP:
+               if (meson_pinconf_get_pull(pc, pin) == param)
+-                      arg = 1;
++                      arg = 60000;
+               else
+                       return -EINVAL;
+               break;
+-- 
+2.39.5
+
diff --git a/queue-5.4/pnfs-flexfiles-report-enetdown-as-a-connection-error.patch b/queue-5.4/pnfs-flexfiles-report-enetdown-as-a-connection-error.patch
new file mode 100644 (file)
index 0000000..d2d300e
--- /dev/null
@@ -0,0 +1,37 @@
+From 5e9b121ef0e751dd44a4007caff65fb5184c4c82 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 20 Mar 2025 12:45:01 -0400
+Subject: pNFS/flexfiles: Report ENETDOWN as a connection error
+
+From: Trond Myklebust <trond.myklebust@hammerspace.com>
+
+[ Upstream commit aa42add73ce9b9e3714723d385c254b75814e335 ]
+
+If the client should see an ENETDOWN when trying to connect to the data
+server, it might still be able to talk to the metadata server through
+another NIC. If so, report the error.
+
+Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
+Reviewed-by: Jeff Layton <jlayton@kernel.org>
+Tested-by: Jeff Layton <jlayton@kernel.org>
+Acked-by: Chuck Lever <chuck.lever@oracle.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/nfs/flexfilelayout/flexfilelayout.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/fs/nfs/flexfilelayout/flexfilelayout.c b/fs/nfs/flexfilelayout/flexfilelayout.c
+index 1b88b78f40bea..3b4f93dcf3239 100644
+--- a/fs/nfs/flexfilelayout/flexfilelayout.c
++++ b/fs/nfs/flexfilelayout/flexfilelayout.c
+@@ -1285,6 +1285,7 @@ static void ff_layout_io_track_ds_error(struct pnfs_layout_segment *lseg,
+               case -ECONNRESET:
+               case -EHOSTDOWN:
+               case -EHOSTUNREACH:
++              case -ENETDOWN:
+               case -ENETUNREACH:
+               case -EADDRINUSE:
+               case -ENOBUFS:
+-- 
+2.39.5
+
diff --git a/queue-5.4/posix-timers-add-cond_resched-to-posix_timer_add-sea.patch b/queue-5.4/posix-timers-add-cond_resched-to-posix_timer_add-sea.patch
new file mode 100644 (file)
index 0000000..7020b53
--- /dev/null
@@ -0,0 +1,41 @@
+From 4e02902d37cbc3acf1a3b628be154ec24ccafef8 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sat, 8 Mar 2025 17:48:17 +0100
+Subject: posix-timers: Add cond_resched() to posix_timer_add() search loop
+
+From: Eric Dumazet <edumazet@google.com>
+
+[ Upstream commit 5f2909c6cd13564a07ae692a95457f52295c4f22 ]
+
+With a large number of POSIX timers the search for a valid ID might cause a
+soft lockup on PREEMPT_NONE/VOLUNTARY kernels.
+
+Add cond_resched() to the loop to prevent that.
+
+[ tglx: Split out from Eric's series ]
+
+Signed-off-by: Eric Dumazet <edumazet@google.com>
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+Reviewed-by: Frederic Weisbecker <frederic@kernel.org>
+Link: https://lore.kernel.org/all/20250214135911.2037402-2-edumazet@google.com
+Link: https://lore.kernel.org/all/20250308155623.635612865@linutronix.de
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ kernel/time/posix-timers.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/kernel/time/posix-timers.c b/kernel/time/posix-timers.c
+index f3b8313475acd..2a2e4f6622ae7 100644
+--- a/kernel/time/posix-timers.c
++++ b/kernel/time/posix-timers.c
+@@ -159,6 +159,7 @@ static int posix_timer_add(struct k_itimer *timer)
+                       return id;
+               }
+               spin_unlock(&hash_lock);
++              cond_resched();
+       }
+       /* POSIX return code when no timer ID could be allocated */
+       return -EAGAIN;
+-- 
+2.39.5
+
diff --git a/queue-5.4/powerpc-prom_init-fixup-missing-size-cells-on-powerb.patch b/queue-5.4/powerpc-prom_init-fixup-missing-size-cells-on-powerb.patch
new file mode 100644 (file)
index 0000000..9e11f02
--- /dev/null
@@ -0,0 +1,44 @@
+From f1eda15af3a8a4a32c6fe838244a3d6e7e43bc3f Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 13 Jan 2025 18:19:09 +0100
+Subject: powerpc/prom_init: Fixup missing #size-cells on PowerBook6,7
+
+From: Andreas Schwab <schwab@linux-m68k.org>
+
+[ Upstream commit 7e67ef889c9ab7246547db73d524459f47403a77 ]
+
+Similar to the PowerMac3,1, the PowerBook6,7 is missing the #size-cells
+property on the i2s node.
+
+Depends-on: commit 045b14ca5c36 ("of: WARN on deprecated #address-cells/#size-cells handling")
+Signed-off-by: Andreas Schwab <schwab@linux-m68k.org>
+Acked-by: Rob Herring (Arm) <robh@kernel.org>
+[maddy: added "commit" work in depends-on to avoid checkpatch error]
+Signed-off-by: Madhavan Srinivasan <maddy@linux.ibm.com>
+Link: https://patch.msgid.link/875xmizl6a.fsf@igel.home
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/powerpc/kernel/prom_init.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/arch/powerpc/kernel/prom_init.c b/arch/powerpc/kernel/prom_init.c
+index b7ef63614417d..e0abb13b5806a 100644
+--- a/arch/powerpc/kernel/prom_init.c
++++ b/arch/powerpc/kernel/prom_init.c
+@@ -2906,11 +2906,11 @@ static void __init fixup_device_tree_pmac(void)
+       char type[8];
+       phandle node;
+-      // Some pmacs are missing #size-cells on escc nodes
++      // Some pmacs are missing #size-cells on escc or i2s nodes
+       for (node = 0; prom_next_node(&node); ) {
+               type[0] = '\0';
+               prom_getprop(node, "device_type", type, sizeof(type));
+-              if (prom_strcmp(type, "escc"))
++              if (prom_strcmp(type, "escc") && prom_strcmp(type, "i2s"))
+                       continue;
+               if (prom_getproplen(node, "#size-cells") != PROM_ERROR)
+-- 
+2.39.5
+
diff --git a/queue-5.4/rcu-fix-header-guard-for-rcu_all_qs.patch b/queue-5.4/rcu-fix-header-guard-for-rcu_all_qs.patch
new file mode 100644 (file)
index 0000000..a8137be
--- /dev/null
@@ -0,0 +1,44 @@
+From f41eda181305136cf7ca1baf36199e565fdae5dc Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 12 Dec 2024 20:06:52 -0800
+Subject: rcu: fix header guard for rcu_all_qs()
+
+From: Ankur Arora <ankur.a.arora@oracle.com>
+
+[ Upstream commit ad6b5b73ff565e88aca7a7d1286788d80c97ba71 ]
+
+rcu_all_qs() is defined for !CONFIG_PREEMPT_RCU but the declaration
+is conditioned on CONFIG_PREEMPTION.
+
+With CONFIG_PREEMPT_LAZY, CONFIG_PREEMPTION=y does not imply
+CONFIG_PREEMPT_RCU=y.
+
+Decouple the two.
+
+Cc: Paul E. McKenney <paulmck@kernel.org>
+Reviewed-by: Frederic Weisbecker <frederic@kernel.org>
+Reviewed-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Signed-off-by: Ankur Arora <ankur.a.arora@oracle.com>
+Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
+Signed-off-by: Boqun Feng <boqun.feng@gmail.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ include/linux/rcutree.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/include/linux/rcutree.h b/include/linux/rcutree.h
+index 18b1ed9864b02..5d39875c6594e 100644
+--- a/include/linux/rcutree.h
++++ b/include/linux/rcutree.h
+@@ -53,7 +53,7 @@ void rcu_scheduler_starting(void);
+ extern int rcu_scheduler_active __read_mostly;
+ void rcu_end_inkernel_boot(void);
+ bool rcu_is_watching(void);
+-#ifndef CONFIG_PREEMPTION
++#ifndef CONFIG_PREEMPT_RCU
+ void rcu_all_qs(void);
+ #endif
+-- 
+2.39.5
+
diff --git a/queue-5.4/rcu-handle-quiescent-states-for-preempt_rcu-n-preemp.patch b/queue-5.4/rcu-handle-quiescent-states-for-preempt_rcu-n-preemp.patch
new file mode 100644 (file)
index 0000000..70b7193
--- /dev/null
@@ -0,0 +1,63 @@
+From 340fde6f54e7875898ba1ef3d873af4d3173191e Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 12 Dec 2024 20:06:56 -0800
+Subject: rcu: handle quiescent states for PREEMPT_RCU=n, PREEMPT_COUNT=y
+
+From: Ankur Arora <ankur.a.arora@oracle.com>
+
+[ Upstream commit 83b28cfe796464ebbde1cf7916c126da6d572685 ]
+
+With PREEMPT_RCU=n, cond_resched() provides urgently needed quiescent
+states for read-side critical sections via rcu_all_qs().
+One reason why this was needed: lacking preempt-count, the tick
+handler has no way of knowing whether it is executing in a
+read-side critical section or not.
+
+With (PREEMPT_LAZY=y, PREEMPT_DYNAMIC=n), we get (PREEMPT_COUNT=y,
+PREEMPT_RCU=n). In this configuration cond_resched() is a stub and
+does not provide quiescent states via rcu_all_qs().
+(PREEMPT_RCU=y provides this information via rcu_read_unlock() and
+its nesting counter.)
+
+So, use the availability of preempt_count() to report quiescent states
+in rcu_flavor_sched_clock_irq().
+
+Suggested-by: Paul E. McKenney <paulmck@kernel.org>
+Reviewed-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Signed-off-by: Ankur Arora <ankur.a.arora@oracle.com>
+Reviewed-by: Frederic Weisbecker <frederic@kernel.org>
+Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
+Signed-off-by: Boqun Feng <boqun.feng@gmail.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ kernel/rcu/tree_plugin.h | 11 +++++++----
+ 1 file changed, 7 insertions(+), 4 deletions(-)
+
+diff --git a/kernel/rcu/tree_plugin.h b/kernel/rcu/tree_plugin.h
+index 2c127d438fe0a..1d9f2831b54ea 100644
+--- a/kernel/rcu/tree_plugin.h
++++ b/kernel/rcu/tree_plugin.h
+@@ -902,13 +902,16 @@ static void rcu_preempt_check_blocked_tasks(struct rcu_node *rnp)
+  */
+ static void rcu_flavor_sched_clock_irq(int user)
+ {
+-      if (user || rcu_is_cpu_rrupt_from_idle()) {
++      if (user || rcu_is_cpu_rrupt_from_idle() ||
++           (IS_ENABLED(CONFIG_PREEMPT_COUNT) &&
++            (preempt_count() == HARDIRQ_OFFSET))) {
+               /*
+                * Get here if this CPU took its interrupt from user
+-               * mode or from the idle loop, and if this is not a
+-               * nested interrupt.  In this case, the CPU is in
+-               * a quiescent state, so note it.
++               * mode, from the idle loop without this being a nested
++               * interrupt, or while not holding the task preempt count
++               * (with PREEMPT_COUNT=y). In this case, the CPU is in a
++               * quiescent state, so note it.
+                *
+                * No memory barrier is required here because rcu_qs()
+                * references only CPU-local variables that other CPUs
+-- 
+2.39.5
+
diff --git a/queue-5.4/regulator-ad5398-add-device-tree-support.patch b/queue-5.4/regulator-ad5398-add-device-tree-support.patch
new file mode 100644 (file)
index 0000000..c2d6fc5
--- /dev/null
@@ -0,0 +1,63 @@
+From 3caa9123013d5231e5ab3ed0035f037e997d8cd9 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 28 Jan 2025 17:31:43 +0000
+Subject: regulator: ad5398: Add device tree support
+
+From: Isaac Scott <isaac.scott@ideasonboard.com>
+
+[ Upstream commit 5a6a461079decea452fdcae955bccecf92e07e97 ]
+
+Previously, the ad5398 driver used only platform_data, which is
+deprecated in favour of device tree. This caused the AD5398 to fail to
+probe as it could not load its init_data. If the AD5398 has a device
+tree node, pull the init_data from there using
+of_get_regulator_init_data.
+
+Signed-off-by: Isaac Scott <isaac.scott@ideasonboard.com>
+Acked-by: Michael Hennerich <michael.hennerich@analog.com>
+Link: https://patch.msgid.link/20250128173143.959600-4-isaac.scott@ideasonboard.com
+Signed-off-by: Mark Brown <broonie@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/regulator/ad5398.c | 12 +++++++++---
+ 1 file changed, 9 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/regulator/ad5398.c b/drivers/regulator/ad5398.c
+index 75f432f61e919..f4d6e62bd963e 100644
+--- a/drivers/regulator/ad5398.c
++++ b/drivers/regulator/ad5398.c
+@@ -14,6 +14,7 @@
+ #include <linux/platform_device.h>
+ #include <linux/regulator/driver.h>
+ #include <linux/regulator/machine.h>
++#include <linux/regulator/of_regulator.h>
+ #define AD5398_CURRENT_EN_MASK        0x8000
+@@ -221,15 +222,20 @@ static int ad5398_probe(struct i2c_client *client,
+       const struct ad5398_current_data_format *df =
+                       (struct ad5398_current_data_format *)id->driver_data;
+-      if (!init_data)
+-              return -EINVAL;
+-
+       chip = devm_kzalloc(&client->dev, sizeof(*chip), GFP_KERNEL);
+       if (!chip)
+               return -ENOMEM;
+       config.dev = &client->dev;
++      if (client->dev.of_node)
++              init_data = of_get_regulator_init_data(&client->dev,
++                                                     client->dev.of_node,
++                                                     &ad5398_reg);
++      if (!init_data)
++              return -EINVAL;
++
+       config.init_data = init_data;
++      config.of_node = client->dev.of_node;
+       config.driver_data = chip;
+       chip->client = client;
+-- 
+2.39.5
+
diff --git a/queue-5.4/rtc-ds1307-stop-disabling-alarms-on-probe.patch b/queue-5.4/rtc-ds1307-stop-disabling-alarms-on-probe.patch
new file mode 100644 (file)
index 0000000..da8f4d2
--- /dev/null
@@ -0,0 +1,38 @@
+From 13472980e6acb328352904bcecb0aea64723323b Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 3 Mar 2025 23:37:44 +0100
+Subject: rtc: ds1307: stop disabling alarms on probe
+
+From: Alexandre Belloni <alexandre.belloni@bootlin.com>
+
+[ Upstream commit dcec12617ee61beed928e889607bf37e145bf86b ]
+
+It is a bad practice to disable alarms on probe or remove as this will
+prevent alarms across reboots.
+
+Link: https://lore.kernel.org/r/20250303223744.1135672-1-alexandre.belloni@bootlin.com
+Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/rtc/rtc-ds1307.c | 4 +---
+ 1 file changed, 1 insertion(+), 3 deletions(-)
+
+diff --git a/drivers/rtc/rtc-ds1307.c b/drivers/rtc/rtc-ds1307.c
+index 99b93f56a2d50..40532a36ae67c 100644
+--- a/drivers/rtc/rtc-ds1307.c
++++ b/drivers/rtc/rtc-ds1307.c
+@@ -1680,10 +1680,8 @@ static int ds1307_probe(struct i2c_client *client,
+                * For some variants, be sure alarms can trigger when we're
+                * running on Vbackup (BBSQI/BBSQW)
+                */
+-              if (want_irq || ds1307_can_wakeup_device) {
++              if (want_irq || ds1307_can_wakeup_device)
+                       regs[0] |= DS1337_BIT_INTCN | chip->bbsqi_bit;
+-                      regs[0] &= ~(DS1337_BIT_A2IE | DS1337_BIT_A1IE);
+-              }
+               regmap_write(ds1307->regmap, DS1337_REG_CONTROL,
+                            regs[0]);
+-- 
+2.39.5
+
diff --git a/queue-5.4/scsi-lpfc-handle-duplicate-d_ids-in-ndlp-search-by-d.patch b/queue-5.4/scsi-lpfc-handle-duplicate-d_ids-in-ndlp-search-by-d.patch
new file mode 100644 (file)
index 0000000..b7cccd1
--- /dev/null
@@ -0,0 +1,66 @@
+From a127f0110dbaa0d56bf07fe3512c832809563851 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 30 Jan 2025 16:05:22 -0800
+Subject: scsi: lpfc: Handle duplicate D_IDs in ndlp search-by D_ID routine
+
+From: Justin Tee <justin.tee@broadcom.com>
+
+[ Upstream commit 56c3d809b7b450379162d0b8a70bbe71ab8db706 ]
+
+After a port swap between separate fabrics, there may be multiple nodes in
+the vport's fc_nodes list with the same fabric well known address.
+Duplication is temporary and eventually resolves itself after dev_loss_tmo
+expires, but nameserver queries may still occur before dev_loss_tmo.  This
+possibly results in returning stale fabric ndlp objects.  Fix by adding an
+nlp_state check to ensure the ndlp search routine returns the correct newer
+allocated ndlp fabric object.
+
+Signed-off-by: Justin Tee <justin.tee@broadcom.com>
+Link: https://lore.kernel.org/r/20250131000524.163662-5-justintee8345@gmail.com
+Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/scsi/lpfc/lpfc_hbadisc.c | 17 ++++++++++++-----
+ 1 file changed, 12 insertions(+), 5 deletions(-)
+
+diff --git a/drivers/scsi/lpfc/lpfc_hbadisc.c b/drivers/scsi/lpfc/lpfc_hbadisc.c
+index 0abce779fbb13..3238222b89fa8 100644
+--- a/drivers/scsi/lpfc/lpfc_hbadisc.c
++++ b/drivers/scsi/lpfc/lpfc_hbadisc.c
+@@ -5357,6 +5357,7 @@ static struct lpfc_nodelist *
+ __lpfc_findnode_did(struct lpfc_vport *vport, uint32_t did)
+ {
+       struct lpfc_nodelist *ndlp;
++      struct lpfc_nodelist *np = NULL;
+       uint32_t data1;
+       list_for_each_entry(ndlp, &vport->fc_nodes, nlp_listp) {
+@@ -5371,14 +5372,20 @@ __lpfc_findnode_did(struct lpfc_vport *vport, uint32_t did)
+                                        ndlp, ndlp->nlp_DID,
+                                        ndlp->nlp_flag, data1, ndlp->nlp_rpi,
+                                        ndlp->active_rrqs_xri_bitmap);
+-                      return ndlp;
++
++                      /* Check for new or potentially stale node */
++                      if (ndlp->nlp_state != NLP_STE_UNUSED_NODE)
++                              return ndlp;
++                      np = ndlp;
+               }
+       }
+-      /* FIND node did <did> NOT FOUND */
+-      lpfc_printf_vlog(vport, KERN_INFO, LOG_NODE,
+-                       "0932 FIND node did x%x NOT FOUND.\n", did);
+-      return NULL;
++      if (!np)
++              /* FIND node did <did> NOT FOUND */
++              lpfc_printf_vlog(vport, KERN_INFO, LOG_NODE,
++                               "0932 FIND node did x%x NOT FOUND.\n", did);
++
++      return np;
+ }
+ struct lpfc_nodelist *
+-- 
+2.39.5
+
diff --git a/queue-5.4/scsi-mpt3sas-send-a-diag-reset-if-target-reset-fails.patch b/queue-5.4/scsi-mpt3sas-send-a-diag-reset-if-target-reset-fails.patch
new file mode 100644 (file)
index 0000000..fe27a35
--- /dev/null
@@ -0,0 +1,62 @@
+From dce8c4f8054eeb291c8c7e12fccebab374acd78a Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 12 Feb 2025 17:26:55 -0800
+Subject: scsi: mpt3sas: Send a diag reset if target reset fails
+
+From: Shivasharan S <shivasharan.srikanteshwara@broadcom.com>
+
+[ Upstream commit 5612d6d51ed2634a033c95de2edec7449409cbb9 ]
+
+When an IOCTL times out and driver issues a target reset, if firmware
+fails the task management elevate the recovery by issuing a diag reset to
+controller.
+
+Signed-off-by: Shivasharan S <shivasharan.srikanteshwara@broadcom.com>
+Link: https://lore.kernel.org/r/1739410016-27503-5-git-send-email-shivasharan.srikanteshwara@broadcom.com
+Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/scsi/mpt3sas/mpt3sas_ctl.c | 12 ++++++++++--
+ 1 file changed, 10 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/scsi/mpt3sas/mpt3sas_ctl.c b/drivers/scsi/mpt3sas/mpt3sas_ctl.c
+index 1c5c172315de4..377e941d93e38 100644
+--- a/drivers/scsi/mpt3sas/mpt3sas_ctl.c
++++ b/drivers/scsi/mpt3sas/mpt3sas_ctl.c
+@@ -662,6 +662,7 @@ _ctl_do_mpt_command(struct MPT3SAS_ADAPTER *ioc, struct mpt3_ioctl_command karg,
+       size_t data_in_sz = 0;
+       long ret;
+       u16 device_handle = MPT3SAS_INVALID_DEVICE_HANDLE;
++      int tm_ret;
+       issue_reset = 0;
+@@ -1094,16 +1095,23 @@ _ctl_do_mpt_command(struct MPT3SAS_ADAPTER *ioc, struct mpt3_ioctl_command karg,
+                       if (pcie_device && (!ioc->tm_custom_handling) &&
+                           (!(mpt3sas_scsih_is_pcie_scsi_device(
+                           pcie_device->device_info))))
+-                              mpt3sas_scsih_issue_locked_tm(ioc,
++                              tm_ret = mpt3sas_scsih_issue_locked_tm(ioc,
+                                 le16_to_cpu(mpi_request->FunctionDependent1),
+                                 0, MPI2_SCSITASKMGMT_TASKTYPE_TARGET_RESET, 0,
+                                 0, pcie_device->reset_timeout,
+                       MPI26_SCSITASKMGMT_MSGFLAGS_PROTOCOL_LVL_RST_PCIE);
+                       else
+-                              mpt3sas_scsih_issue_locked_tm(ioc,
++                              tm_ret = mpt3sas_scsih_issue_locked_tm(ioc,
+                                 le16_to_cpu(mpi_request->FunctionDependent1),
+                                 0, MPI2_SCSITASKMGMT_TASKTYPE_TARGET_RESET, 0,
+                                 0, 30, MPI2_SCSITASKMGMT_MSGFLAGS_LINK_RESET);
++
++                      if (tm_ret != SUCCESS) {
++                              ioc_info(ioc,
++                                       "target reset failed, issue hard reset: handle (0x%04x)\n",
++                                       le16_to_cpu(mpi_request->FunctionDependent1));
++                              mpt3sas_base_hard_reset_handler(ioc, FORCE_BIG_HAMMER);
++                      }
+               } else
+                       mpt3sas_base_hard_reset_handler(ioc, FORCE_BIG_HAMMER);
+       }
+-- 
+2.39.5
+
diff --git a/queue-5.4/scsi-st-erase-does-not-change-tape-location.patch b/queue-5.4/scsi-st-erase-does-not-change-tape-location.patch
new file mode 100644 (file)
index 0000000..5360047
--- /dev/null
@@ -0,0 +1,38 @@
+From e19e56480f0b6b169898099552c2e3b56cd529f5 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 11 Mar 2025 13:25:15 +0200
+Subject: scsi: st: ERASE does not change tape location
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Kai Mäkisara <Kai.Makisara@kolumbus.fi>
+
+[ Upstream commit ad77cebf97bd42c93ab4e3bffd09f2b905c1959a ]
+
+The SCSI ERASE command erases from the current position onwards.  Don't
+clear the position variables.
+
+Signed-off-by: Kai Mäkisara <Kai.Makisara@kolumbus.fi>
+Link: https://lore.kernel.org/r/20250311112516.5548-3-Kai.Makisara@kolumbus.fi
+Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/scsi/st.c | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/drivers/scsi/st.c b/drivers/scsi/st.c
+index 8f927851ccf86..3f798f87e8d98 100644
+--- a/drivers/scsi/st.c
++++ b/drivers/scsi/st.c
+@@ -2889,7 +2889,6 @@ static int st_int_ioctl(struct scsi_tape *STp, unsigned int cmd_in, unsigned lon
+                       timeout = STp->long_timeout * 8;
+               DEBC_printk(STp, "Erasing tape.\n");
+-              fileno = blkno = at_sm = 0;
+               break;
+       case MTSETBLK:          /* Set block length */
+       case MTSETDENSITY:      /* Set tape density */
+-- 
+2.39.5
+
diff --git a/queue-5.4/scsi-st-restore-some-drive-settings-after-reset.patch b/queue-5.4/scsi-st-restore-some-drive-settings-after-reset.patch
new file mode 100644 (file)
index 0000000..aca246e
--- /dev/null
@@ -0,0 +1,112 @@
+From 5fd047e73aa031cd3d6b1b72e5e6f449f23ab6f2 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 20 Jan 2025 21:49:22 +0200
+Subject: scsi: st: Restore some drive settings after reset
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Kai Mäkisara <Kai.Makisara@kolumbus.fi>
+
+[ Upstream commit 7081dc75df79696d8322d01821c28e53416c932c ]
+
+Some of the allowed operations put the tape into a known position to
+continue operation assuming only the tape position has changed.  But reset
+sets partition, density and block size to drive default values. These
+should be restored to the values before reset.
+
+Normally the current block size and density are stored by the drive.  If
+the settings have been changed, the changed values have to be saved by the
+driver across reset.
+
+Signed-off-by: Kai Mäkisara <Kai.Makisara@kolumbus.fi>
+Link: https://lore.kernel.org/r/20250120194925.44432-2-Kai.Makisara@kolumbus.fi
+Reviewed-by: John Meneghini <jmeneghi@redhat.com>
+Tested-by: John Meneghini <jmeneghi@redhat.com>
+Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/scsi/st.c | 24 +++++++++++++++++++++---
+ drivers/scsi/st.h |  2 ++
+ 2 files changed, 23 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/scsi/st.c b/drivers/scsi/st.c
+index 3f798f87e8d98..d4aef346bfee3 100644
+--- a/drivers/scsi/st.c
++++ b/drivers/scsi/st.c
+@@ -949,7 +949,6 @@ static void reset_state(struct scsi_tape *STp)
+               STp->partition = find_partition(STp);
+               if (STp->partition < 0)
+                       STp->partition = 0;
+-              STp->new_partition = STp->partition;
+       }
+ }
\f
+@@ -2921,14 +2920,17 @@ static int st_int_ioctl(struct scsi_tape *STp, unsigned int cmd_in, unsigned lon
+               if (cmd_in == MTSETDENSITY) {
+                       (STp->buffer)->b_data[4] = arg;
+                       STp->density_changed = 1;       /* At least we tried ;-) */
++                      STp->changed_density = arg;
+               } else if (cmd_in == SET_DENS_AND_BLK)
+                       (STp->buffer)->b_data[4] = arg >> 24;
+               else
+                       (STp->buffer)->b_data[4] = STp->density;
+               if (cmd_in == MTSETBLK || cmd_in == SET_DENS_AND_BLK) {
+                       ltmp = arg & MT_ST_BLKSIZE_MASK;
+-                      if (cmd_in == MTSETBLK)
++                      if (cmd_in == MTSETBLK) {
+                               STp->blksize_changed = 1; /* At least we tried ;-) */
++                              STp->changed_blksize = arg;
++                      }
+               } else
+                       ltmp = STp->block_size;
+               (STp->buffer)->b_data[9] = (ltmp >> 16);
+@@ -3629,9 +3631,25 @@ static long st_ioctl(struct file *file, unsigned int cmd_in, unsigned long arg)
+                               retval = (-EIO);
+                               goto out;
+                       }
+-                      reset_state(STp);
++                      reset_state(STp); /* Clears pos_unknown */
+                       /* remove this when the midlevel properly clears was_reset */
+                       STp->device->was_reset = 0;
++
++                      /* Fix the device settings after reset, ignore errors */
++                      if (mtc.mt_op == MTREW || mtc.mt_op == MTSEEK ||
++                              mtc.mt_op == MTEOM) {
++                              if (STp->can_partitions) {
++                                      /* STp->new_partition contains the
++                                       *  latest partition set
++                                       */
++                                      STp->partition = 0;
++                                      switch_partition(STp);
++                              }
++                              if (STp->density_changed)
++                                      st_int_ioctl(STp, MTSETDENSITY, STp->changed_density);
++                              if (STp->blksize_changed)
++                                      st_int_ioctl(STp, MTSETBLK, STp->changed_blksize);
++                      }
+               }
+               if (mtc.mt_op != MTNOP && mtc.mt_op != MTSETBLK &&
+diff --git a/drivers/scsi/st.h b/drivers/scsi/st.h
+index 95d2e7a7988de..c9947abb0a451 100644
+--- a/drivers/scsi/st.h
++++ b/drivers/scsi/st.h
+@@ -168,12 +168,14 @@ struct scsi_tape {
+       unsigned char compression_changed;
+       unsigned char drv_buffer;
+       unsigned char density;
++      unsigned char changed_density;
+       unsigned char door_locked;
+       unsigned char autorew_dev;   /* auto-rewind device */
+       unsigned char rew_at_close;  /* rewind necessary at close */
+       unsigned char inited;
+       unsigned char cleaning_req;  /* cleaning requested? */
+       int block_size;
++      int changed_blksize;
+       int min_block;
+       int max_block;
+       int recover_count;     /* From tape opening */
+-- 
+2.39.5
+
diff --git a/queue-5.4/scsi-st-tighten-the-page-format-heuristics-with-mode.patch b/queue-5.4/scsi-st-tighten-the-page-format-heuristics-with-mode.patch
new file mode 100644 (file)
index 0000000..eda96ec
--- /dev/null
@@ -0,0 +1,47 @@
+From e9cf49f1775b04ee743fe84e7747384538ab3d77 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 11 Mar 2025 13:25:16 +0200
+Subject: scsi: st: Tighten the page format heuristics with MODE SELECT
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Kai Mäkisara <Kai.Makisara@kolumbus.fi>
+
+[ Upstream commit 8db816c6f176321e42254badd5c1a8df8bfcfdb4 ]
+
+In the days when SCSI-2 was emerging, some drives did claim SCSI-2 but did
+not correctly implement it. The st driver first tries MODE SELECT with the
+page format bit set to set the block descriptor.  If not successful, the
+non-page format is tried.
+
+The test only tests the sense code and this triggers also from illegal
+parameter in the parameter list. The test is limited to "old" devices and
+made more strict to remove false alarms.
+
+Signed-off-by: Kai Mäkisara <Kai.Makisara@kolumbus.fi>
+Link: https://lore.kernel.org/r/20250311112516.5548-4-Kai.Makisara@kolumbus.fi
+Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/scsi/st.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/scsi/st.c b/drivers/scsi/st.c
+index 2b5e3e2ba3b8b..8f927851ccf86 100644
+--- a/drivers/scsi/st.c
++++ b/drivers/scsi/st.c
+@@ -3076,7 +3076,9 @@ static int st_int_ioctl(struct scsi_tape *STp, unsigned int cmd_in, unsigned lon
+                          cmd_in == MTSETDRVBUFFER ||
+                          cmd_in == SET_DENS_AND_BLK) {
+                       if (cmdstatp->sense_hdr.sense_key == ILLEGAL_REQUEST &&
+-                          !(STp->use_pf & PF_TESTED)) {
++                              cmdstatp->sense_hdr.asc == 0x24 &&
++                              (STp->device)->scsi_level <= SCSI_2 &&
++                              !(STp->use_pf & PF_TESTED)) {
+                               /* Try the other possible state of Page Format if not
+                                  already tried */
+                               STp->use_pf = (STp->use_pf ^ USE_PF) | PF_TESTED;
+-- 
+2.39.5
+
diff --git a/queue-5.4/scsi-target-iscsi-fix-timeout-on-deleted-connection.patch b/queue-5.4/scsi-target-iscsi-fix-timeout-on-deleted-connection.patch
new file mode 100644 (file)
index 0000000..888654f
--- /dev/null
@@ -0,0 +1,57 @@
+From 4a1af2594c40b7dc7395031530dc61897e80304e Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 24 Dec 2024 13:17:57 +0300
+Subject: scsi: target: iscsi: Fix timeout on deleted connection
+
+From: Dmitry Bogdanov <d.bogdanov@yadro.com>
+
+[ Upstream commit 7f533cc5ee4c4436cee51dc58e81dfd9c3384418 ]
+
+NOPIN response timer may expire on a deleted connection and crash with
+such logs:
+
+Did not receive response to NOPIN on CID: 0, failing connection for I_T Nexus (null),i,0x00023d000125,iqn.2017-01.com.iscsi.target,t,0x3d
+
+BUG: Kernel NULL pointer dereference on read at 0x00000000
+NIP  strlcpy+0x8/0xb0
+LR iscsit_fill_cxn_timeout_err_stats+0x5c/0xc0 [iscsi_target_mod]
+Call Trace:
+ iscsit_handle_nopin_response_timeout+0xfc/0x120 [iscsi_target_mod]
+ call_timer_fn+0x58/0x1f0
+ run_timer_softirq+0x740/0x860
+ __do_softirq+0x16c/0x420
+ irq_exit+0x188/0x1c0
+ timer_interrupt+0x184/0x410
+
+That is because nopin response timer may be re-started on nopin timer
+expiration.
+
+Stop nopin timer before stopping the nopin response timer to be sure
+that no one of them will be re-started.
+
+Signed-off-by: Dmitry Bogdanov <d.bogdanov@yadro.com>
+Link: https://lore.kernel.org/r/20241224101757.32300-1-d.bogdanov@yadro.com
+Reviewed-by: Maurizio Lombardi <mlombard@redhat.com>
+Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/target/iscsi/iscsi_target.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/target/iscsi/iscsi_target.c b/drivers/target/iscsi/iscsi_target.c
+index ab2f0ceb1e23b..b610c99c9c2dc 100644
+--- a/drivers/target/iscsi/iscsi_target.c
++++ b/drivers/target/iscsi/iscsi_target.c
+@@ -4168,8 +4168,8 @@ int iscsit_close_connection(
+       spin_unlock(&iscsit_global->ts_bitmap_lock);
+       iscsit_stop_timers_for_cmds(conn);
+-      iscsit_stop_nopin_response_timer(conn);
+       iscsit_stop_nopin_timer(conn);
++      iscsit_stop_nopin_response_timer(conn);
+       if (conn->conn_transport->iscsit_wait_conn)
+               conn->conn_transport->iscsit_wait_conn(conn);
+-- 
+2.39.5
+
index 5bb37eed01530578d45217003c6a0c6a1e7c451f..58c3b62e2f34e0c63e0d5674827692c6b46ae429 100644 (file)
@@ -83,3 +83,89 @@ clocksource-i8253-use-raw_spinlock_irqsave-in-clockevent_i8253_disable.patch
 input-synaptics-enable-smbus-for-hp-elitebook-850-g1.patch
 input-synaptics-enable-intertouch-on-tuxedo-infinitybook-pro-14-v5.patch
 openvswitch-fix-unsafe-attribute-parsing-in-output_userspace.patch
+scsi-target-iscsi-fix-timeout-on-deleted-connection.patch
+dma-mapping-avoid-potential-unused-data-compilation-.patch
+cgroup-fix-compilation-issue-due-to-cgroup_mutex-not.patch
+kconfig-merge_config-use-an-empty-file-as-initfile.patch
+mailbox-use-error-ret-code-of-of_parse_phandle_with_.patch
+fbdev-fsl-diu-fb-add-missing-device_remove_file.patch
+fbdev-core-tileblit-implement-missing-margin-clearin.patch
+nfsv4-treat-enetunreach-errors-as-fatal-for-state-re.patch
+sunrpc-rpc_clnt_set_transport-must-not-change-the-au.patch
+exit-fix-the-usage-of-delay_group_leader-exit_code-i.patch
+dql-fix-dql-limit-value-when-reset.patch
+tools-build-don-t-pass-test-log-files-to-linker.patch
+pnfs-flexfiles-report-enetdown-as-a-connection-error.patch
+libnvdimm-labels-fix-divide-error-in-nd_label_data_i.patch
+mmc-host-wait-for-vdd-to-settle-on-card-power-off.patch
+i2c-pxa-fix-call-balance-of-i2c-clk-handling-routine.patch
+btrfs-avoid-linker-error-in-btrfs_find_create_tree_b.patch
+btrfs-send-return-enametoolong-when-attempting-a-pat.patch
+um-store-full-csgsfs-and-ss-register-from-mcontext.patch
+um-update-min_low_pfn-to-match-changes-in-uml_reserv.patch
+ext4-reorder-capability-check-last.patch
+scsi-st-tighten-the-page-format-heuristics-with-mode.patch
+scsi-st-erase-does-not-change-tape-location.patch
+kbuild-fix-argument-parsing-in-scripts-config.patch
+dm-restrict-dm-device-size-to-2-63-512-bytes.patch
+xen-add-support-for-xenserver-6.1-platform-device.patch
+posix-timers-add-cond_resched-to-posix_timer_add-sea.patch
+netfilter-conntrack-bound-nf_conntrack-sysctl-writes.patch
+mmc-sdhci-disable-sd-card-clock-before-changing-para.patch
+powerpc-prom_init-fixup-missing-size-cells-on-powerb.patch
+rtc-ds1307-stop-disabling-alarms-on-probe.patch
+ieee802154-ca8210-use-proper-setters-and-getters-for.patch
+arm-tegra-switch-dsi-b-clock-parent-to-plld-on-tegra.patch
+media-c8sectpfe-call-of_node_put-i2c_bus-only-once-i.patch
+dm-cache-prevent-bug_on-by-blocking-retries-on-faile.patch
+orangefs-do-not-truncate-file-size.patch
+media-cx231xx-set-device_caps-for-417.patch
+pinctrl-bcm281xx-use-unsigned-int-instead-of-bare-un.patch
+net-pktgen-fix-mpls-maximum-labels-list-parsing.patch
+x86-bugs-make-spectre-user-default-depend-on-mitigat.patch
+hwmon-gpio-fan-add-missing-mutex-locks.patch
+drm-mediatek-mtk_dpi-add-checks-for-reg_h_fre_con-ex.patch
+fpga-altera-cvp-increase-credit-timeout.patch
+net-mlx5-avoid-report-two-health-errors-on-same-synd.patch
+drm-amdkfd-kfd-release_work-possible-circular-lockin.patch
+net-xgene-v2-remove-incorrect-acpi_ptr-annotation.patch
+bonding-report-duplicate-mac-address-in-all-situatio.patch
+x86-nmi-add-an-emergency-handler-in-nmi_desc-use-it-.patch
+cpuidle-menu-avoid-discarding-useful-information.patch
+mips-use-arch-specific-syscall-name-match-function.patch
+mips-pm-cps-use-per-cpu-variables-as-per-cpu-not-per.patch
+scsi-mpt3sas-send-a-diag-reset-if-target-reset-fails.patch
+wifi-rtw88-fix-rtw_init_ht_cap-for-rtl8814au.patch
+net-pktgen-fix-access-outside-of-user-given-buffer-i.patch
+edac-ie31200-work-around-false-positive-build-warnin.patch
+pci-fix-old_size-lower-bound-in-calculate_iosize-too.patch
+acpi-hed-always-initialize-before-evged.patch
+net-mlx5-modify-lsb-bitmask-in-temperature-event-to-.patch
+net-mlx5-apply-rate-limiting-to-high-temperature-war.patch
+asoc-ops-enforce-platform-maximum-on-initial-value.patch
+pinctrl-devicetree-do-not-goto-err-when-probing-hogs.patch
+smack-recognize-ipv4-cipso-w-o-categories.patch
+net-mlx4_core-avoid-impossible-mlx4_db_alloc-order-v.patch
+phy-core-don-t-require-set_mode-callback-for-phy_get.patch
+net-mlx5-extend-ethtool-loopback-selftest-to-support.patch
+net-mlx5e-set-the-tx_queue_len-for-pfifo_fast.patch
+net-mlx5e-reduce-rep-rxq-depth-to-256-for-ecpf.patch
+ip-fib_rules-fetch-net-from-fib_rule-in-fib-46-_rule.patch
+hwmon-xgene-hwmon-use-appropriate-type-for-the-laten.patch
+vxlan-annotate-fdb-data-races.patch
+rcu-handle-quiescent-states-for-preempt_rcu-n-preemp.patch
+rcu-fix-header-guard-for-rcu_all_qs.patch
+scsi-lpfc-handle-duplicate-d_ids-in-ndlp-search-by-d.patch
+scsi-st-restore-some-drive-settings-after-reset.patch
+hid-usbkbd-fix-the-bit-shift-number-for-led_kana.patch
+bpftool-fix-readlink-usage-in-get_fd_type.patch
+wifi-rtw88-don-t-use-static-local-variable-in-rtw882.patch
+regulator-ad5398-add-device-tree-support.patch
+drm-atomic-clarify-the-rules-around-drm_atomic_state.patch
+drm-add-valid-clones-check.patch
+pinctrl-meson-define-the-pull-up-down-resistor-value.patch
+asoc-intel-bytcr_rt5640-add-dmi-quirk-for-acer-aspir.patch
+nvmet-tcp-don-t-restore-null-sk_state_change.patch
+btrfs-correct-the-order-of-prelim_ref-arguments-in-b.patch
+xenbus-allow-pvh-dom0-a-non-local-xenstore.patch
+__legitimize_mnt-check-for-mnt_sync_umount-should-be.patch
diff --git a/queue-5.4/smack-recognize-ipv4-cipso-w-o-categories.patch b/queue-5.4/smack-recognize-ipv4-cipso-w-o-categories.patch
new file mode 100644 (file)
index 0000000..c80d585
--- /dev/null
@@ -0,0 +1,75 @@
+From 52f0e895e5aee10a97f751d5c4a64170d8bdbce4 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 17 Jan 2025 02:40:34 +0300
+Subject: smack: recognize ipv4 CIPSO w/o categories
+
+From: Konstantin Andreev <andreev@swemel.ru>
+
+[ Upstream commit a158a937d864d0034fea14913c1f09c6d5f574b8 ]
+
+If SMACK label has CIPSO representation w/o categories, e.g.:
+
+| # cat /smack/cipso2
+| foo  10
+| @ 250/2
+| ...
+
+then SMACK does not recognize such CIPSO in input ipv4 packets
+and substitues '*' label instead. Audit records may look like
+
+| lsm=SMACK fn=smack_socket_sock_rcv_skb action=denied
+|   subject="*" object="_" requested=w pid=0 comm="swapper/1" ...
+
+This happens in two steps:
+
+1) security/smack/smackfs.c`smk_set_cipso
+   does not clear NETLBL_SECATTR_MLS_CAT
+   from (struct smack_known *)skp->smk_netlabel.flags
+   on assigning CIPSO w/o categories:
+
+| rcu_assign_pointer(skp->smk_netlabel.attr.mls.cat, ncats.attr.mls.cat);
+| skp->smk_netlabel.attr.mls.lvl = ncats.attr.mls.lvl;
+
+2) security/smack/smack_lsm.c`smack_from_secattr
+   can not match skp->smk_netlabel with input packet's
+   struct netlbl_lsm_secattr *sap
+   because sap->flags have not NETLBL_SECATTR_MLS_CAT (what is correct)
+   but skp->smk_netlabel.flags have (what is incorrect):
+
+| if ((sap->flags & NETLBL_SECATTR_MLS_CAT) == 0) {
+|      if ((skp->smk_netlabel.flags &
+|               NETLBL_SECATTR_MLS_CAT) == 0)
+|              found = 1;
+|      break;
+| }
+
+This commit sets/clears NETLBL_SECATTR_MLS_CAT in
+skp->smk_netlabel.flags according to the presense of CIPSO categories.
+The update of smk_netlabel is not atomic, so input packets processing
+still may be incorrect during short time while update proceeds.
+
+Signed-off-by: Konstantin Andreev <andreev@swemel.ru>
+Signed-off-by: Casey Schaufler <casey@schaufler-ca.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ security/smack/smackfs.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/security/smack/smackfs.c b/security/smack/smackfs.c
+index ddb0a292802ef..526598b40b13c 100644
+--- a/security/smack/smackfs.c
++++ b/security/smack/smackfs.c
+@@ -921,6 +921,10 @@ static ssize_t smk_set_cipso(struct file *file, const char __user *buf,
+       if (rc >= 0) {
+               old_cat = skp->smk_netlabel.attr.mls.cat;
+               rcu_assign_pointer(skp->smk_netlabel.attr.mls.cat, ncats.attr.mls.cat);
++              if (ncats.attr.mls.cat)
++                      skp->smk_netlabel.flags |= NETLBL_SECATTR_MLS_CAT;
++              else
++                      skp->smk_netlabel.flags &= ~(u32)NETLBL_SECATTR_MLS_CAT;
+               skp->smk_netlabel.attr.mls.lvl = ncats.attr.mls.lvl;
+               synchronize_rcu();
+               netlbl_catmap_free(old_cat);
+-- 
+2.39.5
+
diff --git a/queue-5.4/sunrpc-rpc_clnt_set_transport-must-not-change-the-au.patch b/queue-5.4/sunrpc-rpc_clnt_set_transport-must-not-change-the-au.patch
new file mode 100644 (file)
index 0000000..73acdf7
--- /dev/null
@@ -0,0 +1,38 @@
+From b47205c0ae42478f0b76fe53b061681b38d03652 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 24 Mar 2025 19:35:01 -0400
+Subject: SUNRPC: rpc_clnt_set_transport() must not change the autobind setting
+
+From: Trond Myklebust <trond.myklebust@hammerspace.com>
+
+[ Upstream commit bf9be373b830a3e48117da5d89bb6145a575f880 ]
+
+The autobind setting was supposed to be determined in rpc_create(),
+since commit c2866763b402 ("SUNRPC: use sockaddr + size when creating
+remote transport endpoints").
+
+Reviewed-by: Jeff Layton <jlayton@kernel.org>
+Reviewed-by: Benjamin Coddington <bcodding@redhat.com>
+Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ net/sunrpc/clnt.c | 3 ---
+ 1 file changed, 3 deletions(-)
+
+diff --git a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c
+index f689c7b0c304d..d67cb10a11db6 100644
+--- a/net/sunrpc/clnt.c
++++ b/net/sunrpc/clnt.c
+@@ -277,9 +277,6 @@ static struct rpc_xprt *rpc_clnt_set_transport(struct rpc_clnt *clnt,
+       old = rcu_dereference_protected(clnt->cl_xprt,
+                       lockdep_is_held(&clnt->cl_lock));
+-      if (!xprt_bound(xprt))
+-              clnt->cl_autobind = 1;
+-
+       clnt->cl_timeout = timeout;
+       rcu_assign_pointer(clnt->cl_xprt, xprt);
+       spin_unlock(&clnt->cl_lock);
+-- 
+2.39.5
+
diff --git a/queue-5.4/tools-build-don-t-pass-test-log-files-to-linker.patch b/queue-5.4/tools-build-don-t-pass-test-log-files-to-linker.patch
new file mode 100644 (file)
index 0000000..8cb10b7
--- /dev/null
@@ -0,0 +1,48 @@
+From a751d62f5875efd34fad95314940068c19c1ca98 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 11 Mar 2025 14:36:23 -0700
+Subject: tools/build: Don't pass test log files to linker
+
+From: Ian Rogers <irogers@google.com>
+
+[ Upstream commit 935e7cb5bb80106ff4f2fe39640f430134ef8cd8 ]
+
+Separate test log files from object files. Depend on test log output
+but don't pass to the linker.
+
+Reviewed-by: James Clark <james.clark@linaro.org>
+Signed-off-by: Ian Rogers <irogers@google.com>
+Link: https://lore.kernel.org/r/20250311213628.569562-2-irogers@google.com
+Signed-off-by: Namhyung Kim <namhyung@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ tools/build/Makefile.build | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+diff --git a/tools/build/Makefile.build b/tools/build/Makefile.build
+index cd72016c3cfa7..ab0630ae6be85 100644
+--- a/tools/build/Makefile.build
++++ b/tools/build/Makefile.build
+@@ -130,6 +130,10 @@ objprefix    := $(subst ./,,$(OUTPUT)$(dir)/)
+ obj-y        := $(addprefix $(objprefix),$(obj-y))
+ subdir-obj-y := $(addprefix $(objprefix),$(subdir-obj-y))
++# Separate out test log files from real build objects.
++test-y       := $(filter %_log, $(obj-y))
++obj-y        := $(filter-out %_log, $(obj-y))
++
+ # Final '$(obj)-in.o' object
+ in-target := $(objprefix)$(obj)-in.o
+@@ -140,7 +144,7 @@ $(subdir-y):
+ $(sort $(subdir-obj-y)): $(subdir-y) ;
+-$(in-target): $(obj-y) FORCE
++$(in-target): $(obj-y) $(test-y) FORCE
+       $(call rule_mkdir)
+       $(call if_changed,$(host)ld_multi)
+-- 
+2.39.5
+
diff --git a/queue-5.4/um-store-full-csgsfs-and-ss-register-from-mcontext.patch b/queue-5.4/um-store-full-csgsfs-and-ss-register-from-mcontext.patch
new file mode 100644 (file)
index 0000000..3ea7b76
--- /dev/null
@@ -0,0 +1,40 @@
+From c46db3b361f1f2363c57f4ec1e40bf8e97048ead Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 24 Feb 2025 19:18:19 +0100
+Subject: um: Store full CSGSFS and SS register from mcontext
+
+From: Benjamin Berg <benjamin@sipsolutions.net>
+
+[ Upstream commit cef721e0d53d2b64f2ba177c63a0dfdd7c0daf17 ]
+
+Doing this allows using registers as retrieved from an mcontext to be
+pushed to a process using PTRACE_SETREGS.
+
+It is not entirely clear to me why CSGSFS was masked. Doing so creates
+issues when using the mcontext as process state in seccomp and simply
+copying the register appears to work perfectly fine for ptrace.
+
+Signed-off-by: Benjamin Berg <benjamin@sipsolutions.net>
+Link: https://patch.msgid.link/20250224181827.647129-2-benjamin@sipsolutions.net
+Signed-off-by: Johannes Berg <johannes.berg@intel.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/x86/um/os-Linux/mcontext.c | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+diff --git a/arch/x86/um/os-Linux/mcontext.c b/arch/x86/um/os-Linux/mcontext.c
+index 49c3744cac371..81b9d1f9f4e68 100644
+--- a/arch/x86/um/os-Linux/mcontext.c
++++ b/arch/x86/um/os-Linux/mcontext.c
+@@ -26,7 +26,6 @@ void get_regs_from_mc(struct uml_pt_regs *regs, mcontext_t *mc)
+       COPY(RIP);
+       COPY2(EFLAGS, EFL);
+       COPY2(CS, CSGSFS);
+-      regs->gp[CS / sizeof(unsigned long)] &= 0xffff;
+-      regs->gp[CS / sizeof(unsigned long)] |= 3;
++      regs->gp[SS / sizeof(unsigned long)] = mc->gregs[REG_CSGSFS] >> 48;
+ #endif
+ }
+-- 
+2.39.5
+
diff --git a/queue-5.4/um-update-min_low_pfn-to-match-changes-in-uml_reserv.patch b/queue-5.4/um-update-min_low_pfn-to-match-changes-in-uml_reserv.patch
new file mode 100644 (file)
index 0000000..5e1394d
--- /dev/null
@@ -0,0 +1,36 @@
+From 063d7fab1479ea363b46bb35d947e269ee216f31 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 21 Feb 2025 12:18:55 +0800
+Subject: um: Update min_low_pfn to match changes in uml_reserved
+
+From: Tiwei Bie <tiwei.btw@antgroup.com>
+
+[ Upstream commit e82cf3051e6193f61e03898f8dba035199064d36 ]
+
+When uml_reserved is updated, min_low_pfn must also be updated
+accordingly. Otherwise, min_low_pfn will not accurately reflect
+the lowest available PFN.
+
+Signed-off-by: Tiwei Bie <tiwei.btw@antgroup.com>
+Link: https://patch.msgid.link/20250221041855.1156109-1-tiwei.btw@antgroup.com
+Signed-off-by: Johannes Berg <johannes.berg@intel.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/um/kernel/mem.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/arch/um/kernel/mem.c b/arch/um/kernel/mem.c
+index 417ff647fb377..06fb50218136d 100644
+--- a/arch/um/kernel/mem.c
++++ b/arch/um/kernel/mem.c
+@@ -49,6 +49,7 @@ void __init mem_init(void)
+       map_memory(brk_end, __pa(brk_end), uml_reserved - brk_end, 1, 1, 0);
+       memblock_free(__pa(brk_end), uml_reserved - brk_end);
+       uml_reserved = brk_end;
++      min_low_pfn = PFN_UP(__pa(uml_reserved));
+       /* this will put all low memory onto the freelists */
+       memblock_free_all();
+-- 
+2.39.5
+
diff --git a/queue-5.4/vxlan-annotate-fdb-data-races.patch b/queue-5.4/vxlan-annotate-fdb-data-races.patch
new file mode 100644 (file)
index 0000000..10cf34b
--- /dev/null
@@ -0,0 +1,144 @@
+From 47cf47f52d8515682c44a18bd68e5a869003d013 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 4 Feb 2025 16:55:42 +0200
+Subject: vxlan: Annotate FDB data races
+
+From: Ido Schimmel <idosch@nvidia.com>
+
+[ Upstream commit f6205f8215f12a96518ac9469ff76294ae7bd612 ]
+
+The 'used' and 'updated' fields in the FDB entry structure can be
+accessed concurrently by multiple threads, leading to reports such as
+[1]. Can be reproduced using [2].
+
+Suppress these reports by annotating these accesses using
+READ_ONCE() / WRITE_ONCE().
+
+[1]
+BUG: KCSAN: data-race in vxlan_xmit / vxlan_xmit
+
+write to 0xffff942604d263a8 of 8 bytes by task 286 on cpu 0:
+ vxlan_xmit+0xb29/0x2380
+ dev_hard_start_xmit+0x84/0x2f0
+ __dev_queue_xmit+0x45a/0x1650
+ packet_xmit+0x100/0x150
+ packet_sendmsg+0x2114/0x2ac0
+ __sys_sendto+0x318/0x330
+ __x64_sys_sendto+0x76/0x90
+ x64_sys_call+0x14e8/0x1c00
+ do_syscall_64+0x9e/0x1a0
+ entry_SYSCALL_64_after_hwframe+0x77/0x7f
+
+read to 0xffff942604d263a8 of 8 bytes by task 287 on cpu 2:
+ vxlan_xmit+0xadf/0x2380
+ dev_hard_start_xmit+0x84/0x2f0
+ __dev_queue_xmit+0x45a/0x1650
+ packet_xmit+0x100/0x150
+ packet_sendmsg+0x2114/0x2ac0
+ __sys_sendto+0x318/0x330
+ __x64_sys_sendto+0x76/0x90
+ x64_sys_call+0x14e8/0x1c00
+ do_syscall_64+0x9e/0x1a0
+ entry_SYSCALL_64_after_hwframe+0x77/0x7f
+
+value changed: 0x00000000fffbac6e -> 0x00000000fffbac6f
+
+Reported by Kernel Concurrency Sanitizer on:
+CPU: 2 UID: 0 PID: 287 Comm: mausezahn Not tainted 6.13.0-rc7-01544-gb4b270f11a02 #5
+Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.16.3-3.fc41 04/01/2014
+
+[2]
+ #!/bin/bash
+
+ set +H
+ echo whitelist > /sys/kernel/debug/kcsan
+ echo !vxlan_xmit > /sys/kernel/debug/kcsan
+
+ ip link add name vx0 up type vxlan id 10010 dstport 4789 local 192.0.2.1
+ bridge fdb add 00:11:22:33:44:55 dev vx0 self static dst 198.51.100.1
+ taskset -c 0 mausezahn vx0 -a own -b 00:11:22:33:44:55 -c 0 -q &
+ taskset -c 2 mausezahn vx0 -a own -b 00:11:22:33:44:55 -c 0 -q &
+
+Reviewed-by: Petr Machata <petrm@nvidia.com>
+Signed-off-by: Ido Schimmel <idosch@nvidia.com>
+Reviewed-by: Eric Dumazet <edumazet@google.com>
+Reviewed-by: Nikolay Aleksandrov <razor@blackwall.org>
+Link: https://patch.msgid.link/20250204145549.1216254-2-idosch@nvidia.com
+Signed-off-by: Jakub Kicinski <kuba@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/vxlan.c | 18 +++++++++---------
+ 1 file changed, 9 insertions(+), 9 deletions(-)
+
+diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c
+index ce11fb2b05561..7105ac37f341e 100644
+--- a/drivers/net/vxlan.c
++++ b/drivers/net/vxlan.c
+@@ -302,9 +302,9 @@ static int vxlan_fdb_info(struct sk_buff *skb, struct vxlan_dev *vxlan,
+           nla_put_u32(skb, NDA_IFINDEX, rdst->remote_ifindex))
+               goto nla_put_failure;
+-      ci.ndm_used      = jiffies_to_clock_t(now - fdb->used);
++      ci.ndm_used      = jiffies_to_clock_t(now - READ_ONCE(fdb->used));
+       ci.ndm_confirmed = 0;
+-      ci.ndm_updated   = jiffies_to_clock_t(now - fdb->updated);
++      ci.ndm_updated   = jiffies_to_clock_t(now - READ_ONCE(fdb->updated));
+       ci.ndm_refcnt    = 0;
+       if (nla_put(skb, NDA_CACHEINFO, sizeof(ci), &ci))
+@@ -510,8 +510,8 @@ static struct vxlan_fdb *vxlan_find_mac(struct vxlan_dev *vxlan,
+       struct vxlan_fdb *f;
+       f = __vxlan_find_mac(vxlan, mac, vni);
+-      if (f && f->used != jiffies)
+-              f->used = jiffies;
++      if (f && READ_ONCE(f->used) != jiffies)
++              WRITE_ONCE(f->used, jiffies);
+       return f;
+ }
+@@ -942,12 +942,12 @@ static int vxlan_fdb_update_existing(struct vxlan_dev *vxlan,
+           !(f->flags & NTF_VXLAN_ADDED_BY_USER)) {
+               if (f->state != state) {
+                       f->state = state;
+-                      f->updated = jiffies;
++                      WRITE_ONCE(f->updated, jiffies);
+                       notify = 1;
+               }
+               if (f->flags != fdb_flags) {
+                       f->flags = fdb_flags;
+-                      f->updated = jiffies;
++                      WRITE_ONCE(f->updated, jiffies);
+                       notify = 1;
+               }
+       }
+@@ -974,7 +974,7 @@ static int vxlan_fdb_update_existing(struct vxlan_dev *vxlan,
+       }
+       if (ndm_flags & NTF_USE)
+-              f->used = jiffies;
++              WRITE_ONCE(f->used, jiffies);
+       if (notify) {
+               if (rd == NULL)
+@@ -1351,7 +1351,7 @@ static bool vxlan_snoop(struct net_device *dev,
+                                   src_mac, &rdst->remote_ip.sa, &src_ip->sa);
+               rdst->remote_ip = *src_ip;
+-              f->updated = jiffies;
++              WRITE_ONCE(f->updated, jiffies);
+               vxlan_fdb_notify(vxlan, f, rdst, RTM_NEWNEIGH, true, NULL);
+       } else {
+               u32 hash_index = fdb_head_index(vxlan, src_mac, vni);
+@@ -2748,7 +2748,7 @@ static void vxlan_cleanup(struct timer_list *t)
+                       if (f->flags & NTF_EXT_LEARNED)
+                               continue;
+-                      timeout = f->used + vxlan->cfg.age_interval * HZ;
++                      timeout = READ_ONCE(f->used) + vxlan->cfg.age_interval * HZ;
+                       if (time_before_eq(timeout, jiffies)) {
+                               netdev_dbg(vxlan->dev,
+                                          "garbage collect %pM\n",
+-- 
+2.39.5
+
diff --git a/queue-5.4/wifi-rtw88-don-t-use-static-local-variable-in-rtw882.patch b/queue-5.4/wifi-rtw88-don-t-use-static-local-variable-in-rtw882.patch
new file mode 100644 (file)
index 0000000..dfd9dcf
--- /dev/null
@@ -0,0 +1,78 @@
+From dfa809636ebcccd39a7f346a70fa312ae61faaf9 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun, 26 Jan 2025 16:03:11 +0200
+Subject: wifi: rtw88: Don't use static local variable in
+ rtw8822b_set_tx_power_index_by_rate
+
+From: Bitterblue Smith <rtl8821cerfe2@gmail.com>
+
+[ Upstream commit 00451eb3bec763f708e7e58326468c1e575e5a66 ]
+
+Some users want to plug two identical USB devices at the same time.
+This static variable could theoretically cause them to use incorrect
+TX power values.
+
+Move the variable to the caller and pass a pointer to it to
+rtw8822b_set_tx_power_index_by_rate().
+
+Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
+Acked-by: Ping-Ke Shih <pkshih@realtek.com>
+Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
+Link: https://patch.msgid.link/8a60f581-0ab5-4d98-a97d-dd83b605008f@gmail.com
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/wireless/realtek/rtw88/rtw8822b.c | 14 ++++++++------
+ 1 file changed, 8 insertions(+), 6 deletions(-)
+
+diff --git a/drivers/net/wireless/realtek/rtw88/rtw8822b.c b/drivers/net/wireless/realtek/rtw88/rtw8822b.c
+index 63abda3b0ebfc..004a85448ce99 100644
+--- a/drivers/net/wireless/realtek/rtw88/rtw8822b.c
++++ b/drivers/net/wireless/realtek/rtw88/rtw8822b.c
+@@ -864,11 +864,11 @@ static void rtw8822b_query_rx_desc(struct rtw_dev *rtwdev, u8 *rx_desc,
+ }
+ static void
+-rtw8822b_set_tx_power_index_by_rate(struct rtw_dev *rtwdev, u8 path, u8 rs)
++rtw8822b_set_tx_power_index_by_rate(struct rtw_dev *rtwdev, u8 path,
++                                  u8 rs, u32 *phy_pwr_idx)
+ {
+       struct rtw_hal *hal = &rtwdev->hal;
+       static const u32 offset_txagc[2] = {0x1d00, 0x1d80};
+-      static u32 phy_pwr_idx;
+       u8 rate, rate_idx, pwr_index, shift;
+       int j;
+@@ -876,12 +876,12 @@ rtw8822b_set_tx_power_index_by_rate(struct rtw_dev *rtwdev, u8 path, u8 rs)
+               rate = rtw_rate_section[rs][j];
+               pwr_index = hal->tx_pwr_tbl[path][rate];
+               shift = rate & 0x3;
+-              phy_pwr_idx |= ((u32)pwr_index << (shift * 8));
++              *phy_pwr_idx |= ((u32)pwr_index << (shift * 8));
+               if (shift == 0x3) {
+                       rate_idx = rate & 0xfc;
+                       rtw_write32(rtwdev, offset_txagc[path] + rate_idx,
+-                                  phy_pwr_idx);
+-                      phy_pwr_idx = 0;
++                                  *phy_pwr_idx);
++                      *phy_pwr_idx = 0;
+               }
+       }
+ }
+@@ -889,11 +889,13 @@ rtw8822b_set_tx_power_index_by_rate(struct rtw_dev *rtwdev, u8 path, u8 rs)
+ static void rtw8822b_set_tx_power_index(struct rtw_dev *rtwdev)
+ {
+       struct rtw_hal *hal = &rtwdev->hal;
++      u32 phy_pwr_idx = 0;
+       int rs, path;
+       for (path = 0; path < hal->rf_path_num; path++) {
+               for (rs = 0; rs < RTW_RATE_SECTION_MAX; rs++)
+-                      rtw8822b_set_tx_power_index_by_rate(rtwdev, path, rs);
++                      rtw8822b_set_tx_power_index_by_rate(rtwdev, path, rs,
++                                                          &phy_pwr_idx);
+       }
+ }
+-- 
+2.39.5
+
diff --git a/queue-5.4/wifi-rtw88-fix-rtw_init_ht_cap-for-rtl8814au.patch b/queue-5.4/wifi-rtw88-fix-rtw_init_ht_cap-for-rtl8814au.patch
new file mode 100644 (file)
index 0000000..b46fccf
--- /dev/null
@@ -0,0 +1,59 @@
+From 3f2d5957a6a60f8289d7dde4922f57c62552c00b Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 18 Feb 2025 01:30:22 +0200
+Subject: wifi: rtw88: Fix rtw_init_ht_cap() for RTL8814AU
+
+From: Bitterblue Smith <rtl8821cerfe2@gmail.com>
+
+[ Upstream commit c7eea1ba05ca5b0dbf77a27cf2e1e6e2fb3c0043 ]
+
+Set the RX mask and the highest RX rate according to the number of
+spatial streams the chip can receive. For RTL8814AU that is 3.
+
+Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
+Acked-by: Ping-Ke Shih <pkshih@realtek.com>
+Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
+Link: https://patch.msgid.link/4e786f50-ed1c-4387-8b28-e6ff00e35e81@gmail.com
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/wireless/realtek/rtw88/main.c | 17 ++++++-----------
+ 1 file changed, 6 insertions(+), 11 deletions(-)
+
+diff --git a/drivers/net/wireless/realtek/rtw88/main.c b/drivers/net/wireless/realtek/rtw88/main.c
+index 15c7a6fc37b90..e4d487468c4dd 100644
+--- a/drivers/net/wireless/realtek/rtw88/main.c
++++ b/drivers/net/wireless/realtek/rtw88/main.c
+@@ -766,6 +766,7 @@ static void rtw_init_ht_cap(struct rtw_dev *rtwdev,
+                           struct ieee80211_sta_ht_cap *ht_cap)
+ {
+       struct rtw_efuse *efuse = &rtwdev->efuse;
++      int i;
+       ht_cap->ht_supported = true;
+       ht_cap->cap = 0;
+@@ -780,17 +781,11 @@ static void rtw_init_ht_cap(struct rtw_dev *rtwdev,
+       ht_cap->ampdu_factor = IEEE80211_HT_MAX_AMPDU_64K;
+       ht_cap->ampdu_density = IEEE80211_HT_MPDU_DENSITY_16;
+       ht_cap->mcs.tx_params = IEEE80211_HT_MCS_TX_DEFINED;
+-      if (efuse->hw_cap.nss > 1) {
+-              ht_cap->mcs.rx_mask[0] = 0xFF;
+-              ht_cap->mcs.rx_mask[1] = 0xFF;
+-              ht_cap->mcs.rx_mask[4] = 0x01;
+-              ht_cap->mcs.rx_highest = cpu_to_le16(300);
+-      } else {
+-              ht_cap->mcs.rx_mask[0] = 0xFF;
+-              ht_cap->mcs.rx_mask[1] = 0x00;
+-              ht_cap->mcs.rx_mask[4] = 0x01;
+-              ht_cap->mcs.rx_highest = cpu_to_le16(150);
+-      }
++
++      for (i = 0; i < efuse->hw_cap.nss; i++)
++              ht_cap->mcs.rx_mask[i] = 0xFF;
++      ht_cap->mcs.rx_mask[4] = 0x01;
++      ht_cap->mcs.rx_highest = cpu_to_le16(150 * efuse->hw_cap.nss);
+ }
+ static void rtw_init_vht_cap(struct rtw_dev *rtwdev,
+-- 
+2.39.5
+
diff --git a/queue-5.4/x86-bugs-make-spectre-user-default-depend-on-mitigat.patch b/queue-5.4/x86-bugs-make-spectre-user-default-depend-on-mitigat.patch
new file mode 100644 (file)
index 0000000..7201c67
--- /dev/null
@@ -0,0 +1,96 @@
+From a535985996328b4aa95fd492e0df082d928c68bc Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 31 Oct 2024 04:06:17 -0700
+Subject: x86/bugs: Make spectre user default depend on MITIGATION_SPECTRE_V2
+
+From: Breno Leitao <leitao@debian.org>
+
+[ Upstream commit 98fdaeb296f51ef08e727a7cc72e5b5c864c4f4d ]
+
+Change the default value of spectre v2 in user mode to respect the
+CONFIG_MITIGATION_SPECTRE_V2 config option.
+
+Currently, user mode spectre v2 is set to auto
+(SPECTRE_V2_USER_CMD_AUTO) by default, even if
+CONFIG_MITIGATION_SPECTRE_V2 is disabled.
+
+Set the spectre_v2 value to auto (SPECTRE_V2_USER_CMD_AUTO) if the
+Spectre v2 config (CONFIG_MITIGATION_SPECTRE_V2) is enabled, otherwise
+set the value to none (SPECTRE_V2_USER_CMD_NONE).
+
+Important to say the command line argument "spectre_v2_user" overwrites
+the default value in both cases.
+
+When CONFIG_MITIGATION_SPECTRE_V2 is not set, users have the flexibility
+to opt-in for specific mitigations independently. In this scenario,
+setting spectre_v2= will not enable spectre_v2_user=, and command line
+options spectre_v2_user and spectre_v2 are independent when
+CONFIG_MITIGATION_SPECTRE_V2=n.
+
+Signed-off-by: Breno Leitao <leitao@debian.org>
+Signed-off-by: Ingo Molnar <mingo@kernel.org>
+Reviewed-by: Pawan Gupta <pawan.kumar.gupta@linux.intel.com>
+Acked-by: Josh Poimboeuf <jpoimboe@kernel.org>
+Cc: Peter Zijlstra <peterz@infradead.org>
+Cc: David Kaplan <David.Kaplan@amd.com>
+Link: https://lore.kernel.org/r/20241031-x86_bugs_last_v2-v2-2-b7ff1dab840e@debian.org
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ Documentation/admin-guide/kernel-parameters.txt |  2 ++
+ arch/x86/kernel/cpu/bugs.c                      | 10 +++++++---
+ 2 files changed, 9 insertions(+), 3 deletions(-)
+
+diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt
+index 9975dcab99c35..6d9acc3f977b3 100644
+--- a/Documentation/admin-guide/kernel-parameters.txt
++++ b/Documentation/admin-guide/kernel-parameters.txt
+@@ -4600,6 +4600,8 @@
+                       Selecting 'on' will also enable the mitigation
+                       against user space to user space task attacks.
++                      Selecting specific mitigation does not force enable
++                      user mitigations.
+                       Selecting 'off' will disable both the kernel and
+                       the user space protections.
+diff --git a/arch/x86/kernel/cpu/bugs.c b/arch/x86/kernel/cpu/bugs.c
+index 4f803aed2ef0e..0f523ebfbabf6 100644
+--- a/arch/x86/kernel/cpu/bugs.c
++++ b/arch/x86/kernel/cpu/bugs.c
+@@ -1050,9 +1050,13 @@ static __ro_after_init enum spectre_v2_mitigation_cmd spectre_v2_cmd;
+ static enum spectre_v2_user_cmd __init
+ spectre_v2_parse_user_cmdline(void)
+ {
++      enum spectre_v2_user_cmd mode;
+       char arg[20];
+       int ret, i;
++      mode = IS_ENABLED(CONFIG_MITIGATION_SPECTRE_V2) ?
++              SPECTRE_V2_USER_CMD_AUTO : SPECTRE_V2_USER_CMD_NONE;
++
+       switch (spectre_v2_cmd) {
+       case SPECTRE_V2_CMD_NONE:
+               return SPECTRE_V2_USER_CMD_NONE;
+@@ -1065,7 +1069,7 @@ spectre_v2_parse_user_cmdline(void)
+       ret = cmdline_find_option(boot_command_line, "spectre_v2_user",
+                                 arg, sizeof(arg));
+       if (ret < 0)
+-              return SPECTRE_V2_USER_CMD_AUTO;
++              return mode;
+       for (i = 0; i < ARRAY_SIZE(v2_user_options); i++) {
+               if (match_option(arg, ret, v2_user_options[i].option)) {
+@@ -1075,8 +1079,8 @@ spectre_v2_parse_user_cmdline(void)
+               }
+       }
+-      pr_err("Unknown user space protection option (%s). Switching to AUTO select\n", arg);
+-      return SPECTRE_V2_USER_CMD_AUTO;
++      pr_err("Unknown user space protection option (%s). Switching to default\n", arg);
++      return mode;
+ }
+ static inline bool spectre_v2_in_eibrs_mode(enum spectre_v2_mitigation mode)
+-- 
+2.39.5
+
diff --git a/queue-5.4/x86-nmi-add-an-emergency-handler-in-nmi_desc-use-it-.patch b/queue-5.4/x86-nmi-add-an-emergency-handler-in-nmi_desc-use-it-.patch
new file mode 100644 (file)
index 0000000..95d34bb
--- /dev/null
@@ -0,0 +1,173 @@
+From 658686165e18e1d80d2b0cd260651e0747d85432 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 6 Feb 2025 14:18:44 -0500
+Subject: x86/nmi: Add an emergency handler in nmi_desc & use it in
+ nmi_shootdown_cpus()
+
+From: Waiman Long <longman@redhat.com>
+
+[ Upstream commit fe37c699ae3eed6e02ee55fbf5cb9ceb7fcfd76c ]
+
+Depending on the type of panics, it was found that the
+__register_nmi_handler() function can be called in NMI context from
+nmi_shootdown_cpus() leading to a lockdep splat:
+
+  WARNING: inconsistent lock state
+  inconsistent {INITIAL USE} -> {IN-NMI} usage.
+
+   lock(&nmi_desc[0].lock);
+   <Interrupt>
+     lock(&nmi_desc[0].lock);
+
+  Call Trace:
+    _raw_spin_lock_irqsave
+    __register_nmi_handler
+    nmi_shootdown_cpus
+    kdump_nmi_shootdown_cpus
+    native_machine_crash_shutdown
+    __crash_kexec
+
+In this particular case, the following panic message was printed before:
+
+  Kernel panic - not syncing: Fatal hardware error!
+
+This message seemed to be given out from __ghes_panic() running in
+NMI context.
+
+The __register_nmi_handler() function which takes the nmi_desc lock
+with irq disabled shouldn't be called from NMI context as this can
+lead to deadlock.
+
+The nmi_shootdown_cpus() function can only be invoked once. After the
+first invocation, all other CPUs should be stuck in the newly added
+crash_nmi_callback() and cannot respond to a second NMI.
+
+Fix it by adding a new emergency NMI handler to the nmi_desc
+structure and provide a new set_emergency_nmi_handler() helper to set
+crash_nmi_callback() in any context. The new emergency handler will
+preempt other handlers in the linked list. That will eliminate the need
+to take any lock and serve the panic in NMI use case.
+
+Signed-off-by: Waiman Long <longman@redhat.com>
+Signed-off-by: Ingo Molnar <mingo@kernel.org>
+Acked-by: Rik van Riel <riel@surriel.com>
+Cc: Thomas Gleixner <tglx@linutronix.de>
+Link: https://lore.kernel.org/r/20250206191844.131700-1-longman@redhat.com
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/x86/include/asm/nmi.h |  2 ++
+ arch/x86/kernel/nmi.c      | 42 ++++++++++++++++++++++++++++++++++++++
+ arch/x86/kernel/reboot.c   | 10 +++------
+ 3 files changed, 47 insertions(+), 7 deletions(-)
+
+diff --git a/arch/x86/include/asm/nmi.h b/arch/x86/include/asm/nmi.h
+index 9d5d949e662e1..dfb483c8c98b6 100644
+--- a/arch/x86/include/asm/nmi.h
++++ b/arch/x86/include/asm/nmi.h
+@@ -59,6 +59,8 @@ int __register_nmi_handler(unsigned int, struct nmiaction *);
+ void unregister_nmi_handler(unsigned int, const char *);
++void set_emergency_nmi_handler(unsigned int type, nmi_handler_t handler);
++
+ void stop_nmi(void);
+ void restart_nmi(void);
+ void local_touch_nmi(void);
+diff --git a/arch/x86/kernel/nmi.c b/arch/x86/kernel/nmi.c
+index 5bb001c0c771a..d5c572bca8b1b 100644
+--- a/arch/x86/kernel/nmi.c
++++ b/arch/x86/kernel/nmi.c
+@@ -41,8 +41,12 @@
+ #define CREATE_TRACE_POINTS
+ #include <trace/events/nmi.h>
++/*
++ * An emergency handler can be set in any context including NMI
++ */
+ struct nmi_desc {
+       raw_spinlock_t lock;
++      nmi_handler_t emerg_handler;
+       struct list_head head;
+ };
+@@ -124,9 +128,22 @@ static void nmi_check_duration(struct nmiaction *action, u64 duration)
+ static int nmi_handle(unsigned int type, struct pt_regs *regs)
+ {
+       struct nmi_desc *desc = nmi_to_desc(type);
++      nmi_handler_t ehandler;
+       struct nmiaction *a;
+       int handled=0;
++      /*
++       * Call the emergency handler, if set
++       *
++       * In the case of crash_nmi_callback() emergency handler, it will
++       * return in the case of the crashing CPU to enable it to complete
++       * other necessary crashing actions ASAP. Other handlers in the
++       * linked list won't need to be run.
++       */
++      ehandler = desc->emerg_handler;
++      if (ehandler)
++              return ehandler(type, regs);
++
+       rcu_read_lock();
+       /*
+@@ -212,6 +229,31 @@ void unregister_nmi_handler(unsigned int type, const char *name)
+ }
+ EXPORT_SYMBOL_GPL(unregister_nmi_handler);
++/**
++ * set_emergency_nmi_handler - Set emergency handler
++ * @type:    NMI type
++ * @handler: the emergency handler to be stored
++ *
++ * Set an emergency NMI handler which, if set, will preempt all the other
++ * handlers in the linked list. If a NULL handler is passed in, it will clear
++ * it. It is expected that concurrent calls to this function will not happen
++ * or the system is screwed beyond repair.
++ */
++void set_emergency_nmi_handler(unsigned int type, nmi_handler_t handler)
++{
++      struct nmi_desc *desc = nmi_to_desc(type);
++
++      if (WARN_ON_ONCE(desc->emerg_handler == handler))
++              return;
++      desc->emerg_handler = handler;
++
++      /*
++       * Ensure the emergency handler is visible to other CPUs before
++       * function return
++       */
++      smp_wmb();
++}
++
+ static void
+ pci_serr_error(unsigned char reason, struct pt_regs *regs)
+ {
+diff --git a/arch/x86/kernel/reboot.c b/arch/x86/kernel/reboot.c
+index 6fede2f001042..17e378db513d2 100644
+--- a/arch/x86/kernel/reboot.c
++++ b/arch/x86/kernel/reboot.c
+@@ -875,15 +875,11 @@ void nmi_shootdown_cpus(nmi_shootdown_cb callback)
+       shootdown_callback = callback;
+       atomic_set(&waiting_for_crash_ipi, num_online_cpus() - 1);
+-      /* Would it be better to replace the trap vector here? */
+-      if (register_nmi_handler(NMI_LOCAL, crash_nmi_callback,
+-                               NMI_FLAG_FIRST, "crash"))
+-              return;         /* Return what? */
++
+       /*
+-       * Ensure the new callback function is set before sending
+-       * out the NMI
++       * Set emergency handler to preempt other handlers.
+        */
+-      wmb();
++      set_emergency_nmi_handler(NMI_LOCAL, crash_nmi_callback);
+       apic_send_IPI_allbutself(NMI_VECTOR);
+-- 
+2.39.5
+
diff --git a/queue-5.4/xen-add-support-for-xenserver-6.1-platform-device.patch b/queue-5.4/xen-add-support-for-xenserver-6.1-platform-device.patch
new file mode 100644 (file)
index 0000000..1e2144c
--- /dev/null
@@ -0,0 +1,65 @@
+From 3d338919885a3bfd56387ce31332231755b222df Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 27 Feb 2025 14:50:15 +0000
+Subject: xen: Add support for XenServer 6.1 platform device
+
+From: Frediano Ziglio <frediano.ziglio@cloud.com>
+
+[ Upstream commit 2356f15caefc0cc63d9cc5122641754f76ef9b25 ]
+
+On XenServer on Windows machine a platform device with ID 2 instead of
+1 is used.
+
+This device is mainly identical to device 1 but due to some Windows
+update behaviour it was decided to use a device with a different ID.
+
+This causes compatibility issues with Linux which expects, if Xen
+is detected, to find a Xen platform device (5853:0001) otherwise code
+will crash due to some missing initialization (specifically grant
+tables). Specifically from dmesg
+
+    RIP: 0010:gnttab_expand+0x29/0x210
+    Code: 90 0f 1f 44 00 00 55 31 d2 48 89 e5 41 57 41 56 41 55 41 89 fd
+          41 54 53 48 83 ec 10 48 8b 05 7e 9a 49 02 44 8b 35 a7 9a 49 02
+          <8b> 48 04 8d 44 39 ff f7 f1 45 8d 24 06 89 c3 e8 43 fe ff ff
+          44 39
+    RSP: 0000:ffffba34c01fbc88 EFLAGS: 00010086
+    ...
+
+The device 2 is presented by Xapi adding device specification to
+Qemu command line.
+
+Signed-off-by: Frediano Ziglio <frediano.ziglio@cloud.com>
+Acked-by: Juergen Gross <jgross@suse.com>
+Message-ID: <20250227145016.25350-1-frediano.ziglio@cloud.com>
+Signed-off-by: Juergen Gross <jgross@suse.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/xen/platform-pci.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/drivers/xen/platform-pci.c b/drivers/xen/platform-pci.c
+index e1cb277a9e16f..69bceab71c3f7 100644
+--- a/drivers/xen/platform-pci.c
++++ b/drivers/xen/platform-pci.c
+@@ -26,6 +26,8 @@
+ #define DRV_NAME    "xen-platform-pci"
++#define PCI_DEVICE_ID_XEN_PLATFORM_XS61       0x0002
++
+ static unsigned long platform_mmio;
+ static unsigned long platform_mmio_alloc;
+ static unsigned long platform_mmiolen;
+@@ -167,6 +169,8 @@ static int platform_pci_probe(struct pci_dev *pdev,
+ static const struct pci_device_id platform_pci_tbl[] = {
+       {PCI_VENDOR_ID_XEN, PCI_DEVICE_ID_XEN_PLATFORM,
+               PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
++      {PCI_VENDOR_ID_XEN, PCI_DEVICE_ID_XEN_PLATFORM_XS61,
++              PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
+       {0,}
+ };
+-- 
+2.39.5
+
diff --git a/queue-5.4/xenbus-allow-pvh-dom0-a-non-local-xenstore.patch b/queue-5.4/xenbus-allow-pvh-dom0-a-non-local-xenstore.patch
new file mode 100644 (file)
index 0000000..c0a0ea4
--- /dev/null
@@ -0,0 +1,69 @@
+From 9d8ec50b6ffa11ead34d4771646113582bba7a4d Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 6 May 2025 16:44:56 -0400
+Subject: xenbus: Allow PVH dom0 a non-local xenstore
+
+From: Jason Andryuk <jason.andryuk@amd.com>
+
+[ Upstream commit 90989869baae47ee2aa3bcb6f6eb9fbbe4287958 ]
+
+Make xenbus_init() allow a non-local xenstore for a PVH dom0 - it is
+currently forced to XS_LOCAL.  With Hyperlaunch booting dom0 and a
+xenstore stubdom, dom0 can be handled as a regular XS_HVM following the
+late init path.
+
+Ideally we'd drop the use of xen_initial_domain() and just check for the
+event channel instead.  However, ARM has a xen,enhanced no-xenstore
+mode, where the event channel and PFN would both be 0.  Retain the
+xen_initial_domain() check, and use that for an additional check when
+the event channel is 0.
+
+Check the full 64bit HVM_PARAM_STORE_EVTCHN value to catch the off
+chance that high bits are set for the 32bit event channel.
+
+Signed-off-by: Jason Andryuk <jason.andryuk@amd.com>
+Change-Id: I5506da42e4c6b8e85079fefb2f193c8de17c7437
+Reviewed-by: Stefano Stabellini <sstabellini@kernel.org>
+Signed-off-by: Juergen Gross <jgross@suse.com>
+Message-ID: <20250506204456.5220-1-jason.andryuk@amd.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/xen/xenbus/xenbus_probe.c | 14 ++++++++------
+ 1 file changed, 8 insertions(+), 6 deletions(-)
+
+diff --git a/drivers/xen/xenbus/xenbus_probe.c b/drivers/xen/xenbus/xenbus_probe.c
+index fd686b962727a..17705f82f85fd 100644
+--- a/drivers/xen/xenbus/xenbus_probe.c
++++ b/drivers/xen/xenbus/xenbus_probe.c
+@@ -881,9 +881,15 @@ static int __init xenbus_init(void)
+       if (xen_pv_domain())
+               xen_store_domain_type = XS_PV;
+       if (xen_hvm_domain())
++      {
+               xen_store_domain_type = XS_HVM;
+-      if (xen_hvm_domain() && xen_initial_domain())
+-              xen_store_domain_type = XS_LOCAL;
++              err = hvm_get_parameter(HVM_PARAM_STORE_EVTCHN, &v);
++              if (err)
++                      goto out_error;
++              xen_store_evtchn = (int)v;
++              if (!v && xen_initial_domain())
++                      xen_store_domain_type = XS_LOCAL;
++      }
+       if (xen_pv_domain() && !xen_start_info->store_evtchn)
+               xen_store_domain_type = XS_LOCAL;
+       if (xen_pv_domain() && xen_start_info->store_evtchn)
+@@ -902,10 +908,6 @@ static int __init xenbus_init(void)
+               xen_store_interface = gfn_to_virt(xen_store_gfn);
+               break;
+       case XS_HVM:
+-              err = hvm_get_parameter(HVM_PARAM_STORE_EVTCHN, &v);
+-              if (err)
+-                      goto out_error;
+-              xen_store_evtchn = (int)v;
+               err = hvm_get_parameter(HVM_PARAM_STORE_PFN, &v);
+               if (err)
+                       goto out_error;
+-- 
+2.39.5
+