Message ID | 20230218211608.1630586-5-robdclark@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | dma-fence: Deadline awareness | expand |
Am 18.02.23 um 22:15 schrieb Rob Clark: > From: Rob Clark <robdclark@chromium.org> > > Add a way to set a deadline on remaining resv fences according to the > requested usage. > > Signed-off-by: Rob Clark <robdclark@chromium.org> > --- > drivers/dma-buf/dma-resv.c | 19 +++++++++++++++++++ > include/linux/dma-resv.h | 2 ++ > 2 files changed, 21 insertions(+) > > diff --git a/drivers/dma-buf/dma-resv.c b/drivers/dma-buf/dma-resv.c > index 1c76aed8e262..0c86f6d577ab 100644 > --- a/drivers/dma-buf/dma-resv.c > +++ b/drivers/dma-buf/dma-resv.c > @@ -684,6 +684,25 @@ long dma_resv_wait_timeout(struct dma_resv *obj, enum dma_resv_usage usage, > } > EXPORT_SYMBOL_GPL(dma_resv_wait_timeout); > > +/** > + * dma_resv_set_deadline - Set a deadline on reservation's objects fences > + * @obj: the reservation object > + * @usage: controls which fences to include, see enum dma_resv_usage. > + * @deadline: the requested deadline (MONOTONIC) Please add an additional description line, something like "Can be called without holding the dma_resv lock and sets @deadline on all fences filtered by @usage.". With that done the patch is Reviewed-by: Christian König <christian.koenig@amd.com> Regards, Christian. > + */ > +void dma_resv_set_deadline(struct dma_resv *obj, enum dma_resv_usage usage, > + ktime_t deadline) > +{ > + struct dma_resv_iter cursor; > + struct dma_fence *fence; > + > + dma_resv_iter_begin(&cursor, obj, usage); > + dma_resv_for_each_fence_unlocked(&cursor, fence) { > + dma_fence_set_deadline(fence, deadline); > + } > + dma_resv_iter_end(&cursor); > +} > +EXPORT_SYMBOL_GPL(dma_resv_set_deadline); > > /** > * dma_resv_test_signaled - Test if a reservation object's fences have been > diff --git a/include/linux/dma-resv.h b/include/linux/dma-resv.h > index 0637659a702c..8d0e34dad446 100644 > --- a/include/linux/dma-resv.h > +++ b/include/linux/dma-resv.h > @@ -479,6 +479,8 @@ int dma_resv_get_singleton(struct dma_resv *obj, enum dma_resv_usage usage, > int dma_resv_copy_fences(struct dma_resv *dst, struct dma_resv *src); > long dma_resv_wait_timeout(struct dma_resv *obj, enum dma_resv_usage usage, > bool intr, unsigned long timeout); > +void dma_resv_set_deadline(struct dma_resv *obj, enum dma_resv_usage usage, > + ktime_t deadline); > bool dma_resv_test_signaled(struct dma_resv *obj, enum dma_resv_usage usage); > void dma_resv_describe(struct dma_resv *obj, struct seq_file *seq); >
diff --git a/drivers/dma-buf/dma-resv.c b/drivers/dma-buf/dma-resv.c index 1c76aed8e262..0c86f6d577ab 100644 --- a/drivers/dma-buf/dma-resv.c +++ b/drivers/dma-buf/dma-resv.c @@ -684,6 +684,25 @@ long dma_resv_wait_timeout(struct dma_resv *obj, enum dma_resv_usage usage, } EXPORT_SYMBOL_GPL(dma_resv_wait_timeout); +/** + * dma_resv_set_deadline - Set a deadline on reservation's objects fences + * @obj: the reservation object + * @usage: controls which fences to include, see enum dma_resv_usage. + * @deadline: the requested deadline (MONOTONIC) + */ +void dma_resv_set_deadline(struct dma_resv *obj, enum dma_resv_usage usage, + ktime_t deadline) +{ + struct dma_resv_iter cursor; + struct dma_fence *fence; + + dma_resv_iter_begin(&cursor, obj, usage); + dma_resv_for_each_fence_unlocked(&cursor, fence) { + dma_fence_set_deadline(fence, deadline); + } + dma_resv_iter_end(&cursor); +} +EXPORT_SYMBOL_GPL(dma_resv_set_deadline); /** * dma_resv_test_signaled - Test if a reservation object's fences have been diff --git a/include/linux/dma-resv.h b/include/linux/dma-resv.h index 0637659a702c..8d0e34dad446 100644 --- a/include/linux/dma-resv.h +++ b/include/linux/dma-resv.h @@ -479,6 +479,8 @@ int dma_resv_get_singleton(struct dma_resv *obj, enum dma_resv_usage usage, int dma_resv_copy_fences(struct dma_resv *dst, struct dma_resv *src); long dma_resv_wait_timeout(struct dma_resv *obj, enum dma_resv_usage usage, bool intr, unsigned long timeout); +void dma_resv_set_deadline(struct dma_resv *obj, enum dma_resv_usage usage, + ktime_t deadline); bool dma_resv_test_signaled(struct dma_resv *obj, enum dma_resv_usage usage); void dma_resv_describe(struct dma_resv *obj, struct seq_file *seq);