From 5472d08a3f02ca481cae64cb4fadaa23e5965be3 Mon Sep 17 00:00:00 2001 From: Brett A C Sheffield Date: Fri, 22 Aug 2025 16:50:51 +0000 Subject: [PATCH 1/8] net: ipv4: fix regression in broadcast routes Fix the regression introduced in 9e30ecf23b1b whereby IPv4 broadcast packets were having their ethernet destination field mangled. This broke WOL magic packets and likely other IPv4 broadcast. The regression can be observed by sending an IPv4 WOL packet using the wakeonlan program to any ethernet address: wakeonlan 46:3b:ad:61:e0:5d and capturing the packet with tcpdump: tcpdump -i eth0 -w /tmp/bad.cap dst port 9 The ethernet destination MUST be ff:ff:ff:ff:ff:ff for broadcast, but is mangled with 9e30ecf23b1b applied. Revert the change made in 9e30ecf23b1b and ensure the MTU value for broadcast routes is retained by calling ip_dst_init_metrics() directly, avoiding the need to enter the main code block in rt_set_nexthop(). Simplify the code path taken for broadcast packets back to the original before the regression, adding only the call to ip_dst_init_metrics(). The broadcast_pmtu.sh selftest provided with the original patch still passes with this patch applied. Fixes: 9e30ecf23b1b ("net: ipv4: fix incorrect MTU in broadcast routes") Signed-off-by: Brett A C Sheffield Signed-off-by: Michael Aaron Murphy --- net/ipv4/route.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/net/ipv4/route.c b/net/ipv4/route.c index 7b8e80c4f1d98c..21720b6e9a5682 100644 --- a/net/ipv4/route.c +++ b/net/ipv4/route.c @@ -2586,6 +2586,7 @@ static struct rtable *__mkroute_output(const struct fib_result *res, do_cache = true; if (type == RTN_BROADCAST) { flags |= RTCF_BROADCAST | RTCF_LOCAL; + fi = NULL; } else if (type == RTN_MULTICAST) { flags |= RTCF_MULTICAST | RTCF_LOCAL; if (!ip_check_mc_rcu(in_dev, fl4->daddr, fl4->saddr, @@ -2655,8 +2656,12 @@ static struct rtable *__mkroute_output(const struct fib_result *res, rth->dst.output = ip_mc_output; RT_CACHE_STAT_INC(out_slow_mc); } + if (type == RTN_BROADCAST) { + /* ensure MTU value for broadcast routes is retained */ + ip_dst_init_metrics(&rth->dst, res->fi->fib_metrics); + } #ifdef CONFIG_IP_MROUTE - if (type == RTN_MULTICAST) { + else if (type == RTN_MULTICAST) { if (IN_DEV_MFORWARD(in_dev) && !ipv4_is_local_multicast(fl4->daddr)) { rth->dst.input = ip_mr_input; From 75dc5f579e7eedc687745669ae66220d817c7c51 Mon Sep 17 00:00:00 2001 From: Oscar Maes Date: Wed, 27 Aug 2025 08:23:21 +0200 Subject: [PATCH 2/8] net: ipv4: fix regression in local-broadcast routes Commit 9e30ecf23b1b ("net: ipv4: fix incorrect MTU in broadcast routes") introduced a regression where local-broadcast packets would have their gateway set in __mkroute_output, which was caused by fi = NULL being removed. Fix this by resetting the fib_info for local-broadcast packets. This preserves the intended changes for directed-broadcast packets. Cc: stable@vger.kernel.org Fixes: 9e30ecf23b1b ("net: ipv4: fix incorrect MTU in broadcast routes") Reported-by: Brett A C Sheffield Closes: https://lore.kernel.org/regressions/20250822165231.4353-4-bacs@librecast.net Signed-off-by: Oscar Maes Reviewed-by: David Ahern Link: https://patch.msgid.link/20250827062322.4807-1-oscmaes92@gmail.com Signed-off-by: Paolo Abeni --- net/ipv4/route.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/net/ipv4/route.c b/net/ipv4/route.c index 21720b6e9a5682..c44afd4723617d 100644 --- a/net/ipv4/route.c +++ b/net/ipv4/route.c @@ -2573,12 +2573,16 @@ static struct rtable *__mkroute_output(const struct fib_result *res, !netif_is_l3_master(dev_out)) return ERR_PTR(-EINVAL); - if (ipv4_is_lbcast(fl4->daddr)) + if (ipv4_is_lbcast(fl4->daddr)) { type = RTN_BROADCAST; - else if (ipv4_is_multicast(fl4->daddr)) + + /* reset fi to prevent gateway resolution */ + fi = NULL; + } else if (ipv4_is_multicast(fl4->daddr)) { type = RTN_MULTICAST; - else if (ipv4_is_zeronet(fl4->daddr)) + } else if (ipv4_is_zeronet(fl4->daddr)) { return ERR_PTR(-EINVAL); + } if (dev_out->flags & IFF_LOOPBACK) flags |= RTCF_LOCAL; From 8e380b55d8abfca5902233653d83d9117405bc54 Mon Sep 17 00:00:00 2001 From: Michael Aaron Murphy Date: Tue, 16 Sep 2025 05:26:18 +0200 Subject: [PATCH 3/8] fix: enable linux-tools packages --- debian/rules | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/debian/rules b/debian/rules index e03555f2755d69..1def2b76b7d4a2 100755 --- a/debian/rules +++ b/debian/rules @@ -104,8 +104,8 @@ endif # Being used to build a mainline build -- turn off things which do not work. ifeq ($(do_mainline_build),true) - do_tools=false - no_dumpfile=1 +# do_tools=false +# no_dumpfile=1 $(foreach _m,$(all_dkms_modules),$(eval do_$(_m) = false)) do_skip_checks=true do_sources_list = false From 54ce95f3b25312b9af955a769d3c801047678212 Mon Sep 17 00:00:00 2001 From: Michael Aaron Murphy Date: Tue, 16 Sep 2025 05:26:40 +0200 Subject: [PATCH 4/8] fix: add dependencies for linux-tools --- debian.master/control.stub.in | 10 ++++++++-- debian/control | 13 +++++++++---- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/debian.master/control.stub.in b/debian.master/control.stub.in index cf74b152945993..3ca75581f68499 100644 --- a/debian.master/control.stub.in +++ b/debian.master/control.stub.in @@ -9,8 +9,9 @@ Build-Depends: automake , bc , bindgen:native [amd64 arm64 armhf ppc64el riscv64 s390x], + binutils-dev, bison , - clang-19:native [amd64 arm64 armhf ppc64el riscv64 s390x], + clang:native [amd64 arm64 armhf ppc64el riscv64 s390x], cpio, curl , debhelper-compat (= 10), @@ -22,7 +23,10 @@ Build-Depends: java-common , kmod , libaudit-dev , + libbpf-dev, + libbpf-tools, libcap-dev , + libcapstone-dev, libdebuginfod-dev [amd64 arm64 armhf ppc64el s390x riscv64] , libdw-dev , libelf-dev , @@ -31,13 +35,15 @@ Build-Depends: libnewt-dev , libnuma-dev [amd64 arm64 ppc64el s390x] , libpci-dev , + libperl-dev, libssl-dev , - libstdc++-dev, + libstdc++-14-dev, libtool , libtraceevent-dev [amd64 arm64 armhf ppc64el s390x riscv64] , libtracefs-dev [amd64 arm64 armhf ppc64el s390x riscv64] , libudev-dev , libunwind8-dev [amd64 arm64 armhf ppc64el] , + llvm-dev, makedumpfile:native [amd64] , openssl , dwarves (>= 1.21) [amd64 arm64 armhf ppc64el s390x riscv64] , diff --git a/debian/control b/debian/control index 90eeaaecce6cb7..213a294af2d169 100644 --- a/debian/control +++ b/debian/control @@ -11,8 +11,9 @@ Build-Depends: automake , bc , bindgen:native [amd64 arm64 armhf ppc64el riscv64 s390x], + binutils-dev, bison , - clang-19:native [amd64 arm64 armhf ppc64el riscv64 s390x], + clang:native [amd64 arm64 armhf ppc64el riscv64 s390x], cpio, curl , debhelper-compat (= 10), @@ -24,7 +25,10 @@ Build-Depends: java-common , kmod , libaudit-dev , + libbpf-dev, + libbpf-tools, libcap-dev , + libcapstone-dev, libdebuginfod-dev [amd64 arm64 armhf ppc64el s390x riscv64] , libdw-dev , libelf-dev , @@ -33,13 +37,15 @@ Build-Depends: libnewt-dev , libnuma-dev [amd64 arm64 ppc64el s390x] , libpci-dev , + libperl-dev, libssl-dev , - libstdc++-dev, + libstdc++-14-dev, libtool , libtraceevent-dev [amd64 arm64 armhf ppc64el s390x riscv64] , libtracefs-dev [amd64 arm64 armhf ppc64el s390x riscv64] , libudev-dev , libunwind8-dev [amd64 arm64 armhf ppc64el] , + llvm-dev, makedumpfile:native [amd64] , openssl , dwarves (>= 1.21) [amd64 arm64 armhf ppc64el s390x riscv64] , @@ -199,7 +205,7 @@ Architecture: all Multi-Arch: foreign Section: kernel Priority: optional -Provides: +Provides: linux-cpupower, Recommends: bpftool (>= 7.6.0+6.14.0-8~), @@ -715,4 +721,3 @@ Description: Linux kernel vision modules for version 6.16.3-76061603 one of the linux-modules-vision-generic-64k* meta-packages, which will ensure that upgrades work correctly, and that supporting packages are also installed. - From fee44aa39af169e1002014553def83965b48b523 Mon Sep 17 00:00:00 2001 From: Michael Aaron Murphy Date: Tue, 16 Sep 2025 06:11:50 +0200 Subject: [PATCH 5/8] fix: ubuntu build needs rustc-1.82 explicitly set --- debian.master/control.stub.in | 6 +++--- debian/control | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/debian.master/control.stub.in b/debian.master/control.stub.in index 3ca75581f68499..2a59aca7dcb4e7 100644 --- a/debian.master/control.stub.in +++ b/debian.master/control.stub.in @@ -53,9 +53,9 @@ Build-Depends: libpython3-dev , python3-setuptools, rsync [!i386] , - rust-src:native [amd64 arm64 armhf ppc64el riscv64 s390x], - rustc:native (>= 1.82) [amd64 arm64 armhf ppc64el riscv64 s390x], - rustfmt:native [amd64 arm64 armhf ppc64el riscv64 s390x], + rust-1.82-src:native [amd64 arm64 armhf ppc64el riscv64 s390x], + rustc-1.82:native (>= 1.82) [amd64 arm64 armhf ppc64el riscv64 s390x], + rustfmt-1.82:native [amd64 arm64 armhf ppc64el riscv64 s390x], uuid-dev , zstd , Build-Depends-Indep: diff --git a/debian/control b/debian/control index 213a294af2d169..5bb750c7fb94fa 100644 --- a/debian/control +++ b/debian/control @@ -55,9 +55,9 @@ Build-Depends: libpython3-dev , python3-setuptools, rsync [!i386] , - rust-src:native [amd64 arm64 armhf ppc64el riscv64 s390x], - rustc:native (>= 1.82) [amd64 arm64 armhf ppc64el riscv64 s390x], - rustfmt:native [amd64 arm64 armhf ppc64el riscv64 s390x], + rust-1.82-src:native [amd64 arm64 armhf ppc64el riscv64 s390x], + rustc-1.82:native (>= 1.82) [amd64 arm64 armhf ppc64el riscv64 s390x], + rustfmt-1.82:native [amd64 arm64 armhf ppc64el riscv64 s390x], uuid-dev , zstd , Build-Depends-Indep: From ca215884da7814f31999392070675101b985b4da Mon Sep 17 00:00:00 2001 From: Tim Guttzeit Date: Thu, 11 Sep 2025 14:43:27 -0600 Subject: [PATCH 6/8] drm/i915/display: Avoid unsupported 300Hz output mode on a TUXEDO device Removes all display modes with more than 240 Hz for the integrated display on a TUXEDO Stellaris 16 Gen7, because using the iGPU with higer refresh rates causes screen flicker. Signed-off-by: Tim Guttzeit Co-developed-by: Werner Sembach Signed-off-by: Werner Sembach Link: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14616 Signed-off-by: Tim Crawford --- drivers/gpu/drm/i915/display/intel_dp.c | 5 ++++ drivers/gpu/drm/i915/display/intel_quirks.c | 30 +++++++++++++++++++++ drivers/gpu/drm/i915/display/intel_quirks.h | 1 + 3 files changed, 36 insertions(+) diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c index 724de7ed3c0425..b2b97fc0a9cf1d 100644 --- a/drivers/gpu/drm/i915/display/intel_dp.c +++ b/drivers/gpu/drm/i915/display/intel_dp.c @@ -1436,6 +1436,11 @@ intel_dp_mode_valid(struct drm_connector *_connector, if (mode->clock < 10000) return MODE_CLOCK_LOW; + if (intel_has_quirk(display, QUIRK_EDP_MAX_240HZ_HOOK) && + intel_dp_is_edp(intel_dp) && + drm_mode_vrefresh(mode) > 240) + return MODE_BAD; + fixed_mode = intel_panel_fixed_mode(connector, mode); if (intel_dp_is_edp(intel_dp) && fixed_mode) { status = intel_panel_mode_valid(connector, mode); diff --git a/drivers/gpu/drm/i915/display/intel_quirks.c b/drivers/gpu/drm/i915/display/intel_quirks.c index a32fae510ed27d..438ce2cb37a016 100644 --- a/drivers/gpu/drm/i915/display/intel_quirks.c +++ b/drivers/gpu/drm/i915/display/intel_quirks.c @@ -72,6 +72,12 @@ static void quirk_no_pps_backlight_power_hook(struct intel_display *display) drm_info(display->drm, "Applying no pps backlight power quirk\n"); } +static void quirk_edp_max_240hz_hook(struct intel_display *display) +{ + intel_set_quirk(display, QUIRK_EDP_MAX_240HZ_HOOK); + drm_info(display->drm, "Applying max 240Hz quirk\n"); +} + static void quirk_fw_sync_len(struct intel_dp *intel_dp) { struct intel_display *display = to_intel_display(intel_dp); @@ -120,6 +126,12 @@ static int intel_dmi_no_pps_backlight(const struct dmi_system_id *id) return 1; } +static int intel_dmi_edp_max_240hz(const struct dmi_system_id *id) +{ + DRM_INFO("Restrict output refreshrate to maximum 240Hz %s\n", id->ident); + return 1; +} + static const struct intel_dmi_quirk intel_dmi_quirks[] = { { .dmi_id_list = &(const struct dmi_system_id[]) { @@ -166,6 +178,24 @@ static const struct intel_dmi_quirk intel_dmi_quirks[] = { }, .hook = quirk_no_pps_backlight_power_hook, }, + { + .dmi_id_list = &(const struct dmi_system_id[]) { + { + .callback = intel_dmi_edp_max_240hz, + .ident = "TUXEDO Stellaris 16 Intel Gen7", + .matches = {DMI_EXACT_MATCH(DMI_BOARD_NAME, "X6AR5xxY"), + }, + }, + { + .callback = intel_dmi_edp_max_240hz, + .ident = "TUXEDO Stellaris 16 Intel Gen7", + .matches = {DMI_EXACT_MATCH(DMI_BOARD_NAME, "X6AR5xxY_mLED"), + }, + }, + { } + }, + .hook = quirk_edp_max_240hz_hook, + }, }; static struct intel_quirk intel_quirks[] = { diff --git a/drivers/gpu/drm/i915/display/intel_quirks.h b/drivers/gpu/drm/i915/display/intel_quirks.h index cafdebda75354f..8fe3f3467106ab 100644 --- a/drivers/gpu/drm/i915/display/intel_quirks.h +++ b/drivers/gpu/drm/i915/display/intel_quirks.h @@ -20,6 +20,7 @@ enum intel_quirk_id { QUIRK_LVDS_SSC_DISABLE, QUIRK_NO_PPS_BACKLIGHT_POWER_HOOK, QUIRK_FW_SYNC_LEN, + QUIRK_EDP_MAX_240HZ_HOOK, }; void intel_init_quirks(struct intel_display *display); From 656a3c173a7c80c6163ab0b476185496ee8ac4c7 Mon Sep 17 00:00:00 2001 From: Tim Crawford Date: Thu, 11 Sep 2025 14:46:08 -0600 Subject: [PATCH 7/8] drm/i915/display: Apply 240Hz quirk for serw14 Signed-off-by: Tim Crawford --- drivers/gpu/drm/i915/display/intel_quirks.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/drivers/gpu/drm/i915/display/intel_quirks.c b/drivers/gpu/drm/i915/display/intel_quirks.c index 438ce2cb37a016..050f3461ba6062 100644 --- a/drivers/gpu/drm/i915/display/intel_quirks.c +++ b/drivers/gpu/drm/i915/display/intel_quirks.c @@ -192,6 +192,13 @@ static const struct intel_dmi_quirk intel_dmi_quirks[] = { .matches = {DMI_EXACT_MATCH(DMI_BOARD_NAME, "X6AR5xxY_mLED"), }, }, + { + .callback = intel_dmi_edp_max_240hz, + .ident = "System76 Serval WS", + .matches = {DMI_EXACT_MATCH(DMI_BOARD_VENDOR, "System76"), + DMI_EXACT_MATCH(DMI_BOARD_VERSION, "serw14"), + }, + }, { } }, .hook = quirk_edp_max_240hz_hook, From 2309afceeb13aa929ac2f58a7817a49a9d41e70d Mon Sep 17 00:00:00 2001 From: Saar Koren Date: Fri, 19 Sep 2025 19:38:30 +0300 Subject: [PATCH 8/8] drm/amdgpu: Wait for bootloader after PSPv11 reset This patch fixes suspend issues on RX 5000 GPUs. --- drivers/gpu/drm/amd/amdgpu/psp_v11_0.c | 19 ++++--------------- 1 file changed, 4 insertions(+), 15 deletions(-) diff --git a/drivers/gpu/drm/amd/amdgpu/psp_v11_0.c b/drivers/gpu/drm/amd/amdgpu/psp_v11_0.c index 1a4a26e6ffd24c..4cd37fe96c6e94 100644 --- a/drivers/gpu/drm/amd/amdgpu/psp_v11_0.c +++ b/drivers/gpu/drm/amd/amdgpu/psp_v11_0.c @@ -149,13 +149,13 @@ static int psp_v11_0_wait_for_bootloader(struct psp_context *psp) int ret; int retry_loop; - for (retry_loop = 0; retry_loop < 10; retry_loop++) { + for (retry_loop = 0; retry_loop < 20; retry_loop++) { /* Wait for bootloader to signify that is ready having bit 31 of C2PMSG_35 set to 1 */ ret = psp_wait_for(psp, SOC15_REG_OFFSET(MP0, 0, mmMP0_SMN_C2PMSG_35), 0x80000000, - 0x80000000, + 0x8000FFFF, false); if (ret == 0) @@ -399,18 +399,6 @@ static int psp_v11_0_mode1_reset(struct psp_context *psp) msleep(500); - offset = SOC15_REG_OFFSET(MP0, 0, mmMP0_SMN_C2PMSG_33); - - ret = psp_wait_for(psp, offset, MBOX_TOS_RESP_FLAG, MBOX_TOS_RESP_MASK, - false); - - if (ret) { - DRM_INFO("psp mode 1 reset failed!\n"); - return -EINVAL; - } - - DRM_INFO("psp mode1 reset succeed \n"); - return 0; } @@ -666,7 +654,8 @@ static const struct psp_funcs psp_v11_0_funcs = { .ring_get_wptr = psp_v11_0_ring_get_wptr, .ring_set_wptr = psp_v11_0_ring_set_wptr, .load_usbc_pd_fw = psp_v11_0_load_usbc_pd_fw, - .read_usbc_pd_fw = psp_v11_0_read_usbc_pd_fw + .read_usbc_pd_fw = psp_v11_0_read_usbc_pd_fw, + .wait_for_bootloader = psp_v11_0_wait_for_bootloader }; void psp_v11_0_set_psp_funcs(struct psp_context *psp)