Re: [PATCH v4 for-next 1/1] RDMA/hns: Support direct wqe of userspace

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

 



On 2021/11/26 20:16, Jason Gunthorpe wrote:
> On Fri, Nov 26, 2021 at 04:25:27PM +0800, Wenpeng Liang wrote:
>> On 2021/11/26 1:50, Jason Gunthorpe wrote:
>>> On Mon, Nov 22, 2021 at 10:58:09AM +0200, Leon Romanovsky wrote:
>>>> On Mon, Nov 22, 2021 at 11:38:01AM +0800, Wenpeng Liang wrote:
>>>>> From: Yixing Liu <liuyixing1@xxxxxxxxxx>
>>>>>
>>>>> Add direct wqe enable switch and address mapping.
>>>>>
>>>>> Signed-off-by: Yixing Liu <liuyixing1@xxxxxxxxxx>
>>>>> Signed-off-by: Wenpeng Liang <liangwenpeng@xxxxxxxxxx>
>>>>>  drivers/infiniband/hw/hns/hns_roce_device.h |  8 +--
>>>>>  drivers/infiniband/hw/hns/hns_roce_main.c   | 38 ++++++++++++---
>>>>>  drivers/infiniband/hw/hns/hns_roce_pd.c     |  3 ++
>>>>>  drivers/infiniband/hw/hns/hns_roce_qp.c     | 54 ++++++++++++++++++++-
>>>>>  include/uapi/rdma/hns-abi.h                 |  2 +
>>>>>  5 files changed, 94 insertions(+), 11 deletions(-)
>>>>
>>>> <...>
>>>>
>>>>>  	entry = to_hns_mmap(rdma_entry);
>>>>>  	pfn = entry->address >> PAGE_SHIFT;
>>>>> -	prot = vma->vm_page_prot;
>>>>>  
>>>>> -	if (entry->mmap_type != HNS_ROCE_MMAP_TYPE_TPTR)
>>>>> -		prot = pgprot_noncached(prot);
>>>>> +	switch (entry->mmap_type) {
>>>>> +	case HNS_ROCE_MMAP_TYPE_DB:
>>>>> +		prot = pgprot_noncached(vma->vm_page_prot);
>>>>> +		break;
>>>>> +	case HNS_ROCE_MMAP_TYPE_TPTR:
>>>>> +		prot = vma->vm_page_prot;
>>>>> +		break;
>>>>> +	case HNS_ROCE_MMAP_TYPE_DWQE:
>>>>> +		prot = pgprot_device(vma->vm_page_prot);
>>>>
>>>> Everything fine, except this pgprot_device(). You probably need to check
>>>> WC internally in your driver and use or pgprot_writecombine() or
>>>> pgprot_noncached() explicitly.
>>>
>>> pgprot_device is only used in two places in the kernel
>>> pci_mmap_resource_range() for setting up the sysfs resourceXX mmap
>>>
>>> And in pci_remap_iospace() as part of emulationg PIO on mmio
>>> architectures
>>>
>>> So, a PCI device should always be using pgprot_device() in its mmap
>>> function
>>>
>>> The question is why is pgprot_noncached() being used at all? The only
>>> difference on ARM is that noncached is non-Early Write Acknowledgement
>>> and devices is not.
>>>
>>> At the very least this should be explained in a comment why nE vs E is
>>> required in all these cases.
>>>
>>> Jason
>>> .
>>>
>>
>> HIP09 is a SoC device, and our CPU only optimizes ST4 instructions for device
>> attributes. Therefore, we set device attributes to obtain optimization effects.
>>
>> The device attribute allows early ack, so it is faster compared with noncached.
>> In order to ensure the early ack works correctly. Even if the data is incomplete,
>> our device still knocks on the doorbell according to the content of the first
>> 8 bytes to complete the data transmission.
> 
> That doesn't really explain why the doorbell needs to be mapped noncache
> 

I might have misunderstood what you meant before.

For the HNS_ROCE_MMAP_TYPE_DB type, our device does not support Early Write
Acknowledgement. Therefore, HNS_ROCE_MMAP_TYPE_DB uses the noncached attribute.
I will add a comment in v5.

Thanks
Wenpeng



[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