From owner-freebsd-current@FreeBSD.ORG Tue Aug 3 09:28:00 2004 Return-Path: Delivered-To: freebsd-current@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id E1B1716A4DA for ; Tue, 3 Aug 2004 09:28:00 +0000 (GMT) Received: from will.iki.fi (will.iki.fi [217.169.64.20]) by mx1.FreeBSD.org (Postfix) with ESMTP id A07B543D67 for ; Tue, 3 Aug 2004 09:28:00 +0000 (GMT) (envelope-from will+freebsd-current@will.iki.fi) Received: from [10.0.20.162] (fa-3-0-0.fw.exomi.com [217.169.64.99]) by will.iki.fi (Postfix) with ESMTP id 8E47924; Tue, 3 Aug 2004 12:30:11 +0300 (EEST) Message-ID: <410F5A99.8070005@will.iki.fi> Date: Tue, 03 Aug 2004 12:27:53 +0300 From: Ville-Pertti Keinonen User-Agent: Mozilla Thunderbird 0.7.1 (X11/20040708) X-Accept-Language: en-us, en MIME-Version: 1.0 To: =?ISO-8859-1?Q?S=F8ren_Schmidt?= References: <410E688D.7020709@will.iki.fi> <410E74F7.1070000@will.iki.fi> <20040802132802.3d7kgoow0c80ss0s@www.sweetdreamsracing.biz> <410E7B8B.3080407@will.iki.fi> <410E81B8.1000206@DeepCore.dk> <410E8594.7070600@will.iki.fi> <410EA92C.6090506@DeepCore.dk> <410F3DD0.5030104@will.iki.fi> <410F4F66.8040201@DeepCore.dk> In-Reply-To: <410F4F66.8040201@DeepCore.dk> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 8bit cc: freebsd-current@freebsd.org Subject: Re: ATA driver races with interrupts X-BeenThere: freebsd-current@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: Discussions about the use of FreeBSD-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 03 Aug 2004 09:28:01 -0000 Søren Schmidt wrote: > We dont want to disable interrupts, ever. That makes avoiding races difficult for some hardware... > I have one change in a tree here that you could try, but as long as > the hardware doesn't support proper interrupt status its impossible to > close the race window completely. Please remember that this is part of > a bigger patchset, so I might have edited it too much, YMMV,, It introduces the same race as my patch - if the interrupt occurs after ATA_DMA_ACTIVE is set but before running is set, the interrupt may be acknowledged (I assume that's what writing BMSTAT_PORT does) but ignored (because running == NULL). It seems to me that reliable solutions would all involve atomically (from an interrupt perspective) performing the final activation of the transaction and marking the transaction active for the interrupt handler to check. What the correct way to ensure such atomicity in -current is, I don't know.