.. | .. |
---|
15 | 15 | struct allowedips_node { |
---|
16 | 16 | struct wg_peer __rcu *peer; |
---|
17 | 17 | struct allowedips_node __rcu *bit[2]; |
---|
18 | | - /* While it may seem scandalous that we waste space for v4, |
---|
19 | | - * we're alloc'ing to the nearest power of 2 anyway, so this |
---|
20 | | - * doesn't actually make a difference. |
---|
21 | | - */ |
---|
22 | | - u8 bits[16] __aligned(__alignof(u64)); |
---|
23 | 18 | u8 cidr, bit_at_a, bit_at_b, bitlen; |
---|
| 19 | + u8 bits[16] __aligned(__alignof(u64)); |
---|
24 | 20 | |
---|
25 | | - /* Keep rarely used list at bottom to be beyond cache line. */ |
---|
| 21 | + /* Keep rarely used members at bottom to be beyond cache line. */ |
---|
| 22 | + unsigned long parent_bit_packed; |
---|
26 | 23 | union { |
---|
27 | 24 | struct list_head peer_list; |
---|
28 | 25 | struct rcu_head rcu; |
---|
.. | .. |
---|
33 | 30 | struct allowedips_node __rcu *root4; |
---|
34 | 31 | struct allowedips_node __rcu *root6; |
---|
35 | 32 | u64 seq; |
---|
36 | | -}; |
---|
| 33 | +} __aligned(4); /* We pack the lower 2 bits of &root, but m68k only gives 16-bit alignment. */ |
---|
37 | 34 | |
---|
38 | 35 | void wg_allowedips_init(struct allowedips *table); |
---|
39 | 36 | void wg_allowedips_free(struct allowedips *table, struct mutex *mutex); |
---|
.. | .. |
---|
56 | 53 | bool wg_allowedips_selftest(void); |
---|
57 | 54 | #endif |
---|
58 | 55 | |
---|
| 56 | +int wg_allowedips_slab_init(void); |
---|
| 57 | +void wg_allowedips_slab_uninit(void); |
---|
| 58 | + |
---|
59 | 59 | #endif /* _WG_ALLOWEDIPS_H */ |
---|