当前位置:首页>Linux>Linux PM 周报 | 2026-07-21 ~ 2026-07-27

Linux PM 周报 | 2026-07-21 ~ 2026-07-27

  • 2026-10-11 05:41:17
Linux PM 周报 | 2026-07-21 ~ 2026-07-27

Linux PM 周报

2026-07-21 ~ 2026-07-27 · 40 patches · 重点 5 项

一、本周 Patch 一览

ACPI / ACPICA (22)

ACPI: CPPC: add paired FFH feedback-counter read hook 9aa7df520523

ACPI:新增 CPPC 配对 FFH 反馈计数器读取钩子

ACPI: battery: Adjust charging status validation check 77ce4be0d8d5

ACPI:调整电池充电状态校验逻辑

ACPI: fan: Use correct function parameter name in kernel-doc 7609bf715c96

ACPI:修正 fan 驱动 kernel-doc 参数名

ACPI: battery: Use kstrtoul() over sscanf("%lu\n") 57346c4d78d3

ACPI:电池 sysfs 解析改用 kstrtoul()

ACPI: battery: Merge consecutive battery notifications 69e81ddfee76

ACPI:合并连续电池通知事件

ACPI: fan: Update ACPI fan IDs to follow modern style 2eb0ea366427

ACPI:更新 ACPI fan 设备 ID 命名风格

ACPI: fan: Don't use "proxy" headers 96a3a2cd26d8

ACPI:fan 驱动去除 proxy 头文件引用

ACPI: sysfs: Properly map BERT and CCEL data to their ACPI tables e45ee607ca6f

ACPI:修正 BERT/CCEL sysfs 与 ACPI 表映射

ACPI: Use correct region struct for BERT region size check f45c999e6712

ACPI:修正 BERT 区域大小检查所用结构体

ACPI: video: Use acpi_dev_get_pci_dev() instead of acpi_get_pci_dev() 1c24aa1bb200

ACPI:video 驱动改用 acpi_dev_get_pci_dev()

ACPI: video: Drop backlight parent device reference later 2e8c155fe8bf

ACPI:延迟释放背光父设备引用

ACPI: PCI: Introduce acpi_dev_get_pci_dev() 9d4f0ecb87fd

ACPI:引入 acpi_dev_get_pci_dev() 获取 PCI 设备

ACPI: PCI: Use a mutex guard to simplify acpi_get_pci_dev() 5d42a19dac27

ACPI:用互斥锁简化 acpi_get_pci_dev()

ACPI: PCI: Clear driver_data on all paths that free the acpi_pci_root 8a742141f7ab

ACPI:修复 acpi_pci_root 释放路径未清空 driver_data

ACPI: processor: validate MADT IOAPIC entry bounds 2c50ffdc73f3

ACPI:校验 MADT IOAPIC 表项边界

ACPI: EC: Avoid _REG disconnect on GPIO IRQ defer e71bdbce27dc

ACPI:避免 GPIO IRQ 延迟时 EC _REG 误断开

ACPI: video: Convert to use acpi_dev_is_video_device() helper ad921e94ffe1

ACPI:改用 acpi_dev_is_video_device() 辅助函数

ACPI: scan: Convert to use acpi_dev_is_video_device() helper 998a168134be

ACPI:改用 acpi_dev_is_video_device() 辅助函数

ACPI: utils: Introduce acpi_dev_is_video_device() helper c75c99aafef5

ACPI:引入 acpi_dev_is_video_device() 判断视频设备

ACPI: battery: Sanitise model_number by dropping unprintable characters 6587dd87595c

ACPI:清理电池 model_number 不可打印字符

ACPI: FPDT: validate table and record lengths 458b40fcdd04

ACPI:校验 FPDT 表及记录长度

ACPI: NVS: replace __get_free_page() with kmalloc() dbd3f825128d

ACPI:NVS 分配改用 kmalloc() 替代 __get_free_page()

cpufreq (11)

ACPI: CPPC: Check all controls for fast switching 11055a46f398

cpufreq:检查 CPPC 全部控制寄存器以支持快速切换

cpufreq: apple-soc: Calculate frequency as a 64-bit value 391b4b1d5476

cpufreq:Apple SoC 频率计算改用 64 位精度

cpufreq: dt-platdev: Add SpacemiT K1 SoC to the allowlist 736d655c842f

