list.h update (resent again)
Subsystems (6)
PATCH 1/1 list.h update (resent again)
This patch updates list.h to the 2.5 version, including
- list_t typedef
- static inline insead of static __inline__
- list_move/list_move_tail
- list_splice_init
include/linux/list.h +75 -36
@@ -19,10 +19,12 @@ struct list_head {struct list_head *next, *prev; }; +typedef struct list_head list_t ; +#define LIST_HEAD_INIT (name) { &(name), &(name) }#define LIST_HEAD (name) \ - struct list_head name = LIST_HEAD_INIT(name) + list_t name = LIST_HEAD_INIT(name)#define INIT_LIST_HEAD (ptr) do { \ (ptr)->next = (ptr); (ptr)->prev = (ptr); \
@@ -34,9 +36,7 @@ struct list_head {* This is only for internal list manipulation where we know * the prev/next entries already! */ -static __inline__void __list_add (struct list_head * new, -struct list_head * prev, -struct list_head * next) +static inline void __list_add (list_t *new,list_t *prev,list_t *next) { next->prev = new; new->next = next;
@@ -52,7 +52,7 @@ static __inline__ void __list_add(struct* Insert a new entry after the specified head. * This is good for implementing stacks. */ -static __inline__void list_add (struct list_head *new,struct list_head *head) +static inline void list_add (list_t *new,list_t *head) {__list_add (new, head, head->next); }
@@ -65,7 +65,7 @@ static __inline__ void list_add(struct l* Insert a new entry before the specified head. * This is useful for implementing queues. */ -static __inline__void list_add_tail (struct list_head *new,struct list_head *head) +static inline void list_add_tail (list_t *new,list_t *head) {__list_add (new, head->prev, head); }
@@ -77,8 +77,7 @@ static __inline__ void list_add_tail(str* This is only for internal list manipulation where we know * the prev/next entries already! */ -static __inline__void __list_del (struct list_head * prev, -struct list_head * next) +static inline void __list_del (list_t * prev,list_t * next) { next->prev = prev; prev->next = next;
@@ -89,54 +88,96 @@ static __inline__ void __list_del(struct* @entry: the element to delete from the list. * Note: list_empty on entry does not return true after this, the entry is in an undefined state. */ -static __inline__void list_del (struct list_head *entry) +static inline void list_del (list_t *entry) {__list_del (entry->prev, entry->next); + entry->next = (void *)0 ; + entry->prev = (void *)0 ; }/** * list_del_init - deletes entry from list and reinitialize it. * @entry: the element to delete from the list. */ -static __inline__void list_del_init (struct list_head *entry) +static inline void list_del_init (list_t *entry) {__list_del (entry->prev, entry->next);INIT_LIST_HEAD (entry); }/** +* list_move - delete from one list and add as another's head +* @list: the entry to move +* @head: the head that will precede our entry +*/ +static inline void list_move (list_t *list,list_t *head) +{ +__list_del (list->prev, list->next); +list_add (list, head); +} + +/** +* list_move_tail - delete from one list and add as another's tail +* @list: the entry to move +* @head: the head that will follow our entry +*/ +static inline void list_move_tail (list_t *list,list_t *head) +{ +__list_del (list->prev, list->next); +list_add_tail (list, head); +} + +/** * list_empty - tests whether a list is empty * @head: the list to test. */ -static __inline__int list_empty (struct list_head *head) +static inline int list_empty (list_t *head) {return head->next == head; } +static inline void __list_splice (list_t *list,list_t *head) +{ +list_t *first = list->next; +list_t *last = list->prev; +list_t *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) +static inline void list_splice (list_t *list,list_t *head) { -struct list_head *first = list->next; - -if (first != list) { -struct list_head *last = list->prev; -struct list_head *at = head->next; - - first->prev = head; - head->next = first; +if (!list_empty (list)) +__list_splice (list, head); +} - last->next = at; - at->prev = last; +/** +* 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 (list_t *list,list_t *head) +{ +if (!list_empty (list)) { +__list_splice (list, head); +INIT_LIST_HEAD (list); } }/** * list_entry - get the struct for this entry -* @ptr: the &struct list_head pointer. +* @ptr: the &list_t pointer. * @type: the type of the struct this is embedded in. * @member: the name of the list_struct within the struct. */
@@ -145,17 +186,25 @@ static __inline__ void list_splice(struc/** * list_for_each - iterate over a list -* @pos: the &struct list_head to use as a loop counter. +* @pos: the &list_t to use as a loop counter. * @head: the head for your list. */ #define list_for_each (pos, head) \ for (pos = (head)->next, prefetch(pos->next); pos != (head); \ pos = pos->next, prefetch(pos->next)) +/** +* list_for_each_prev - iterate over a list backwards +* @pos: the &list_t to use as a loop counter. +* @head: the head for your list. +*/ +#define list_for_each_prev (pos, head) \ + for (pos = (head)->prev, prefetch(pos->prev); pos != (head); \ + pos = pos->prev, prefetch(pos->prev))/** * list_for_each_safe - iterate over a list safe against removal of list entry -* @pos: the &struct list_head to use as a loop counter. -* @n: another &struct list_head to use as temporary storage +* @pos: the &list_t to use as a loop counter. +* @n: another &list_t to use as temporary storage * @head: the head for your list. */ #define list_for_each_safe (pos, n, head) \
@@ -163,16 +212,6 @@ static __inline__ void list_splice(struc pos = n, n = pos->next)/** -* list_for_each_prev - iterate over a list in reverse order -* @pos: the &struct list_head to use as a loop counter. -* @head: the head for your list. -*/ -#define list_for_each_prev (pos, head) \ - for (pos = (head)->prev, prefetch(pos->prev); pos != (head); \ - pos = pos->prev, prefetch(pos->prev)) - - -/** * list_for_each_entry - iterate over list of given type * @pos: the type * to use as a loop counter. * @head: the head for your list.
Quoted 6 lines · On Thu, 29 Aug 2002 02:16:16 +0200 Christoph Hellwig <[email protected]> wrote:
This patch updates
list.hto the 2.5 version, including-
list_ttypedef
- static inline insead of static__inline__
- list_move/list_move_tail
-list_splice_init
Don't apply it (at least, the first part is bad).
Linus, here's my patch to get rid of the usurper list_t in 2.5 (against 2.5.32, so might have some rejects).
Name: list_t removal patch
Author: Rusty Russell
Section: Misc
Status: Trivial
D: This removes list_t, which is a gratuitous typedef for a "struct
D: list_head". Unless there is good reason, the kernel doesn't usually
D: typedef, as typedefs cannot be predeclared unlike structs.
include/linux/device.h +3 -3
@@ -57,9 +57,9 @@ struct bus_type {rwlock_t lock;atomic_t refcount; -list_t node; -list_t devices; -list_t drivers; +struct list_head node; +struct list_head devices; +struct list_head drivers;struct driver_dir_entry dir;struct driver_dir_entry device_dir;
include/linux/fs.h +2 -2
@@ -322,8 +322,8 @@ struct address_space {struct list_head io_pages;/* being prepared for I/O */ unsigned long nrpages;/* number of total pages */ struct address_space_operations *a_ops;/* methods */ -list_t i_mmap;/* list of private mappings */ -list_t i_mmap_shared;/* list of private mappings */ +struct list_head i_mmap;/* list of private mappings */ +struct list_head i_mmap_shared;/* list of private mappings */ spinlock_t i_shared_lock;/* and spinlock protecting it */ unsigned long dirtied_when;/* jiffies of first page dirtying */ int gfp_mask;/* how to allocate the pages */
include/linux/list.h +26 -23
153 lines not on this page · raw message
include/linux/mm.h +1 -1
@@ -61,7 +61,7 @@ struct vm_area_struct {* one of the address_space->i_mmap{,shared} lists, * for shm areas, the list of attaches, otherwise unused. */ -list_t shared; +struct list_head shared;/* Function pointers to deal with this struct. */ struct vm_operations_struct * vm_ops;
include/linux/sched.h +1 -1
@@ -264,7 +264,7 @@ struct task_struct {int lock_depth;/* Lock depth */ int prio, static_prio; -list_t run_list; +struct list_head run_list;prio_array_t *array;unsigned long sleep_avg;
kernel/exit.c +2 -2
@@ -407,7 +407,7 @@ void exit_mm(struct task_struct *tsk)static inline void forget_original_parent (struct task_struct * father) {struct task_struct *p, *reaper; -list_t *_p; +struct list_head *_p;read_lock (&tasklist_lock);
@@ -477,7 +477,7 @@ static inline void zap_thread(task_t *p,static void exit_notify (void ) {struct task_struct *t; -list_t *_p, *_n; +struct list_head *_p, *_n;forget_original_parent (current);/*
kernel/sched.c +5 -5
@@ -133,7 +133,7 @@ typedef struct runqueue runqueue_t;struct prio_array {int nr_active;unsigned long bitmap[BITMAP_SIZE ]; -list_t queue[MAX_PRIO ]; +struct list_head queue[MAX_PRIO ]; };/*
@@ -152,7 +152,7 @@ struct runqueue {int prev_nr_running[NR_CPUS ];task_t *migration_thread; -list_t migration_queue; +struct list_head migration_queue; }____cacheline_aligned ;
@@ -739,7 +739,7 @@ static void load_balance(runqueue_t *thiint imbalance, idx, this_cpu =smp_processor_id ();runqueue_t *busiest;prio_array_t *array; -list_t *head, *curr; +struct list_head *head, *curr;task_t *tmp; busiest =find_busiest_queue (this_rq, this_cpu, idle, &imbalance);
@@ -937,7 +937,7 @@ asmlinkage void schedule(void)task_t *prev, *next;runqueue_t *rq;prio_array_t *array; -list_t *queue; +struct list_head *queue;int idx;if (unlikely (in_interrupt ()))
@@ -1898,7 +1898,7 @@ void __init init_idle(task_t *idle, int*/ typedef struct { -list_t list; +struct list_head list;task_t *task;struct semaphore sem; }migration_req_t ;
mm/memory.c +2 -2
@@ -1033,11 +1033,11 @@ no_mem:return VM_FAULT_OOM ; } -static void vmtruncate_list (list_t *head,unsigned long pgoff) +static void vmtruncate_list (struct list_head *head,unsigned long pgoff) {unsigned long start, end, len, diff;struct vm_area_struct *vma; -list_t *curr; +struct list_head *curr;list_for_each (curr, head) { vma = list_entry(curr, struct vm_area_struct, shared);
mm/page_alloc.c +2 -2
@@ -239,7 +239,7 @@ int is_head_of_free_region(struct page *zone_t *zone =page_zone (page);unsigned long flags;int order; -list_t *curr; +struct list_head *curr;/* * Should not matter as we need quiescent system for
@@ -633,7 +633,7 @@ void show_free_areas(void)for (pgdat = pgdat_list; pgdat; pgdat = pgdat->pgdat_next)for (type =0 ; type <MAX_NR_ZONES ; type++) { -list_t *elem; +struct list_head *elem;zone_t *zone = &pgdat->node_zones[type];unsigned long nr, flags, order, total =0 ;
Signature · 2 lines
there are those who do and those who hang on and you don't see too many doers quoting their contemporaries. -- Larry McVoy
Quoted 4 lines · Rusty Russell
Don't apply it (at least, the first part is bad).
Linus, here's my patch to get rid of the usurper
list_tin 2.5 (against 2.5.32, so might have some rejects).
U don't think that's a valid reason to delay it. Ingo added list_t for a reason und 2.4 is not the right place to change struct list_head to struct list, which sounds good for 2.5.
In message <[email protected]> you write:
Quoted 9 lines · Rusty Russell
Quoted 4 lines
Don't apply it (at least, the first part is bad).
Linus, here's my patch to get rid of the usurper
list_tin 2.5 (against 2.5.32, so might have some rejects).U don't think that's a valid reason to delay it. Ingo added
list_tfor a reason und 2.4 is not the right place to change structlist_headto struct list, which sounds good for 2.5.
Ingo's reason was that it made some of his lines fit in 80 cols 8)
Having two names for the same thing is a confusing waste, and "struct list_head" is the defacto standard. If you have nothing better to do, I can suggest plenty of worthwhile projects which could use your skills 8)
Die typedefs, die,
Rusty.
--
Anyone who quotes me in their sig is an idiot. -- Rusty Russell.