Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 78af08d9 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
* 'drm-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/airlied/drm-2.6:
  drm: Move a dereference below a NULL test
  fb/intelfb: conflict with DRM_I915 and hide by default
  drm/ttm: fix misplaced parentheses
  drm/via: Fix vblank IRQ on VIA hardware.
  drm: drm_gem, check kzalloc retval
  drm: drm_debugfs, check kmalloc retval
  drm/radeon: add some missing pci ids
parents a1cc1ba7 ecca0683
Loading
Loading
Loading
Loading
+4 −0
Original line number Original line Diff line number Diff line
@@ -101,6 +101,10 @@ int drm_debugfs_create_files(struct drm_info_list *files, int count,
			continue;
			continue;


		tmp = kmalloc(sizeof(struct drm_info_node), GFP_KERNEL);
		tmp = kmalloc(sizeof(struct drm_info_node), GFP_KERNEL);
		if (tmp == NULL) {
			ret = -1;
			goto fail;
		}
		ent = debugfs_create_file(files[i].name, S_IFREG | S_IRUGO,
		ent = debugfs_create_file(files[i].name, S_IFREG | S_IRUGO,
					  root, tmp, &drm_debugfs_fops);
					  root, tmp, &drm_debugfs_fops);
		if (!ent) {
		if (!ent) {
+10 −7
Original line number Original line Diff line number Diff line
@@ -134,26 +134,29 @@ drm_gem_object_alloc(struct drm_device *dev, size_t size)
	BUG_ON((size & (PAGE_SIZE - 1)) != 0);
	BUG_ON((size & (PAGE_SIZE - 1)) != 0);


	obj = kzalloc(sizeof(*obj), GFP_KERNEL);
	obj = kzalloc(sizeof(*obj), GFP_KERNEL);
	if (!obj)
		goto free;


	obj->dev = dev;
	obj->dev = dev;
	obj->filp = shmem_file_setup("drm mm object", size, VM_NORESERVE);
	obj->filp = shmem_file_setup("drm mm object", size, VM_NORESERVE);
	if (IS_ERR(obj->filp)) {
	if (IS_ERR(obj->filp))
		kfree(obj);
		goto free;
		return NULL;
	}


	kref_init(&obj->refcount);
	kref_init(&obj->refcount);
	kref_init(&obj->handlecount);
	kref_init(&obj->handlecount);
	obj->size = size;
	obj->size = size;
	if (dev->driver->gem_init_object != NULL &&
	if (dev->driver->gem_init_object != NULL &&
	    dev->driver->gem_init_object(obj) != 0) {
	    dev->driver->gem_init_object(obj) != 0) {
		fput(obj->filp);
		goto fput;
		kfree(obj);
		return NULL;
	}
	}
	atomic_inc(&dev->object_count);
	atomic_inc(&dev->object_count);
	atomic_add(obj->size, &dev->object_memory);
	atomic_add(obj->size, &dev->object_memory);
	return obj;
	return obj;
fput:
	fput(obj->filp);
free:
	kfree(obj);
	return NULL;
}
}
EXPORT_SYMBOL(drm_gem_object_alloc);
EXPORT_SYMBOL(drm_gem_object_alloc);


+2 −1
Original line number Original line Diff line number Diff line
@@ -489,7 +489,7 @@ int drm_put_minor(struct drm_minor **minor_p)
 */
 */
void drm_put_dev(struct drm_device *dev)
void drm_put_dev(struct drm_device *dev)
{
{
	struct drm_driver *driver = dev->driver;
	struct drm_driver *driver;
	struct drm_map_list *r_list, *list_temp;
	struct drm_map_list *r_list, *list_temp;


	DRM_DEBUG("\n");
	DRM_DEBUG("\n");
@@ -498,6 +498,7 @@ void drm_put_dev(struct drm_device *dev)
		DRM_ERROR("cleanup called no dev\n");
		DRM_ERROR("cleanup called no dev\n");
		return;
		return;
	}
	}
	driver = dev->driver;


	drm_vblank_cleanup(dev);
	drm_vblank_cleanup(dev);


+2 −2
Original line number Original line Diff line number Diff line
@@ -327,7 +327,7 @@ ssize_t ttm_bo_io(struct ttm_bo_device *bdev, struct file *filp,
		goto out_unref;
		goto out_unref;


	kmap_offset = dev_offset - bo->vm_node->start;
	kmap_offset = dev_offset - bo->vm_node->start;
	if (unlikely(kmap_offset) >= bo->num_pages) {
	if (unlikely(kmap_offset >= bo->num_pages)) {
		ret = -EFBIG;
		ret = -EFBIG;
		goto out_unref;
		goto out_unref;
	}
	}
@@ -401,7 +401,7 @@ ssize_t ttm_bo_fbdev_io(struct ttm_buffer_object *bo, const char __user *wbuf,
	bool dummy;
	bool dummy;


	kmap_offset = (*f_pos >> PAGE_SHIFT);
	kmap_offset = (*f_pos >> PAGE_SHIFT);
	if (unlikely(kmap_offset) >= bo->num_pages)
	if (unlikely(kmap_offset >= bo->num_pages))
		return -EFBIG;
		return -EFBIG;


	page_offset = *f_pos & ~PAGE_MASK;
	page_offset = *f_pos & ~PAGE_MASK;
+5 −1
Original line number Original line Diff line number Diff line
@@ -183,7 +183,7 @@ int via_enable_vblank(struct drm_device *dev, int crtc)
	}
	}


	status = VIA_READ(VIA_REG_INTERRUPT);
	status = VIA_READ(VIA_REG_INTERRUPT);
	VIA_WRITE(VIA_REG_INTERRUPT, status & VIA_IRQ_VBLANK_ENABLE);
	VIA_WRITE(VIA_REG_INTERRUPT, status | VIA_IRQ_VBLANK_ENABLE);


	VIA_WRITE8(0x83d4, 0x11);
	VIA_WRITE8(0x83d4, 0x11);
	VIA_WRITE8(0x83d5, VIA_READ8(0x83d5) | 0x30);
	VIA_WRITE8(0x83d5, VIA_READ8(0x83d5) | 0x30);
@@ -194,6 +194,10 @@ int via_enable_vblank(struct drm_device *dev, int crtc)
void via_disable_vblank(struct drm_device *dev, int crtc)
void via_disable_vblank(struct drm_device *dev, int crtc)
{
{
	drm_via_private_t *dev_priv = dev->dev_private;
	drm_via_private_t *dev_priv = dev->dev_private;
	u32 status;

	status = VIA_READ(VIA_REG_INTERRUPT);
	VIA_WRITE(VIA_REG_INTERRUPT, status & ~VIA_IRQ_VBLANK_ENABLE);


	VIA_WRITE8(0x83d4, 0x11);
	VIA_WRITE8(0x83d4, 0x11);
	VIA_WRITE8(0x83d5, VIA_READ8(0x83d5) & ~0x30);
	VIA_WRITE8(0x83d5, VIA_READ8(0x83d5) & ~0x30);
Loading