ib core: Add link layer property to ports
PATCH v8 1/11 ib core: Add link layer property to ports
This patch adds the infrastructure for querying the link layer of a port, which can be either IB_LINK_LAYER_INFINIBAND or IB_LINK_LAYER_ETHERNET. This is required for adding IBoE support to Infiniband drivers so that branching decisions can be made according to the value of this property. For devices that do not provide an implementation for querying the link layer property of a port, the returned value depends on the node transport such that RMA_TRANSPORT_IB nodes will return IB_LINK_LAYER_INFINIBAND and RDMA_TRANSPORT_IWARP nodes will return IB_LINK_LAYER_ETHERNET.
--- drivers/infiniband/core/verbs.c | 16 ++++++++++++++++ include/rdma/ib_verbs.h | 12 ++++++++++++ 2 files changed, 28 insertions(+), 0 deletions(-)
drivers/infiniband/core/verbs.c +16 -0
@@ -94,6 +94,22 @@ rdma_node_get_transport(enum rdma_node_type node_type) }EXPORT_SYMBOL (rdma_node_get_transport); +enum rdma_link_layer rdma_port_link_layer (struct ib_device *device,u8 port_num) +{ +if (device->get_link_layer) +return device->get_link_layer (device, port_num); + +switch (rdma_node_get_transport (device->node_type)) { +case RDMA_TRANSPORT_IB : +return IB_LINK_LAYER_INFINIBAND ; +case RDMA_TRANSPORT_IWARP : +return IB_LINK_LAYER_ETHERNET ; +default : +return IB_LINK_LAYER_UNSPECIFIED ; + } +} +EXPORT_SYMBOL (rdma_port_link_layer); +/* Protection domains */ struct ib_pd *ib_alloc_pd (struct ib_device *device)
include/rdma/ib_verbs.h +12 -0
@@ -75,6 +75,12 @@ enum rdma_transport_type { enum rdma_transport_type rdma_node_get_transport(enum rdma_node_type node_type) __attribute_const__; +enum rdma_link_layer { +IB_LINK_LAYER_UNSPECIFIED , +IB_LINK_LAYER_INFINIBAND , +IB_LINK_LAYER_ETHERNET , +}; +enum ib_device_cap_flags {IB_DEVICE_RESIZE_MAX_WR =1 ,IB_DEVICE_BAD_PKEY_CNTR = (1 <<1 ),
@@ -298,6 +304,7 @@ struct ib_port_attr {u8 active_width;u8 active_speed;u8 phys_state; +enum rdma_link_layer link_layer; };enum ib_device_modify_flags {
@@ -1003,6 +1010,8 @@ struct ib_device {int (*query_port)(struct ib_device *device,u8 port_num,struct ib_port_attr *port_attr); +enum rdma_link_layer (*get_link_layer)(struct ib_device *device, +u8 port_num);int (*query_gid)(struct ib_device *device,u8 port_num,int index,union ib_gid *gid);
@@ -1213,6 +1222,9 @@ int ib_query_device(struct ib_device *device,int ib_query_port (struct ib_device *device,u8 port_num,struct ib_port_attr *port_attr); +enum rdma_link_layer rdma_port_link_layer (struct ib_device *device, +u8 port_num); +int ib_query_gid (struct ib_device *device,u8 port_num,int index,union ib_gid *gid);
Signature · 6 lines
1.7.0 -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
Hi Eli,
I'm hoping to get this IBoE stuff in for 2.6.35. I started an "iboe" branch in my tree (similar to the xrc branch I've been carrying for a while), and I added this patch in, except I renamed rdma_port_link_layer() to rdma_port_get_link_layer(). This seems to match rdma_node_get_transport() better.
In any case as I add patches to my branch, you can stop worrying about them, which should make keeping this series updated easier.
- R.
Signature · 6 lines
Roland Dreier <[email protected]> || For corporate legal information go to: http://www.cisco.com/web/about/doing_business/legal/cri/index.html -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
A message that is not in the archive (sent off-list or not yet received): adavdb2at4p.fsf-BjVyx320WGW9gfZ95n9DRSW4+XlvGpQz@public.gmane.org
Quoted 11 lines · Roland Dreier
Hi Eli,
I'm hoping to get this IBoE stuff in for 2.6.35. I started an "iboe" branch in my tree (similar to the xrc branch I've been carrying for a while), and I added this patch in, except I renamed
rdma_port_link_layer()tordma_port_get_link_layer(). This seems to matchrdma_node_get_transport()better.In any case as I add patches to my branch, you can stop worrying about them, which should make keeping this series updated easier.
Hi Roland,
I am glad to hear this and will be happy to help.