设为首页 加入收藏

TOP

Linux 内核链表移植(二)
2014-11-24 03:17:16 来源: 作者: 【 】 浏览:10
Tags:Linux 内核 移植
struct list_head *last = list->prev;
struct list_head *at = head->next;


first->prev = head;
head->next = first;


last->next = at;
at->prev = last;
}


/**
* list_splice - join two lists
* @list: the new list to add.
* @head: the place to add it in the first list.
*/
static inline void list_splice(struct list_head *list, struct list_head *head)
{
if (!list_empty(list)) {
__list_splice(list, head);
}
}


/**
* list_splice_init - join two lists and reinitialise the emptied list.
* @list: the new list to add.
* @head: the place to add it in the first list.
*
* The list at @list is reinitialised
*/
static inline void list_splice_init(struct list_head *list, struct list_head *head)
{
if (!list_empty(list)) {
__list_splice(list, head);
INIT_LIST_HEAD(list);
}
}


#define list_entry(ptr, type, member) \
container_of(ptr, type, member)


#define list_for_each(pos, head) \
for (pos = (head)->next; prefetch(pos->next), pos != (head); \
pos = pos->next)


#define __list_for_each(pos, head) \
for (pos = (head)->next; pos != (head); pos = pos->next)


#define list_for_each_prev(pos, head) \
for (pos = (head)->prev; prefetch(pos->prev), pos != (head); \
pos = pos->prev)


#define list_for_each_safe(pos, n, head) \
for (pos = (head)->next, n = pos->next; pos != (head); \
pos = n, n = pos->next)


#ifdef typeof


#define list_for_each_entry(pos, head, member) \
for (pos = list_entry((head)->next, typeof(*pos), member); \
prefetch(pos->member.next), &pos->member != (head); \
pos = list_entry(pos->member.next, typeof(*pos), member))


#define list_for_each_entry_reverse(pos, head, member) \
for (pos = list_entry((head)->prev, typeof(*pos), member); \
prefetch(pos->member.prev), &pos->member != (head); \
pos = list_entry(pos->member.prev, typeof(*pos), member))


#define list_prepare_entry(pos, head, member) \
((pos) : list_entry(head, typeof(*pos), member))


#define list_for_each_entry_continue(pos, head, member) \
for (pos = list_entry(pos->member.next, typeof(*pos), member); \
prefetch(pos->member.next), &pos->member != (head); \
pos = list_entry(pos->member.next, typeof(*pos), member))


#define list_for_each_entry_safe(pos, n, head, member) \
for (pos = list_entry((head)->next, typeof(*pos), member), \
n = list_entry(pos->member.next, typeof(*pos), member); \
&pos->member != (head); \
pos = n, n = list_entry(n->member.next, typeof(*n), member))
#else


#define list_for_each_entry(pos, typeof_pos, head, member) \
for (pos = list_entry((head)->next, typeof_pos, member); \
prefetch(pos->member.next), &pos->member != (head); \
pos = list_entry(pos->member.next, typeof_pos, member))


#define list_for_each_entry_reverse(pos, typeof_pos, head, member) \
for (pos = list_entry((head)->prev, typeof_pos, member); \
prefetch(pos->member.prev), &pos->member != (head); \
pos = list_entry(pos->member.prev, typeof_pos, member))


#define list_prepare_entry(pos, typeof_pos, head, member) \
((pos) : list_entry(head, typeof_pos, member))


#define list_for_each_entry_continue(pos, typeof_pos, head, member) \
for (pos = list_entry(pos->member.next, typeof_pos, member); \
prefetch(pos->member.next), &pos->member != (head); \
pos = list_entry(pos->member.next, typeof_pos, member))


#define list_for_each_entry_safe(pos, typeof_pos, n, typeof_n, head, member) \

首页 上一页 1 2 3 4 下一页 尾页 2/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Linux内核驱动开发之KGDB单步调试.. 下一篇Linux下程序简单编写_TQ2440第一..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·常用meta整理 | 菜鸟 (2025-12-25 01:21:52)
·SQL HAVING 子句:深 (2025-12-25 01:21:47)
·SQL CREATE INDEX 语 (2025-12-25 01:21:45)
·Shell 传递参数 (2025-12-25 00:50:45)
·Linux echo 命令 - (2025-12-25 00:50:43)