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 | |
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>
-rw-r--r-- | drivers/gpu/drm/ast/ast_ttm.c | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/bochs/bochs_mm.c | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/cirrus/cirrus_ttm.c | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/drm_fops.c | 25 | ||||
-rw-r--r-- | drivers/gpu/drm/drm_stub.c | 12 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/i915_gem.c | 3 | ||||
-rw-r--r-- | drivers/gpu/drm/mgag200/mgag200_ttm.c | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/nouveau/nouveau_gem.c | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/omapdrm/omap_gem.c | 34 | ||||
-rw-r--r-- | drivers/gpu/drm/qxl/qxl_object.c | 3 | ||||
-rw-r--r-- | drivers/gpu/drm/qxl/qxl_ttm.c | 3 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_object.c | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_ttm.c | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/vmwgfx/vmwgfx_drv.c | 2 | ||||
-rw-r--r-- | include/drm/drmP.h | 2 |
15 files changed, 44 insertions, 54 deletions
diff --git a/drivers/gpu/drm/ast/ast_ttm.c b/drivers/gpu/drm/ast/ast_ttm.c index 4ea9b17ac17a..2b491539e60c 100644 --- a/drivers/gpu/drm/ast/ast_ttm.c +++ b/drivers/gpu/drm/ast/ast_ttm.c | |||
@@ -324,7 +324,7 @@ int ast_bo_create(struct drm_device *dev, int size, int align, | |||
324 | } | 324 | } |
325 | 325 | ||
326 | astbo->bo.bdev = &ast->ttm.bdev; | 326 | astbo->bo.bdev = &ast->ttm.bdev; |
327 | astbo->bo.bdev->dev_mapping = dev->dev_mapping; | 327 | astbo->bo.bdev->dev_mapping = dev->anon_inode->i_mapping; |
328 | 328 | ||
329 | ast_ttm_placement(astbo, TTM_PL_FLAG_VRAM | TTM_PL_FLAG_SYSTEM); | 329 | ast_ttm_placement(astbo, TTM_PL_FLAG_VRAM | TTM_PL_FLAG_SYSTEM); |
330 | 330 | ||
diff --git a/drivers/gpu/drm/bochs/bochs_mm.c b/drivers/gpu/drm/bochs/bochs_mm.c index ce6858765b37..2d8546d7b4af 100644 --- a/drivers/gpu/drm/bochs/bochs_mm.c +++ b/drivers/gpu/drm/bochs/bochs_mm.c | |||
@@ -359,7 +359,7 @@ static int bochs_bo_create(struct drm_device *dev, int size, int align, | |||
359 | } | 359 | } |
360 | 360 | ||
361 | bochsbo->bo.bdev = &bochs->ttm.bdev; | 361 | bochsbo->bo.bdev = &bochs->ttm.bdev; |
362 | bochsbo->bo.bdev->dev_mapping = dev->dev_mapping; | 362 | bochsbo->bo.bdev->dev_mapping = dev->anon_inode->i_mapping; |
363 | 363 | ||
364 | bochs_ttm_placement(bochsbo, TTM_PL_FLAG_VRAM | TTM_PL_FLAG_SYSTEM); | 364 | bochs_ttm_placement(bochsbo, TTM_PL_FLAG_VRAM | TTM_PL_FLAG_SYSTEM); |
365 | 365 | ||
diff --git a/drivers/gpu/drm/cirrus/cirrus_ttm.c b/drivers/gpu/drm/cirrus/cirrus_ttm.c index 8b37c25ff9bd..efcbd70a8774 100644 --- a/drivers/gpu/drm/cirrus/cirrus_ttm.c +++ b/drivers/gpu/drm/cirrus/cirrus_ttm.c | |||
@@ -329,7 +329,7 @@ int cirrus_bo_create(struct drm_device *dev, int size, int align, | |||
329 | } | 329 | } |
330 | 330 | ||
331 | cirrusbo->bo.bdev = &cirrus->ttm.bdev; | 331 | cirrusbo->bo.bdev = &cirrus->ttm.bdev; |
332 | cirrusbo->bo.bdev->dev_mapping = dev->dev_mapping; | 332 | cirrusbo->bo.bdev->dev_mapping = dev->anon_inode->i_mapping; |
333 | 333 | ||
334 | cirrus_ttm_placement(cirrusbo, TTM_PL_FLAG_VRAM | TTM_PL_FLAG_SYSTEM); | 334 | cirrus_ttm_placement(cirrusbo, TTM_PL_FLAG_VRAM | TTM_PL_FLAG_SYSTEM); |
335 | 335 | ||
diff --git a/drivers/gpu/drm/drm_fops.c b/drivers/gpu/drm/drm_fops.c index 7f2af9aca038..147a84d9da9b 100644 --- a/drivers/gpu/drm/drm_fops.c +++ b/drivers/gpu/drm/drm_fops.c | |||
@@ -84,8 +84,6 @@ int drm_open(struct inode *inode, struct file *filp) | |||
84 | struct drm_minor *minor; | 84 | struct drm_minor *minor; |
85 | int retcode = 0; | 85 | int retcode = 0; |
86 | int need_setup = 0; | 86 | int need_setup = 0; |
87 | struct address_space *old_mapping; | ||
88 | struct address_space *old_imapping; | ||
89 | 87 | ||
90 | minor = idr_find(&drm_minors_idr, minor_id); | 88 | minor = idr_find(&drm_minors_idr, minor_id); |
91 | if (!minor) | 89 | if (!minor) |
@@ -99,16 +97,9 @@ int drm_open(struct inode *inode, struct file *filp) | |||
99 | 97 | ||
100 | if (!dev->open_count++) | 98 | if (!dev->open_count++) |
101 | need_setup = 1; | 99 | need_setup = 1; |
102 | mutex_lock(&dev->struct_mutex); | 100 | |
103 | old_imapping = inode->i_mapping; | 101 | /* share address_space across all char-devs of a single device */ |
104 | old_mapping = dev->dev_mapping; | 102 | filp->f_mapping = dev->anon_inode->i_mapping; |
105 | if (old_mapping == NULL) | ||
106 | dev->dev_mapping = &inode->i_data; | ||
107 | /* ihold ensures nobody can remove inode with our i_data */ | ||
108 | ihold(container_of(dev->dev_mapping, struct inode, i_data)); | ||
109 | inode->i_mapping = dev->dev_mapping; | ||
110 | filp->f_mapping = dev->dev_mapping; | ||
111 | mutex_unlock(&dev->struct_mutex); | ||
112 | 103 | ||
113 | retcode = drm_open_helper(inode, filp, dev); | 104 | retcode = drm_open_helper(inode, filp, dev); |
114 | if (retcode) | 105 | if (retcode) |
@@ -121,12 +112,6 @@ int drm_open(struct inode *inode, struct file *filp) | |||
121 | return 0; | 112 | return 0; |
122 | 113 | ||
123 | err_undo: | 114 | err_undo: |
124 | mutex_lock(&dev->struct_mutex); | ||
125 | filp->f_mapping = old_imapping; | ||
126 | inode->i_mapping = old_imapping; | ||
127 | iput(container_of(dev->dev_mapping, struct inode, i_data)); | ||
128 | dev->dev_mapping = old_mapping; | ||
129 | mutex_unlock(&dev->struct_mutex); | ||
130 | dev->open_count--; | 115 | dev->open_count--; |
131 | return retcode; | 116 | return retcode; |
132 | } | 117 | } |
@@ -434,7 +419,6 @@ int drm_lastclose(struct drm_device * dev) | |||
434 | 419 | ||
435 | drm_legacy_dma_takedown(dev); | 420 | drm_legacy_dma_takedown(dev); |
436 | 421 | ||
437 | dev->dev_mapping = NULL; | ||
438 | mutex_unlock(&dev->struct_mutex); | 422 | mutex_unlock(&dev->struct_mutex); |
439 | 423 | ||
440 | drm_legacy_dev_reinit(dev); | 424 | drm_legacy_dev_reinit(dev); |
@@ -549,9 +533,6 @@ int drm_release(struct inode *inode, struct file *filp) | |||
549 | } | 533 | } |
550 | } | 534 | } |
551 | 535 | ||
552 | BUG_ON(dev->dev_mapping == NULL); | ||
553 | iput(container_of(dev->dev_mapping, struct inode, i_data)); | ||
554 | |||
555 | /* drop the reference held my the file priv */ | 536 | /* drop the reference held my the file priv */ |
556 | if (file_priv->master) | 537 | if (file_priv->master) |
557 | drm_master_put(&file_priv->master); | 538 | drm_master_put(&file_priv->master); |
diff --git a/drivers/gpu/drm/drm_stub.c b/drivers/gpu/drm/drm_stub.c index f2903d7e3d8e..04c25cedd4c1 100644 --- a/drivers/gpu/drm/drm_stub.c +++ b/drivers/gpu/drm/drm_stub.c | |||
@@ -526,8 +526,15 @@ struct drm_device *drm_dev_alloc(struct drm_driver *driver, | |||
526 | mutex_init(&dev->struct_mutex); | 526 | mutex_init(&dev->struct_mutex); |
527 | mutex_init(&dev->ctxlist_mutex); | 527 | mutex_init(&dev->ctxlist_mutex); |
528 | 528 | ||
529 | if (drm_ht_create(&dev->map_hash, 12)) | 529 | dev->anon_inode = drm_fs_inode_new(); |
530 | if (IS_ERR(dev->anon_inode)) { | ||
531 | ret = PTR_ERR(dev->anon_inode); | ||
532 | DRM_ERROR("Cannot allocate anonymous inode: %d\n", ret); | ||
530 | goto err_free; | 533 | goto err_free; |
534 | } | ||
535 | |||
536 | if (drm_ht_create(&dev->map_hash, 12)) | ||
537 | goto err_inode; | ||
531 | 538 | ||
532 | ret = drm_ctxbitmap_init(dev); | 539 | ret = drm_ctxbitmap_init(dev); |
533 | if (ret) { | 540 | if (ret) { |
@@ -549,6 +556,8 @@ err_ctxbitmap: | |||
549 | drm_ctxbitmap_cleanup(dev); | 556 | drm_ctxbitmap_cleanup(dev); |
550 | err_ht: | 557 | err_ht: |
551 | drm_ht_remove(&dev->map_hash); | 558 | drm_ht_remove(&dev->map_hash); |
559 | err_inode: | ||
560 | drm_fs_inode_free(dev->anon_inode); | ||
552 | err_free: | 561 | err_free: |
553 | kfree(dev); | 562 | kfree(dev); |
554 | return NULL; | 563 | return NULL; |
@@ -576,6 +585,7 @@ void drm_dev_free(struct drm_device *dev) | |||
576 | 585 | ||
577 | drm_ctxbitmap_cleanup(dev); | 586 | drm_ctxbitmap_cleanup(dev); |
578 | drm_ht_remove(&dev->map_hash); | 587 | drm_ht_remove(&dev->map_hash); |
588 | drm_fs_inode_free(dev->anon_inode); | ||
579 | 589 | ||
580 | kfree(dev->devname); | 590 | kfree(dev->devname); |
581 | kfree(dev); | 591 | kfree(dev); |
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c index 3618bb0cda0a..928e15bb2cf7 100644 --- a/drivers/gpu/drm/i915/i915_gem.c +++ b/drivers/gpu/drm/i915/i915_gem.c | |||
@@ -1508,7 +1508,8 @@ i915_gem_release_mmap(struct drm_i915_gem_object *obj) | |||
1508 | if (!obj->fault_mappable) | 1508 | if (!obj->fault_mappable) |
1509 | return; | 1509 | return; |
1510 | 1510 | ||
1511 | drm_vma_node_unmap(&obj->base.vma_node, obj->base.dev->dev_mapping); | 1511 | drm_vma_node_unmap(&obj->base.vma_node, |
1512 | obj->base.dev->anon_inode->i_mapping); | ||
1512 | obj->fault_mappable = false; | 1513 | obj->fault_mappable = false; |
1513 | } | 1514 | } |
1514 | 1515 | ||
diff --git a/drivers/gpu/drm/mgag200/mgag200_ttm.c b/drivers/gpu/drm/mgag200/mgag200_ttm.c index adb5166a5dfd..c1c2cb608ab3 100644 --- a/drivers/gpu/drm/mgag200/mgag200_ttm.c +++ b/drivers/gpu/drm/mgag200/mgag200_ttm.c | |||
@@ -324,7 +324,7 @@ int mgag200_bo_create(struct drm_device *dev, int size, int align, | |||
324 | } | 324 | } |
325 | 325 | ||
326 | mgabo->bo.bdev = &mdev->ttm.bdev; | 326 | mgabo->bo.bdev = &mdev->ttm.bdev; |
327 | mgabo->bo.bdev->dev_mapping = dev->dev_mapping; | 327 | mgabo->bo.bdev->dev_mapping = dev->anon_inode->i_mapping; |
328 | 328 | ||
329 | mgag200_ttm_placement(mgabo, TTM_PL_FLAG_VRAM | TTM_PL_FLAG_SYSTEM); | 329 | mgag200_ttm_placement(mgabo, TTM_PL_FLAG_VRAM | TTM_PL_FLAG_SYSTEM); |
330 | 330 | ||
diff --git a/drivers/gpu/drm/nouveau/nouveau_gem.c b/drivers/gpu/drm/nouveau/nouveau_gem.c index 27c3fd89e8ce..5b193b898f5a 100644 --- a/drivers/gpu/drm/nouveau/nouveau_gem.c +++ b/drivers/gpu/drm/nouveau/nouveau_gem.c | |||
@@ -228,7 +228,7 @@ 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->dev_mapping; | 231 | drm->ttm.bdev.dev_mapping = drm->dev->anon_inode->i_mapping; |
232 | 232 | ||
233 | if (!pfb->memtype_valid(pfb, req->info.tile_flags)) { | 233 | if (!pfb->memtype_valid(pfb, req->info.tile_flags)) { |
234 | NV_ERROR(cli, "bad page flags: 0x%08x\n", req->info.tile_flags); | 234 | NV_ERROR(cli, "bad page flags: 0x%08x\n", req->info.tile_flags); |
diff --git a/drivers/gpu/drm/omapdrm/omap_gem.c b/drivers/gpu/drm/omapdrm/omap_gem.c index 5aec3e81fe24..c8d972763889 100644 --- a/drivers/gpu/drm/omapdrm/omap_gem.c +++ b/drivers/gpu/drm/omapdrm/omap_gem.c | |||
@@ -153,24 +153,24 @@ static struct { | |||
153 | static void evict_entry(struct drm_gem_object *obj, | 153 | static void evict_entry(struct drm_gem_object *obj, |
154 | enum tiler_fmt fmt, struct usergart_entry *entry) | 154 | enum tiler_fmt fmt, struct usergart_entry *entry) |
155 | { | 155 | { |
156 | if (obj->dev->dev_mapping) { | 156 | struct omap_gem_object *omap_obj = to_omap_bo(obj); |
157 | struct omap_gem_object *omap_obj = to_omap_bo(obj); | 157 | int n = usergart[fmt].height; |
158 | int n = usergart[fmt].height; | 158 | size_t size = PAGE_SIZE * n; |
159 | size_t size = PAGE_SIZE * n; | 159 | loff_t off = mmap_offset(obj) + |
160 | loff_t off = mmap_offset(obj) + | 160 | (entry->obj_pgoff << PAGE_SHIFT); |
161 | (entry->obj_pgoff << PAGE_SHIFT); | 161 | const int m = 1 + ((omap_obj->width << fmt) / PAGE_SIZE); |
162 | const int m = 1 + ((omap_obj->width << fmt) / PAGE_SIZE); | 162 | |
163 | if (m > 1) { | 163 | if (m > 1) { |
164 | int i; | 164 | int i; |
165 | /* if stride > than PAGE_SIZE then sparse mapping: */ | 165 | /* if stride > than PAGE_SIZE then sparse mapping: */ |
166 | for (i = n; i > 0; i--) { | 166 | for (i = n; i > 0; i--) { |
167 | unmap_mapping_range(obj->dev->dev_mapping, | 167 | unmap_mapping_range(obj->dev->anon_inode->i_mapping, |
168 | off, PAGE_SIZE, 1); | 168 | off, PAGE_SIZE, 1); |
169 | off += PAGE_SIZE * m; | 169 | off += PAGE_SIZE * m; |
170 | } | ||
171 | } else { | ||
172 | unmap_mapping_range(obj->dev->dev_mapping, off, size, 1); | ||
173 | } | 170 | } |
171 | } else { | ||
172 | unmap_mapping_range(obj->dev->anon_inode->i_mapping, | ||
173 | off, size, 1); | ||
174 | } | 174 | } |
175 | 175 | ||
176 | entry->obj = NULL; | 176 | entry->obj = NULL; |
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"); |
diff --git a/drivers/gpu/drm/radeon/radeon_object.c b/drivers/gpu/drm/radeon/radeon_object.c index ca79431b2c1c..6a7f3c6ffbbe 100644 --- a/drivers/gpu/drm/radeon/radeon_object.c +++ b/drivers/gpu/drm/radeon/radeon_object.c | |||
@@ -145,7 +145,7 @@ 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->dev_mapping; | 148 | rdev->mman.bdev.dev_mapping = rdev->ddev->anon_inode->i_mapping; |
149 | if (kernel) { | 149 | if (kernel) { |
150 | type = ttm_bo_type_kernel; | 150 | type = ttm_bo_type_kernel; |
151 | } else if (sg) { | 151 | } else if (sg) { |
diff --git a/drivers/gpu/drm/radeon/radeon_ttm.c b/drivers/gpu/drm/radeon/radeon_ttm.c index 60dfce889ecf..4663fbcfda28 100644 --- a/drivers/gpu/drm/radeon/radeon_ttm.c +++ b/drivers/gpu/drm/radeon/radeon_ttm.c | |||
@@ -745,7 +745,7 @@ int radeon_ttm_init(struct radeon_device *rdev) | |||
745 | } | 745 | } |
746 | DRM_INFO("radeon: %uM of GTT memory ready.\n", | 746 | DRM_INFO("radeon: %uM of GTT memory ready.\n", |
747 | (unsigned)(rdev->mc.gtt_size / (1024 * 1024))); | 747 | (unsigned)(rdev->mc.gtt_size / (1024 * 1024))); |
748 | rdev->mman.bdev.dev_mapping = rdev->ddev->dev_mapping; | 748 | rdev->mman.bdev.dev_mapping = rdev->ddev->anon_inode->i_mapping; |
749 | 749 | ||
750 | r = radeon_ttm_debugfs_init(rdev); | 750 | r = radeon_ttm_debugfs_init(rdev); |
751 | if (r) { | 751 | if (r) { |
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c index 0083cbf99edf..df4b03e035bc 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c | |||
@@ -969,7 +969,7 @@ static int vmw_driver_open(struct drm_device *dev, struct drm_file *file_priv) | |||
969 | goto out_no_shman; | 969 | goto out_no_shman; |
970 | 970 | ||
971 | file_priv->driver_priv = vmw_fp; | 971 | file_priv->driver_priv = vmw_fp; |
972 | dev_priv->bdev.dev_mapping = dev->dev_mapping; | 972 | dev_priv->bdev.dev_mapping = dev->anon_inode->i_mapping; |
973 | 973 | ||
974 | return 0; | 974 | return 0; |
975 | 975 | ||
diff --git a/include/drm/drmP.h b/include/drm/drmP.h index 04a7f31301f8..3227b716ffdf 100644 --- a/include/drm/drmP.h +++ b/include/drm/drmP.h | |||
@@ -1183,7 +1183,7 @@ struct drm_device { | |||
1183 | struct drm_sg_mem *sg; /**< Scatter gather memory */ | 1183 | struct drm_sg_mem *sg; /**< Scatter gather memory */ |
1184 | unsigned int num_crtcs; /**< Number of CRTCs on this device */ | 1184 | unsigned int num_crtcs; /**< Number of CRTCs on this device */ |
1185 | void *dev_private; /**< device private data */ | 1185 | void *dev_private; /**< device private data */ |
1186 | struct address_space *dev_mapping; | 1186 | struct inode *anon_inode; |
1187 | struct drm_sigdata sigdata; /**< For block_all_signals */ | 1187 | struct drm_sigdata sigdata; /**< For block_all_signals */ |
1188 | sigset_t sigmask; | 1188 | sigset_t sigmask; |
1189 | 1189 | ||