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

cpu_rmap.h (1721B)


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