Index: linux-3.10.11/drivers/net/xen-netback/common.h =================================================================== --- linux-3.10.11.orig/drivers/net/xen-netback/common.h 2014-06-26 15:06:45.852000000 +0200 +++ linux-3.10.11/drivers/net/xen-netback/common.h 2014-06-26 15:07:08.420000000 +0200 @@ -66,6 +66,7 @@ /* The shared rings and indexes. */ struct xen_netif_tx_back_ring tx; struct xen_netif_rx_back_ring rx; + bool mapped; /* Frontend feature information. */ u8 can_sg:1; Index: linux-3.10.11/drivers/net/xen-netback/interface.c =================================================================== --- linux-3.10.11.orig/drivers/net/xen-netback/interface.c 2014-06-26 15:04:41.228000000 +0200 +++ linux-3.10.11/drivers/net/xen-netback/interface.c 2014-06-26 15:06:32.660000000 +0200 @@ -271,6 +271,7 @@ vif->dev = dev; INIT_LIST_HEAD(&vif->schedule_list); INIT_LIST_HEAD(&vif->notify_list); + vif->mapped = false; vif->credit_bytes = vif->remaining_credit = ~0UL; vif->credit_usec = 0UL; Index: linux-3.10.11/drivers/net/xen-netback/netback.c =================================================================== --- linux-3.10.11.orig/drivers/net/xen-netback/netback.c 2014-06-26 15:07:22.252000000 +0200 +++ linux-3.10.11/drivers/net/xen-netback/netback.c 2014-06-26 15:10:33.300000000 +0200 @@ -720,6 +720,13 @@ vif = netdev_priv(skb->dev); nr_frags = skb_shinfo(skb)->nr_frags; + if (!vif->mapped) { + printk(KERN_ERR "UniDEBUG vif->mapped is false\n"); + dev_kfree_skb(skb); + xenvif_put(vif); + continue; + } + sco = (struct skb_cb_overlay *)skb->cb; sco->meta_slots_used = netbk_gop_skb(skb, &npo); @@ -1864,6 +1870,8 @@ void xen_netbk_unmap_frontend_rings(struct xenvif *vif) { + vif->mapped = false; + if (vif->tx.sring) xenbus_unmap_ring_vfree(xenvif_to_xenbus_device(vif), vif->tx.sring); @@ -1899,6 +1908,7 @@ BACK_RING_INIT(&vif->rx, rxs, PAGE_SIZE); vif->rx_req_cons_peek = 0; + vif->mapped = true; return 0;