Hi, People,
My application requires dma’ing huge 3D voxel buffers. It’s commonplace for
me to have to handle input buffers that consist of 512 slices of 512 x 512
64-bit voxels. That’s 2 raised to 9+9+9+6 = 33, that is, 8 Gigabytes of data
per image buffer! Not exactly your friendly game texture map.
The driver complex provides for dma’ing directly from the user buffer,
which saves a fair amount of performance loss from moving data back and
forth, besides being able to maintain compatibility with Linux and Solaris,
which is a must in my application. I set up an MDL for the user buffer, lock
it, and dma from it. When the interrupt comes, I release the mappings, the
locks and the MDL.
So far so good. The problem is that IoAllocateMdl restricts me to a 64Kb
buffer, and that’s not enough to represent a large and physically fragmented
buffer. When that happens I used to break the buffer into many, but that’s a
royal pain. I recently allowed for the use of the older MDL call, I believe
it’s MmCreateMdl or something like it, but that’s a deprecated call.
Do any of you know of another way to dma from user buffers that doesn’t run
into this problem of overflowing max mdl buffer sizes ? Inquiring minds want
to know. ![]()
Alberto.