]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
xsigo: send nack codes
authorPradeep Gopanapalli <pradeep.gopanapalli@oracle.com>
Tue, 1 Nov 2016 22:16:23 +0000 (22:16 +0000)
committerChuck Anderson <chuck.anderson@oracle.com>
Thu, 3 Nov 2016 17:38:16 +0000 (10:38 -0700)
Orabug: 24442792

Sometime uVNIC removal on OFOS won't trigger a actual removal
of Vstar interface, in that case uVNIC driver has to send NACK
code so that XCM will start cleaning its database.

Added additional codes as per XCM specification

Reported-by: jie zhu <jie.x.zhu@oracle.com>
Signed-off-by: Pradeep Gopanapalli <pradeep.gopanapalli@oracle.com>
Reviewed-by: Qingjun Wang <qingjun.wang@oracle.com>
Reviewed-by: Manish Kumar Singh <mk.singh@oracle.com>
Reviewed-by: UmaShankar Tumari Mahabalagiri <umashankar.mahabalagiri@oracle.com>
drivers/infiniband/ulp/xsigo/xscore/Makefile
drivers/infiniband/ulp/xsigo/xsvhba/Makefile
drivers/infiniband/ulp/xsigo/xsvnic/Makefile
drivers/infiniband/ulp/xsigo/xve/Makefile
drivers/infiniband/ulp/xsigo/xve/xve_main.c
drivers/infiniband/ulp/xsigo/xve/xve_xsmp_msgs.h

index 6b2c8dcaa477a00133ae3b1a67d1f345087dda1e..d6f8c6557dda95059e30137c733da8a7635fd15f 100644 (file)
@@ -2,7 +2,7 @@ obj-$(CONFIG_INFINIBAND_XSCORE) := xscore.o
 xscore-y := xscore_impl.o xs_ud.o xscore_api.o xsmp.o \
            xscore_stats.o xscore_uadm.o
 
-ccflags-y += -DXSIGO_LOCAL_VERSION=\"6.0.r8034\"
+ccflags-y += -DXSIGO_LOCAL_VERSION=\"6.0.r8035\"
 ccflags-y += -DRDMA_PORT_LINK_LAYER_CHANGES -DHAS_SKB_ACCESS_FUNCTIONS
 ccflags-y += -DSCSI_STRUCT_CHANGES -DSCSI_TIMEOUT_CHANGES -DLLE
 ccflags-y += -DXG_FRAG_SIZE_PRESENT -DXG_FRAG_PAGE_PRESENT
index 55b873fc2a65d88aba5aab93e720e9319da47387..6d9c332c0bb3c76ceea1bee1500c8542dd3c06d5 100644 (file)
@@ -3,7 +3,7 @@ xsvhba-y := vhba_main.o vhba_xsmp.o vhba_create.o vhba_init.o vhba_delete.o \
            vhba_attr.o vhba_wq.o vhba_proc.o vhba_stats.o vhba_ib.o        \
            vhba_scsi_intf.o vhba_align.o
 
-ccflags-y += -DXSIGO_LOCAL_VERSION=\"6.0.r8034\"
+ccflags-y += -DXSIGO_LOCAL_VERSION=\"6.0.r8035\"
 ccflags-y += -DRDMA_PORT_LINK_LAYER_CHANGES -DHAS_SKB_ACCESS_FUNCTIONS
 ccflags-y += -DSCSI_STRUCT_CHANGES -DSCSI_TIMEOUT_CHANGES -DLLE
 ccflags-y += -DXG_FRAG_SIZE_PRESENT -DXG_FRAG_PAGE_PRESENT
index a3ab04a5ab7a416ae338d9f6fe55fd445e843c7d..d496e851660268f194e33f1a6cfc62e469b9ccac 100644 (file)
@@ -1,7 +1,7 @@
 obj-$(CONFIG_INFINIBAND_XSVNIC) := xsvnic.o
 xsvnic-y := xsvnic_main.o xsvnic_stats.o
 
