reservation: add support for fences to enable cross-device synchronisation

Signed-off-by: Maarten Lankhorst <maarten.lankhorst@canonical.com>
Acked-by: Sumit Semwal <sumit.semwal@linaro.org>
Acked-by: Daniel Vetter <daniel@ffwll.ch>
Reviewed-by: Rob Clark <robdclark@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Maarten Lankhorst 2014-07-01 12:57:37 +02:00 committed by Greg Kroah-Hartman
parent 0f0d8406fb
commit 0ba6b8fb91

View file

@ -6,7 +6,7 @@
* Copyright (C) 2012 Texas Instruments
*
* Authors:
* Rob Clark <rob.clark@linaro.org>
* Rob Clark <robdclark@gmail.com>
* Maarten Lankhorst <maarten.lankhorst@canonical.com>
* Thomas Hellstrom <thellstrom-at-vmware-dot-com>
*
@ -40,22 +40,40 @@
#define _LINUX_RESERVATION_H
#include <linux/ww_mutex.h>
#include <linux/fence.h>
#include <linux/slab.h>
extern struct ww_class reservation_ww_class;
struct reservation_object {
struct ww_mutex lock;
struct fence *fence_excl;
struct fence **fence_shared;
u32 fence_shared_count, fence_shared_max;
};
static inline void
reservation_object_init(struct reservation_object *obj)
{
ww_mutex_init(&obj->lock, &reservation_ww_class);
obj->fence_shared_count = obj->fence_shared_max = 0;
obj->fence_shared = NULL;
obj->fence_excl = NULL;
}
static inline void
reservation_object_fini(struct reservation_object *obj)
{
int i;
if (obj->fence_excl)
fence_put(obj->fence_excl);
for (i = 0; i < obj->fence_shared_count; ++i)
fence_put(obj->fence_shared[i]);
kfree(obj->fence_shared);
ww_mutex_destroy(&obj->lock);
}