2f43de3476
A lot of CPU time is wasted on allocating, populating, and copying debug names back and forth with userspace when they're not actually needed. We can't just remove the name buffers from the various sync data structures though because we must preserve ABI compatibility with userspace, but instead we can just pretend the name fields of the user-shared structs aren't there. This massively reduces the sizes of memory allocated for these data structures and the amount of data passed between userspace, as well as eliminates a kzalloc() entirely from sync_file_ioctl_fence_info(), thus improving graphics performance. Signed-off-by: Sultan Alsawaf <sultan@kerneltoast.com>
53 lines
1.3 KiB
C
Executable file
53 lines
1.3 KiB
C
Executable file
/*
|
|
* include/linux/sync_file.h
|
|
*
|
|
* Copyright (C) 2012 Google, Inc.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
*/
|
|
|
|
#ifndef _LINUX_SYNC_FILE_H
|
|
#define _LINUX_SYNC_FILE_H
|
|
|
|
#include <linux/types.h>
|
|
#include <linux/ktime.h>
|
|
#include <linux/list.h>
|
|
#include <linux/spinlock.h>
|
|
#include <linux/dma-fence.h>
|
|
#include <linux/dma-fence-array.h>
|
|
|
|
/**
|
|
* struct sync_file - sync file to export to the userspace
|
|
* @file: file representing this fence
|
|
* @sync_file_list: membership in global file list
|
|
* @wq: wait queue for fence signaling
|
|
* @flags: flags for the sync_file
|
|
* @fence: fence with the fences in the sync_file
|
|
* @cb: fence callback information
|
|
*
|
|
* flags:
|
|
* POLL_ENABLED: whether userspace is currently poll()'ing or not
|
|
*/
|
|
struct sync_file {
|
|
struct file *file;
|
|
#ifdef CONFIG_DEBUG_FS
|
|
struct list_head sync_file_list;
|
|
#endif
|
|
|
|
wait_queue_head_t wq;
|
|
unsigned long flags;
|
|
|
|
struct dma_fence *fence;
|
|
struct dma_fence_cb cb;
|
|
};
|
|
|
|
#define POLL_ENABLED 0
|
|
|
|
struct sync_file *sync_file_create(struct dma_fence *fence);
|
|
struct dma_fence *sync_file_get_fence(int fd);
|
|
|
|
#endif /* _LINUX_SYNC_H */
|