Something went wrong. Try again.
(I'm so sorry!) Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
Something went wrong. Try again.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768/* SPDX-License-Identifier: GPL-2.0-only */#ifndef __LINUX_CPU_RMAP_H#define __LINUX_CPU_RMAP_H
/* * cpu_rmap.c: CPU affinity reverse-map support * Copyright 2011 Solarflare Communications Inc. */
#include <linux/cpumask_types.h>#include <linux/gfp.h>#include <linux/slab.h>#include <linux/kref.h>
/** * struct cpu_rmap - CPU affinity reverse-map * @refcount: kref for object * @size: Number of objects to be reverse-mapped * @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 { struct kref refcount; u16 size; void **obj; struct { u16 index; u16 dist; } near[];};#define CPU_RMAP_DIST_INF 0xffff
extern struct cpu_rmap *alloc_cpu_rmap(unsigned int size, gfp_t flags);extern void cpu_rmap_get(struct cpu_rmap *rmap);extern int cpu_rmap_put(struct cpu_rmap *rmap);
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];}
/** * 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);
int irq_cpu_rmap_remove(struct cpu_rmap *rmap, int irq);extern int irq_cpu_rmap_add(struct cpu_rmap *rmap, int irq);
#endif /* __LINUX_CPU_RMAP_H */