Link list usage

Link list usage

1. define the list head with global variable
static LIST_HEAD(sample_dev_list);

2. define a sample struct

struct sample_dev{
       struct sample_priv *dev_priv;
       struct list_head list;
};

3. add list member

sample_dev_entry = kmalloc(sizeof(*sample_dev_entry), GFP_KERNEL);
if (!sample_dev_entry)
    return -ENOMEM;
sample_dev_entry->dev_priv = indr_priv;
INIT_LIST_HEAD(&sample_dev_entry->list);
list_add(&sample_dev_entry->list, &sample_dev_list);

4. parse the list

struct sample_dev *each_dev;
list_for_each_entry(each_dev, &sample_dev_list, list) {
//operate on the each_dev
}

5. release the list

struct sample_dev *each_dev, *next;
list_for_each_entry_safe(each_dev, next, &sample_dev_list, list) {
list_del(&each_dev->list);
kfree(each_dev);
}
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章