cpufreq:dt-platdev 新增 SpacemiT K1 SoC 白名单

cpufreq/amd-pstate: handle missing policy in dynamic EPP callbacks 39c0cf62fc78

cpufreq:amd-pstate 动态 EPP 回调处理 policy 缺失

cpufreq/amd-pstate: Cache the firmware programmed EPP value d0f4c1c8cbff

cpufreq:amd-pstate 缓存固件写入的 EPP 值

cpufreq/amd-pstate: Toggle auto_sel in active mode on shared memory systems 9dfd13f80c85

cpufreq:共享内存系统 active 模式切换 auto_sel

cpufreq/amd-pstate: Fix EPP return type and handle errors during initialization 57476909c300

cpufreq:修复 amd-pstate EPP 返回类型与初始化错误处理

cpufreq: amd-pstate-ut: Skip tests when amd-pstate driver is not active 8d31bb145164

cpufreq:amd-pstate 单测在未加载驱动时跳过

cpufreq/amd-pstate: Prevent the driver from loading on unsupported hardware 08fc1e7b31f8

cpufreq:amd-pstate 禁止在不支持硬件上加载

cpufreq/amd-pstate: Loosen requirement on lowest nonlinear frequency != min freq 6842427bf299

cpufreq:放宽 amd-pstate 最低非线性频率约束

cpufreq: cppc: Sanitize lockless policy limit snapshots 9753c0ab89b7

cpufreq:无锁读 policy min/max 不一致时将下限压到上限

thermal (5)

thermal: intel: int340x: simplify ptc_temperature_write() f1e50b1bcc23

thermal:简化 int340x ptc_temperature_write()

thermal: intel: bxt_pmic: Remove redundant dev_err() 5cc6da534cc3

thermal:移除冗余 dev_err() 错误日志

thermal: intel: int340x: Remove redundant dev_err() 75292391464f

thermal:移除冗余 dev_err() 错误日志

thermal: intel: int3400: clean up ODVP on probe failures d83dc9ce57a7

thermal:int3400 probe 失败时清理 ODVP 资源

thermal: intel: int340x: clean up RFIM groups on DVFS failure 28f34d7dafa6

thermal:int340x DVFS 失败时清理 RFIM 组

电源管理 (2)

PM: hibernate: Use %pe to print error pointer values 45a7c1077ba7

电源管理:hibernate 使用 %pe 打印错误指针

PM: hibernate: Remove kernel-doc markings from helper descriptions 20919d30f4ec

电源管理:移除 hibernate 辅助函数 kernel-doc 标记

二、重点 Patch 深度解读

重点 #1 · cpufreq · 系列解读 (7 patches)

cpufreq: amd-pstate — EPP 与平台支持性整理

EDAMAMEX、Marco Scardovi、Mario Limonciello、Qianheng Peng

【概述】本周合入 7 个 amd-pstate 相关补丁,集中完善 EPP(Energy Performance Preference)路径、共享内存平台行为与驱动加载守卫。

【背景】AMD P-State 驱动在 Zen 及更新平台上通过 MSR/共享内存与固件协作调频。本系列修复 EPP 初始化返回值类型、缓存固件 programmed EPP、在 dynamic EPP 回调中处理 policy 缺失,并在 active 模式下于共享内存系统切换 auto_sel。

【改动要点】① 在不支持硬件上拒绝加载驱动,避免误绑定;② 放宽最低非线性频率与 min 频率不等的约束;③ 修复 EPP 返回类型与初始化阶段的错误处理,并缓存固件 programmed EPP;④ dynamic EPP 回调在 policy 缺失时安全返回,共享内存平台 active 模式正确切换 auto_sel;⑤ 单元测试在驱动未激活时自动跳过。

【说明】本周另有独立补丁 cpufreq: cppc 修正无锁读取 policy 限值的问题,属通用 CPPC 驱动(cppc_cpufreq),与 amd-pstate 非同一驱动,见第一章一览。

【影响】影响 AMD 笔记本/服务器平台的调频策略与功耗表现;建议在 Rembrandt、Phoenix 及 EPYC 平台验证 EPP 切换、performance/powersave 模式与 cpufreq 压力统计。

系列补丁清单(7 个)

1.39c0cf62fc78 cpufreq:amd-pstate 动态 EPP 回调处理 policy 缺失

