IB/core: Add inline function to validate port
authorYuval Shaia <yuval.shaia@oracle.com>
Wed, 25 Jan 2017 16:41:37 +0000 (18:41 +0200)
committerDoug Ledford <dledford@redhat.com>
Fri, 27 Jan 2017 19:33:59 +0000 (14:33 -0500)
Signed-off-by: Yuval Shaia <yuval.shaia@oracle.com>
Reviewed-by: Leon Romanovsky <leonro@mellanox.com>
Signed-off-by: Doug Ledford <dledford@redhat.com>
drivers/infiniband/core/cache.c
drivers/infiniband/core/cma.c
drivers/infiniband/core/device.c
drivers/infiniband/core/verbs.c
include/rdma/ib_verbs.h

index 2e52021aa999231323ac848cdb3abb0627ddb93c..b1371eb9f46cd1c052503a556daca5d424c4d28b 100644 (file)
@@ -504,8 +504,7 @@ int ib_find_cached_gid_by_port(struct ib_device *ib_dev,
        struct ib_gid_attr val = {.ndev = ndev, .gid_type = gid_type};
        unsigned long flags;
 
-       if (port < rdma_start_port(ib_dev) ||
-           port > rdma_end_port(ib_dev))
+       if (!rdma_is_port_valid(ib_dev, port))
                return -ENOENT;
 
        table = ib_dev->cache.ports[port - rdma_start_port(ib_dev)].gid;
@@ -562,8 +561,7 @@ static int ib_cache_gid_find_by_filter(struct ib_device *ib_dev,
        bool found = false;
 
 
-       if (port < rdma_start_port(ib_dev) ||
-           port > rdma_end_port(ib_dev) ||
+       if (!rdma_is_port_valid(ib_dev, port) ||
            !rdma_protocol_roce(ib_dev, port))
                return -EPROTONOSUPPORT;
 
@@ -845,7 +843,7 @@ int ib_get_cached_gid(struct ib_device *device,
        unsigned long flags;
        struct ib_gid_table *table;
 
-       if (port_num < rdma_start_port(device) || port_num > rdma_end_port(device))
+       if (!rdma_is_port_valid(device, port_num))
                return -EINVAL;
 
        table = device->cache.ports[port_num - rdma_start_port(device)].gid;
@@ -895,7 +893,7 @@ int ib_get_cached_pkey(struct ib_device *device,
        unsigned long flags;
        int ret = 0;
 
-       if (port_num < rdma_start_port(device) || port_num > rdma_end_port(device))
+       if (!rdma_is_port_valid(device, port_num))
                return -EINVAL;
 
        read_lock_irqsave(&device->cache.lock, flags);
@@ -924,7 +922,7 @@ int ib_find_cached_pkey(struct ib_device *device,
        int ret = -ENOENT;
        int partial_ix = -1;
 
-       if (port_num < rdma_start_port(device) || port_num > rdma_end_port(device))
+       if (!rdma_is_port_valid(device, port_num))
                return -EINVAL;
 
        read_lock_irqsave(&device->cache.lock, flags);
@@ -964,7 +962,7 @@ int ib_find_exact_cached_pkey(struct ib_device *device,
        int i;
        int ret = -ENOENT;
 
-       if (port_num < rdma_start_port(device) || port_num > rdma_end_port(device))
+       if (!rdma_is_port_valid(device, port_num))
                return -EINVAL;
 
        read_lock_irqsave(&device->cache.lock, flags);
@@ -993,7 +991,7 @@ int ib_get_cached_lmc(struct ib_device *device,
        unsigned long flags;
        int ret = 0;
 
-       if (port_num < rdma_start_port(device) || port_num > rdma_end_port(device))
+       if (!rdma_is_port_valid(device, port_num))
                return -EINVAL;
 
        read_lock_irqsave(&device->cache.lock, flags);
@@ -1038,7 +1036,7 @@ static void ib_cache_update(struct ib_device *device,
        bool                       use_roce_gid_table =
                                        rdma_cap_roce_gid_table(device, port);
 
-       if (port < rdma_start_port(device) || port > rdma_end_port(device))
+       if (!rdma_is_port_valid(device, port))
                return;
 
        table = device->cache.ports[port - rdma_start_port(device)].gid;
index 7cb01a9463da44ae5bd7d8f045c623fd5eb69225..9c93e2fa969bf05bc9018664f3f36c353e7ca653 100644 (file)
@@ -269,8 +269,7 @@ struct cma_device *cma_enum_devices_by_ibdev(cma_device_filter      filter,
 int cma_get_default_gid_type(struct cma_device *cma_dev,
                             unsigned int port)
 {
-       if (port < rdma_start_port(cma_dev->device) ||
-           port > rdma_end_port(cma_dev->device))
+       if (!rdma_is_port_valid(cma_dev->device, port))
                return -EINVAL;
 
        return cma_dev->default_gid_type[port - rdma_start_port(cma_dev->device)];
@@ -282,8 +281,7 @@ int cma_set_default_gid_type(struct cma_device *cma_dev,
 {
        unsigned long supported_gids;
 
-       if (port < rdma_start_port(cma_dev->device) ||
-           port > rdma_end_port(cma_dev->device))
+       if (!rdma_is_port_valid(cma_dev->device, port))
                return -EINVAL;
 
        supported_gids = roce_gid_type_mask_support(cma_dev->device, port);
index 571974cd391981a6009abfdedf6b848029a366c1..f2e48655a906bbe16d0923905288e8fbf6af6e35 100644 (file)
@@ -659,7 +659,7 @@ int ib_query_port(struct ib_device *device,
        union ib_gid gid;
        int err;
 
-       if (port_num < rdma_start_port(device) || port_num > rdma_end_port(device))
+       if (!rdma_is_port_valid(device, port_num))
                return -EINVAL;
 
        memset(port_attr, 0, sizeof(*port_attr));
@@ -825,7 +825,7 @@ int ib_modify_port(struct ib_device *device,
        if (!device->modify_port)
                return -ENOSYS;
 
-       if (port_num < rdma_start_port(device) || port_num > rdma_end_port(device))
+       if (!rdma_is_port_valid(device, port_num))
                return -EINVAL;
 
        return device->modify_port(device, port_num, port_modify_mask,
index 71580cc28c9ecc9550bbcb2adcf72878114c8efb..9b77fbc869038d260e9d795f78d44798ec73f9b2 100644 (file)
@@ -1205,8 +1205,7 @@ int ib_resolve_eth_dmac(struct ib_device *device,
 {
        int           ret = 0;
 
-       if (ah_attr->port_num < rdma_start_port(device) ||
-           ah_attr->port_num > rdma_end_port(device))
+       if (!rdma_is_port_valid(device, ah_attr->port_num))
                return -EINVAL;
 
        if (!rdma_cap_eth_ah(device, ah_attr->port_num))
index e55afec6bb84a36f4114cee52072a13590740be5..b1ac9735fbbea5ffb745189eebe40311dbb1929c 100644 (file)
@@ -2280,6 +2280,13 @@ static inline u8 rdma_end_port(const struct ib_device *device)
        return rdma_cap_ib_switch(device) ? 0 : device->phys_port_cnt;
 }
 
+static inline int rdma_is_port_valid(const struct ib_device *device,
+                                    unsigned int port)
+{
+       return (port >= rdma_start_port(device) &&
+               port <= rdma_end_port(device));
+}
+
 static inline bool rdma_protocol_ib(const struct ib_device *device, u8 port_num)
 {
        return device->port_immutable[port_num].core_cap_flags & RDMA_CORE_CAP_PROT_IB;