From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id ; Sun, 26 Aug 2001 16:21:01 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id ; Sun, 26 Aug 2001 16:20:53 -0400 Received: from are.twiddle.net ([64.81.246.98]:17412 "EHLO are.twiddle.net") by vger.kernel.org with ESMTP id ; Sun, 26 Aug 2001 16:20:39 -0400 Date: Sun, 26 Aug 2001 13:20:53 -0700 From: Richard Henderson To: "David S. Miller" Cc: linux-kernel@vger.kernel.org, jay.estabrook@compaq.com Subject: Re: [PATCH] PCI 64-bit API up for testing Message-ID: <20010826132053.A8001@twiddle.net> Mail-Followup-To: "David S. Miller" , linux-kernel@vger.kernel.org, jay.estabrook@compaq.com In-Reply-To: <20010821.080953.66175161.davem@redhat.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="7JfCtLOvnd9MIVvH" Content-Disposition: inline User-Agent: Mutt/1.2.5i In-Reply-To: <20010821.080953.66175161.davem@redhat.com>; from davem@redhat.com on Tue, Aug 21, 2001 at 08:09:53AM -0700 Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org --7JfCtLOvnd9MIVvH Content-Type: text/plain; charset=us-ascii Content-Disposition: inline On Tue, Aug 21, 2001 at 08:09:53AM -0700, David S. Miller wrote: > ftp://ftp.kernel.org/pub/linux/kernel/people/davem/PCI64/ Here's bits for Alpha vs 2.4.9 + pci64 patch 3. It's not been tested seriously, since I have no 64-bit capable devices. But it looks mostly ok, and continues to boot on a number of machines. Something that should be mentioned in the documentation for someone implementing these functions is that drivers will call the pci64 interfaces *even if* pci_dac_cycles_ok returns false, which means that one has to remember what decisions were made in that function. I'm undecided on whether we should consider such nonsense illegal. On the one hand, it clutters up the pci mapping functions, and it is easy to forget all the proper checks. The sparc64 version, for instance, will do the wrong thing if PCI_DMA_FLAG_HUGE_MAPS is set and the device supports less than 64 bits of addressing. On the other hand, I can also see that requiring that the driver call the correct sets of functions based on what mode it's in will clutter up driver source. Given that there are more drivers than architectures, it makes sense to keep them as clean as may be. r~ --7JfCtLOvnd9MIVvH Content-Type: application/x-gzip Content-Disposition: attachment; filename="d-pci64.gz" Content-Transfer-Encoding: base64 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 --7JfCtLOvnd9MIVvH--