e1000: Prevent reset task killing itself.
[linux-flexiantxendom0-3.2.10.git] / drivers / net / ethernet / intel / e1000 / e1000_main.c
index 4348b6f..8d8908d 100644 (file)
@@ -493,7 +493,11 @@ out:
 static void e1000_down_and_stop(struct e1000_adapter *adapter)
 {
        set_bit(__E1000_DOWN, &adapter->flags);
-       cancel_work_sync(&adapter->reset_task);
+
+       /* Only kill reset task if adapter is not resetting */
+       if (!test_bit(__E1000_RESETTING, &adapter->flags))
+               cancel_work_sync(&adapter->reset_task);
+
        cancel_delayed_work_sync(&adapter->watchdog_task);
        cancel_delayed_work_sync(&adapter->phy_info_task);
        cancel_delayed_work_sync(&adapter->fifo_stall_task);
@@ -3380,7 +3384,7 @@ static void e1000_dump(struct e1000_adapter *adapter)
        for (i = 0; tx_ring->desc && (i < tx_ring->count); i++) {
                struct e1000_tx_desc *tx_desc = E1000_TX_DESC(*tx_ring, i);
                struct e1000_buffer *buffer_info = &tx_ring->buffer_info[i];
-               struct my_u { u64 a; u64 b; };
+               struct my_u { __le64 a; __le64 b; };
                struct my_u *u = (struct my_u *)tx_desc;
                const char *type;
 
@@ -3424,7 +3428,7 @@ rx_ring_summary:
        for (i = 0; rx_ring->desc && (i < rx_ring->count); i++) {
                struct e1000_rx_desc *rx_desc = E1000_RX_DESC(*rx_ring, i);
                struct e1000_buffer *buffer_info = &rx_ring->buffer_info[i];
-               struct my_u { u64 a; u64 b; };
+               struct my_u { __le64 a; __le64 b; };
                struct my_u *u = (struct my_u *)rx_desc;
                const char *type;