aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/qxl
diff options
context:
space:
mode:
authorDavid Herrmann <dh.herrmann@gmail.com>2014-01-03 08:24:19 -0500
committerDavid Herrmann <dh.herrmann@gmail.com>2014-03-16 07:23:33 -0400
commit6796cb16c088905bf3af40548fda68c09e6f6ee5 (patch)
treed40162f17dad7b54ac63feaf62b7c84493556f5a /drivers/gpu/drm/qxl
parent31bbe16f6d88622d6731fa2cb4ab38d57d844ac1 (diff)
drm: use anon-inode instead of relying on cdevs
DRM drivers share a common address_space across all character-devices of a single DRM device. This allows simple buffer eviction and mapping-control. However, DRM core currently waits for the first ->open() on any char-dev to mark the underlying inode as backing inode of the device. This delayed initialization causes ugly conditions all over the place: if (dev->dev_mapping) do_sth(); To avoid delayed initialization and to stop reusing the inode of the char-dev, we allocate an anonymous inode for each DRM device and reset filp->f_mapping to it on ->open(). Signed-off-by: David Herrmann <dh.herrmann@gmail.com>
Diffstat (limited to 'drivers/gpu/drm/qxl')
-rw-r--r--drivers/gpu/drm/qxl/qxl_object.c3
-rw-r--r--drivers/gpu/drm/qxl/qxl_ttm.c3
2 files changed, 2 insertions, 4 deletions
diff --git a/drivers/gpu/drm/qxl/qxl_object.c b/drivers/gpu/drm/qxl/qxl_object.c
index 8691c76c5ef0..7e20c21b0879 100644
--- a/drivers/gpu/drm/qxl/qxl_object.c
+++ b/drivers/gpu/drm/qxl/qxl_object.c
@@ -82,8 +82,7 @@ int qxl_bo_create(struct qxl_device *qdev,
82 enum ttm_bo_type type; 82 enum ttm_bo_type type;
83 int r; 83 int r;
84 84
85 if (unlikely(qdev->mman.bdev.dev_mapping == NULL)) 85 qdev->mman.bdev.dev_mapping = qdev->ddev->anon_inode->i_mapping;
86 qdev->mman.bdev.dev_mapping = qdev->ddev->dev_mapping;
87 if (kernel) 86 if (kernel)
88 type = ttm_bo_type_kernel; 87 type = ttm_bo_type_kernel;
89 else 88 else
diff --git a/drivers/gpu/drm/qxl/qxl_ttm.c b/drivers/gpu/drm/qxl/qxl_ttm.c
index c7e7e6590c2b..78cbc40a8efb 100644
--- a/drivers/gpu/drm/qxl/qxl_ttm.c
+++ b/drivers/gpu/drm/qxl/qxl_ttm.c
@@ -518,8 +518,7 @@ int qxl_ttm_init(struct qxl_device *qdev)
518 ((unsigned)num_io_pages * PAGE_SIZE) / (1024 * 1024)); 518 ((unsigned)num_io_pages * PAGE_SIZE) / (1024 * 1024));
519 DRM_INFO("qxl: %uM of Surface memory size\n", 519 DRM_INFO("qxl: %uM of Surface memory size\n",
520 (unsigned)qdev->surfaceram_size / (1024 * 1024)); 520 (unsigned)qdev->surfaceram_size / (1024 * 1024));
521 if (unlikely(qdev->mman.bdev.dev_mapping == NULL)) 521 qdev->mman.bdev.dev_mapping = qdev->ddev->anon_inode->i_mapping;
522 qdev->mman.bdev.dev_mapping = qdev->ddev->dev_mapping;
523 r = qxl_ttm_debugfs_init(qdev); 522 r = qxl_ttm_debugfs_init(qdev);
524 if (r) { 523 if (r) {
525 DRM_ERROR("Failed to init debugfs\n"); 524 DRM_ERROR("Failed to init debugfs\n");