OSDN Git Service

RDMA/vmw_pvrdma: Support upto 64-bit PFNs
authorAdit Ranadive <aditr@vmware.com>
Sat, 26 Jan 2019 05:09:36 +0000 (05:09 +0000)
committerJason Gunthorpe <jgg@mellanox.com>
Wed, 30 Jan 2019 04:40:28 +0000 (21:40 -0700)
Update the driver to use the new device capability to report 64-bit UAR
PFNs.

Reviewed-by: Jorgen Hansen <jhansen@vmware.com>
Signed-off-by: Adit Ranadive <aditr@vmware.com>
Reviewed-by: Vishnu Dasa <vdasa@vmware.com>
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
drivers/infiniband/hw/vmw_pvrdma/pvrdma_dev_api.h
drivers/infiniband/hw/vmw_pvrdma/pvrdma_main.c
drivers/infiniband/hw/vmw_pvrdma/pvrdma_verbs.c

index 6fd5a8f..8f9749d 100644 (file)
@@ -57,7 +57,8 @@
 
 #define PVRDMA_ROCEV1_VERSION          17
 #define PVRDMA_ROCEV2_VERSION          18
-#define PVRDMA_VERSION                 PVRDMA_ROCEV2_VERSION
+#define PVRDMA_PPN64_VERSION           19
+#define PVRDMA_VERSION                 PVRDMA_PPN64_VERSION
 
 #define PVRDMA_BOARD_ID                        1
 #define PVRDMA_REV_ID                  1
@@ -279,8 +280,10 @@ struct pvrdma_device_shared_region {
                                                /* W: Async ring page info. */
        struct pvrdma_ring_page_info cq_ring_pages;
                                                /* W: CQ ring page info. */
-       u32 uar_pfn;                            /* W: UAR pageframe. */
-       u32 pad2;                               /* Pad to 8-byte align. */
+       union {
+               u32 uar_pfn;                    /* W: UAR pageframe. */
+               u64 uar_pfn64;                  /* W: 64-bit UAR page frame. */
+       };
        struct pvrdma_device_caps caps;         /* R: Device capabilities. */
 };
 
@@ -411,8 +414,10 @@ struct pvrdma_cmd_query_pkey_resp {
 
 struct pvrdma_cmd_create_uc {
        struct pvrdma_cmd_hdr hdr;
-       u32 pfn; /* UAR page frame number */
-       u8 reserved[4];
+       union {
+               u32 pfn; /* UAR page frame number */
+               u64 pfn64; /* 64-bit UAR page frame number */
+       };
 };
 
 struct pvrdma_cmd_create_uc_resp {
index b586475..a5f0227 100644 (file)
@@ -905,7 +905,11 @@ static int pvrdma_pci_probe(struct pci_dev *pdev,
                PVRDMA_GOS_BITS_64;
        dev->dsr->gos_info.gos_type = PVRDMA_GOS_TYPE_LINUX;
        dev->dsr->gos_info.gos_ver = 1;
-       dev->dsr->uar_pfn = dev->driver_uar.pfn;
+
+       if (dev->dsr_version < PVRDMA_PPN64_VERSION)
+               dev->dsr->uar_pfn = dev->driver_uar.pfn;
+       else
+               dev->dsr->uar_pfn64 = dev->driver_uar.pfn;
 
        /* Command slot. */
        dev->cmd_slot = dma_alloc_coherent(&pdev->dev, PAGE_SIZE,
index e101492..fafb2ad 100644 (file)
@@ -340,7 +340,12 @@ struct ib_ucontext *pvrdma_alloc_ucontext(struct ib_device *ibdev,
 
        /* get ctx_handle from host */
        memset(cmd, 0, sizeof(*cmd));
-       cmd->pfn = context->uar.pfn;
+
+       if (vdev->dsr_version < PVRDMA_PPN64_VERSION)
+               cmd->pfn = context->uar.pfn;
+       else
+               cmd->pfn64 = context->uar.pfn;
+
        cmd->hdr.cmd = PVRDMA_CMD_CREATE_UC;
        ret = pvrdma_cmd_post(vdev, &req, &rsp, PVRDMA_CMD_CREATE_UC_RESP);
        if (ret < 0) {