busdma_machdep.c with more than 512M memory

Jayachandran C. c.jayachandran at gmail.com
Mon Sep 6 07:38:17 UTC 2010


On Mon, Sep 6, 2010 at 1:04 PM, Jayachandran C.
<c.jayachandran at gmail.com> wrote:
> On Wed, Sep 1, 2010 at 12:37 PM, Jayachandran C.
> <c.jayachandran at gmail.com> wrote:
>> I was looking at a few crashes I see with PCI drivers, and I think it
>> is caused by an issue in busdma_machdep.c where physical address is
>> directly converted using MIPS_PHYS_TO_KSEG1. I have not looked at it
>> in detail, but it looks obviously wrong.
>>
>> Any suggestions on how to fix thiis is welcome, it probably needs an
>> uncached TLB entry. On 64bit we could use XKPHYS uncached.
>>
>>
>> ---
>>  632         if (newmap->flags & DMAMAP_UNCACHEABLE) {
>>  633                 void *tmpaddr = (void *)*vaddr;
>>  634
>>  635                 if (tmpaddr) {
>>  636                         tmpaddr = (void
>> *)MIPS_PHYS_TO_KSEG1(vtophys(tmpaddr));
>>  637                         newmap->origbuffer = *vaddr;
>>  638                         newmap->allocbuffer = tmpaddr;
>>  639                         mips_dcache_wbinv_range((vm_offset_t)*vaddr,
>>  640                             dmat->maxsize);
>>  641                         *vaddr = tmpaddr;
>>  642                 }
>> ---
>> 1361                 bpage->busaddr = pmap_kextract(bpage->vaddr);
>> 1362                 bpage->vaddr_nocache =
>> 1363                     (vm_offset_t)MIPS_PHYS_TO_KSEG1(bpage->busaddr);
>> 1364                 mtx_lock(&bounce_lock);
>
> Based on Juli's suggestion, I have a patch (attached) to switch the
> calls to pmap_mapdev/pmap_unmapdev.
>
> Seems to work for me now, please review.

That was an older version of the patch, here is the correct version.

Thanks,
JC.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: mips-busdma.patch
Type: text/x-patch
Size: 2220 bytes
Desc: not available
Url : http://lists.freebsd.org/pipermail/freebsd-mips/attachments/20100906/9f13024c/mips-busdma.bin


More information about the freebsd-mips mailing list