2012-05-01 106 views
0

我試圖做一些看起來應該非常簡單的事情,通過在kmalloc_caches中持有的kmem_cache對象迭代來打印它們的名字。這總是以內核恐慌結束。我的C很生鏽,所以如果我誤解了某些東西,我會很感激任何照明。我添加了以下功能:如何通過kmem_caches進行迭代?

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

to mm/slub.c。它所做的只是嘗試打印數組中第一個kmem_cache對象的名稱。是什麼導致它炸燬?

+0

希望我知道這個答案,聽起來像一個有趣的問題... –

回答

0

你的函數被聲明爲返回一個void *,它沒有返回任何東西。我不確定你的功能在哪裏被調用,但有可能是它應該返回一些東西...

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"); 
}