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

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

Merge "msm: kgsl: Consolidate the contiguous memory allocation functions"

parents 01c88493 390bef8c
Loading
Loading
Loading
Loading
+0 −49
Original line number Original line Diff line number Diff line
@@ -455,13 +455,6 @@ static int kgsl_contiguous_vmfault(struct kgsl_memdesc *memdesc,
	return VM_FAULT_NOPAGE;
	return VM_FAULT_NOPAGE;
}
}


static void kgsl_coherent_free(struct kgsl_memdesc *memdesc)
{
	kgsl_driver.stats.coherent -= memdesc->size;
	dma_free_coherent(memdesc->dev, memdesc->size,
			  memdesc->hostptr, memdesc->physaddr);
}

static void kgsl_cma_coherent_free(struct kgsl_memdesc *memdesc)
static void kgsl_cma_coherent_free(struct kgsl_memdesc *memdesc)
{
{
	if (memdesc->hostptr) {
	if (memdesc->hostptr) {
@@ -487,10 +480,6 @@ static struct kgsl_memdesc_ops kgsl_cma_ops = {
	.vmfault = kgsl_contiguous_vmfault,
	.vmfault = kgsl_contiguous_vmfault,
};
};


static struct kgsl_memdesc_ops kgsl_coherent_ops = {
	.free = kgsl_coherent_free,
};

int kgsl_cache_range_op(struct kgsl_memdesc *memdesc, size_t offset,
int kgsl_cache_range_op(struct kgsl_memdesc *memdesc, size_t offset,
			size_t size, unsigned int op)
			size_t size, unsigned int op)
{
{
@@ -721,44 +710,6 @@ kgsl_sharedmem_page_alloc_user(struct kgsl_memdesc *memdesc,
}
}
EXPORT_SYMBOL(kgsl_sharedmem_page_alloc_user);
EXPORT_SYMBOL(kgsl_sharedmem_page_alloc_user);


int
kgsl_sharedmem_alloc_coherent(struct kgsl_device *device,
			struct kgsl_memdesc *memdesc, size_t size)
{
	int result = 0;

	size = ALIGN(size, PAGE_SIZE);
	if (size == 0)
		return -EINVAL;

	memdesc->size = size;
	memdesc->ops = &kgsl_coherent_ops;
	memdesc->dev = &device->pdev->dev;

	memdesc->hostptr = dma_alloc_coherent(memdesc->dev, size,
					&memdesc->physaddr, GFP_KERNEL);
	if (memdesc->hostptr == NULL) {
		result = -ENOMEM;
		goto err;
	}

	result = memdesc_sg_phys(memdesc, memdesc->physaddr, size);
	if (result)
		goto err;

	/* Record statistics */

	KGSL_STATS_ADD(size, kgsl_driver.stats.coherent,
		       kgsl_driver.stats.coherent_max);

err:
	if (result)
		kgsl_sharedmem_free(memdesc);

	return result;
}
EXPORT_SYMBOL(kgsl_sharedmem_alloc_coherent);

void kgsl_sharedmem_free(struct kgsl_memdesc *memdesc)
void kgsl_sharedmem_free(struct kgsl_memdesc *memdesc)
{
{
	if (memdesc == NULL || memdesc->size == 0)
	if (memdesc == NULL || memdesc->size == 0)
+5 −5
Original line number Original line Diff line number Diff line
@@ -33,9 +33,6 @@ int kgsl_sharedmem_page_alloc_user(struct kgsl_memdesc *memdesc,
				struct kgsl_pagetable *pagetable,
				struct kgsl_pagetable *pagetable,
				size_t size);
				size_t size);


int kgsl_sharedmem_alloc_coherent(struct kgsl_device *device,
			struct kgsl_memdesc *memdesc, size_t size);

int kgsl_cma_alloc_coherent(struct kgsl_device *device,
int kgsl_cma_alloc_coherent(struct kgsl_device *device,
			struct kgsl_memdesc *memdesc,
			struct kgsl_memdesc *memdesc,
			struct kgsl_pagetable *pagetable, size_t size);
			struct kgsl_pagetable *pagetable, size_t size);
@@ -233,11 +230,14 @@ static inline int
kgsl_allocate_contiguous(struct kgsl_device *device,
kgsl_allocate_contiguous(struct kgsl_device *device,
			struct kgsl_memdesc *memdesc, size_t size)
			struct kgsl_memdesc *memdesc, size_t size)
{
{
	int ret  = kgsl_sharedmem_alloc_coherent(device, memdesc, size);
	int ret;

	size = ALIGN(size, PAGE_SIZE);

	ret = kgsl_cma_alloc_coherent(device, memdesc, NULL, size);
	if (!ret && (kgsl_mmu_get_mmutype() == KGSL_MMU_TYPE_NONE))
	if (!ret && (kgsl_mmu_get_mmutype() == KGSL_MMU_TYPE_NONE))
		memdesc->gpuaddr = memdesc->physaddr;
		memdesc->gpuaddr = memdesc->physaddr;


	memdesc->flags |= (KGSL_MEMTYPE_KERNEL << KGSL_MEMTYPE_SHIFT);
	return ret;
	return ret;
}
}