Commit | Line | Data |
---|---|---|
e19494ed AS |
1 | /* Copyright (c) 2016 Facebook |
2 | * | |
3 | * This program is free software; you can redistribute it and/or | |
4 | * modify it under the terms of version 2 of the GNU General Public | |
5 | * License as published by the Free Software Foundation. | |
6 | */ | |
7 | #ifndef __PERCPU_FREELIST_H__ | |
8 | #define __PERCPU_FREELIST_H__ | |
9 | #include <linux/spinlock.h> | |
10 | #include <linux/percpu.h> | |
11 | ||
12 | struct pcpu_freelist_head { | |
13 | struct pcpu_freelist_node *first; | |
14 | raw_spinlock_t lock; | |
15 | }; | |
16 | ||
17 | struct pcpu_freelist { | |
18 | struct pcpu_freelist_head __percpu *freelist; | |
19 | }; | |
20 | ||
21 | struct pcpu_freelist_node { | |
22 | struct pcpu_freelist_node *next; | |
23 | }; | |
24 | ||
25 | void pcpu_freelist_push(struct pcpu_freelist *, struct pcpu_freelist_node *); | |
26 | struct pcpu_freelist_node *pcpu_freelist_pop(struct pcpu_freelist *); | |
27 | void pcpu_freelist_populate(struct pcpu_freelist *s, void *buf, u32 elem_size, | |
28 | u32 nr_elems); | |
29 | int pcpu_freelist_init(struct pcpu_freelist *); | |
30 | void pcpu_freelist_destroy(struct pcpu_freelist *s); | |
31 | #endif |