2005-10-25 16:28:38

by Badari Pulavarty

[permalink] [raw]
Subject: 2.6.14-rc5 GPF in radeon_cp_init_ring_buffer()

Hi,

On my EM64T machine, X gets killed every time due to
following GFP. Happens on mainline & -mm kernels.
Hasn't annoyed me enough to take a look on why ?

Known issue ?

Thanks,
Badari


general protection fault: 0000 [1] SMP
CPU 0
Modules linked in: radeon parport_pc lp parport autofs4 sunrpc dm_mirror
dm_mod ipv6 uhci_hcd ehci_hcd hw_random i2c_i801 i2c_core floppy
Pid: 3668, comm: X Not tainted 2.6.14-rc5 #6
RIP: 0010:[<ffffffff880f98a7>]
<ffffffff880f98a7>{:radeon:radeon_cp_init_ring_buffer+311}
RSP: 0018:ffff81011c9edd68 EFLAGS: 00010203
RAX: ffff81011bf7c000 RBX: ffff81011d566c00 RCX: ffffc20000104e00
RDX: 0000000000000000 RSI: ffff81011cd6b580 RDI: 000ffffc20000104
RBP: ffff81011cd09000 R08: 0000000006524000 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000000 R12: ffff81011d566c00
R13: ffff81011c9eddb8 R14: ffffffff880fa000 R15: 0000000040786440
FS: 00002aaaaaacb920(0000) GS:ffffffff805b0800(0000)
knlGS:0000000000000000
CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 00000000006fea48 CR3: 000000011c998000 CR4: 00000000000006e0
Process X (pid: 3668, threadinfo ffff81011c9ec000, task
ffff81011cc651c0)
Stack: ffff81011cd09000 0000000000000001 ffff81011cd09000
ffffffff880fad58
0000000000009f60 ffffffff8016027f 0000000000704d40
000000000000002c
ffff81011c827018 ffff81011c9ede08
Call Trace:<ffffffff880fad58>{:radeon:radeon_cp_init+3416}
<ffffffff8016027f>{generic_file_aio_write+143}
<ffffffff880fa000>{:radeon:radeon_cp_init+0}
<ffffffff802736f5>{drm_ioctl+405}
<ffffffff80197f34>{do_ioctl+116} <ffffffff80198212>{vfs_ioctl
+690}
<ffffffff80183908>{vfs_write+344} <ffffffff801982aa>{sys_ioctl
+106}
<ffffffff8010dc26>{system_call+126}

Code: 48 8b 14 f8 48 8b 83 30 01 00 00 48 8b 40 18 89 90 0c 07 00
RIP <ffffffff880f98a7>{:radeon:radeon_cp_init_ring_buffer+311} RSP
<ffff81011c9edd68>
<3>[drm:drm_release] *ERROR* Device busy: 1 0
mtrr: type mismatch for f0000000,1000000 old: write-back new: write-
combining
mtrr: type mismatch for f0000000,8000000 old: write-back new: write-
combining
iounmap: bad address ffffc20000373000
mtrr: type mismatch for f0000000,8000000 old: write-back new: write-
combining
general protection fault: 0000 [2] SMP
CPU 1
Modules linked in: radeon parport_pc lp parport autofs4 sunrpc dm_mirror
dm_mod ipv6 uhci_hcd ehci_hcd hw_random i2c_i801 i2c_core floppy
Pid: 3958, comm: X Not tainted 2.6.14-rc5 #6
RIP: 0010:[<ffffffff880f98a7>]
<ffffffff880f98a7>{:radeon:radeon_cp_init_ring_buffer+311}
RSP: 0018:ffff81012610fd68 EFLAGS: 00010203
RAX: ffff81011bf7c000 RBX: ffff81011d566c00 RCX: ffffc20000104e00
RDX: 0000000000000000 RSI: ffff81011cd6b480 RDI: 000ffffc20000104
RBP: ffff81011cd09000 R08: 0000000006d2c000 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000000 R12: ffff81011d566c00
R13: ffff81012610fdb8 R14: ffffffff880fa000 R15: 0000000040786440
FS: 00002aaaaaacb920(0000) GS:ffffffff805b0880(0000)
knlGS:0000000000000000
CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 0000000000471153 CR3: 0000000125fbd000 CR4: 00000000000006e0
Process X (pid: 3958, threadinfo ffff81012610e000, task
ffff810037d558c0)
Stack: ffff81011cd09000 0000000000000001 ffff81011cd09000
ffffffff880fad58
0000000000009e6b ffffffff8016027f 0000000000704d40
000000000000002c
0000000000000292 ffff81012610fe08
Call Trace:<ffffffff880fad58>{:radeon:radeon_cp_init+3416}
<ffffffff8016027f>{generic_file_aio_write+143}
<ffffffff880fa000>{:radeon:radeon_cp_init+0}
<ffffffff802736f5>{drm_ioctl+405}
<ffffffff80197f34>{do_ioctl+116} <ffffffff80198212>{vfs_ioctl
+690}
<ffffffff80183908>{vfs_write+344} <ffffffff801982aa>{sys_ioctl
+106}
<ffffffff8010dc26>{system_call+126}

