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

parman.h (2934B)


      1/*
      2 * include/linux/parman.h - Manager for linear priority array areas
      3 * Copyright (c) 2017 Mellanox Technologies. All rights reserved.
      4 * Copyright (c) 2017 Jiri Pirko <jiri@mellanox.com>
      5 *
      6 * Redistribution and use in source and binary forms, with or without
      7 * modification, are permitted provided that the following conditions are met:
      8 *
      9 * 1. Redistributions of source code must retain the above copyright
     10 *    notice, this list of conditions and the following disclaimer.
     11 * 2. Redistributions in binary form must reproduce the above copyright
     12 *    notice, this list of conditions and the following disclaimer in the
     13 *    documentation and/or other materials provided with the distribution.
     14 * 3. Neither the names of the copyright holders nor the names of its
     15 *    contributors may be used to endorse or promote products derived from
     16 *    this software without specific prior written permission.
     17 *
     18 * Alternatively, this software may be distributed under the terms of the
     19 * GNU General Public License ("GPL") version 2 as published by the Free
     20 * Software Foundation.
     21 *
     22 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
     23 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     24 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
     25 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
     26 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     27 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     28 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
     29 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
     30 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     31 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     32 * POSSIBILITY OF SUCH DAMAGE.
     33 */
     34
     35#ifndef _PARMAN_H
     36#define _PARMAN_H
     37
     38#include <linux/list.h>
     39
     40enum parman_algo_type {
     41	PARMAN_ALGO_TYPE_LSORT,
     42};
     43
     44struct parman_item {
     45	struct list_head list;
     46	unsigned long index;
     47};
     48
     49struct parman_prio {
     50	struct list_head list;
     51	struct list_head item_list;
     52	unsigned long priority;
     53};
     54
     55struct parman_ops {
     56	unsigned long base_count;
     57	unsigned long resize_step;
     58	int (*resize)(void *priv, unsigned long new_count);
     59	void (*move)(void *priv, unsigned long from_index,
     60		     unsigned long to_index, unsigned long count);
     61	enum parman_algo_type algo;
     62};
     63
     64struct parman;
     65
     66struct parman *parman_create(const struct parman_ops *ops, void *priv);
     67void parman_destroy(struct parman *parman);
     68void parman_prio_init(struct parman *parman, struct parman_prio *prio,
     69		      unsigned long priority);
     70void parman_prio_fini(struct parman_prio *prio);
     71int parman_item_add(struct parman *parman, struct parman_prio *prio,
     72		    struct parman_item *item);
     73void parman_item_remove(struct parman *parman, struct parman_prio *prio,
     74			struct parman_item *item);
     75
     76#endif