[RFC 29/29] dma-buf/fence: de-stage sync framework

Gustavo Padovan gustavo at padovan.org
Fri Jan 15 06:55:39 PST 2016


From: Gustavo Padovan <gustavo.padovan at collabora.co.uk>

The sync framework is ready for mainline inclusion. Here we move it to
drivers/dma-buf and the header files to the appropiated places.

The sync framework contained some abstractions around struct fence and those
were removed in the de-staging process among other changes:

Userspace visible changes
-------------------------

 * The sw_sync file was moved from /dev/sw_sync to <debugfs>/sync/sw_sync. No
  other change.

Kernel API changes
------------------

 * struct sync_timeline is now struct fence_timeline
 * sync_timeline_ops is now fence_timeline_ops and they now carry struct
 fence as parameter instead of struct sync_pt
 * a .cleanup() fence op was added to allow sync_fence to run a cleanup when
 the fence_timeline is destroyed
 * added fence_add_used_data() to pass a private point to struct fence.
 This pointer is sent back on the .cleanup op.
 * The sync timeline function were moved to be fence_timeline functions:
         - sync_timeline_create()       -> fence_timeline_create()
         - sync_timeline_get()          -> fence_timeline_get()
         - sync_timeline_put()          -> fence_timeline_put()
         - sync_timeline_destroy()      -> fence_timeline_destroy()
         - sync_timeline_signal()       -> fence_timeline_signal()

  * sync_pt_create() was replaced be fence_create_on_timeline()

Internal changes
----------------

 * fence_timeline_ops was removed in favor of direct use fence_ops
 * fence default functions were created for fence_ops
 * removed structs sync_pt, sw_sync_timeline and sw_sync_pt

Signed-off-by: Gustavo Padovan <gustavo.padovan at collabora.co.uk>
---
 drivers/Kconfig                                    |  2 ++
 drivers/dma-buf/Kconfig                            | 22 ++++++++++++++++++++++
 drivers/dma-buf/Makefile                           |  2 ++
 drivers/{staging/android => dma-buf}/sw_sync.c     |  3 +--
 drivers/{staging/android => dma-buf}/sync.c        |  7 ++++---
 drivers/{staging/android => dma-buf}/sync_debug.c  |  2 +-
 drivers/staging/android/Kconfig                    | 19 -------------------
 drivers/staging/android/Makefile                   |  2 --
 .../staging/android => include/linux}/sw_sync.h    |  4 ++--
 {drivers/staging/android => include/linux}/sync.h  |  4 ++--
 .../android/trace => include/trace/events}/sync.h  |  5 ++---
 .../android/uapi => include/uapi/linux}/sw_sync.h  |  0
 .../android/uapi => include/uapi/linux}/sync.h     |  0
 13 files changed, 38 insertions(+), 34 deletions(-)
 create mode 100644 drivers/dma-buf/Kconfig
 rename drivers/{staging/android => dma-buf}/sw_sync.c (98%)
 rename drivers/{staging/android => dma-buf}/sync.c (99%)
 rename drivers/{staging/android => dma-buf}/sync_debug.c (99%)
 rename {drivers/staging/android => include/linux}/sw_sync.h (95%)
 rename {drivers/staging/android => include/linux}/sync.h (99%)
 rename {drivers/staging/android/trace => include/trace/events}/sync.h (92%)
 rename {drivers/staging/android/uapi => include/uapi/linux}/sw_sync.h (100%)
 rename {drivers/staging/android/uapi => include/uapi/linux}/sync.h (100%)

diff --git a/drivers/Kconfig b/drivers/Kconfig
index d2ac339..430f761 100644
--- a/drivers/Kconfig
+++ b/drivers/Kconfig
@@ -114,6 +114,8 @@ source "drivers/rtc/Kconfig"
 
 source "drivers/dma/Kconfig"
 
+source "drivers/dma-buf/Kconfig"
+
 source "drivers/dca/Kconfig"
 
 source "drivers/auxdisplay/Kconfig"
