mirror of
https://github.com/torvalds/linux.git
synced 2026-04-25 01:52:32 -04:00
Merge tag 'drm-misc-next-2020-09-21' of git://anongit.freedesktop.org/drm/drm-misc into drm-next
drm-misc-next for 5.10:
UAPI Changes:
Cross-subsystem Changes:
- virtio: Merged a PR for patches that will affect drm/virtio
Core Changes:
- dev: More devm_drm convertions and removal of drm_dev_init
- atomic: Split out drm_atomic_helper_calc_timestamping_constants of
drm_atomic_helper_update_legacy_modeset_state
- ttm: More rework
Driver Changes:
- i915: selftests improvements
- panfrost: support for Amlogic SoC
- vc4: one fix
- tree-wide: conversions to devm_drm_dev_alloc,
- ast: simplifications of the atomic modesetting code
- panfrost: multiple fixes
- vc4: multiple fixes
Signed-off-by: Dave Airlie <airlied@redhat.com>
From: Maxime Ripard <maxime@cerno.tech>
Link: https://patchwork.freedesktop.org/patch/msgid/20200921152956.2gxnsdgxmwhvjyut@gilmour.lan
This commit is contained in:
@@ -320,13 +320,13 @@ static struct sg_table *vmalloc_to_sgt(char *data, uint32_t size, int *sg_ents)
|
||||
return sgt;
|
||||
}
|
||||
|
||||
static void virtio_gpu_queue_ctrl_sgs(struct virtio_gpu_device *vgdev,
|
||||
struct virtio_gpu_vbuffer *vbuf,
|
||||
struct virtio_gpu_fence *fence,
|
||||
int elemcnt,
|
||||
struct scatterlist **sgs,
|
||||
int outcnt,
|
||||
int incnt)
|
||||
static int virtio_gpu_queue_ctrl_sgs(struct virtio_gpu_device *vgdev,
|
||||
struct virtio_gpu_vbuffer *vbuf,
|
||||
struct virtio_gpu_fence *fence,
|
||||
int elemcnt,
|
||||
struct scatterlist **sgs,
|
||||
int outcnt,
|
||||
int incnt)
|
||||
{
|
||||
struct virtqueue *vq = vgdev->ctrlq.vq;
|
||||
int ret, idx;
|
||||
@@ -335,7 +335,7 @@ static void virtio_gpu_queue_ctrl_sgs(struct virtio_gpu_device *vgdev,
|
||||
if (fence && vbuf->objs)
|
||||
virtio_gpu_array_unlock_resv(vbuf->objs);
|
||||
free_vbuf(vgdev, vbuf);
|
||||
return;
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (vgdev->has_indirect)
|
||||
@@ -373,15 +373,16 @@ again:
|
||||
spin_unlock(&vgdev->ctrlq.qlock);
|
||||
|
||||
drm_dev_exit(idx);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void virtio_gpu_queue_fenced_ctrl_buffer(struct virtio_gpu_device *vgdev,
|
||||
struct virtio_gpu_vbuffer *vbuf,
|
||||
struct virtio_gpu_fence *fence)
|
||||
static int virtio_gpu_queue_fenced_ctrl_buffer(struct virtio_gpu_device *vgdev,
|
||||
struct virtio_gpu_vbuffer *vbuf,
|
||||
struct virtio_gpu_fence *fence)
|
||||
{
|
||||
struct scatterlist *sgs[3], vcmd, vout, vresp;
|
||||
struct sg_table *sgt = NULL;
|
||||
int elemcnt = 0, outcnt = 0, incnt = 0;
|
||||
int elemcnt = 0, outcnt = 0, incnt = 0, ret;
|
||||
|
||||
/* set up vcmd */
|
||||
sg_init_one(&vcmd, vbuf->buf, vbuf->size);
|
||||
@@ -398,7 +399,7 @@ static void virtio_gpu_queue_fenced_ctrl_buffer(struct virtio_gpu_device *vgdev,
|
||||
if (!sgt) {
|
||||
if (fence && vbuf->objs)
|
||||
virtio_gpu_array_unlock_resv(vbuf->objs);
|
||||
return;
|
||||
return -1;
|
||||
}
|
||||
|
||||
elemcnt += sg_ents;
|
||||
@@ -419,13 +420,14 @@ static void virtio_gpu_queue_fenced_ctrl_buffer(struct virtio_gpu_device *vgdev,
|
||||
incnt++;
|
||||
}
|
||||
|
||||
virtio_gpu_queue_ctrl_sgs(vgdev, vbuf, fence, elemcnt, sgs, outcnt,
|
||||
incnt);
|
||||
ret = virtio_gpu_queue_ctrl_sgs(vgdev, vbuf, fence, elemcnt, sgs, outcnt,
|
||||
incnt);
|
||||
|
||||
if (sgt) {
|
||||
sg_free_table(sgt);
|
||||
kfree(sgt);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
void virtio_gpu_notify(struct virtio_gpu_device *vgdev)
|
||||
@@ -444,10 +446,10 @@ void virtio_gpu_notify(struct virtio_gpu_device *vgdev)
|
||||
virtqueue_notify(vgdev->ctrlq.vq);
|
||||
}
|
||||
|
||||
static void virtio_gpu_queue_ctrl_buffer(struct virtio_gpu_device *vgdev,
|
||||
struct virtio_gpu_vbuffer *vbuf)
|
||||
static int virtio_gpu_queue_ctrl_buffer(struct virtio_gpu_device *vgdev,
|
||||
struct virtio_gpu_vbuffer *vbuf)
|
||||
{
|
||||
virtio_gpu_queue_fenced_ctrl_buffer(vgdev, vbuf, NULL);
|
||||
return virtio_gpu_queue_fenced_ctrl_buffer(vgdev, vbuf, NULL);
|
||||
}
|
||||
|
||||
static void virtio_gpu_queue_cursor(struct virtio_gpu_device *vgdev,
|
||||
@@ -534,6 +536,7 @@ void virtio_gpu_cmd_unref_resource(struct virtio_gpu_device *vgdev,
|
||||
{
|
||||
struct virtio_gpu_resource_unref *cmd_p;
|
||||
struct virtio_gpu_vbuffer *vbuf;
|
||||
int ret;
|
||||
|
||||
cmd_p = virtio_gpu_alloc_cmd_cb(vgdev, &vbuf, sizeof(*cmd_p),
|
||||
virtio_gpu_cmd_unref_cb);
|
||||
@@ -543,7 +546,9 @@ void virtio_gpu_cmd_unref_resource(struct virtio_gpu_device *vgdev,
|
||||
cmd_p->resource_id = cpu_to_le32(bo->hw_res_handle);
|
||||
|
||||
vbuf->resp_cb_data = bo;
|
||||
virtio_gpu_queue_ctrl_buffer(vgdev, vbuf);
|
||||
ret = virtio_gpu_queue_ctrl_buffer(vgdev, vbuf);
|
||||
if (ret < 0)
|
||||
virtio_gpu_cleanup_object(bo);
|
||||
}
|
||||
|
||||
void virtio_gpu_cmd_set_scanout(struct virtio_gpu_device *vgdev,
|
||||
@@ -683,9 +688,13 @@ static void virtio_gpu_cmd_get_capset_info_cb(struct virtio_gpu_device *vgdev,
|
||||
int i = le32_to_cpu(cmd->capset_index);
|
||||
|
||||
spin_lock(&vgdev->display_info_lock);
|
||||
vgdev->capsets[i].id = le32_to_cpu(resp->capset_id);
|
||||
vgdev->capsets[i].max_version = le32_to_cpu(resp->capset_max_version);
|
||||
vgdev->capsets[i].max_size = le32_to_cpu(resp->capset_max_size);
|
||||
if (vgdev->capsets) {
|
||||
vgdev->capsets[i].id = le32_to_cpu(resp->capset_id);
|
||||
vgdev->capsets[i].max_version = le32_to_cpu(resp->capset_max_version);
|
||||
vgdev->capsets[i].max_size = le32_to_cpu(resp->capset_max_size);
|
||||
} else {
|
||||
DRM_ERROR("invalid capset memory.");
|
||||
}
|
||||
spin_unlock(&vgdev->display_info_lock);
|
||||
wake_up(&vgdev->resp_wq);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user