2.57476909c300 cpufreq:修复 amd-pstate EPP 返回类型与初始化错误处理

3.9dfd13f80c85 cpufreq:共享内存系统 active 模式切换 auto_sel

4.d0f4c1c8cbff cpufreq:amd-pstate 缓存固件写入的 EPP 值

5.6842427bf299 cpufreq:放宽 amd-pstate 最低非线性频率约束

6.8d31bb145164 cpufreq:amd-pstate 单测在未加载驱动时跳过

7.08fc1e7b31f8 cpufreq:amd-pstate 禁止在不支持硬件上加载

代表性代码(08fc1e7b31f8 · cpufreq/amd-pstate: Prevent the driver from loading on unsupported hardware)

diff --git a/drivers/cpufreq/amd-pstate.c b/drivers/cpufreq/amd-pstate.c

index 3d72337a3336..3a6b4b224a66 100644

--- a/drivers/cpufreq/amd-pstate.c

+++ b/drivers/cpufreq/amd-pstate.c

@@ -2167,6 +2167,7 @@ static struct cpufreq_driver amd_pstate_epp_driver = {

 };

 /*

+ * Processors without frequency scaling support can't do CPPC.

  * CPPC function is not supported for family ID 17H with model_ID ranging from 0x10 to 0x2F.

  * show the debug message that helps to check if the CPU has CPPC support for loading issue.

  */

@@ -2175,6 +2176,11 @@ static bool amd_cppc_supported(void)

  struct cpuinfo_x86 *c = &cpu_data(0);

  bool warn = false;

+ if (!cpu_feature_enabled(X86_FEATURE_HW_PSTATE)) {

+ pr_debug_once("frequency scaling is not supported by the processor\n");

+ return false;

+ }

+

  if ((boot_cpu_data.x86 == 0x17) && (boot_cpu_data.x86_model < 0x30)) {

  pr_debug_once("CPPC feature is not supported by the processor\n");

  return false;

重点 #2 · ACPI

ACPI: EC: Avoid _REG disconnect on GPIO IRQ defer

Zhu Ling · e71bdbce27dc

【概述】ACPI:避免 GPIO IRQ 延迟时 EC _REG 误断开

【背景】该补丁属于 ACPI 子系统的缺陷修复,旨在纠正现有实现中的逻辑错误或边界处理不当,避免运行时异常或资源泄漏。

【代码改动】代码行变更:+18 / -0

【影响】属于缺陷修复,建议关注相关子系统回归测试;修复关联:f6484cadbcaf ("ACPI: EC: clean up handlers on probe failure in acpi_ec_setup()")

相关代码

diff --git a/drivers/acpi/ec.c b/drivers/acpi/ec.c

index 64ad4cfa6208..a89f10256dbb 100644

--- a/drivers/acpi/ec.c

+++ b/drivers/acpi/ec.c

@@ -1510,6 +1510,24 @@ static bool install_gpio_irq_event_handler(struct acpi_ec *ec)

     IRQF_SHARED | IRQF_ONESHOT, "ACPI EC", ec) >= 0;

 }

+static int ec_prepare_gpio_irq(struct acpi_ec *ec, struct acpi_device *device)

+{

+ int irq;

+

+ if (!device || ec->gpe >= 0 || ec->irq >= 0)

+ return 0;

+

+ /* ACPI reduced hardware platforms use a GpioInt from _CRS. */

+ irq = acpi_dev_gpio_irq_get(device, 0);

+ if (irq == -EPROBE_DEFER)

+ return irq;

+

+ if (irq >= 0)

+ ec->irq = irq;

+

+ return 0;

+}

+

── 以下省略 46 行 diff,完整 patch 请在内核 git 查看 ──

重点 #3 · ACPI

ACPI: PCI: Clear driver_data on all paths that free the acpi_pci_root

Chen Pei · 8a742141f7ab

【概述】ACPI:修复 acpi_pci_root 释放路径未清空 driver_data

【背景】struct acpi_driver 与通用 device_driver 存在功能重叠,本次删除该结构体并统一使用标准驱动模型,减少 ACPI 总线层维护负担。

【技术说明】主要改动集中在 pci_unlock_rescan_remove() 等函数。

【代码改动】涉及函数:pci_unlock_rescan_remove();代码行变更:+2 / -1

