Rev 5271 | Rev 6088 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 5271 | Rev 6084 | ||
---|---|---|---|
Line 102... | Line 102... | ||
102 | } |
102 | } |
Line 103... | Line 103... | ||
103 | 103 | ||
104 | dev->vma_offset_manager = vma_offset_manager; |
104 | dev->vma_offset_manager = vma_offset_manager; |
105 | drm_vma_offset_manager_init(vma_offset_manager, |
105 | drm_vma_offset_manager_init(vma_offset_manager, |
106 | DRM_FILE_PAGE_OFFSET_START, |
106 | DRM_FILE_PAGE_OFFSET_START, |
Line 107... | Line 107... | ||
107 | DRM_FILE_PAGE_OFFSET_SIZE); |
107 | DRM_FILE_PAGE_OFFSET_SIZE); |
108 | 108 | ||
Line 109... | Line 109... | ||
109 | return 0; |
109 | return 0; |
Line 153... | Line 153... | ||
153 | * Initialize an already allocated GEM object of the specified size with |
153 | * Initialize an already allocated GEM object of the specified size with |
154 | * no GEM provided backing store. Instead the caller is responsible for |
154 | * no GEM provided backing store. Instead the caller is responsible for |
155 | * backing the object and handling it. |
155 | * backing the object and handling it. |
156 | */ |
156 | */ |
157 | void drm_gem_private_object_init(struct drm_device *dev, |
157 | void drm_gem_private_object_init(struct drm_device *dev, |
158 | struct drm_gem_object *obj, size_t size) |
158 | struct drm_gem_object *obj, size_t size) |
159 | { |
159 | { |
160 | BUG_ON((size & (PAGE_SIZE - 1)) != 0); |
160 | BUG_ON((size & (PAGE_SIZE - 1)) != 0); |
Line 161... | Line 161... | ||
161 | 161 | ||
162 | obj->dev = dev; |
162 | obj->dev = dev; |
Line 251... | Line 251... | ||
251 | 251 | ||
Line 252... | Line 252... | ||
252 | // drm_vma_node_revoke(&obj->vma_node, filp->filp); |
252 | // drm_vma_node_revoke(&obj->vma_node, filp->filp); |
253 | 253 | ||
254 | if (dev->driver->gem_close_object) |
254 | if (dev->driver->gem_close_object) |
Line 255... | Line 255... | ||
255 | dev->driver->gem_close_object(obj, filp); |
255 | dev->driver->gem_close_object(obj, filp); |
256 | drm_gem_object_handle_unreference_unlocked(obj); |
256 | drm_gem_object_handle_unreference_unlocked(obj); |
257 | 257 | ||
Line 258... | Line 258... | ||
258 | return 0; |
258 | return 0; |
259 | } |
259 | } |
260 | EXPORT_SYMBOL(drm_gem_handle_delete); |
260 | EXPORT_SYMBOL(drm_gem_handle_delete); |
261 | 261 | ||
262 | /** |
262 | /** |
263 | * drm_gem_dumb_destroy - dumb fb callback helper for gem based drivers |
263 | * drm_gem_dumb_destroy - dumb fb callback helper for gem based drivers |
264 | * @file: drm file-private structure to remove the dumb handle from |
264 | * @file: drm file-private structure to remove the dumb handle from |
265 | * @dev: corresponding drm_device |
265 | * @dev: corresponding drm_device |
266 | * @handle: the dumb handle to remove |
266 | * @handle: the dumb handle to remove |
267 | * |
267 | * |
268 | * This implements the ->dumb_destroy kms driver callback for drivers which use |
268 | * This implements the ->dumb_destroy kms driver callback for drivers which use |
Line 286... | Line 286... | ||
286 | * before returning. Used to avoid races in establishing new handles when |
286 | * before returning. Used to avoid races in establishing new handles when |
287 | * importing an object from either an flink name or a dma-buf. |
287 | * importing an object from either an flink name or a dma-buf. |
288 | */ |
288 | */ |
289 | int |
289 | int |
290 | drm_gem_handle_create_tail(struct drm_file *file_priv, |
290 | drm_gem_handle_create_tail(struct drm_file *file_priv, |
291 | struct drm_gem_object *obj, |
291 | struct drm_gem_object *obj, |
292 | u32 *handlep) |
292 | u32 *handlep) |
293 | { |
293 | { |
294 | struct drm_device *dev = obj->dev; |
294 | struct drm_device *dev = obj->dev; |
295 | int ret; |
295 | int ret; |
Line 296... | Line 296... | ||
296 | 296 | ||
Line 341... | Line 341... | ||
341 | * Create a handle for this object. This adds a handle reference |
341 | * Create a handle for this object. This adds a handle reference |
342 | * to the object, which includes a regular reference count. Callers |
342 | * to the object, which includes a regular reference count. Callers |
343 | * will likely want to dereference the object afterwards. |
343 | * will likely want to dereference the object afterwards. |
344 | */ |
344 | */ |
345 | int drm_gem_handle_create(struct drm_file *file_priv, |
345 | int drm_gem_handle_create(struct drm_file *file_priv, |
346 | struct drm_gem_object *obj, |
346 | struct drm_gem_object *obj, |
347 | u32 *handlep) |
347 | u32 *handlep) |
348 | { |
348 | { |
349 | mutex_lock(&obj->dev->object_name_lock); |
349 | mutex_lock(&obj->dev->object_name_lock); |
Line 350... | Line 350... | ||
350 | 350 | ||
351 | return drm_gem_handle_create_tail(file_priv, obj, handlep); |
351 | return drm_gem_handle_create_tail(file_priv, obj, handlep); |
Line 460... | Line 460... | ||
460 | /* Make sure shmem keeps __GFP_DMA32 allocated pages in the |
460 | /* Make sure shmem keeps __GFP_DMA32 allocated pages in the |
461 | * correct region during swapin. Note that this requires |
461 | * correct region during swapin. Note that this requires |
462 | * __GFP_DMA32 to be set in mapping_gfp_mask(inode->i_mapping) |
462 | * __GFP_DMA32 to be set in mapping_gfp_mask(inode->i_mapping) |
463 | * so shmem can relocate pages during swapin if required. |
463 | * so shmem can relocate pages during swapin if required. |
464 | */ |
464 | */ |
465 | BUG_ON((mapping_gfp_mask(mapping) & __GFP_DMA32) && |
465 | BUG_ON(mapping_gfp_constraint(mapping, __GFP_DMA32) && |
466 | (page_to_pfn(p) >= 0x00100000UL)); |
466 | (page_to_pfn(p) >= 0x00100000UL)); |
467 | } |
467 | } |
Line 468... | Line 468... | ||
468 | 468 | ||
Line 600... | Line 600... | ||
600 | goto err; |
600 | goto err; |
Line 601... | Line 601... | ||
601 | 601 | ||
602 | obj->name = ret; |
602 | obj->name = ret; |
Line 603... | Line 603... | ||
603 | } |
603 | } |
604 | 604 | ||
Line 605... | Line 605... | ||
605 | args->name = (uint64_t) obj->name; |
605 | args->name = (uint64_t) obj->name; |
606 | ret = 0; |
606 | ret = 0; |
607 | 607 | ||
608 | err: |
608 | err: |
Line 731... | Line 731... | ||
731 | * Frees the object |
731 | * Frees the object |
732 | */ |
732 | */ |
733 | void |
733 | void |
734 | drm_gem_object_free(struct kref *kref) |
734 | drm_gem_object_free(struct kref *kref) |
735 | { |
735 | { |
- | 736 | struct drm_gem_object *obj = |
|
736 | struct drm_gem_object *obj = (struct drm_gem_object *) kref; |
737 | container_of(kref, struct drm_gem_object, refcount); |
737 | struct drm_device *dev = obj->dev; |
738 | struct drm_device *dev = obj->dev; |
Line 738... | Line 739... | ||
738 | 739 | ||
Line 739... | Line 740... | ||
739 | BUG_ON(!mutex_is_locked(&dev->struct_mutex)); |
740 | WARN_ON(!mutex_is_locked(&dev->struct_mutex)); |
740 | 741 | ||
741 | if (dev->driver->gem_free_object != NULL) |
742 | if (dev->driver->gem_free_object != NULL) |
742 | dev->driver->gem_free_object(obj); |
743 | dev->driver->gem_free_object(obj); |