Bug 28796 - [ANCK-6.6.102-5.2.1_rc1][riscv64]kernel-selftests.samples-bpf sampleip&spintest测试用例执行报错ERROR: loading /proc/kallsyms
Summary: [ANCK-6.6.102-5.2.1_rc1][riscv64]kernel-selftests.samples-bpf sampleip&spinte...
Status: CONFIRMED
Alias: None
Product: Antest
Classification: Infrastructures
Component: 测试用例 (show other bugs) 测试用例
Version: unspecified
Hardware: riscv Linux
: P3-Medium S3-normal
Target Milestone: ---
Assignee: chenzhuo
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2025-12-26 14:48 UTC by stt02296199
Modified: 2025-12-29 17:27 UTC (History)
1 user (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description stt02296199 alibaba_cloud_group 2025-12-26 14:48:13 UTC
[问题描述]
kernel-selftests.samples-bpf sampleip&spintest测试用例执行报错ERROR: loading /proc/kallsyms

执行日志如下:
# selftests: samples-bpf: sampleip
========================================
ERROR: loading /proc/kallsyms
not ok 1..1 selftests: samples-bpf: sampleip [FAIL]

[重现环境]:
cat /proc/kallsyms |wc -l
2961365
[root@localhost netfilter]# uname -r
6.6.102-5.2.1_rc1.an23.riscv64
[root@localhost netfilter]# cat /boot/config-6.6.102-5.2.1_rc1.an23.riscv64 |grep -i dma|grep -i heap
# CONFIG_DMABUF_HEAPS is not set
[root@localhost netfilter]# lscpu
Architecture:          riscv64
  Byte Order:          Little Endian
CPU(s):                64
  On-line CPU(s) list: 0-63
NUMA:
  NUMA node(s):        4
  NUMA node0 CPU(s):   0-7,16-23
  NUMA node1 CPU(s):   8-15,24-31
  NUMA node2 CPU(s):   32-39,48-55
  NUMA node3 CPU(s):   40-47,56-63
[root@localhost netfilter]# lsblk
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
nvme0n1     259:0    0 953.9G  0 disk
├─nvme0n1p1 259:1    0 121.9M  0 part /boot/efi
├─nvme0n1p2 259:2    0   488M  0 part /boot
├─nvme0n1p3 259:3    0 143.1G  0 part /
├─nvme0n1p4 259:4    0     1K  0 part
├─nvme0n1p5 259:5    0 286.1G  0 part /fs/nvme0n1p5
└─nvme0n1p6 259:6    0 286.1G  0 part
[root@localhost netfilter]# free -g
               total        used        free      shared  buff/cache   available
Mem:              61           2           0           0          59          59
Swap:              0           0           0
[root@localhost netfilter]# cat /proc/cmdline
root=UUID=e297bfa3-2c55-44f8-90cb-ae8eb642d188 ro console=ttyS0,115200 root=LABEL=ROOT rootfstype=ext4 rootwait rw earlycon selinux=0 LANG=en_US.UTF-8 nvme.use_threaded_interrupts=1 nvme_core.io_timeout=3000 audit=0 per_numa_node_futex=disable
gcc版本
gcc (GCC) 12.3.0 20230508 (Anolis OS 12.3.0-13)
[重现步骤]
1.获取内核对应src.rpm包
(KERNEL_SRC_RPM=http://8.131.87.1/kojifiles/repos/dist-an23.3-riscv64-gcc14-build/latest/riscv64/toplink/work/tasks/5939/1035939/kernel-6.6.102-5.2.1_rc1.an23.src.rpm)
rpm -ivh xxx.src.rpm 默认安装到/root下
yum install yum-utils
yum-builddep -y /root/rpmbuild/SPECS/kernel.spec 自动安装前置依赖包 需要yum-utils
rpmbuild -bp /root/rpmbuild/SPECS/kernel.spec # 这个步骤会打相关的patch, 解压缩tar包,生成BUILD目录
cd /root/rpmbuild/BUILD/kernel-*/linux-*/
make defconfig
make headers_install
make modules_prepare
export VMLINUX_BTF=/usr/src/kernels/6.6.102-5.2.1_rc1.an23.riscv64/vmlinux
make M=samples/bpf
cd samples/bpf
./sampleip
./spintest

[实际结果]
测试fail
[期望结果]
测试pass
[原因分析]
初步分析是 /proc/kallsyms的数量过大导致
cat /proc/kallsyms |wc -l
2961365

在/root/rpmbuild/BUILD/kernel-6.6.102-5.2.1_rc1.an23/linux-6.6.102-5.2.1_rc1.an23.riscv64/tools/testing/selftests/bpf/trace_helpers.c  文件中的定义的load_kallsyms的方法返回异常   函数的方法片段如下
#define MAX_SYMS 400000
static struct ksym syms[MAX_SYMS];
static int sym_cnt;

static int ksym_cmp(const void *p1, const void *p2)
{
        return ((struct ksym *)p1)->addr - ((struct ksym *)p2)->addr;
}

int load_kallsyms_refresh(void)
{
        FILE *f;
        char func[256], buf[256];
        char symbol;
        void *addr;
        int i = 0;

        sym_cnt = 0;

        f = fopen("/proc/kallsyms", "r");
        if (!f)
                return -ENOENT;

        while (fgets(buf, sizeof(buf), f)) {
                if (sscanf(buf, "%p %c %s", &addr, &symbol, func) != 3)
                        break;
                if (!addr)
                        continue;
                if (i >= MAX_SYMS)
                        return -EFBIG;

                syms[i].addr = (long) addr;
                syms[i].name = strdup(func);
                i++;
        }
        fclose(f);
        sym_cnt = i;
        qsort(syms, sym_cnt, sizeof(struct ksym), ksym_cmp);
        return 0;
}

int load_kallsyms(void)
{
        /*
         * This is called/used from multiplace places,
         * load symbols just once.
         */
        if (sym_cnt)
                return 0;
        return load_kallsyms_refresh();
}
Comment 1 chenzhuo alibaba_cloud_group 2025-12-29 17:27:01 UTC
根据6.6.102-5_rc1.1的结果,该测试case skip,不影响稳定性即可