Blame view
include/linux/cpu_rmap.h
1.86 KB
122733a18
|
1 2 |
#ifndef __LINUX_CPU_RMAP_H #define __LINUX_CPU_RMAP_H |
c39649c33
|
3 4 5 6 7 8 9 10 11 12 13 14 |
/* * cpu_rmap.c: CPU affinity reverse-map support * Copyright 2011 Solarflare Communications Inc. * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 as published * by the Free Software Foundation, incorporated herein by reference. */ #include <linux/cpumask.h> #include <linux/gfp.h> #include <linux/slab.h> |
896f97ea9
|
15 |
#include <linux/kref.h> |
c39649c33
|
16 17 18 |
/** * struct cpu_rmap - CPU affinity reverse-map |
896f97ea9
|
19 |
* @refcount: kref for object |
c39649c33
|
20 21 22 23 24 25 26 |
* @size: Number of objects to be reverse-mapped * @used: Number of objects added * @obj: Pointer to array of object pointers * @near: For each CPU, the index and distance to the nearest object, * based on affinity masks */ struct cpu_rmap { |
896f97ea9
|
27 |
struct kref refcount; |
c39649c33
|
28 29 30 31 32 33 34 35 36 37 |
u16 size, used; void **obj; struct { u16 index; u16 dist; } near[0]; }; #define CPU_RMAP_DIST_INF 0xffff extern struct cpu_rmap *alloc_cpu_rmap(unsigned int size, gfp_t flags); |
896f97ea9
|
38 |
extern int cpu_rmap_put(struct cpu_rmap *rmap); |
c39649c33
|
39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
extern int cpu_rmap_add(struct cpu_rmap *rmap, void *obj); extern int cpu_rmap_update(struct cpu_rmap *rmap, u16 index, const struct cpumask *affinity); static inline u16 cpu_rmap_lookup_index(struct cpu_rmap *rmap, unsigned int cpu) { return rmap->near[cpu].index; } static inline void *cpu_rmap_lookup_obj(struct cpu_rmap *rmap, unsigned int cpu) { return rmap->obj[rmap->near[cpu].index]; } |
c39649c33
|
53 54 55 56 57 58 59 60 61 62 63 64 65 |
/** * alloc_irq_cpu_rmap - allocate CPU affinity reverse-map for IRQs * @size: Number of objects to be mapped * * Must be called in process context. */ static inline struct cpu_rmap *alloc_irq_cpu_rmap(unsigned int size) { return alloc_cpu_rmap(size, GFP_KERNEL); } extern void free_irq_cpu_rmap(struct cpu_rmap *rmap); extern int irq_cpu_rmap_add(struct cpu_rmap *rmap, int irq); |
122733a18
|
66 |
#endif /* __LINUX_CPU_RMAP_H */ |