mirror of
https://gitlab.freedesktop.org/mesa/drm.git
synced 2026-01-06 16:40:21 +01:00
Merge branch 'master' into pre-superioctl-branch
Conflicts: linux-core/drm_bo.c linux-core/drm_fence.c linux-core/drm_objects.h shared-core/drm.h
This commit is contained in:
commit
c4b3a0f602
9 changed files with 73 additions and 63 deletions
|
|
@ -2345,7 +2345,7 @@ int drmCommandWriteRead(int fd, unsigned long drmCommandIndex, void *data,
|
|||
* DRM_FENCE_MASK_DRIVER
|
||||
*/
|
||||
|
||||
int drmFenceCreate(int fd, unsigned flags, int class, unsigned type,
|
||||
int drmFenceCreate(int fd, unsigned flags, int fence_class, unsigned type,
|
||||
drmFence *fence)
|
||||
{
|
||||
drm_fence_arg_t arg;
|
||||
|
|
@ -2353,11 +2353,12 @@ int drmFenceCreate(int fd, unsigned flags, int class, unsigned type,
|
|||
memset(&arg, 0, sizeof(arg));
|
||||
arg.flags = flags;
|
||||
arg.type = type;
|
||||
arg.class = class;
|
||||
arg.fence_class = fence_class;
|
||||
|
||||
if (ioctl(fd, DRM_IOCTL_FENCE_CREATE, &arg))
|
||||
return -errno;
|
||||
fence->handle = arg.handle;
|
||||
fence->class = arg.class;
|
||||
fence->fence_class = arg.fence_class;
|
||||
fence->type = arg.type;
|
||||
fence->flags = arg.flags;
|
||||
fence->signaled = 0;
|
||||
|
|
@ -2370,19 +2371,21 @@ int drmFenceCreate(int fd, unsigned flags, int class, unsigned type,
|
|||
* DRM_FENCE_MASK_DRIVER
|
||||
*/
|
||||
|
||||
int drmFenceBuffers(int fd, unsigned flags, drmFence *fence)
|
||||
int drmFenceBuffers(int fd, unsigned flags, uint32_t fence_class, drmFence *fence)
|
||||
{
|
||||
drm_fence_arg_t arg;
|
||||
|
||||
memset(&arg, 0, sizeof(arg));
|
||||
arg.flags = flags;
|
||||
arg.fence_class = fence_class;
|
||||
|
||||
if (ioctl(fd, DRM_IOCTL_FENCE_BUFFERS, &arg))
|
||||
return -errno;
|
||||
fence->handle = arg.handle;
|
||||
fence->class = arg.class;
|
||||
fence->fence_class = arg.fence_class;
|
||||
fence->type = arg.type;
|
||||
fence->flags = arg.flags;
|
||||
fence->sequence = arg.sequence;
|
||||
fence->signaled = 0;
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -2409,7 +2412,7 @@ int drmFenceReference(int fd, unsigned handle, drmFence *fence)
|
|||
if (ioctl(fd, DRM_IOCTL_FENCE_REFERENCE, &arg))
|
||||
return -errno;
|
||||
fence->handle = arg.handle;
|
||||
fence->class = arg.class;
|
||||
fence->fence_class = arg.fence_class;
|
||||
fence->type = arg.type;
|
||||
fence->flags = arg.flags;
|
||||
fence->signaled = arg.signaled;
|
||||
|
|
@ -2438,7 +2441,7 @@ int drmFenceFlush(int fd, drmFence *fence, unsigned flush_type)
|
|||
|
||||
if (ioctl(fd, DRM_IOCTL_FENCE_FLUSH, &arg))
|
||||
return -errno;
|
||||
fence->class = arg.class;
|
||||
fence->fence_class = arg.fence_class;
|
||||
fence->type = arg.type;
|
||||
fence->signaled = arg.signaled;
|
||||
return 0;
|
||||
|
|
@ -2453,7 +2456,7 @@ int drmFenceUpdate(int fd, drmFence *fence)
|
|||
|
||||
if (ioctl(fd, DRM_IOCTL_FENCE_SIGNALED, &arg))
|
||||
return -errno;
|
||||
fence->class = arg.class;
|
||||
fence->fence_class = arg.fence_class;
|
||||
fence->type = arg.type;
|
||||
fence->signaled = arg.signaled;
|
||||
return 0;
|
||||
|
|
@ -2486,14 +2489,14 @@ int drmFenceEmit(int fd, unsigned flags, drmFence *fence, unsigned emit_type)
|
|||
drm_fence_arg_t arg;
|
||||
|
||||
memset(&arg, 0, sizeof(arg));
|
||||
arg.class = fence->class;
|
||||
arg.fence_class = fence->fence_class;
|
||||
arg.flags = flags;
|
||||
arg.handle = fence->handle;
|
||||
arg.type = emit_type;
|
||||
|
||||
if (ioctl(fd, DRM_IOCTL_FENCE_EMIT, &arg))
|
||||
return -errno;
|
||||
fence->class = arg.class;
|
||||
fence->fence_class = arg.fence_class;
|
||||
fence->type = arg.type;
|
||||
fence->signaled = arg.signaled;
|
||||
return 0;
|
||||
|
|
@ -2532,7 +2535,7 @@ int drmFenceWait(int fd, unsigned flags, drmFence *fence, unsigned flush_type)
|
|||
if (ret)
|
||||
return -errno;
|
||||
|
||||
fence->class = arg.class;
|
||||
fence->fence_class = arg.fence_class;
|
||||
fence->type = arg.type;
|
||||
fence->signaled = arg.signaled;
|
||||
return 0;
|
||||
|
|
@ -2878,7 +2881,7 @@ int drmBOUnmap(int fd, drmBO *buf)
|
|||
return 0;
|
||||
}
|
||||
|
||||
int drmBOValidate(int fd, drmBO *buf,
|
||||
int drmBOValidate(int fd, drmBO *buf, uint32_t fence_class,
|
||||
uint64_t flags, uint64_t mask,
|
||||
unsigned hint)
|
||||
{
|
||||
|
|
@ -2892,7 +2895,7 @@ int drmBOValidate(int fd, drmBO *buf,
|
|||
req->bo_req.flags = flags;
|
||||
req->bo_req.mask = mask;
|
||||
req->bo_req.hint = hint;
|
||||
req->bo_req.fence_class = 0; /* Backwards compatibility. */
|
||||
req->bo_req.fence_class = fence_class;
|
||||
req->op = drm_bo_validate;
|
||||
|
||||
do{
|
||||
|
|
|
|||
|
|
@ -96,10 +96,11 @@ typedef struct _drmMMListHead
|
|||
typedef struct _drmFence
|
||||
{
|
||||
unsigned handle;
|
||||
int class;
|
||||
int fence_class;
|
||||
unsigned type;
|
||||
unsigned flags;
|
||||
unsigned signaled;
|
||||
uint32_t sequence;
|
||||
unsigned pad[4]; /* for future expansion */
|
||||
} drmFence;
|
||||
|
||||
|
|
@ -148,7 +149,7 @@ typedef struct _drmBOList {
|
|||
* Fence functions.
|
||||
*/
|
||||
|
||||
extern int drmFenceCreate(int fd, unsigned flags, int class,
|
||||
extern int drmFenceCreate(int fd, unsigned flags, int fence_class,
|
||||
unsigned type, drmFence *fence);
|
||||
extern int drmFenceDestroy(int fd, const drmFence *fence);
|
||||
extern int drmFenceReference(int fd, unsigned handle, drmFence *fence);
|
||||
|
|
@ -160,7 +161,7 @@ extern int drmFenceWait(int fd, unsigned flags, drmFence *fence,
|
|||
unsigned flush_type);
|
||||
extern int drmFenceEmit(int fd, unsigned flags, drmFence *fence,
|
||||
unsigned emit_type);
|
||||
extern int drmFenceBuffers(int fd, unsigned flags, drmFence *fence);
|
||||
extern int drmFenceBuffers(int fd, unsigned flags, uint32_t fence_class, drmFence *fence);
|
||||
|
||||
|
||||
/*
|
||||
|
|
@ -188,7 +189,7 @@ extern int drmBOUnReference(int fd, drmBO *buf);
|
|||
extern int drmBOMap(int fd, drmBO *buf, unsigned mapFlags, unsigned mapHint,
|
||||
void **address);
|
||||
extern int drmBOUnmap(int fd, drmBO *buf);
|
||||
extern int drmBOValidate(int fd, drmBO *buf, uint64_t flags,
|
||||
extern int drmBOValidate(int fd, drmBO *buf, uint32_t fence_class, uint64_t flags,
|
||||
uint64_t mask, unsigned hint);
|
||||
|
||||
extern int drmBOFence(int fd, drmBO *buf, unsigned flags, unsigned fenceHandle);
|
||||
|
|
|
|||
|
|
@ -588,7 +588,7 @@ int drm_fence_buffer_objects(struct drm_device *dev,
|
|||
list = &bm->unfenced;
|
||||
|
||||
if (fence)
|
||||
fence_class = fence->class;
|
||||
fence_class = fence->fence_class;
|
||||
|
||||
list_for_each_entry(entry, list, lru) {
|
||||
BUG_ON(!(entry->priv_flags & _DRM_BO_FLAG_UNFENCED));
|
||||
|
|
@ -612,7 +612,8 @@ int drm_fence_buffer_objects(struct drm_device *dev,
|
|||
}
|
||||
|
||||
if (fence) {
|
||||
if ((fence_type & fence->type) != fence_type) {
|
||||
if ((fence_type & fence->type) != fence_type ||
|
||||
(fence->fence_class != fence_class)) {
|
||||
DRM_ERROR("Given fence doesn't match buffers "
|
||||
"on unfenced list.\n");
|
||||
ret = -EINVAL;
|
||||
|
|
@ -638,7 +639,8 @@ int drm_fence_buffer_objects(struct drm_device *dev,
|
|||
mutex_lock(&entry->mutex);
|
||||
mutex_lock(&dev->struct_mutex);
|
||||
list_del_init(l);
|
||||
if (entry->priv_flags & _DRM_BO_FLAG_UNFENCED) {
|
||||
if (entry->priv_flags & _DRM_BO_FLAG_UNFENCED &&
|
||||
entry->fence_class == fence_class) {
|
||||
count++;
|
||||
if (entry->fence)
|
||||
drm_fence_usage_deref_locked(&entry->fence);
|
||||
|
|
@ -2055,7 +2057,7 @@ drm_bo_set_pin(struct drm_device *dev, struct drm_buffer_object *bo,
|
|||
/* Validate the buffer into its pinned location, with no
|
||||
* pending fence.
|
||||
*/
|
||||
ret = drm_buffer_object_validate(bo, 0, 0, 0);
|
||||
ret = drm_buffer_object_validate(bo, bo->fence_class, 0, 0);
|
||||
if (ret) {
|
||||
mutex_unlock(&bo->mutex);
|
||||
return ret;
|
||||
|
|
|
|||
|
|
@ -34,14 +34,14 @@
|
|||
* Typically called by the IRQ handler.
|
||||
*/
|
||||
|
||||
void drm_fence_handler(struct drm_device * dev, uint32_t class,
|
||||
void drm_fence_handler(struct drm_device * dev, uint32_t fence_class,
|
||||
uint32_t sequence, uint32_t type, uint32_t error)
|
||||
{
|
||||
int wake = 0;
|
||||
uint32_t diff;
|
||||
uint32_t relevant;
|
||||
struct drm_fence_manager *fm = &dev->fm;
|
||||
struct drm_fence_class_manager *fc = &fm->class[class];
|
||||
struct drm_fence_class_manager *fc = &fm->fence_class[fence_class];
|
||||
struct drm_fence_driver *driver = dev->driver->fence_driver;
|
||||
struct list_head *head;
|
||||
struct drm_fence_object *fence, *next;
|
||||
|
|
@ -228,7 +228,7 @@ int drm_fence_object_signaled(struct drm_fence_object * fence,
|
|||
struct drm_fence_driver *driver = dev->driver->fence_driver;
|
||||
|
||||
if (poke_flush)
|
||||
driver->poke_flush(dev, fence->class);
|
||||
driver->poke_flush(dev, fence->fence_class);
|
||||
read_lock_irqsave(&fm->lock, flags);
|
||||
signaled =
|
||||
(fence->type & mask & fence->signaled) == (fence->type & mask);
|
||||
|
|
@ -260,7 +260,7 @@ int drm_fence_object_flush(struct drm_fence_object * fence,
|
|||
{
|
||||
struct drm_device *dev = fence->dev;
|
||||
struct drm_fence_manager *fm = &dev->fm;
|
||||
struct drm_fence_class_manager *fc = &fm->class[fence->class];
|
||||
struct drm_fence_class_manager *fc = &fm->fence_class[fence->fence_class];
|
||||
struct drm_fence_driver *driver = dev->driver->fence_driver;
|
||||
unsigned long flags;
|
||||
|
||||
|
|
@ -285,7 +285,7 @@ int drm_fence_object_flush(struct drm_fence_object * fence,
|
|||
}
|
||||
}
|
||||
write_unlock_irqrestore(&fm->lock, flags);
|
||||
driver->poke_flush(dev, fence->class);
|
||||
driver->poke_flush(dev, fence->fence_class);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -294,10 +294,10 @@ int drm_fence_object_flush(struct drm_fence_object * fence,
|
|||
* wrapped around and reused.
|
||||
*/
|
||||
|
||||
void drm_fence_flush_old(struct drm_device * dev, uint32_t class, uint32_t sequence)
|
||||
void drm_fence_flush_old(struct drm_device * dev, uint32_t fence_class, uint32_t sequence)
|
||||
{
|
||||
struct drm_fence_manager *fm = &dev->fm;
|
||||
struct drm_fence_class_manager *fc = &fm->class[class];
|
||||
struct drm_fence_class_manager *fc = &fm->fence_class[fence_class];
|
||||
struct drm_fence_driver *driver = dev->driver->fence_driver;
|
||||
uint32_t old_sequence;
|
||||
unsigned long flags;
|
||||
|
|
@ -340,7 +340,7 @@ static int drm_fence_lazy_wait(struct drm_fence_object *fence,
|
|||
{
|
||||
struct drm_device *dev = fence->dev;
|
||||
struct drm_fence_manager *fm = &dev->fm;
|
||||
struct drm_fence_class_manager *fc = &fm->class[fence->class];
|
||||
struct drm_fence_class_manager *fc = &fm->fence_class[fence->fence_class];
|
||||
int signaled;
|
||||
unsigned long _end = jiffies + 3*DRM_HZ;
|
||||
int ret = 0;
|
||||
|
|
@ -362,7 +362,7 @@ static int drm_fence_lazy_wait(struct drm_fence_object *fence,
|
|||
DRM_ERROR("Fence timeout. "
|
||||
"GPU lockup or fence driver was "
|
||||
"taken down. %d 0x%08x 0x%02x 0x%02x 0x%02x\n",
|
||||
fence->class,
|
||||
fence->fence_class,
|
||||
fence->sequence,
|
||||
fence->type,
|
||||
mask,
|
||||
|
|
@ -407,7 +407,7 @@ int drm_fence_object_wait(struct drm_fence_object * fence,
|
|||
|
||||
} else {
|
||||
|
||||
if (driver->has_irq(dev, fence->class,
|
||||
if (driver->has_irq(dev, fence->fence_class,
|
||||
DRM_FENCE_TYPE_EXE)) {
|
||||
ret = drm_fence_lazy_wait(fence, ignore_signals,
|
||||
DRM_FENCE_TYPE_EXE);
|
||||
|
|
@ -415,7 +415,7 @@ int drm_fence_object_wait(struct drm_fence_object * fence,
|
|||
return ret;
|
||||
}
|
||||
|
||||
if (driver->has_irq(dev, fence->class,
|
||||
if (driver->has_irq(dev, fence->fence_class,
|
||||
mask & ~DRM_FENCE_TYPE_EXE)) {
|
||||
ret = drm_fence_lazy_wait(fence, ignore_signals,
|
||||
mask);
|
||||
|
|
@ -447,24 +447,24 @@ EXPORT_SYMBOL(drm_fence_object_wait);
|
|||
|
||||
|
||||
int drm_fence_object_emit(struct drm_fence_object * fence,
|
||||
uint32_t fence_flags, uint32_t class, uint32_t type)
|
||||
uint32_t fence_flags, uint32_t fence_class, uint32_t type)
|
||||
{
|
||||
struct drm_device *dev = fence->dev;
|
||||
struct drm_fence_manager *fm = &dev->fm;
|
||||
struct drm_fence_driver *driver = dev->driver->fence_driver;
|
||||
struct drm_fence_class_manager *fc = &fm->class[fence->class];
|
||||
struct drm_fence_class_manager *fc = &fm->fence_class[fence->fence_class];
|
||||
unsigned long flags;
|
||||
uint32_t sequence;
|
||||
uint32_t native_type;
|
||||
int ret;
|
||||
|
||||
drm_fence_unring(dev, &fence->ring);
|
||||
ret = driver->emit(dev, class, fence_flags, &sequence, &native_type);
|
||||
ret = driver->emit(dev, fence_class, fence_flags, &sequence, &native_type);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
write_lock_irqsave(&fm->lock, flags);
|
||||
fence->class = class;
|
||||
fence->fence_class = fence_class;
|
||||
fence->type = type;
|
||||
fence->flush_mask = 0x00;
|
||||
fence->submitted_flush = 0x00;
|
||||
|
|
@ -479,7 +479,7 @@ int drm_fence_object_emit(struct drm_fence_object * fence,
|
|||
}
|
||||
EXPORT_SYMBOL(drm_fence_object_emit);
|
||||
|
||||
static int drm_fence_object_init(struct drm_device * dev, uint32_t class,
|
||||
static int drm_fence_object_init(struct drm_device * dev, uint32_t fence_class,
|
||||
uint32_t type,
|
||||
uint32_t fence_flags,
|
||||
struct drm_fence_object * fence)
|
||||
|
|
@ -500,7 +500,7 @@ static int drm_fence_object_init(struct drm_device * dev, uint32_t class,
|
|||
*/
|
||||
|
||||
INIT_LIST_HEAD(&fence->base.list);
|
||||
fence->class = class;
|
||||
fence->fence_class = fence_class;
|
||||
fence->type = type;
|
||||
fence->flush_mask = 0;
|
||||
fence->submitted_flush = 0;
|
||||
|
|
@ -510,7 +510,7 @@ static int drm_fence_object_init(struct drm_device * dev, uint32_t class,
|
|||
write_unlock_irqrestore(&fm->lock, flags);
|
||||
if (fence_flags & DRM_FENCE_FLAG_EMIT) {
|
||||
ret = drm_fence_object_emit(fence, fence_flags,
|
||||
fence->class, type);
|
||||
fence->fence_class, type);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
|
@ -535,7 +535,7 @@ out:
|
|||
}
|
||||
EXPORT_SYMBOL(drm_fence_add_user_object);
|
||||
|
||||
int drm_fence_object_create(struct drm_device * dev, uint32_t class, uint32_t type,
|
||||
int drm_fence_object_create(struct drm_device * dev, uint32_t fence_class, uint32_t type,
|
||||
unsigned flags, struct drm_fence_object ** c_fence)
|
||||
{
|
||||
struct drm_fence_object *fence;
|
||||
|
|
@ -545,7 +545,7 @@ int drm_fence_object_create(struct drm_device * dev, uint32_t class, uint32_t ty
|
|||
fence = drm_ctl_calloc(1, sizeof(*fence), DRM_MEM_FENCE);
|
||||
if (!fence)
|
||||
return -ENOMEM;
|
||||
ret = drm_fence_object_init(dev, class, type, flags, fence);
|
||||
ret = drm_fence_object_init(dev, fence_class, type, flags, fence);
|
||||
if (ret) {
|
||||
drm_fence_usage_deref_unlocked(&fence);
|
||||
return ret;
|
||||
|
|
@ -561,7 +561,7 @@ EXPORT_SYMBOL(drm_fence_object_create);
|
|||
void drm_fence_manager_init(struct drm_device * dev)
|
||||
{
|
||||
struct drm_fence_manager *fm = &dev->fm;
|
||||
struct drm_fence_class_manager *class;
|
||||
struct drm_fence_class_manager *fence_class;
|
||||
struct drm_fence_driver *fed = dev->driver->fence_driver;
|
||||
int i;
|
||||
unsigned long flags;
|
||||
|
|
@ -577,11 +577,11 @@ void drm_fence_manager_init(struct drm_device * dev)
|
|||
BUG_ON(fm->num_classes > _DRM_FENCE_CLASSES);
|
||||
|
||||
for (i=0; i<fm->num_classes; ++i) {
|
||||
class = &fm->class[i];
|
||||
fence_class = &fm->fence_class[i];
|
||||
|
||||
INIT_LIST_HEAD(&class->ring);
|
||||
class->pending_flush = 0;
|
||||
DRM_INIT_WAITQUEUE(&class->fence_queue);
|
||||
INIT_LIST_HEAD(&fence_class->ring);
|
||||
fence_class->pending_flush = 0;
|
||||
DRM_INIT_WAITQUEUE(&fence_class->fence_queue);
|
||||
}
|
||||
|
||||
atomic_set(&fm->count, 0);
|
||||
|
|
@ -597,10 +597,11 @@ void drm_fence_fill_arg(struct drm_fence_object *fence, struct drm_fence_arg *ar
|
|||
|
||||
read_lock_irqsave(&fm->lock, irq_flags);
|
||||
arg->handle = fence->base.hash.key;
|
||||
arg->class = fence->class;
|
||||
arg->fence_class = fence->fence_class;
|
||||
arg->type = fence->type;
|
||||
arg->signaled = fence->signaled;
|
||||
arg->error = fence->error;
|
||||
arg->sequence = fence->sequence;
|
||||
read_unlock_irqrestore(&fm->lock, irq_flags);
|
||||
}
|
||||
EXPORT_SYMBOL(drm_fence_fill_arg);
|
||||
|
|
@ -642,7 +643,7 @@ int drm_fence_create_ioctl(struct drm_device *dev, void *data, struct drm_file *
|
|||
|
||||
if (arg->flags & DRM_FENCE_FLAG_EMIT)
|
||||
LOCK_TEST_WITH_RETURN(dev, file_priv);
|
||||
ret = drm_fence_object_create(dev, arg->class,
|
||||
ret = drm_fence_object_create(dev, arg->fence_class,
|
||||
arg->type, arg->flags, &fence);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
|
@ -660,6 +661,7 @@ int drm_fence_create_ioctl(struct drm_device *dev, void *data, struct drm_file *
|
|||
|
||||
arg->handle = fence->base.hash.key;
|
||||
|
||||
|
||||
drm_fence_fill_arg(fence, arg);
|
||||
drm_fence_usage_deref_unlocked(&fence);
|
||||
|
||||
|
|
@ -823,7 +825,7 @@ int drm_fence_emit_ioctl(struct drm_device *dev, void *data, struct drm_file *fi
|
|||
fence = drm_lookup_fence_object(file_priv, arg->handle);
|
||||
if (!fence)
|
||||
return -EINVAL;
|
||||
ret = drm_fence_object_emit(fence, arg->flags, arg->class,
|
||||
ret = drm_fence_object_emit(fence, arg->flags, arg->fence_class,
|
||||
arg->type);
|
||||
|
||||
drm_fence_fill_arg(fence, arg);
|
||||
|
|
|
|||
|
|
@ -154,7 +154,7 @@ struct drm_fence_object {
|
|||
*/
|
||||
|
||||
struct list_head ring;
|
||||
int class;
|
||||
int fence_class;
|
||||
uint32_t native_type;
|
||||
uint32_t type;
|
||||
uint32_t signaled;
|
||||
|
|
@ -179,7 +179,7 @@ struct drm_fence_class_manager {
|
|||
struct drm_fence_manager {
|
||||
int initialized;
|
||||
rwlock_t lock;
|
||||
struct drm_fence_class_manager class[_DRM_FENCE_CLASSES];
|
||||
struct drm_fence_class_manager fence_class[_DRM_FENCE_CLASSES];
|
||||
uint32_t num_classes;
|
||||
atomic_t count;
|
||||
};
|
||||
|
|
@ -190,18 +190,18 @@ struct drm_fence_driver {
|
|||
uint32_t flush_diff;
|
||||
uint32_t sequence_mask;
|
||||
int lazy_capable;
|
||||
int (*has_irq) (struct drm_device * dev, uint32_t class,
|
||||
int (*has_irq) (struct drm_device * dev, uint32_t fence_class,
|
||||
uint32_t flags);
|
||||
int (*emit) (struct drm_device * dev, uint32_t class, uint32_t flags,
|
||||
int (*emit) (struct drm_device * dev, uint32_t fence_class, uint32_t flags,
|
||||
uint32_t * breadcrumb, uint32_t * native_type);
|
||||
void (*poke_flush) (struct drm_device * dev, uint32_t class);
|
||||
void (*poke_flush) (struct drm_device * dev, uint32_t fence_class);
|
||||
};
|
||||
|
||||
extern void drm_fence_handler(struct drm_device *dev, uint32_t class,
|
||||
extern void drm_fence_handler(struct drm_device *dev, uint32_t fence_class,
|
||||
uint32_t sequence, uint32_t type, uint32_t error);
|
||||
extern void drm_fence_manager_init(struct drm_device *dev);
|
||||
extern void drm_fence_manager_takedown(struct drm_device *dev);
|
||||
extern void drm_fence_flush_old(struct drm_device *dev, uint32_t class,
|
||||
extern void drm_fence_flush_old(struct drm_device *dev, uint32_t fence_class,
|
||||
uint32_t sequence);
|
||||
extern int drm_fence_object_flush(struct drm_fence_object * fence, uint32_t type);
|
||||
extern int drm_fence_object_signaled(struct drm_fence_object * fence,
|
||||
|
|
@ -214,7 +214,7 @@ extern void drm_fence_reference_unlocked(struct drm_fence_object **dst,
|
|||
extern int drm_fence_object_wait(struct drm_fence_object * fence,
|
||||
int lazy, int ignore_signals, uint32_t mask);
|
||||
extern int drm_fence_object_create(struct drm_device *dev, uint32_t type,
|
||||
uint32_t fence_flags, uint32_t class,
|
||||
uint32_t fence_flags, uint32_t fence_class,
|
||||
struct drm_fence_object ** c_fence);
|
||||
extern int drm_fence_object_emit(struct drm_fence_object * fence,
|
||||
uint32_t fence_flags, uint32_t class,
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@ static void i915_perform_flush(struct drm_device * dev)
|
|||
{
|
||||
drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
|
||||
struct drm_fence_manager *fm = &dev->fm;
|
||||
struct drm_fence_class_manager *fc = &fm->class[0];
|
||||
struct drm_fence_class_manager *fc = &fm->fence_class[0];
|
||||
struct drm_fence_driver *driver = dev->driver->fence_driver;
|
||||
uint32_t flush_flags = 0;
|
||||
uint32_t flush_sequence = 0;
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@
|
|||
static uint32_t via_perform_flush(struct drm_device *dev, uint32_t class)
|
||||
{
|
||||
drm_via_private_t *dev_priv = (drm_via_private_t *) dev->dev_private;
|
||||
struct drm_fence_class_manager *fc = &dev->fm.class[class];
|
||||
struct drm_fence_class_manager *fc = &dev->fm.fence_class[class];
|
||||
uint32_t pending_flush_types = 0;
|
||||
uint32_t signaled_flush_types = 0;
|
||||
uint32_t status;
|
||||
|
|
@ -205,7 +205,7 @@ void via_fence_timer(unsigned long data)
|
|||
drm_via_private_t *dev_priv = (drm_via_private_t *) dev->dev_private;
|
||||
struct drm_fence_manager *fm = &dev->fm;
|
||||
uint32_t pending_flush;
|
||||
struct drm_fence_class_manager *fc = &dev->fm.class[0];
|
||||
struct drm_fence_class_manager *fc = &dev->fm.fence_class[0];
|
||||
|
||||
if (!dev_priv)
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -33,7 +33,7 @@
|
|||
static uint32_t xgi_do_flush(struct drm_device * dev, uint32_t class)
|
||||
{
|
||||
struct xgi_info * info = dev->dev_private;
|
||||
struct drm_fence_class_manager * fc = &dev->fm.class[class];
|
||||
struct drm_fence_class_manager * fc = &dev->fm.fence_class[class];
|
||||
uint32_t pending_flush_types = 0;
|
||||
uint32_t signaled_flush_types = 0;
|
||||
|
||||
|
|
|
|||
|
|
@ -648,12 +648,14 @@ struct drm_set_version {
|
|||
|
||||
struct drm_fence_arg {
|
||||
unsigned int handle;
|
||||
unsigned int class;
|
||||
unsigned int fence_class;
|
||||
unsigned int type;
|
||||
unsigned int flags;
|
||||
unsigned int signaled;
|
||||
unsigned int error;
|
||||
uint64_t expand_pad[3]; /*Future expansion */
|
||||
unsigned int sequence;
|
||||
unsigned int pad64;
|
||||
uint64_t expand_pad[2]; /*Future expansion */
|
||||
};
|
||||
|
||||
/* Buffer permissions, referring to how the GPU uses the buffers.
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue