Subversion Repositories Kolibri OS

Rev

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);