-ccflags-y += -DXSIGO_LOCAL_VERSION=\"6.0.r8034\"
+ccflags-y += -DXSIGO_LOCAL_VERSION=\"6.0.r8035\"
 ccflags-y += -DRDMA_PORT_LINK_LAYER_CHANGES -DHAS_SKB_ACCESS_FUNCTIONS
 ccflags-y += -DSCSI_STRUCT_CHANGES -DSCSI_TIMEOUT_CHANGES -DLLE
 ccflags-y += -DXG_FRAG_SIZE_PRESENT -DXG_FRAG_PAGE_PRESENT
index a422c1349702277c61eacfed1ff1a4b87c4f1638..48fb3f796f71f31df61dd1e614eb457c286ec9ae 100644 (file)
@@ -2,7 +2,7 @@ obj-$(CONFIG_INFINIBAND_XVE) := xve.o
 xve-y := xve_main.o xve_verbs.o xve_multicast.o xve_ib.o xve_tables.o \
         xve_ethtool.o xve_cm.o xve_stats.o
 
-ccflags-y += -DXSIGO_LOCAL_VERSION=\"6.0.r8034\"
+ccflags-y += -DXSIGO_LOCAL_VERSION=\"6.0.r8035\"
 ccflags-y += -DRDMA_PORT_LINK_LAYER_CHANGES -DHAS_SKB_ACCESS_FUNCTIONS
 ccflags-y += -DSCSI_STRUCT_CHANGES -DSCSI_TIMEOUT_CHANGES -DLLE
 ccflags-y += -DXG_FRAG_SIZE_PRESENT -DXG_FRAG_PAGE_PRESENT
index 2eebf570c9e454946dfd7bbe03b104664c990fba..4f58c980c4d6db2ec6692dc6d6e97f135cd5597d 100644 (file)
@@ -2159,7 +2159,7 @@ static int xve_xsmp_install(xsmp_cookie_t xsmp_hndl, struct xve_xsmp_msg *xmsgp,
                        pr_info("MTU%d %s\n", be16_to_cpu(xmsgp->vn_mtu),
                                xmsgp->xve_name);
                        ret = -EINVAL;
-                       ecode = XVE_INVALID_OPERATION;
+                       ecode = XVE_NACK_IB_MTU_MISMATCH;
                        goto dup_error;
                }
        }
@@ -2184,6 +2184,12 @@ static int xve_xsmp_install(xsmp_cookie_t xsmp_hndl, struct xve_xsmp_msg *xmsgp,
            (xsmp_hndl, xmsgp->xve_name, XSMP_MESSAGE_TYPE_VNIC) != 0) {
                pr_info("%s Duplicate name %s\n", __func__, xmsgp->xve_name);
                ret = -EEXIST;
+               /* send VID to xmsgp*/
+               priv = xve_get_xve_by_name(xmsgp->xve_name);
+               if (priv)
+                       xmsgp->tca_subnet_prefix =
+                               cpu_to_be64(priv->resource_id);
+               ecode = XVE_NACK_DUP_NAME;
                goto dup_error;
        }
 
@@ -2200,6 +2206,9 @@ static int xve_xsmp_install(xsmp_cookie_t xsmp_hndl, struct xve_xsmp_msg *xmsgp,
                           __func__, xmsgp->xve_name,
                           be64_to_cpu(xmsgp->resource_id));
                ret = -EEXIST;
+               /* send VID to xmsgp*/
+               ecode = XVE_NACK_DUP_NAME;
+               xmsgp->tca_subnet_prefix = cpu_to_be64(priv->resource_id);
                goto dup_error;
        }
 
index 93a81034e4da2e2e670bfdf74f358ca7013b049f..cd0439faa082119b155d5ea755564a59b7ad793a 100644 (file)
@@ -133,7 +133,7 @@ struct xve_xsmp_msg {
 #define XVE_NACK_LIMIT_REACHED 3       /* Max number of XVEs reached */
 #define XVE_NACK_ALLOCATION_ERROR      4       /* Error during instantiation */
 #define XVE_INVALID_OPERATION  6       /* Invalid Install message */
-#define XVE_NACK_CODE_MAX      7
+#define XVE_NACK_IB_MTU_MISMATCH 20
 
 /* The common XVE XSMP header for all messages */
 struct xve_xsmp_header {