2003-08-08 16:33:00

by Karol 'grzywacz' Nowak

[permalink] [raw]
Subject: an oops in 2.6-test2 (oops)

Hi,

I've noticed a bug in Linux version 2.6-test2 and I'm able to reproduce it. It
occures while using xmms' "Add directory to playlist". The only module that
was loaded at that time was 'rtc' and the kernel has been compiled with gcc
3.3.1 (20030626 (Debian prerelease)). I have an AMD Athlon XP 1500+, 512MB of
RAM and MSI motherboard with VIA KT133A. I hope that the following ksymoops
output will be helpfull:


ksymoops 2.4.9 on i686 2.6.0-test2. Options used
-V (default)
-k /proc/ksyms (default)
-l /proc/modules (default)
-o /lib/modules/2.6.0-test2/ (default)
-m /usr/src/linux/System.map (default)

Error (regular_file): read_ksyms stat /proc/ksyms failed
No modules in ksyms, skipping objects
No ksyms, skipping lsmod
Unable to handle kernel NULL pointer dereference at virtual address 00000000
c0162b8a
*pde = 00000000
Oops: 0000 [#1]
CPU: 0
EIP: 0060:[<c0162b8a>] Not tainted
EFLAGS: 00210286
eax: c153f338 ebx: 0000ff86 ecx: c1671d90 edx: 00000000
esi: dfdd9200 edi: c153f338 ebp: dfdd9200 esp: dbc1be34
ds: 007b es: 007b ss: 0068
Stack: 00000000 dbc1a000 da6cd480 0000ff86 c0163210 dfdd9200 c153f338 0000ff86
c153f338 0000ff86 da6cd480 dfdd9200 da6cd480 c018563b dfdd9200 0000ff86
df74a12c fffffff4 df74be78 df74be10 c0157568 df74be10 da6cd480 dbc1bf38
Call Trace:
[<c0163210>] iget_locked+0x50/0xc0
[<c018563b>] ext3_lookup+0x6b/0xd0
[<c0157568>] real_lookup+0xc8/0xf0
[<c0157806>] do_lookup+0x96/0xb0
[<c0157cb0>] link_path_walk+0x490/0x890
[<c0158589>] __user_walk+0x49/0x60
[<c01537df>] vfs_stat+0x1f/0x60
[<c0153e9b>] sys_stat64+0x1b/0x40
[<c0109087>] syscall_call+0x7/0xb
Code: 0f 18 02 90 39 59 18 89 c8 74 0f 85 d2 89 d1 75 ed 31 c0 83


>>EIP; c0162b8a <find_inode_fast+1a/60> <=====

>>eax; c153f338 <_end+114bd00/3fc0a9c8>
>>ecx; c1671d90 <_end+127e758/3fc0a9c8>
>>esi; dfdd9200 <_end+1f9e5bc8/3fc0a9c8>
>>edi; c153f338 <_end+114bd00/3fc0a9c8>
>>ebp; dfdd9200 <_end+1f9e5bc8/3fc0a9c8>
>>esp; dbc1be34 <_end+1b8287fc/3fc0a9c8>

Trace; c0163210 <iget_locked+50/c0>
Trace; c018563b <ext3_lookup+6b/d0>
Trace; c0157568 <real_lookup+c8/f0>
Trace; c0157806 <do_lookup+96/b0>
Trace; c0157cb0 <link_path_walk+490/890>
Trace; c0158589 <__user_walk+49/60>
Trace; c01537df <vfs_stat+1f/60>
Trace; c0153e9b <sys_stat64+1b/40>
Trace; c0109087 <syscall_call+7/b>

Code; c0162b8a <find_inode_fast+1a/60>
00000000 <_EIP>:
Code; c0162b8a <find_inode_fast+1a/60> <=====
0: 0f 18 02 prefetchnta (%edx) <=====
Code; c0162b8d <find_inode_fast+1d/60>
3: 90 nop
Code; c0162b8e <find_inode_fast+1e/60>
4: 39 59 18 cmp %ebx,0x18(%ecx)
Code; c0162b91 <find_inode_fast+21/60>
7: 89 c8 mov %ecx,%eax
Code; c0162b93 <find_inode_fast+23/60>
9: 74 0f je 1a <_EIP+0x1a>
Code; c0162b95 <find_inode_fast+25/60>
b: 85 d2 test %edx,%edx
Code; c0162b97 <find_inode_fast+27/60>
d: 89 d1 mov %edx,%ecx
Code; c0162b99 <find_inode_fast+29/60>
f: 75 ed jne fffffffe <_EIP+0xfffffffe>
Code; c0162b9b <find_inode_fast+2b/60>
11: 31 c0 xor %eax,%eax
Code; c0162b9d <find_inode_fast+2d/60>
13: 83 00 00 addl $0x0,(%eax)


1 warning and 1 error issued. Results may not be reliable.


--
Karol Nowak



2003-08-12 12:08:51

by Marco d'Itri

[permalink] [raw]
Subject: Re: an oops in 2.6-test2 (oops)

On Aug 08, Karol 'grzywacz' Nowak <[email protected]> wrote:

>I've noticed a bug in Linux version 2.6-test2 and I'm able to reproduce it. It
>occures while using xmms' "Add directory to playlist". The only module that

I have been getting a few of these too (now with -test3), usually
reproducibles:


ksymoops 2.4.8 on i686 2.6.0-test3. Options used
-V (default)
-k /proc/ksyms (default)
-l /proc/modules (default)
-o /lib/modules/2.6.0-test3/ (default)
-m /boot/System.map-2.6.0-test3 (default)

Warning: You did not tell me where to find symbol information. I will
assume that the log matches the kernel and modules that are running
right now and I'll use the default options above for symbol resolution.
If the current kernel and/or modules do not match the log, you can get
more accurate output by telling me the kernel version and where to find
map, modules, ksyms etc. ksymoops -h explains the options.

Error (regular_file): read_ksyms stat /proc/ksyms failed
No modules in ksyms, skipping objects
No ksyms, skipping lsmod
Aug 12 12:58:55 wonderland kernel: Unable to handle kernel NULL pointer dereference at virtual address 00000000
Aug 12 12:58:55 wonderland kernel: c015c80a
Aug 12 12:58:55 wonderland kernel: *pde = 00000000
Aug 12 12:58:55 wonderland kernel: Oops: 0000 [#1]
Aug 12 12:58:55 wonderland kernel: CPU: 0
Aug 12 12:58:55 wonderland kernel: EIP: 0060:[<c015c80a>] Not tainted
Using defaults from ksymoops -t elf32-i386 -a i386
Aug 12 12:58:55 wonderland kernel: EFLAGS: 00010282
Aug 12 12:58:55 wonderland kernel: eax: c1539a0c ebx: 0005fdd5 ecx: d4bcb710 edx: 00000000
Aug 12 12:58:55 wonderland kernel: esi: df586a00 edi: c1539a0c ebp: dc753e48 esp: dc753e38
Aug 12 12:58:55 wonderland kernel: ds: 007b es: 007b ss: 0068
Aug 12 12:58:55 wonderland kernel: Stack: d2a61600 0005fdd5 0005fdd5 df586a00 dc753e6c c015cd0b df586a00 c1539a0c
Aug 12 12:58:55 wonderland kernel: 0005fdd5 c1539a0c 0005fdd5 d25ca600 df586a00 dc753e8c c017bc77 df586a00
Aug 12 12:58:55 wonderland kernel: 0005fdd5 d25da030 fffffff4 d2d7d9f8 d2d7d990 dc753eb0 c0152740 d2d7d990
Aug 12 12:58:55 wonderland kernel: Call Trace:
Aug 12 12:58:55 wonderland kernel: [<c015cd0b>] iget_locked+0x4b/0xa0
Aug 12 12:58:55 wonderland kernel: [<c017bc77>] ext3_lookup+0x67/0xc0
Aug 12 12:58:55 wonderland kernel: [<c0152740>] real_lookup+0xc0/0xf0
Aug 12 12:58:55 wonderland kernel: [<c0152984>] do_lookup+0x84/0x90
Aug 12 12:58:55 wonderland kernel: [<c0152d84>] link_path_walk+0x3f4/0x760
Aug 12 12:58:55 wonderland kernel: [<c0153954>] open_namei+0x84/0x3d0
Aug 12 12:58:56 wonderland kernel: [<c013c8c2>] free_pgtables+0x82/0xa0
Aug 12 12:58:56 wonderland kernel: [<c0145f9c>] filp_open+0x3c/0x60
Aug 12 12:58:56 wonderland kernel: [<c0146383>] sys_open+0x53/0x90
Aug 12 12:58:56 wonderland kernel: [<c01090b3>] syscall_call+0x7/0xb
Aug 12 12:58:56 wonderland kernel: Code: 0f 18 02 90 39 59 18 89 c8 74 10 85 d2 89 d1 75 ed 31 c0 83


>>EIP; c015c80a <find_inode_fast+1a/60> <=====

>>eax; c1539a0c <__crc_lock_may_read+ec59e/101eac>
>>ecx; d4bcb710 <__crc_xfrm_state_update+ef9/5bd312>
>>esi; df586a00 <__crc_inet_family_ops+bcd4b/142f72>
>>edi; c1539a0c <__crc_lock_may_read+ec59e/101eac>
>>ebp; dc753e48 <__crc_zlib_deflateInit2_+59274/71ff7>
>>esp; dc753e38 <__crc_zlib_deflateInit2_+59264/71ff7>

Trace; c015cd0b <iget_locked+4b/a0>
Trace; c017bc77 <ext3_lookup+67/c0>
Trace; c0152740 <real_lookup+c0/f0>
Trace; c0152984 <do_lookup+84/90>
Trace; c0152d84 <link_path_walk+3f4/760>
Trace; c0153954 <open_namei+84/3d0>
Trace; c013c8c2 <free_pgtables+82/a0>
Trace; c0145f9c <filp_open+3c/60>
Trace; c0146383 <sys_open+53/90>
Trace; c01090b3 <syscall_call+7/b>

Code; c015c80a <find_inode_fast+1a/60>
00000000 <_EIP>:
Code; c015c80a <find_inode_fast+1a/60> <=====
0: 0f 18 02 prefetchnta (%edx) <=====
Code; c015c80d <find_inode_fast+1d/60>
3: 90 nop
Code; c015c80e <find_inode_fast+1e/60>
4: 39 59 18 cmp %ebx,0x18(%ecx)
Code; c015c811 <find_inode_fast+21/60>
7: 89 c8 mov %ecx,%eax
Code; c015c813 <find_inode_fast+23/60>
9: 74 10 je 1b <_EIP+0x1b>
Code; c015c815 <find_inode_fast+25/60>
b: 85 d2 test %edx,%edx
Code; c015c817 <find_inode_fast+27/60>
d: 89 d1 mov %edx,%ecx
Code; c015c819 <find_inode_fast+29/60>
f: 75 ed jne fffffffe <_EIP+0xfffffffe>
Code; c015c81b <find_inode_fast+2b/60>
11: 31 c0 xor %eax,%eax
Code; c015c81d <find_inode_fast+2d/60>
13: 83 00 00 addl $0x0,(%eax)


1 warning and 1 error issued. Results may not be reliable.

--
ciao, |
Marco | [1262 arSPQOzWtTbXY]

2003-08-16 11:27:35

by Marco d'Itri

[permalink] [raw]
Subject: Re: an oops in 2.6-test2 (oops)

On Aug 12, Marco d'Itri <[email protected]> wrote:

>I have been getting a few of these too (now with -test3), usually
>reproducibles:
I've got another one yesterday:


ksymoops 2.4.8 on i686 2.6.0-test3. Options used
-V (default)
-k /proc/ksyms (default)
-l /proc/modules (default)
-o /lib/modules/2.6.0-test3/ (default)
-m /boot/System.map-2.6.0-test3 (default)

Warning: You did not tell me where to find symbol information. I will
assume that the log matches the kernel and modules that are running
right now and I'll use the default options above for symbol resolution.
If the current kernel and/or modules do not match the log, you can get
more accurate output by telling me the kernel version and where to find
map, modules, ksyms etc. ksymoops -h explains the options.

Error (regular_file): read_ksyms stat /proc/ksyms failed
No modules in ksyms, skipping objects
No ksyms, skipping lsmod
Aug 15 14:35:44 wonderland kernel: 8139too Fast Ethernet driver 0.9.26
Aug 16 07:26:51 wonderland kernel: Unable to handle kernel NULL pointer dereference at virtual address 00000000
Aug 16 07:26:51 wonderland kernel: c015c80a
Aug 16 07:26:51 wonderland kernel: *pde = 00000000
Aug 16 07:26:51 wonderland kernel: Oops: 0000 [#1]
Aug 16 07:26:51 wonderland kernel: CPU: 0
Aug 16 07:26:51 wonderland kernel: EIP: 0060:[<c015c80a>] Not tainted
Using defaults from ksymoops -t elf32-i386 -a i386
Aug 16 07:26:51 wonderland kernel: EFLAGS: 00010286
Aug 16 07:26:51 wonderland kernel: eax: c1521110 ebx: 0005fa96 ecx: d19b1b50 edx: 00000000
Aug 16 07:26:51 wonderland kernel: esi: df60aa00 edi: c1521110 ebp: cd54de2c esp: cd54de1c
Aug 16 07:26:51 wonderland kernel: ds: 007b es: 007b ss: 0068
Aug 16 07:26:51 wonderland kernel: Stack: df530300 0005fa96 0005fa96 df60aa00 cd54de50 c015cd0b df60aa00 c1521110
Aug 16 07:26:51 wonderland kernel: 0005fa96 c1521110 0005fa96 c615e300 df60aa00 cd54de70 c017bc77 df60aa00
Aug 16 07:26:51 wonderland kernel: 0005fa96 df4facec fffffff4 df5c54b8 df5c5450 cd54de94 c0152740 df5c5450
Aug 16 07:26:51 wonderland kernel: Call Trace:
Aug 16 07:26:51 wonderland kernel: [<c015cd0b>] iget_locked+0x4b/0xa0
Aug 16 07:26:51 wonderland kernel: [<c017bc77>] ext3_lookup+0x67/0xc0
Aug 16 07:26:51 wonderland kernel: [<c0152740>] real_lookup+0xc0/0xf0
Aug 16 07:26:51 wonderland kernel: [<c0152984>] do_lookup+0x84/0x90
Aug 16 07:26:51 wonderland kernel: [<c0152d84>] link_path_walk+0x3f4/0x760
Aug 16 07:26:51 wonderland kernel: [<c015353e>] __user_walk+0x3e/0x60
Aug 16 07:26:51 wonderland kernel: [<c014efbe>] vfs_stat+0x1e/0x60
Aug 16 07:26:51 wonderland kernel: [<c013c8c2>] free_pgtables+0x82/0xa0
Aug 16 07:26:51 wonderland kernel: [<c013c956>] unmap_vma+0x76/0x80
Aug 16 07:26:51 wonderland kernel: [<c014f62b>] sys_stat64+0x1b/0x40
Aug 16 07:26:51 wonderland kernel: [<c014643b>] filp_close+0x4b/0x80
Aug 16 07:26:51 wonderland kernel: [<c01464c1>] sys_close+0x51/0x60
Aug 16 07:26:51 wonderland kernel: [<c01090b3>] syscall_call+0x7/0xb
Aug 16 07:26:51 wonderland kernel: Code: 0f 18 02 90 39 59 18 89 c8 74 10 85 d2 89 d1 75 ed 31 c0 83


>>EIP; c015c80a <find_inode_fast+1a/60> <=====

>>eax; c1521110 <__crc_lock_may_read+d3ca2/101eac>
>>ecx; d19b1b50 <__crc_find_inode_number+11efe1/25f51d>
>>esi; df60aa00 <__crc_inet_family_ops+140d4b/142f72>
>>edi; c1521110 <__crc_lock_may_read+d3ca2/101eac>
>>ebp; cd54de2c <__crc___scm_send+175362/1b3d66>
>>esp; cd54de1c <__crc___scm_send+175352/1b3d66>

Trace; c015cd0b <iget_locked+4b/a0>
Trace; c017bc77 <ext3_lookup+67/c0>
Trace; c0152740 <real_lookup+c0/f0>
Trace; c0152984 <do_lookup+84/90>
Trace; c0152d84 <link_path_walk+3f4/760>
Trace; c015353e <__user_walk+3e/60>
Trace; c014efbe <vfs_stat+1e/60>
Trace; c013c8c2 <free_pgtables+82/a0>
Trace; c013c956 <unmap_vma+76/80>
Trace; c014f62b <sys_stat64+1b/40>
Trace; c014643b <filp_close+4b/80>
Trace; c01464c1 <sys_close+51/60>
Trace; c01090b3 <syscall_call+7/b>

Code; c015c80a <find_inode_fast+1a/60>
00000000 <_EIP>:
Code; c015c80a <find_inode_fast+1a/60> <=====
0: 0f 18 02 prefetchnta (%edx) <=====
Code; c015c80d <find_inode_fast+1d/60>
3: 90 nop
Code; c015c80e <find_inode_fast+1e/60>
4: 39 59 18 cmp %ebx,0x18(%ecx)
Code; c015c811 <find_inode_fast+21/60>
7: 89 c8 mov %ecx,%eax
Code; c015c813 <find_inode_fast+23/60>
9: 74 10 je 1b <_EIP+0x1b>
Code; c015c815 <find_inode_fast+25/60>
b: 85 d2 test %edx,%edx
Code; c015c817 <find_inode_fast+27/60>
d: 89 d1 mov %edx,%ecx
Code; c015c819 <find_inode_fast+29/60>
f: 75 ed jne fffffffe <_EIP+0xfffffffe>
Code; c015c81b <find_inode_fast+2b/60>
11: 31 c0 xor %eax,%eax
Code; c015c81d <find_inode_fast+2d/60>
13: 83 00 00 addl $0x0,(%eax)


1 warning and 1 error issued. Results may not be reliable.

--
ciao, |
Marco | [1302 arB35F5/Z7koA]

2003-08-16 19:25:36

by Andrew Morton

[permalink] [raw]
Subject: Re: an oops in 2.6-test2 (oops)

"Marco d'Itri" <[email protected]> wrote:
>
> I've got another one yesterday:
>
> ...
>
> Aug 16 07:26:51 wonderland kernel: Unable to handle kernel NULL pointer dereference at virtual address 00000000
> ...
> Code; c015c80a <find_inode_fast+1a/60> <=====
> 0: 0f 18 02 prefetchnta (%edx) <=====

And you'll continue to get them until someone does something about it.
Discussion seemed to die off on this problem.

Until it is sorted, something like this is needed.


diff -puN include/asm-i386/processor.h~disble-athlon-prefetch include/asm-i386/processor.h
--- 25/include/asm-i386/processor.h~disble-athlon-prefetch 2003-08-16 12:22:32.000000000 -0700
+++ 25-akpm/include/asm-i386/processor.h 2003-08-16 12:23:29.000000000 -0700
@@ -568,6 +568,8 @@ static inline void rep_nop(void)
#define ARCH_HAS_PREFETCH
extern inline void prefetch(const void *x)
{
+ if (current_cpu_data.x86_vendor == X86_VENDOR_AMD)
+ return;
alternative_input(ASM_NOP4,
"prefetchnta (%1)",
X86_FEATURE_XMM,

_

2003-08-17 16:47:51

by Mike Fedyk

[permalink] [raw]
Subject: prefetchnta on athlon was: Re: an oops in 2.6-test2 (oops)

On Sat, Aug 16, 2003 at 12:26:40PM -0700, Andrew Morton wrote:
> And you'll continue to get them until someone does something about it.
> Discussion seemed to die off on this problem.
>
> Until it is sorted, something like this is needed.
>
>
> diff -puN include/asm-i386/processor.h~disble-athlon-prefetch include/asm-i386/processor.h
> --- 25/include/asm-i386/processor.h~disble-athlon-prefetch 2003-08-16 12:22:32.000000000 -0700
> +++ 25-akpm/include/asm-i386/processor.h 2003-08-16 12:23:29.000000000 -0700
> @@ -568,6 +568,8 @@ static inline void rep_nop(void)
> #define ARCH_HAS_PREFETCH
> extern inline void prefetch(const void *x)
> {
> + if (current_cpu_data.x86_vendor == X86_VENDOR_AMD)
> + return;

Andrew, if you put this patch in -mm please add a nice big comment above it,
and put it in the "must fix before 2.6.0" list.