Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a3b87a4c authored by Bruce Allan's avatar Bruce Allan Committed by Jeff Kirsher
Browse files

e1000e: panic caused by Rx traffic arriving while interface going down

An "unable to handle kernel paging request" panic can occur when receiving
traffic while the interface is going down.  Wait for NAPI to be done with
current context after disabling interrupts and then disable NAPI.

See https://bugzilla.vyatta.com/show_bug.cgi?id=8837

.

Reported-by: default avatarStephen Hemminger <stephen@networkplumber.org>
Signed-off-by: default avatarBruce Allan <bruce.w.allan@intel.com>
Tested-by: default avatarAaron Brown <aaron.f.brown@intel.com>
Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
parent 73e3dd6b
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -4016,6 +4016,8 @@ void e1000e_down(struct e1000_adapter *adapter)

	e1000_irq_disable(adapter);

	napi_synchronize(&adapter->napi);

	del_timer_sync(&adapter->watchdog_timer);
	del_timer_sync(&adapter->phy_info_timer);

@@ -4372,12 +4374,13 @@ static int e1000_close(struct net_device *netdev)

	pm_runtime_get_sync(&pdev->dev);

	napi_disable(&adapter->napi);

	if (!test_bit(__E1000_DOWN, &adapter->state)) {
		e1000e_down(adapter);
		e1000_free_irq(adapter);
	}

	napi_disable(&adapter->napi);

	e1000_power_down_phy(adapter);

	e1000e_free_tx_resources(adapter->tx_ring);