drm/virtio: add real fence context and seqno
virtio fences were created with no fence context, which would make then clash with an allocated fence context. Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Message-id: 1472660813-28219-2-git-send-email-gustavo@padovan.org Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
This commit is contained in:
committed by
Gerd Hoffmann
parent
5c32c3dd85
commit
30b9c96cf7
@ -75,6 +75,7 @@ typedef void (*virtio_gpu_resp_cb)(struct virtio_gpu_device *vgdev,
|
|||||||
struct virtio_gpu_fence_driver {
|
struct virtio_gpu_fence_driver {
|
||||||
atomic64_t last_seq;
|
atomic64_t last_seq;
|
||||||
uint64_t sync_seq;
|
uint64_t sync_seq;
|
||||||
|
uint64_t context;
|
||||||
struct list_head fences;
|
struct list_head fences;
|
||||||
spinlock_t lock;
|
spinlock_t lock;
|
||||||
};
|
};
|
||||||
|
@ -89,7 +89,7 @@ int virtio_gpu_fence_emit(struct virtio_gpu_device *vgdev,
|
|||||||
(*fence)->drv = drv;
|
(*fence)->drv = drv;
|
||||||
(*fence)->seq = ++drv->sync_seq;
|
(*fence)->seq = ++drv->sync_seq;
|
||||||
fence_init(&(*fence)->f, &virtio_fence_ops, &drv->lock,
|
fence_init(&(*fence)->f, &virtio_fence_ops, &drv->lock,
|
||||||
0, (*fence)->seq);
|
drv->context, (*fence)->seq);
|
||||||
fence_get(&(*fence)->f);
|
fence_get(&(*fence)->f);
|
||||||
list_add_tail(&(*fence)->node, &drv->fences);
|
list_add_tail(&(*fence)->node, &drv->fences);
|
||||||
spin_unlock_irqrestore(&drv->lock, irq_flags);
|
spin_unlock_irqrestore(&drv->lock, irq_flags);
|
||||||
|
@ -159,6 +159,7 @@ int virtio_gpu_driver_load(struct drm_device *dev, unsigned long flags)
|
|||||||
virtio_gpu_init_vq(&vgdev->ctrlq, virtio_gpu_dequeue_ctrl_func);
|
virtio_gpu_init_vq(&vgdev->ctrlq, virtio_gpu_dequeue_ctrl_func);
|
||||||
virtio_gpu_init_vq(&vgdev->cursorq, virtio_gpu_dequeue_cursor_func);
|
virtio_gpu_init_vq(&vgdev->cursorq, virtio_gpu_dequeue_cursor_func);
|
||||||
|
|
||||||
|
vgdev->fence_drv.context = fence_context_alloc(1);
|
||||||
spin_lock_init(&vgdev->fence_drv.lock);
|
spin_lock_init(&vgdev->fence_drv.lock);
|
||||||
INIT_LIST_HEAD(&vgdev->fence_drv.fences);
|
INIT_LIST_HEAD(&vgdev->fence_drv.fences);
|
||||||
INIT_LIST_HEAD(&vgdev->cap_cache);
|
INIT_LIST_HEAD(&vgdev->cap_cache);
|
||||||
|
Reference in New Issue
Block a user