Message ID | 20210924071759.22659-1-christian.koenig@amd.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | [1/4] dma-buf: add dma_fence_describe and dma_resv_describe | expand |
On Fri, Sep 24, 2021 at 12:18 AM Christian König <ckoenig.leichtzumerken@gmail.com> wrote: > > Add functions to dump dma_fence and dma_resv objects into a seq_file and > use them for printing the debugfs informations. > > Signed-off-by: Christian König <christian.koenig@amd.com> for the series, Reviewed-by: Rob Clark <robdclark@gmail.com> > --- > drivers/dma-buf/dma-buf.c | 11 +---------- > drivers/dma-buf/dma-fence.c | 16 ++++++++++++++++ > drivers/dma-buf/dma-resv.c | 23 +++++++++++++++++++++++ > include/linux/dma-fence.h | 1 + > include/linux/dma-resv.h | 1 + > 5 files changed, 42 insertions(+), 10 deletions(-) > > diff --git a/drivers/dma-buf/dma-buf.c b/drivers/dma-buf/dma-buf.c > index d35c71743ccb..4975c9289b02 100644 > --- a/drivers/dma-buf/dma-buf.c > +++ b/drivers/dma-buf/dma-buf.c > @@ -1368,8 +1368,6 @@ static int dma_buf_debug_show(struct seq_file *s, void *unused) > { > struct dma_buf *buf_obj; > struct dma_buf_attachment *attach_obj; > - struct dma_resv_iter cursor; > - struct dma_fence *fence; > int count = 0, attach_count; > size_t size = 0; > int ret; > @@ -1397,14 +1395,7 @@ static int dma_buf_debug_show(struct seq_file *s, void *unused) > file_inode(buf_obj->file)->i_ino, > buf_obj->name ?: ""); > > - dma_resv_for_each_fence(&cursor, buf_obj->resv, true, fence) { > - seq_printf(s, "\t%s fence: %s %s %ssignalled\n", > - dma_resv_iter_is_exclusive(&cursor) ? > - "Exclusive" : "Shared", > - fence->ops->get_driver_name(fence), > - fence->ops->get_timeline_name(fence), > - dma_fence_is_signaled(fence) ? "" : "un"); > - } > + dma_resv_describe(buf_obj->resv, s); > > seq_puts(s, "\tAttached Devices:\n"); > attach_count = 0; > diff --git a/drivers/dma-buf/dma-fence.c b/drivers/dma-buf/dma-fence.c > index 1e82ecd443fa..5175adf58644 100644 > --- a/drivers/dma-buf/dma-fence.c > +++ b/drivers/dma-buf/dma-fence.c > @@ -907,6 +907,22 @@ dma_fence_wait_any_timeout(struct dma_fence **fences, uint32_t count, > } > EXPORT_SYMBOL(dma_fence_wait_any_timeout); > > +/** > + * dma_fence_describe - Dump fence describtion into seq_file > + * @fence: the 6fence to describe > + * @seq: the seq_file to put the textual description into > + * > + * Dump a textual description of the fence and it's state into the seq_file. > + */ > +void dma_fence_describe(struct dma_fence *fence, struct seq_file *seq) > +{ > + seq_printf(seq, "%s %s seq %llu %ssignalled\n", > + fence->ops->get_driver_name(fence), > + fence->ops->get_timeline_name(fence), fence->seqno, > + dma_fence_is_signaled(fence) ? "" : "un"); > +} > +EXPORT_SYMBOL(dma_fence_describe); > + > /** > * dma_fence_init - Initialize a custom fence. > * @fence: the fence to initialize > diff --git a/drivers/dma-buf/dma-resv.c b/drivers/dma-buf/dma-resv.c > index 266ec9e3caef..6bb25d53e702 100644 > --- a/drivers/dma-buf/dma-resv.c > +++ b/drivers/dma-buf/dma-resv.c > @@ -38,6 +38,7 @@ > #include <linux/mm.h> > #include <linux/sched/mm.h> > #include <linux/mmu_notifier.h> > +#include <linux/seq_file.h> > > /** > * DOC: Reservation Object Overview > @@ -654,6 +655,28 @@ bool dma_resv_test_signaled(struct dma_resv *obj, bool test_all) > } > EXPORT_SYMBOL_GPL(dma_resv_test_signaled); > > +/** > + * dma_resv_describe - Dump description of the resv object into seq_file > + * @obj: the reservation object > + * @seq: the seq_file to dump the description into > + * > + * Dump a textual description of the fences inside an dma_resv object into the > + * seq_file. > + */ > +void dma_resv_describe(struct dma_resv *obj, struct seq_file *seq) > +{ > + struct dma_resv_iter cursor; > + struct dma_fence *fence; > + > + dma_resv_for_each_fence(&cursor, obj, true, fence) { > + seq_printf(seq, "\t%s fence:", > + dma_resv_iter_is_exclusive(&cursor) ? > + "Exclusive" : "Shared"); > + dma_fence_describe(fence, seq); > + } > +} > +EXPORT_SYMBOL_GPL(dma_resv_describe); > + > #if IS_ENABLED(CONFIG_LOCKDEP) > static int __init dma_resv_lockdep(void) > { > diff --git a/include/linux/dma-fence.h b/include/linux/dma-fence.h > index a706b7bf51d7..1ea691753bd3 100644 > --- a/include/linux/dma-fence.h > +++ b/include/linux/dma-fence.h > @@ -264,6 +264,7 @@ void dma_fence_init(struct dma_fence *fence, const struct dma_fence_ops *ops, > > void dma_fence_release(struct kref *kref); > void dma_fence_free(struct dma_fence *fence); > +void dma_fence_describe(struct dma_fence *fence, struct seq_file *seq); > > /** > * dma_fence_put - decreases refcount of the fence > diff --git a/include/linux/dma-resv.h b/include/linux/dma-resv.h > index d4b4cd43f0f1..49c0152073fd 100644 > --- a/include/linux/dma-resv.h > +++ b/include/linux/dma-resv.h > @@ -486,5 +486,6 @@ int dma_resv_copy_fences(struct dma_resv *dst, struct dma_resv *src); > long dma_resv_wait_timeout(struct dma_resv *obj, bool wait_all, bool intr, > unsigned long timeout); > bool dma_resv_test_signaled(struct dma_resv *obj, bool test_all); > +void dma_resv_describe(struct dma_resv *obj, struct seq_file *seq); > > #endif /* _LINUX_RESERVATION_H */ > -- > 2.25.1 >
diff --git a/drivers/dma-buf/dma-buf.c b/drivers/dma-buf/dma-buf.c index d35c71743ccb..4975c9289b02 100644 --- a/drivers/dma-buf/dma-buf.c +++ b/drivers/dma-buf/dma-buf.c @@ -1368,8 +1368,6 @@ static int dma_buf_debug_show(struct seq_file *s, void *unused) { struct dma_buf *buf_obj; struct dma_buf_attachment *attach_obj; - struct dma_resv_iter cursor; - struct dma_fence *fence; int count = 0, attach_count; size_t size = 0; int ret; @@ -1397,14 +1395,7 @@ static int dma_buf_debug_show(struct seq_file *s, void *unused) file_inode(buf_obj->file)->i_ino, buf_obj->name ?: ""); - dma_resv_for_each_fence(&cursor, buf_obj->resv, true, fence) { - seq_printf(s, "\t%s fence: %s %s %ssignalled\n", - dma_resv_iter_is_exclusive(&cursor) ? - "Exclusive" : "Shared", - fence->ops->get_driver_name(fence), - fence->ops->get_timeline_name(fence), - dma_fence_is_signaled(fence) ? "" : "un"); - } + dma_resv_describe(buf_obj->resv, s); seq_puts(s, "\tAttached Devices:\n"); attach_count = 0; diff --git a/drivers/dma-buf/dma-fence.c b/drivers/dma-buf/dma-fence.c index 1e82ecd443fa..5175adf58644 100644 --- a/drivers/dma-buf/dma-fence.c +++ b/drivers/dma-buf/dma-fence.c @@ -907,6 +907,22 @@ dma_fence_wait_any_timeout(struct dma_fence **fences, uint32_t count, } EXPORT_SYMBOL(dma_fence_wait_any_timeout); +/** + * dma_fence_describe - Dump fence describtion into seq_file + * @fence: the 6fence to describe + * @seq: the seq_file to put the textual description into + * + * Dump a textual description of the fence and it's state into the seq_file. + */ +void dma_fence_describe(struct dma_fence *fence, struct seq_file *seq) +{ + seq_printf(seq, "%s %s seq %llu %ssignalled\n", + fence->ops->get_driver_name(fence), + fence->ops->get_timeline_name(fence), fence->seqno, + dma_fence_is_signaled(fence) ? "" : "un"); +} +EXPORT_SYMBOL(dma_fence_describe); + /** * dma_fence_init - Initialize a custom fence. * @fence: the fence to initialize diff --git a/drivers/dma-buf/dma-resv.c b/drivers/dma-buf/dma-resv.c index 266ec9e3caef..6bb25d53e702 100644 --- a/drivers/dma-buf/dma-resv.c +++ b/drivers/dma-buf/dma-resv.c @@ -38,6 +38,7 @@ #include <linux/mm.h> #include <linux/sched/mm.h> #include <linux/mmu_notifier.h> +#include <linux/seq_file.h> /** * DOC: Reservation Object Overview @@ -654,6 +655,28 @@ bool dma_resv_test_signaled(struct dma_resv *obj, bool test_all) } EXPORT_SYMBOL_GPL(dma_resv_test_signaled); +/** + * dma_resv_describe - Dump description of the resv object into seq_file + * @obj: the reservation object + * @seq: the seq_file to dump the description into + * + * Dump a textual description of the fences inside an dma_resv object into the + * seq_file. + */ +void dma_resv_describe(struct dma_resv *obj, struct seq_file *seq) +{ + struct dma_resv_iter cursor; + struct dma_fence *fence; + + dma_resv_for_each_fence(&cursor, obj, true, fence) { + seq_printf(seq, "\t%s fence:", + dma_resv_iter_is_exclusive(&cursor) ? + "Exclusive" : "Shared"); + dma_fence_describe(fence, seq); + } +} +EXPORT_SYMBOL_GPL(dma_resv_describe); + #if IS_ENABLED(CONFIG_LOCKDEP) static int __init dma_resv_lockdep(void) { diff --git a/include/linux/dma-fence.h b/include/linux/dma-fence.h index a706b7bf51d7..1ea691753bd3 100644 --- a/include/linux/dma-fence.h +++ b/include/linux/dma-fence.h @@ -264,6 +264,7 @@ void dma_fence_init(struct dma_fence *fence, const struct dma_fence_ops *ops, void dma_fence_release(struct kref *kref); void dma_fence_free(struct dma_fence *fence); +void dma_fence_describe(struct dma_fence *fence, struct seq_file *seq); /** * dma_fence_put - decreases refcount of the fence diff --git a/include/linux/dma-resv.h b/include/linux/dma-resv.h index d4b4cd43f0f1..49c0152073fd 100644 --- a/include/linux/dma-resv.h +++ b/include/linux/dma-resv.h @@ -486,5 +486,6 @@ int dma_resv_copy_fences(struct dma_resv *dst, struct dma_resv *src); long dma_resv_wait_timeout(struct dma_resv *obj, bool wait_all, bool intr, unsigned long timeout); bool dma_resv_test_signaled(struct dma_resv *obj, bool test_all); +void dma_resv_describe(struct dma_resv *obj, struct seq_file *seq); #endif /* _LINUX_RESERVATION_H */
Add functions to dump dma_fence and dma_resv objects into a seq_file and use them for printing the debugfs informations. Signed-off-by: Christian König <christian.koenig@amd.com> --- drivers/dma-buf/dma-buf.c | 11 +---------- drivers/dma-buf/dma-fence.c | 16 ++++++++++++++++ drivers/dma-buf/dma-resv.c | 23 +++++++++++++++++++++++ include/linux/dma-fence.h | 1 + include/linux/dma-resv.h | 1 + 5 files changed, 42 insertions(+), 10 deletions(-)