list_add

static inline void list_add(struct list_head *new, struct list_head *head)
{
	__list_add(new, head, head->next);
}

new: 要加入的新 entry

head: 原本的 list 的 head

list_add_tail

static inline void list_add_tail(struct list_head *new, struct list_head *head)
{
	__list_add(new, head->prev, head);
}

list_del / list_del_init

static inline void list_del(struct list_head *entry)
{
	__list_del_entry(entry);
	entry->next = LIST_POISON1;
	entry->prev = LIST_POISON2;
}

將 entry 移除。比起 delete 比較像 remove (因為沒有把 entry node 的記憶體釋放)

list_del_init: 有重新對 entry node 做 initialize

list_replace / list_replace_init

static inline void list_replace(struct list_head *old,
				struct list_head *new)
{
	new->next = old->next;
	new->next->prev = new;
	new->prev = old->prev;
	new->prev->next = new;
}

將 old 的 node 移除,以 new 的 node 取而代之。

list_replace_init: 對 old node 進行 initialize

list_swap

static inline void list_swap(struct list_head *entry1,
			     struct list_head *entry2)
{
	struct list_head *pos = entry2->prev;

	list_del(entry2);
	list_replace(entry1, entry2);
	if (pos == entry1)
		pos = entry2;
	list_add(entry1, pos);
}

將 entry1 和 entry2 的位置互換。