Re: [PATCH 02/11] dma-buf/fence: add fence_array fences v6

From: Christian KÃnig
Date: Thu Jun 02 2016 - 03:20:28 EST

Am 02.06.2016 um 00:44 schrieb Daniel Vetter:
On Wed, Jun 01, 2016 at 09:54:04PM +0530, Sumit Semwal wrote:
Hi Christian, Gustavo,

Thanks for these patches.

On 1 June 2016 at 20:55, Gustavo Padovan <gustavo@xxxxxxxxxxx> wrote:
2016-06-01 Christian König <deathsimple@xxxxxxxxxxx>:

From: Gustavo Padovan <gustavo.padovan@xxxxxxxxxxxxxxx>

struct fence_collection inherits from struct fence and carries a
collection of fences that needs to be waited together.

It is useful to translate a sync_file to a fence to remove the complexity
of dealing with sync_files on DRM drivers. So even if there are many
fences in the sync_file that needs to waited for a commit to happen,
they all get added to the fence_collection and passed for DRM use as
a standard struct fence.

That means that no changes needed to any driver besides supporting fences.

fence_collection's fence doesn't belong to any timeline context, so
fence_is_later() and fence_later() are not meant to be called with
fence_collections fences.

v2: Comments by Daniel Vetter:
- merge fence_collection_init() and fence_collection_add()
- only add callbacks at ->enable_signalling()
- remove fence_collection_put()
- check for type on to_fence_collection()
- adjust fence_is_later() and fence_later() to WARN_ON() if they
are used with collection fences.

v3: - Initialize fence_cb.node at fence init.

Comments by Chris Wilson:
- return "unbound" on fence_collection_get_timeline_name()
- don't stop adding callbacks if one fails
- remove redundant !! on fence_collection_enable_signaling()
- remove redundant () on fence_collection_signaled
- use fence_default_wait() instead

v4 (chk): Rework, simplification and cleanup:
- Drop FENCE_NO_CONTEXT handling, always allocate a context.
- Rename to fence_array.
- Return fixed driver name.
- Register only one callback at a time.
- Document that create function takes ownership of array.

v5 (chk): More work and fixes:
- Avoid deadlocks by adding all callbacks at once again.
- Stop trying to remove the callbacks.
- Provide context and sequence number for the array fence.

v6 (chk): Fixes found during testing
- Fix stupid typo in _enable_signaling().

Signed-off-by: Gustavo Padovan <gustavo.padovan@xxxxxxxxxxxxxxx>
Signed-off-by: Christian König <christian.koenig@xxxxxxx>
drivers/dma-buf/Makefile | 2 +-
drivers/dma-buf/fence-array.c | 127 ++++++++++++++++++++++++++++++++++++++++++
include/linux/fence-array.h | 72 ++++++++++++++++++++++++
3 files changed, 200 insertions(+), 1 deletion(-)
create mode 100644 drivers/dma-buf/fence-array.c
create mode 100644 include/linux/fence-array.h
This is working fine to me. Once the commit message is fixed:

Reviewed-by: Gustavo Padovan <gustavo.padovan@xxxxxxxxxxxxxxx>

You need to Cc Sumit here to decide who is picking these patches.
It would be better to get them through the drm trees so we would need
his Ack at least.

+1 on the commit message consistency change; post that, please feel
free to add my
Acked-by: Sumit Semwal <sumit.semwal@xxxxxxxxxx>

for the 3 dma-buf/fences patches and request to take them via DRM tree
as rightly suggested by Gustavo.
Commit message improved and all 3 queued up for drm-misc. I haven't pushed
out the new branch yet though, since I'm waiting for Dave to open drm-next
and pull in a few other bits first so that I can rebase.

Thanks and sorry for missing the commit message. I was a bit to concentrated on fixing the code.

Leave me a note when the branch is public available, cause I then want to rebase the amdgpu changes on top and send a pull request to Alex.


Thanks, Daniel