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

dm-path-selector.h (2982B)


      1/*
      2 * Copyright (C) 2003 Sistina Software.
      3 * Copyright (C) 2004 Red Hat, Inc. All rights reserved.
      4 *
      5 * Module Author: Heinz Mauelshagen
      6 *
      7 * This file is released under the GPL.
      8 *
      9 * Path-Selector registration.
     10 */
     11
     12#ifndef	DM_PATH_SELECTOR_H
     13#define	DM_PATH_SELECTOR_H
     14
     15#include <linux/device-mapper.h>
     16
     17#include "dm-mpath.h"
     18
     19/*
     20 * We provide an abstraction for the code that chooses which path
     21 * to send some io down.
     22 */
     23struct path_selector_type;
     24struct path_selector {
     25	struct path_selector_type *type;
     26	void *context;
     27};
     28
     29/*
     30 * If a path selector uses this flag, a high resolution timer is used
     31 * (via ktime_get_ns) to account for IO start time in BIO-based mpath.
     32 * This improves performance of some path selectors (i.e. HST), in
     33 * exchange for slightly higher overhead when submitting the BIO.
     34 * The extra cost is usually offset by improved path selection for
     35 * some benchmarks.
     36 *
     37 * This has no effect for request-based mpath, since it already uses a
     38 * higher precision timer by default.
     39 */
     40#define DM_PS_USE_HR_TIMER		0x00000001
     41#define dm_ps_use_hr_timer(type)	((type)->features & DM_PS_USE_HR_TIMER)
     42
     43/* Information about a path selector type */
     44struct path_selector_type {
     45	char *name;
     46	struct module *module;
     47
     48	unsigned int features;
     49	unsigned int table_args;
     50	unsigned int info_args;
     51
     52	/*
     53	 * Constructs a path selector object, takes custom arguments
     54	 */
     55	int (*create) (struct path_selector *ps, unsigned argc, char **argv);
     56	void (*destroy) (struct path_selector *ps);
     57
     58	/*
     59	 * Add an opaque path object, along with some selector specific
     60	 * path args (eg, path priority).
     61	 */
     62	int (*add_path) (struct path_selector *ps, struct dm_path *path,
     63			 int argc, char **argv, char **error);
     64
     65	/*
     66	 * Chooses a path for this io, if no paths are available then
     67	 * NULL will be returned.
     68	 */
     69	struct dm_path *(*select_path) (struct path_selector *ps,
     70					size_t nr_bytes);
     71
     72	/*
     73	 * Notify the selector that a path has failed.
     74	 */
     75	void (*fail_path) (struct path_selector *ps, struct dm_path *p);
     76
     77	/*
     78	 * Ask selector to reinstate a path.
     79	 */
     80	int (*reinstate_path) (struct path_selector *ps, struct dm_path *p);
     81
     82	/*
     83	 * Table content based on parameters added in ps_add_path_fn
     84	 * or path selector status
     85	 */
     86	int (*status) (struct path_selector *ps, struct dm_path *path,
     87		       status_type_t type, char *result, unsigned int maxlen);
     88
     89	int (*start_io) (struct path_selector *ps, struct dm_path *path,
     90			 size_t nr_bytes);
     91	int (*end_io) (struct path_selector *ps, struct dm_path *path,
     92		       size_t nr_bytes, u64 start_time);
     93};
     94
     95/* Register a path selector */
     96int dm_register_path_selector(struct path_selector_type *type);
     97
     98/* Unregister a path selector */
     99int dm_unregister_path_selector(struct path_selector_type *type);
    100
    101/* Returns a registered path selector type */
    102struct path_selector_type *dm_get_path_selector(const char *name);
    103
    104/* Releases a path selector  */
    105void dm_put_path_selector(struct path_selector_type *pst);
    106
    107#endif