drm/qxl: add qxl_bo_vmap/qxl_bo_vunmap
Add vmap/vunmap variants which reserve (and pin) the bo. They can be used in case the caller doesn't hold a reservation for the bo. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> Acked-by: Thomas Zimmermann <tzimmermann@suse.de> Link: http://patchwork.freedesktop.org/patch/msgid/20210217123213.2199186-7-kraxel@redhat.com
This commit is contained in:
parent
f7ed28e13f
commit
dce3922618
@ -29,6 +29,9 @@
|
||||
#include "qxl_drv.h"
|
||||
#include "qxl_object.h"
|
||||
|
||||
static int __qxl_bo_pin(struct qxl_bo *bo);
|
||||
static void __qxl_bo_unpin(struct qxl_bo *bo);
|
||||
|
||||
static void qxl_ttm_bo_destroy(struct ttm_buffer_object *tbo)
|
||||
{
|
||||
struct qxl_bo *bo;
|
||||
@ -179,6 +182,25 @@ out:
|
||||
return 0;
|
||||
}
|
||||
|
||||
int qxl_bo_vmap(struct qxl_bo *bo, struct dma_buf_map *map)
|
||||
{
|
||||
int r;
|
||||
|
||||
r = qxl_bo_reserve(bo);
|
||||
if (r)
|
||||
return r;
|
||||
|
||||
r = __qxl_bo_pin(bo);
|
||||
if (r) {
|
||||
qxl_bo_unreserve(bo);
|
||||
return r;
|
||||
}
|
||||
|
||||
r = qxl_bo_vmap_locked(bo, map);
|
||||
qxl_bo_unreserve(bo);
|
||||
return r;
|
||||
}
|
||||
|
||||
void *qxl_bo_kmap_atomic_page(struct qxl_device *qdev,
|
||||
struct qxl_bo *bo, int page_offset)
|
||||
{
|
||||
@ -223,6 +245,20 @@ void qxl_bo_vunmap_locked(struct qxl_bo *bo)
|
||||
ttm_bo_vunmap(&bo->tbo, &bo->map);
|
||||
}
|
||||
|
||||
int qxl_bo_vunmap(struct qxl_bo *bo)
|
||||
{
|
||||
int r;
|
||||
|
||||
r = qxl_bo_reserve(bo);
|
||||
if (r)
|
||||
return r;
|
||||
|
||||
qxl_bo_vunmap_locked(bo);
|
||||
__qxl_bo_unpin(bo);
|
||||
qxl_bo_unreserve(bo);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void qxl_bo_kunmap_atomic_page(struct qxl_device *qdev,
|
||||
struct qxl_bo *bo, void *pmap)
|
||||
{
|
||||
|
@ -64,7 +64,9 @@ extern int qxl_bo_create(struct qxl_device *qdev,
|
||||
u32 priority,
|
||||
struct qxl_surface *surf,
|
||||
struct qxl_bo **bo_ptr);
|
||||
int qxl_bo_vmap(struct qxl_bo *bo, struct dma_buf_map *map);
|
||||
int qxl_bo_vmap_locked(struct qxl_bo *bo, struct dma_buf_map *map);
|
||||
int qxl_bo_vunmap(struct qxl_bo *bo);
|
||||
void qxl_bo_vunmap_locked(struct qxl_bo *bo);
|
||||
void *qxl_bo_kmap_atomic_page(struct qxl_device *qdev, struct qxl_bo *bo, int page_offset);
|
||||
void qxl_bo_kunmap_atomic_page(struct qxl_device *qdev, struct qxl_bo *bo, void *map);
|
||||
|
Loading…
x
Reference in New Issue
Block a user