diff --git a/drivers/dma-buf/Kconfig b/drivers/dma-buf/Kconfig
new file mode 100644
index 0000000..4168f89
--- /dev/null
+++ b/drivers/dma-buf/Kconfig
@@ -0,0 +1,22 @@
+menu "DMABUF options"
+
+config SYNC
+	bool "Synchronization framework"
+	default n
+	select ANON_INODES
+	select DMA_SHARED_BUFFER
+	---help---
+	  This option enables the framework for synchronization between multiple
+	  drivers.  Sync implementations can take advantage of hardware
+	  synchronization built into devices like GPUs.
+
+config SW_SYNC
+	bool "Software synchronization objects"
+	default n
+	depends on SYNC
+	---help---
+	  A sync object driver that uses a 32bit counter to coordinate
+	  synchronization.  Useful when there is no hardware primitive backing
+	  the synchronization.
+
+endmenu
diff --git a/drivers/dma-buf/Makefile b/drivers/dma-buf/Makefile
index fb03696..b870923 100644
--- a/drivers/dma-buf/Makefile
+++ b/drivers/dma-buf/Makefile
@@ -1 +1,3 @@
 obj-y := dma-buf.o fence.o fence_debug.o reservation.o seqno-fence.o
+obj-$(CONFIG_SYNC)			+= sync.o sync_debug.o
+obj-$(CONFIG_SW_SYNC)			+= sw_sync.o
diff --git a/drivers/staging/android/sw_sync.c b/drivers/dma-buf/sw_sync.c
similarity index 98%
rename from drivers/staging/android/sw_sync.c
rename to drivers/dma-buf/sw_sync.c
index 8c83bad..32d0800 100644
--- a/drivers/staging/android/sw_sync.c
+++ b/drivers/dma-buf/sw_sync.c
@@ -22,8 +22,7 @@
 #include <linux/miscdevice.h>
 #include <linux/syscalls.h>
 #include <linux/uaccess.h>
