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

Re: [Xen-devel] swiotlb-xen question



On Fri, Apr 4, 2014 at 7:26 PM, Konrad Rzeszutek Wilk
<konrad.wilk@xxxxxxxxxx> wrote:
> On Fri, Apr 04, 2014 at 02:30:22PM +0300, Oleksandr Dmytryshyn wrote:
>> >From f52bafc1ba51324ca5044df22778aacf815c59bf Mon Sep 17 00:00:00 2001
>> From: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx>
>> Date: Fri, 4 Apr 2014 12:16:27 +0300
>> Subject: [PATCH] swiotlb-xen: implement xen_swiotlb_dma_mmap callback
>>
>> This function creates userspace mapping for the DMA-coherent memory.
>>
>> Signed-off-by: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx>
>> Signed-off-by: Oleksandr Dmytryshyn <oleksandr.dmytryshyn@xxxxxxxxxxxxxxx>
>>
>> diff --git a/arch/arm/xen/mm.c b/arch/arm/xen/mm.c
>> index b0e77de..91408b1 100644
>> --- a/arch/arm/xen/mm.c
>> +++ b/arch/arm/xen/mm.c
>> @@ -48,6 +48,7 @@ static struct dma_map_ops xen_swiotlb_dma_ops = {
>>   .sync_sg_for_device = xen_swiotlb_sync_sg_for_device,
>>   .map_sg = xen_swiotlb_map_sg_attrs,
>>   .unmap_sg = xen_swiotlb_unmap_sg_attrs,
>> + .mmap = xen_swiotlb_dma_mmap,
>>   .map_page = xen_swiotlb_map_page,
>>   .unmap_page = xen_swiotlb_unmap_page,
>>   .dma_supported = xen_swiotlb_dma_supported,
>> diff --git a/drivers/xen/swiotlb-xen.c b/drivers/xen/swiotlb-xen.c
>> index 5403855..acf0c06 100644
>> --- a/drivers/xen/swiotlb-xen.c
>> +++ b/drivers/xen/swiotlb-xen.c
>> @@ -407,6 +407,42 @@ dma_addr_t xen_swiotlb_map_page(struct device
>> *dev, struct page *page,
>>  EXPORT_SYMBOL_GPL(xen_swiotlb_map_page);
>>
>>  /*
>> + * Create userspace mapping for the DMA-coherent memory.
>> + */
>> +int xen_swiotlb_dma_mmap(struct device *dev, struct vm_area_struct *vma,
>> + void *cpu_addr, dma_addr_t dma_addr, size_t size,
>> + struct dma_attrs *attrs)
>
> Wow. Your editor ate all the nice tabs and spaces. Could you
> please also run
>
> scripts/checkpatch.pl on the patch and fix the issues it would
> complain about.
>
> Thank you!
>> +{
>> + int ret = -ENXIO;
>> +#ifdef CONFIG_MMU
>> + unsigned long nr_vma_pages = (vma->vm_end - vma->vm_start) >> PAGE_SHIFT;
>> + unsigned long nr_pages = PAGE_ALIGN(size) >> PAGE_SHIFT;
>> + unsigned long pfn = PFN_DOWN(xen_bus_to_phys(dma_addr));
>> + unsigned long off = vma->vm_pgoff;
>> + pgprot_t prot = vma->vm_page_prot;
>> +
>> + prot = dma_get_attr(DMA_ATTR_WRITE_COMBINE, attrs) ?
>> +    pgprot_writecombine(prot) :
>> +    pgprot_dmacoherent(prot);
>> +
>> + vma->vm_page_prot = prot;
>> +
>> + if (dma_mmap_from_coherent(dev, vma, cpu_addr, size, &ret))
>> + return ret;
>> +
>> + if (off < nr_pages && nr_vma_pages <= (nr_pages - off)) {
>> + ret = remap_pfn_range(vma, vma->vm_start,
>> + pfn + off,
>> + vma->vm_end - vma->vm_start,
>> + vma->vm_page_prot);
>> + }
>> +#endif  /* CONFIG_MMU */
>> +
>> + return ret;
>> +}
>> +EXPORT_SYMBOL_GPL(xen_swiotlb_dma_mmap);
>> +
>> +/*
>>   * Unmap a single streaming mode DMA translation.  The dma_addr and size 
>> must
>>   * match what was provided for in a previous xen_swiotlb_map_page call.  All
>>   * other usages are undefined.
>> diff --git a/include/xen/swiotlb-xen.h b/include/xen/swiotlb-xen.h
>> index 7b64465..930fa94 100644
>> --- a/include/xen/swiotlb-xen.h
>> +++ b/include/xen/swiotlb-xen.h
>> @@ -15,6 +15,11 @@ xen_swiotlb_free_coherent(struct device *hwdev, size_t 
>> size,
>>    void *vaddr, dma_addr_t dma_handle,
>>    struct dma_attrs *attrs);
>>
>> +extern int
>> +xen_swiotlb_dma_mmap(struct device *dev, struct vm_area_struct *vma,
>> +     void *cpu_addr, dma_addr_t dma_addr, size_t size,
>> +     struct dma_attrs *attrs);
>> +
>>  extern dma_addr_t xen_swiotlb_map_page(struct device *dev, struct page 
>> *page,
>>         unsigned long offset, size_t size,
>>         enum dma_data_direction dir,

Hi to all.
I've sent a patch in another thread (used git send).

Oleksandr Dmytryshyn | Product Engineering and Development
GlobalLogic
M +38.067.382.2525
www.globallogic.com

http://www.globallogic.com/email_disclaimer.txt

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.