diff options
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: | 
