mirror of
				https://github.com/qemu/qemu.git
				synced 2025-10-31 04:06:46 +00:00 
			
		
		
		
	 8b42cfab82
			
		
	
	
		8b42cfab82
		
	
	
	
	
		
			
			Modify create/destroy QP to support shared receive queue and rearrange the destroy_qp() code to avoid touching the QP after calling rdma_rm_dealloc_qp(). Signed-off-by: Kamal Heib <kamalheib1@gmail.com> Message-Id: <20190403113343.26384-4-kamalheib1@gmail.com> Reviewed-by: Yuval Shaia <yuval.shaia@oracle.com> Signed-off-by: Marcel Apfelbaum <marcel.apfelbaum@gmail.com>
		
			
				
	
	
		
			147 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			147 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  * RDMA device: Definitions of Resource Manager 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_RM_DEFS_H
 | |
| #define RDMA_RM_DEFS_H
 | |
| 
 | |
| #include "rdma_backend_defs.h"
 | |
| 
 | |
| #define MAX_PORTS             1 /* Do not change - we support only one port */
 | |
| #define MAX_PORT_GIDS         255
 | |
| #define MAX_GIDS              MAX_PORT_GIDS
 | |
| #define MAX_PORT_PKEYS        1
 | |
| #define MAX_PKEYS             MAX_PORT_PKEYS
 | |
| #define MAX_UCS               512
 | |
| #define MAX_MR_SIZE           (1UL << 27)
 | |
| #define MAX_QP                1024
 | |
| #define MAX_SGE               4
 | |
| #define MAX_CQ                2048
 | |
| #define MAX_MR                1024
 | |
| #define MAX_PD                1024
 | |
| #define MAX_QP_RD_ATOM        16
 | |
| #define MAX_QP_INIT_RD_ATOM   16
 | |
| #define MAX_AH                64
 | |
| #define MAX_SRQ               512
 | |
| 
 | |
| #define MAX_RM_TBL_NAME             16
 | |
| #define MAX_CONSEQ_EMPTY_POLL_CQ    4096 /* considered as error above this */
 | |
| 
 | |
| typedef struct RdmaRmResTbl {
 | |
|     char name[MAX_RM_TBL_NAME];
 | |
|     QemuMutex lock;
 | |
|     unsigned long *bitmap;
 | |
|     size_t tbl_sz;
 | |
|     size_t res_sz;
 | |
|     void *tbl;
 | |
|     uint32_t used; /* number of used entries in the table */
 | |
| } RdmaRmResTbl;
 | |
| 
 | |
| typedef struct RdmaRmPD {
 | |
|     RdmaBackendPD backend_pd;
 | |
|     uint32_t ctx_handle;
 | |
| } RdmaRmPD;
 | |
| 
 | |
| typedef enum CQNotificationType {
 | |
|     CNT_CLEAR,
 | |
|     CNT_ARM,
 | |
|     CNT_SET,
 | |
| } CQNotificationType;
 | |
| 
 | |
| typedef struct RdmaRmCQ {
 | |
|     RdmaBackendCQ backend_cq;
 | |
|     void *opaque;
 | |
|     CQNotificationType notify;
 | |
| } RdmaRmCQ;
 | |
| 
 | |
| /* MR (DMA region) */
 | |
| typedef struct RdmaRmMR {
 | |
|     RdmaBackendMR backend_mr;
 | |
|     void *virt;
 | |
|     uint64_t start;
 | |
|     size_t length;
 | |
|     uint32_t pd_handle;
 | |
|     uint32_t lkey;
 | |
|     uint32_t rkey;
 | |
| } RdmaRmMR;
 | |
| 
 | |
| typedef struct RdmaRmUC {
 | |
|     uint64_t uc_handle;
 | |
| } RdmaRmUC;
 | |
| 
 | |
| typedef struct RdmaRmQP {
 | |
|     RdmaBackendQP backend_qp;
 | |
|     void *opaque;
 | |
|     uint32_t qp_type;
 | |
|     uint32_t qpn;
 | |
|     uint32_t send_cq_handle;
 | |
|     uint32_t recv_cq_handle;
 | |
|     enum ibv_qp_state qp_state;
 | |
|     uint8_t is_srq;
 | |
| } RdmaRmQP;
 | |
| 
 | |
| typedef struct RdmaRmSRQ {
 | |
|     RdmaBackendSRQ backend_srq;
 | |
|     uint32_t recv_cq_handle;
 | |
|     void *opaque;
 | |
| } RdmaRmSRQ;
 | |
| 
 | |
| typedef struct RdmaRmGid {
 | |
|     union ibv_gid gid;
 | |
|     int backend_gid_index;
 | |
| } RdmaRmGid;
 | |
| 
 | |
| typedef struct RdmaRmPort {
 | |
|     RdmaRmGid gid_tbl[MAX_PORT_GIDS];
 | |
|     enum ibv_port_state state;
 | |
| } RdmaRmPort;
 | |
| 
 | |
| typedef struct RdmaRmStats {
 | |
|     uint64_t tx;
 | |
|     uint64_t tx_len;
 | |
|     uint64_t tx_err;
 | |
|     uint64_t rx_bufs;
 | |
|     uint64_t rx_bufs_len;
 | |
|     uint64_t rx_bufs_err;
 | |
|     uint64_t rx_srq;
 | |
|     uint64_t completions;
 | |
|     uint64_t mad_tx;
 | |
|     uint64_t mad_tx_err;
 | |
|     uint64_t mad_rx;
 | |
|     uint64_t mad_rx_err;
 | |
|     uint64_t mad_rx_bufs;
 | |
|     uint64_t mad_rx_bufs_err;
 | |
|     uint64_t poll_cq_from_bk;
 | |
|     uint64_t poll_cq_from_guest;
 | |
|     uint64_t poll_cq_from_guest_empty;
 | |
|     uint64_t poll_cq_ppoll_to;
 | |
|     uint32_t missing_cqe;
 | |
| } RdmaRmStats;
 | |
| 
 | |
| struct RdmaDeviceResources {
 | |
|     RdmaRmPort port;
 | |
|     RdmaRmResTbl pd_tbl;
 | |
|     RdmaRmResTbl mr_tbl;
 | |
|     RdmaRmResTbl uc_tbl;
 | |
|     RdmaRmResTbl qp_tbl;
 | |
|     RdmaRmResTbl cq_tbl;
 | |
|     RdmaRmResTbl cqe_ctx_tbl;
 | |
|     RdmaRmResTbl srq_tbl;
 | |
|     GHashTable *qp_hash; /* Keeps mapping between real and emulated */
 | |
|     QemuMutex lock;
 | |
|     RdmaRmStats stats;
 | |
| };
 | |
| 
 | |
| #endif
 |