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

virtio_pmem.h (1287B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2/*
      3 * virtio_pmem.h: virtio pmem Driver
      4 *
      5 * Discovers persistent memory range information
      6 * from host and provides a virtio based flushing
      7 * interface.
      8 **/
      9
     10#ifndef _LINUX_VIRTIO_PMEM_H
     11#define _LINUX_VIRTIO_PMEM_H
     12
     13#include <linux/module.h>
     14#include <uapi/linux/virtio_pmem.h>
     15#include <linux/libnvdimm.h>
     16#include <linux/spinlock.h>
     17
     18struct virtio_pmem_request {
     19	struct virtio_pmem_req req;
     20	struct virtio_pmem_resp resp;
     21
     22	/* Wait queue to process deferred work after ack from host */
     23	wait_queue_head_t host_acked;
     24	bool done;
     25
     26	/* Wait queue to process deferred work after virt queue buffer avail */
     27	wait_queue_head_t wq_buf;
     28	bool wq_buf_avail;
     29	struct list_head list;
     30};
     31
     32struct virtio_pmem {
     33	struct virtio_device *vdev;
     34
     35	/* Virtio pmem request queue */
     36	struct virtqueue *req_vq;
     37
     38	/* nvdimm bus registers virtio pmem device */
     39	struct nvdimm_bus *nvdimm_bus;
     40	struct nvdimm_bus_descriptor nd_desc;
     41
     42	/* List to store deferred work if virtqueue is full */
     43	struct list_head req_list;
     44
     45	/* Synchronize virtqueue data */
     46	spinlock_t pmem_lock;
     47
     48	/* Memory region information */
     49	__u64 start;
     50	__u64 size;
     51};
     52
     53void virtio_pmem_host_ack(struct virtqueue *vq);
     54int async_pmem_flush(struct nd_region *nd_region, struct bio *bio);
     55#endif