Linux カーネル モジュールを作成していますが、いくつか問題があります。これらのポインター値を確認した後、私のモジュールは正しく機能しません。
static struct area_control {
struct list_head head;
unsigned long addr;
unsigned long jiffies;
struct area_part *part;
} *const_areas = NULL, *var_areas = NULL;
static struct area_control *Find_Area(unsigned long addr, struct area_control *first_area)
{
if (first_area)
{
struct area_control *cur_area = first_area;
while ( 1 )
{
if (!cur_area) return NULL;
if (cur_area->addr == addr)
{
cur_area->jiffies = jiffies;
return cur_area;
}
cur_area = list_entry(cur_area->head.next, struct area_control, head);
if (cur_area == first_area) return NULL;
}
}
return NULL;
}
cur_area->head.next
cur_area が NULL であるため、ある時点で
モジュールが落ちます! - この事実は、コール トレースと逆アセンブラから取得しました。Linux 2.6.34 x86_64 マルチプロセッサ アーキテクチャ用モジュール