On Wed, 16 Mar 2005, Max Khon wrote: > Hi! > > Attached patch fixes reboot after panic for me on RELENG_5 and RELENG_5_3. > Crashdumps work again for me as well. > > The problem was in ata_shutdown() -- ATA_FLUSHCACHE request issued from > ata_shutdown() never completes (ata_queue_request() sleeps in > sema_wait(&request->done)) because ata_interrupt() is never called > (callouts do not work as well, so that if the controller is busy > ATA_FLUSHCACHE was not retried). > > I am not sure if "if (panicstr == NULL)" check is required (for normal > shutdown sequence). addump() does not check if we are shutting down > cleanly (ata_flushcache() was copy-n-pasted from addump()) and always > uses atadev->channel->hw.begin_transaction(&request)/end_transaction(&request) > directly. This part here: + if (atadev->channel->hw.begin_transaction(&request) == ATA_OP_CONTINUES) { + do { + DELAY(20); + } while (atadev->channel->hw.end_transaction(&request) == ATA_OP_CONTINUES); looks like it could get stuck in an infinite loop if the controller is hung. I'm not familiar with the ata code so i don't nkow if this is handled elsewhere, but I figure I'd ask :) -- Doug White | FreeBSD: The Power to Serve dwhite_at_gumbysoft.com | www.FreeBSD.orgReceived on Wed Mar 16 2005 - 17:11:58 UTC
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:38:30 UTC