From: Gustavo Padovan <gustavo.padovan@xxxxxxxxxxxxxxx> 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@xxxxxxxxxxxxxxx> --- 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 _______________________________________________ devel mailing list devel@xxxxxxxxxxxxxxxxxxxxxx http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel