On Fri, May 23, 2003 at 02:59:35PM -0700, Wayne Gowcher wrote: > Where PAGE_OFFSET is 0x8000 0000, and where PHYSADDR > would AND the address against 0x1FFF FFFF. As far as I > can tell the problem comes from pci_alloc_consistent > doing : > > ret = UNCAC_ADDR(ret) > > which converts a 0x8xxx address to 0xAxxx, and then > when you pass this 0xAxxx_xxxx address through > virt_to_phys() you get an address of the form > 0x2xxx_xxxx. This 0x2xxx_xxxx is passed to the dma > controller as the physical address to where it must > read / write data, and because it is 0x2xxx_xxxx and > not 0x0xxx_xxxx an exception occurs. The change was partly done to catch broken code, partly because a subtraction is potencially faster on some processors. > At first I just tried AND'ing out the 0xA.. like > PHYSADDR used to do it, but with that change i no > longer get the exception, but the driver does not dma > the data across - it just sits there. > > I read DMA-mapping.txt and it says virt_to_phys() will > be phased out, and should be used, but doesn't > elaborate any further (like how you should do it now). Use the value returned by pci_alloc_consistent in *dma_handle instead of trying to do any conversions with of pci_alloc_consistent's return value. Ralf