Re: Question: how to map SCSI data DMA address to virtual address?

From: linux-os (Dick Johnson)
Date: Thu Mar 02 2006 - 15:01:44 EST



On Thu, 2 Mar 2006, Jens Axboe wrote:

> On Thu, Mar 02 2006, linux-os (Dick Johnson) wrote:
>>
>> On Thu, 2 Mar 2006, Ju, Seokmann wrote:
>>
>>> Hi,
>>>
>>> In the 'scsi_cmnd' structure, there are two entries holding address
>>> information for data to be transferred. One is 'request_buffer' and the
>>> other one is 'buffer'.
>>> In case of 'use_sg' is non-zero, those entries indicates the address of
>>> the scatter-gather table.
>>>
>>> Is there way to get virtual address (so that the data could be accessed
>>> by the driver) of the actual data in the case of 'use_sg' is non-zero?
>>>
>>> Any comments would be appreciated.
>>>
>>>
>>> Thank you,
>>>
>>> Seokmann
>>> -
>>
>> There is a macro for this purpose. However, for experiments, in
>> the kernel, you can add PAGE_OFFSET (0xC00000000) to get the virtual
>> address. The macro is __va(a), its inverse is __pa(a).
>>
>> Careful. These things can change.
>
> Bzzt no, this wont work if an iommu is involved. It also wont work if
> the page doesn't have a virtual address mapping (think highmem).
>
> --
> Jens Axboe
>

Are you going to get DMA-able pages out of high memory? The guy is
doing scatter-table DMA, i.e., linked DMA. I think you need to
build that table with pages from get_dma_page(). If you use
highmem, somebody can program the iommu right out from under
the DMA engine while a DMA is in progress because the CPU is
not involved and can be executing lots of code that can do lots
of bad things.

Cheers,
Dick Johnson
Penguin : Linux version 2.6.15.4 on an i686 machine (5589.54 BogoMips).
Warning : 98.36% of all statistics are fiction, book release in April.
_


****************************************************************
The information transmitted in this message is confidential and may be privileged. Any review, retransmission, dissemination, or other use of this information by persons or entities other than the intended recipient is prohibited. If you are not the intended recipient, please notify Analogic Corporation immediately - by replying to this message or by sending an email to DeliveryErrors@xxxxxxxxxxxx - and destroy all copies of this information, including any attachments, without reading or disclosing them.

Thank you.
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/