aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Herrmann <dh.herrmann@gmail.com>2013-08-13 13:10:30 -0400
committerDavid Herrmann <dh.herrmann@gmail.com>2014-03-16 07:23:42 -0400
commit44d847b7439bdea0b6c5640446427daa3ebcc7fa (patch)
tree53f8bef9b2f863ca0aa8989a98ee7ffa69add128
parent6796cb16c088905bf3af40548fda68c09e6f6ee5 (diff)
drm: init TTM dev_mapping in ttm_bo_device_init()
With dev->anon_inode we have a global address_space ready for operation right from the beginning. Therefore, there is no need to do a delayed setup with TTM. Instead, set dev_mapping during initialization in ttm_bo_device_init() and remove any "if (dev_mapping)" conditions. Cc: Dave Airlie <airlied@redhat.com> Cc: Ben Skeggs <bskeggs@redhat.com> Cc: Maarten Lankhorst <maarten.lankhorst@canonical.com> Cc: Alex Deucher <alexdeucher@gmail.com> Cc: Thomas Hellstrom <thellstrom@vmware.com> Signed-off-by: David Herrmann <dh.herrmann@gmail.com>
-rw-r--r--drivers/gpu/drm/ast/ast_ttm.c5
-rw-r--r--drivers/gpu/drm/bochs/bochs_mm.c4
-rw-r--r--drivers/gpu/drm/cirrus/cirrus_ttm.c5
-rw-r--r--drivers/gpu/drm/mgag200/mgag200_ttm.c5
-rw-r--r--drivers/gpu/drm/nouveau/nouveau_gem.c2
-rw-r--r--drivers/gpu/drm/nouveau/nouveau_ttm.c4
-rw-r--r--drivers/gpu/drm/qxl/qxl_object.c1
-rw-r--r--drivers/gpu/drm/qxl/qxl_ttm.c5
-rw-r--r--drivers/gpu/drm/radeon/radeon_object.c1
-rw-r--r--drivers/gpu/drm/radeon/radeon_ttm.c5
-rw-r--r--drivers/gpu/drm/ttm/ttm_bo.c3
-rw-r--r--drivers/gpu/drm/vmwgfx/vmwgfx_drv.c5
-rw-r--r--include/drm/drm_vma_manager.h6
-rw-r--r--include/drm/ttm/ttm_bo_driver.h2
14 files changed, 31 insertions, 22 deletions
diff --git a/drivers/gpu/drm/ast/ast_ttm.c b/drivers/gpu/drm/ast/ast_ttm.c
index 2b491539e60c..b8246227bab0 100644
--- a/drivers/gpu/drm/ast/ast_ttm.c
+++ b/drivers/gpu/drm/ast/ast_ttm.c
@@ -259,7 +259,9 @@ int ast_mm_init(struct ast_private *ast)
259 259
260 ret = ttm_bo_device_init(&ast->ttm.bdev, 260 ret = ttm_bo_device_init(&ast->ttm.bdev,
261 ast->ttm.bo_global_ref.ref.object, 261 ast->ttm.bo_global_ref.ref.object,
262 &ast_bo_driver, DRM_FILE_PAGE_OFFSET, 262 &ast_bo_driver,
263 dev->anon_inode->i_mapping,
264 DRM_FILE_PAGE_OFFSET,
263 true); 265 true);
264 if (ret) { 266 if (ret) {
265 DRM_ERROR("Error initialising bo driver; %d\n", ret); 267 DRM_ERROR("Error initialising bo driver; %d\n", ret);
@@ -324,7 +326,6 @@ int ast_bo_create(struct drm_device *dev, int size, int align,
324 } 326 }
325 327
326 astbo->bo.bdev = &ast->ttm.bdev; 328 astbo->bo.bdev = &ast->ttm.bdev;
327 astbo->bo.bdev->dev_mapping = dev->anon_inode->i_mapping;
328 329
329 ast_ttm_placement(astbo, TTM_PL_FLAG_VRAM | TTM_PL_FLAG_SYSTEM); 330 ast_ttm_placement(astbo, TTM_PL_FLAG_VRAM | TTM_PL_FLAG_SYSTEM);
330 331
diff --git a/drivers/gpu/drm/bochs/bochs_mm.c b/drivers/gpu/drm/bochs/bochs_mm.c
index 2d8546d7b4af..f488be55d650 100644
--- a/drivers/gpu/drm/bochs/bochs_mm.c
+++ b/drivers/gpu/drm/bochs/bochs_mm.c
@@ -225,7 +225,9 @@ int bochs_mm_init(struct bochs_device *bochs)
225 225
226 ret = ttm_bo_device_init(&bochs->ttm.bdev, 226 ret = ttm_bo_device_init(&bochs->ttm.bdev,
227 bochs->ttm.bo_global_ref.ref.object, 227 bochs->ttm.bo_global_ref.ref.object,
228 &bochs_bo_driver, DRM_FILE_PAGE_OFFSET, 228 &bochs_bo_driver,
229 bochs->dev->anon_inode->i_mapping,
230 DRM_FILE_PAGE_OFFSET,
229 true); 231 true);
230 if (ret) { 232 if (ret) {
231 DRM_ERROR("Error initialising bo driver; %d\n", ret); 233 DRM_ERROR("Error initialising bo driver; %d\n", ret);
diff --git a/drivers/gpu/drm/cirrus/cirrus_ttm.c b/drivers/gpu/drm/cirrus/cirrus_ttm.c
index efcbd70a8774..92e6b7786097 100644
--- a/drivers/gpu/drm/cirrus/cirrus_ttm.c
+++ b/drivers/gpu/drm/cirrus/cirrus_ttm.c
@@ -259,7 +259,9 @@ int cirrus_mm_init(struct cirrus_device *cirrus)
259 259
260 ret = ttm_bo_device_init(&cirrus->ttm.bdev, 260 ret = ttm_bo_device_init(&cirrus->ttm.bdev,
261 cirrus->ttm.bo_global_ref.ref.object, 261 cirrus->ttm.bo_global_ref.ref.object,
262 &cirrus_bo_driver, DRM_FILE_PAGE_OFFSET, 262 &cirrus_bo_driver,
263 dev->anon_inode->i_mapping,
264 DRM_FILE_PAGE_OFFSET,
263 true); 265 true);
264 if (ret) { 266 if (ret) {
265 DRM_ERROR("Error initialising bo driver; %d\n", ret); 267 DRM_ERROR("Error initialising bo driver; %d\n", ret);
@@ -329,7 +331,6 @@ int cirrus_bo_create(struct drm_device *dev, int size, int align,
329 } 331 }
330 332
331 cirrusbo->bo.bdev = &cirrus->ttm.bdev; 333 cirrusbo->bo.bdev = &cirrus->ttm.bdev;
332 cirrusbo->bo.bdev->dev_mapping = dev->anon_inode->i_mapping;
333 334
334 cirrus_ttm_placement(cirrusbo, TTM_PL_FLAG_VRAM | TTM_PL_FLAG_SYSTEM); 335 cirrus_ttm_placement(cirrusbo, TTM_PL_FLAG_VRAM | TTM_PL_FLAG_SYSTEM);
335 336
diff --git a/drivers/gpu/drm/mgag200/mgag200_ttm.c b/drivers/gpu/drm/mgag200/mgag200_ttm.c
index c1c2cb608ab3..5a00e90696de 100644
--- a/drivers/gpu/drm/mgag200/mgag200_ttm.c
+++ b/drivers/gpu/drm/mgag200/mgag200_ttm.c
@@ -259,7 +259,9 @@ int mgag200_mm_init(struct mga_device *mdev)
259 259
260 ret = ttm_bo_device_init(&mdev->ttm.bdev, 260 ret = ttm_bo_device_init(&mdev->ttm.bdev,
261 mdev->ttm.bo_global_ref.ref.object, 261 mdev->ttm.bo_global_ref.ref.object,
262 &mgag200_bo_driver, DRM_FILE_PAGE_OFFSET, 262 &mgag200_bo_driver,
263 dev->anon_inode->i_mapping,
264 DRM_FILE_PAGE_OFFSET,
263 true); 265 true);
264 if (ret) { 266 if (ret) {
265 DRM_ERROR("Error initialising bo driver; %d\n", ret); 267 DRM_ERROR("Error initialising bo driver; %d\n", ret);
@@ -324,7 +326,6 @@ int mgag200_bo_create(struct drm_device *dev, int size, int align,
324 } 326 }
325 327
326 mgabo->bo.bdev = &mdev->ttm.bdev; 328 mgabo->bo.bdev = &mdev->ttm.bdev;
327 mgabo->bo.bdev->dev_mapping = dev->anon_inode->i_mapping;
328 329
329 mgag200_ttm_placement(mgabo, TTM_PL_FLAG_VRAM | TTM_PL_FLAG_SYSTEM); 330 mgag200_ttm_placement(mgabo, TTM_PL_FLAG_VRAM | TTM_PL_FLAG_SYSTEM);
330 331
diff --git a/drivers/gpu/drm/nouveau/nouveau_gem.c b/drivers/gpu/drm/nouveau/nouveau_gem.c
index 5b193b898f5a..c90c0dc0afe8 100644
--- a/drivers/gpu/drm/nouveau/nouveau_gem.c
+++ b/drivers/gpu/drm/nouveau/nouveau_gem.c
@@ -228,8 +228,6 @@ nouveau_gem_ioctl_new(struct drm_device *dev, void *data,
228 struct nouveau_bo *nvbo = NULL; 228 struct nouveau_bo *nvbo = NULL;
229 int ret = 0; 229 int ret = 0;
230 230
231 drm->ttm.bdev.dev_mapping = drm->dev->anon_inode->i_mapping;
232
233 if (!pfb->memtype_valid(pfb, req->info.tile_flags)) { 231 if (!pfb->memtype_valid(pfb, req->info.tile_flags)) {
234 NV_ERROR(cli, "bad page flags: 0x%08x\n", req->info.tile_flags); 232 NV_ERROR(cli, "bad page flags: 0x%08x\n", req->info.tile_flags);
235 return -EINVAL; 233 return -EINVAL;
diff --git a/drivers/gpu/drm/nouveau/nouveau_ttm.c b/drivers/gpu/drm/nouveau/nouveau_ttm.c
index d45d50da978f..be3a3c9feafa 100644
--- a/drivers/gpu/drm/nouveau/nouveau_ttm.c
+++ b/drivers/gpu/drm/nouveau/nouveau_ttm.c
@@ -376,7 +376,9 @@ nouveau_ttm_init(struct nouveau_drm *drm)
376 376
377 ret = ttm_bo_device_init(&drm->ttm.bdev, 377 ret = ttm_bo_device_init(&drm->ttm.bdev,
378 drm->ttm.bo_global_ref.ref.object, 378 drm->ttm.bo_global_ref.ref.object,
379 &nouveau_bo_driver, DRM_FILE_PAGE_OFFSET, 379 &nouveau_bo_driver,
380 dev->anon_inode->i_mapping,
381 DRM_FILE_PAGE_OFFSET,
380 bits <= 32 ? true : false); 382 bits <= 32 ? true : false);
381 if (ret) { 383 if (ret) {
382 NV_ERROR(drm, "error initialising bo driver, %d\n", ret); 384 NV_ERROR(drm, "error initialising bo driver, %d\n", ret);
diff --git a/drivers/gpu/drm/qxl/qxl_object.c b/drivers/gpu/drm/qxl/qxl_object.c
index 7e20c21b0879..b95f144f0b49 100644
--- a/drivers/gpu/drm/qxl/qxl_object.c
+++ b/drivers/gpu/drm/qxl/qxl_object.c
@@ -82,7 +82,6 @@ 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 qdev->mman.bdev.dev_mapping = qdev->ddev->anon_inode->i_mapping;
86 if (kernel) 85 if (kernel)
87 type = ttm_bo_type_kernel; 86 type = ttm_bo_type_kernel;
88 else 87 else
diff --git a/drivers/gpu/drm/qxl/qxl_ttm.c b/drivers/gpu/drm/qxl/qxl_ttm.c
index 78cbc40a8efb..29c02e0e857f 100644
--- a/drivers/gpu/drm/qxl/qxl_ttm.c
+++ b/drivers/gpu/drm/qxl/qxl_ttm.c
@@ -493,7 +493,9 @@ int qxl_ttm_init(struct qxl_device *qdev)
493 /* No others user of address space so set it to 0 */ 493 /* No others user of address space so set it to 0 */
494 r = ttm_bo_device_init(&qdev->mman.bdev, 494 r = ttm_bo_device_init(&qdev->mman.bdev,
495 qdev->mman.bo_global_ref.ref.object, 495 qdev->mman.bo_global_ref.ref.object,
496 &qxl_bo_driver, DRM_FILE_PAGE_OFFSET, 0); 496 &qxl_bo_driver,
497 qdev->ddev->anon_inode->i_mapping,
498 DRM_FILE_PAGE_OFFSET, 0);
497 if (r) { 499 if (r) {
498 DRM_ERROR("failed initializing buffer object driver(%d).\n", r); 500 DRM_ERROR("failed initializing buffer object driver(%d).\n", r);
499 return r; 501 return r;
@@ -518,7 +520,6 @@ int qxl_ttm_init(struct qxl_device *qdev)
518 ((unsigned)num_io_pages * PAGE_SIZE) / (1024 * 1024)); 520 ((unsigned)num_io_pages * PAGE_SIZE) / (1024 * 1024));
519 DRM_INFO("qxl: %uM of Surface memory size\n", 521 DRM_INFO("qxl: %uM of Surface memory size\n",
520 (unsigned)qdev->surfaceram_size / (1024 * 1024)); 522 (unsigned)qdev->surfaceram_size / (1024 * 1024));
521 qdev->mman.bdev.dev_mapping = qdev->ddev->anon_inode->i_mapping;
522 r = qxl_ttm_debugfs_init(qdev); 523 r = qxl_ttm_debugfs_init(qdev);
523 if (r) { 524 if (r) {
524 DRM_ERROR("Failed to init debugfs\n"); 525 DRM_ERROR("Failed to init debugfs\n");
diff --git a/drivers/gpu/drm/radeon/radeon_object.c b/drivers/gpu/drm/radeon/radeon_object.c
index 6a7f3c6ffbbe..1375ff85b08a 100644
--- a/drivers/gpu/drm/radeon/radeon_object.c
+++ b/drivers/gpu/drm/radeon/radeon_object.c
@@ -145,7 +145,6 @@ int radeon_bo_create(struct radeon_device *rdev,
145 145
146 size = ALIGN(size, PAGE_SIZE); 146 size = ALIGN(size, PAGE_SIZE);
147 147
148 rdev->mman.bdev.dev_mapping = rdev->ddev->anon_inode->i_mapping;
149 if (kernel) { 148 if (kernel) {
150 type = ttm_bo_type_kernel; 149 type = ttm_bo_type_kernel;
151 } else if (sg) { 150 } else if (sg) {
diff --git a/drivers/gpu/drm/radeon/radeon_ttm.c b/drivers/gpu/drm/radeon/radeon_ttm.c
index 4663fbcfda28..2db486666d91 100644
--- a/drivers/gpu/drm/radeon/radeon_ttm.c
+++ b/drivers/gpu/drm/radeon/radeon_ttm.c
@@ -707,7 +707,9 @@ int radeon_ttm_init(struct radeon_device *rdev)
707 /* No others user of address space so set it to 0 */ 707 /* No others user of address space so set it to 0 */
708 r = ttm_bo_device_init(&rdev->mman.bdev, 708 r = ttm_bo_device_init(&rdev->mman.bdev,
709 rdev->mman.bo_global_ref.ref.object, 709 rdev->mman.bo_global_ref.ref.object,
710 &radeon_bo_driver, DRM_FILE_PAGE_OFFSET, 710 &radeon_bo_driver,
711 rdev->ddev->anon_inode->i_mapping,
712 DRM_FILE_PAGE_OFFSET,
711 rdev->need_dma32); 713 rdev->need_dma32);
712 if (r) { 714 if (r) {
713 DRM_ERROR("failed initializing buffer object driver(%d).\n", r); 715 DRM_ERROR("failed initializing buffer object driver(%d).\n", r);
@@ -745,7 +747,6 @@ int radeon_ttm_init(struct radeon_device *rdev)
745 } 747 }
746 DRM_INFO("radeon: %uM of GTT memory ready.\n", 748 DRM_INFO("radeon: %uM of GTT memory ready.\n",
747 (unsigned)(rdev->mc.gtt_size / (1024 * 1024))); 749 (unsigned)(rdev->mc.gtt_size / (1024 * 1024)));
748 rdev->mman.bdev.dev_mapping = rdev->ddev->anon_inode->i_mapping;
749 750
750 r = radeon_ttm_debugfs_init(rdev); 751 r = radeon_ttm_debugfs_init(rdev);
751 if (r) { 752 if (r) {
diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c
index a06651309388..79238d2face9 100644
--- a/drivers/gpu/drm/ttm/ttm_bo.c
+++ b/drivers/gpu/drm/ttm/ttm_bo.c
@@ -1449,6 +1449,7 @@ EXPORT_SYMBOL(ttm_bo_device_release);
1449int ttm_bo_device_init(struct ttm_bo_device *bdev, 1449int ttm_bo_device_init(struct ttm_bo_device *bdev,
1450 struct ttm_bo_global *glob, 1450 struct ttm_bo_global *glob,
1451 struct ttm_bo_driver *driver, 1451 struct ttm_bo_driver *driver,
1452 struct address_space *mapping,
1452 uint64_t file_page_offset, 1453 uint64_t file_page_offset,
1453 bool need_dma32) 1454 bool need_dma32)
1454{ 1455{
@@ -1470,7 +1471,7 @@ int ttm_bo_device_init(struct ttm_bo_device *bdev,
1470 0x10000000); 1471 0x10000000);
1471 INIT_DELAYED_WORK(&bdev->wq, ttm_bo_delayed_workqueue); 1472 INIT_DELAYED_WORK(&bdev->wq, ttm_bo_delayed_workqueue);
1472 INIT_LIST_HEAD(&bdev->ddestroy); 1473 INIT_LIST_HEAD(&bdev->ddestroy);
1473 bdev->dev_mapping = NULL; 1474 bdev->dev_mapping = mapping;
1474 bdev->glob = glob; 1475 bdev->glob = glob;
1475 bdev->need_dma32 = need_dma32; 1476 bdev->need_dma32 = need_dma32;
1476 bdev->val_seq = 0; 1477 bdev->val_seq = 0;
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
index df4b03e035bc..c35715f26f40 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
@@ -722,7 +722,9 @@ static int vmw_driver_load(struct drm_device *dev, unsigned long chipset)
722 722
723 ret = ttm_bo_device_init(&dev_priv->bdev, 723 ret = ttm_bo_device_init(&dev_priv->bdev,
724 dev_priv->bo_global_ref.ref.object, 724 dev_priv->bo_global_ref.ref.object,
725 &vmw_bo_driver, VMWGFX_FILE_PAGE_OFFSET, 725 &vmw_bo_driver,
726 dev->anon_inode->i_mapping,
727 VMWGFX_FILE_PAGE_OFFSET,
726 false); 728 false);
727 if (unlikely(ret != 0)) { 729 if (unlikely(ret != 0)) {
728 DRM_ERROR("Failed initializing TTM buffer object driver.\n"); 730 DRM_ERROR("Failed initializing TTM buffer object driver.\n");
@@ -969,7 +971,6 @@ static int vmw_driver_open(struct drm_device *dev, struct drm_file *file_priv)
969 goto out_no_shman; 971 goto out_no_shman;
970 972
971 file_priv->driver_priv = vmw_fp; 973 file_priv->driver_priv = vmw_fp;
972 dev_priv->bdev.dev_mapping = dev->anon_inode->i_mapping;
973 974
974 return 0; 975 return 0;
975 976
diff --git a/include/drm/drm_vma_manager.h b/include/drm/drm_vma_manager.h
index c18a593d1744..8cd402c73a5f 100644
--- a/include/drm/drm_vma_manager.h
+++ b/include/drm/drm_vma_manager.h
@@ -221,8 +221,8 @@ static inline __u64 drm_vma_node_offset_addr(struct drm_vma_offset_node *node)
221 * @file_mapping: Address space to unmap @node from 221 * @file_mapping: Address space to unmap @node from
222 * 222 *
223 * Unmap all userspace mappings for a given offset node. The mappings must be 223 * Unmap all userspace mappings for a given offset node. The mappings must be
224 * associated with the @file_mapping address-space. If no offset exists or 224 * associated with the @file_mapping address-space. If no offset exists
225 * the address-space is invalid, nothing is done. 225 * nothing is done.
226 * 226 *
227 * This call is unlocked. The caller must guarantee that drm_vma_offset_remove() 227 * This call is unlocked. The caller must guarantee that drm_vma_offset_remove()
228 * is not called on this node concurrently. 228 * is not called on this node concurrently.
@@ -230,7 +230,7 @@ static inline __u64 drm_vma_node_offset_addr(struct drm_vma_offset_node *node)
230static inline void drm_vma_node_unmap(struct drm_vma_offset_node *node, 230static inline void drm_vma_node_unmap(struct drm_vma_offset_node *node,
231 struct address_space *file_mapping) 231 struct address_space *file_mapping)
232{ 232{
233 if (file_mapping && drm_vma_node_has_offset(node)) 233 if (drm_vma_node_has_offset(node))
234 unmap_mapping_range(file_mapping, 234 unmap_mapping_range(file_mapping,
235 drm_vma_node_offset_addr(node), 235 drm_vma_node_offset_addr(node),
236 drm_vma_node_size(node) << PAGE_SHIFT, 1); 236 drm_vma_node_size(node) << PAGE_SHIFT, 1);
diff --git a/include/drm/ttm/ttm_bo_driver.h b/include/drm/ttm/ttm_bo_driver.h
index 32d34ebf0706..5d8aabe68f6c 100644
--- a/include/drm/ttm/ttm_bo_driver.h
+++ b/include/drm/ttm/ttm_bo_driver.h
@@ -747,6 +747,7 @@ extern int ttm_bo_device_release(struct ttm_bo_device *bdev);
747 * @bdev: A pointer to a struct ttm_bo_device to initialize. 747 * @bdev: A pointer to a struct ttm_bo_device to initialize.
748 * @glob: A pointer to an initialized struct ttm_bo_global. 748 * @glob: A pointer to an initialized struct ttm_bo_global.
749 * @driver: A pointer to a struct ttm_bo_driver set up by the caller. 749 * @driver: A pointer to a struct ttm_bo_driver set up by the caller.
750 * @mapping: The address space to use for this bo.
750 * @file_page_offset: Offset into the device address space that is available 751 * @file_page_offset: Offset into the device address space that is available
751 * for buffer data. This ensures compatibility with other users of the 752 * for buffer data. This ensures compatibility with other users of the
752 * address space. 753 * address space.
@@ -758,6 +759,7 @@ extern int ttm_bo_device_release(struct ttm_bo_device *bdev);
758extern int ttm_bo_device_init(struct ttm_bo_device *bdev, 759extern int ttm_bo_device_init(struct ttm_bo_device *bdev,
759 struct ttm_bo_global *glob, 760 struct ttm_bo_global *glob,
760 struct ttm_bo_driver *driver, 761 struct ttm_bo_driver *driver,
762 struct address_space *mapping,
761 uint64_t file_page_offset, bool need_dma32); 763 uint64_t file_page_offset, bool need_dma32);
762 764
763/** 765/**