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

Re: [Xen-devel] [PATCH v2 2/2] xen/m2p: use GNTTABOP_unmap_and_replace to reinstate the original mapping



On 22/07/13 17:28, Stefano Stabellini wrote:
> GNTTABOP_unmap_grant_ref unmaps a grant and replaces it with a 0
> mapping instead of reinstating the original mapping.
> Doing so separately would be racy.
> 
> To unmap a grant and reinstate the original mapping atomically we use
> GNTTABOP_unmap_and_replace.
> GNTTABOP_unmap_and_replace doesn't work with GNTMAP_contains_pte, so
> don't use it for kmaps.  GNTTABOP_unmap_and_replace zeroes the mapping
> passed in new_addr so we have to reinstate it, however that is a
> per-cpu mapping only used for balloon trade pages, so we can be sure that
> it's not going to be accessed while the mapping is not valid.

This solves the problem of userspace accessing a disk image on an NFS
mount but what would blkback talking to an iSCSI LUN?  Will that need
similar fixes to blkback?  This series does not need to fix this now though.

> --- a/arch/x86/xen/p2m.c
> +++ b/arch/x86/xen/p2m.c
> @@ -161,6 +161,7 @@
>  #include <asm/xen/page.h>
>  #include <asm/xen/hypercall.h>
>  #include <asm/xen/hypervisor.h>
> +#include <xen/balloon.h>
>  #include <xen/grant_table.h>
>  
>  #include "multicalls.h"
> @@ -967,7 +968,9 @@ int m2p_remove_override(struct page *page,
>       if (kmap_op != NULL) {
>               if (!PageHighMem(page)) {
>                       struct multicall_space mcs;
> -                     struct gnttab_unmap_grant_ref *unmap_op;
> +                     struct gnttab_unmap_and_replace *unmap_op;
> +                     unsigned long trade_page_address = (unsigned long)
> +                             __va(page_to_pfn(get_balloon_trade_page()) << 
> PAGE_SHIFT);

        struct page *trade_page = get_balloon_trade_page();
        unsigned long trade_page_address = page_address(trade_page);

(And the corresponding put_balloon_trade_page() once you've added it.)

Otherwise,

Reviewed-by: David Vrabel <david.vrabel@xxxxxxxxxx>

David

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