On Tuesday 09 August 2016 05:03 PM, Mark Brown wrote: > On Tue, Aug 09, 2016 at 04:33:11PM +0530, Vignesh R wrote: > >> +static int ti_qspi_map_buf(struct ti_qspi *qspi, void *buf, >> + unsigned int len, struct sg_table *sgt) >> +{ >> + unsigned int max_seg_size = >> + dma_get_max_seg_size(qspi->rx_chan->device->dev); >> + unsigned int desc_len = min_t(int, max_seg_size, PAGE_SIZE); >> + int sgs = DIV_ROUND_UP(len + offset_in_page(buf), desc_len); >> + struct page *vm_page; >> + size_t min; >> + int i, ret; >> + >> + ret = sg_alloc_table(sgt, sgs, GFP_KERNEL); >> + if (ret) >> + return ret; >> + >> + for (i = 0; i < sgs; i++) { >> + min = min_t(size_t, len, desc_len - >> + offset_in_page(buf)); >> + vm_page = kmap_to_page(buf); >> + if (!vm_page) { >> + sg_free_table(sgt); >> + return -ENOMEM; >> + } >> + sg_set_page(&sgt->sgl[i], vm_page, min, >> + offset_in_page(buf)); >> + buf += min; >> + len -= min; > > This looks a lot like the core code for mapping the buffers - why is > this open coded rather than reused? According to this thread[1], converting virtual address pointer into scatterlist which is then DMA mapped is unsafe on systems with certain cache architecture. Hence, I added code to handle kmap buffers inside the driver rather than updating generic spi-core code. If its okay to update the spi_map_buf() to handle kmap buffers as above then I can submit the patch accordingly. [1]https://patchwork.kernel.org/patch/8712161/ -- Regards Vignesh -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html