Will need an Ack from a VT-d maintainer (Allen Kay is listed in our
MAINTAINERS file, and is CC'ed). Also needs a Signed-off-by line.
-- Keir
On 11/05/2011 12:45, "Igor Mammedov" <imammedo@xxxxxxxxxx> wrote:
> On error exit from function, maped pages should be unmapped
> and acquired locks released.
>
> diff -r 4b0692880dfa -r da93d9e43b3c xen/drivers/passthrough/vtd/intremap.c
> --- a/xen/drivers/passthrough/vtd/intremap.c Thu May 05 17:40:34 2011 +0100
> +++ b/xen/drivers/passthrough/vtd/intremap.c Wed May 11 12:29:54 2011 +0200
> @@ -210,7 +210,8 @@
> if ( iremap_entries )
> unmap_vtd_domain_page(iremap_entries);
>
> - ir_ctrl->iremap_num++;
> + if ( i < IREMAP_ENTRY_NR )
> + ir_ctrl->iremap_num++;
> return i;
> }
>
> @@ -246,6 +247,8 @@
> dprintk(XENLOG_ERR VTDPREFIX,
> "%s: index (%d) get an empty entry!\n",
> __func__, index);
> + unmap_vtd_domain_page(iremap_entries);
> + spin_unlock_irqrestore(&ir_ctrl->iremap_lock, flags);
> return -EFAULT;
> }
>
> @@ -281,7 +284,8 @@
> if ( index < 0 )
> {
> index = alloc_remap_entry(iommu);
> - apic_pin_2_ir_idx[apic][ioapic_pin] = index;
> + if ( index < IREMAP_ENTRY_NR )
> + apic_pin_2_ir_idx[apic][ioapic_pin] = index;
> }
>
> if ( index > IREMAP_ENTRY_NR - 1 )
> @@ -546,6 +550,8 @@
> dprintk(XENLOG_ERR VTDPREFIX,
> "%s: index (%d) get an empty entry!\n",
> __func__, index);
> + unmap_vtd_domain_page(iremap_entries);
> + spin_unlock_irqrestore(&ir_ctrl->iremap_lock, flags);
> return -EFAULT;
> }
>
>
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@xxxxxxxxxxxxxxxxxxx
> http://lists.xensource.com/xen-devel
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|