Re: [PATCH V4 for-next 1/3] RDMA/hns: Add mtr support for mixed multihop addressing

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

 




在 2019/6/8 0:48, Jason Gunthorpe 写道:
> On Fri, May 31, 2019 at 02:57:45PM +0800, Lijun Ou wrote:
>> +
>> +static int hns_roce_write_mtr(struct hns_roce_dev *hr_dev,
>> +			      struct hns_roce_mtr *mtr, dma_addr_t *bufs,
>> +			      struct hns_roce_buf_region *r)
>> +{
>> +	int offset;
>> +	int count;
>> +	int npage;
>> +	u64 *mtts;
>> +	int end;
>> +	int i;
>> +
>> +	offset = r->offset;
>> +	end = offset + r->count;
>> +	npage = 0;
>> +	while (offset < end) {
>> +		mtts = hns_roce_hem_list_find_mtt(hr_dev, &mtr->hem_list,
>> +						  offset, &count, NULL);
>> +		if (!mtts)
>> +			return -ENOBUFS;
>> +
>> +		/* Save page addr, low 12 bits : 0 */
>> +		for (i = 0; i < count; i++) {
>> +			if (hr_dev->hw_rev == HNS_ROCE_HW_VER1)
>> +				mtts[i] = cpu_to_le64(bufs[npage] >>
>> +							PAGE_ADDR_SHIFT);
>> +			else
>> +				mtts[i] = cpu_to_le64(bufs[npage]);
>> +
>> +			npage++;
>> +		}
>> +		offset += count;
>> +	}
>> +
>> +	/* Memory barrier */
>> +	mb();
> 
> Didn't we talk about this already? Comments for all memory barriers
> have to be very good.
> 
> Be really sure you are using the right barrier type for the right
> thing, because I won't take patches that get this stuff wrong.
> 
ok,thanks, I will append more comments at here.
>> +int hns_roce_mtr_find(struct hns_roce_dev *hr_dev, struct hns_roce_mtr *mtr,
>> +		      int offset, u64 *mtt_buf, int mtt_max, u64 *base_addr)
>> +{
>> +	u64 *mtts = mtt_buf;
>> +	int mtt_count;
>> +	int total = 0;
>> +	u64 *addr;
>> +	int npage;
>> +	int left;
>> +
>> +	if (mtts == NULL || mtt_max < 1)
>> +		goto done;
>> +
>> +	left = mtt_max;
>> +	while (left > 0) {
>> +		mtt_count = 0;
>> +		addr = hns_roce_hem_list_find_mtt(hr_dev, &mtr->hem_list,
>> +						  offset + total,
>> +						  &mtt_count, NULL);
>> +		if (!addr || !mtt_count)
>> +			goto done;
>> +
>> +		npage = min(mtt_count, left);
>> +		memcpy(&mtts[total], addr, BA_BYTE_LEN * npage);
>> +		left -= npage;
>> +		total += npage;
>> +	}
>> +
>> +done:
>> +	if (base_addr)
>> +		*base_addr = mtr->hem_list.root_ba;
>> +
>> +	return total;
>> +}
>> +EXPORT_SYMBOL_GPL(hns_roce_mtr_find);
> 
> Why is there an EXPROT_SYMBOL in a IB driver? I see many in
> hns. Please send a patch to remove all of them and respin this.
> 
There are 2 modules in our ib driver, one is hns_roce.ko, another
is hns_roce_hw_v2.ko. all extern symbols are named like hns_roce_xxx,
this function defined in hns_roce.ko, and invoked in hns_roce_hw_v2.ko.
> Jason
> _______________________________________________
> Linuxarm mailing list
> Linuxarm@xxxxxxxxxx
> http://hulk.huawei.com/mailman/listinfo/linuxarm
> .
> 




[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