devices/e1000/e1000_main-3.0-ethercat.c
changeset 2589 2b9c78543663
parent 2395 f7451c2c274f
--- a/devices/e1000/e1000_main-3.0-ethercat.c	Thu Sep 06 14:21:02 2012 +0200
+++ b/devices/e1000/e1000_main-3.0-ethercat.c	Mon Nov 03 15:20:05 2014 +0100
@@ -1209,7 +1209,8 @@
  	// offer device to EtherCAT master module
 	adapter->ecdev = ecdev_offer(netdev, ec_poll, THIS_MODULE);
 	if (adapter->ecdev) {
-		if (ecdev_open(adapter->ecdev)) {
+		err = ecdev_open(adapter->ecdev);
+		if (err) {
 			ecdev_withdraw(adapter->ecdev);
 			goto err_register;
 		}
@@ -1423,11 +1424,13 @@
 	/* From here on the code is the same as e1000_up() */
 	clear_bit(__E1000_DOWN, &adapter->flags);
 
-	napi_enable(&adapter->napi);
-
-	e1000_irq_enable(adapter);
-
-	netif_start_queue(netdev);
+	if (!adapter->ecdev) {
+		napi_enable(&adapter->napi);
+
+		e1000_irq_enable(adapter);
+
+		netif_start_queue(netdev);
+	}
 
 	/* fire a link status change interrupt to start the watchdog */
 	ew32(ICS, E1000_ICS_LSC);
@@ -3104,6 +3107,10 @@
 	struct e1000_adapter *adapter = netdev_priv(netdev);
 	struct e1000_tx_ring *tx_ring = adapter->tx_ring;
 
+	if (adapter->ecdev) {
+		return -EBUSY;
+	}
+
 	netif_stop_queue(netdev);
 	/* Herbert's original patch had:
 	 *  smp_mb__after_netif_stop_queue();