 
	
| [Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] ACPI/APEI: Unlock apei_iomaps_lock on error path
 >>> On 22.03.13 at 00:19, Andrew Cooper <andrew.cooper3@xxxxxxxxxx> wrote:
> This causes deadlocks during early boot on hardware with broken/buggy APEI
> implementations, such as a Dell Poweredge 2950 with the latest currently
> available BIOS.
> 
> Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
> 
> diff -r 7babbd46586b -r 6a952c14c4dc xen/drivers/acpi/apei/apei-io.c
> --- a/xen/drivers/acpi/apei/apei-io.c
> +++ b/xen/drivers/acpi/apei/apei-io.c
> @@ -147,12 +147,15 @@ static void __init apei_post_unmap(paddr
>       spin_lock_irqsave(&apei_iomaps_lock, flags);
>       map = __apei_find_iomap(paddr, size);
>       if (!map)
> -             return;
> +             goto err;
>  
>       list_del(&map->list);
>       spin_unlock_irqrestore(&apei_iomaps_lock, flags);
>  
>       xfree(map);
> +     return;
> +err:
> +     spin_unlock_irqrestore(&apei_iomaps_lock, flags);
>  }
>  
>  /* In NMI handler, should set silent = 1 */
I'd prefer doing this slightly differently:
--- a/xen/drivers/acpi/apei/apei-io.c
+++ b/xen/drivers/acpi/apei/apei-io.c
@@ -146,10 +146,8 @@ static void __init apei_post_unmap(paddr
 
        spin_lock_irqsave(&apei_iomaps_lock, flags);
        map = __apei_find_iomap(paddr, size);
-       if (!map)
-               return;
-
-       list_del(&map->list);
+       if (map)
+               list_del(&map->list);
        spin_unlock_irqrestore(&apei_iomaps_lock, flags);
 
        xfree(map);
Jan
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
 
 
 | 
|  | Lists.xenproject.org is hosted with RackSpace, monitoring our |