cachepc-qemu

Fork of AMDESE/qemu with changes for cachepc side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-qemu
Log | Files | Refs | Submodules | LICENSE | sfeed.txt

rdma_rm_defs.h (3453B)


      1/*
      2 * RDMA device: Definitions of Resource Manager structures
      3 *
      4 * Copyright (C) 2018 Oracle
      5 * Copyright (C) 2018 Red Hat Inc
      6 *
      7 * Authors:
      8 *     Yuval Shaia <yuval.shaia@oracle.com>
      9 *     Marcel Apfelbaum <marcel@redhat.com>
     10 *
     11 * This work is licensed under the terms of the GNU GPL, version 2 or later.
     12 * See the COPYING file in the top-level directory.
     13 *
     14 */
     15
     16#ifndef RDMA_RM_DEFS_H
     17#define RDMA_RM_DEFS_H
     18
     19#include "rdma_backend_defs.h"
     20
     21#define MAX_PORTS             1 /* Do not change - we support only one port */
     22#define MAX_PORT_GIDS         255
     23#define MAX_GIDS              MAX_PORT_GIDS
     24#define MAX_PORT_PKEYS        1
     25#define MAX_PKEYS             MAX_PORT_PKEYS
     26#define MAX_UCS               512
     27#define MAX_MR_SIZE           (1UL << 27)
     28#define MAX_QP                1024
     29#define MAX_SGE               4
     30#define MAX_CQ                2048
     31#define MAX_MR                1024
     32#define MAX_PD                1024
     33#define MAX_QP_RD_ATOM        16
     34#define MAX_QP_INIT_RD_ATOM   16
     35#define MAX_AH                64
     36#define MAX_SRQ               512
     37
     38#define MAX_RM_TBL_NAME             16
     39#define MAX_CONSEQ_EMPTY_POLL_CQ    4096 /* considered as error above this */
     40
     41typedef struct RdmaRmResTbl {
     42    char name[MAX_RM_TBL_NAME];
     43    QemuMutex lock;
     44    unsigned long *bitmap;
     45    size_t tbl_sz;
     46    size_t res_sz;
     47    void *tbl;
     48    uint32_t used; /* number of used entries in the table */
     49} RdmaRmResTbl;
     50
     51typedef struct RdmaRmPD {
     52    RdmaBackendPD backend_pd;
     53    uint32_t ctx_handle;
     54} RdmaRmPD;
     55
     56typedef enum CQNotificationType {
     57    CNT_CLEAR,
     58    CNT_ARM,
     59    CNT_SET,
     60} CQNotificationType;
     61
     62typedef struct RdmaRmCQ {
     63    RdmaBackendCQ backend_cq;
     64    void *opaque;
     65    CQNotificationType notify;
     66} RdmaRmCQ;
     67
     68/* MR (DMA region) */
     69typedef struct RdmaRmMR {
     70    RdmaBackendMR backend_mr;
     71    void *virt;
     72    uint64_t start;
     73    size_t length;
     74    uint32_t pd_handle;
     75    uint32_t lkey;
     76    uint32_t rkey;
     77} RdmaRmMR;
     78
     79typedef struct RdmaRmUC {
     80    uint64_t uc_handle;
     81} RdmaRmUC;
     82
     83typedef struct RdmaRmQP {
     84    RdmaBackendQP backend_qp;
     85    void *opaque;
     86    uint32_t qp_type;
     87    uint32_t qpn;
     88    uint32_t send_cq_handle;
     89    uint32_t recv_cq_handle;
     90    enum ibv_qp_state qp_state;
     91    uint8_t is_srq;
     92} RdmaRmQP;
     93
     94typedef struct RdmaRmSRQ {
     95    RdmaBackendSRQ backend_srq;
     96    uint32_t recv_cq_handle;
     97    void *opaque;
     98} RdmaRmSRQ;
     99
    100typedef struct RdmaRmGid {
    101    union ibv_gid gid;
    102    int backend_gid_index;
    103} RdmaRmGid;
    104
    105typedef struct RdmaRmPort {
    106    RdmaRmGid gid_tbl[MAX_PORT_GIDS];
    107    enum ibv_port_state state;
    108} RdmaRmPort;
    109
    110typedef struct RdmaRmStats {
    111    uint64_t tx;
    112    uint64_t tx_len;
    113    uint64_t tx_err;
    114    uint64_t rx_bufs;
    115    uint64_t rx_bufs_len;
    116    uint64_t rx_bufs_err;
    117    uint64_t rx_srq;
    118    uint64_t completions;
    119    uint64_t mad_tx;
    120    uint64_t mad_tx_err;
    121    uint64_t mad_rx;
    122    uint64_t mad_rx_err;
    123    uint64_t mad_rx_bufs;
    124    uint64_t mad_rx_bufs_err;
    125    uint64_t poll_cq_from_bk;
    126    uint64_t poll_cq_from_guest;
    127    uint64_t poll_cq_from_guest_empty;
    128    uint64_t poll_cq_ppoll_to;
    129    uint32_t missing_cqe;
    130} RdmaRmStats;
    131
    132struct RdmaDeviceResources {
    133    RdmaRmPort port;
    134    RdmaRmResTbl pd_tbl;
    135    RdmaRmResTbl mr_tbl;
    136    RdmaRmResTbl uc_tbl;
    137    RdmaRmResTbl qp_tbl;
    138    RdmaRmResTbl cq_tbl;
    139    RdmaRmResTbl cqe_ctx_tbl;
    140    RdmaRmResTbl srq_tbl;
    141    GHashTable *qp_hash; /* Keeps mapping between real and emulated */
    142    QemuMutex lock;
    143    RdmaRmStats stats;
    144};
    145
    146#endif