Code: 48 8b 14 f8 48 8b 83 30 01 00 00 48 8b 40 18 89 90 0c 07 00
RIP <ffffffff880f98a7>{:radeon:radeon_cp_init_ring_buffer+311} RSP
<ffff81012610fd68>
<3>[drm:drm_release] *ERROR* Device busy: 1 0
mtrr: type mismatch for f0000000,1000000 old: write-back new: write-
combining
mtrr: type mismatch for f0000000,8000000 old: write-back new: write-
combining
iounmap: bad address ffffc20000373000
mtrr: type mismatch for f0000000,8000000 old: write-back new: write-
combining
general protection fault: 0000 [3] SMP
CPU 0
Modules linked in: radeon parport_pc lp parport autofs4 sunrpc dm_mirror
dm_mod ipv6 uhci_hcd ehci_hcd hw_random i2c_i801 i2c_core floppy
Pid: 4108, comm: X Not tainted 2.6.14-rc5 #6
RIP: 0010:[<ffffffff880f98a7>]
<ffffffff880f98a7>{:radeon:radeon_cp_init_ring_buffer+311}
RSP: 0018:ffff810123e11d68 EFLAGS: 00010203
RAX: ffff81011bf7c000 RBX: ffff81011d566c00 RCX: ffffc20000104e00
RDX: 0000000000000000 RSI: ffff81011cd6b3c0 RDI: 000ffffc20000104
RBP: ffff81011cd09000 R08: 0000000007534000 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000000 R12: ffff81011d566c00
R13: ffff810123e11db8 R14: ffffffff880fa000 R15: 0000000040786440
FS: 00002aaaaaacb920(0000) GS:ffffffff805b0800(0000)
knlGS:0000000000000000
CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 0000000000471153 CR3: 0000000126dbc000 CR4: 00000000000006e0
Process X (pid: 4108, threadinfo ffff810123e10000, task
ffff81011ca45880)
Stack: ffff81011cd09000 0000000000000001 ffff81011cd09000
ffffffff880fad58
0000000000009e6b ffffffff8016027f 0000000000704d40
000000000000002c
0000000000000292 ffff810123e11e08
Call Trace:<ffffffff880fad58>{:radeon:radeon_cp_init+3416}
<ffffffff8016027f>{generic_file_aio_write+143}
<ffffffff880fa000>{:radeon:radeon_cp_init+0}
<ffffffff802736f5>{drm_ioctl+405}
<ffffffff80197f34>{do_ioctl+116} <ffffffff80198212>{vfs_ioctl
+690}
<ffffffff80183908>{vfs_write+344} <ffffffff801982aa>{sys_ioctl
+106}
<ffffffff8010dc26>{system_call+126}

Code: 48 8b 14 f8 48 8b 83 30 01 00 00 48 8b 40 18 89 90 0c 07 00
RIP <ffffffff880f98a7>{:radeon:radeon_cp_init_ring_buffer+311} RSP
<ffff810123e11d68>
<3>[drm:drm_release] *ERROR* Device busy: 1 0



2005-10-25 21:25:50

by Ivan Kokshaysky

[permalink] [raw]
Subject: Re: 2.6.14-rc5 GPF in radeon_cp_init_ring_buffer()

On Tue, Oct 25, 2005 at 09:28:02AM -0700, Badari Pulavarty wrote:
> On my EM64T machine, X gets killed every time due to
> following GFP. Happens on mainline & -mm kernels.
> Hasn't annoyed me enough to take a look on why ?

