rpms/kernel/devel kernel.spec, 1.593, 1.594 linux-2.6-drm-i915-modeset.patch, 1.7, 1.8 nouveau-drm.patch, 1.10, 1.11

Dave Airlie (airlied) fedora-extras-commits at redhat.com
Tue Apr 8 05:55:45 UTC 2008


Author: airlied

Update of /cvs/pkgs/rpms/kernel/devel
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv27668

Modified Files:
	kernel.spec linux-2.6-drm-i915-modeset.patch nouveau-drm.patch 
Log Message:
* Tue Apr 08 2008 Dave Airlie <airlied at redhat.com>
- drm fixes, should fix radeon mappings problem and nouveau crashes



Index: kernel.spec
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/kernel.spec,v
retrieving revision 1.593
retrieving revision 1.594
diff -u -r1.593 -r1.594
--- kernel.spec	8 Apr 2008 04:21:12 -0000	1.593
+++ kernel.spec	8 Apr 2008 05:54:57 -0000	1.594
@@ -1758,6 +1758,9 @@
 %kernel_variant_files -a /%{image_install_path}/xen*-%{KVERREL}.xen -e /etc/ld.so.conf.d/kernelcap-%{KVERREL}.xen.conf %{with_xen} xen
 
 %changelog
+* Tue Apr 08 2008 Dave Airlie <airlied at redhat.com>
+- drm fixes, should fix radeon mappings problem and nouveau crashes
+
 * Tue Apr 08 2008 Chuck Ebbert <cebbert at redhat.com>
 - Remove pata_ali ATAPI DMA disable patch, now upstream.
 - Fix build of pvrusb2 driver.

linux-2.6-drm-i915-modeset.patch:

Index: linux-2.6-drm-i915-modeset.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/linux-2.6-drm-i915-modeset.patch,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- linux-2.6-drm-i915-modeset.patch	31 Mar 2008 16:57:48 -0000	1.7
+++ linux-2.6-drm-i915-modeset.patch	8 Apr 2008 05:54:57 -0000	1.8
@@ -6606,10 +6606,10 @@
  
  	mutex_lock(&dev->struct_mutex);
 diff --git a/drivers/char/drm/drm_stub.c b/drivers/char/drm/drm_stub.c
-index af0105c..4d7e7b3 100644
+index af0105c..3b797b5 100644
 --- a/drivers/char/drm/drm_stub.c
 +++ b/drivers/char/drm/drm_stub.c
-@@ -36,38 +36,127 @@
+@@ -36,38 +36,135 @@
  #include "drmP.h"
  #include "drm_core.h"
  
@@ -6693,6 +6693,7 @@
 +{
 +	struct drm_magic_entry *pt, *next;
 +	struct drm_device *dev = master->minor->dev;
++	struct drm_map_list *r_list, *list_t;
 +
 +	list_del(&master->head);
 +
@@ -6721,6 +6722,13 @@
 +		wake_up_interruptible(&master->lock.lock_queue);
 +	}
 +
++	list_for_each_entry_safe(r_list, list_t, &dev->maplist, head) {
++		if (!(r_list->map->flags & _DRM_DRIVER) && (r_list->master == master)) {
++			drm_rmmap_locked(dev, r_list->map);
++			r_list = NULL;
++		}
++	}
++
 +	drm_free(master, sizeof(*master), DRM_MEM_DRIVER);
 +}
 +
@@ -6744,7 +6752,7 @@
  	init_timer(&dev->timer);
  	mutex_init(&dev->struct_mutex);
  	mutex_init(&dev->ctxlist_mutex);
