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-io.h (1980B)


      1/*
      2 * Copyright (C) 2003 Sistina Software
      3 * Copyright (C) 2004 - 2008 Red Hat, Inc. All rights reserved.
      4 *
      5 * Device-Mapper low-level I/O.
      6 *
      7 * This file is released under the GPL.
      8 */
      9
     10#ifndef _LINUX_DM_IO_H
     11#define _LINUX_DM_IO_H
     12
     13#ifdef __KERNEL__
     14
     15#include <linux/types.h>
     16
     17struct dm_io_region {
     18	struct block_device *bdev;
     19	sector_t sector;
     20	sector_t count;		/* If this is zero the region is ignored. */
     21};
     22
     23struct page_list {
     24	struct page_list *next;
     25	struct page *page;
     26};
     27
     28typedef void (*io_notify_fn)(unsigned long error, void *context);
     29
     30enum dm_io_mem_type {
     31	DM_IO_PAGE_LIST,/* Page list */
     32	DM_IO_BIO,	/* Bio vector */
     33	DM_IO_VMA,	/* Virtual memory area */
     34	DM_IO_KMEM,	/* Kernel memory */
     35};
     36
     37struct dm_io_memory {
     38	enum dm_io_mem_type type;
     39
     40	unsigned offset;
     41
     42	union {
     43		struct page_list *pl;
     44		struct bio *bio;
     45		void *vma;
     46		void *addr;
     47	} ptr;
     48};
     49
     50struct dm_io_notify {
     51	io_notify_fn fn;	/* Callback for asynchronous requests */
     52	void *context;		/* Passed to callback */
     53};
     54
     55/*
     56 * IO request structure
     57 */
     58struct dm_io_client;
     59struct dm_io_request {
     60	int bi_op;			/* REQ_OP */
     61	int bi_op_flags;		/* req_flag_bits */
     62	struct dm_io_memory mem;	/* Memory to use for io */
     63	struct dm_io_notify notify;	/* Synchronous if notify.fn is NULL */
     64	struct dm_io_client *client;	/* Client memory handler */
     65};
     66
     67/*
     68 * For async io calls, users can alternatively use the dm_io() function below
     69 * and dm_io_client_create() to create private mempools for the client.
     70 *
     71 * Create/destroy may block.
     72 */
     73struct dm_io_client *dm_io_client_create(void);
     74void dm_io_client_destroy(struct dm_io_client *client);
     75
     76/*
     77 * IO interface using private per-client pools.
     78 * Each bit in the optional 'sync_error_bits' bitset indicates whether an
     79 * error occurred doing io to the corresponding region.
     80 */
     81int dm_io(struct dm_io_request *io_req, unsigned num_regions,
     82	  struct dm_io_region *region, unsigned long *sync_error_bits);
     83
     84#endif	/* __KERNEL__ */
     85#endif	/* _LINUX_DM_IO_H */