unchecked_isa_dma and BusLogic SCSI controller
Can someone enlighten me on what "unchecked_isa_dma" means in the struct scsi_host_template? Specifically why Bus_Logic_template has it set to 1?
I am trying to reserve a block of memory (>16MB) starting from 0 and hide it from kernel. As a result, the DMA zone becomes 0 in size.
Because Bus_Logic_template has unchecked_isa_dma set to 1, the driver will attempt to allocate a block of memory from DMA zone and thus causes OOMs during its initialization.
It is hard for me to see why BusLogic controller would only do DMA in low 16MB. Is there a fix for this?
BTW, I also tried to increase MAX_DMA_ADDRESS to cover the whole memory area. While the OOMs are gone during BusLogic driver initialization, kernel fails to find labelled root partition or fail to open the initial console. It appears the disk (or the scsi) is not working properly after increasing MAX_DMA_ADDRESS.
My platform is vmplayer. Pretty cool for devel.
Cheers.
Jun
Quoted 3 lines · On Wed, 1 Nov 2006 15:53:30 -0800 Jun Sun wrote:
Can someone enlighten me on what "
unchecked_isa_dma" means in the structscsi_host_template?
It's documented in Documentation/scsi/scsi_mid_low_api.txt:
unchecked_isa_dma - 1=>only use bottom 16 MB of ram (ISA DMA addressing
restriction), 0=>can use full 32 bit (or better) DMA address space
Quoted 2 lines
Specifically why
Bus_Logic_templatehas
it set to 1?
maybe ask on [email protected] (cc-ed)
Quoted 9 lines
I am trying to reserve a block of memory (>16MB) starting from 0 and hide it from kernel. As a result, the DMA zone becomes 0 in size.
Because
Bus_Logic_templatehasunchecked_isa_dmaset to 1, the driver will attempt to allocate a block of memory from DMA zone and thus causes OOMs during its initialization.It is hard for me to see why BusLogic controller would only do DMA in low 16MB. Is there a fix for this?
Does anyone know that controller hardware and its limitations?
If the driver can't handle highmem addresses, you could just change it so that
(a) it does not set unchecked_isa_dma
(b) it sets .slave_alloc in the host template and then does like the <slave_alloc> function in ppa.c or imm.c:
call blk_queue_bounce_limit() to set an address for which bounce buffers (from highmem to lowmem) will be used.
[I don't guarantee that to work for BusLogic.]
Quoted 11 lines
BTW, I also tried to increase
MAX_DMA_ADDRESSto cover the whole memory area. While the OOMs are gone during BusLogic driver initialization, kernel fails to find labelled root partition or fail to open the initial console. It appears the disk (or the scsi) is not working properly after increasingMAX_DMA_ADDRESS.My platform is vmplayer. Pretty cool for devel.
Cheers.
Jun
---
~Randy
Quoted 8 lines · Randy Dunlap
unchecked_isa_dma- 1=>only use bottom 16 MB of ram (ISA DMA addressing
restriction), 0=>can use full 32 bit (or better) DMA address spaceQuoted 2 lines
It is hard for me to see why BusLogic controller would only do DMA in low 16MB. Is there a fix for this?
Does anyone know that controller hardware and its limitations?
I don't, but:
if (pci_set_dma_mask(PCI_Device, DMA_32BIT_MASK )) continue;
So somebody thinks the device can do 32-bit addressing. I would expect that setting unchecked_isa_dma is a historical mistake. However, I don't have any cards of this type to test.
Quoted 5 lines · Matthew Wilcox
Quoted 4 lines
Quoted 2 lines
It is hard for me to see why BusLogic controller would only do DMA in low 16MB. Is there a fix for this?
Does anyone know that controller hardware and its limitations?
Quoted 8 lines
I don't, but:
if (pci_set_dma_mask(PCI_Device, DMA_32BIT_MASK )) continue;So somebody thinks the device can do 32-bit addressing. I would expect that setting
unchecked_isa_dmais a historical mistake. However, I don't have any cards of this type to test.
It could be related to the non-PCI variations of the board.
Maciej
Quoted 10 lines · Matthew Wilcox
Quoted 8 lines · Randy Dunlap
unchecked_isa_dma- 1=>only use bottom 16 MB of ram (ISA DMA addressing
restriction), 0=>can use full 32 bit (or better) DMA address spaceQuoted 2 lines
It is hard for me to see why BusLogic controller would only do DMA in low 16MB. Is there a fix for this?
Does anyone know that controller hardware and its limitations?
Quoted 8 lines
I don't, but:
if (pci_set_dma_mask(PCI_Device, DMA_32BIT_MASK )) continue;So somebody thinks the device can do 32-bit addressing. I would expect that setting
unchecked_isa_dmais a historical mistake. However, I don't have any cards of this type to test.
The buslogic driver also supports non-PCI devices, and at least the ISA boards have the obvious limitiation that unchecked_isa_dma = 1 caters to. Now someone would have to audit the driver whether it's enough to only set this on the actual isa hosts instead of the host template.