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

Re: [Xen-devel] [PATCH 2/4] block: xen-blkback: use API provided by xenbus module to map rings



On Thu, Oct 20, 2011 at 11:45:17AM +0100, David Vrabel wrote:
> The xenbus module provides xenbus_map_ring_valloc() and
> xenbus_map_ring_vfree().  Use these to map the ring pages granted by
> the frontend.

Jens,

This patch paves the way for two other patches that are in the akpm's MMU area 
of expertise.
In other words, the last patch in this series (which should go through akpm's 
tree
or mine with his Ack) depends on this one.

I can split this patchset in three different pieces - one for you, one for 
david miller,
and one for akpm. But I was hoping to have it as one nice GIT PULL for Linus -
hence I am wondering if it is OK if I get your Ack and do it through my tree?

Thanks!

> 
> Signed-off-by: David Vrabel <david.vrabel@xxxxxxxxxx>
> ---
>  drivers/block/xen-blkback/common.h |    5 +--
>  drivers/block/xen-blkback/xenbus.c |   54 ++++-------------------------------
>  2 files changed, 8 insertions(+), 51 deletions(-)
> 
> diff --git a/drivers/block/xen-blkback/common.h 
> b/drivers/block/xen-blkback/common.h
> index 00c57c9..7ec0e88 100644
> --- a/drivers/block/xen-blkback/common.h
> +++ b/drivers/block/xen-blkback/common.h
> @@ -139,7 +139,7 @@ struct xen_blkif {
>       /* Comms information. */
>       enum blkif_protocol     blk_protocol;
>       union blkif_back_rings  blk_rings;
> -     struct vm_struct        *blk_ring_area;
> +     void                    *blk_ring;
>       /* The VBD attached to this interface. */
>       struct xen_vbd          vbd;
>       /* Back pointer to the backend_info. */
> @@ -163,9 +163,6 @@ struct xen_blkif {
>       int                     st_wr_sect;
>  
>       wait_queue_head_t       waiting_to_free;
> -
> -     grant_handle_t          shmem_handle;
> -     grant_ref_t             shmem_ref;
>  };
>  
>  
> diff --git a/drivers/block/xen-blkback/xenbus.c 
> b/drivers/block/xen-blkback/xenbus.c
> index 5fd2010..69233dd 100644
> --- a/drivers/block/xen-blkback/xenbus.c
> +++ b/drivers/block/xen-blkback/xenbus.c
> @@ -120,38 +120,6 @@ static struct xen_blkif *xen_blkif_alloc(domid_t domid)
>       return blkif;
>  }
>  
> -static int map_frontend_page(struct xen_blkif *blkif, unsigned long 
> shared_page)
> -{
> -     struct gnttab_map_grant_ref op;
> -
> -     gnttab_set_map_op(&op, (unsigned long)blkif->blk_ring_area->addr,
> -                       GNTMAP_host_map, shared_page, blkif->domid);
> -
> -     if (HYPERVISOR_grant_table_op(GNTTABOP_map_grant_ref, &op, 1))
> -             BUG();
> -
> -     if (op.status) {
> -             DPRINTK("Grant table operation failure !\n");
> -             return op.status;
> -     }
> -
> -     blkif->shmem_ref = shared_page;
> -     blkif->shmem_handle = op.handle;
> -
> -     return 0;
> -}
> -
> -static void unmap_frontend_page(struct xen_blkif *blkif)
> -{
> -     struct gnttab_unmap_grant_ref op;
> -
> -     gnttab_set_unmap_op(&op, (unsigned long)blkif->blk_ring_area->addr,
> -                         GNTMAP_host_map, blkif->shmem_handle);
> -
> -     if (HYPERVISOR_grant_table_op(GNTTABOP_unmap_grant_ref, &op, 1))
> -             BUG();
> -}
> -
>  static int xen_blkif_map(struct xen_blkif *blkif, unsigned long shared_page,
>                        unsigned int evtchn)
>  {
> @@ -161,35 +129,29 @@ static int xen_blkif_map(struct xen_blkif *blkif, 
> unsigned long shared_page,
>       if (blkif->irq)
>               return 0;
>  
> -     blkif->blk_ring_area = alloc_vm_area(PAGE_SIZE);
> -     if (!blkif->blk_ring_area)
> -             return -ENOMEM;
> -
> -     err = map_frontend_page(blkif, shared_page);
> -     if (err) {
> -             free_vm_area(blkif->blk_ring_area);
> +     err = xenbus_map_ring_valloc(blkif->be->dev, shared_page, 
> &blkif->blk_ring);
> +     if (err < 0)
>               return err;
> -     }
>  
>       switch (blkif->blk_protocol) {
>       case BLKIF_PROTOCOL_NATIVE:
>       {
>               struct blkif_sring *sring;
> -             sring = (struct blkif_sring *)blkif->blk_ring_area->addr;
> +             sring = (struct blkif_sring *)blkif->blk_ring;
>               BACK_RING_INIT(&blkif->blk_rings.native, sring, PAGE_SIZE);
>               break;
>       }
>       case BLKIF_PROTOCOL_X86_32:
>       {
>               struct blkif_x86_32_sring *sring_x86_32;
> -             sring_x86_32 = (struct blkif_x86_32_sring 
> *)blkif->blk_ring_area->addr;
> +             sring_x86_32 = (struct blkif_x86_32_sring *)blkif->blk_ring;
>               BACK_RING_INIT(&blkif->blk_rings.x86_32, sring_x86_32, 
> PAGE_SIZE);
>               break;
>       }
>       case BLKIF_PROTOCOL_X86_64:
>       {
>               struct blkif_x86_64_sring *sring_x86_64;
> -             sring_x86_64 = (struct blkif_x86_64_sring 
> *)blkif->blk_ring_area->addr;
> +             sring_x86_64 = (struct blkif_x86_64_sring *)blkif->blk_ring;
>               BACK_RING_INIT(&blkif->blk_rings.x86_64, sring_x86_64, 
> PAGE_SIZE);
>               break;
>       }
> @@ -201,8 +163,7 @@ static int xen_blkif_map(struct xen_blkif *blkif, 
> unsigned long shared_page,
>                                                   xen_blkif_be_int, 0,
>                                                   "blkif-backend", blkif);
>       if (err < 0) {
> -             unmap_frontend_page(blkif);
> -             free_vm_area(blkif->blk_ring_area);
> +             xenbus_unmap_ring_vfree(blkif->be->dev, blkif->blk_ring);
>               blkif->blk_rings.common.sring = NULL;
>               return err;
>       }
> @@ -228,8 +189,7 @@ static void xen_blkif_disconnect(struct xen_blkif *blkif)
>       }
>  
>       if (blkif->blk_rings.common.sring) {
> -             unmap_frontend_page(blkif);
> -             free_vm_area(blkif->blk_ring_area);
> +             xenbus_unmap_ring_vfree(blkif->be->dev, blkif->blk_ring);
>               blkif->blk_rings.common.sring = NULL;
>       }
>  }
> -- 
> 1.7.2.5
> 
> 
> _______________________________________________
> 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


 


Rackspace

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