rpms/kernel/devel linux-2.6-drm-radeon-fix-oops2.patch, NONE, 1.1 kernel.spec, 1.613, 1.614 nouveau-drm-update.patch, 1.1, 1.2
Dave Airlie (airlied)
fedora-extras-commits at redhat.com
Tue Apr 15 01:40:07 UTC 2008
- Previous message (by thread): rpms/gscan2pdf/devel .cvsignore, 1.13, 1.14 gscan2pdf.spec, 1.23, 1.24 sources, 1.13, 1.14
- Next message (by thread): rpms/ragel/devel .cvsignore, 1.7, 1.8 ragel.spec, 1.10, 1.11 sources, 1.7, 1.8
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Author: airlied
Update of /cvs/pkgs/rpms/kernel/devel
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv12502
Modified Files:
kernel.spec nouveau-drm-update.patch
Added Files:
linux-2.6-drm-radeon-fix-oops2.patch
Log Message:
* Tue Apr 15 2008 Dave Airlie <airlied at redhat.com>
- fix oops on nouveau startup and make build again (#442122)
- fix radeon oops seen on kerneloops (#442227)
linux-2.6-drm-radeon-fix-oops2.patch:
--- NEW FILE linux-2.6-drm-radeon-fix-oops2.patch ---
diff --git a/drivers/char/drm/radeon_cp.c b/drivers/char/drm/radeon_cp.c
index dd9bb45..12a870b 100644
--- a/drivers/char/drm/radeon_cp.c
+++ b/drivers/char/drm/radeon_cp.c
@@ -1513,10 +1513,10 @@ static void radeon_set_pcigart(drm_radeon_private_t * dev_priv, int on)
}
}
-static int radeon_do_init_cp(struct drm_device * dev, drm_radeon_init_t * init)
+static int radeon_do_init_cp(struct drm_device * dev, drm_radeon_init_t * init, struct drm_file *file_priv)
{
drm_radeon_private_t *dev_priv = dev->dev_private;
-
+ struct drm_radeon_master_private *master_priv = file_priv->master->driver_priv;
DRM_DEBUG("\n");
/* if we require new memory map but we don't have it fail */
@@ -1640,8 +1640,8 @@ static int radeon_do_init_cp(struct drm_device * dev, drm_radeon_init_t * init)
dev_priv->buffers_offset = init->buffers_offset;
dev_priv->gart_textures_offset = init->gart_textures_offset;
- dev_priv->sarea = drm_getsarea(dev);
- if (!dev_priv->sarea) {
+ master_priv->sarea = drm_getsarea(dev);
+ if (!master_priv->sarea) {
DRM_ERROR("could not find sarea!\n");
radeon_do_cleanup_cp(dev);
return -EINVAL;
@@ -1678,7 +1678,7 @@ static int radeon_do_init_cp(struct drm_device * dev, drm_radeon_init_t * init)
}
dev_priv->sarea_priv =
- (drm_radeon_sarea_t *) ((u8 *) dev_priv->sarea->handle +
+ (drm_radeon_sarea_t *) ((u8 *) master_priv->sarea->handle +
init->sarea_priv_offset);
#if __OS_HAS_AGP
@@ -1970,7 +1970,7 @@ int radeon_cp_init(struct drm_device *dev, void *data, struct drm_file *file_pri
case RADEON_INIT_CP:
case RADEON_INIT_R200_CP:
case RADEON_INIT_R300_CP:
- return radeon_do_init_cp(dev, init);
+ return radeon_do_init_cp(dev, init, file_priv);
case RADEON_CLEANUP_CP:
return radeon_do_cleanup_cp(dev);
}
diff --git a/drivers/char/drm/radeon_drv.c b/drivers/char/drm/radeon_drv.c
index 349ac3d..52b7c46 100644
--- a/drivers/char/drm/radeon_drv.c
+++ b/drivers/char/drm/radeon_drv.c
@@ -81,6 +81,8 @@ static struct drm_driver driver = {
.get_reg_ofs = drm_core_get_reg_ofs,
.ioctls = radeon_ioctls,
.dma_ioctl = radeon_cp_buffers,
+ .master_create = radeon_master_create,
+ .master_destroy = radeon_master_destroy,
.fops = {
.owner = THIS_MODULE,
.open = drm_open,
diff --git a/drivers/char/drm/radeon_drv.h b/drivers/char/drm/radeon_drv.h
index 20faa2a..f1c58dd 100644
--- a/drivers/char/drm/radeon_drv.h
+++ b/drivers/char/drm/radeon_drv.h
@@ -279,7 +279,6 @@ typedef struct drm_radeon_private {
unsigned long buffers_offset;
unsigned long gart_textures_offset;
- drm_local_map_t *sarea;
drm_local_map_t *cp_ring;
drm_local_map_t *ring_rptr;
drm_local_map_t *gart_textures;
@@ -309,6 +308,10 @@ typedef struct drm_radeon_private {
drm_local_map_t *mmio;
} drm_radeon_private_t;
+struct drm_radeon_master_private {
+ drm_local_map_t *sarea;
+};
+
typedef struct drm_radeon_buf_priv {
u32 age;
} drm_radeon_buf_priv_t;
@@ -395,6 +398,9 @@ extern int radeon_driver_open(struct drm_device * dev, struct drm_file * filp_pr
extern long radeon_compat_ioctl(struct file *filp, unsigned int cmd,
unsigned long arg);
+extern int radeon_master_create(struct drm_device *dev, struct drm_master *master);
+extern void radeon_master_destroy(struct drm_device *dev, struct drm_master *master);
+
/* r300_cmdbuf.c */
extern void r300_init_reg_flags(struct drm_device *dev);
diff --git a/drivers/char/drm/radeon_state.c b/drivers/char/drm/radeon_state.c
index 3cd3972..e79359b 100644
--- a/drivers/char/drm/radeon_state.c
+++ b/drivers/char/drm/radeon_state.c
@@ -1415,10 +1415,11 @@ static void radeon_cp_dispatch_swap(struct drm_device * dev)
ADVANCE_RING();
}
-static void radeon_cp_dispatch_flip(struct drm_device * dev)
+static void radeon_cp_dispatch_flip(struct drm_device * dev, struct drm_master *master)
{
drm_radeon_private_t *dev_priv = dev->dev_private;
- struct drm_sarea *sarea = (struct drm_sarea *) dev_priv->sarea->handle;
+ struct drm_radeon_master_private *master_priv = master->driver_priv;
+ struct drm_sarea *sarea = (struct drm_sarea *) master_priv->sarea->handle;
int offset = (dev_priv->sarea_priv->pfCurrentPage == 1)
? dev_priv->front_offset : dev_priv->back_offset;
RING_LOCALS;
@@ -2166,7 +2167,7 @@ static int radeon_cp_flip(struct drm_device *dev, void *data, struct drm_file *f
if (!dev_priv->page_flipping)
radeon_do_init_pageflip(dev);
- radeon_cp_dispatch_flip(dev);
+ radeon_cp_dispatch_flip(dev, file_priv->master);
COMMIT_RING();
return 0;
@@ -3120,15 +3121,42 @@ void radeon_driver_preclose(struct drm_device *dev, struct drm_file *file_priv)
void radeon_driver_lastclose(struct drm_device *dev)
{
- if (dev->dev_private) {
- drm_radeon_private_t *dev_priv = dev->dev_private;
+ radeon_do_release(dev);
+}
- if (dev_priv->sarea_priv &&
- dev_priv->sarea_priv->pfCurrentPage != 0)
- radeon_cp_dispatch_flip(dev);
- }
+int radeon_master_create(struct drm_device *dev, struct drm_master *master)
+{
+ /* radeon doesn't support multi-master yet so just workaround */
+ struct drm_radeon_master_private *master_priv;
+
+ master_priv = drm_calloc(1, sizeof(*master_priv), DRM_MEM_DRIVER);
+ if (!master_priv)
+ return -ENOMEM;
+
+ master->driver_priv = master_priv;
+ return 0;
+}
+
+void radeon_master_destroy(struct drm_device *dev, struct drm_master *master)
+{
+ struct drm_radeon_master_private *master_priv = master->driver_priv;
+ drm_radeon_private_t *dev_priv = dev->dev_private;
+
+ if (!master_priv)
+ return;
+
+ if (dev_priv->sarea_priv &&
+ dev_priv->sarea_priv->pfCurrentPage != 0)
+ radeon_cp_dispatch_flip(dev, master);
+
+ dev_priv->sarea_priv = NULL;
+
+ if (master_priv->sarea)
+ drm_rmmap(dev, master_priv->sarea);
+
+ drm_free(master_priv, sizeof(*master_priv), DRM_MEM_DRIVER);
+ master->driver_priv = NULL;
- radeon_do_release(dev);
}
int radeon_driver_open(struct drm_device *dev, struct drm_file *file_priv)
Index: kernel.spec
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/kernel.spec,v
retrieving revision 1.613
retrieving revision 1.614
diff -u -r1.613 -r1.614
--- kernel.spec 14 Apr 2008 04:04:52 -0000 1.613
+++ kernel.spec 15 Apr 2008 01:39:26 -0000 1.614
@@ -624,6 +624,7 @@
Patch1804: nouveau-drm-update.patch
Patch1806: linux-2.6-drm-i915-modeset.patch
Patch1807: linux-2.6-drm-radeon-fix-oops.patch
+Patch1808: linux-2.6-drm-radeon-fix-oops2.patch
# kludge to make ich9 e1000 work
Patch2000: linux-2.6-e1000-ich9.patch
@@ -1148,6 +1149,7 @@
ApplyPatch nouveau-drm-update.patch
ApplyPatch linux-2.6-drm-i915-modeset.patch
ApplyPatch linux-2.6-drm-radeon-fix-oops.patch
+ApplyPatch linux-2.6-drm-radeon-fix-oops2.patch
# ext4dev stable patch queue, slated for 2.6.25
#ApplyPatch linux-2.6-ext4-stable-queue.patch
@@ -1760,6 +1762,10 @@
%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 15 2008 Dave Airlie <airlied at redhat.com>
+- fix oops on nouveau startup and make build again (#442122)
+- fix radeon oops seen on kerneloops (#442227)
+
* Mon Apr 14 2008 Dave Airlie <airlied at redhat.com>
- update to latest nouveau drm from git
nouveau-drm-update.patch:
Index: nouveau-drm-update.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/nouveau-drm-update.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- nouveau-drm-update.patch 14 Apr 2008 04:04:52 -0000 1.1
+++ nouveau-drm-update.patch 15 Apr 2008 01:39:26 -0000 1.2
@@ -1,3 +1,21 @@
+commit 2ab03489c6a63b4861736f1904566c95098119bf
+Author: Dave Airlie <airlied at redhat.com>
+Date: Mon Apr 14 13:38:40 2008 +1000
+
+ nouveau: update to latest drm
+
+diff --git a/drivers/char/drm/drm_mm.c b/drivers/char/drm/drm_mm.c
+index 369a052..7d8b670 100644
+--- a/drivers/char/drm/drm_mm.c
++++ b/drivers/char/drm/drm_mm.c
+@@ -217,6 +217,7 @@ void drm_mm_put_block(struct drm_mm_node * cur)
+ drm_ctl_free(cur, sizeof(*cur), DRM_MEM_MM);
+ }
+ }
++EXPORT_SYMBOL(drm_mm_put_block);
+
+ struct drm_mm_node *drm_mm_search_free(const struct drm_mm * mm,
+ unsigned long size,
diff --git a/drivers/char/drm/nouveau_bo.c b/drivers/char/drm/nouveau_bo.c
index 9407bd3..ab3b23a 100644
--- a/drivers/char/drm/nouveau_bo.c
@@ -555,9 +573,36 @@
#define NV03_FIFO_CMD_JUMP 0x20000000
#define NV03_FIFO_CMD_JUMP_OFFSET_MASK 0x1ffffffc
diff --git a/drivers/char/drm/nouveau_state.c b/drivers/char/drm/nouveau_state.c
-index 39524ae..d29e0eb 100644
+index 39524ae..90d5748 100644
--- a/drivers/char/drm/nouveau_state.c
+++ b/drivers/char/drm/nouveau_state.c
+@@ -41,7 +41,7 @@ static int nouveau_init_card_mappings(struct drm_device *dev)
+ /* map the mmio regs */
+ ret = drm_addmap(dev, drm_get_resource_start(dev, 0),
+ drm_get_resource_len(dev, 0),
+- _DRM_REGISTERS, _DRM_READ_ONLY, &dev_priv->mmio);
++ _DRM_REGISTERS, _DRM_READ_ONLY|_DRM_DRIVER, &dev_priv->mmio);
+ if (ret) {
+ DRM_ERROR("Unable to initialize the mmio mapping (%d). "
+ "Please report your setup to " DRIVER_EMAIL "\n",
+@@ -60,7 +60,7 @@ static int nouveau_init_card_mappings(struct drm_device *dev)
+ ret = drm_addmap(dev,
+ drm_get_resource_start(dev, ramin_resource),
+ drm_get_resource_len(dev, ramin_resource),
+- _DRM_REGISTERS, _DRM_READ_ONLY,
++ _DRM_REGISTERS, _DRM_READ_ONLY|_DRM_DRIVER,
+ &dev_priv->ramin);
+ if (ret) {
+ DRM_ERROR("Failed to init RAMIN mapping, "
+@@ -75,7 +75,7 @@ static int nouveau_init_card_mappings(struct drm_device *dev)
+ ret = drm_addmap(dev,
+ drm_get_resource_start(dev, 0) + NV_RAMIN,
+ (1*1024*1024),
+- _DRM_REGISTERS, _DRM_READ_ONLY,
++ _DRM_REGISTERS, _DRM_READ_ONLY|_DRM_DRIVER,
+ &dev_priv->ramin);
+ if (ret) {
+ DRM_ERROR("Failed to map BAR0 PRAMIN: %d\n", ret);
@@ -384,6 +384,7 @@ static void nouveau_card_takedown(struct drm_device *dev)
nouveau_sgdma_takedown(dev);
@@ -566,6 +611,30 @@
nouveau_mem_close(dev);
engine->instmem.takedown(dev);
+@@ -416,6 +417,7 @@ int nouveau_firstopen(struct drm_device *dev)
+ struct device_node *dn;
+ #endif
+ int ret;
++
+ /* Map any PCI resources we need on the card */
+ ret = nouveau_init_card_mappings(dev);
+ if (ret) return ret;
+@@ -559,6 +561,15 @@ void nouveau_lastclose(struct drm_device *dev)
+ drm_mtrr_del(dev_priv->fb_mtrr, drm_get_resource_start(dev, 1),nouveau_mem_fb_amount(dev), DRM_MTRR_WC);
+ dev_priv->fb_mtrr=0;
+ }
++
++ if (dev_priv->ramin) {
++ drm_rmmap(dev, dev_priv->ramin);
++ dev_priv->ramin = NULL;
++ }
++ if (dev_priv->mmio) {
++ drm_rmmap(dev, dev_priv->mmio);
++ dev_priv->mmio = NULL;
++ }
+ }
+ }
+
diff --git a/drivers/char/drm/nv04_mc.c b/drivers/char/drm/nv04_mc.c
index 766f3a3..24c1f7b 100644
--- a/drivers/char/drm/nv04_mc.c
- Previous message (by thread): rpms/gscan2pdf/devel .cvsignore, 1.13, 1.14 gscan2pdf.spec, 1.23, 1.24 sources, 1.13, 1.14
- Next message (by thread): rpms/ragel/devel .cvsignore, 1.7, 1.8 ragel.spec, 1.10, 1.11 sources, 1.7, 1.8
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the fedora-extras-commits
mailing list