diff options
author | Helge Deller <deller@gmx.de> | 2009-04-22 14:33:40 -0400 |
---|---|---|
committer | Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> | 2009-04-22 14:33:40 -0400 |
commit | a1f9a89c90b4ac143c5b6054c2a157572b272cd2 (patch) | |
tree | 1b1d0c34dd4857b21d9057eb384763b74b7ab62a /drivers/ide/ide-cd.c | |
parent | db2f38c22ea3f545be3b5772e5f9dc5861b74536 (diff) |
ide-cd: fix kernel crash on hppa regression
With 2.6.30-rc2 I face a kernel crash on the 32bit hppa architecture
due to ide-cd when udev creates the device nodes at startup:
Kernel Fault: Code=26 regs=8ed34c40 (Addr=00000024)
IASQ: 00000000 00000000 IAOQ: 1034b5ac 1034b5b0
IIR: 4ab30048 ISR: 00000000 IOR: 00000024
CPU: 0 CR30: 8ed34000 CR31: ffff55ff
ORIG_R28: 00000000
IAOQ[0]: ide_complete_rq+0x2c/0x70
IAOQ[1]: ide_complete_rq+0x30/0x70
RP(r2): cdrom_newpc_intr+0x178/0x46c
Backtrace:
[<1035c608>] cdrom_newpc_intr+0x178/0x46c
[<1034c494>] ide_intr+0x1b0/0x214
[<1016d284>] handle_IRQ_event+0x70/0x150
[<1016d4b0>] __do_IRQ+0x14c/0x1cc
[<102f7864>] superio_interrupt+0x88/0xbc
[<1016d284>] handle_IRQ_event+0x70/0x150
[<1016d4b0>] __do_IRQ+0x14c/0x1cc
[<10112efc>] do_cpu_irq_mask+0x9c/0xd0
[<10116068>] intr_return+0x0/0x4
This crash seems to happen due to an uninitialized variable "rc".
The compiler even warns about that:
CC drivers/ide/ide-cd.o
/mnt/sda4/home/cvs/parisc/git-kernel/linus-linux-2.6/drivers/ide/ide-cd.c: In function `cdrom_newpc_intr':
/mnt/sda4/home/cvs/parisc/git-kernel/linus-linux-2.6/drivers/ide/ide-cd.c:612: warning: `rc' might be used uninitialized in this function
After applying the trivial patch below, which just initializes
the variable to zero, the kernel doesn't crash any longer:
Starting the hotplug events dispatcher: udevd.
Synthesizing the initial hotplug events...
hda: command error: status=0x51 { DriveReady SeekComplete Error }
hda: command error: error=0x54 <3>{ AbortedCommand LastFailedSense=0x05 }
ide: failed opcode was: unknown
done.
Signed-off-by: Helge Deller <deller@gmx.de>
Acked-by: Borislav Petkov <petkovbb@gmail.com>
Cc: Linus <torvalds@linux-foundation.org>
Cc: Kyle McMartin <kyle@mcmartin.ca>
Cc: "Rafael J. Wysocki" <rjw@sisk.pl>
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Diffstat (limited to 'drivers/ide/ide-cd.c')
-rw-r--r-- | drivers/ide/ide-cd.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/ide/ide-cd.c b/drivers/ide/ide-cd.c index 3aec19d1fdfc..3d4e09969763 100644 --- a/drivers/ide/ide-cd.c +++ b/drivers/ide/ide-cd.c | |||
@@ -609,7 +609,7 @@ static ide_startstop_t cdrom_newpc_intr(ide_drive_t *drive) | |||
609 | struct request *rq = hwif->rq; | 609 | struct request *rq = hwif->rq; |
610 | ide_expiry_t *expiry = NULL; | 610 | ide_expiry_t *expiry = NULL; |
611 | int dma_error = 0, dma, thislen, uptodate = 0; | 611 | int dma_error = 0, dma, thislen, uptodate = 0; |
612 | int write = (rq_data_dir(rq) == WRITE) ? 1 : 0, rc, nsectors; | 612 | int write = (rq_data_dir(rq) == WRITE) ? 1 : 0, rc = 0, nsectors; |
613 | int sense = blk_sense_request(rq); | 613 | int sense = blk_sense_request(rq); |
614 | unsigned int timeout; | 614 | unsigned int timeout; |
615 | u16 len; | 615 | u16 len; |