msm: kgsl: Print map count instead of map size

/sys/kernel/debug/kgsl/proc/<pid>/mem prints incorrect map size
in some cases. Currently, memdesc size is printed as map size.
Because of this, map size shows non-zero value even for unmapped
buffers. Since kgsl buffers can be mapped multiple times, update
the print to map count instead of map size.

Change-Id: I7970580bc3b1c9a30ca0d72d9caf89af1ce09740
Signed-off-by: Kamal Agrawal <kamaagra@codeaurora.org>
This commit is contained in:
Kamal Agrawal 2021-08-18 16:06:21 +05:30 committed by Gerrit - the friendly Code Review server
parent 52838777d3
commit 097e7abad2

View File

@ -178,6 +178,7 @@ static int print_mem_entry(void *data, void *ptr)
unsigned int usermem_type = kgsl_memdesc_usermem_type(m);
int egl_surface_count = 0, egl_image_count = 0;
unsigned long inode_number = 0;
u32 map_count = atomic_read(&entry->map_count);
flags[0] = kgsl_memdesc_is_global(m) ? 'g' : '-';
flags[1] = '-';
@ -186,7 +187,7 @@ static int print_mem_entry(void *data, void *ptr)
flags[4] = get_cacheflag(m);
flags[5] = kgsl_memdesc_use_cpu_map(m) ? 'p' : '-';
/* Show Y if at least one vma has this entry mapped (could be multiple) */
flags[6] = atomic_read(&entry->map_count) ? 'Y' : 'N';
flags[6] = map_count ? 'Y' : 'N';
flags[7] = kgsl_memdesc_is_secured(m) ? 's' : '-';
flags[8] = '-';
flags[9] = '\0';
@ -199,7 +200,7 @@ static int print_mem_entry(void *data, void *ptr)
inode_number = kgsl_get_dmabuf_inode_number(entry);
}
seq_printf(s, "%pK %pK %16llu %5d %9s %10s %16s %5d %16llu %6d %6d %10lu",
seq_printf(s, "%pK %pK %16llu %5d %10s %10s %16s %5d %10d %6d %6d %10lu",
(uint64_t *)(uintptr_t) m->gpuaddr,
/*
* Show zero for the useraddr - we can't reliably track
@ -207,7 +208,7 @@ static int print_mem_entry(void *data, void *ptr)
*/
0, m->size, entry->id, flags,
memtype_str(usermem_type),
usage, (m->sgt ? m->sgt->nents : 0), m->size,
usage, (m->sgt ? m->sgt->nents : 0), map_count,
egl_surface_count, egl_image_count, inode_number);
if (entry->metadata[0] != 0)
@ -276,9 +277,9 @@ static void *process_mem_seq_next(struct seq_file *s, void *ptr,
static int process_mem_seq_show(struct seq_file *s, void *ptr)
{
if (ptr == SEQ_START_TOKEN) {
seq_printf(s, "%16s %16s %16s %5s %9s %10s %16s %5s %16s %6s %6s %10s\n",
seq_printf(s, "%16s %16s %16s %5s %10s %10s %16s %5s %10s %6s %6s %10s\n",
"gpuaddr", "useraddr", "size", "id", "flags", "type",
"usage", "sglen", "mapsize", "eglsrf", "eglimg", "inode");
"usage", "sglen", "mapcnt", "eglsrf", "eglimg", "inode");
return 0;
} else
return print_mem_entry(s, ptr);