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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, 2 Mar 2006, Ju, Seokmann wrote:

> Hi,
>
> On Thursday, March 02, 2006 3:04 PM Dick Johnson wrote:
>> 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.

> Thank you for your valueable comment. One good thing is that the system
> does 2 GB memory so that highmem won't come into picture. I am implementing
> the feature with suggestions.
>
> Thank you again,
>
> Seokmann
>

You're welcome. Sometimes the simplest thing is the best thing, especially
for a debugging hack. Of course, Jens may be "more perfectly" correct,
but since you are just checking to see the correct data in your
DMA scatter list, and the memory is "DMA pages", the hack will work.


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 [email protected] - 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 [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Stuff]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]     [Linux Resources]
  Powered by Linux