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

Re: [Xen-devel] [PATCH v2 1/2] xen: arm: introduce raw_copy_to_guest_flush_dcache() function



On 11/26/2013 10:54 AM, Oleksandr Dmytryshyn wrote:
> This function flushes the dcache while copying the data.
> 
> Signed-off-by: Oleksandr Dmytryshyn <oleksandr.dmytryshyn@xxxxxxxxxxxxxxx>
> ---
>  xen/arch/arm/guestcopy.c           | 16 +++++++++++++++-
>  xen/include/asm-arm/guest_access.h |  2 ++
>  2 files changed, 17 insertions(+), 1 deletion(-)
> 
> diff --git a/xen/arch/arm/guestcopy.c b/xen/arch/arm/guestcopy.c
> index d146cd6..4875b1d 100644
> --- a/xen/arch/arm/guestcopy.c
> +++ b/xen/arch/arm/guestcopy.c
> @@ -5,7 +5,8 @@
>  #include <asm/mm.h>
>  #include <asm/guest_access.h>
>  
> -unsigned long raw_copy_to_guest(void *to, const void *from, unsigned len)
> +unsigned long raw_copy_to_guest_helper(void *to, const void *from, unsigned 
> len,
This function should be static.

Except that:

Acked-by: Julien Grall<julien.grall@xxxxxxxxxx>

> +                                       unsigned flush_dcache)
>  {
>      /* XXX needs to handle faults */
>      unsigned offset = (vaddr_t)to & ~PAGE_MASK;
> @@ -24,6 +25,8 @@ unsigned long raw_copy_to_guest(void *to, const void *from, 
> unsigned len)
>          p = map_domain_page(g>>PAGE_SHIFT);
>          p += offset;
>          memcpy(p, from, size);
> +        if (flush_dcache)
> +            flush_xen_dcache_va_range(p, size);
>  
>          unmap_domain_page(p - offset);
>          len -= size;
> @@ -35,6 +38,17 @@ unsigned long raw_copy_to_guest(void *to, const void 
> *from, unsigned len)
>      return 0;
>  }
>  
> +unsigned long raw_copy_to_guest(void *to, const void *from, unsigned len)
> +{
> +    return raw_copy_to_guest_helper(to, from, len, 0);
> +}
> +
> +unsigned long raw_copy_to_guest_flush_dcache(void *to, const void *from,
> +                                             unsigned len)
> +{
> +    return raw_copy_to_guest_helper(to, from, len, 1);
> +}
> +
>  unsigned long raw_clear_guest(void *to, unsigned len)
>  {
>      /* XXX needs to handle faults */
> diff --git a/xen/include/asm-arm/guest_access.h 
> b/xen/include/asm-arm/guest_access.h
> index 8ff088f..5876988 100644
> --- a/xen/include/asm-arm/guest_access.h
> +++ b/xen/include/asm-arm/guest_access.h
> @@ -11,6 +11,8 @@
>      (likely(count < (~0UL/size)) && access_ok(addr,count*size))
>  
>  unsigned long raw_copy_to_guest(void *to, const void *from, unsigned len);
> +unsigned long raw_copy_to_guest_flush_dcache(void *to, const void *from,
> +                                             unsigned len);
>  unsigned long raw_copy_from_guest(void *to, const void *from, unsigned len);
>  unsigned long raw_clear_guest(void *to, unsigned len);
>  
> 


-- 
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®.