当前位置:首页>Linux>Linux PM 周报 | 2026-06-29 ~ 2026-07-05

Linux PM 周报 | 2026-06-29 ~ 2026-07-05

  • 2026-10-28 17:49:38
Linux PM 周报 | 2026-06-29 ~ 2026-07-05

Linux PM 周报

2026-06-29 ~ 2026-07-05 · 6 patches · 重点 3

一、本周 Patch 一览

ACPI / ACPICA (2)

ACPI: NUMA: remove redundant numa_nodes_parsed node_set() 7cbdade40fb8

删除 numa_add_memblk() 后多余的 node_set(),无功能变化

ACPICA: Define acpi_ut_safe_strncpy() as strscpy_pad() alias 9825cf2cb59f

将 acpi_ut_safe_strncpy() 定义为 strscpy_pad() 别名,清理 #ifdef 死代码

cpufreq (3)

cpufreq: apple-soc: Fix OPP table cleanup d87cb889dc7a

修复 Apple SoC cpufreq 驱动 OPP 表在失败/退出路径未正确清理的问题

Replace <linux/mod_devicetable.h> by more specific <linux/device-id/*.h> (c files) 995832b2cebe

将 mod_devicetable.h 替换为更具体的 linux/device-id/*.h 头文件

cpufreq: qcom-nvmem: Add IPQ5210 support 80652b0de257

qcom-nvmem cpufreq 新增 IPQ5210 eFuse 调速支持,屏蔽 cpufreq-dt

thermal (1)

Replace <linux/mod_devicetable.h> by more specific <linux/device-id/*.h> (c files) 995832b2cebe

将 mod_devicetable.h 替换为更具体的 linux/device-id/*.h 头文件

二、重点 Patch 深度解读

重点 #1 · cpufreq

cpufreq: apple-soc: Fix OPP table cleanup

Haoxiang Li · d87cb889dc7a

  • apple_soc_cpufreq_init() 从固件加载 OPP 表,但部分错误路径未拆除已添加的 OPP;且使用 dev_pm_opp_remove_all_dynamic() 并不适合 firmware 来源的 OPP。

  • 本 patch 在 policy cpumask 就绪后改用 cpumask 版 OPP 添加/删除 helper,在 init 失败路径与 apple_soc_cpufreq_exit() 中成对清理,并去掉多余的 dev_pm_opp_set_sharing_cpus()。

  • 修复 Apple SoC 平台在驱动卸载或初始化失败时 OPP 残留导致的 cpufreq 异常。

相关代码

diff --git a/drivers/cpufreq/apple-soc-cpufreq.c b/drivers/cpufreq/apple-soc-cpufreq.c

index 638e5bf72185..3f64f266e695 100644

--- a/drivers/cpufreq/apple-soc-cpufreq.c

+++ b/drivers/cpufreq/apple-soc-cpufreq.c

@@ -249,21 +249,19 @@ static int apple_soc_cpufreq_init(struct cpufreq_policy *policy)

  return -ENODEV;

  }

- ret = dev_pm_opp_of_add_table(cpu_dev);

- if (ret < 0) {

- dev_err(cpu_dev, "%s: failed to add OPP table: %d\n", __func__, ret);

- return ret;

- }

+ priv = kzalloc_obj(*priv);

+ if (!priv)

+ return -ENOMEM;

  ret = apple_soc_cpufreq_find_cluster(policy, &reg_base, &info);

  if (ret) {

  dev_err(cpu_dev, "%s: failed to get cluster info: %d\n", __func__, ret);

- return ret;

+ goto out_free_priv;

  }

- ret = dev_pm_opp_set_sharing_cpus(cpu_dev, policy->cpus);

- if (ret) {

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

重点 #2 · cpufreq

cpufreq: qcom-nvmem: Add IPQ5210 support

Varadarajan Narayanan · 80652b0de257

  • IPQ5210 通过 eFuse speed bin 暴露 CPU 频率上限,不同 SoC 变体支持的 OPP 不同。

  • qcom-nvmem cpufreq 驱动新增 IPQ5210 平台数据:运行时根据 eFuse 与 opp-supported-hw 选择合法 OPP;并阻止通用 cpufreq-dt 平台设备在 IPQ5210 上 probe,确保走 NVMEM 驱动。

  • 使 Qualcomm 路由器/嵌入式平台能正确限制频率档位,避免错误 OPP 导致调频越界。

相关代码

diff --git a/drivers/cpufreq/cpufreq-dt-platdev.c b/drivers/cpufreq/cpufreq-dt-platdev.c

index ff1204c666b1..284eece9e230 100644

--- a/drivers/cpufreq/cpufreq-dt-platdev.c

+++ b/drivers/cpufreq/cpufreq-dt-platdev.c

@@ -200,6 +200,7 @@ static const struct of_device_id blocklist[] __initconst = {

  { .compatible = "ti,am62l3", },

  { .compatible = "ti,am62p5", },

+ { .compatible = "qcom,ipq5210", },

  { .compatible = "qcom,ipq5332", },

  { .compatible = "qcom,ipq5424", },

  { .compatible = "qcom,ipq6018", },

diff --git a/drivers/cpufreq/qcom-cpufreq-nvmem.c b/drivers/cpufreq/qcom-cpufreq-nvmem.c

index e6d28d162442..efa766e98d86 100644

--- a/drivers/cpufreq/qcom-cpufreq-nvmem.c

+++ b/drivers/cpufreq/qcom-cpufreq-nvmem.c

@@ -200,6 +200,13 @@ static int qcom_cpufreq_kryo_name_version(struct device *cpu_dev,

  case QCOM_ID_IPQ9574:

  drv->versions = 1 << (unsigned int)(*speedbin);

  break;

+ case QCOM_ID_IPQ5200:

+ case QCOM_ID_IPQ5210:

+ case QCOM_ID_QCF2200:

+ case QCOM_ID_QCF3200:

+ case QCOM_ID_QCF3210:

+ drv->versions = (*speedbin == 0xcd) ? BIT(1) : BIT(0);

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

重点 #3 · ACPI

ACPICA: Define acpi_ut_safe_strncpy() as strscpy_pad() alias

Rafael J. Wysocki · 9825cf2cb59f

  • ACPICA 此前将 acpi_ut_safe_strncpy() 改为调用 strscpy_pad(),并用 #ifdef __KERNEL__ 区分内核与 tools 构建,导致 tools 侧产生死代码。本 patch 删除原函数体,直接 #define acpi_ut_safe_strncpy 为 strscpy_pad 别名,与内核字符串拷贝语义对齐且简化维护。

  • 改动集中在 ACPICA 头文件/实现:不再维护独立包装函数,修复 292db66afd20 引入的 tools 构建问题(Fixes 已标注)。

  • 影响 ACPI 表解析路径中所有经 acpi_ut_safe_strncpy 的定长字符串拷贝,属于 ACPICA 与内核 strscpy 体系合流的清理型修复。

相关代码

diff --git a/drivers/acpi/acpica/acutils.h b/drivers/acpi/acpica/acutils.h

index 9a18cdbfd60f..9049bfee409c 100644

--- a/drivers/acpi/acpica/acutils.h

+++ b/drivers/acpi/acpica/acutils.h

@@ -626,8 +626,6 @@ void acpi_ut_repair_name(char *name);

 #if defined (ACPI_DEBUGGER) || defined (ACPI_APPLICATION) || defined (ACPI_DEBUG_OUTPUT)

 u8 acpi_ut_safe_strcpy(char *dest, acpi_size dest_size, char *source);

-void acpi_ut_safe_strncpy(char *dest, char *source, acpi_size dest_size);

-

 u8 acpi_ut_safe_strcat(char *dest, acpi_size dest_size, char *source);

 u8

diff --git a/drivers/acpi/acpica/utnonansi.c b/drivers/acpi/acpica/utnonansi.c

index 93867ad7f342..a465e5a1d309 100644

--- a/drivers/acpi/acpica/utnonansi.c

+++ b/drivers/acpi/acpica/utnonansi.c

@@ -164,20 +164,4 @@ acpi_ut_safe_strncat(char *dest,

  return (FALSE);

 }

-void acpi_ut_safe_strncpy(char *dest, char *source, acpi_size dest_size)

-{

- /* Always terminate destination string */

-

-#ifdef __KERNEL__

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

linux-pm-report · 周报

最新文章

随机文章