From: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>	
Subject: netfront: add netconsole support
References: bnc#763858 fate#313830
Patch-mainline: 3.4 (in the corresponding upstream driver)

Acked-by: jbeulich@suse.com

--- sle11sp4.orig/drivers/xen/netfront/netfront.c	2014-01-07 16:35:47.000000000 +0100
+++ sle11sp4/drivers/xen/netfront/netfront.c	2013-05-17 13:58:24.000000000 +0200
@@ -935,7 +935,7 @@ static int network_start_xmit(struct sk_
 	char *data = skb->data;
 	RING_IDX i;
 	grant_ref_t ref;
-	unsigned long mfn;
+	unsigned long mfn, flags;
 	int notify;
 	int frags = skb_shinfo(skb)->nr_frags;
 	unsigned int offset = offset_in_page(data);
@@ -965,12 +965,12 @@ static int network_start_xmit(struct sk_
 		goto drop;
 	}
 
-	spin_lock_irq(&np->tx_lock);
+	spin_lock_irqsave(&np->tx_lock, flags);
 
 	if (unlikely(!netfront_carrier_ok(np) ||
 		     (frags > 1 && !xennet_can_sg(dev)) ||
 		     netif_needs_gso(skb, netif_skb_features(skb)))) {
-		spin_unlock_irq(&np->tx_lock);
+		spin_unlock_irqrestore(&np->tx_lock, flags);
 		goto drop;
 	}
 
@@ -1039,7 +1039,7 @@ static int network_start_xmit(struct sk_
 	if (!netfront_tx_slot_available(np))
 		netif_stop_queue(dev);
 
-	spin_unlock_irq(&np->tx_lock);
+	spin_unlock_irqrestore(&np->tx_lock, flags);
 
 	return NETDEV_TX_OK;
 
@@ -2055,6 +2055,13 @@ static int xennet_set_features(struct ne
 	return 0;
 }
 
+#ifdef CONFIG_NET_POLL_CONTROLLER
+static void xennet_poll_controller(struct net_device *dev)
+{
+	netif_int(0, dev);
+}
+#endif
+
 static const struct net_device_ops xennet_netdev_ops = {
 	.ndo_uninit             = netif_uninit,
 	.ndo_open               = network_open,
@@ -2065,6 +2072,9 @@ static const struct net_device_ops xenne
 	.ndo_validate_addr      = eth_validate_addr,
 	.ndo_fix_features       = xennet_fix_features,
 	.ndo_set_features       = xennet_set_features,
+#ifdef CONFIG_NET_POLL_CONTROLLER
+	.ndo_poll_controller    = xennet_poll_controller,
+#endif
 	.ndo_change_mtu	        = xennet_change_mtu,
 	.ndo_get_stats          = network_get_stats,
 };
