diff options
| -rw-r--r-- | drivers/block/xen-blkback/common.h | 5 | ||||
| -rw-r--r-- | 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 00c57c90e2d..7ec0e8896a7 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 5fd2010f7d2..69233dd4221 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;  	}  }  |