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