diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-11-06 18:31:36 -0800 | 
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-11-06 18:31:36 -0800 | 
| commit | 06d381484fe8fb1ba2996c22e89595a273e3634c (patch) | |
| tree | 0d39c57cb8c501341ab8ed1d740f076b0b8c0bd0 /drivers/net/xen-netback/netback.c | |
| parent | 5d5a8d2d9d6cca979efe4fe1552d787fdc542603 (diff) | |
| parent | c9d6369978411f690513994e6e53e2e6410874a4 (diff) | |
| download | olio-linux-3.10-06d381484fe8fb1ba2996c22e89595a273e3634c.tar.xz olio-linux-3.10-06d381484fe8fb1ba2996c22e89595a273e3634c.zip  | |
Merge branch 'stable/vmalloc-3.2' of git://git.kernel.org/pub/scm/linux/kernel/git/konrad/xen
* 'stable/vmalloc-3.2' of git://git.kernel.org/pub/scm/linux/kernel/git/konrad/xen:
  net: xen-netback: use API provided by xenbus module to map rings
  block: xen-blkback: use API provided by xenbus module to map rings
  xen: use generic functions instead of xen_{alloc, free}_vm_area()
Diffstat (limited to 'drivers/net/xen-netback/netback.c')
| -rw-r--r-- | drivers/net/xen-netback/netback.c | 80 | 
1 files changed, 17 insertions, 63 deletions
diff --git a/drivers/net/xen-netback/netback.c b/drivers/net/xen-netback/netback.c index d5508957200..0cb594c8609 100644 --- a/drivers/net/xen-netback/netback.c +++ b/drivers/net/xen-netback/netback.c @@ -1589,88 +1589,42 @@ static int xen_netbk_kthread(void *data)  void xen_netbk_unmap_frontend_rings(struct xenvif *vif)  { -	struct gnttab_unmap_grant_ref op; - -	if (vif->tx.sring) { -		gnttab_set_unmap_op(&op, (unsigned long)vif->tx_comms_area->addr, -				    GNTMAP_host_map, vif->tx_shmem_handle); - -		if (HYPERVISOR_grant_table_op(GNTTABOP_unmap_grant_ref, &op, 1)) -			BUG(); -	} - -	if (vif->rx.sring) { -		gnttab_set_unmap_op(&op, (unsigned long)vif->rx_comms_area->addr, -				    GNTMAP_host_map, vif->rx_shmem_handle); - -		if (HYPERVISOR_grant_table_op(GNTTABOP_unmap_grant_ref, &op, 1)) -			BUG(); -	} -	if (vif->rx_comms_area) -		free_vm_area(vif->rx_comms_area); -	if (vif->tx_comms_area) -		free_vm_area(vif->tx_comms_area); +	if (vif->tx.sring) +		xenbus_unmap_ring_vfree(xenvif_to_xenbus_device(vif), +					vif->tx.sring); +	if (vif->rx.sring) +		xenbus_unmap_ring_vfree(xenvif_to_xenbus_device(vif), +					vif->rx.sring);  }  int xen_netbk_map_frontend_rings(struct xenvif *vif,  				 grant_ref_t tx_ring_ref,  				 grant_ref_t rx_ring_ref)  { -	struct gnttab_map_grant_ref op; +	void *addr;  	struct xen_netif_tx_sring *txs;  	struct xen_netif_rx_sring *rxs;  	int err = -ENOMEM; -	vif->tx_comms_area = alloc_vm_area(PAGE_SIZE); -	if (vif->tx_comms_area == NULL) +	err = xenbus_map_ring_valloc(xenvif_to_xenbus_device(vif), +				     tx_ring_ref, &addr); +	if (err)  		goto err; -	vif->rx_comms_area = alloc_vm_area(PAGE_SIZE); -	if (vif->rx_comms_area == NULL) -		goto err; - -	gnttab_set_map_op(&op, (unsigned long)vif->tx_comms_area->addr, -			  GNTMAP_host_map, tx_ring_ref, vif->domid); - -	if (HYPERVISOR_grant_table_op(GNTTABOP_map_grant_ref, &op, 1)) -		BUG(); - -	if (op.status) { -		netdev_warn(vif->dev, -			    "failed to map tx ring. err=%d status=%d\n", -			    err, op.status); -		err = op.status; -		goto err; -	} - -	vif->tx_shmem_ref    = tx_ring_ref; -	vif->tx_shmem_handle = op.handle; - -	txs = (struct xen_netif_tx_sring *)vif->tx_comms_area->addr; +	txs = (struct xen_netif_tx_sring *)addr;  	BACK_RING_INIT(&vif->tx, txs, PAGE_SIZE); -	gnttab_set_map_op(&op, (unsigned long)vif->rx_comms_area->addr, -			  GNTMAP_host_map, rx_ring_ref, vif->domid); - -	if (HYPERVISOR_grant_table_op(GNTTABOP_map_grant_ref, &op, 1)) -		BUG(); - -	if (op.status) { -		netdev_warn(vif->dev, -			    "failed to map rx ring. err=%d status=%d\n", -			    err, op.status); -		err = op.status; +	err = xenbus_map_ring_valloc(xenvif_to_xenbus_device(vif), +				     rx_ring_ref, &addr); +	if (err)  		goto err; -	} - -	vif->rx_shmem_ref     = rx_ring_ref; -	vif->rx_shmem_handle  = op.handle; -	vif->rx_req_cons_peek = 0; -	rxs = (struct xen_netif_rx_sring *)vif->rx_comms_area->addr; +	rxs = (struct xen_netif_rx_sring *)addr;  	BACK_RING_INIT(&vif->rx, rxs, PAGE_SIZE); +	vif->rx_req_cons_peek = 0; +  	return 0;  err:  |