msm: kgsl: Fixup kernel API changes

Life goes on, and so does the kernel. Update some API changes since
msm-4.19 including helper functions for vmfault functions, renaming
a memory statistic, updating cmd-db and removing __mutex_user which
is not longer available.

Change-Id: Ic0dedbad0b24042f3683a4be99888a0aa86baf78
Signed-off-by: Jordan Crouse <jcrouse@codeaurora.org>
This commit is contained in:
Jordan Crouse 2019-10-14 10:41:06 -06:00
commit 55dccd6234
6 changed files with 18 additions and 66 deletions

View file

@ -2858,8 +2858,8 @@ int adreno_dispatcher_idle(struct adreno_device *adreno_dev)
* Ensure that this function is not called when dispatcher
* mutex is held and device is started
*/
if (mutex_is_locked(&dispatcher->mutex) &&
(__mutex_owner(&dispatcher->mutex) == current))
if (WARN_ON(mutex_is_locked(&dispatcher->mutex)))
return -EDEADLK;
adreno_get_gpu_halt(adreno_dev);

View file

@ -4346,7 +4346,7 @@ static vm_fault_t
kgsl_gpumem_vm_fault(struct vm_fault *vmf)
{
struct kgsl_mem_entry *entry = vmf->vma->vm_private_data;
int ret;
vm_fault_t ret;
if (!entry)
return VM_FAULT_SIGBUS;
@ -4354,7 +4354,7 @@ kgsl_gpumem_vm_fault(struct vm_fault *vmf)
return VM_FAULT_SIGBUS;
ret = entry->memdesc.ops->vmfault(&entry->memdesc, vmf->vma, vmf);
if ((ret == 0) || (ret == VM_FAULT_NOPAGE))
if (!ret || ret == VM_FAULT_NOPAGE)
entry->priv->gpumem_mapped += PAGE_SIZE;
return ret;
@ -4776,7 +4776,7 @@ static int _register_device(struct kgsl_device *device)
}
device->dev->dma_mask = &dma_mask;
arch_setup_dma_ops(device->dev, 0, 0, NULL, false);
set_dma_ops(device->dev, NULL);
dev_set_drvdata(&device->pdev->dev, device);
return 0;

View file

