There are certain operations that are well considered as part of device configuration while others are needed only when "start" command is triggered by the guest driver. An example of device initialization step is msix_init and example of "device start" stage is the creation of a CQ completion handler thread. Driver expects such distinction - implement it. Signed-off-by: Yuval Shaia <yuval.shaia@oracle.com> Reviewed-by: Marcel Apfelbaum <marcel.apfelbaum@gmail.com> Message-Id: <20180805153518.2983-2-yuval.shaia@oracle.com> Signed-off-by: Marcel Apfelbaum <marcel.apfelbaum@gmail.com>
64 lines
1.5 KiB
C
64 lines
1.5 KiB
C
/*
|
|
* RDMA device: Definitions of Backend Device structures
|
|
*
|
|
* Copyright (C) 2018 Oracle
|
|
* Copyright (C) 2018 Red Hat Inc
|
|
*
|
|
* Authors:
|
|
* Yuval Shaia <yuval.shaia@oracle.com>
|
|
* Marcel Apfelbaum <marcel@redhat.com>
|
|
*
|
|
* This work is licensed under the terms of the GNU GPL, version 2 or later.
|
|
* See the COPYING file in the top-level directory.
|
|
*
|
|
*/
|
|
|
|
#ifndef RDMA_BACKEND_DEFS_H
|
|
#define RDMA_BACKEND_DEFS_H
|
|
|
|
#include <infiniband/verbs.h>
|
|
#include "qemu/thread.h"
|
|
|
|
typedef struct RdmaDeviceResources RdmaDeviceResources;
|
|
|
|
typedef struct RdmaBackendThread {
|
|
QemuThread thread;
|
|
QemuMutex mutex;
|
|
bool run; /* Set by thread manager to let thread know it should exit */
|
|
bool is_running; /* Set by the thread to report its status */
|
|
} RdmaBackendThread;
|
|
|
|
typedef struct RdmaBackendDev {
|
|
struct ibv_device_attr dev_attr;
|
|
RdmaBackendThread comp_thread;
|
|
union ibv_gid gid;
|
|
PCIDevice *dev;
|
|
RdmaDeviceResources *rdma_dev_res;
|
|
struct ibv_device *ib_dev;
|
|
struct ibv_context *context;
|
|
struct ibv_comp_channel *channel;
|
|
uint8_t port_num;
|
|
uint8_t backend_gid_idx;
|
|
} RdmaBackendDev;
|
|
|
|
typedef struct RdmaBackendPD {
|
|
struct ibv_pd *ibpd;
|
|
} RdmaBackendPD;
|
|
|
|
typedef struct RdmaBackendMR {
|
|
struct ibv_pd *ibpd;
|
|
struct ibv_mr *ibmr;
|
|
} RdmaBackendMR;
|
|
|
|
typedef struct RdmaBackendCQ {
|
|
RdmaBackendDev *backend_dev;
|
|
struct ibv_cq *ibcq;
|
|
} RdmaBackendCQ;
|
|
|
|
typedef struct RdmaBackendQP {
|
|
struct ibv_pd *ibpd;
|
|
struct ibv_qp *ibqp;
|
|
} RdmaBackendQP;
|
|
|
|
#endif
|