non aligned DMA transfer attempted
dillon at apollo.backplane.com
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
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