[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 1/2 v5] iommu/amd: Fix logic for clearing the IOMMU interrupt bits
>>> On 12.06.13 at 01:03, Suravee Suthikulanit <suravee.suthikulpanit@xxxxxxx> wrote: > On 6/11/2013 1:47 AM, Jan Beulich wrote: >> @@ -611,22 +608,33 @@ static void iommu_check_event_log(struct >> u32 entry; >> unsigned long flags; >> >> + /* RW1C interrupt status bit */ >> + writel(IOMMU_STATUS_EVENT_LOG_INT_MASK, >> + iommu->mmio_base + IOMMU_STATUS_MMIO_OFFSET); >> + >> iommu_read_log(iommu, &iommu->event_log, >> sizeof(event_entry_t), parse_event_log_entry); >> >> spin_lock_irqsave(&iommu->lock, flags); >> >> - /*check event overflow */ >> + /* Check event overflow. */ >> entry = readl(iommu->mmio_base + IOMMU_STATUS_MMIO_OFFSET); >> - >> if ( iommu_get_bit(entry, IOMMU_STATUS_EVENT_OVERFLOW_SHIFT) ) >> iommu_reset_log(iommu, &iommu->event_log, > set_iommu_event_log_control); >> - >> - /* reset interrupt status bit */ >> - entry = readl(iommu->mmio_base + IOMMU_STATUS_MMIO_OFFSET); >> - iommu_set_bit(&entry, IOMMU_STATUS_EVENT_LOG_INT_SHIFT); >> - >> - writel(entry, iommu->mmio_base + IOMMU_STATUS_MMIO_OFFSET); >> + else >> + { >> + entry = readl(iommu->mmio_base + IOMMU_CONTROL_MMIO_OFFSET); >> + if ( !(entry & IOMMU_CONTROL_EVENT_LOG_INT_MASK) ) >> + { >> + entry |= IOMMU_CONTROL_EVENT_LOG_INT_MASK; >> + writel(entry, iommu->mmio_base + IOMMU_CONTROL_MMIO_OFFSET); >> + /* >> + * Re-schedule the tasklet to handle eventual log entries added >> + * between reading the log above and re-enabling the interrupt. >> + */ >> + tasklet_schedule(&amd_iommu_irq_tasklet); >> + } >> + } > If more entries are added to the event log during the time that event > log interrupt is disabled (in the control register), > the IOMMU hardware will generate interrupt once the the interrupt enable > bit in the control register changes from 0 to 1 and set the status > register. Since the "iommu_interrupt_handler" code is already calling > "schedule_tasklet", we should not need to "re-schedule" tasklet here. > I have confirmed the hardware behavior described with the hardware > designer. This is also the same on the PPR log. And also the same between v1 and v2 hardware? Again, I'd like to be on the safe side, and rather do a reschedule too much than one too little. And in any case, having your documentation made more precise in these respects would be much appreciated. Jan _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |