2020-05-11 09:13:48

by Daniel Vetter

[permalink] [raw]
Subject: [PATCH 2/3] dma-fence: use default wait function for mock fences

No need to micro-optmize when we're waiting in a mocked object ...

Signed-off-by: Daniel Vetter <[email protected]>
Cc: Sumit Semwal <[email protected]>
Cc: [email protected]
Cc: [email protected]
---
drivers/dma-buf/st-dma-fence.c | 41 ----------------------------------
1 file changed, 41 deletions(-)

diff --git a/drivers/dma-buf/st-dma-fence.c b/drivers/dma-buf/st-dma-fence.c
index e593064341c8..8166d2984702 100644
--- a/drivers/dma-buf/st-dma-fence.c
+++ b/drivers/dma-buf/st-dma-fence.c
@@ -33,50 +33,9 @@ static void mock_fence_release(struct dma_fence *f)
kmem_cache_free(slab_fences, to_mock_fence(f));
}

-struct wait_cb {
- struct dma_fence_cb cb;
- struct task_struct *task;
-};
-
-static void mock_wakeup(struct dma_fence *f, struct dma_fence_cb *cb)
-{
- wake_up_process(container_of(cb, struct wait_cb, cb)->task);
-}
-
-static long mock_wait(struct dma_fence *f, bool intr, long timeout)
-{
- const int state = intr ? TASK_INTERRUPTIBLE : TASK_UNINTERRUPTIBLE;
- struct wait_cb cb = { .task = current };
-
- if (dma_fence_add_callback(f, &cb.cb, mock_wakeup))
- return timeout;
-
- while (timeout) {
- set_current_state(state);
-
- if (test_bit(DMA_FENCE_FLAG_SIGNALED_BIT, &f->flags))
- break;
-
- if (signal_pending_state(state, current))
- break;
-
- timeout = schedule_timeout(timeout);
- }
- __set_current_state(TASK_RUNNING);
-
- if (!dma_fence_remove_callback(f, &cb.cb))
- return timeout;
-
- if (signal_pending_state(state, current))
- return -ERESTARTSYS;
-
- return -ETIME;
-}
-
static const struct dma_fence_ops mock_ops = {
.get_driver_name = mock_name,
.get_timeline_name = mock_name,
- .wait = mock_wait,
.release = mock_fence_release,
};

--
2.26.2


2020-05-11 09:45:22

by Chris Wilson

[permalink] [raw]
Subject: Re: [PATCH 2/3] dma-fence: use default wait function for mock fences

Quoting Daniel Vetter (2020-05-11 10:11:41)
> No need to micro-optmize when we're waiting in a mocked object ...

It's setting up the expected return values for the test.
-Chris

2020-05-11 10:17:17

by Daniel Vetter

[permalink] [raw]
Subject: Re: [PATCH 2/3] dma-fence: use default wait function for mock fences

On Mon, May 11, 2020 at 10:41:03AM +0100, Chris Wilson wrote:
> Quoting Daniel Vetter (2020-05-11 10:11:41)
> > No need to micro-optmize when we're waiting in a mocked object ...
>
> It's setting up the expected return values for the test.

Drat, I suspect something like that but didn't spot it. Kinda wondering
whether we should maybe lift the -ETIME special case to the generic
version. But that's not really a safe thing to do there, drivers might
actually use it for funny stuff.

Anyway motivation is that I'm pondering some extensions of dma_fence_wait
and removing as many of the ->wait hooks as possible would have helped.
But there's some nastier stuff like the legacy nouvea and radeon ones.
-Daniel

2020-05-11 18:16:13

by Michael J. Ruhl

[permalink] [raw]
Subject: RE: [Intel-gfx] [PATCH 2/3] dma-fence: use default wait function for mock fences

>-----Original Message-----
>From: Intel-gfx <[email protected]> On Behalf Of
>Daniel Vetter
>Sent: Monday, May 11, 2020 5:12 AM
>To: LKML <[email protected]>
>Cc: Daniel Vetter <[email protected]>; Intel Graphics Development
><[email protected]>; DRI Development <dri-
>[email protected]>; [email protected]; Vetter, Daniel
><[email protected]>; Sumit Semwal <[email protected]>; linux-
>[email protected]
>Subject: [Intel-gfx] [PATCH 2/3] dma-fence: use default wait function for
>mock fences
>
>No need to micro-optmize when we're waiting in a mocked object ...

Makes sense to me.

Acked-by: Michael J. Ruhl <[email protected]>

M

