Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=8bf50f71cbfc7d043f0f135da72b3feefeaa0eb8
Commit:     8bf50f71cbfc7d043f0f135da72b3feefeaa0eb8
Parent:     9e91fdb32d449a6b57f8236a793ae2f3df79b4d8
Author:     Mike Miller (OS Dev) <[EMAIL PROTECTED]>
AuthorDate: Wed Oct 17 10:10:04 2007 +0200
Committer:  Jens Axboe <[EMAIL PROTECTED]>
CommitDate: Wed Oct 17 10:10:04 2007 +0200

    cciss: disable DMA refetch on Smart Array P600
    
    This patch disables DMA refetch in the PCI bridge. We have disabled DMA
    prefetch for quite some time. Testing with XEN revealed another ASIC bug. If
    dom0 resides on a P600 the board can can an MCA bi accessing invalid memory
    addresses. Apparently, we need to disable both prefetch and refetch.
    My understanding is a refetch operation should not occur but it is a valid
    thing to do if prefetched data is no longer available for whatever reason.
    Please consider this patch for inclusion.
    
    Signed-off-by: Mike Miller <[EMAIL PROTECTED]>
    Signed-off-by: Alex Chiang <[EMAIL PROTECTED]>
    
    
--------------------------------------------------------------------------------
    Signed-off-by: Jens Axboe <[EMAIL PROTECTED]>
---
 drivers/block/cciss.c |   11 ++++++++---
 1 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/drivers/block/cciss.c b/drivers/block/cciss.c
index 3fb7e8b..e330c26 100644
--- a/drivers/block/cciss.c
+++ b/drivers/block/cciss.c
@@ -3035,15 +3035,20 @@ static int cciss_pci_init(ctlr_info_t *c, struct 
pci_dev *pdev)
        }
 #endif
 
-       /* Disabling DMA prefetch for the P600
-        * An ASIC bug may result in a prefetch beyond
-        * physical memory.
+       /* Disabling DMA prefetch and refetch for the P600.
+        * An ASIC bug may result in accesses to invalid memory addresses.
+        * We've disabled prefetch for some time now. Testing with XEN
+        * kernels revealed a bug in the refetch if dom0 resides on a P600.
         */
        if(board_id == 0x3225103C) {
                __u32 dma_prefetch;
+               __u32 dma_refetch;
                dma_prefetch = readl(c->vaddr + I2O_DMA1_CFG);
                dma_prefetch |= 0x8000;
                writel(dma_prefetch, c->vaddr + I2O_DMA1_CFG);
+               pci_read_config_dword(pdev, PCI_COMMAND_PARITY, &dma_refetch);
+               dma_refetch |= 0x1;
+               pci_write_config_dword(pdev, PCI_COMMAND_PARITY, dma_refetch);
        }
 
 #ifdef CCISS_DEBUG
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to