【影响】修复关联:db89b4f0dbab ("ACPI: catch calls of acpi_driver_data on pointer of wrong type")

相关代码

diff --git a/drivers/acpi/pci_root.c b/drivers/acpi/pci_root.c

index 4c06c3ffd0cb..408ba12362a7 100644

--- a/drivers/acpi/pci_root.c

+++ b/drivers/acpi/pci_root.c

@@ -725,7 +725,6 @@ static int acpi_pci_root_add(struct acpi_device *device,

  dev_err(&device->dev,

  "Bus %04x:%02x not present in PCI namespace\n",

  root->segment, (unsigned int)root->secondary.start);

- device->driver_data = NULL;

  result = -ENODEV;

  goto remove_dmar;

  }

@@ -765,6 +764,7 @@ static int acpi_pci_root_add(struct acpi_device *device,

  if (hotadd)

  dmar_device_remove(handle);

 end:

+ device->driver_data = NULL;

  kfree(root);

  return result;

 }

@@ -788,6 +788,7 @@ static void acpi_pci_root_remove(struct acpi_device *device)

  pci_unlock_rescan_remove();

+ device->driver_data = NULL;

  kfree(root);

── 以下省略 2 行 diff,完整 patch 请在内核 git 查看 ──

重点 #4 · ACPI

ACPI: Use correct region struct for BERT region size check

Thomas Renninger · f45c999e6712

【概述】ACPI:修正 BERT 区域大小检查所用结构体

【背景】该补丁属于 ACPI 子系统的缺陷修复,旨在纠正现有实现中的逻辑错误或边界处理不当,避免运行时异常或资源泄漏。

【代码改动】代码行变更:+1 / -1

【影响】属于缺陷修复,建议关注相关子系统回归测试

相关代码

diff --git a/drivers/acpi/sysfs.c b/drivers/acpi/sysfs.c

index 908cc5c7e643..8395efbe248b 100644

--- a/drivers/acpi/sysfs.c

+++ b/drivers/acpi/sysfs.c

@@ -447,7 +447,7 @@ static int acpi_bert_data_init(void *th, struct acpi_data_attr *data_attr)

  struct acpi_table_bert *bert = th;

  if (bert->header.length < sizeof(struct acpi_table_bert) ||

-    bert->region_length < sizeof(struct acpi_hest_generic_status)) {

+    bert->region_length < sizeof(struct acpi_bert_region)) {

  kfree(data_attr);

  return -EINVAL;

  }

重点 #5 · ACPI

ACPI: processor: validate MADT IOAPIC entry bounds

Pengpeng Hou · 2c50ffdc73f3

【概述】ACPI:校验 MADT IOAPIC 表项边界

【背景】该补丁对 ACPI 子系统实现进行调整或重构,优化代码结构并改善可维护性。

【代码改动】代码行变更:+13 / -1

【影响】修复关联:ecf5636dcd59 ("ACPI: Add interfaces to parse IOAPIC ID for IOAPIC hotplug")

相关代码

diff --git a/drivers/acpi/processor_core.c b/drivers/acpi/processor_core.c

index a4498357bd16..3bf076c150fa 100644

--- a/drivers/acpi/processor_core.c

+++ b/drivers/acpi/processor_core.c

@@ -336,11 +336,26 @@ int acpi_get_cpuid(acpi_handle handle, int type, u32 acpi_id)

 EXPORT_SYMBOL_GPL(acpi_get_cpuid);

 #ifdef CONFIG_ACPI_HOTPLUG_IOAPIC

-static int get_ioapic_id(struct acpi_subtable_header *entry, u32 gsi_base,

+static bool madt_entry_is_valid(struct acpi_subtable_header *entry,

+ unsigned long end)

+{

+ unsigned long start = (unsigned long)entry;

+

+ if (start >= end || end - start < sizeof(*entry))

+ return false;

+

+ return entry->length >= sizeof(*entry) && entry->length <= end - start;

+}

+

+static int get_ioapic_id(struct acpi_subtable_header *entry,

+ const unsigned long end, u32 gsi_base,

  u64 *phys_addr, int *ioapic_id)

 {

  struct acpi_madt_io_apic *ioapic = (struct acpi_madt_io_apic *)entry;

── 以下省略 41 行 diff,完整 patch 请在内核 git 查看 ──

linux-pm-report · 周报

最新文章

随机文章