-
-#include "sw_sync.h"
+#include <linux/sw_sync.h>
 
 static void sw_sync_cleanup(struct fence *fence, void *user_data)
 {
diff --git a/drivers/staging/android/sync.c b/drivers/dma-buf/sync.c
similarity index 99%
rename from drivers/staging/android/sync.c
rename to drivers/dma-buf/sync.c
index aafecf4..248aa44 100644
--- a/drivers/staging/android/sync.c
+++ b/drivers/dma-buf/sync.c
@@ -26,10 +26,10 @@
 #include <linux/uaccess.h>
 #include <linux/anon_inodes.h>
 
-#include "sync.h"
+#include <linux/sync.h>
 
 #define CREATE_TRACE_POINTS
-#include "trace/sync.h"
+#include <trace/events/sync.h>
 
 static const struct file_operations sync_fence_fops;
 
@@ -280,7 +280,7 @@ int sync_fence_wait(struct sync_fence *sync_fence, long timeout)
 
 	trace_sync_wait(sync_fence, 1);
 	for (i = 0; i < sync_fence->num_fences; ++i)
-		trace_fence(sync_fence->cbs[i].fence);
+		trace_sync_fence(sync_fence->cbs[i].fence);
 	ret = wait_event_interruptible_timeout(sync_fence->wq,
 					       atomic_read(&sync_fence->status) <= 0,
 					       timeout);
@@ -395,6 +395,7 @@ static long sync_fence_ioctl_merge(struct sync_fence *sync_fence,
 
 	sync_fence_install(fence3, fd);
 	sync_fence_put(fence2);
+
 	return 0;
 
 err_put_fence3:
diff --git a/drivers/staging/android/sync_debug.c b/drivers/dma-buf/sync_debug.c
similarity index 99%
rename from drivers/staging/android/sync_debug.c
rename to drivers/dma-buf/sync_debug.c
index 8e2ca57..294786b 100644
--- a/drivers/staging/android/sync_debug.c
+++ b/drivers/dma-buf/sync_debug.c
@@ -27,7 +27,7 @@
 #include <linux/uaccess.h>
 #include <linux/anon_inodes.h>
 #include <linux/time64.h>
-#include "sw_sync.h"
+#include <linux/sw_sync.h>
 
 #ifdef CONFIG_DEBUG_FS
 
diff --git a/drivers/staging/android/Kconfig b/drivers/staging/android/Kconfig
index bd90d20..4b18fee 100644
--- a/drivers/staging/android/Kconfig
+++ b/drivers/staging/android/Kconfig
@@ -38,25 +38,6 @@ config ANDROID_LOW_MEMORY_KILLER
 	  scripts (/init.rc), and it defines priority values with minimum free memory size
 	  for each priority.
 
-config SYNC
-	bool "Synchronization framework"
-	default n
-	select ANON_INODES
-	select DMA_SHARED_BUFFER
-	---help---
-	  This option enables the framework for synchronization between multiple
-	  drivers.  Sync implementations can take advantage of hardware
-	  synchronization built into devices like GPUs.
-
-config SW_SYNC
-	bool "Software synchronization objects"
-	default n
-	depends on SYNC
-	---help---
-	  A sync object driver that uses a 32bit counter to coordinate
-	  synchronization.  Useful when there is no hardware primitive backing
-	  the synchronization.
-
 source "drivers/staging/android/ion/Kconfig"
 
 endif # if ANDROID
diff --git a/drivers/staging/android/Makefile b/drivers/staging/android/Makefile
index c7b6c99..355ad0e 100644
--- a/drivers/staging/android/Makefile
+++ b/drivers/staging/android/Makefile
@@ -6,5 +6,3 @@ obj-$(CONFIG_ASHMEM)			+= ashmem.o
 obj-$(CONFIG_ANDROID_TIMED_OUTPUT)	+= timed_output.o
 obj-$(CONFIG_ANDROID_TIMED_GPIO)	+= timed_gpio.o
 obj-$(CONFIG_ANDROID_LOW_MEMORY_KILLER)	+= lowmemorykiller.o
-obj-$(CONFIG_SYNC)			+= sync.o sync_debug.o
-obj-$(CONFIG_SW_SYNC)			+= sw_sync.o
diff --git a/drivers/staging/android/sw_sync.h b/include/linux/sw_sync.h
similarity index 95%
rename from drivers/staging/android/sw_sync.h
rename to include/linux/sw_sync.h
index f912888..68cb3d9 100644
--- a/drivers/staging/android/sw_sync.h
+++ b/include/linux/sw_sync.h
@@ -19,8 +19,8 @@
 
 #include <linux/types.h>
 #include <linux/kconfig.h>
-#include "sync.h"
-#include "uapi/sw_sync.h"
+#include <linux/sync.h>
+#include <uapi/linux/sw_sync.h>
 
 #if IS_ENABLED(CONFIG_SW_SYNC)
 struct fence_timeline *sw_sync_timeline_create(const char *name);
diff --git a/drivers/staging/android/sync.h b/include/linux/sync.h
similarity index 99%
rename from drivers/staging/android/sync.h
rename to include/linux/sync.h
index d60d9c2..ecefed5 100644
--- a/drivers/staging/android/sync.h
+++ b/include/linux/sync.h
@@ -20,8 +20,8 @@
 #include <linux/spinlock.h>
 #include <linux/wait.h>
 #include <linux/fence.h>
-
-#include "uapi/sync.h"
+#include <linux/sync.h>
+#include <uapi/linux/sync.h>
 
 struct sync_fence;
 
diff --git a/drivers/staging/android/trace/sync.h b/include/trace/events/sync.h
similarity index 92%
rename from drivers/staging/android/trace/sync.h
rename to include/trace/events/sync.h
index 4f68515..fa19962 100644
--- a/drivers/staging/android/trace/sync.h
+++ b/include/trace/events/sync.h
@@ -1,11 +1,10 @@
 #undef TRACE_SYSTEM
-#define TRACE_INCLUDE_PATH ../../drivers/staging/android/trace
 #define TRACE_SYSTEM sync
 
 #if !defined(_TRACE_SYNC_H) || defined(TRACE_HEADER_MULTI_READ)
 #define _TRACE_SYNC_H
 
-#include "../sync.h"
+#include <linux/sync.h>
 #include <linux/tracepoint.h>
 
 TRACE_EVENT(sync_wait,
@@ -29,7 +28,7 @@ TRACE_EVENT(sync_wait,
 			__get_str(name), __entry->status)
 );
 
-TRACE_EVENT(fence,
+TRACE_EVENT(sync_fence,
 	TP_PROTO(struct fence *fence),
 
 	TP_ARGS(fence),
diff --git a/drivers/staging/android/uapi/sw_sync.h b/include/uapi/linux/sw_sync.h
similarity index 100%
rename from drivers/staging/android/uapi/sw_sync.h
rename to include/uapi/linux/sw_sync.h
diff --git a/drivers/staging/android/uapi/sync.h b/include/uapi/linux/sync.h
similarity index 100%
rename from drivers/staging/android/uapi/sync.h
rename to include/uapi/linux/sync.h
-- 
2.5.0



More information about the dri-devel mailing list