From f4052bc00c6f009b3d5a2f3952c49efa6809f628 Mon Sep 17 00:00:00 2001 From: Jianqun Xu Date: Thu, 14 Apr 2022 16:55:16 +0800 Subject: [PATCH] video: rockchip: mpp_service add dump session Add the dump session function to show iova stats. Tested on RK3588 Debian: [root@RK3588:/]# cat /proc/mpp_service/sessions-summary session iova range dump: 0: 0x00000000fff80000..0x00000000ffffffff ( 512 KiB) 1: 0x00000000f8000000..0x00000000fca09fff ( 75816 KiB) 2: 0x00000000f7c00000..0x00000000f7ffbfff ( 4080 KiB) 3: 0x00000000f7b00000..0x00000000f7bb2fff ( 716 KiB) 4: 0x00000000f7a80000..0x00000000f7ae0fff ( 388 KiB) 5: 0x00000000f7a00000..0x00000000f7a7ffff ( 512 KiB) 6: 0x00000000f0000000..0x00000000f4a09fff ( 75816 KiB) 7: 0x00000000efc00000..0x00000000efffbfff ( 4080 KiB) 8: 0x00000000e8000000..0x00000000eca09fff ( 75816 KiB) 9: 0x00000000e7c00000..0x00000000e7ffbfff ( 4080 KiB) 10: 0x00000000e0000000..0x00000000e4a09fff ( 75816 KiB) 11: 0x00000000dfc00000..0x00000000dfffbfff ( 4080 KiB) 12: 0x00000000d8000000..0x00000000dca09fff ( 75816 KiB) 13: 0x00000000d7c00000..0x00000000d7ffbfff ( 4080 KiB) 14: 0x00000000d0000000..0x00000000d4a09fff ( 75816 KiB) 15: 0x00000000c8000000..0x00000000cca09fff ( 75816 KiB) 16: 0x00000000c7f00000..0x00000000c7fb2fff ( 716 KiB) 17: 0x00000000c7e80000..0x00000000c7efffff ( 512 KiB) 18: 0x00000000c0000000..0x00000000c4a09fff ( 75816 KiB) 19: 0x00000000bfc00000..0x00000000bfffbfff ( 4080 KiB) 20: 0x00000000bfb00000..0x00000000bfbb2fff ( 716 KiB) 21: 0x00000000b8000000..0x00000000bca09fff ( 75816 KiB) 22: 0x00000000b0000000..0x00000000b4a09fff ( 75816 KiB) 23: 0x00000000a8000000..0x00000000aca09fff ( 75816 KiB) 24: 0x00000000a0000000..0x00000000a4a09fff ( 75816 KiB) session: pid=2296 index=1 device: fdc38100.rkvdec-core memory: 916 MiB Signed-off-by: Jianqun Xu Change-Id: I545a26e37e50ee94e1eeae51eebf35d70cedc49f --- drivers/video/rockchip/mpp/mpp_service.c | 51 ++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/drivers/video/rockchip/mpp/mpp_service.c b/drivers/video/rockchip/mpp/mpp_service.c index c9f858e3904b..8eb386427b8d 100644 --- a/drivers/video/rockchip/mpp/mpp_service.c +++ b/drivers/video/rockchip/mpp/mpp_service.c @@ -184,6 +184,55 @@ static int mpp_show_version(struct seq_file *seq, void *offset) return 0; } +static int mpp_dump_session(struct mpp_session *session, struct seq_file *s) +{ + struct mpp_dma_session *dma = session->dma; + struct mpp_dma_buffer *n; + struct mpp_dma_buffer *buffer; + phys_addr_t end; + unsigned long z = 0, t = 0; + int i = 0; +#define K(size) ((unsigned long)((size) >> 10)) + + if (!dma) + return 0; + + seq_puts(s, "session iova range dump:\n"); + + mutex_lock(&dma->list_mutex); + list_for_each_entry_safe(buffer, n, &dma->used_list, link) { + end = buffer->iova + buffer->size - 1; + z = (unsigned long)buffer->size; + t += z; + + seq_printf(s, "%4d: ", i++); + seq_printf(s, "%pa..%pa (%10lu %s)\n", &buffer->iova, &end, + (z >= 1024) ? (K(z)) : z, + (z >= 1024) ? "KiB" : "Bytes"); + } + i = 0; + list_for_each_entry_safe(buffer, n, &dma->unused_list, link) { + if (!buffer->dmabuf) + continue; + + end = buffer->iova + buffer->size - 1; + z = (unsigned long)buffer->size; + t += z; + + seq_printf(s, "%4d: ", i++); + seq_printf(s, "%pa..%pa (%10lu %s)\n", &buffer->iova, &end, + (z >= 1024) ? (K(z)) : z, + (z >= 1024) ? "KiB" : "Bytes"); + } + + mutex_unlock(&dma->list_mutex); + seq_printf(s, "session: pid=%d index=%d\n", session->pid, session->index); + seq_printf(s, " device: %s\n", dev_name(session->mpp->dev)); + seq_printf(s, " memory: %lu MiB\n", K(K(t))); + + return 0; +} + static int mpp_show_session_summary(struct seq_file *seq, void *offset) { struct mpp_session *session = NULL, *n; @@ -202,6 +251,8 @@ static int mpp_show_session_summary(struct seq_file *seq, void *offset) continue; mpp = session->mpp; + mpp_dump_session(session, seq); + if (mpp->dev_ops->dump_session) mpp->dev_ops->dump_session(session, seq); }