395 Star 1.4K Fork 1.3K

GVPopenEuler / kernel

 / 详情

【SP2】x86物理机acpi_cpufreq 驱动加载失败,但是不报错

已验收
缺陷
创建于  
2021-05-20 10:22

【环境信息】
系统:x86_64物理机
转测20.03-LTS-SP2第二轮版本
【问题复现步骤】
挂载OS镜像,软件选择处选择虚拟化
安装成功后启动
modprobe acpi_cpufreq
lsmod | grep cpufreq
【预期结果】
模块加载成功,lsmod可以查看到模块或者模块加载失败,modprobe有FAIL打印
【实际结果】
输入图片说明
输入图片说明

附件
baizhilaoda 2021-05-20 10:20
baizhilaoda 2021-05-20 10:20

评论 (10)

baizhilaoda 创建了缺陷
baizhilaoda 负责人设置为成坚 (CHENG Jian)
baizhilaoda 优先级设置为次要
baizhilaoda 关联仓库设置为openEuler/kernel
展开全部操作日志

Hey baizhilaoda, Welcome to openEuler Community.
All of the projects in openEuler Community are maintained by @openeuler-ci-bot.
That means the developers can comment below every pull request or issue to trigger Bot Commands.
Please follow instructions at https://gitee.com/openeuler/community/blob/master/en/sig-infrastructure/command.md to find the details.

openeuler-ci-bot 添加了
 
sig/Kernel
标签

acpi_cpufreq 肯定没加载上的。

目前 X86 使用的调频驱动都是 intel_pstate 调频驱动

1 首先说你目录不存在的问题


systemd 刚开始去检查 /sys/module/acpi_cpufreq 的目录,但是这个驱动没有加载,因此不会有这个目录。

将该 CONFIG 设置成 Y
这个目录就正常有了

输入图片说明

但是 initstate 这个目录是不会有的,因为不是按照模块加载的。

2 其次说modprobe 驱动加载的问题


调试驱动加载过程

perf probe layout_and_allocate
perf probe  find_module_sections
echo 1 >  /sys/kernel/debug/tracing/events/module/module_load/enable 

开启initcall 调试

echo 1 >  /sys/module/kernel/parameters/initcall_debug
echo 1 >   /sys/kernel/debug/tracing/events/initcall/enable

输入图片说明

可以看到驱动其实返回了 -17

21 #define EEXIST          17      /* File exists */

输入图片说明

perf trace modprobe acpi-cpufreq

  1.747 ( 0.004 ms): modprobe/3833 mmap(len: 453137, prot: READ, flags: PRIVATE, fd: 3                   ) = 0x7fa9b8b92000
     1.752 (21.456 ms): modprobe/3833 finit_module(fd: 3</usr/lib/modules/4.19.90+/kernel/drivers/cpufreq/acpi-cpufreq.ko>, uargs: 0x562611d1f410) = -1 EEXIST File exists
    23.216 ( 0.005 ms): modprobe/3833 munmap(addr: 0x7fa9b8b92000, len: 453137                              ) = 0
    23.223 ( 0.002 ms): modprobe/3833 close(fd: 3</usr/lib/modules/4.19.90+/kernel/drivers/cpufreq/acpi-cpufreq.ko>) = 0
    23.227 ( 0.006 ms): modprobe/3833 munmap(addr: 0x7fa9b8d41000, len: 360471                              ) = 0
    23.235 ( 0.008 ms): modprobe/3833 munmap(addr: 0x7fa9b8c77000, len: 823906                              ) = 0
    23.245 ( 0.008 ms): modprobe/3833 munmap(addr: 0x7fa9b8c01000, len: 479339                              ) = 0
    23.255 ( 0.004 ms): modprobe/3833 munmap(addr: 0x7fa9b92d0000, len: 21223                               ) = 0
    23.261 ( 0.003 ms): modprobe/3833 munmap(addr: 0x7fa9b92cd000, len: 9854                                ) = 0
    23.284 (         ): modprobe/3833 exit_group(            

可以看到 modprobe 不会把 EEXIST 当成错误(因为在他看来,你的设备已经找到了合适的驱动)

使用 insmod 可以看到实际的返回信息

insmod acpi-cpufreq.ko
insmod: ERROR: could not insert module acpi-cpufreq.ko: File exists

至于 systemd 在启动阶段,为什么要去插入和读取 acpi_cpufreq 驱动。
麻烦找负责 systemd 的兄弟确认下

该错误没啥实际影响。
建议 issue 关掉吧。谢谢

成坚 (CHENG Jian) 任务状态待办的 修改为已完成
baizhilaoda 任务状态已完成 修改为已验收

登录 后才可以发表评论

状态
负责人
项目
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
预计工期 (小时)
参与者(3)
5329419 openeuler ci bot 1632792936
C
1
https://gitee.com/openeuler/kernel.git
git@gitee.com:openeuler/kernel.git
openeuler
kernel
kernel

搜索帮助