-@@ -83,6 +172,7 @@ static int drm_fill_in_dev(struct drm_device * dev, struct pci_dev *pdev,
+@@ -83,6 +180,7 @@ static int drm_fill_in_dev(struct drm_device * dev, struct pci_dev *pdev,
  	dev->hose = pdev->sysdata;
  #endif
  	dev->irq = pdev->irq;
@@ -6752,7 +6760,7 @@
  
  	if (drm_ht_create(&dev->map_hash, DRM_MAP_HASH_ORDER)) {
  		return -ENOMEM;
-@@ -129,10 +219,6 @@ static int drm_fill_in_dev(struct drm_device * dev, struct pci_dev *pdev,
+@@ -129,10 +227,6 @@ static int drm_fill_in_dev(struct drm_device * dev, struct pci_dev *pdev,
  		}
  	}
  
@@ -6763,7 +6771,7 @@
  	retcode = drm_ctxbitmap_init(dev);
  	if (retcode) {
  		DRM_ERROR("Cannot allocate memory for context bitmap.\n");
-@@ -159,48 +245,61 @@ error_out_unreg:
+@@ -159,48 +253,61 @@ error_out_unreg:
   * create the proc init entry via proc_init(). This routines assigns
   * minor numbers to secondary heads of multi-headed cards
   */
@@ -6859,7 +6867,7 @@
  	return ret;
  }
  
-@@ -229,28 +328,45 @@ int drm_get_dev(struct pci_dev *pdev, const struct pci_device_id *ent,
+@@ -229,28 +336,45 @@ int drm_get_dev(struct pci_dev *pdev, const struct pci_device_id *ent,
  
  	ret = pci_enable_device(pdev);
  	if (ret)
@@ -6914,7 +6922,7 @@
  
  /**
   * Put a device minor number.
-@@ -266,11 +382,6 @@ int drm_put_dev(struct drm_device * dev)
+@@ -266,11 +390,6 @@ int drm_put_dev(struct drm_device * dev)
  {
  	DRM_DEBUG("release primary %s\n", dev->driver->pci_driver.name);
  
@@ -6926,7 +6934,7 @@
  	if (dev->devname) {
  		drm_free(dev->devname, strlen(dev->devname) + 1,
  			 DRM_MEM_DRIVER);
-@@ -290,18 +401,18 @@ int drm_put_dev(struct drm_device * dev)
+@@ -290,18 +409,18 @@ int drm_put_dev(struct drm_device * dev)
   * last minor released.
   *
   */
@@ -7088,10 +7096,10 @@
 +	device_unregister(&minor->kdev);
  }
 diff --git a/drivers/char/drm/drm_vm.c b/drivers/char/drm/drm_vm.c
-index 6184b98..832c927 100644
+index 77576e3..a249023 100644
 --- a/drivers/char/drm/drm_vm.c
 +++ b/drivers/char/drm/drm_vm.c
-@@ -83,7 +83,7 @@ static pgprot_t drm_io_prot(uint32_t map_type, struct vm_area_struct *vma)
+@@ -94,7 +94,7 @@ static pgprot_t drm_dma_prot(uint32_t map_type, struct vm_area_struct *vma)
  static int drm_do_vm_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
  {
  	struct drm_file *priv = vma->vm_file->private_data;
@@ -7100,7 +7108,7 @@
  	struct drm_map *map = NULL;
  	struct drm_map_list *r_list;
  	struct drm_hash_item *hash;
-@@ -200,7 +200,7 @@ static int drm_do_vm_shm_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
+@@ -211,7 +211,7 @@ static int drm_do_vm_shm_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
  static void drm_vm_shm_close(struct vm_area_struct *vma)
  {
  	struct drm_file *priv = vma->vm_file->private_data;
@@ -7109,7 +7117,7 @@
  	struct drm_vma_entry *pt, *temp;
  	struct drm_map *map;
  	struct drm_map_list *r_list;
-@@ -282,7 +282,7 @@ static void drm_vm_shm_close(struct vm_area_struct *vma)
+@@ -293,7 +293,7 @@ static void drm_vm_shm_close(struct vm_area_struct *vma)
  static int drm_do_vm_dma_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
  {
  	struct drm_file *priv = vma->vm_file->private_data;
@@ -7118,7 +7126,7 @@
  	struct drm_device_dma *dma = dev->dma;
  	unsigned long offset;
  	unsigned long page_nr;
-@@ -317,7 +317,7 @@ static int drm_do_vm_sg_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
+@@ -328,7 +328,7 @@ static int drm_do_vm_sg_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
  {
  	struct drm_map *map = (struct drm_map *) vma->vm_private_data;
  	struct drm_file *priv = vma->vm_file->private_data;
@@ -7127,7 +7135,7 @@
  	struct drm_sg_mem *entry = dev->sg;
  	unsigned long offset;
  	unsigned long map_offset;
-@@ -398,7 +398,7 @@ static struct vm_operations_struct drm_vm_sg_ops = {
+@@ -409,7 +409,7 @@ static struct vm_operations_struct drm_vm_sg_ops = {
  static void drm_vm_open_locked(struct vm_area_struct *vma)
  {
  	struct drm_file *priv = vma->vm_file->private_data;
@@ -7136,7 +7144,7 @@
  	struct drm_vma_entry *vma_entry;
  
  	DRM_DEBUG("0x%08lx,0x%08lx\n",
-@@ -416,7 +416,7 @@ static void drm_vm_open_locked(struct vm_area_struct *vma)
+@@ -427,7 +427,7 @@ static void drm_vm_open_locked(struct vm_area_struct *vma)
  static void drm_vm_open(struct vm_area_struct *vma)
  {
  	struct drm_file *priv = vma->vm_file->private_data;
@@ -7145,7 +7153,7 @@
  
  	mutex_lock(&dev->struct_mutex);
  	drm_vm_open_locked(vma);
-@@ -434,7 +434,7 @@ static void drm_vm_open(struct vm_area_struct *vma)
+@@ -445,7 +445,7 @@ static void drm_vm_open(struct vm_area_struct *vma)
  static void drm_vm_close(struct vm_area_struct *vma)
  {
  	struct drm_file *priv = vma->vm_file->private_data;
@@ -7154,7 +7162,7 @@
  	struct drm_vma_entry *pt, *temp;
  
  	DRM_DEBUG("0x%08lx,0x%08lx\n",
-@@ -469,7 +469,7 @@ static int drm_mmap_dma(struct file *filp, struct vm_area_struct *vma)
+@@ -480,7 +480,7 @@ static int drm_mmap_dma(struct file *filp, struct vm_area_struct *vma)
  	struct drm_device_dma *dma;
  	unsigned long length = vma->vm_end - vma->vm_start;
  
@@ -7163,7 +7171,7 @@
  	dma = dev->dma;
  	DRM_DEBUG("start = 0x%lx, end = 0x%lx, page offset = 0x%lx\n",
  		  vma->vm_start, vma->vm_end, vma->vm_pgoff);
-@@ -539,7 +539,7 @@ EXPORT_SYMBOL(drm_core_get_reg_ofs);
+@@ -550,7 +550,7 @@ EXPORT_SYMBOL(drm_core_get_reg_ofs);
  static int drm_mmap_locked(struct file *filp, struct vm_area_struct *vma)
  {
  	struct drm_file *priv = filp->private_data;
@@ -7172,7 +7180,7 @@
  	struct drm_map *map = NULL;
  	unsigned long offset = 0;
  	struct drm_hash_item *hash;
-@@ -660,7 +660,7 @@ static int drm_mmap_locked(struct file *filp, struct vm_area_struct *vma)
+@@ -670,7 +670,7 @@ static int drm_mmap_locked(struct file *filp, struct vm_area_struct *vma)
  int drm_mmap(struct file *filp, struct vm_area_struct *vma)
  {
  	struct drm_file *priv = filp->private_data;
@@ -7181,7 +7189,7 @@
  	int ret;
  
  	mutex_lock(&dev->struct_mutex);
-@@ -679,8 +679,8 @@ EXPORT_SYMBOL(drm_mmap);
+@@ -689,8 +689,8 @@ EXPORT_SYMBOL(drm_mmap);
   * \c Pagefault method for buffer objects.
   *
   * \param vma Virtual memory area.
@@ -7192,7 +7200,7 @@
   *
   * It's important that pfns are inserted while holding the bo->mutex lock.
   * otherwise we might race with unmap_mapping_range() which is always
-@@ -692,7 +692,8 @@ EXPORT_SYMBOL(drm_mmap);
+@@ -702,7 +702,8 @@ EXPORT_SYMBOL(drm_mmap);
   * protected by the bo->mutex lock.
   */
  
@@ -7202,7 +7210,7 @@
  {
  	struct drm_buffer_object *bo = (struct drm_buffer_object *) vma->vm_private_data;
  	unsigned long page_offset;
-@@ -704,22 +705,25 @@ static int drm_bo_vm_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
+@@ -714,22 +715,25 @@ static int drm_bo_vm_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
  	unsigned long bus_base;
  	unsigned long bus_offset;
  	unsigned long bus_size;
@@ -7232,7 +7240,7 @@
  		goto out_unlock;
  	}
  
-@@ -734,7 +738,7 @@ static int drm_bo_vm_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
+@@ -744,7 +748,7 @@ static int drm_bo_vm_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
  			DRM_BO_FLAG_FORCE_MAPPABLE;
  		err = drm_bo_move_buffer(bo, new_flags, 0, 0);
  		if (err) {
@@ -7241,7 +7249,7 @@
  			goto out_unlock;
  		}
  	}
-@@ -743,12 +747,11 @@ static int drm_bo_vm_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
+@@ -753,12 +757,11 @@ static int drm_bo_vm_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
  				&bus_size);
  
  	if (err) {
@@ -7256,7 +7264,7 @@
  
  	if (bus_size) {
  		struct drm_mem_type_manager *man = &dev->bm.man[bo->mem.mem_type];
-@@ -761,7 +764,7 @@ static int drm_bo_vm_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
+@@ -771,7 +774,7 @@ static int drm_bo_vm_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
  		drm_ttm_fixup_caching(ttm);
  		page = drm_ttm_get_page(ttm, page_offset);
  		if (!page) {
@@ -7265,7 +7273,7 @@
  			goto out_unlock;
  		}
  		pfn = page_to_pfn(page);
-@@ -770,9 +773,9 @@ static int drm_bo_vm_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
+@@ -780,9 +783,9 @@ static int drm_bo_vm_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
  			drm_io_prot(_DRM_TTM, vma);
  	}
  
@@ -7277,7 +7285,7 @@
  		goto out_unlock;
  	}
  out_unlock:
-@@ -827,7 +830,7 @@ static void drm_bo_vm_close(struct vm_area_struct *vma)
+@@ -837,7 +840,7 @@ static void drm_bo_vm_close(struct vm_area_struct *vma)
  }
  
  static struct vm_operations_struct drm_bo_vm_ops = {
@@ -7354,7 +7362,7 @@
  		DRM_ERROR("Unsupported memory type %u\n", (unsigned)type);
  		return -EINVAL;
 diff --git a/drivers/char/drm/i915_dma.c b/drivers/char/drm/i915_dma.c
-index d2b7d3f..9ca655d 100644
+index f3d0dd1..9ca655d 100644
 --- a/drivers/char/drm/i915_dma.c
 +++ b/drivers/char/drm/i915_dma.c
 @@ -38,8 +38,8 @@
@@ -7788,11 +7796,11 @@
  {
 -	drm_i915_private_t *dev_priv = dev->dev_private;
 -	int i, planes, num_pages = dev_priv->sarea_priv->third_handle ? 3 : 2;
--
--	DRM_DEBUG("%s\n", __FUNCTION__);
 +	struct drm_i915_master_private *master_priv = dev->primary->master->driver_priv;
 +	int i, planes, num_pages;
  
+-	DRM_DEBUG("%s\n", __FUNCTION__);
+-
 -	for (i = 0, planes = 0; i < 2; i++)
 -		if (dev_priv->sarea_priv->pf_current_page & (0x3 << (2 * i))) {
 -			dev_priv->sarea_priv->pf_current_page =
@@ -7848,7 +7856,7 @@
  	drm_i915_hws_addr_t *hws = data;
  
  	if (!I915_NEED_GFX_HWS(dev))
-@@ -1540,84 +1556,6 @@ static int i915_set_status_page(struct drm_device *dev, void *data,
+@@ -1538,84 +1556,6 @@ static int i915_set_status_page(struct drm_device *dev, void *data,
  	return 0;
  }
  
@@ -7933,7 +7941,7 @@
  struct drm_ioctl_desc i915_ioctls[] = {
  	DRM_IOCTL_DEF(DRM_I915_INIT, i915_dma_init, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
  	DRM_IOCTL_DEF(DRM_I915_FLUSH, i915_flush_ioctl, DRM_AUTH),
-@@ -1654,8 +1596,3 @@ int i915_driver_device_is_agp(struct drm_device *dev)
+@@ -1658,8 +1598,3 @@ int i915_driver_device_is_agp(struct drm_device *dev)
  	return 1;
  }
  
@@ -8954,10 +8962,10 @@
  	int ret;
 diff --git a/drivers/char/drm/i915_init.c b/drivers/char/drm/i915_init.c
 new file mode 100644
-index 0000000..1234ac0
+index 0000000..4a53fc8
 --- /dev/null
 +++ b/drivers/char/drm/i915_init.c
-@@ -0,0 +1,408 @@
+@@ -0,0 +1,411 @@
 +/*
 + * Copyright (c) 2007 Intel Corporation
 + *   Jesse Barnes <jesse.barnes at intel.com>
@@ -9349,6 +9357,9 @@
 +{
 +	struct drm_i915_private *dev_priv = dev->dev_private;
 +
++	if (!dev_priv)
++		return;
++
 +	if (drm_core_check_feature(dev, DRIVER_MODESET))
 +		return;
 +
@@ -16322,7 +16333,7 @@
  		return ret;
  	}
 diff --git a/drivers/char/drm/radeon_state.c b/drivers/char/drm/radeon_state.c
-index 6f75512..8e4a494 100644
+index 6f75512..3cd3972 100644
 --- a/drivers/char/drm/radeon_state.c
 +++ b/drivers/char/drm/radeon_state.c
 @@ -3012,7 +3012,7 @@ static int radeon_cp_getparam(struct drm_device *dev, void *data, struct drm_fil
@@ -16334,3 +16345,20 @@
  		break;
  #endif
  	case RADEON_PARAM_GART_TEX_HANDLE:
+@@ -3067,12 +3067,14 @@ static int radeon_cp_setparam(struct drm_device *dev, void *data, struct drm_fil
+ 			DRM_DEBUG("color tiling disabled\n");
+ 			dev_priv->front_pitch_offset &= ~RADEON_DST_TILE_MACRO;
+ 			dev_priv->back_pitch_offset &= ~RADEON_DST_TILE_MACRO;
+-			dev_priv->sarea_priv->tiling_enabled = 0;
++			if (dev_priv->sarea_priv)
++				dev_priv->sarea_priv->tiling_enabled = 0;
+ 		} else if (sp->value == 1) {
+ 			DRM_DEBUG("color tiling enabled\n");
+ 			dev_priv->front_pitch_offset |= RADEON_DST_TILE_MACRO;
+ 			dev_priv->back_pitch_offset |= RADEON_DST_TILE_MACRO;
+-			dev_priv->sarea_priv->tiling_enabled = 1;
++			if (dev_priv->sarea_priv)
++				dev_priv->sarea_priv->tiling_enabled = 1;
+ 		}
+ 		break;
+ 	case RADEON_SETPARAM_PCIGART_LOCATION:

nouveau-drm.patch:

Index: nouveau-drm.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/nouveau-drm.patch,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- nouveau-drm.patch	20 Mar 2008 06:06:41 -0000	1.10
+++ nouveau-drm.patch	8 Apr 2008 05:54:57 -0000	1.11
@@ -6242,7 +6242,7 @@
 +		DRM_ERROR("Unable to initialize the mmio mapping (%d). "
 +			  "Please report your setup to " DRIVER_EMAIL "\n",
 +			  ret);
-+		return 1;
++		return -EINVAL;
 +	}
 +	DRM_DEBUG("regs mapped ok at 0x%lx\n", dev_priv->mmio->offset);
 +




More information about the fedora-extras-commits mailing list