Re: [PATCH for-next 4/4] RDMA/hns: Add enable judgement for UD vlan

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



在 2018/9/15 18:27, Leon Romanovsky 写道:
> On Sat, Sep 15, 2018 at 06:08:57PM +0800, Lijun Ou wrote:
>> According to the hardware modification, the vlan of the UD
>> packet is based on the ud_vlan_en field of ud wqe to
>> determine whether to add a vlan header to the ud
>> packet. The ud_vlan_en field is filled by the driver
>> according to judge the net device.
>>
>> Signed-off-by: Lijun Ou <oulijun@xxxxxxxxxx>
>> ---
>>  drivers/infiniband/hw/hns/hns_roce_ah.c     | 6 +++++-
>>  drivers/infiniband/hw/hns/hns_roce_device.h | 1 +
>>  drivers/infiniband/hw/hns/hns_roce_hw_v2.c  | 3 +++
>>  drivers/infiniband/hw/hns/hns_roce_hw_v2.h  | 2 ++
>>  4 files changed, 11 insertions(+), 1 deletion(-)
>>
>> diff --git a/drivers/infiniband/hw/hns/hns_roce_ah.c b/drivers/infiniband/hw/hns/hns_roce_ah.c
>> index 0d96c5b..004b315 100644
>> --- a/drivers/infiniband/hw/hns/hns_roce_ah.c
>> +++ b/drivers/infiniband/hw/hns/hns_roce_ah.c
>> @@ -49,6 +49,7 @@ struct ib_ah *hns_roce_create_ah(struct ib_pd *ibpd,
>>  	struct hns_roce_ah *ah;
>>  	u16 vlan_tag = 0xffff;
>>  	const struct ib_global_route *grh = rdma_ah_read_grh(ah_attr);
>> +	bool vlan_en = false;
>>
> You are not changing this variable and not using it in any decision making.
> This patch most probably doesn't do what you expected from it.
Hi, leon
    The goal that defines av.vlan_en is to configure the vlan_en filed of ud wqe. when judge the device is vlan device. Is ok?

thanks
Lijun Ou
>>  	ah = kzalloc(sizeof(*ah), GFP_ATOMIC);
>>  	if (!ah)
>> @@ -58,8 +59,10 @@ struct ib_ah *hns_roce_create_ah(struct ib_pd *ibpd,
>>  	memcpy(ah->av.mac, ah_attr->roce.dmac, ETH_ALEN);
>>
>>  	gid_attr = ah_attr->grh.sgid_attr;
>> -	if (is_vlan_dev(gid_attr->ndev))
>> +	if (is_vlan_dev(gid_attr->ndev)) {
>>  		vlan_tag = vlan_dev_vlan_id(gid_attr->ndev);
>> +		ah->av.vlan_en = vlan_en;
>> +	}
>>
>>  	if (vlan_tag < 0x1000)
>>  		vlan_tag |= (rdma_ah_get_sl(ah_attr) &
>> @@ -71,6 +74,7 @@ struct ib_ah *hns_roce_create_ah(struct ib_pd *ibpd,
>>  				     HNS_ROCE_PORT_NUM_SHIFT));
>>  	ah->av.gid_index = grh->sgid_index;
>>  	ah->av.vlan = cpu_to_le16(vlan_tag);
>> +	ah->av.vlan_en = vlan_en;
>>  	dev_dbg(dev, "gid_index = 0x%x,vlan = 0x%x\n", ah->av.gid_index,
>>  		ah->av.vlan);
>>
>> diff --git a/drivers/infiniband/hw/hns/hns_roce_device.h b/drivers/infiniband/hw/hns/hns_roce_device.h
>> index 6dadb12..2461804 100644
>> --- a/drivers/infiniband/hw/hns/hns_roce_device.h
>> +++ b/drivers/infiniband/hw/hns/hns_roce_device.h
>> @@ -458,6 +458,7 @@ struct hns_roce_av {
>>  	u8          dgid[HNS_ROCE_GID_SIZE];
>>  	u8          mac[6];
>>  	__le16      vlan;
>> +	bool	    vlan_en;
>>  };
>>
>>  struct hns_roce_ah {
>> diff --git a/drivers/infiniband/hw/hns/hns_roce_hw_v2.c b/drivers/infiniband/hw/hns/hns_roce_hw_v2.c
>> index 4020584..86f793b 100644
>> --- a/drivers/infiniband/hw/hns/hns_roce_hw_v2.c
>> +++ b/drivers/infiniband/hw/hns/hns_roce_hw_v2.c
>> @@ -370,6 +370,9 @@ static int hns_roce_v2_post_send(struct ib_qp *ibqp,
>>  				       V2_UD_SEND_WQE_BYTE_40_PORTN_S,
>>  				       qp->port);
>>
>> +			roce_set_bit(ud_sq_wqe->byte_40,
>> +				     V2_UD_SEND_WQE_BYTE_40_UD_VLAN_EN_S,
>> +				     ah->av.vlan_en ? 1 : 0);
>>  			roce_set_field(ud_sq_wqe->byte_48,
>>  				       V2_UD_SEND_WQE_BYTE_48_SGID_INDX_M,
>>  				       V2_UD_SEND_WQE_BYTE_48_SGID_INDX_S,
>> diff --git a/drivers/infiniband/hw/hns/hns_roce_hw_v2.h b/drivers/infiniband/hw/hns/hns_roce_hw_v2.h
>> index d04be1c..7ee6ed2 100644
>> --- a/drivers/infiniband/hw/hns/hns_roce_hw_v2.h
>> +++ b/drivers/infiniband/hw/hns/hns_roce_hw_v2.h
>> @@ -993,6 +993,8 @@ struct hns_roce_v2_ud_send_wqe {
>>  #define	V2_UD_SEND_WQE_BYTE_40_PORTN_S 24
>>  #define V2_UD_SEND_WQE_BYTE_40_PORTN_M GENMASK(26, 24)
>>
>> +#define V2_UD_SEND_WQE_BYTE_40_UD_VLAN_EN_S 30
>> +
>>  #define	V2_UD_SEND_WQE_BYTE_40_LBI_S 31
>>
>>  #define	V2_UD_SEND_WQE_DMAC_0_S 0
>> --
>> 1.9.1
>>





[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Photo]     [Yosemite News]     [Yosemite Photos]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux