lkml.org 
[lkml]   [2004]   [Jun]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [discuss] Re: 32-bit dma allocations on 64-bit platforms
At Thu, 24 Jun 2004 17:29:46 +0200,
Andrea Arcangeli wrote:
>
> On Thu, Jun 24, 2004 at 04:58:24PM +0200, Takashi Iwai wrote:
> > At Thu, 24 Jun 2004 16:42:58 +0200,
> > Andi Kleen wrote:
> > >
> > > On Thu, 24 Jun 2004 16:36:47 +0200
> > > Takashi Iwai <tiwai@suse.de> wrote:
> > >
> > > > At Thu, 24 Jun 2004 13:29:00 +0200,
> > > > Andi Kleen wrote:
> > > > >
> > > > > > Can't it be called with GFP_KERNEL at first, then with GFP_DMA if the
> > > > > > allocated pages are out of dma mask, just like in pci-gart.c?
> > > > > > (with ifdef x86-64)
> > > > >
> > > > > That won't work reliable enough in extreme cases.
> > > >
> > > > Well, it's not perfect, but it'd be far better than GFP_DMA only :)
> > >
> > > The only description for this patch I can think of is "russian roulette"
> >
> > Even if we have a bigger DMA zone, it's no guarantee that the obtained
> > page is precisely in the given mask. We can unlikely define zones
> > fine enough for all different 24, 28, 29, 30 and 31bit DMA masks.
> >
> >
> > My patch for i386 works well in most cases, because such a device is
> > usually equipped on older machines with less memory than DMA mask.
> >
> > Without the patch, the allocation is always <16MB, may fail even small
> > number of pages.
>
> why does it fail? note that with the lower_zone_reserve_ratio algorithm I
> added to 2.4 all dma zone will be reserved for __GFP_DMA allocations so
> you should have troubles only with 2.6, 2.4 should work fine.
> So with latest 2.4 it has to fail only if you already allocated 16M with
> pci_alloc_consistent which sounds unlikely.

If a driver needs large contiguous (e.g. a coule of MB) pages and the
memory is fragmented, it may still fail. But it's anyway very
rare...

However, 16MB isn't enough in some cases indeed. For example, the
following devices are often problematic:

- SB Live (emu10k1)
This needs many single pages for WaveTable synthesis per user's
request (up to 128MB). It sets 31bit DMA mask (sigh...)

- ES1968
This requires 28bit DMA mask and a single big buffer for all PCM
streams.

Also there are other devices with <32bit DMA masks, for example, 24bit
(als4000, es1938, sonicvibes, azt3328), 28bit (ice1712, maestro3),
30bit (trident), 31bit (ali5451)...


Takashi
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2005-03-22 14:04    [W:0.171 / U:0.480 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site