Skip to content

Commit f651c8b

Browse files
gurchetansinghkraxel
authored andcommitted
drm/virtio: factor out the sg_table from virtio_gpu_object
A resource will be a shmem based resource or a (planned) vram based resource, so it makes sense to factor out common fields (resource handle, dumb). v2: move mapped field to shmem object Signed-off-by: Gurchetan Singh <[email protected]> Link: http://patchwork.freedesktop.org/patch/msgid/[email protected] Signed-off-by: Gerd Hoffmann <[email protected]>
1 parent ee21ec7 commit f651c8b

File tree

3 files changed

+30
-20
lines changed

3 files changed

+30
-20
lines changed

drivers/gpu/drm/virtio/virtgpu_drv.h

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -69,16 +69,21 @@ struct virtio_gpu_object_params {
6969
struct virtio_gpu_object {
7070
struct drm_gem_shmem_object base;
7171
uint32_t hw_res_handle;
72-
73-
struct sg_table *pages;
74-
uint32_t mapped;
75-
7672
bool dumb;
7773
bool created;
7874
};
7975
#define gem_to_virtio_gpu_obj(gobj) \
8076
container_of((gobj), struct virtio_gpu_object, base.base)
8177

78+
struct virtio_gpu_object_shmem {
79+
struct virtio_gpu_object base;
80+
struct sg_table *pages;
81+
uint32_t mapped;
82+
};
83+
84+
#define to_virtio_gpu_shmem(virtio_gpu_object) \
85+
container_of((virtio_gpu_object), struct virtio_gpu_object_shmem, base)
86+
8287
struct virtio_gpu_object_array {
8388
struct ww_acquire_ctx ticket;
8489
struct list_head next;

drivers/gpu/drm/virtio/virtgpu_object.c

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -65,16 +65,17 @@ static void virtio_gpu_resource_id_put(struct virtio_gpu_device *vgdev, uint32_t
6565
void virtio_gpu_cleanup_object(struct virtio_gpu_object *bo)
6666
{
6767
struct virtio_gpu_device *vgdev = bo->base.base.dev->dev_private;
68+
struct virtio_gpu_object_shmem *shmem = to_virtio_gpu_shmem(bo);
6869

69-
if (bo->pages) {
70-
if (bo->mapped) {
70+
if (shmem->pages) {
71+
if (shmem->mapped) {
7172
dma_unmap_sg(vgdev->vdev->dev.parent,
72-
bo->pages->sgl, bo->mapped,
73+
shmem->pages->sgl, shmem->mapped,
7374
DMA_TO_DEVICE);
74-
bo->mapped = 0;
75+
shmem->mapped = 0;
7576
}
76-
sg_free_table(bo->pages);
77-
bo->pages = NULL;
77+
sg_free_table(shmem->pages);
78+
shmem->pages = NULL;
7879
drm_gem_shmem_unpin(&bo->base.base);
7980
}
8081
virtio_gpu_resource_id_put(vgdev, bo->hw_res_handle);
@@ -133,26 +134,28 @@ static int virtio_gpu_object_shmem_init(struct virtio_gpu_device *vgdev,
133134
unsigned int *nents)
134135
{
135136
bool use_dma_api = !virtio_has_iommu_quirk(vgdev->vdev);
137+
struct virtio_gpu_object_shmem *shmem = to_virtio_gpu_shmem(bo);
136138
struct scatterlist *sg;
137139
int si, ret;
138140

139141
ret = drm_gem_shmem_pin(&bo->base.base);
140142
if (ret < 0)
141143
return -EINVAL;
142144

143-
bo->pages = drm_gem_shmem_get_sg_table(&bo->base.base);
144-
if (!bo->pages) {
145+
shmem->pages = drm_gem_shmem_get_sg_table(&bo->base.base);
146+
if (!shmem->pages) {
145147
drm_gem_shmem_unpin(&bo->base.base);
146148
return -EINVAL;
147149
}
148150

149151
if (use_dma_api) {
150-
bo->mapped = dma_map_sg(vgdev->vdev->dev.parent,
151-
bo->pages->sgl, bo->pages->nents,
152-
DMA_TO_DEVICE);
153-
*nents = bo->mapped;
152+
shmem->mapped = dma_map_sg(vgdev->vdev->dev.parent,
153+
shmem->pages->sgl,
154+
shmem->pages->nents,
155+
DMA_TO_DEVICE);
156+
*nents = shmem->mapped;
154157
} else {
155-
*nents = bo->pages->nents;
158+
*nents = shmem->pages->nents;
156159
}
157160

158161
*ents = kmalloc_array(*nents, sizeof(struct virtio_gpu_mem_entry),
@@ -162,7 +165,7 @@ static int virtio_gpu_object_shmem_init(struct virtio_gpu_device *vgdev,
162165
return -ENOMEM;
163166
}
164167

165-
for_each_sg(bo->pages->sgl, sg, *nents, si) {
168+
for_each_sg(shmem->pages->sgl, sg, *nents, si) {
166169
(*ents)[si].addr = cpu_to_le64(use_dma_api
167170
? sg_dma_address(sg)
168171
: sg_phys(sg));

drivers/gpu/drm/virtio/virtgpu_vq.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -600,10 +600,11 @@ void virtio_gpu_cmd_transfer_to_host_2d(struct virtio_gpu_device *vgdev,
600600
struct virtio_gpu_transfer_to_host_2d *cmd_p;
601601
struct virtio_gpu_vbuffer *vbuf;
602602
bool use_dma_api = !virtio_has_iommu_quirk(vgdev->vdev);
603+
struct virtio_gpu_object_shmem *shmem = to_virtio_gpu_shmem(bo);
603604

604605
if (use_dma_api)
605606
dma_sync_sg_for_device(vgdev->vdev->dev.parent,
606-
bo->pages->sgl, bo->pages->nents,
607+
shmem->pages->sgl, shmem->pages->nents,
607608
DMA_TO_DEVICE);
608609

609610
cmd_p = virtio_gpu_alloc_cmd(vgdev, &vbuf, sizeof(*cmd_p));
@@ -1015,10 +1016,11 @@ void virtio_gpu_cmd_transfer_to_host_3d(struct virtio_gpu_device *vgdev,
10151016
struct virtio_gpu_transfer_host_3d *cmd_p;
10161017
struct virtio_gpu_vbuffer *vbuf;
10171018
bool use_dma_api = !virtio_has_iommu_quirk(vgdev->vdev);
1019+
struct virtio_gpu_object_shmem *shmem = to_virtio_gpu_shmem(bo);
10181020

10191021
if (use_dma_api)
10201022
dma_sync_sg_for_device(vgdev->vdev->dev.parent,
1021-
bo->pages->sgl, bo->pages->nents,
1023+
shmem->pages->sgl, shmem->pages->nents,
10221024
DMA_TO_DEVICE);
10231025

10241026
cmd_p = virtio_gpu_alloc_cmd(vgdev, &vbuf, sizeof(*cmd_p));

0 commit comments

Comments
 (0)