I've seen similar failure on alpha.

Obviously, someone forgot to convert sg->handle stuff for
PCI gart case.

Ivan.

--- 2.6.14-rc5/drivers/char/drm/radeon_cp.c Fri Sep 23 23:39:48 2005
+++ linux/drivers/char/drm/radeon_cp.c Sat Sep 24 02:59:22 2005
@@ -1136,7 +1136,7 @@ static void radeon_cp_init_ring_buffer(
} else
#endif
ring_start = (dev_priv->cp_ring->offset
- - dev->sg->handle
+ - (unsigned long)dev->sg->virtual
+ dev_priv->gart_vm_start);

RADEON_WRITE( RADEON_CP_RB_BASE, ring_start );
@@ -1164,7 +1164,8 @@ static void radeon_cp_init_ring_buffer(
drm_sg_mem_t *entry = dev->sg;
unsigned long tmp_ofs, page_ofs;

- tmp_ofs = dev_priv->ring_rptr->offset - dev->sg->handle;
+ tmp_ofs = dev_priv->ring_rptr->offset -
+ (unsigned long)dev->sg->virtual;
page_ofs = tmp_ofs >> PAGE_SHIFT;

RADEON_WRITE( RADEON_CP_RB_RPTR_ADDR,
@@ -1491,8 +1492,8 @@ static int radeon_do_init_cp( drm_device
else
#endif
dev_priv->gart_buffers_offset = (dev->agp_buffer_map->offset
- - dev->sg->handle
- + dev_priv->gart_vm_start);
+ - (unsigned long)dev->sg->virtual
+ + dev_priv->gart_vm_start);

DRM_DEBUG( "dev_priv->gart_size %d\n",
dev_priv->gart_size );

2005-10-25 21:35:58

by Dave Airlie

[permalink] [raw]
Subject: Re: 2.6.14-rc5 GPF in radeon_cp_init_ring_buffer()

On 10/26/05, Ivan Kokshaysky <[email protected]> wrote:
> On Tue, Oct 25, 2005 at 09:28:02AM -0700, Badari Pulavarty wrote:
> > On my EM64T machine, X gets killed every time due to
> > following GFP. Happens on mainline & -mm kernels.
> > Hasn't annoyed me enough to take a look on why ?
>
> I've seen similar failure on alpha.
>
> Obviously, someone forgot to convert sg->handle stuff for
> PCI gart case.

No someone forgot that that patch needed to go in.. it's already
sitting in my -mm queue, after PCI Express support...

I forgot it would've broken normal PCI GART support..

I'll push it to Linus in a while.

Dave.
>
> Ivan.
>
> --- 2.6.14-rc5/drivers/char/drm/radeon_cp.c Fri Sep 23 23:39:48 2005
> +++ linux/drivers/char/drm/radeon_cp.c Sat Sep 24 02:59:22 2005
> @@ -1136,7 +1136,7 @@ static void radeon_cp_init_ring_buffer(
> } else
> #endif
> ring_start = (dev_priv->cp_ring->offset
> - - dev->sg->handle
> + - (unsigned long)dev->sg->virtual
> + dev_priv->gart_vm_start);
>
> RADEON_WRITE( RADEON_CP_RB_BASE, ring_start );
> @@ -1164,7 +1164,8 @@ static void radeon_cp_init_ring_buffer(
> drm_sg_mem_t *entry = dev->sg;
> unsigned long tmp_ofs, page_ofs;
>
> - tmp_ofs = dev_priv->ring_rptr->offset - dev->sg->handle;
> + tmp_ofs = dev_priv->ring_rptr->offset -
> + (unsigned long)dev->sg->virtual;
> page_ofs = tmp_ofs >> PAGE_SHIFT;
>
> RADEON_WRITE( RADEON_CP_RB_RPTR_ADDR,
> @@ -1491,8 +1492,8 @@ static int radeon_do_init_cp( drm_device
> else
> #endif
> dev_priv->gart_buffers_offset = (dev->agp_buffer_map->offset
> - - dev->sg->handle
> - + dev_priv->gart_vm_start);
> + - (unsigned long)dev->sg->virtual
> + + dev_priv->gart_vm_start);
>
> DRM_DEBUG( "dev_priv->gart_size %d\n",
> dev_priv->gart_size );
> -
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/
>