OSDN Git Service

RDMA/nldev: Expose port_cap_flags2
authorMichael Guralnik <michaelgur@mellanox.com>
Sun, 9 Dec 2018 09:58:05 +0000 (11:58 +0200)
committerJason Gunthorpe <jgg@mellanox.com>
Thu, 20 Dec 2018 22:18:24 +0000 (15:18 -0700)
port_cap_flags2 represents IBTA PortInfo:CapabilityMask2.

The field safely extends the RDMA_NLDEV_ATTR_CAP_FLAGS operand as it was
exported as 64 bit to allow this kind of extension.

Signed-off-by: Michael Guralnik <michaelgur@mellanox.com>
Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
drivers/infiniband/core/nldev.c
include/uapi/rdma/rdma_netlink.h

index 093bbfc..e600fc2 100644 (file)
@@ -227,6 +227,7 @@ static int fill_port_info(struct sk_buff *msg,
        struct net_device *netdev = NULL;
        struct ib_port_attr attr;
        int ret;
+       u64 cap_flags = 0;
 
        if (fill_nldev_handle(msg, device))
                return -EMSGSIZE;
@@ -239,10 +240,12 @@ static int fill_port_info(struct sk_buff *msg,
                return ret;
 
        if (rdma_protocol_ib(device, port)) {
-               BUILD_BUG_ON(sizeof(attr.port_cap_flags) > sizeof(u64));
+               BUILD_BUG_ON((sizeof(attr.port_cap_flags) +
+                               sizeof(attr.port_cap_flags2)) > sizeof(u64));
+               cap_flags = attr.port_cap_flags |
+                       ((u64)attr.port_cap_flags2 << 32);
                if (nla_put_u64_64bit(msg, RDMA_NLDEV_ATTR_CAP_FLAGS,
-                                     (u64)attr.port_cap_flags,
-                                     RDMA_NLDEV_ATTR_PAD))
+                                     cap_flags, RDMA_NLDEV_ATTR_PAD))
                        return -EMSGSIZE;
                if (nla_put_u64_64bit(msg, RDMA_NLDEV_ATTR_SUBNET_PREFIX,
                                      attr.subnet_prefix, RDMA_NLDEV_ATTR_PAD))
index f9c41bf..2e18b77 100644 (file)
@@ -283,6 +283,9 @@ enum rdma_nldev_attr {
 
        /*
         * Device and port capabilities
+        *
+        * When used for port info, first 32-bits are CapabilityMask followed by
+        * 16-bit CapabilityMask2.
         */
        RDMA_NLDEV_ATTR_CAP_FLAGS,              /* u64 */