From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1750923AbWDKP0o (ORCPT ); Tue, 11 Apr 2006 11:26:44 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1750925AbWDKP0o (ORCPT ); Tue, 11 Apr 2006 11:26:44 -0400 Received: from e32.co.us.ibm.com ([32.97.110.150]:4829 "EHLO e32.co.us.ibm.com") by vger.kernel.org with ESMTP id S1750914AbWDKP0n (ORCPT ); Tue, 11 Apr 2006 11:26:43 -0400 Date: Tue, 11 Apr 2006 21:01:14 +0530 From: Rachita Kothiyal To: Jens Axboe Cc: linux-kernel@vger.kernel.org, akpm@osdl.org Subject: Re: [RFC] Patch to fix cdrom being confused on using kdump Message-ID: <20060411153114.GA5255@in.ibm.com> Reply-To: rachita@in.ibm.com References: <20060407135714.GA25569@in.ibm.com> <20060409102942.GI3859@suse.de> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="LQksG6bCIzRHxTLp" Content-Disposition: inline In-Reply-To: <20060409102942.GI3859@suse.de> User-Agent: Mutt/1.4.2.1i Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org --LQksG6bCIzRHxTLp Content-Type: text/plain; charset=us-ascii Content-Disposition: inline On Sun, Apr 09, 2006 at 12:29:42PM +0200, Jens Axboe wrote: > On Fri, Apr 07 2006, Rachita Kothiyal wrote: > > if (stat & DRQ_STAT) > > checking for DRQ_STAT again doesn't make sense, how can it ever be > anything but DRQ_STAT if DRQ_STAT is set? Hi Jens, Yes, you are right. The condition itself is redundant there as DRQ will always be set there. I will remove it. > > > + /* DRQ is set. Interrupt not welcome now. Ignore */ > > + HWIF(drive)->OUTB((stat & 0xEF), IDE_STATUS_REG); > > + return ide_stopped; > > And this looks very wrong, you can't write to the status register. Well > you can, but then it's the command register! Writing stat & 0xef to the > command register is an odd thing to do. I think you just want to clear > the DRQ bit, which should be fine after it was read initially. How about > > > if (stat & DRQ_STAT) > return ide_stopped; > > Can you test that? I tested this, but I see it fail a couple of times...sometimes it hung while booting up the second kernel and sometimes the kernel paniced while shutting it down.(attached partial log for panic) I see your point that writing to the status register is not a good idea. I think what we want to do is just ignore this particular interrupt and let it continue. Am not sure if clearing DRQ bit will achieve this. Please correct me if I am wrong, but to clear the DRQ bit also we will have to write to the status register. Thanks Rachita --LQksG6bCIzRHxTLp Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="cdrom_shutdown_panic.log" Shutting down powersaved done Saving random seed done Umount SMB/ CIFS File Systems done Shutting down ldap-server done Shutting down SSH daemon done Remove Net File System (NFS) unused Shutting down RPC portmap daemon done Shutting down syslog services done Shutting down network interfaces: cdrom: entering cdrom_open cdrom: Use count for "/dev/hda" now 1 ide0: start_request: current=0xffff810003bfbaa8 ide0: start_request: current=0xffff810004c222d8 ide0: start_request: current=0xffff810003bfba18 ide0: start_request: current=0xffff810004c222d8 ide0: start_request: current=0xffff810003bfba08 ide0: start_request: current=0xffff810004c222d8 ide0: start_request: current=0xffff810003bfb9f8 ide0: start_request: current=0xffff810004c222d8 cdrom: entering CDROM_DRIVE_STATUS ide0: start_request: current=0xffff810003bfbbb8 ide0: start_request: current=0xffff810004c222d8 ide0: start_request: current=0xffff810003bfbb58 cdrom: entering cdrom_release cdrom: Use count for "/dev/hda" now zero cdrom: hda: No DVD+RW cdrom: Unlocking door! ide0: start_request: current=0xffff810003bfbca8 cdrom: entering cdrom_open cdrom: Use count for "/dev/hda" now 1 ide0: start_request: current=0xffff810003bfbaa8 ide0: start_request: current=0xffff810004c222d8 ide0: start_request: current=0xffff810003bfba18 ide0: start_request: current=0xffff810004c222d8 ide0: start_request: current=0xffff810003bfba08 ide0: start_request: current=0xffff810004c222d8 ide0: start_request: current=0xffff810003bfb9f8 ide0: start_request: current=0xffff810004c222d8 cdrom: entering CDROM_DRIVE_STATUS ide0: start_request: current=0xffff810003bfbbb8 ide0: start_request: current=0xffff810004c222d8 ide0: start_request: current=0xffff810003bfbb58 cdrom: entering cdrom_release cdrom: Use count for "/dev/hda" now zero cdrom: hda: No DVD+RW cdrom: Unlocking door! ide0: start_request: current=0xffff810003bfbca8 cdrom: entering cdrom_open cdrom: Use count for "/dev/hda" now 1 ide0: start_request: current=0xffff810003bfbaa8 ide0: start_request: current=0xffff810004c222d8 ide0: start_request: current=0xffff810003bfba18 ide0: start_request: current=0xffff810004c222d8 ide0: start_request: current=0xffff810003bfba08 ide0: start_request: current=0xffff810004c222d8 ide0: start_request: current=0xffff810003bfb9f8 ide0: start_request: current=0xffff810004c222d8 cdrom: entering CDROM_DRIVE_STATUS ide0: start_request: current=0xffff810003bfbbb8 ide0: start_request: current=0xffff810004c222d8 ide0: start_request: current=0xffff810003bfbb58 cdrom: entering cdrom_release cdrom: Use count for "/dev/hda" now zero cdrom: hda: No DVD+RW cdrom: Unlocking door! ide0: start_request: current=0xffff810003bfbca8 cdrom: entering cdrom_open cdrom: Use count for "/dev/hda" now 1 ide0: start_request: current=0xffff810003bfbaa8 ide0: start_request: current=0xffff810004c222d8 ide0: start_request: current=0xffff810003bfba18 ide0: start_request: current=0xffff810004c222d8 ide0: start_request: current=0xffff810003bfba08 ide0: start_request: current=0xffff810004c222d8 ide0: start_request: current=0xffff810003bfb9f8 ide0: start_request: current=0xffff810004c222d8 cdrom: entering CDROM_DRIVE_STATUS ide0: start_request: current=0xffff810003bfbbb8 ide0: start_request: current=0xffff810004c222d8 ide0: start_request: current=0xffff810003bfbb58 cdrom: entering cdrom_release cdrom: Use count for "/dev/hda" now zero cdrom: hda: No DVD+RW cdrom: Unlocking door! ide0: start_request: current=0xffff810003bfbca8 cdrom: entering cdrom_open cdrom: Use count for "/dev/hda" now 1 ide0: start_request: current=0xffff810003bfbaa8 ide0: start_request: current=0xffff810004c222d8 ide0: start_request: current=0xffff810003bfba18 ide0: start_request: current=0xffff810004c222d8 ide0: start_request: current=0xffff810003bfba08 ide0: start_request: current=0xffff810004c222d8 ide0: start_request: current=0xffff810003bfb9f8 ide0: start_request: current=0xffff810004c222d8 cdrom: entering CDROM_DRIVE_STATUS ide0: start_request: current=0xffff810003bfbbb8 ide0: start_request: current=0xffff810004c222d8 ide0: start_request: current=0xffff810003bfbb58 cdrom: entering cdrom_release cdrom: Use count for "/dev/hda" now zero cdrom: hda: No DVD+RW cdrom: Unlocking door! ide0: start_request: current=0xffff810003bfbca8 cdrom: entering cdrom_open cdrom: Use count for "/dev/hda" now 1 ide0: start_request: current=0xffff810003bfbaa8 ide0: start_request: current=0xffff810004c222d8 ide0: start_request: current=0xffff810003bfba18 ide0: start_request: current=0xffff810004c222d8 ide0: start_request: current=0xffff810003bfba08 ide0: start_request: current=0xffff810004c222d8 ide0: start_request: current=0xffff810003bfb9f8 ide0: start_request: current=0xffff810004c222d8 cdrom: entering CDROM_DRIVE_STATUS ide0: start_request: current=0xffff810003bfbbb8 ide0: start_request: current=0xffff810004c222d8 ide0: start_request: current=0xffff810003bfbb58 cdrom: entering cdrom_release cdrom: Use count for "/dev/hda" now zero cdrom: hda: No DVD+RW cdrom: Unlocking door! ide0: start_request: current=0xffff810003bfbca8 cdrom: entering cdrom_open cdrom: Use count for "/dev/hda" now 1 ide0: start_request: current=0xffff810003bfbaa8 ide0: start_request: current=0xffff810004c222d8 ide0: start_request: current=0xffff810003bfba18 ide0: start_request: current=0xffff810004c222d8 ide0: start_request: current=0xffff810003bfba08 ide0: start_request: current=0xffff810004c222d8 ide0: start_request: current=0xffff810003bfb9f8 ide0: start_request: current=0xffff810004c222d8 cdrom: entering CDROM_DRIVE_STATUS ide0: start_request: current=0xffff810003bfbbb8 ide0: start_request: current=0xffff810004c222d8 ide0: start_request: current=0xffff810003bfbb58 cdrom: entering cdrom_release cdrom: Use count for "/dev/hda" now zero cdrom: hda: No DVD+RW cdrom: Unlocking door! ide0: start_request: current=0xffff810003bfbca8 cdrom: entering cdrom_open cdrom: Use count for "/dev/hda" now 1 ide0: start_request: current=0xffff810003bfbaa8 ide0: start_request: current=0xffff810004c222d8 ide0: start_request: current=0xffff810003bfba18 ide0: start_request: current=0xffff810004c222d8 ide0: start_request: current=0xffff810003bfba08 ide0: start_request: current=0xffff810004c222d8 ide0: start_request: current=0xffff810003bfb9f8 ide0: start_request: current=0xffff810004c222d8 cdrom: entering CDROM_DRIVE_STATUS ide0: start_request: current=0xffff810003bfbbb8 ide0: start_request: current=0xffff810004c222d8 ide0: start_request: current=0xffff810003bfbb58 cdrom: entering cdrom_release cdrom: Use count for "/dev/hda" now zero cdrom: hda: No DVD+RW cdrom: Unlocking door! ide0: start_request: current=0xffff810003bfbca8 cdrom: entering cdrom_open cdrom: Use count for "/dev/hda" now 1 ide0: start_request: current=0xffff810003bfbaa8 ide0: start_request: current=0xffff810004c222d8 ide0: start_request: current=0xffff810003bfba18 ide0: start_request: current=0xffff810004c222d8 ide0: start_request: current=0xffff810003bfba08 ide0: start_request: current=0xffff810004c222d8 ide0: start_request: current=0xffff810003bfb9f8 ide0: start_request: current=0xffff810004c222d8 cdrom: entering CDROM_DRIVE_STATUS ide0: start_request: current=0xffff810003bfbbb8 ide0: start_request: current=0xffff810004c222d8 ide0: start_request: current=0xffff810003bfbb58 cdrom: entering cdrom_release cdrom: Use count for "/dev/hda" now zero cdrom: hda: No DVD+RW cdrom: Unlocking door! ide0: start_request: current=0xffff810003bfbca8 cdrom: entering cdrom_open cdrom: Use count for "/dev/hda" now 1 ide0: start_request: current=0xffff810003bfbaa8 ide0: start_request: current=0xffff810004c222d8 ide0: start_request: current=0xffff810003bfba18 ide0: start_request: current=0xffff810004c222d8 ide0: start_request: current=0xffff810003bfba08 ide0: start_request: current=0xffff810004c222d8 ide0: start_request: current=0xffff810003bfb9f8 ide0: start_request: current=0xffff810004c222d8 cdrom: entering CDROM_DRIVE_STATUS ide0: start_request: current=0xffff810003bfbbb8 ide0: start_request: current=0xffff810004c222d8 ide0: start_request: current=0xffff810003bfbb58 cdrom: entering cdrom_release cdrom: Use count for "/dev/hda" now zero cdrom: hda: No DVD+RW cdrom: Unlocking door! ide0: start_request: current=0xffff810003bfbca8 cdrom: entering cdrom_open cdrom: Use count for "/dev/hda" now 1 ide0: start_request: current=0xffff810003bfbaa8 ide0: start_request: current=0xffff810004c222d8 ide0: start_request: current=0xffff810003bfba18 ide0: start_request: current=0xffff810004c222d8 ide0: start_request: current=0xffff810003bfba08 ide0: start_request: current=0xffff810004c222d8 ide0: start_request: current=0xffff810003bfb9f8 ide0: start_request: current=0xffff810004c222d8 cdrom: entering CDROM_DRIVE_STATUS ide0: start_request: current=0xffff810003bfbbb8 ide0: start_request: current=0xffff810004c222d8 ide0: start_request: current=0xffff810003bfbb58 cdrom: entering cdrom_release cdrom: Use count for "/dev/hda" now zero cdrom: hda: No DVD+RW cdrom: Unlocking door! ide0: start_request: current=0xffff810003bfbca8 cdrom: entering cdrom_open cdrom: Use count for "/dev/hda" now 1 ide0: start_request: current=0xffff810003bfbaa8 ide0: start_request: current=0xffff810004c222d8 ide0: start_request: current=0xffff810003bfba18 ide0: start_request: current=0xffff810004c222d8 ide0: start_request: current=0xffff810003bfba08 ide0: start_request: current=0xffff810004c222d8 ide0: start_request: current=0xffff810003bfb9f8 ide0: start_request: current=0xffff810004c222d8 cdrom: entering CDROM_DRIVE_STATUS ide0: start_request: current=0xffff810003bfbbb8 ide0: start_request: current=0xffff810004c222d8 ide0: start_request: current=0xffff810003bfbb58 cdrom: entering cdrom_release cdrom: Use count for "/dev/hda" now zero cdrom: hda: No DVD+RW cdrom: Unlocking door! ide0: start_request: current=0xffff810003bfbca8 cdrom: entering cdrom_open cdrom: Use count for "/dev/hda" now 1 ide0: start_request: current=0xffff810003bfbaa8 ide0: start_request: current=0xffff810004c222d8 ide0: start_request: current=0xffff810003bfba18 ide0: start_request: current=0xffff810004c222d8 ide0: start_request: current=0xffff810003bfba08 ide0: start_request: current=0xffff810004c222d8 ide0: start_request: current=0xffff810003bfb9f8 ide0: start_request: current=0xffff810004c222d8 cdrom: entering CDROM_DRIVE_STATUS ide0: start_request: current=0xffff810003bfbbb8 ide0: start_request: current=0xffff810004c222d8 ide0: start_request: current=0xffff810003bfbb58 Rachita: DRQ set.Interrupt ignored BUG: spinlock recursion on CPU#0, hald-addon-stor/2018 lock: ffffffff812c1128, .magic: dead4ead, .owner: hald-addon-stor/2018, .owner_cpu: 0 Call Trace: {_raw_spin_lock+61} {__do_IRQ+55} {do_IRQ+59} {ret_from_intr+0} {:ide_core:ide_do_request+820} {:ide_core:ide_do_request+815} {_spin_lock_irqsave+9} {:ide_cd:cdrom_decode_status+42} {:ide_cd:cdrom_pc_intr+510} {:ide_core:ide_intr+442} {note_interrupt+219} {__do_IRQ+173} {do_IRQ+59} {ret_from_intr+0} {vprintk+652} {:ide_core:ide_outsw+0} {:ide_core:ide_outsw+5} {:ide_core:atapi_output_bytes+38} {:ide_cd:cdrom_pc_intr+0} {:ide_cd:cdrom_transfer_packet_command+182} {:ide_cd:cdrom_do_pc_continuation+0} {:ide_cd:cdrom_start_packet_command+359} {:ide_core:ide_do_request+1591} {thread_return+0} {thread_return+86} {:ide_core:ide_do_request+1970} {elv_insert+120} {:ide_core:ide_do_drive_cmd+245} {:ide_cd:cdrom_queue_packet_command+70} {blk_end_sync_rq+0} {:ide_core:ide_init_drive_cmd+16} {:ide_cd:ide_cdrom_packet+155} {blk_end_sync_rq+0} {:cdrom:cdrom_get_media_event+77} {:ide_cd:ide_cdrom_drive_status+65} {:cdrom:cdrom_ioctl+1640} {kobject_get+18} {get_disk+47} {blkdev_ioctl+1558} {do_open+221} {bdget+284} {bd_claim+131} {blkdev_open+0} {blkdev_open+56} {__dentry_open+238} {block_ioctl+27} {do_ioctl+27} {vfs_ioctl+527} {sys_ioctl+60} {system_call+126} NMI Watchdog detected LOCKUP on CPU 0 CPU 0 Modules linked in: edd ipv6 loop dm_mod usbhid tg3 generic ide_cd shpchp cdrom pci_hotplug uhci_hcd ehci_hcd e752x_edac floppy usbcore edac_mc ext3 jbd processor sg aic79xx scsi_transport_spi piix sd_mod scsi_mod ide_disk ide_core Pid: 2018, comm: hald-addon-stor Tainted: G U 2.6.16-rc2-git5-rachita-3-kdump #6 RIP: 0010:[] {__delay+2} RSP: 0018:ffffffff8124b8a8 EFLAGS: 00000006 RAX: 00000000b395caba RBX: ffffffff812c1128 RCX: 00000000b395c9c7 RDX: 0000000000000205 RSI: ffffffff811b4fad RDI: 0000000000000001 RBP: 000000001bb47288 R08: 0000000000000007 R09: ffffffff8124b4f0 R10: ffffffff88164154 R11: 0000000000000000 R12: 0000000000000001 R13: ffffffff812c1128 R14: ffff810004af4488 R15: ffffffff8124b908 FS: 00002b44cadc36d0(0000) GS:ffffffff812c1000(0000) knlGS:0000000000000000 CS: 0010 DS: 0000 ES: 0000 CR0: 000000008005003b CR2: 00002b752a9f8280 CR3: 0000000002d42000 CR4: 00000000000006e0 Process hald-addon-stor (pid: 2018, threadinfo ffff810003bfa000, task ffff81000446e040) Stack: ffffffff810cf72d 0000000000000000 ffffffff812c1100 0000000000000000 ffffffff81042b08 ffff810004b71c10 ffffffff8124b908 0000000000000000 ffff810004af4488 ffffffff8801d220 Call Trace: {_raw_spin_lock+129} {__do_IRQ+55} {do_IRQ+59} {ret_from_intr+0} {:ide_core:ide_do_request+820} {:ide_core:ide_do_request+815} {_spin_lock_irqsave+9} {:ide_cd:cdrom_decode_status+42} {:ide_cd:cdrom_pc_intr+510} {:ide_core:ide_intr+442} {note_interrupt+219} {__do_IRQ+173} {do_IRQ+59} {ret_from_intr+0} {vprintk+652} {:ide_core:ide_outsw+0} {:ide_core:ide_outsw+5} {:ide_core:atapi_output_bytes+38} {:ide_cd:cdrom_pc_intr+0} {:ide_cd:cdrom_transfer_packet_command+182} {:ide_cd:cdrom_do_pc_continuation+0} {:ide_cd:cdrom_start_packet_command+359} {:ide_core:ide_do_request+1591} {thread_return+0} {thread_return+86} {:ide_core:ide_do_request+1970} {elv_insert+120} {:ide_core:ide_do_drive_cmd+245} {:ide_cd:cdrom_queue_packet_command+70} {blk_end_sync_rq+0} {:ide_core:ide_init_drive_cmd+16} {:ide_cd:ide_cdrom_packet+155} {blk_end_sync_rq+0} {:cdrom:cdrom_get_media_event+77} {:ide_cd:ide_cdrom_drive_status+65} {:cdrom:cdrom_ioctl+1640} {kobject_get+18} {get_disk+47} {blkdev_ioctl+1558} {do_open+221} {bdget+284} {bd_claim+131} {blkdev_open+0} {blkdev_open+56} {__dentry_open+238} {block_ioctl+27} {do_ioctl+27} {vfs_ioctl+527} {sys_ioctl+60} {system_call+126} Code: 89 c1 f3 90 0f 31 29 c8 48 39 f8 72 f5 c3 48 69 05 cc a4 1f console shuts up ... <3>Debug: sleeping function called from invalid context at include/linux/rwsem.h:43 in_atomic():1, irqs_disabled():1 Call Trace: {profile_task_exit+21} {do_exit+32} {__die+0} {nmi_watchdog_tick+161} {default_do_nmi+115} {do_nmi+61} {nmi+127} {__delay+2} {_raw_spin_lock+129} {__do_IRQ+55} {do_IRQ+59} {ret_from_intr+0} {:ide_core:ide_do_request+820} {:ide_core:ide_do_request+815} {_spin_lock_irqsave+9} {:ide_cd:cdrom_decode_status+42} {:ide_cd:cdrom_pc_intr+510} {:ide_core:ide_intr+442} {note_interrupt+219} {__do_IRQ+173} {do_IRQ+59} {ret_from_intr+0} {vprintk+652} {:ide_core:ide_outsw+0} {:ide_core:ide_outsw+5} {:ide_core:atapi_output_bytes+38} {:ide_cd:cdrom_pc_intr+0} {:ide_cd:cdrom_transfer_packet_command+182} {:ide_cd:cdrom_do_pc_continuation+0} {:ide_cd:cdrom_start_packet_command+359} {:ide_core:ide_do_request+1591} {thread_return+0} {thread_return+86} {:ide_core:ide_do_request+1970} {elv_insert+120} {:ide_core:ide_do_drive_cmd+245} {:ide_cd:cdrom_queue_packet_command+70} {blk_end_sync_rq+0} {:ide_core:ide_init_drive_cmd+16} {:ide_cd:ide_cdrom_packet+155} {blk_end_sync_rq+0} {:cdrom:cdrom_get_media_event+77} {:ide_cd:ide_cdrom_drive_status+65} {:cdrom:cdrom_ioctl+1640} {kobject_get+18} {get_disk+47} {blkdev_ioctl+1558} {do_open+221} {bdget+284} {bd_claim+131} {blkdev_open+0} {blkdev_open+56} {__dentry_open+238} {block_ioctl+27} {do_ioctl+27} {vfs_ioctl+527} {sys_ioctl+60} {system_call+126} Kernel panic - not syncing: Aiee, killing interrupt handler! --LQksG6bCIzRHxTLp--