From mboxrd@z Thu Jan 1 00:00:00 1970 From: David Daney Subject: Re: [PATCH] ide: New libata driver for OCTEON SOC Compact Flash interface. Date: Fri, 21 Nov 2008 09:47:55 -0800 Message-ID: <4926F44B.2090205@caviumnetworks.com> References: <49261BE5.2010406@caviumnetworks.com> <20081121102137.634616c5@lxorguk.ukuu.org.uk> <4926EA6A.7040704@caviumnetworks.com> <4926EF55.7080004@ru.mvista.com> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Return-path: Received: from mail3.caviumnetworks.com ([12.108.191.235]:14262 "EHLO mail3.caviumnetworks.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755845AbYKURtN (ORCPT ); Fri, 21 Nov 2008 12:49:13 -0500 In-Reply-To: <4926EF55.7080004@ru.mvista.com> Sender: linux-ide-owner@vger.kernel.org List-Id: linux-ide@vger.kernel.org To: Sergei Shtylyov Cc: Alan Cox , linux-ide@vger.kernel.org, linux-mips Sergei Shtylyov wrote: > David Daney wrote: [...] > >>> What stops the following occuring > >>> ATA irq >>> BUSY still set >>> Queue tasklet > >>> Other irq on same line >>> ATA busy clear >>> Handle command > > Is CF interrupt indeed shared with anything? > >>> Tasklet runs but command was sorted out > >>> (or a reset of the ata controller in the gap) > >> Probably nothing. I will try to sort it out. > > It's the need for the tasklet that seems doubtful to me... > The interrupt occurs *before* the device de-asserts BUSY. A small pause is needed to allow the device to clear BUSY and allow libata to function normally. Calling ata_sff_host_intr() while BUSY is asserted causes the driver to fail, as it is expecting to be called from a true IDE interrupt routine. Delaying calling ata_sff_host_intr() until BUSY is clear (using the tasklet) seemed to be the cleanest way to write the driver given that we are using an interrupt generated by DMA complete. David Daney.