Hi all, the Oops I reported earlier today, may be related to a problem of the GNU C compiler, but I do not know MIPS assembly, so I ask for help. Call Trace of the original oops: > [<ffffffff802460b0>] sr_drive_status+0x50/0xe8 > [<ffffffff8024bb84>] cdrom_ioctl+0x5f4/0x1208 > [<ffffffff80245c6c>] sr_block_ioctl+0x64/0xe8 > [<ffffffff801ad8bc>] compat_blkdev_ioctl+0x7cc/0x18e0 > [<ffffffff800d1870>] do_open+0x98/0x310 > [<ffffffff800d1d60>] blkdev_open+0x0/0xc0 > [<ffffffff800d1da8>] blkdev_open+0x48/0xc0 > [<ffffffff8009c444>] __dentry_open+0x114/0x2e0 > [<ffffffff8009c740>] do_filp_open+0x48/0x58 > [<ffffffff8009c740>] do_filp_open+0x48/0x58 > [<ffffffff800def8c>] compat_sys_ioctl+0xf4/0x440 > [<ffffffff80019154>] handle_sys+0x114/0x130 > [<ffffffff8001fcf3>] fpu_emulator_cop1Handler+0x362/0x2270 sr_drive_status+0x50 is, in decimal, sr_drive_status+80 The gdb disassable the code as this: (gdb) disassemble sr_drive_status+0x50 Dump of assembler code for function sr_drive_status: 0xffffffff80246060 <sr_drive_status+0>: daddiu sp,sp,-32 0xffffffff80246064 <sr_drive_status+4>: lui v0,0x7fff 0xffffffff80246068 <sr_drive_status+8>: sd s0,16(sp) 0xffffffff8024606c <sr_drive_status+12>: sd ra,24(sp) 0xffffffff80246070 <sr_drive_status+16>: ori v0,v0,0xffff 0xffffffff80246074 <sr_drive_status+20>: move s0,a0 0xffffffff80246078 <sr_drive_status+24>: bne a1,v0,0xffffffff802460e8 <sr_drive_status+136> 0xffffffff8024607c <sr_drive_status+28>: ld v1,24(a0) 0xffffffff80246080 <sr_drive_status+32>: ld a0,16(v1) 0xffffffff80246084 <sr_drive_status+36>: jal 0xffffffff80244c70 <sr_test_unit_ready> 0xffffffff80246088 <sr_drive_status+40>: daddiu a1,sp,4 0xffffffff8024608c <sr_drive_status+44>: bnez v0,0xffffffff802460a8 <sr_drive_status+72> 0xffffffff80246090 <sr_drive_status+48>: move a0,s0 0xffffffff80246094 <sr_drive_status+52>: li v0,4 0xffffffff80246098 <sr_drive_status+56>: ld ra,24(sp) 0xffffffff8024609c <sr_drive_status+60>: ld s0,16(sp) 0xffffffff802460a0 <sr_drive_status+64>: jr ra 0xffffffff802460a4 <sr_drive_status+68>: daddiu sp,sp,32 0xffffffff802460a8 <sr_drive_status+72>: jal 0xffffffff8024c838 <cdrom_get_media_event> 0xffffffff802460ac <sr_drive_status+76>: move a1,sp 0xffffffff802460b0 <sr_drive_status+80>: bnez v0,0xffffffff802460fc <sr_drive_status+156> 0xffffffff802460b4 <sr_drive_status+84>: lhu v0,0(sp) 0xffffffff802460b8 <sr_drive_status+88>: sll v0,v0,0x0 0xffffffff802460bc <sr_drive_status+92>: andi v0,v0,0xff 0xffffffff802460c0 <sr_drive_status+96>: andi v1,v0,0x2 0xffffffff802460c4 <sr_drive_status+100>: bnez v1,0xffffffff80246094 <sr_drive_status+52> 0xffffffff802460c8 <sr_drive_status+104>: andi v0,v0,0x1 0xffffffff802460cc <sr_drive_status+108>: beqz v0,0xffffffff80246098 <sr_drive_status+56> 0xffffffff802460d0 <sr_drive_status+112>: li v0,1 0xffffffff802460d4 <sr_drive_status+116>: ld ra,24(sp) then, I changed the code in sr_drive_status, adding the printk line, as shown below: int sr_drive_status(struct cdrom_device_info *cdi, int slot) { struct scsi_cd *cd = cdi->handle; struct scsi_sense_hdr sshdr; struct media_event_desc med; if (CDSL_CURRENT != slot) { /* we have no changer support */ return -EINVAL; } if (0 == sr_test_unit_ready(cd->device, &sshdr)) return CDS_DISC_OK; printk(KERN_INFO "sr_drive_status() cdi=0x%p, cd=0x%p\n", cdi, cd); if (!cdrom_get_media_event(cdi, &med)) { if (med.media_present) return CDS_DISC_OK; [...] and now, I cannot reproduce any oops. The new assembly code is: 0xffffffff80246060 <sr_drive_status+0>: daddiu sp,sp,-48 0xffffffff80246064 <sr_drive_status+4>: lui v0,0x7fff 0xffffffff80246068 <sr_drive_status+8>: sd s0,16(sp) 0xffffffff8024606c <sr_drive_status+12>: sd ra,32(sp) 0xffffffff80246070 <sr_drive_status+16>: sd s1,24(sp) 0xffffffff80246074 <sr_drive_status+20>: ori v0,v0,0xffff 0xffffffff80246078 <sr_drive_status+24>: move s0,a0 0xffffffff8024607c <sr_drive_status+28>: bne a1,v0,0xffffffff80246108 <sr_drive_status+168> 0xffffffff80246080 <sr_drive_status+32>: ld s1,24(a0) 0xffffffff80246084 <sr_drive_status+36>: ld a0,16(s1) 0xffffffff80246088 <sr_drive_status+40>: jal 0xffffffff80244c70 <sr_test_unit_ready> 0xffffffff8024608c <sr_drive_status+44>: daddiu a1,sp,4 0xffffffff80246090 <sr_drive_status+48>: bnez v0,0xffffffff802460b0 <sr_drive_status+80> 0xffffffff80246094 <sr_drive_status+52>: lui a0,0x803c 0xffffffff80246098 <sr_drive_status+56>: li v0,4 0xffffffff8024609c <sr_drive_status+60>: ld ra,32(sp) 0xffffffff802460a0 <sr_drive_status+64>: ld s1,24(sp) 0xffffffff802460a4 <sr_drive_status+68>: ld s0,16(sp) 0xffffffff802460a8 <sr_drive_status+72>: jr ra 0xffffffff802460ac <sr_drive_status+76>: daddiu sp,sp,48 0xffffffff802460b0 <sr_drive_status+80>: daddiu a0,a0,-4560 0xffffffff802460b4 <sr_drive_status+84>: move a1,s0 0xffffffff802460b8 <sr_drive_status+88>: jal 0xffffffff80032ba8 <printk> 0xffffffff802460bc <sr_drive_status+92>: move a2,s1 0xffffffff802460c0 <sr_drive_status+96>: move a0,s0 0xffffffff802460c4 <sr_drive_status+100>: jal 0xffffffff8024c858 <cdrom_get_media_event> 0xffffffff802460c8 <sr_drive_status+104>: move a1,sp 0xffffffff802460cc <sr_drive_status+108>: bnez v0,0xffffffff80246120 <sr_drive_status+192> 0xffffffff802460d0 <sr_drive_status+112>: lhu v0,0(sp) the gcc I am using in versione 4.1.2. Any help is really appreciated. Thanks, Giuseppe