aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/xen-netback/netback.c
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2013-06-19 19:49:39 -0400
committerDavid S. Miller <davem@davemloft.net>2013-06-19 19:49:39 -0400
commitd98cae64e4a733ff377184d78aa0b1f2b54faede (patch)
treee973e3c93fe7e17741567ac3947f5197bc9d582d /drivers/net/xen-netback/netback.c
parent646093a29f85630d8efe2aa38fa585d2c3ea2e46 (diff)
parent4067c666f2dccf56f5db5c182713e68c40d46013 (diff)
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Conflicts: drivers/net/wireless/ath/ath9k/Kconfig drivers/net/xen-netback/netback.c net/batman-adv/bat_iv_ogm.c net/wireless/nl80211.c The ath9k Kconfig conflict was a change of a Kconfig option name right next to the deletion of another option. The xen-netback conflict was overlapping changes involving the handling of the notify list in xen_netbk_rx_action(). Batman conflict resolution provided by Antonio Quartulli, basically keep everything in both conflict hunks. The nl80211 conflict is a little more involved. In 'net' we added a dynamic memory allocation to nl80211_dump_wiphy() to fix a race that Linus reported. Meanwhile in 'net-next' the handlers were converted to use pre and post doit handlers which use a flag to determine whether to hold the RTNL mutex around the operation. However, the dump handlers to not use this logic. Instead they have to explicitly do the locking. There were apparent bugs in the conversion of nl80211_dump_wiphy() in that we were not dropping the RTNL mutex in all the return paths, and it seems we very much should be doing so. So I fixed that whilst handling the overlapping changes. To simplify the initial returns, I take the RTNL mutex after we try to allocate 'tb'. 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.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/drivers/net/xen-netback/netback.c b/drivers/net/xen-netback/netback.c
index 82576fffb452..a0b50ad2ef31 100644
--- a/drivers/net/xen-netback/netback.c
+++ b/drivers/net/xen-netback/netback.c
@@ -778,12 +778,13 @@ static void xen_netbk_rx_action(struct xen_netbk *netbk)
778 sco->meta_slots_used); 778 sco->meta_slots_used);
779 779
780 RING_PUSH_RESPONSES_AND_CHECK_NOTIFY(&vif->rx, ret); 780 RING_PUSH_RESPONSES_AND_CHECK_NOTIFY(&vif->rx, ret);
781 if (ret && list_empty(&vif->notify_list))
782 list_add_tail(&vif->notify_list, &notify);
783 781
784 xenvif_notify_tx_completion(vif); 782 xenvif_notify_tx_completion(vif);
785 783
786 xenvif_put(vif); 784 if (ret && list_empty(&vif->notify_list))
785 list_add_tail(&vif->notify_list, &notify);
786 else
787 xenvif_put(vif);
787 npo.meta_cons += sco->meta_slots_used; 788 npo.meta_cons += sco->meta_slots_used;
788 dev_kfree_skb(skb); 789 dev_kfree_skb(skb);
789 } 790 }
@@ -791,6 +792,7 @@ static void xen_netbk_rx_action(struct xen_netbk *netbk)
791 list_for_each_entry_safe(vif, tmp, &notify, notify_list) { 792 list_for_each_entry_safe(vif, tmp, &notify, notify_list) {
792 notify_remote_via_irq(vif->rx_irq); 793 notify_remote_via_irq(vif->rx_irq);
793 list_del_init(&vif->notify_list); 794 list_del_init(&vif->notify_list);
795 xenvif_put(vif);
794 } 796 }
795 797
796 /* More work to do? */ 798 /* More work to do? */