u32 tail, head, *entry, tail_offest, head_offset;
BUG_ON(!iommu || ((log != &iommu->event_log) && (log != &iommu->ppr_log)));
+
+ spin_lock(&log->lock);
/* make sure there's an entry in the log */
tail_offest = ( log == &iommu->event_log ) ?
writel(head, iommu->mmio_base + head_offset);
}
+ spin_unlock(&log->lock);
+
return 0;
}
u32 entry;
unsigned long flags;
- spin_lock_irqsave(&iommu->lock, flags);
-
iommu_read_log(iommu, &iommu->event_log,
sizeof(event_entry_t), parse_event_log_entry);
+ spin_lock_irqsave(&iommu->lock, flags);
+
/*check event overflow */
entry = readl(iommu->mmio_base + IOMMU_STATUS_MMIO_OFFSET);
bus = PCI_BUS(device_id);
devfn = PCI_DEVFN2(device_id);
- local_irq_enable();
-
spin_lock(&pcidevs_lock);
pdev = pci_get_pdev(iommu->seg, bus, devfn);
spin_unlock(&pcidevs_lock);
- local_irq_disable();
-
if ( pdev == NULL )
return;
u32 entry;
unsigned long flags;
- spin_lock_irqsave(&iommu->lock, flags);
-
iommu_read_log(iommu, &iommu->ppr_log,
sizeof(ppr_entry_t), parse_ppr_log_entry);
+
+ spin_lock_irqsave(&iommu->lock, flags);
/*check event overflow */
entry = readl(iommu->mmio_base + IOMMU_STATUS_MMIO_OFFSET);
ring_buf->head = 0;
ring_buf->tail = 0;
+ spin_lock_init(&ring_buf->lock);
+
ring_buf->alloc_size = PAGE_SIZE << get_order_from_bytes(entries *
entry_size);
ring_buf->entries = ring_buf->alloc_size / entry_size;