From patchwork Sun Jun 21 00:19:45 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Miller X-Patchwork-Id: 28945 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@bilbo.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from ozlabs.org (ozlabs.org [203.10.76.45]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client CN "mx.ozlabs.org", Issuer "CA Cert Signing Authority" (verified OK)) by bilbo.ozlabs.org (Postfix) with ESMTPS id 87F35B719E for ; Sun, 21 Jun 2009 10:19:50 +1000 (EST) Received: by ozlabs.org (Postfix) id 75A9BDDDA0; Sun, 21 Jun 2009 10:19:50 +1000 (EST) Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.176.167]) by ozlabs.org (Postfix) with ESMTP id 0AC7BDDD1B for ; Sun, 21 Jun 2009 10:19:49 +1000 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752195AbZFUATm (ORCPT ); Sat, 20 Jun 2009 20:19:42 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1752310AbZFUATm (ORCPT ); Sat, 20 Jun 2009 20:19:42 -0400 Received: from 74-93-104-97-Washington.hfc.comcastbusiness.net ([74.93.104.97]:38796 "EHLO sunset.davemloft.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751707AbZFUATl (ORCPT ); Sat, 20 Jun 2009 20:19:41 -0400 Received: from localhost (localhost [127.0.0.1]) by sunset.davemloft.net (Postfix) with ESMTP id DF5CAC8C359; Sat, 20 Jun 2009 17:19:45 -0700 (PDT) Date: Sat, 20 Jun 2009 17:19:45 -0700 (PDT) Message-Id: <20090620.171945.140676687.davem@davemloft.net> To: elendil@planet.nl Cc: sparclinux@vger.kernel.org, linux-ide@vger.kernel.org, bzolnier@gmail.com Subject: Re: cmd64x: irq 14: nobody cared - system is dreadfully slow From: David Miller In-Reply-To: <200906202352.33894.elendil@planet.nl> References: <200906202352.33894.elendil@planet.nl> X-Mailer: Mew version 6.2.51 on Emacs 22.1 / Mule 5.0 (SAKAKI) Mime-Version: 1.0 Sender: sparclinux-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: sparclinux@vger.kernel.org From: Frans Pop Date: Sat, 20 Jun 2009 23:52:33 +0200 > ide0 at 0x1fe02c00000-0x1fe02c00007,0x1fe02c0000a on irq 14 (serialized) > irq 14: nobody cared (try booting with the "irqpoll" option) > Call Trace: Try reverting this patch: commit 6b5cde3629701258004b94cde75dd1089b556b02 Author: Bartlomiej Zolnierkiewicz Date: Mon Dec 29 20:27:32 2008 +0100 cmd64x: set IDE_HFLAG_SERIALIZE explictly for CMD646 * Set IDE_HFLAG_SERIALIZE explictly for CMD646. * Remove no longer needed ide_cmd646 chipset type (which has a nice side-effect of fixing handling of unexpected IRQs). Cc: Sergei Shtylyov Signed-off-by: Bartlomiej Zolnierkiewicz Unlike the commit log message states, I suspect this change "introduces" incorrect handling of unexpected IRQs rather than "fixing". I suspect the problem arises when the controller has a pending interrupt before the kernel boots, and after the reset the IDE layer now won't clear the thing properly due to the IDE_HFLAG_SERIALIZE now being set. I suspect the following logic in ide_intr() is being triggered: if (host->host_flags & IDE_HFLAG_SERIALIZE) { if (hwif != host->cur_port) goto out_early; } so the interrupt isn't cleared and it just keeps trying to run the interrupt handler over and over until the generic IRQ layer gives up and shuts off the interrupt. This would make sense if the CMD64X chip reset code triggers the interrupt, because I see absolutely nothing the makes sure host->cur_port would be setup correctly to ensure that the interrupt got services in that case. I wonder how much testing this commit received... Actually... the patch doesn't revert cleanly. Let me setup a patch to test by hand. It just removes the IDE_HFLAG_SERIALIZE flag from the chipset array entry. Alternatively you can try using the pata_cmd64x.c driver instead :-) Signed-off-by: David S. Miller --- To unsubscribe from this list: send the line "unsubscribe sparclinux" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html diff --git a/drivers/ide/cmd64x.c b/drivers/ide/cmd64x.c index 80b777e..f98ba24 100644 --- a/drivers/ide/cmd64x.c +++ b/drivers/ide/cmd64x.c @@ -425,8 +425,7 @@ static const struct ide_port_info cmd64x_chipsets[] __devinitdata = { .enablebits = {{0x51,0x04,0x04}, {0x51,0x08,0x08}}, .port_ops = &cmd64x_port_ops, .dma_ops = &cmd648_dma_ops, - .host_flags = IDE_HFLAG_SERIALIZE | - IDE_HFLAG_ABUSE_PREFETCH, + .host_flags = IDE_HFLAG_ABUSE_PREFETCH, .pio_mask = ATA_PIO5, .mwdma_mask = ATA_MWDMA2, .udma_mask = ATA_UDMA2,