diff options
| author | Wei Liu <wei.liu2@citrix.com> | 2015-04-03 14:44:59 +0800 | 
|---|---|---|
| committer | David Vrabel <david.vrabel@citrix.com> | 2015-04-15 10:56:47 +0100 | 
| commit | ccc9d90a9a8b5c4ad7e9708ec41f75ff9e98d61d (patch) | |
| tree | 2a147c10a289a3f4283d6008708297f07df052a6 /drivers/block | |
| parent | 278edfc07875779a69277f6c5773ec9318a994ee (diff) | |
xenbus_client: Extend interface to support multi-page ring
Originally Xen PV drivers only use single-page ring to pass along
information. This might limit the throughput between frontend and
backend.
The patch extends Xenbus driver to support multi-page ring, which in
general should improve throughput if ring is the bottleneck. Changes to
various frontend / backend to adapt to the new interface are also
included.
Affected Xen drivers:
* blkfront/back
* netfront/back
* pcifront/back
* scsifront/back
* vtpmfront
The interface is documented, as before, in xenbus_client.c.
Signed-off-by: Wei Liu <wei.liu2@citrix.com>
Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
Signed-off-by: Bob Liu <bob.liu@oracle.com>
Cc: Konrad Wilk <konrad.wilk@oracle.com>
Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com>
Signed-off-by: David Vrabel <david.vrabel@citrix.com>
Diffstat (limited to 'drivers/block')
| -rw-r--r-- | drivers/block/xen-blkback/xenbus.c | 5 | ||||
| -rw-r--r-- | drivers/block/xen-blkfront.c | 5 | 
2 files changed, 6 insertions, 4 deletions
| diff --git a/drivers/block/xen-blkback/xenbus.c b/drivers/block/xen-blkback/xenbus.c index e3afe97280b1..ff3025922c14 100644 --- a/drivers/block/xen-blkback/xenbus.c +++ b/drivers/block/xen-blkback/xenbus.c @@ -193,7 +193,7 @@ fail:  	return ERR_PTR(-ENOMEM);  } -static int xen_blkif_map(struct xen_blkif *blkif, unsigned long shared_page, +static int xen_blkif_map(struct xen_blkif *blkif, grant_ref_t gref,  			 unsigned int evtchn)  {  	int err; @@ -202,7 +202,8 @@ static int xen_blkif_map(struct xen_blkif *blkif, unsigned long shared_page,  	if (blkif->irq)  		return 0; -	err = xenbus_map_ring_valloc(blkif->be->dev, shared_page, &blkif->blk_ring); +	err = xenbus_map_ring_valloc(blkif->be->dev, &gref, 1, +				     &blkif->blk_ring);  	if (err < 0)  		return err; diff --git a/drivers/block/xen-blkfront.c b/drivers/block/xen-blkfront.c index 37779e4c4585..2c61cf8c6f61 100644 --- a/drivers/block/xen-blkfront.c +++ b/drivers/block/xen-blkfront.c @@ -1245,6 +1245,7 @@ static int setup_blkring(struct xenbus_device *dev,  			 struct blkfront_info *info)  {  	struct blkif_sring *sring; +	grant_ref_t gref;  	int err;  	info->ring_ref = GRANT_INVALID_REF; @@ -1257,13 +1258,13 @@ static int setup_blkring(struct xenbus_device *dev,  	SHARED_RING_INIT(sring);  	FRONT_RING_INIT(&info->ring, sring, PAGE_SIZE); -	err = xenbus_grant_ring(dev, virt_to_mfn(info->ring.sring)); +	err = xenbus_grant_ring(dev, info->ring.sring, 1, &gref);  	if (err < 0) {  		free_page((unsigned long)sring);  		info->ring.sring = NULL;  		goto fail;  	} -	info->ring_ref = err; +	info->ring_ref = gref;  	err = xenbus_alloc_evtchn(dev, &info->evtchn);  	if (err) | 
