|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] AMD IOMMU: only translate remapped IO-APIC RTEs
>>> On 23.04.15 at 15:31, <Suravee.Suthikulpanit@xxxxxxx> wrote:
>
> On 4/17/15, 10:27, "Jan Beulich" <JBeulich@xxxxxxxx> wrote:
>
>>1aeb1156fa ("x86 don't change affinity with interrupt unmasked")
>>introducing RTE reads prior to the respective interrupt having got
>>enabled for the first time uncovered a bug in 2ca9fbd739 ("AMD IOMMU:
>>allocate IRTE entries instead of using a static mapping"): We obviously
>>shouldn't be translating RTEs for which remapping didn't get set up
>>yet.
>>
>>Reported-by: Sander Eikelenboom <linux@xxxxxxxxxxxxxx>
>>Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>
>>
>>--- a/xen/drivers/passthrough/amd/iommu_intr.c
>>+++ b/xen/drivers/passthrough/amd/iommu_intr.c
>>@@ -365,15 +365,17 @@ unsigned int amd_iommu_read_ioapic_from_
>> unsigned int apic, unsigned int reg)
>> {
>> unsigned int val = __io_apic_read(apic, reg);
>>+ unsigned int pin = (reg - 0x10) / 2;
>>+ unsigned int offset = ioapic_sbdf[IO_APIC_ID(apic)].pin_2_idx[pin];
>>
>>- if ( !(reg & 1) )
>>+ if ( !(reg & 1) && offset < INTREMAP_ENTRIES )
>> {
>>- unsigned int offset = val & (INTREMAP_ENTRIES - 1);
>> u16 bdf = ioapic_sbdf[IO_APIC_ID(apic)].bdf;
>> u16 seg = ioapic_sbdf[IO_APIC_ID(apic)].seg;
>> u16 req_id = get_intremap_requestor_id(seg, bdf);
>> const u32 *entry = get_intremap_entry(seg, req_id, offset);
>>
>>+ ASSERT(offset == (val & (INTREMAP_ENTRIES - 1)));
>
> Jan, could you please explain why the ASSERT is needed here?
The previous value "offset" got assigned was calculated using
the right side expression. I.e. the assert makes sure that what
we used before and what we use now is the same.
Jan
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |