static void xenvif_tx_err(struct xenvif *vif, struct xen_netif_tx_request *txp, RING_IDX end) { RING_IDX cons = vif->tx.req_cons; do { make_tx_response(vif, txp, XEN_NETIF_RSP_ERROR); if (cons == end) break; txp = RING_GET_REQUEST(&vif->tx, cons++); } while (1); vif->tx.req_cons = cons; }
static void xenvif_tx_err(struct xenvif *vif, struct xen_netif_tx_request *txp, RING_IDX end) { RING_IDX cons = vif->tx.req_cons; unsigned long flags; do { spin_lock_irqsave(&vif->response_lock, flags); make_tx_response(vif, txp, XEN_NETIF_RSP_ERROR); spin_unlock_irqrestore(&vif->response_lock, flags); if (cons == end) break; txp = RING_GET_REQUEST(&vif->tx, cons++); } while (1); vif->tx.req_cons = cons; }
static void net_tx_error(struct XenNetDev *netdev, netif_tx_request_t *txp, RING_IDX end) { #if 0 /* * Hmm, why netback fails everything in the ring? * Should we do that even when not supporting SG and TSO? */ RING_IDX cons = netdev->tx_ring.req_cons; do { make_tx_response(netif, txp, NETIF_RSP_ERROR); if (cons >= end) break; txp = RING_GET_REQUEST(&netdev->tx_ring, cons++); } while (1); netdev->tx_ring.req_cons = cons; netif_schedule_work(netif); netif_put(netif); #else net_tx_response(netdev, txp, NETIF_RSP_ERROR); #endif }