non aligned DMA transfer attempted

Matthew Dillon dillon at
Fri Sep 4 23:14:28 UTC 2009

:>    The physio code directly maps the userland buffer via vmapbuf() and
:>    supplies it as a BIO to the device.  The ATA driver does not use
:>    BUSDMA (and never has)... it assumes BIOs are minimally aligned.

    By the way Scott, do you honestly believe that idiotic one-line
    answers just as a means to try to screw over my postings are
    appropriate for someone of your standing in the FreeBSD community?

    In anycase, this is what was causing the problem in DragonFly
    and the code is nearly identicial to FreeBSD.  Adding the bounce
    buffers in physio and cam's pass-through fixed the problem in
    DragonFly... that is, the programs that we got bug reports about
    non-aligned DMA transfers started working again after I made
    those changes.

    Yes, removing the check might work in some cases, particularly
    with newer chipsets, since even BUSDMA alignment tends to be
    conservative for reverse-engineered chipsets, but I've seen
    userland pass byte-aligned buffers through CAM and physio on
    numerous occassions and if you actually want it to work reliably
    you have to enforce at least a base alignment... which BUSDMA can
    do if the driver uses BUSDMA (except it does it way too deep in
    the driver stack IMHO).  All my points stand.  Bounce buffers have
    created issues both positive and negative from the day they were
    introduced to this very day.  I was very happy to be able to
    wash my hands of the majority of those problems by enforcing
    a base alignment closer to the userland boundary, and I would
    heartily recommend the same approach to any OS project.

    So, again, if you have a more detailed response that gets at the
    heart of the problem, I'm sure the original posters are eagerly
    waiting your next posting.

    But hey, if you think your type of answer is completely
    appropriate then maybe I should start following your lead and
    not bother to supply any detail in my own.  Hey, you're wrong!
    Oh, by the way, I'm not going to bother to say why.  Sheesh.
    You guys are just too full of yourselves these days.


More information about the freebsd-current mailing list