--- /dev/null
+#include <linux/module.h>
+#include <linux/list.h>
+
+MODULE_LICENSE("GPL");
+
+struct test
+{
+ int val;
+ struct list_head l;
+};
+
+static struct test *mylist;
+
+LIST_HEAD(test_head);
+
+static int test_list_init(void)
+{
+ struct list_head *l;
+ int i;
+ mylist = kmalloc(sizeof(struct test) * 16, GFP_KERNEL);
+ for (i = 0; i < 16; i++)
+ mylist[i].val = i;
+ if (mylist == NULL)
+ return ENOMEM;
+ list_add_tail(&mylist[0].l, &test_head);
+ list_add_tail(&mylist[1].l, &test_head);
+ list_add_tail(&mylist[2].l, &test_head);
+ list_add_tail(&mylist[3].l, &test_head);
+ list_del(&mylist[1].l);
+ list_for_each(l, &test_head) {
+ struct test *h = list_entry(l, struct test, l);
+ printk(KERN_DEBUG "%d\n", h->val);
+ }
+ return 0;
+}
+
+static void test_list_exit(void)
+{
+ kfree(mylist);
+}
+
+module_init(test_list_init);
+module_exit(test_list_exit);