aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/xen-netback/netback.c
diff options
context:
space:
mode:
authorZoltan Kiss <zoltan.kiss@citrix.com>2014-03-21 13:23:04 -0400
committerDavid S. Miller <davem@davemloft.net>2014-03-25 18:58:07 -0400
commit397dfd9f93ccfe71660eafbaac651a96195c24ed (patch)
treeaa12af287d1e47239f38adde8c7cccf39b3f333b /drivers/net/xen-netback/netback.c
parent8779772c93286fcfe8ab428dc83434c783225535 (diff)
Revert "xen-netback: Aggregate TX unmap operations"
This reverts commit e9275f5e2df1b2098a8cc405d87b88b9affd73e6. This commit is the last in the netback grant mapping series, and it tries to do more aggressive aggreagtion of unmap operations. However practical use showed almost no positive effect, whilst with certain frontends it causes significant performance regression. Signed-off-by: Zoltan Kiss <zoltan.kiss@citrix.com> Acked-by: Ian Campbell <ian.campbell@citrix.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/xen-netback/netback.c')
-rw-r--r--drivers/net/xen-netback/netback.c34
1 files changed, 1 insertions, 33 deletions
diff --git a/drivers/net/xen-netback/netback.c b/drivers/net/xen-netback/netback.c
index 5a8c4a43c522..1f595e51791e 100644
--- a/drivers/net/xen-netback/netback.c
+++ b/drivers/net/xen-netback/netback.c
@@ -133,11 +133,6 @@ static inline pending_ring_idx_t pending_index(unsigned i)
133 return i & (MAX_PENDING_REQS-1); 133 return i & (MAX_PENDING_REQS-1);
134} 134}
135 135
136static inline pending_ring_idx_t nr_free_slots(struct xen_netif_tx_back_ring *ring)
137{
138 return ring->nr_ents - (ring->sring->req_prod - ring->rsp_prod_pvt);
139}
140
141bool xenvif_rx_ring_slots_available(struct xenvif *vif, int needed) 136bool xenvif_rx_ring_slots_available(struct xenvif *vif, int needed)
142{ 137{
143 RING_IDX prod, cons; 138 RING_IDX prod, cons;
@@ -1718,36 +1713,9 @@ static inline int tx_work_todo(struct xenvif *vif)
1718 return 0; 1713 return 0;
1719} 1714}
1720 1715
1721static void xenvif_dealloc_delay(unsigned long data)
1722{
1723 struct xenvif *vif = (struct xenvif *)data;
1724
1725 vif->dealloc_delay_timed_out = true;
1726 wake_up(&vif->dealloc_wq);
1727}
1728
1729static inline bool tx_dealloc_work_todo(struct xenvif *vif) 1716static inline bool tx_dealloc_work_todo(struct xenvif *vif)
1730{ 1717{
1731 if (vif->dealloc_cons != vif->dealloc_prod) { 1718 return vif->dealloc_cons != vif->dealloc_prod;
1732 if ((nr_free_slots(&vif->tx) > 2 * XEN_NETBK_LEGACY_SLOTS_MAX) &&
1733 (vif->dealloc_prod - vif->dealloc_cons < MAX_PENDING_REQS / 4) &&
1734 !vif->dealloc_delay_timed_out) {
1735 if (!timer_pending(&vif->dealloc_delay)) {
1736 vif->dealloc_delay.function =
1737 xenvif_dealloc_delay;
1738 vif->dealloc_delay.data = (unsigned long)vif;
1739 mod_timer(&vif->dealloc_delay,
1740 jiffies + msecs_to_jiffies(1));
1741
1742 }
1743 return false;
1744 }
1745 del_timer_sync(&vif->dealloc_delay);
1746 vif->dealloc_delay_timed_out = false;
1747 return true;
1748 }
1749
1750 return false;
1751} 1719}
1752 1720
1753void xenvif_unmap_frontend_rings(struct xenvif *vif) 1721void xenvif_unmap_frontend_rings(struct xenvif *vif)