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

rdmavt_cq.h (1783B)


      1/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
      2/*
      3 * Copyright(c) 2016 - 2018 Intel Corporation.
      4 */
      5
      6#ifndef DEF_RDMAVT_INCCQ_H
      7#define DEF_RDMAVT_INCCQ_H
      8
      9#include <linux/kthread.h>
     10#include <rdma/ib_user_verbs.h>
     11#include <rdma/ib_verbs.h>
     12
     13/*
     14 * Define an ib_cq_notify value that is not valid so we know when CQ
     15 * notifications are armed.
     16 */
     17#define RVT_CQ_NONE      (IB_CQ_NEXT_COMP + 1)
     18
     19/*
     20 * Define read macro that apply smp_load_acquire memory barrier
     21 * when reading indice of circular buffer that mmaped to user space.
     22 */
     23#define RDMA_READ_UAPI_ATOMIC(member) smp_load_acquire(&(member).val)
     24
     25/*
     26 * Define write macro that uses smp_store_release memory barrier
     27 * when writing indice of circular buffer that mmaped to user space.
     28 */
     29#define RDMA_WRITE_UAPI_ATOMIC(member, x) smp_store_release(&(member).val, x)
     30#include <rdma/rvt-abi.h>
     31
     32/*
     33 * This structure is used to contain the head pointer, tail pointer,
     34 * and completion queue entries as a single memory allocation so
     35 * it can be mmap'ed into user space.
     36 */
     37struct rvt_k_cq_wc {
     38	u32 head;               /* index of next entry to fill */
     39	u32 tail;               /* index of next ib_poll_cq() entry */
     40	struct ib_wc kqueue[];
     41};
     42
     43/*
     44 * The completion queue structure.
     45 */
     46struct rvt_cq {
     47	struct ib_cq ibcq;
     48	struct work_struct comptask;
     49	spinlock_t lock; /* protect changes in this struct */
     50	u8 notify;
     51	u8 triggered;
     52	u8 cq_full;
     53	int comp_vector_cpu;
     54	struct rvt_dev_info *rdi;
     55	struct rvt_cq_wc *queue;
     56	struct rvt_mmap_info *ip;
     57	struct rvt_k_cq_wc *kqueue;
     58};
     59
     60static inline struct rvt_cq *ibcq_to_rvtcq(struct ib_cq *ibcq)
     61{
     62	return container_of(ibcq, struct rvt_cq, ibcq);
     63}
     64
     65bool rvt_cq_enter(struct rvt_cq *cq, struct ib_wc *entry, bool solicited);
     66
     67#endif          /* DEF_RDMAVT_INCCQH */