search for: drm_gem_unlock_reserv

Displaying 20 results from an estimated 24 matches for "drm_gem_unlock_reserv".

2019 Jun 28
1
[PATCH v4 08/12] drm/virtio: rework virtio_gpu_execbuffer_ioctl fencing
...flist) { > > + for (i = 0; i < exbuf->num_bo_handles; i++) > > + reservation_object_add_excl_fence(buflist->objs[i]->resv, > > + &out_fence->f); > > + drm_gem_unlock_reservations(buflist->objs, buflist->nents, > > + &ticket); > > + } > We used to unlock after virtio_gpu_cmd_submit. > > I guess, the fence is considered signaled (because its seqno is still > 0) until after virtio_gpu_cmd_...
2019 Jun 20
2
[PATCH v4 08/12] drm/virtio: rework virtio_gpu_execbuffer_ioctl fencing
...ic int virtio_gpu_execbuffer_ioctl(struct drm_device *dev, void *data, fd_install(out_fence_fd, sync_file->file); } + if (buflist) { + for (i = 0; i < exbuf->num_bo_handles; i++) + reservation_object_add_excl_fence(buflist->objs[i]->resv, + &out_fence->f); + drm_gem_unlock_reservations(buflist->objs, buflist->nents, + &ticket); + } + virtio_gpu_cmd_submit(vgdev, buf, exbuf->size, - vfpriv->ctx_id, out_fence); - - ttm_eu_fence_buffer_objects(&ticket, &validate_list, &out_fence->f); - - /* fence the command bo */ - virtio_gpu_u...
2019 Jun 20
2
[PATCH v4 08/12] drm/virtio: rework virtio_gpu_execbuffer_ioctl fencing
...ic int virtio_gpu_execbuffer_ioctl(struct drm_device *dev, void *data, fd_install(out_fence_fd, sync_file->file); } + if (buflist) { + for (i = 0; i < exbuf->num_bo_handles; i++) + reservation_object_add_excl_fence(buflist->objs[i]->resv, + &out_fence->f); + drm_gem_unlock_reservations(buflist->objs, buflist->nents, + &ticket); + } + virtio_gpu_cmd_submit(vgdev, buf, exbuf->size, - vfpriv->ctx_id, out_fence); - - ttm_eu_fence_buffer_objects(&ticket, &validate_list, &out_fence->f); - - /* fence the command bo */ - virtio_gpu_u...
2019 Jun 18
2
[PATCH v2 07/12] drm/virtio: rework virtio_gpu_execbuffer_ioctl fencing
..._submit(vgdev, buf, exbuf->size, vfpriv->ctx_id, out_fence); - ttm_eu_fence_buffer_objects(&ticket, &validate_list, &out_fence->f); + for (i = 0; i < exbuf->num_bo_handles; i++) + reservation_object_add_excl_fence(buflist[i]->resv, &out_fence->f); + drm_gem_unlock_reservations(buflist, exbuf->num_bo_handles, &ticket); - /* fence the command bo */ - virtio_gpu_unref_list(&validate_list); + for (i = 0; i < exbuf->num_bo_handles; i++) + if (buflist[i]) + drm_gem_object_put_unlocked(buflist[i]); kvfree(buflist); return 0; out_memdup: kfre...
2019 Jun 18
2
[PATCH v2 07/12] drm/virtio: rework virtio_gpu_execbuffer_ioctl fencing
..._submit(vgdev, buf, exbuf->size, vfpriv->ctx_id, out_fence); - ttm_eu_fence_buffer_objects(&ticket, &validate_list, &out_fence->f); + for (i = 0; i < exbuf->num_bo_handles; i++) + reservation_object_add_excl_fence(buflist[i]->resv, &out_fence->f); + drm_gem_unlock_reservations(buflist, exbuf->num_bo_handles, &ticket); - /* fence the command bo */ - virtio_gpu_unref_list(&validate_list); + for (i = 0; i < exbuf->num_bo_handles; i++) + if (buflist[i]) + drm_gem_object_put_unlocked(buflist[i]); kvfree(buflist); return 0; out_memdup: kfre...
2019 Jun 28
2
[PATCH v5 08/12] drm/virtio: rework virtio_gpu_execbuffer_ioctl fencing
...t;size, - vfpriv->ctx_id, out_fence); + vfpriv->ctx_id, buflist, out_fence); - ttm_eu_fence_buffer_objects(&ticket, &validate_list, &out_fence->f); - - /* fence the command bo */ - virtio_gpu_unref_list(&validate_list); - kvfree(buflist); + if (buflist) + drm_gem_unlock_reservations(buflist->objs, buflist->nents, + &ticket); return 0; out_memdup: kfree(buf); out_unresv: - ttm_eu_backoff_reservation(&ticket, &validate_list); -out_free: - virtio_gpu_unref_list(&validate_list); + if (buflist) + drm_gem_unlock_reservations(buflist->o...
2019 Jun 28
2
[PATCH v5 08/12] drm/virtio: rework virtio_gpu_execbuffer_ioctl fencing
...t;size, - vfpriv->ctx_id, out_fence); + vfpriv->ctx_id, buflist, out_fence); - ttm_eu_fence_buffer_objects(&ticket, &validate_list, &out_fence->f); - - /* fence the command bo */ - virtio_gpu_unref_list(&validate_list); - kvfree(buflist); + if (buflist) + drm_gem_unlock_reservations(buflist->objs, buflist->nents, + &ticket); return 0; out_memdup: kfree(buf); out_unresv: - ttm_eu_backoff_reservation(&ticket, &validate_list); -out_free: - virtio_gpu_unref_list(&validate_list); + if (buflist) + drm_gem_unlock_reservations(buflist->o...
2019 Jun 18
1
[PATCH v2 08/12] drm/virtio: rework virtio_gpu_object_create fencing
...ct_add_excl_fence(obj->resv, + &fence->f); spin_unlock_irqrestore(&drv->lock, irq_flags); - if (signaled) - /* virtio create command finished */ - ttm_eu_backoff_reservation(&ticket, &validate_list); } - virtio_gpu_unref_list(&validate_list); + drm_gem_unlock_reservations(&obj, 1, &ticket); + drm_gem_object_put_unlocked(obj); } *bo_ptr = bo; -- 2.18.1
2019 Jun 18
0
[PATCH v2 07/12] drm/virtio: rework virtio_gpu_execbuffer_ioctl fencing
..._buffer_objects(&ticket, &validate_list, &out_fence->f); > + for (i = 0; i < exbuf->num_bo_handles; i++) > + reservation_object_add_excl_fence(buflist[i]->resv, &out_fence->f); Helper to unref an array of gem bo? Probably also needed by other drivers. > + drm_gem_unlock_reservations(buflist, exbuf->num_bo_handles, &ticket); > > - /* fence the command bo */ > - virtio_gpu_unref_list(&validate_list); > + for (i = 0; i < exbuf->num_bo_handles; i++) > + if (buflist[i]) > + drm_gem_object_put_unlocked(buflist[i]); I am left wondering w...
2019 Jun 19
2
[PATCH v3 08/12] drm/virtio: rework virtio_gpu_execbuffer_ioctl fencing
...ic int virtio_gpu_execbuffer_ioctl(struct drm_device *dev, void *data, fd_install(out_fence_fd, sync_file->file); } + if (buflist) { + for (i = 0; i < exbuf->num_bo_handles; i++) + reservation_object_add_excl_fence(buflist->objs[i]->resv, + &out_fence->f); + drm_gem_unlock_reservations(buflist->objs, buflist->nents, + &ticket); + } + virtio_gpu_cmd_submit(vgdev, buf, exbuf->size, - vfpriv->ctx_id, out_fence); - - ttm_eu_fence_buffer_objects(&ticket, &validate_list, &out_fence->f); - - /* fence the command bo */ - virtio_gpu_u...
2019 Jun 19
2
[PATCH v3 08/12] drm/virtio: rework virtio_gpu_execbuffer_ioctl fencing
...ic int virtio_gpu_execbuffer_ioctl(struct drm_device *dev, void *data, fd_install(out_fence_fd, sync_file->file); } + if (buflist) { + for (i = 0; i < exbuf->num_bo_handles; i++) + reservation_object_add_excl_fence(buflist->objs[i]->resv, + &out_fence->f); + drm_gem_unlock_reservations(buflist->objs, buflist->nents, + &ticket); + } + virtio_gpu_cmd_submit(vgdev, buf, exbuf->size, - vfpriv->ctx_id, out_fence); - - ttm_eu_fence_buffer_objects(&ticket, &validate_list, &out_fence->f); - - /* fence the command bo */ - virtio_gpu_u...
2019 Jul 03
1
[PATCH v6 07/18] drm/virtio: add virtio_gpu_object_array & helpers
...in execbuffer, we will use this in several places, and often with only 1 object in the array. Can we special case that and do a quick reservation_object_lock? > > +} > > + > > +void virtio_gpu_array_unlock_resv(struct virtio_gpu_object_array *objs) > > +{ > > + drm_gem_unlock_reservations(objs->objs, objs->nents, > > + &objs->ticket); > > +} > > + > > +void virtio_gpu_array_add_fence(struct virtio_gpu_object_array *objs, > > + struct dma_fence *fence) > > +{ > &g...
2019 Jul 02
3
[PATCH v6 07/18] drm/virtio: add virtio_gpu_object_array & helpers
...objs->nents] = obj; + objs->nents++; +} + +int virtio_gpu_array_lock_resv(struct virtio_gpu_object_array *objs) +{ + return drm_gem_lock_reservations(objs->objs, objs->nents, + &objs->ticket); +} + +void virtio_gpu_array_unlock_resv(struct virtio_gpu_object_array *objs) +{ + drm_gem_unlock_reservations(objs->objs, objs->nents, + &objs->ticket); +} + +void virtio_gpu_array_add_fence(struct virtio_gpu_object_array *objs, + struct dma_fence *fence) +{ + int i; + + for (i = 0; i < objs->nents; i++) + reservation_object_add_excl_fence(objs->objs[i]->resv, +...
2019 Jul 02
3
[PATCH v6 07/18] drm/virtio: add virtio_gpu_object_array & helpers
...objs->nents] = obj; + objs->nents++; +} + +int virtio_gpu_array_lock_resv(struct virtio_gpu_object_array *objs) +{ + return drm_gem_lock_reservations(objs->objs, objs->nents, + &objs->ticket); +} + +void virtio_gpu_array_unlock_resv(struct virtio_gpu_object_array *objs) +{ + drm_gem_unlock_reservations(objs->objs, objs->nents, + &objs->ticket); +} + +void virtio_gpu_array_add_fence(struct virtio_gpu_object_array *objs, + struct dma_fence *fence) +{ + int i; + + for (i = 0; i < objs->nents; i++) + reservation_object_add_excl_fence(objs->objs[i]->resv, +...
2019 Jun 30
0
[PATCH v5 08/12] drm/virtio: rework virtio_gpu_execbuffer_ioctl fencing
...list, out_fence); > > - ttm_eu_fence_buffer_objects(&ticket, &validate_list, &out_fence->f); > - > - /* fence the command bo */ > - virtio_gpu_unref_list(&validate_list); > - kvfree(buflist); > + if (buflist) > + drm_gem_unlock_reservations(buflist->objs, buflist->nents, > + &ticket); When virtio_gpu_cmd_submit progresses really fast, buflist might have been freed. > return 0; > > out_memdup: > kfree(buf); > out_unresv: > - ttm_eu_b...
2019 Jun 27
0
[PATCH v4 08/12] drm/virtio: rework virtio_gpu_execbuffer_ioctl fencing
...> + if (buflist) { > + for (i = 0; i < exbuf->num_bo_handles; i++) > + reservation_object_add_excl_fence(buflist->objs[i]->resv, > + &out_fence->f); > + drm_gem_unlock_reservations(buflist->objs, buflist->nents, > + &ticket); > + } We used to unlock after virtio_gpu_cmd_submit. I guess, the fence is considered signaled (because its seqno is still 0) until after virtio_gpu_cmd_submit. We probably don't...
2019 Jun 19
0
[PATCH v3 08/12] drm/virtio: rework virtio_gpu_execbuffer_ioctl fencing
...t drm_device *dev, void *data, > fd_install(out_fence_fd, sync_file->file); > } > > + if (buflist) { > + for (i = 0; i < exbuf->num_bo_handles; i++) > + reservation_object_add_excl_fence(buflist->objs[i]->resv, > + &out_fence->f); > + drm_gem_unlock_reservations(buflist->objs, buflist->nents, > + &ticket); > + } > + > virtio_gpu_cmd_submit(vgdev, buf, exbuf->size, > - vfpriv->ctx_id, out_fence); > - > - ttm_eu_fence_buffer_objects(&ticket, &validate_list, &out_fence->f); > - &gt...
2019 Jun 28
1
[PATCH v5 09/12] drm/virtio: rework virtio_gpu_object_create fencing
..._resource_create_3d(vgdev, bo, params, fence); + virtio_gpu_cmd_resource_create_3d(vgdev, bo, params, + objs, fence); } else { - virtio_gpu_cmd_create_resource(vgdev, bo, params, fence); + virtio_gpu_cmd_create_resource(vgdev, bo, params, + objs, fence); } + if (fence) + drm_gem_unlock_reservations(objs->objs, objs->nents, &ticket); + virtio_gpu_init_ttm_placement(bo); ret = ttm_bo_init(&vgdev->mman.bdev, &bo->tbo, params->size, ttm_bo_type_device, &bo->placement, 0, @@ -139,38 +158,6 @@ int virtio_gpu_object_create(struct virtio_gpu_device *v...
2019 Jun 20
1
[PATCH v4 09/12] drm/virtio: rework virtio_gpu_object_create fencing
...y_alloc(1); + objs->objs[0] = &bo->gem_base; + drm_gem_object_get(objs->objs[0]); + + ret = drm_gem_lock_reservations(objs->objs, objs->nents, + &ticket); + if (ret == 0) + reservation_object_add_excl_fence(objs->objs[0]->resv, + &fence->f); + drm_gem_unlock_reservations(objs->objs, objs->nents, &ticket); + } + if (params->virgl) { - virtio_gpu_cmd_resource_create_3d(vgdev, bo, params, fence); + virtio_gpu_cmd_resource_create_3d(vgdev, bo, params, + fence, objs); } else { - virtio_gpu_cmd_create_resource(vgdev, bo, params, fence); +...
2019 Jun 18
0
[PATCH v2 11/12] drm/virtio: rework virtio_gpu_object_create fencing even more.
...f)) - /* virtio create command still in flight */ - reservation_object_add_excl_fence(obj->resv, - &fence->f); - spin_unlock_irqrestore(&drv->lock, irq_flags); - } + if (ret == 0) + reservation_object_add_excl_fence(obj->resv, + &fence->f); drm_gem_unlock_reservations(&obj, 1, &ticket); - drm_gem_object_put_unlocked(obj); + } + + if (params->virgl) { + virtio_gpu_cmd_resource_create_3d(vgdev, bo, params, fence); + } else { + virtio_gpu_cmd_create_resource(vgdev, bo, params, fence); } ret = virtio_gpu_object_attach(vgdev, bo, NULL); --...