WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

Re: [Xen-devel] [PATCH 2/4] block: xen-blkback: use API provided by xenb

To: David Vrabel <david.vrabel@xxxxxxxxxx>, axboe@xxxxxxxxx, jaxboe@xxxxxxxxxxxx
Subject: Re: [Xen-devel] [PATCH 2/4] block: xen-blkback: use API provided by xenbus module to map rings
From: Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx>
Date: Wed, 26 Oct 2011 09:47:06 -0400
Cc: xen-devel@xxxxxxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx
Delivery-date: Wed, 26 Oct 2011 06:47:54 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
In-reply-to: <1319107519-2253-3-git-send-email-david.vrabel@xxxxxxxxxx>
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
References: <1319107519-2253-1-git-send-email-david.vrabel@xxxxxxxxxx> <1319107519-2253-3-git-send-email-david.vrabel@xxxxxxxxxx>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: Mutt/1.5.21 (2010-09-15)
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