>Signed-off-by: Daniel Vetter <[email protected]>
>Cc: Sumit Semwal <[email protected]>
>Cc: [email protected]
>Cc: [email protected]
>---
> drivers/dma-buf/st-dma-fence.c | 41 ----------------------------------
> 1 file changed, 41 deletions(-)
>
>diff --git a/drivers/dma-buf/st-dma-fence.c b/drivers/dma-buf/st-dma-
>fence.c
>index e593064341c8..8166d2984702 100644
>--- a/drivers/dma-buf/st-dma-fence.c
>+++ b/drivers/dma-buf/st-dma-fence.c
>@@ -33,50 +33,9 @@ static void mock_fence_release(struct dma_fence *f)
> kmem_cache_free(slab_fences, to_mock_fence(f));
> }
>
>-struct wait_cb {
>- struct dma_fence_cb cb;
>- struct task_struct *task;
>-};
>-
>-static void mock_wakeup(struct dma_fence *f, struct dma_fence_cb *cb)
>-{
>- wake_up_process(container_of(cb, struct wait_cb, cb)->task);
>-}
>-
>-static long mock_wait(struct dma_fence *f, bool intr, long timeout)
>-{
>- const int state = intr ? TASK_INTERRUPTIBLE :
>TASK_UNINTERRUPTIBLE;
>- struct wait_cb cb = { .task = current };
>-
>- if (dma_fence_add_callback(f, &cb.cb, mock_wakeup))
>- return timeout;
>-
>- while (timeout) {
>- set_current_state(state);
>-
>- if (test_bit(DMA_FENCE_FLAG_SIGNALED_BIT, &f->flags))
>- break;
>-
>- if (signal_pending_state(state, current))
>- break;
>-
>- timeout = schedule_timeout(timeout);
>- }
>- __set_current_state(TASK_RUNNING);
>-
>- if (!dma_fence_remove_callback(f, &cb.cb))
>- return timeout;
>-
>- if (signal_pending_state(state, current))
>- return -ERESTARTSYS;
>-
>- return -ETIME;
>-}
>-
> static const struct dma_fence_ops mock_ops = {
> .get_driver_name = mock_name,
> .get_timeline_name = mock_name,
>- .wait = mock_wait,
> .release = mock_fence_release,
> };
>
>--
>2.26.2
>
>_______________________________________________
>Intel-gfx mailing list
>[email protected]
>https://lists.freedesktop.org/mailman/listinfo/intel-gfx

2020-05-11 18:19:37

by Michael J. Ruhl

[permalink] [raw]
Subject: RE: [Intel-gfx] [PATCH 2/3] dma-fence: use default wait function for mock fences

>-----Original Message-----
>From: dri-devel <[email protected]> On Behalf Of
>Ruhl, Michael J
>Sent: Monday, May 11, 2020 2:13 PM
>To: Daniel Vetter <[email protected]>; LKML <linux-
>[email protected]>
>Cc: Intel Graphics Development <[email protected]>; DRI
>Development <[email protected]>; linaro-mm-
>[email protected]; Vetter, Daniel <[email protected]>; linux-
>[email protected]
>Subject: RE: [Intel-gfx] [PATCH 2/3] dma-fence: use default wait function for
>mock fences
>
>>-----Original Message-----
>>From: Intel-gfx <[email protected]> On Behalf Of
>>Daniel Vetter
>>Sent: Monday, May 11, 2020 5:12 AM
>>To: LKML <[email protected]>
>>Cc: Daniel Vetter <[email protected]>; Intel Graphics Development
>><[email protected]>; DRI Development <dri-
>>[email protected]>; [email protected]; Vetter, Daniel
>><[email protected]>; Sumit Semwal <[email protected]>;
>linux-
>>[email protected]
>>Subject: [Intel-gfx] [PATCH 2/3] dma-fence: use default wait function for
>>mock fences
>>
>>No need to micro-optmize when we're waiting in a mocked object ...
>
>Makes sense to me.

/sigh.

Reading Chris comment, I am no longer sure it make sense...

Un-ack?

m

>Acked-by: Michael J. Ruhl <[email protected]>
>
>M
>
>>Signed-off-by: Daniel Vetter <[email protected]>
>>Cc: Sumit Semwal <[email protected]>
>>Cc: [email protected]
>>Cc: [email protected]
>>---
>> drivers/dma-buf/st-dma-fence.c | 41 ----------------------------------
>> 1 file changed, 41 deletions(-)
>>
>>diff --git a/drivers/dma-buf/st-dma-fence.c b/drivers/dma-buf/st-dma-
>>fence.c
>>index e593064341c8..8166d2984702 100644
>>--- a/drivers/dma-buf/st-dma-fence.c
>>+++ b/drivers/dma-buf/st-dma-fence.c
>>@@ -33,50 +33,9 @@ static void mock_fence_release(struct dma_fence *f)
>> kmem_cache_free(slab_fences, to_mock_fence(f));
>> }
>>
>>-struct wait_cb {
>>- struct dma_fence_cb cb;
>>- struct task_struct *task;
>>-};
>>-
>>-static void mock_wakeup(struct dma_fence *f, struct dma_fence_cb *cb)
>>-{
>>- wake_up_process(container_of(cb, struct wait_cb, cb)->task);
>>-}
>>-
>>-static long mock_wait(struct dma_fence *f, bool intr, long timeout)
>>-{
>>- const int state = intr ? TASK_INTERRUPTIBLE :
>>TASK_UNINTERRUPTIBLE;
>>- struct wait_cb cb = { .task = current };
>>-
>>- if (dma_fence_add_callback(f, &cb.cb, mock_wakeup))
>>- return timeout;
>>-
>>- while (timeout) {
>>- set_current_state(state);
>>-
>>- if (test_bit(DMA_FENCE_FLAG_SIGNALED_BIT, &f->flags))
>>- break;
>>-
>>- if (signal_pending_state(state, current))
>>- break;
>>-
>>- timeout = schedule_timeout(timeout);
>>- }
>>- __set_current_state(TASK_RUNNING);
>>-
>>- if (!dma_fence_remove_callback(f, &cb.cb))
>>- return timeout;
>>-
>>- if (signal_pending_state(state, current))
>>- return -ERESTARTSYS;
>>-
>>- return -ETIME;
>>-}
>>-
>> static const struct dma_fence_ops mock_ops = {
>> .get_driver_name = mock_name,
>> .get_timeline_name = mock_name,
>>- .wait = mock_wait,
>> .release = mock_fence_release,
>> };
>>
>>--
>>2.26.2
>>
>>_______________________________________________
>>Intel-gfx mailing list
>>[email protected]
>>https://lists.freedesktop.org/mailman/listinfo/intel-gfx
>_______________________________________________
>dri-devel mailing list
>[email protected]
>https://lists.freedesktop.org/mailman/listinfo/dri-devel