[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH v2] xen: arm: correct return value of raw_copy_{to/from}_guest_*, raw_clear_guest



On 12/09/2013 12:13 PM, Ian Campbell wrote:
> This is a generic interface which is supposed to return the number of bytes
> which were not copied. Make it so.
> 
> Update the incorrect callers prepare_dtb, decode_thumb{2} and
> xenmem_add_to_physmap_range.
> 
> In the xenmem_add_to_physmap_range case, observe that we are not propagating
> errors from xenmem_add_to_physmap_one and do so.
> 
> In the decode_thumb case and an emacs magic block to decode.c
> 
> Make the flush_dcache parameter to the helper an int while at it.

Actually this patch is buggy, I can't anymore create a guest on midway. I get 
lots of: 
Failed to map pfn to mfn rc:-14:0 pfn:3efd8 mfn:802a3
Failed to map pfn to mfn rc:-14:0 pfn:3e019 mfn:802a4
Failed to map pfn to mfn rc:-14:0 pfn:3ed92 mfn:802a5
...

> Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx>
> ---
> v2: Fix xenmem_add_to_physmap_range, which was assuming -errno return codes.
>     Fix raw_copy_from_guest and raw_clear_guest too
> ---

[..]

> diff --git a/xen/arch/arm/mm.c b/xen/arch/arm/mm.c
> index 399e546..26ca588 100644
> --- a/xen/arch/arm/mm.c
> +++ b/xen/arch/arm/mm.c
> @@ -1067,22 +1067,33 @@ static int xenmem_add_to_physmap_range(struct domain 
> *d,
>          xen_ulong_t idx;
>          xen_pfn_t gpfn;
>  
> -        rc = copy_from_guest_offset(&idx, xatpr->idxs, xatpr->size-1, 1);
> -        if ( rc < 0 )
> +        if ( unlikely(copy_from_guest_offset(&idx, xatpr->idxs,
> +                                             xatpr->size-1, 1)) )
> +        {
> +            rc = -EFAULT;
>              goto out;
> +        }
>  
> -        rc = copy_from_guest_offset(&gpfn, xatpr->gpfns, xatpr->size-1, 1);
> -        if ( rc < 0 )
> +        if ( unlikely(copy_from_guest_offset(&gpfn, xatpr->gpfns,
> +                                             xatpr->size-1, 1)) )
> +        {
> +            rc = -EFAULT;
>              goto out;
> +        }
>  
>          rc = xenmem_add_to_physmap_one(d, xatpr->space,
>                                         xatpr->foreign_domid,
>                                         idx, gpfn);
> -
> -        rc = copy_to_guest_offset(xatpr->errs, xatpr->size-1, &rc, 1);
>          if ( rc < 0 )
>              goto out;

copy_to_guest_offset was fine before the "if ( rc < 0 )" because we want to 
copy the error in the xatpr->errs.

> +        if ( unlikely(copy_to_guest_offset(xatpr->errs,
> +                                           xatpr->size-1, &rc, 1)) );

You forgot to remote the ';' at the end.

Here a patch to fix this commit

======================================================================================

commit ce9b426051d742e116d43cbd0e15dc47f5fab88b
Author: Julien Grall <julien.grall@xxxxxxxxxx>
Date:   Mon Dec 9 18:29:50 2013 +0000

    xen/arm: Fix regression after commit d963923
    
    The commit d963923  "xen: arm: correct return value of
    raw_copy_{to/from}_guest_*, raw_clear_guest" doesn't permit to boot guest
    on Xen ARM.
    
    Also we want to get the right rc in the error arrays, so move back
    copy_to_guest function to the previous place.
    
    Signed-off-by: Julien Grall <julien.grall@xxxxxxxxxx>

diff --git a/xen/arch/arm/mm.c b/xen/arch/arm/mm.c
index 6e6d7d4..4598866 100644
--- a/xen/arch/arm/mm.c
+++ b/xen/arch/arm/mm.c
@@ -1108,16 +1108,17 @@ static int xenmem_add_to_physmap_range(struct domain *d,
         rc = xenmem_add_to_physmap_one(d, xatpr->space,
                                        xatpr->foreign_domid,
                                        idx, gpfn);
-        if ( rc < 0 )
-            goto out;
 
         if ( unlikely(copy_to_guest_offset(xatpr->errs,
-                                           xatpr->size-1, &rc, 1)) );
+                                           xatpr->size-1, &rc, 1)) )
         {
             rc = -EFAULT;
             goto out;
         }
 
+        if ( rc < 0 )
+            goto out;
+
         xatpr->size--;
 
         /* Check for continuation if it's not the last interation */

-- 
Julien Grall

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.