0

我正在尝试做一些看起来应该非常简单的事情,遍历保存的 kmem_cache 对象kmalloc_caches以打印它们的名称。这总是以内核恐慌结束。我的 C 很生锈,所以如果我有什么误解,我会很感激任何照明。我添加了以下功能:

void *print_cachenames(void) {
    struct kmem_cache *k;
k = kmalloc_caches[0];
    printk(KERN_INFO "680: k[0] name: %s\n", k->name);
}

到 mm/slub.c。它所做的只是尝试打印数组中第一个 kmem_cache 对象的名称。是什么导致它爆炸?

4

2 回答 2

0

您的函数被声明为返回 a void *,并且它根本没有返回任何东西。我不确定你的函数是从哪里调用的,但很可能它应该返回一些东西......

于 2012-05-01T03:45:14.273 回答
0

kmalloc_caches[0]似乎未使用。一般来说,您应该在尝试使用它之前检查您从缓存中读取的指针是否为 NULL:

void print_cachenames(void) {
        struct kmem_cache *k = kmalloc_caches[0];

        if (k && k->name)
                printk(KERN_INFO "680: k[0] name: %s\n", k->name);
        else 
                printk(KERN_INFO "680: k[0] == %p, has no name\n");
}
于 2012-05-01T06:23:36.870 回答