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

Commit 04d3d624 authored by Somnath Kotur's avatar Somnath Kotur Committed by David S. Miller
Browse files

be2net: avoid napi_disable() when it has not been enabled



When RQ creation fails in be_open(), driver jumps to be_close() where
napi_disable() is done without a prior napi_enable(); leading to a hang.
This change is needed as there is no way to see if napi is enable/disabled.

Signed-off-by: default avatarKalesh AP <kalesh.purayil@emulex.com>
Signed-off-by: default avatarSomnath Kotur <somnath.kotur@emulex.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 701962d0
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -327,6 +327,7 @@ enum vf_state {

#define BE_FLAGS_LINK_STATUS_INIT		1
#define BE_FLAGS_WORKER_SCHEDULED		(1 << 3)
#define BE_FLAGS_NAPI_ENABLED			(1 << 9)
#define BE_UC_PMAC_COUNT		30
#define BE_VF_UC_PMAC_COUNT		2
#define BE_FLAGS_QNQ_ASYNC_EVT_RCVD		(1 << 11)
+6 −2
Original line number Diff line number Diff line
@@ -2548,8 +2548,11 @@ static int be_close(struct net_device *netdev)

	be_roce_dev_close(adapter);

	if (adapter->flags & BE_FLAGS_NAPI_ENABLED) {
		for_all_evt_queues(adapter, eqo, i)
			napi_disable(&eqo->napi);
		adapter->flags &= ~BE_FLAGS_NAPI_ENABLED;
	}

	be_async_mcc_disable(adapter);

@@ -2657,6 +2660,7 @@ static int be_open(struct net_device *netdev)
		napi_enable(&eqo->napi);
		be_eq_notify(adapter, eqo->q.id, true, false, 0);
	}
	adapter->flags |= BE_FLAGS_NAPI_ENABLED;

	status = be_cmd_link_status_query(adapter, NULL, &link_status, 0);
	if (!status)