vserver 1.9.5.x5
[linux-2.6.git] / arch / arm / mach-ixp2000 / pci.c
index d08cebe..831f8ff 100644 (file)
@@ -142,23 +142,24 @@ int ixp2000_pci_abort_handler(unsigned long addr, unsigned int fsr, struct pt_re
 {
 
        volatile u32 temp;
+       unsigned long flags;
 
        pci_master_aborts = 1;
 
-       cli();
+       local_irq_save(flags);
        temp = *(IXP2000_PCI_CONTROL);
        if (temp & ((1 << 8) | (1 << 5))) {
-               *(IXP2000_PCI_CONTROL) = temp;
+               ixp2000_reg_write(IXP2000_PCI_CONTROL, temp);
        }
 
        temp = *(IXP2000_PCI_CMDSTAT);
        if (temp & (1 << 29)) {
                while (temp & (1 << 29)) {      
-                       *(IXP2000_PCI_CMDSTAT) = temp;
+                       ixp2000_reg_write(IXP2000_PCI_CMDSTAT, temp);
                        temp = *(IXP2000_PCI_CMDSTAT);
                }
        }
-       sti();
+       local_irq_restore(flags);
 
        /*
         * If it was an imprecise abort, then we need to correct the
@@ -174,21 +175,22 @@ int
 clear_master_aborts(void)
 {
        volatile u32 temp;
+       unsigned long flags;
 
-       cli();
+       local_irq_save(flags);
        temp = *(IXP2000_PCI_CONTROL);
        if (temp & ((1 << 8) | (1 << 5))) {     
-               *(IXP2000_PCI_CONTROL) = temp;
+               ixp2000_reg_write(IXP2000_PCI_CONTROL, temp);
        }
 
        temp = *(IXP2000_PCI_CMDSTAT);
        if (temp & (1 << 29)) {
                while (temp & (1 << 29)) {
-                       *(IXP2000_PCI_CMDSTAT) = temp;
+                       ixp2000_reg_write(IXP2000_PCI_CMDSTAT, temp);
                        temp = *(IXP2000_PCI_CMDSTAT);
                }
        }
-       sti();
+       local_irq_restore(flags);
 
        return 0;
 }