summaryrefslogtreecommitdiffstats
path: root/include/linux/reservation.h
diff options
context:
space:
mode:
authorMaarten Lankhorst <maarten.lankhorst@canonical.com>2014-07-01 12:57:37 +0200
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2014-07-08 13:36:14 -0700
commit0ba6b8fb91fc051535c7612f6241c8197d92323b (patch)
tree94d403c4d80ad8b1974ec075047d4838ab6c9f7c /include/linux/reservation.h
parent0f0d8406fb9c3c5ed1b1609a0f51c504c5b37aea (diff)
downloadlinux-0-day-0ba6b8fb91fc051535c7612f6241c8197d92323b.tar.gz
linux-0-day-0ba6b8fb91fc051535c7612f6241c8197d92323b.tar.xz
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>
Diffstat (limited to 'include/linux/reservation.h')
-rw-r--r--include/linux/reservation.h20
1 files changed, 19 insertions, 1 deletions
diff --git a/include/linux/reservation.h b/include/linux/reservation.h
index 813dae960ebdc..f3f57460a205f 100644
--- a/include/linux/reservation.h
+++ b/include/linux/reservation.h
@@ -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);
}