diff --git a/drivers/gpu/msm/kgsl.c b/drivers/gpu/msm/kgsl.c index 2388ccd48b70..120fcdc5950a 100644 --- a/drivers/gpu/msm/kgsl.c +++ b/drivers/gpu/msm/kgsl.c @@ -3042,11 +3042,22 @@ void kgsl_get_egl_counts(struct kgsl_mem_entry *entry, } spin_unlock(&kgsl_dmabuf_lock); } + +unsigned long kgsl_get_dmabuf_inode_number(struct kgsl_mem_entry *entry) +{ + struct kgsl_dma_buf_meta *meta = entry->priv_data; + + return meta ? file_inode(meta->dmabuf->file)->i_ino : 0; +} #else void kgsl_get_egl_counts(struct kgsl_mem_entry *entry, int *egl_surface_count, int *egl_image_count) { } + +unsigned long kgsl_get_dmabuf_inode_number(struct kgsl_mem_entry *entry) +{ +} #endif long kgsl_ioctl_map_user_mem(struct kgsl_device_private *dev_priv, diff --git a/drivers/gpu/msm/kgsl.h b/drivers/gpu/msm/kgsl.h index fc2cb005722c..bb5ee365117d 100644 --- a/drivers/gpu/msm/kgsl.h +++ b/drivers/gpu/msm/kgsl.h @@ -453,6 +453,8 @@ void kgsl_mem_entry_destroy(struct kref *kref); void kgsl_get_egl_counts(struct kgsl_mem_entry *entry, int *egl_surface_count, int *egl_image_count); +unsigned long kgsl_get_dmabuf_inode_number(struct kgsl_mem_entry *entry); + struct kgsl_mem_entry * __must_check kgsl_sharedmem_find(struct kgsl_process_private *private, uint64_t gpuaddr); diff --git a/drivers/gpu/msm/kgsl_debugfs.c b/drivers/gpu/msm/kgsl_debugfs.c index 937cbb669485..8261d9ad2457 100644 --- a/drivers/gpu/msm/kgsl_debugfs.c +++ b/drivers/gpu/msm/kgsl_debugfs.c @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-only /* - * Copyright (c) 2002,2008-2020, The Linux Foundation. All rights reserved. + * Copyright (c) 2002,2008-2021, The Linux Foundation. All rights reserved. */ #include @@ -177,6 +177,7 @@ static int print_mem_entry(void *data, void *ptr) struct kgsl_memdesc *m = &entry->memdesc; unsigned int usermem_type = kgsl_memdesc_usermem_type(m); int egl_surface_count = 0, egl_image_count = 0; + unsigned long inode_number = 0; flags[0] = kgsl_memdesc_is_global(m) ? 'g' : '-'; flags[1] = '-'; @@ -192,11 +193,13 @@ static int print_mem_entry(void *data, void *ptr) kgsl_get_memory_usage(usage, sizeof(usage), m->flags); - if (usermem_type == KGSL_MEM_ENTRY_ION) + if (usermem_type == KGSL_MEM_ENTRY_ION) { kgsl_get_egl_counts(entry, &egl_surface_count, &egl_image_count); + inode_number = kgsl_get_dmabuf_inode_number(entry); + } - seq_printf(s, "%pK %pK %16llu %5d %9s %10s %16s %5d %16llu %6d %6d", + seq_printf(s, "%pK %pK %16llu %5d %9s %10s %16s %5d %16llu %6d %6d %10lu", (uint64_t *)(uintptr_t) m->gpuaddr, /* * Show zero for the useraddr - we can't reliably track @@ -205,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, - egl_surface_count, egl_image_count); + egl_surface_count, egl_image_count, inode_number); if (entry->metadata[0] != 0) seq_printf(s, " %s", entry->metadata); @@ -273,9 +276,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\n", + seq_printf(s, "%16s %16s %16s %5s %9s %10s %16s %5s %16s %6s %6s %10s\n", "gpuaddr", "useraddr", "size", "id", "flags", "type", - "usage", "sglen", "mapsize", "eglsrf", "eglimg"); + "usage", "sglen", "mapsize", "eglsrf", "eglimg", "inode"); return 0; } else return print_mem_entry(s, ptr);