diff options
author | David Herrmann <dh.herrmann@gmail.com> | 2014-01-03 08:24:19 -0500 |
---|---|---|
committer | David Herrmann <dh.herrmann@gmail.com> | 2014-03-16 07:23:33 -0400 |
commit | 6796cb16c088905bf3af40548fda68c09e6f6ee5 (patch) | |
tree | d40162f17dad7b54ac63feaf62b7c84493556f5a /drivers/gpu/drm/qxl | |
parent | 31bbe16f6d88622d6731fa2cb4ab38d57d844ac1 (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.c | 3 | ||||
-rw-r--r-- | drivers/gpu/drm/qxl/qxl_ttm.c | 3 |
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"); |