cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

list.h (1357B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2struct list {
      3	struct list *next, *prev;
      4};
      5
      6static inline void
      7list_init(struct list *list)
      8{
      9	list->next = list;
     10	list->prev = list;
     11}
     12
     13static inline int
     14list_empty(struct list *list)
     15{
     16	return list->next == list;
     17}
     18
     19static inline void
     20list_insert(struct list *link, struct list *new_link)
     21{
     22	new_link->prev		= link->prev;
     23	new_link->next		= link;
     24	new_link->prev->next	= new_link;
     25	new_link->next->prev	= new_link;
     26}
     27
     28static inline void
     29list_append(struct list *list, struct list *new_link)
     30{
     31	list_insert((struct list *)list, new_link);
     32}
     33
     34static inline void
     35list_prepend(struct list *list, struct list *new_link)
     36{
     37	list_insert(list->next, new_link);
     38}
     39
     40static inline void
     41list_remove(struct list *link)
     42{
     43	link->prev->next = link->next;
     44	link->next->prev = link->prev;
     45}
     46
     47#define list_entry(link, type, member) \
     48	((type *)((char *)(link)-(unsigned long)(&((type *)0)->member)))
     49
     50#define list_head(list, type, member)		\
     51	list_entry((list)->next, type, member)
     52
     53#define list_tail(list, type, member)		\
     54	list_entry((list)->prev, type, member)
     55
     56#define list_next(elm, member)					\
     57	list_entry((elm)->member.next, typeof(*elm), member)
     58
     59#define list_for_each_entry(pos, list, member)			\
     60	for (pos = list_head(list, typeof(*pos), member);	\
     61	     &pos->member != (list);				\
     62	     pos = list_next(pos, member))
     63