Message ID | 20210903184806.1680887-7-robdclark@gmail.com |
---|---|
State | Superseded |
Headers | show |
Series | dma-fence: Deadline awareness | expand |
Am 08.09.21 um 20:00 schrieb Daniel Vetter: > On Fri, Sep 03, 2021 at 11:47:57AM -0700, Rob Clark wrote: >> From: Rob Clark <robdclark@chromium.org> >> >> Signed-off-by: Rob Clark <robdclark@chromium.org> >> --- >> drivers/dma-buf/dma-fence-array.c | 11 +++++++++++ >> 1 file changed, 11 insertions(+) >> >> diff --git a/drivers/dma-buf/dma-fence-array.c b/drivers/dma-buf/dma-fence-array.c >> index d3fbd950be94..8d194b09ee3d 100644 >> --- a/drivers/dma-buf/dma-fence-array.c >> +++ b/drivers/dma-buf/dma-fence-array.c >> @@ -119,12 +119,23 @@ static void dma_fence_array_release(struct dma_fence *fence) >> dma_fence_free(fence); >> } >> >> +static void dma_fence_array_set_deadline(struct dma_fence *fence, >> + ktime_t deadline) >> +{ >> + struct dma_fence_array *array = to_dma_fence_array(fence); >> + unsigned i; >> + >> + for (i = 0; i < array->num_fences; ++i) >> + dma_fence_set_deadline(array->fences[i], deadline); > Hm I wonder whether this can go wrong, and whether we need Christian's > massive fence iterator that I've seen flying around. If you nest these > things too much it could all go wrong I think. I looked at other users > which inspect dma_fence_array and none of them have a risk for unbounded > recursion. That should work fine or at least doesn't add anything new which could go boom. The dma_fence_array() can't contain other dma_fence_array or dma_fence_chain objects or it could end up in a recursion and corrupt the kernel stack. That's a well known limitation for other code paths as well. So Reviewed-by: Christian König <christian.koenig@amd.com> for this one. Regards, Christian. > > Maybe check with Christian. > -Daniel > > >> +} >> + >> const struct dma_fence_ops dma_fence_array_ops = { >> .get_driver_name = dma_fence_array_get_driver_name, >> .get_timeline_name = dma_fence_array_get_timeline_name, >> .enable_signaling = dma_fence_array_enable_signaling, >> .signaled = dma_fence_array_signaled, >> .release = dma_fence_array_release, >> + .set_deadline = dma_fence_array_set_deadline, >> }; >> EXPORT_SYMBOL(dma_fence_array_ops); >> >> -- >> 2.31.1 >>
diff --git a/drivers/dma-buf/dma-fence-array.c b/drivers/dma-buf/dma-fence-array.c index d3fbd950be94..8d194b09ee3d 100644 --- a/drivers/dma-buf/dma-fence-array.c +++ b/drivers/dma-buf/dma-fence-array.c @@ -119,12 +119,23 @@ static void dma_fence_array_release(struct dma_fence *fence) dma_fence_free(fence); } +static void dma_fence_array_set_deadline(struct dma_fence *fence, + ktime_t deadline) +{ + struct dma_fence_array *array = to_dma_fence_array(fence); + unsigned i; + + for (i = 0; i < array->num_fences; ++i) + dma_fence_set_deadline(array->fences[i], deadline); +} + const struct dma_fence_ops dma_fence_array_ops = { .get_driver_name = dma_fence_array_get_driver_name, .get_timeline_name = dma_fence_array_get_timeline_name, .enable_signaling = dma_fence_array_enable_signaling, .signaled = dma_fence_array_signaled, .release = dma_fence_array_release, + .set_deadline = dma_fence_array_set_deadline, }; EXPORT_SYMBOL(dma_fence_array_ops);