summaryrefslogtreecommitdiffstats
path: root/hw/rdma/vmw/pvrdma_cmd.c
diff options
context:
space:
mode:
authorYuval Shaia2019-03-11 11:29:05 +0100
committerMarcel Apfelbaum2019-03-16 14:52:44 +0100
commit4d71b38ae8fa436f1707fe98b469a9cea4079503 (patch)
tree1b8c9ca72c132561f364e31e8dbd1b96875a0a2f /hw/rdma/vmw/pvrdma_cmd.c
parentcontrib/rdmacm-mux: Fix out-of-bounds risk (diff)
downloadqemu-4d71b38ae8fa436f1707fe98b469a9cea4079503.tar.gz
qemu-4d71b38ae8fa436f1707fe98b469a9cea4079503.tar.xz
qemu-4d71b38ae8fa436f1707fe98b469a9cea4079503.zip
hw/rdma: Switch to generic error reporting way
Utilize error_report for all pr_err calls and some pr_dbg that are considered as errors. For the remaining pr_dbg calls, the important ones were replaced by trace points while other deleted. Some of the functions got renamed to include prefix "rdma/pvrdma" in the function name. Signed-off-by: Yuval Shaia <yuval.shaia@oracle.com> Reviewed-by: Marcel Apfelbaum <marcel.apfelbaum@gmail.com> Message-Id: <1552300155-25216-2-git-send-email-yuval.shaia@oracle.com> Reviewed-by: Kamal Heib <kamalheib1@gmail.com> Signed-off-by: Marcel Apfelbaum <marcel.apfelbaum@gmail.com>
Diffstat (limited to 'hw/rdma/vmw/pvrdma_cmd.c')
-rw-r--r--hw/rdma/vmw/pvrdma_cmd.c113
1 files changed, 29 insertions, 84 deletions
diff --git a/hw/rdma/vmw/pvrdma_cmd.c b/hw/rdma/vmw/pvrdma_cmd.c
index 89920887bf..21a55e225a 100644
--- a/hw/rdma/vmw/pvrdma_cmd.c
+++ b/hw/rdma/vmw/pvrdma_cmd.c
@@ -14,7 +14,6 @@
*/
#include "qemu/osdep.h"
-#include "qemu/error-report.h"
#include "cpu.h"
#include "hw/hw.h"
#include "hw/pci/pci.h"
@@ -24,6 +23,7 @@
#include "../rdma_rm.h"
#include "../rdma_utils.h"
+#include "trace.h"
#include "pvrdma.h"
#include "standard-headers/rdma/vmw_pvrdma-abi.h"
@@ -35,40 +35,38 @@ static void *pvrdma_map_to_pdir(PCIDevice *pdev, uint64_t pdir_dma,
void *host_virt = NULL, *curr_page;
if (!nchunks) {
- pr_dbg("nchunks=0\n");
+ rdma_error_report("Got nchunks=0");
return NULL;
}
dir = rdma_pci_dma_map(pdev, pdir_dma, TARGET_PAGE_SIZE);
if (!dir) {
- error_report("PVRDMA: Failed to map to page directory");
+ rdma_error_report("Failed to map to page directory");
return NULL;
}
tbl = rdma_pci_dma_map(pdev, dir[0], TARGET_PAGE_SIZE);
if (!tbl) {
- error_report("PVRDMA: Failed to map to page table 0");
+ rdma_error_report("Failed to map to page table 0");
goto out_unmap_dir;
}
curr_page = rdma_pci_dma_map(pdev, (dma_addr_t)tbl[0], TARGET_PAGE_SIZE);
if (!curr_page) {
- error_report("PVRDMA: Failed to map the first page");
+ rdma_error_report("Failed to map the page 0");
goto out_unmap_tbl;
}
host_virt = mremap(curr_page, 0, length, MREMAP_MAYMOVE);
- pr_dbg("mremap %p -> %p\n", curr_page, host_virt);
if (host_virt == MAP_FAILED) {
host_virt = NULL;
- error_report("PVRDMA: Failed to remap memory for host_virt");
+ rdma_error_report("Failed to remap memory for host_virt");
goto out_unmap_tbl;
}
+ trace_pvrdma_map_to_pdir_host_virt(curr_page, host_virt);
rdma_pci_dma_unmap(pdev, curr_page, TARGET_PAGE_SIZE);
- pr_dbg("host_virt=%p\n", host_virt);
-
dir_idx = 0;
tbl_idx = 1;
addr_idx = 1;
@@ -76,28 +74,28 @@ static void *pvrdma_map_to_pdir(PCIDevice *pdev, uint64_t pdir_dma,
if (tbl_idx == TARGET_PAGE_SIZE / sizeof(uint64_t)) {
tbl_idx = 0;
dir_idx++;
- pr_dbg("Mapping to table %d\n", dir_idx);
rdma_pci_dma_unmap(pdev, tbl, TARGET_PAGE_SIZE);
tbl = rdma_pci_dma_map(pdev, dir[dir_idx], TARGET_PAGE_SIZE);
if (!tbl) {
- error_report("PVRDMA: Failed to map to page table %d", dir_idx);
+ rdma_error_report("Failed to map to page table %d", dir_idx);
goto out_unmap_host_virt;
}
}
- pr_dbg("guest_dma[%d]=0x%" PRIx64 "\n", addr_idx, tbl[tbl_idx]);
-
curr_page = rdma_pci_dma_map(pdev, (dma_addr_t)tbl[tbl_idx],
TARGET_PAGE_SIZE);
if (!curr_page) {
- error_report("PVRDMA: Failed to map to page %d, dir %d", tbl_idx,
- dir_idx);
+ rdma_error_report("Failed to map to page %d, dir %d", tbl_idx,
+ dir_idx);
goto out_unmap_host_virt;
}
mremap(curr_page, 0, TARGET_PAGE_SIZE, MREMAP_MAYMOVE | MREMAP_FIXED,
host_virt + TARGET_PAGE_SIZE * addr_idx);
+ trace_pvrdma_map_to_pdir_next_page(addr_idx, curr_page, host_virt +
+ TARGET_PAGE_SIZE * addr_idx);
+
rdma_pci_dma_unmap(pdev, curr_page, TARGET_PAGE_SIZE);
addr_idx++;
@@ -127,7 +125,6 @@ static int query_port(PVRDMADev *dev, union pvrdma_cmd_req *req,
struct pvrdma_cmd_query_port_resp *resp = &rsp->query_port_resp;
struct pvrdma_port_attr attrs = {0};
- pr_dbg("port=%d\n", cmd->port_num);
if (cmd->port_num > MAX_PORTS) {
return -EINVAL;
}
@@ -159,12 +156,10 @@ static int query_pkey(PVRDMADev *dev, union pvrdma_cmd_req *req,
struct pvrdma_cmd_query_pkey *cmd = &req->query_pkey;
struct pvrdma_cmd_query_pkey_resp *resp = &rsp->query_pkey_resp;
- pr_dbg("port=%d\n", cmd->port_num);
if (cmd->port_num > MAX_PORTS) {
return -EINVAL;
}
- pr_dbg("index=%d\n", cmd->index);
if (cmd->index > MAX_PKEYS) {
return -EINVAL;
}
@@ -172,7 +167,6 @@ static int query_pkey(PVRDMADev *dev, union pvrdma_cmd_req *req,
memset(resp, 0, sizeof(*resp));
resp->pkey = PVRDMA_PKEY;
- pr_dbg("pkey=0x%x\n", resp->pkey);
return 0;
}
@@ -184,8 +178,6 @@ static int create_pd(PVRDMADev *dev, union pvrdma_cmd_req *req,
struct pvrdma_cmd_create_pd_resp *resp = &rsp->create_pd_resp;
int rc;
- pr_dbg("context=0x%x\n", cmd->ctx_handle ? cmd->ctx_handle : 0);
-
memset(resp, 0, sizeof(*resp));
rc = rdma_rm_alloc_pd(&dev->rdma_dev_res, &dev->backend_dev,
&resp->pd_handle, cmd->ctx_handle);
@@ -198,8 +190,6 @@ static int destroy_pd(PVRDMADev *dev, union pvrdma_cmd_req *req,
{
struct pvrdma_cmd_destroy_pd *cmd = &req->destroy_pd;
- pr_dbg("pd_handle=%d\n", cmd->pd_handle);
-
rdma_rm_dealloc_pd(&dev->rdma_dev_res, cmd->pd_handle);
return 0;
@@ -216,15 +206,11 @@ static int create_mr(PVRDMADev *dev, union pvrdma_cmd_req *req,
memset(resp, 0, sizeof(*resp));
- pr_dbg("pd_handle=%d\n", cmd->pd_handle);
- pr_dbg("access_flags=0x%x\n", cmd->access_flags);
- pr_dbg("flags=0x%x\n", cmd->flags);
-
if (!(cmd->flags & PVRDMA_MR_FLAG_DMA)) {
host_virt = pvrdma_map_to_pdir(pci_dev, cmd->pdir_dma, cmd->nchunks,
cmd->length);
if (!host_virt) {
- pr_dbg("Failed to map to pdir\n");
+ rdma_error_report("Failed to map to pdir");
return -EINVAL;
}
}
@@ -244,8 +230,6 @@ static int destroy_mr(PVRDMADev *dev, union pvrdma_cmd_req *req,
{
struct pvrdma_cmd_destroy_mr *cmd = &req->destroy_mr;
- pr_dbg("mr_handle=%d\n", cmd->mr_handle);
-
rdma_rm_dealloc_mr(&dev->rdma_dev_res, cmd->mr_handle);
return 0;
@@ -260,20 +244,19 @@ static int create_cq_ring(PCIDevice *pci_dev , PvrdmaRing **ring,
char ring_name[MAX_RING_NAME_SZ];
if (!nchunks || nchunks > PVRDMA_MAX_FAST_REG_PAGES) {
- pr_dbg("invalid nchunks: %d\n", nchunks);
+ rdma_error_report("Got invalid nchunks: %d", nchunks);
return rc;
}
- pr_dbg("pdir_dma=0x%llx\n", (long long unsigned int)pdir_dma);
dir = rdma_pci_dma_map(pci_dev, pdir_dma, TARGET_PAGE_SIZE);
if (!dir) {
- pr_dbg("Failed to map to CQ page directory\n");
+ rdma_error_report("Failed to map to CQ page directory");
goto out;
}
tbl = rdma_pci_dma_map(pci_dev, dir[0], TARGET_PAGE_SIZE);
if (!tbl) {
- pr_dbg("Failed to map to CQ page table\n");
+ rdma_error_report("Failed to map to CQ page table");
goto out;
}
@@ -284,7 +267,7 @@ static int create_cq_ring(PCIDevice *pci_dev , PvrdmaRing **ring,
rdma_pci_dma_map(pci_dev, tbl[0], TARGET_PAGE_SIZE);
if (!r->ring_state) {
- pr_dbg("Failed to map to CQ ring state\n");
+ rdma_error_report("Failed to map to CQ ring state");
goto out_free_ring;
}
@@ -339,8 +322,6 @@ static int create_cq(PVRDMADev *dev, union pvrdma_cmd_req *req,
return rc;
}
- pr_dbg("ring=%p\n", ring);
-
rc = rdma_rm_alloc_cq(&dev->rdma_dev_res, &dev->backend_dev, cmd->cqe,
&resp->cq_handle, ring);
if (rc) {
@@ -359,11 +340,9 @@ static int destroy_cq(PVRDMADev *dev, union pvrdma_cmd_req *req,
RdmaRmCQ *cq;
PvrdmaRing *ring;
- pr_dbg("cq_handle=%d\n", cmd->cq_handle);
-
cq = rdma_rm_get_cq(&dev->rdma_dev_res, cmd->cq_handle);
if (!cq) {
- pr_dbg("Invalid CQ handle\n");
+ rdma_error_report("Got invalid CQ handle");
return -EINVAL;
}
@@ -388,42 +367,33 @@ static int create_qp_rings(PCIDevice *pci_dev, uint64_t pdir_dma,
if (!spages || spages > PVRDMA_MAX_FAST_REG_PAGES
|| !rpages || rpages > PVRDMA_MAX_FAST_REG_PAGES) {
- pr_dbg("invalid pages: %d, %d\n", spages, rpages);
+ rdma_error_report("Got invalid page count for QP ring: %d, %d", spages,
+ rpages);
return rc;
}
- pr_dbg("pdir_dma=0x%llx\n", (long long unsigned int)pdir_dma);
dir = rdma_pci_dma_map(pci_dev, pdir_dma, TARGET_PAGE_SIZE);
if (!dir) {
- pr_dbg("Failed to map to CQ page directory\n");
+ rdma_error_report("Failed to map to CQ page directory");
goto out;
}
tbl = rdma_pci_dma_map(pci_dev, dir[0], TARGET_PAGE_SIZE);
if (!tbl) {
- pr_dbg("Failed to map to CQ page table\n");
+ rdma_error_report("Failed to map to CQ page table");
goto out;
}
sr = g_malloc(2 * sizeof(*rr));
rr = &sr[1];
- pr_dbg("sring=%p\n", sr);
- pr_dbg("rring=%p\n", rr);
*rings = sr;
- pr_dbg("scqe=%d\n", scqe);
- pr_dbg("smax_sge=%d\n", smax_sge);
- pr_dbg("spages=%d\n", spages);
- pr_dbg("rcqe=%d\n", rcqe);
- pr_dbg("rmax_sge=%d\n", rmax_sge);
- pr_dbg("rpages=%d\n", rpages);
-
/* Create send ring */
sr->ring_state = (struct pvrdma_ring *)
rdma_pci_dma_map(pci_dev, tbl[0], TARGET_PAGE_SIZE);
if (!sr->ring_state) {
- pr_dbg("Failed to map to CQ ring state\n");
+ rdma_error_report("Failed to map to CQ ring state");
goto out_free_sr_mem;
}
@@ -468,9 +438,7 @@ out:
static void destroy_qp_rings(PvrdmaRing *ring)
{
- pr_dbg("sring=%p\n", &ring[0]);
pvrdma_ring_free(&ring[0]);
- pr_dbg("rring=%p\n", &ring[1]);
pvrdma_ring_free(&ring[1]);
rdma_pci_dma_unmap(ring->dev, ring->ring_state, TARGET_PAGE_SIZE);
@@ -487,9 +455,6 @@ static int create_qp(PVRDMADev *dev, union pvrdma_cmd_req *req,
memset(resp, 0, sizeof(*resp));
- pr_dbg("total_chunks=%d\n", cmd->total_chunks);
- pr_dbg("send_chunks=%d\n", cmd->send_chunks);
-
rc = create_qp_rings(PCI_DEVICE(dev), cmd->pdir_dma, &rings,
cmd->max_send_wr, cmd->max_send_sge, cmd->send_chunks,
cmd->max_recv_wr, cmd->max_recv_sge,
@@ -498,8 +463,6 @@ static int create_qp(PVRDMADev *dev, union pvrdma_cmd_req *req,
return rc;
}
- pr_dbg("rings=%p\n", rings);
-
rc = rdma_rm_alloc_qp(&dev->rdma_dev_res, cmd->pd_handle, cmd->qp_type,
cmd->max_send_wr, cmd->max_send_sge,
cmd->send_cq_handle, cmd->max_recv_wr,
@@ -525,8 +488,6 @@ static int modify_qp(PVRDMADev *dev, union pvrdma_cmd_req *req,
struct pvrdma_cmd_modify_qp *cmd = &req->modify_qp;
int rc;
- pr_dbg("qp_handle=%d\n", cmd->qp_handle);
-
memset(rsp, 0, sizeof(*rsp));
/* No need to verify sgid_index since it is u8 */
@@ -551,9 +512,6 @@ static int query_qp(PVRDMADev *dev, union pvrdma_cmd_req *req,
struct ibv_qp_init_attr init_attr;
int rc;
- pr_dbg("qp_handle=%d\n", cmd->qp_handle);
- pr_dbg("attr_mask=0x%x\n", cmd->attr_mask);
-
memset(rsp, 0, sizeof(*rsp));
rc = rdma_rm_query_qp(&dev->rdma_dev_res, &dev->backend_dev, cmd->qp_handle,
@@ -572,7 +530,6 @@ static int destroy_qp(PVRDMADev *dev, union pvrdma_cmd_req *req,
qp = rdma_rm_get_qp(&dev->rdma_dev_res, cmd->qp_handle);
if (!qp) {
- pr_dbg("Invalid QP handle\n");
return -EINVAL;
}
@@ -591,16 +548,10 @@ static int create_bind(PVRDMADev *dev, union pvrdma_cmd_req *req,
int rc;
union ibv_gid *gid = (union ibv_gid *)&cmd->new_gid;
- pr_dbg("index=%d\n", cmd->index);
-
if (cmd->index >= MAX_PORT_GIDS) {
return -EINVAL;
}
- pr_dbg("gid[%d]=0x%llx,0x%llx\n", cmd->index,
- (long long unsigned int)be64_to_cpu(gid->global.subnet_prefix),
- (long long unsigned int)be64_to_cpu(gid->global.interface_id));
-
rc = rdma_rm_add_gid(&dev->rdma_dev_res, &dev->backend_dev,
dev->backend_eth_device_name, gid, cmd->index);
@@ -614,8 +565,6 @@ static int destroy_bind(PVRDMADev *dev, union pvrdma_cmd_req *req,
struct pvrdma_cmd_destroy_bind *cmd = &req->destroy_bind;
- pr_dbg("index=%d\n", cmd->index);
-
if (cmd->index >= MAX_PORT_GIDS) {
return -EINVAL;
}
@@ -633,8 +582,6 @@ static int create_uc(PVRDMADev *dev, union pvrdma_cmd_req *req,
struct pvrdma_cmd_create_uc_resp *resp = &rsp->create_uc_resp;
int rc;
- pr_dbg("pfn=%d\n", cmd->pfn);
-
memset(resp, 0, sizeof(*resp));
rc = rdma_rm_alloc_uc(&dev->rdma_dev_res, cmd->pfn, &resp->ctx_handle);
@@ -646,8 +593,6 @@ static int destroy_uc(PVRDMADev *dev, union pvrdma_cmd_req *req,
{
struct pvrdma_cmd_destroy_uc *cmd = &req->destroy_uc;
- pr_dbg("ctx_handle=%d\n", cmd->ctx_handle);
-
rdma_rm_dealloc_uc(&dev->rdma_dev_res, cmd->ctx_handle);
return 0;
@@ -680,22 +625,21 @@ static struct cmd_handler cmd_handlers[] = {
{PVRDMA_CMD_DESTROY_BIND, PVRDMA_CMD_DESTROY_BIND_RESP_NOOP, destroy_bind},
};
-int execute_command(PVRDMADev *dev)
+int pvrdma_exec_cmd(PVRDMADev *dev)
{
int err = 0xFFFF;
DSRInfo *dsr_info;
dsr_info = &dev->dsr_info;
- pr_dbg("cmd=%d\n", dsr_info->req->hdr.cmd);
if (dsr_info->req->hdr.cmd >= sizeof(cmd_handlers) /
sizeof(struct cmd_handler)) {
- pr_dbg("Unsupported command\n");
+ rdma_error_report("Unsupported command");
goto out;
}
if (!cmd_handlers[dsr_info->req->hdr.cmd].exec) {
- pr_dbg("Unsupported command (not implemented yet)\n");
+ rdma_error_report("Unsupported command (not implemented yet)");
goto out;
}
@@ -704,7 +648,8 @@ int execute_command(PVRDMADev *dev)
dsr_info->rsp->hdr.response = dsr_info->req->hdr.response;
dsr_info->rsp->hdr.ack = cmd_handlers[dsr_info->req->hdr.cmd].ack;
dsr_info->rsp->hdr.err = err < 0 ? -err : 0;
- pr_dbg("rsp->hdr.err=%d\n", dsr_info->rsp->hdr.err);
+
+ trace_pvrdma_exec_cmd(dsr_info->req->hdr.cmd, dsr_info->rsp->hdr.err);
out:
set_reg_val(dev, PVRDMA_REG_ERR, err);