Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit cadaf908 authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "msm: vidc: Use vmap instead of kmap" into msm-4.14

parents be9ba3c3 9e0f9b51
Loading
Loading
Loading
Loading
+11 −38
Original line number Diff line number Diff line
@@ -336,9 +336,6 @@ static int alloc_dma_mem(size_t size, u32 align, u32 flags,
	int rc = 0;
	int ion_flags = 0;
	struct dma_buf *dbuf = NULL;
	unsigned long page_count = 0;
	unsigned long mapped_pages = 0;
	void *kvaddr = NULL;

	if (!res) {
		dprintk(VIDC_ERR, "%s: NULL res\n", __func__);
@@ -405,6 +402,7 @@ static int alloc_dma_mem(size_t size, u32 align, u32 flags,
	mem->offset = 0;
	mem->size = size;
	mem->dma_buf = dbuf;
	mem->kvaddr = NULL;

	rc = msm_dma_get_device_address(dbuf, align, &iova,
			&buffer_size, flags, buffer_type,
@@ -422,22 +420,14 @@ static int alloc_dma_mem(size_t size, u32 align, u32 flags,
	}

	if (map_kernel) {
		mem->pages = size/PAGE_SIZE;
		dma_buf_begin_cpu_access(dbuf, DMA_BIDIRECTIONAL);
		for (page_count = 0; page_count < mem->pages; page_count++) {
			kvaddr = dma_buf_kmap(dbuf, page_count);
			if (IS_ERR_OR_NULL(kvaddr)) {
		mem->kvaddr = dma_buf_vmap(dbuf);
		if (!mem->kvaddr) {
			dprintk(VIDC_ERR,
				"Failed to map shared mem in kernel\n");
			rc = -EIO;
			goto fail_map;
		}
			if (!page_count)
				mem->kvaddr = kvaddr;
		}
	} else {
		mem->kvaddr = NULL;
		mem->pages = 0;
	}

	dprintk(VIDC_DBG,
@@ -446,20 +436,10 @@ static int alloc_dma_mem(size_t size, u32 align, u32 flags,
		mem->kvaddr, mem->buffer_type, mem->flags);
	return rc;

fail_device_address:
	mapped_pages = mem->pages;
fail_map:
	mapped_pages = page_count;
	if (mem->kvaddr) {
		kvaddr = mem->kvaddr;
		for (page_count = 0; page_count < mapped_pages; page_count++) {
			dma_buf_kunmap(mem->dma_buf, page_count, kvaddr);
			kvaddr += PAGE_SIZE;
		}
		mem->pages = 0;
		mem->kvaddr = NULL;
		dma_buf_end_cpu_access(mem->dma_buf, DMA_BIDIRECTIONAL);
	}
	if (map_kernel)
		dma_buf_end_cpu_access(dbuf, DMA_BIDIRECTIONAL);
fail_device_address:
	dma_buf_put(dbuf);
fail_shared_mem_alloc:
	return rc;
@@ -468,8 +448,6 @@ static int alloc_dma_mem(size_t size, u32 align, u32 flags,
static int free_dma_mem(struct msm_smem *mem)
{
	int rc = 0;
	void *kvaddr;
	unsigned long page_count = 0;

	dprintk(VIDC_DBG,
		"%s: dma_buf = %pK, device_addr = %x, size = %d, kvaddr = %pK, buffer_type = %#x\n",
@@ -483,12 +461,7 @@ static int free_dma_mem(struct msm_smem *mem)
	}

	if (mem->kvaddr) {
		kvaddr = mem->kvaddr;
		for (page_count = 0; page_count < mem->pages; page_count++) {
			dma_buf_kunmap(mem->dma_buf, page_count, kvaddr);
			kvaddr += PAGE_SIZE;
		}
		mem->pages = 0;
		dma_buf_vunmap(mem->dma_buf, mem->kvaddr);
		mem->kvaddr = NULL;
		dma_buf_end_cpu_access(mem->dma_buf, DMA_BIDIRECTIONAL);
	}
+0 −1
Original line number Diff line number Diff line
@@ -74,7 +74,6 @@ struct msm_smem {
	unsigned long flags;
	enum hal_buffer buffer_type;
	struct dma_mapping_info mapping_info;
	unsigned long pages; //in PAGE_SIZE units
};

enum smem_cache_ops {