@ -163,8 +163,8 @@ struct kgsl_memdesc;
struct kgsl_memdesc_ops {
unsigned int vmflags;
int (*vmfault)(struct kgsl_memdesc *memdesc, struct vm_area_struct *vma,
struct vm_fault *vmf);
vm_fault_t (*vmfault)(struct kgsl_memdesc *memdesc,
struct vm_area_struct *vma, struct vm_fault *vmf);
void (*free)(struct kgsl_memdesc *memdesc);
int (*map_kernel)(struct kgsl_memdesc *memdesc);
void (*unmap_kernel)(struct kgsl_memdesc *memdesc);

View file

@ -559,7 +559,7 @@ static int gmu_dcvs_set(struct kgsl_device *device,
struct rpmh_arc_vals {
unsigned int num;
uint16_t val[MAX_GX_LEVELS];
const u16 *val;
};
static const char gfx_res_id[] = "gfx.lvl";
@ -584,22 +584,9 @@ enum rpmh_vote_type {
static int rpmh_arc_cmds(struct gmu_device *gmu,
struct rpmh_arc_vals *arc, const char *res_id)
{
unsigned int len;
size_t len = 0;
memset(arc, 0, sizeof(*arc));
len = cmd_db_read_aux_data_len(res_id);
if (len == 0)
return -EINVAL;
if (len > (MAX_GX_LEVELS << 1)) {
dev_err(&gmu->pdev->dev,
"gfx cmddb size %d larger than alloc buf %d of %s\n",
len, (MAX_GX_LEVELS << 1), res_id);
return -EINVAL;
}
cmd_db_read_aux_data(res_id, (uint8_t *)arc->val, len);
arc->val = cmd_db_read_aux_data(res_id, &len);
/*
* cmd_db_read_aux_data() gives us a zero-padded table of

View file

@ -100,7 +100,7 @@ _kgsl_pool_add_page(struct kgsl_page_pool *pool, struct page *p)
list_add_tail(&p->lru, &pool->page_list);
pool->page_count++;
spin_unlock(&pool->list_lock);
mod_node_page_state(page_pgdat(p), NR_INDIRECTLY_RECLAIMABLE_BYTES,
mod_node_page_state(page_pgdat(p), NR_KERNEL_MISC_RECLAIMABLE,
(PAGE_SIZE << pool->pool_order));
}
@ -117,7 +117,7 @@ _kgsl_pool_get_page(struct kgsl_page_pool *pool)
list_del(&p->lru);
}
spin_unlock(&pool->list_lock);
mod_node_page_state(page_pgdat(p), NR_INDIRECTLY_RECLAIMABLE_BYTES,
mod_node_page_state(page_pgdat(p), NR_KERNEL_MISC_RECLAIMABLE,
-(PAGE_SIZE << pool->pool_order));
return p;
}
@ -256,20 +256,12 @@ void kgsl_pool_free_pages(struct page **pages, unsigned int pcount)
if (!pages)
return;
if (WARN(!kern_addr_valid((unsigned long)pages),
"Address of pages=%pK is not valid\n", pages))
return;
for (i = 0; i < pcount;) {
/*
* Free each page or compound page group individually.
*/
struct page *p = pages[i];
if (WARN(!kern_addr_valid((unsigned long)p),
"Address of page=%pK is not valid\n", p))
return;
i += 1 << compound_order(p);
kgsl_pool_free_page(p);
}

View file

@ -357,32 +357,15 @@ kgsl_sharedmem_init_sysfs(void)
return sysfs_create_files(&kgsl_driver.virtdev.kobj, drv_attr_list);
}
static int kgsl_paged_vmfault(struct kgsl_memdesc *memdesc,
static vm_fault_t kgsl_paged_vmfault(struct kgsl_memdesc *memdesc,
struct vm_area_struct *vma,
struct vm_fault *vmf)
{
int pgoff;
unsigned int offset;
offset = vmf->address - vma->vm_start;
pgoff = (vmf->address - vma->vm_start) >> PAGE_SHIFT;
if (offset >= memdesc->size)
return VM_FAULT_SIGBUS;
pgoff = offset >> PAGE_SHIFT;
if (pgoff < memdesc->page_count) {
struct page *page = memdesc->pages[pgoff];
get_page(page);
vmf->page = page;
memdesc->mapsize += PAGE_SIZE;
return 0;
}
return VM_FAULT_SIGBUS;
return vmf_insert_page(vma, vmf->address, memdesc->pages[pgoff]);
}
static void kgsl_paged_unmap_kernel(struct kgsl_memdesc *memdesc)
@ -495,27 +478,17 @@ static int kgsl_paged_map_kernel(struct kgsl_memdesc *memdesc)
return ret;
}
static int kgsl_contiguous_vmfault(struct kgsl_memdesc *memdesc,
static vm_fault_t kgsl_contiguous_vmfault(struct kgsl_memdesc *memdesc,
struct vm_area_struct *vma,
struct vm_fault *vmf)
{
unsigned long offset, pfn;
int ret;
offset = ((unsigned long) vmf->address - vma->vm_start) >>
PAGE_SHIFT;
pfn = (memdesc->physaddr >> PAGE_SHIFT) + offset;
ret = vm_insert_pfn(vma, (unsigned long) vmf->address, pfn);
if (ret == -ENOMEM || ret == -EAGAIN)
return VM_FAULT_OOM;
else if (ret == -EFAULT)
return VM_FAULT_SIGBUS;
memdesc->mapsize += PAGE_SIZE;
return VM_FAULT_NOPAGE;
return vmf_insert_pfn(vma, vmf->address, pfn);
}
#ifdef CONFIG_ARM64
@ -1054,7 +1027,7 @@ static struct kgsl_memdesc_ops kgsl_secure_pool_ops = {
static struct kgsl_memdesc_ops kgsl_pool_ops = {
.free = kgsl_free_pool_pages,
.vmflags = VM_DONTDUMP | VM_DONTEXPAND | VM_DONTCOPY,
.vmflags = VM_DONTDUMP | VM_DONTEXPAND | VM_DONTCOPY | VM_MIXEDMAP,
.vmfault = kgsl_paged_vmfault,
.map_kernel = kgsl_paged_map_kernel,
.unmap_kernel = kgsl_paged_unmap_kernel,