IB: Add rdma_cap_ib_switch helper and use where appropriate
Persuant to Liran's comments on node_type on linux-rdma mailing list: In an effort to reform the RDMA core and ULPs to minimize use of node_type in struct ib_device, an additional bit is added to struct ib_device for is_switch (IB switch). This is needed to be initialized by any IB switch device driver. This is a NEW requirement on such device drivers which are all "out of tree". In addition, an ib_switch helper was added to ib_verbs.h based on the is_switch device bit rather than node_type (although those should be consistent). The RDMA core (MAD, SMI, agent, sa_query, multicast, sysfs) as well as (IPoIB and SRP) ULPs are updated where appropriate to use this new helper. In some cases, the helper is now used under the covers of using rdma_[start end]_port rather than the open coding previously used. Reviewed-by: Sean Hefty <sean.hefty@intel.com> Reviewed-By: Jason Gunthorpe <jgunthorpe@obsidianresearch.com> Reviewed-by: Ira Weiny <ira.weiny@intel.com> Tested-by: Ira Weiny <ira.weiny@intel.com> Signed-off-by: Hal Rosenstock <hal@mellanox.com> Signed-off-by: Doug Ledford <dledford@redhat.com>
This commit is contained in:

committed by
Doug Ledford

parent
bc0195aad0
commit
4139032b48
@@ -1745,6 +1745,7 @@ struct ib_device {
|
||||
char node_desc[64];
|
||||
__be64 node_guid;
|
||||
u32 local_dma_lkey;
|
||||
u16 is_switch:1;
|
||||
u8 node_type;
|
||||
u8 phys_port_cnt;
|
||||
|
||||
@@ -1823,6 +1824,20 @@ int ib_query_port(struct ib_device *device,
|
||||
enum rdma_link_layer rdma_port_get_link_layer(struct ib_device *device,
|
||||
u8 port_num);
|
||||
|
||||
/**
|
||||
* rdma_cap_ib_switch - Check if the device is IB switch
|
||||
* @device: Device to check
|
||||
*
|
||||
* Device driver is responsible for setting is_switch bit on
|
||||
* in ib_device structure at init time.
|
||||
*
|
||||
* Return: true if the device is IB switch.
|
||||
*/
|
||||
static inline bool rdma_cap_ib_switch(const struct ib_device *device)
|
||||
{
|
||||
return device->is_switch;
|
||||
}
|
||||
|
||||
/**
|
||||
* rdma_start_port - Return the first valid port number for the device
|
||||
* specified
|
||||
@@ -1833,7 +1848,7 @@ enum rdma_link_layer rdma_port_get_link_layer(struct ib_device *device,
|
||||
*/
|
||||
static inline u8 rdma_start_port(const struct ib_device *device)
|
||||
{
|
||||
return (device->node_type == RDMA_NODE_IB_SWITCH) ? 0 : 1;
|
||||
return rdma_cap_ib_switch(device) ? 0 : 1;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1846,8 +1861,7 @@ static inline u8 rdma_start_port(const struct ib_device *device)
|
||||
*/
|
||||
static inline u8 rdma_end_port(const struct ib_device *device)
|
||||
{
|
||||
return (device->node_type == RDMA_NODE_IB_SWITCH) ?
|
||||
0 : device->phys_port_cnt;
|
||||
return rdma_cap_ib_switch(device) ? 0 : device->phys_port_cnt;
|
||||
}
|
||||
|
||||
static inline bool rdma_protocol_ib(const struct ib_device *device, u8 port_num)
|
||||
|
Reference in New Issue
Block a user