Loading drivers/gpu/msm/kgsl.c +5 −4 Original line number Diff line number Diff line Loading @@ -529,7 +529,8 @@ static void kgsl_mem_entry_detach_process(struct kgsl_mem_entry *entry) idr_remove(&entry->priv->mem_idr, entry->id); entry->id = 0; entry->priv->gpumem_mapped -= entry->memdesc.mapsize; atomic64_sub(atomic64_read(&entry->memdesc.mapsize), &entry->priv->gpumem_mapped); spin_unlock(&entry->priv->mem_lock); Loading Loading @@ -4388,7 +4389,7 @@ kgsl_gpumem_vm_fault(struct vm_fault *vmf) ret = entry->memdesc.ops->vmfault(&entry->memdesc, vmf->vma, vmf); if ((ret == 0) || (ret == VM_FAULT_NOPAGE)) entry->priv->gpumem_mapped += PAGE_SIZE; atomic64_add(PAGE_SIZE, &entry->priv->gpumem_mapped); return ret; } Loading Loading @@ -4768,8 +4769,8 @@ static int kgsl_mmap(struct file *file, struct vm_area_struct *vma) vm_insert_page(vma, addr, page); addr += PAGE_SIZE; } m->mapsize = m->size; entry->priv->gpumem_mapped += m->mapsize; atomic64_add(m->size, &m->mapsize); atomic64_add(m->size, &entry->priv->gpumem_mapped); } vma->vm_file = file; Loading drivers/gpu/msm/kgsl.h +1 −1 Original line number Diff line number Diff line Loading @@ -233,7 +233,7 @@ struct kgsl_memdesc { uint64_t gpuaddr; phys_addr_t physaddr; uint64_t size; uint64_t mapsize; atomic64_t mapsize; uint64_t pad_to; unsigned int priv; struct sg_table *sgt; Loading drivers/gpu/msm/kgsl_debugfs.c +3 −2 Original line number Diff line number Diff line /* Copyright (c) 2002,2008-2017, The Linux Foundation. All rights reserved. /* Copyright (c) 2002, 2008-2017, 2019 The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading Loading @@ -168,7 +168,8 @@ static int print_mem_entry(void *data, void *ptr) (unsigned long *) m->useraddr, m->size, entry->id, flags, memtype_str(usermem_type), usage, (m->sgt ? m->sgt->nents : 0), m->mapsize, usage, (m->sgt ? m->sgt->nents : 0), (u64)atomic64_read(&m->mapsize), egl_surface_count, egl_image_count); if (entry->metadata[0] != 0) Loading drivers/gpu/msm/kgsl_device.h +8 −7 Original line number Diff line number Diff line Loading @@ -474,10 +474,10 @@ struct kgsl_process_private { struct kobject kobj; struct dentry *debug_root; struct { uint64_t cur; uint64_t max; atomic64_t cur; atomic64_t max; } stats[KGSL_MEM_ENTRY_MAX]; uint64_t gpumem_mapped; atomic64_t gpumem_mapped; struct idr syncsource_idr; spinlock_t syncsource_lock; int fd_count; Loading Loading @@ -571,9 +571,10 @@ struct kgsl_device *kgsl_get_device(int dev_idx); static inline void kgsl_process_add_stats(struct kgsl_process_private *priv, unsigned int type, uint64_t size) { priv->stats[type].cur += size; if (priv->stats[type].max < priv->stats[type].cur) priv->stats[type].max = priv->stats[type].cur; u64 ret = atomic64_add_return(size, &priv->stats[type].cur); if (ret > atomic64_read(&priv->stats[type].max)) atomic64_set(&priv->stats[type].max, ret); add_mm_counter(current->mm, MM_UNRECLAIMABLE, (size >> PAGE_SHIFT)); } Loading @@ -584,7 +585,7 @@ static inline void kgsl_process_sub_stats(struct kgsl_process_private *priv, struct task_struct *task; struct mm_struct *mm; priv->stats[type].cur -= size; atomic64_sub(size, &priv->stats[type].cur); pid_struct = find_get_pid(priv->pid); if (pid_struct) { task = get_pid_task(pid_struct, PIDTYPE_PID); Loading drivers/gpu/msm/kgsl_sharedmem.c +12 −7 Original line number Diff line number Diff line Loading @@ -146,17 +146,20 @@ gpumem_mapped_show(struct kgsl_process_private *priv, int type, char *buf) { return scnprintf(buf, PAGE_SIZE, "%llu\n", priv->gpumem_mapped); (u64)atomic64_read(&priv->gpumem_mapped)); } static ssize_t gpumem_unmapped_show(struct kgsl_process_private *priv, int type, char *buf) { if (priv->gpumem_mapped > priv->stats[type].cur) u64 gpumem_total = atomic64_read(&priv->stats[type].cur); u64 gpumem_mapped = atomic64_read(&priv->gpumem_mapped); if (gpumem_mapped > gpumem_total) return -EIO; return scnprintf(buf, PAGE_SIZE, "%llu\n", priv->stats[type].cur - priv->gpumem_mapped); gpumem_total - gpumem_mapped); } static struct kgsl_mem_entry_attribute debug_memstats[] = { Loading @@ -173,7 +176,8 @@ static struct kgsl_mem_entry_attribute debug_memstats[] = { static ssize_t mem_entry_show(struct kgsl_process_private *priv, int type, char *buf) { return snprintf(buf, PAGE_SIZE, "%llu\n", priv->stats[type].cur); return scnprintf(buf, PAGE_SIZE, "%llu\n", (u64)atomic64_read(&priv->stats[type].cur)); } /** Loading @@ -184,7 +188,8 @@ mem_entry_show(struct kgsl_process_private *priv, int type, char *buf) static ssize_t mem_entry_max_show(struct kgsl_process_private *priv, int type, char *buf) { return snprintf(buf, PAGE_SIZE, "%llu\n", priv->stats[type].max); return scnprintf(buf, PAGE_SIZE, "%llu\n", (u64)atomic64_read(&priv->stats[type].max)); } static ssize_t mem_entry_sysfs_show(struct kobject *kobj, Loading Loading @@ -448,7 +453,7 @@ static int kgsl_page_alloc_vmfault(struct kgsl_memdesc *memdesc, get_page(page); vmf->page = page; memdesc->mapsize += PAGE_SIZE; atomic64_add(PAGE_SIZE, &memdesc->mapsize); return 0; } Loading Loading @@ -619,7 +624,7 @@ static int kgsl_contiguous_vmfault(struct kgsl_memdesc *memdesc, else if (ret == -EFAULT) return VM_FAULT_SIGBUS; memdesc->mapsize += PAGE_SIZE; atomic64_add(PAGE_SIZE, &memdesc->mapsize); return VM_FAULT_NOPAGE; } Loading Loading
drivers/gpu/msm/kgsl.c +5 −4 Original line number Diff line number Diff line Loading @@ -529,7 +529,8 @@ static void kgsl_mem_entry_detach_process(struct kgsl_mem_entry *entry) idr_remove(&entry->priv->mem_idr, entry->id); entry->id = 0; entry->priv->gpumem_mapped -= entry->memdesc.mapsize; atomic64_sub(atomic64_read(&entry->memdesc.mapsize), &entry->priv->gpumem_mapped); spin_unlock(&entry->priv->mem_lock); Loading Loading @@ -4388,7 +4389,7 @@ kgsl_gpumem_vm_fault(struct vm_fault *vmf) ret = entry->memdesc.ops->vmfault(&entry->memdesc, vmf->vma, vmf); if ((ret == 0) || (ret == VM_FAULT_NOPAGE)) entry->priv->gpumem_mapped += PAGE_SIZE; atomic64_add(PAGE_SIZE, &entry->priv->gpumem_mapped); return ret; } Loading Loading @@ -4768,8 +4769,8 @@ static int kgsl_mmap(struct file *file, struct vm_area_struct *vma) vm_insert_page(vma, addr, page); addr += PAGE_SIZE; } m->mapsize = m->size; entry->priv->gpumem_mapped += m->mapsize; atomic64_add(m->size, &m->mapsize); atomic64_add(m->size, &entry->priv->gpumem_mapped); } vma->vm_file = file; Loading
drivers/gpu/msm/kgsl.h +1 −1 Original line number Diff line number Diff line Loading @@ -233,7 +233,7 @@ struct kgsl_memdesc { uint64_t gpuaddr; phys_addr_t physaddr; uint64_t size; uint64_t mapsize; atomic64_t mapsize; uint64_t pad_to; unsigned int priv; struct sg_table *sgt; Loading
drivers/gpu/msm/kgsl_debugfs.c +3 −2 Original line number Diff line number Diff line /* Copyright (c) 2002,2008-2017, The Linux Foundation. All rights reserved. /* Copyright (c) 2002, 2008-2017, 2019 The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading Loading @@ -168,7 +168,8 @@ static int print_mem_entry(void *data, void *ptr) (unsigned long *) m->useraddr, m->size, entry->id, flags, memtype_str(usermem_type), usage, (m->sgt ? m->sgt->nents : 0), m->mapsize, usage, (m->sgt ? m->sgt->nents : 0), (u64)atomic64_read(&m->mapsize), egl_surface_count, egl_image_count); if (entry->metadata[0] != 0) Loading
drivers/gpu/msm/kgsl_device.h +8 −7 Original line number Diff line number Diff line Loading @@ -474,10 +474,10 @@ struct kgsl_process_private { struct kobject kobj; struct dentry *debug_root; struct { uint64_t cur; uint64_t max; atomic64_t cur; atomic64_t max; } stats[KGSL_MEM_ENTRY_MAX]; uint64_t gpumem_mapped; atomic64_t gpumem_mapped; struct idr syncsource_idr; spinlock_t syncsource_lock; int fd_count; Loading Loading @@ -571,9 +571,10 @@ struct kgsl_device *kgsl_get_device(int dev_idx); static inline void kgsl_process_add_stats(struct kgsl_process_private *priv, unsigned int type, uint64_t size) { priv->stats[type].cur += size; if (priv->stats[type].max < priv->stats[type].cur) priv->stats[type].max = priv->stats[type].cur; u64 ret = atomic64_add_return(size, &priv->stats[type].cur); if (ret > atomic64_read(&priv->stats[type].max)) atomic64_set(&priv->stats[type].max, ret); add_mm_counter(current->mm, MM_UNRECLAIMABLE, (size >> PAGE_SHIFT)); } Loading @@ -584,7 +585,7 @@ static inline void kgsl_process_sub_stats(struct kgsl_process_private *priv, struct task_struct *task; struct mm_struct *mm; priv->stats[type].cur -= size; atomic64_sub(size, &priv->stats[type].cur); pid_struct = find_get_pid(priv->pid); if (pid_struct) { task = get_pid_task(pid_struct, PIDTYPE_PID); Loading
drivers/gpu/msm/kgsl_sharedmem.c +12 −7 Original line number Diff line number Diff line Loading @@ -146,17 +146,20 @@ gpumem_mapped_show(struct kgsl_process_private *priv, int type, char *buf) { return scnprintf(buf, PAGE_SIZE, "%llu\n", priv->gpumem_mapped); (u64)atomic64_read(&priv->gpumem_mapped)); } static ssize_t gpumem_unmapped_show(struct kgsl_process_private *priv, int type, char *buf) { if (priv->gpumem_mapped > priv->stats[type].cur) u64 gpumem_total = atomic64_read(&priv->stats[type].cur); u64 gpumem_mapped = atomic64_read(&priv->gpumem_mapped); if (gpumem_mapped > gpumem_total) return -EIO; return scnprintf(buf, PAGE_SIZE, "%llu\n", priv->stats[type].cur - priv->gpumem_mapped); gpumem_total - gpumem_mapped); } static struct kgsl_mem_entry_attribute debug_memstats[] = { Loading @@ -173,7 +176,8 @@ static struct kgsl_mem_entry_attribute debug_memstats[] = { static ssize_t mem_entry_show(struct kgsl_process_private *priv, int type, char *buf) { return snprintf(buf, PAGE_SIZE, "%llu\n", priv->stats[type].cur); return scnprintf(buf, PAGE_SIZE, "%llu\n", (u64)atomic64_read(&priv->stats[type].cur)); } /** Loading @@ -184,7 +188,8 @@ mem_entry_show(struct kgsl_process_private *priv, int type, char *buf) static ssize_t mem_entry_max_show(struct kgsl_process_private *priv, int type, char *buf) { return snprintf(buf, PAGE_SIZE, "%llu\n", priv->stats[type].max); return scnprintf(buf, PAGE_SIZE, "%llu\n", (u64)atomic64_read(&priv->stats[type].max)); } static ssize_t mem_entry_sysfs_show(struct kobject *kobj, Loading Loading @@ -448,7 +453,7 @@ static int kgsl_page_alloc_vmfault(struct kgsl_memdesc *memdesc, get_page(page); vmf->page = page; memdesc->mapsize += PAGE_SIZE; atomic64_add(PAGE_SIZE, &memdesc->mapsize); return 0; } Loading Loading @@ -619,7 +624,7 @@ static int kgsl_contiguous_vmfault(struct kgsl_memdesc *memdesc, else if (ret == -EFAULT) return VM_FAULT_SIGBUS; memdesc->mapsize += PAGE_SIZE; atomic64_add(PAGE_SIZE, &memdesc->mapsize); return VM_FAULT_NOPAGE; } Loading