On 2023/7/27 14:58, Leon Romanovsky wrote: > On Thu, Jul 27, 2023 at 11:44:50AM +0800, Junxian Huang wrote: >> >> >> On 2023/7/24 19:19, Leon Romanovsky wrote: >>> On Fri, Jul 21, 2023 at 05:20:52PM +0800, Junxian Huang wrote: >>>> From: Haoyue Xu <xuhaoyue1@xxxxxxxxxxxxx> >>>> >>>> Previously, there was no way to query the number of lanes for a network >>>> card, so the same netdev_speed would result in a fixed pair of width and >>>> speed. As network card specifications become more diverse, such fixed >>>> mode is no longer suitable, so a method is needed to obtain the correct >>>> width and speed based on the number of lanes. >>>> >>>> This patch retrieves netdev lanes and speed from net_device and >>>> translates them to IB width and speed. >>>> >>>> Signed-off-by: Haoyue Xu <xuhaoyue1@xxxxxxxxxxxxx> >>>> Signed-off-by: Luoyouming <luoyouming@xxxxxxxxxx> >>>> Signed-off-by: Junxian Huang <huangjunxian6@xxxxxxxxxxxxx> >>>> --- >>>> drivers/infiniband/core/verbs.c | 100 +++++++++++++++++++++++++------- >>>> 1 file changed, 79 insertions(+), 21 deletions(-) >>>> >>>> diff --git a/drivers/infiniband/core/verbs.c b/drivers/infiniband/core/verbs.c >>>> index b99b3cc283b6..25367bd6dd97 100644 >>>> --- a/drivers/infiniband/core/verbs.c >>>> +++ b/drivers/infiniband/core/verbs.c >>>> @@ -1880,6 +1880,80 @@ int ib_modify_qp_with_udata(struct ib_qp *ib_qp, struct ib_qp_attr *attr, >>>> } >>>> EXPORT_SYMBOL(ib_modify_qp_with_udata); >>>> >>>> +static void ib_get_width_and_speed(u32 netdev_speed, u32 lanes, >>>> + u16 *speed, u8 *width) >>> >>> <...> >>> >>>> + switch (netdev_speed / lanes) { >>>> + case SPEED_2500: >>>> + *speed = IB_SPEED_SDR; >>>> + break; >>>> + case SPEED_5000: >>>> + *speed = IB_SPEED_DDR; >>>> + break; >>>> + case SPEED_10000: >>>> + *speed = IB_SPEED_FDR10; >>>> + break; >>>> + case SPEED_14000: >>>> + *speed = IB_SPEED_FDR; >>>> + break; >>>> + case SPEED_25000: >>>> + *speed = IB_SPEED_EDR; >>>> + break; >>>> + case SPEED_50000: >>>> + *speed = IB_SPEED_HDR; >>>> + break; >>>> + case SPEED_100000: >>>> + *speed = IB_SPEED_NDR; >>>> + break; >>>> + default: >>>> + *speed = IB_SPEED_SDR; >>>> + } >>> >>> How did you come to these translation values? >>> >>> Thanks >> >> The IB spec defines the mapping relationship between IB speed and transfer >> rate. For example, if the transfer rate of is 2.5Gbps(SPEED_2500), the IB >> speed will be set to IB_SPEED_SDR. > > Are you referring to "Table 250 - Enumeration of the Rate"? > > Thanks > >> >> Junxian Yes. Junxian