DAC960 breakage, 2.5 bk current
The change that went into 2.5.69 for DAC960 seems to break it here.
(http://marc.theaimsgroup.com/?l=linux-kernel&m=105209603501299&w=2)
I backed out the last two changesets in DAC960.c, and the driver runs again. Backing out only:
ChangeSet 1.1132 2003/05/15 09:01:05 [email protected]
[PATCH] DAC960 typedef cleanup patch
Did not resolve the panic, however backing out:
ChangeSet 1.1042.94.9 2003/04/30 07:31:56 [email protected]
[PATCH] DAC960 patch to entry points with a new fix
Seems to resolve the problem.
The problem was, (copied by hand, please let me know if I've omitted a critical field.):
kernel NULL pointer deref - virt 00000019
Oops: 0000 [#1] CPU: 0
EIP: 0060:[<c02774d3>] Not tainted
EFLAGS: 00010286
EIP is at DAC960_ioctl+0x33/0x190
Process swapper (pid: 1, ...)
Call Trace: ] blkdev_ioctl+0xa5/0x466 ] ioctl_by_dev+0x41/0x50 ] isofs_get_last_session+0xb4/0xe0
] set_blocksize+
] sb_set_blocksize+
] isofs_fill_super+
] sb_set_blocksize+
] get_sb_bdev+
] isofs_get_sb+
] isofs_fill_super+
] do_kern_mount+
] do_add_mount+
] do_mount+
] copy_mount_options+
] sys_mount+
] do_mount_root+
] mount_block_root+
] mount_root+
] prepare_namespace+
] init_workqueues+
] init+0x5f/0x200
] init+0x0/0x200
] kernel_thread_helper+0x5/0x10
Code: f6 43 19 08 0f 85 33 01 00 00 81 ff 01 03 00 00 74 12 ba ea <0>kernel panic: Attempted to kill init!
This is on a SuSE 8.1, dual Athlon MP system, gcc 3.2, binutils 2.12.90.0.15-40. Please let me know if additional detail is helpful.
Signature · 1 line
Kevin
Quoted 8 lines · Kevin Brosius
kernel NULL pointer deref - virt 00000019
Oops: 0000 [#1] CPU: 0 EIP: 0060:[<c02774d3>] Not tainted EFLAGS: 00010286 EIP is at DAC960_ioctl+0x33/0x190
Quoted 5 lines
Process swapper (pid: 1, ...)
Call Trace: ] blkdev_ioctl+0xa5/0x466 ] ioctl_by_dev+0x41/0x50
You tricking me. That's "ioctl_by_bdev". It passes in a null file*, and we have to handle it.
Does this fix?
drivers/block/DAC960.c renamed from drivers/block/DAC960.c~DAC960-oops-fix +1 -1
@@ -102,7 +102,7 @@ static int DAC960_ioctl(struct inode *inint drive_nr = (int )disk->private_data;struct hd_geometry g, *loc = (struct hd_geometry *)arg; -if (file->f_flags &O_NONBLOCK ) +if (file && file->f_flags &O_NONBLOCK )return DAC960_UserIOCTL (inode, file, cmd, arg);if (cmd !=HDIO_GETGEO || !loc)
_
Quoted 11 lines · Andrew Morton
Quoted 8 lines · Kevin Brosius
kernel NULL pointer deref - virt 00000019
Oops: 0000 [#1] CPU: 0 EIP: 0060:[<c02774d3>] Not tainted EFLAGS: 00010286 EIP is at DAC960_ioctl+0x33/0x190
Quoted 8 lines
Quoted 5 lines
Process swapper (pid: 1, ...)
Call Trace: ] blkdev_ioctl+0xa5/0x466 ] ioctl_by_dev+0x41/0x50You tricking me. That's "
ioctl_by_bdev". It passes in a null file*, and we have to handle it.
Yes, sorry. Missed a letter in that typing.
Quoted 2 lines
Does this fix?
Yes, works great! No further panic. Thank you.
Quoted 15 lines
diff -puN
drivers/block/DAC960.c~DAC960-oops-fixdrivers/block/DAC960.cdrivers/block/DAC960.c 2003-05-16 20:45:16.000000000 -0700 renamed from drivers/block/DAC960.c~DAC960-oops-fix 2003-05-16 20:44:52.000000000 -0700 +1
-1@@ -102,7 +102,7 @@ static int DAC960_ioctl(struct inode *in int drive_nr = (int)disk->private_data; struct hd_geometry g, *loc = (struct hd_geometry *)arg; - if (file->f_flags & O_NONBLOCK) + if (file && file->f_flags & O_NONBLOCK) return DAC960_UserIOCTL(inode, file, cmd, arg); if (cmd != HDIO_GETGEO || !loc)_
Signature · 1 line
Kevin
I apologize for missing this before submitting that patch. I'm working on a patch that eliminates this O_NONBLOCK nonsense entirely. I'm away from work most of this week though. Back next week.
Quoted 51 lines · Kevin Brosius
Quoted 11 lines · Andrew Morton
Quoted 8 lines · Kevin Brosius
kernel NULL pointer deref - virt 00000019
Oops: 0000 [#1] CPU: 0 EIP: 0060:[<c02774d3>] Not tainted EFLAGS: 00010286 EIP is at DAC960_ioctl+0x33/0x190Quoted 8 lines
Quoted 5 lines
Process swapper (pid: 1, ...)
Call Trace: ] blkdev_ioctl+0xa5/0x466 ] ioctl_by_dev+0x41/0x50You tricking me. That's "
ioctl_by_bdev". It passes in a null file*, and we have to handle it.Yes, sorry. Missed a letter in that typing.
Quoted 2 lines
Does this fix?
Yes, works great! No further panic. Thank you.
Quoted 15 lines
diff -puN
drivers/block/DAC960.c~DAC960-oops-fixdrivers/block/DAC960.cdrivers/block/DAC960.c 2003-05-16 20:45:16.000000000 -0700 renamed from drivers/block/DAC960.c~DAC960-oops-fix 2003-05-16 20:44:52.000000000 -0700 +1
-1@@ -102,7 +102,7 @@ static int DAC960_ioctl(struct inode *in int drive_nr = (int)disk->private_data; struct hd_geometry g, *loc = (struct hd_geometry *)arg; - if (file->f_flags & O_NONBLOCK) + if (file && file->f_flags & O_NONBLOCK) return DAC960_UserIOCTL(inode, file, cmd, arg); if (cmd != HDIO_GETGEO || !loc)_
Signature · 6 lines
Kevin - 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/