netxen: fix context deletion sequence
o Use D3 reset context deletion for NX2031, it cleans up more resources in the firmware. o Release rx buffers after hardware context has been reset. o Delete tx context after rx context, some firmware control commands are sent on tx context, so it should be the last to go. Signed-off-by: Dhananjay Phadke <dhananjay@netxen.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
3ba81f3ece
commit
cf981ffb31
3 changed files with 9 additions and 7 deletions
|
@ -210,6 +210,7 @@
|
|||
#define NETXEN_CTX_SIGNATURE 0xdee0
|
||||
#define NETXEN_CTX_SIGNATURE_V2 0x0002dee0
|
||||
#define NETXEN_CTX_RESET 0xbad0
|
||||
#define NETXEN_CTX_D3_RESET 0xacc0
|
||||
#define NETXEN_RCV_PRODUCER(ringid) (ringid)
|
||||
|
||||
#define PHAN_PEG_RCV_INITIALIZED 0xff01
|
||||
|
|
|
@ -684,10 +684,8 @@ int netxen_alloc_hw_resources(struct netxen_adapter *adapter)
|
|||
goto err_out_free;
|
||||
} else {
|
||||
err = netxen_init_old_ctx(adapter);
|
||||
if (err) {
|
||||
netxen_free_hw_resources(adapter);
|
||||
return err;
|
||||
}
|
||||
if (err)
|
||||
goto err_out_free;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
@ -708,15 +706,18 @@ void netxen_free_hw_resources(struct netxen_adapter *adapter)
|
|||
int port = adapter->portnum;
|
||||
|
||||
if (adapter->fw_major >= 4) {
|
||||
nx_fw_cmd_destroy_tx_ctx(adapter);
|
||||
nx_fw_cmd_destroy_rx_ctx(adapter);
|
||||
nx_fw_cmd_destroy_tx_ctx(adapter);
|
||||
} else {
|
||||
netxen_api_lock(adapter);
|
||||
NXWR32(adapter, CRB_CTX_SIGNATURE_REG(port),
|
||||
NETXEN_CTX_RESET | port);
|
||||
NETXEN_CTX_D3_RESET | port);
|
||||
netxen_api_unlock(adapter);
|
||||
}
|
||||
|
||||
/* Allow dma queues to drain after context reset */
|
||||
msleep(20);
|
||||
|
||||
recv_ctx = &adapter->recv_ctx;
|
||||
|
||||
if (recv_ctx->hwctx != NULL) {
|
||||
|
|
|
@ -943,8 +943,8 @@ err_out_free_sw:
|
|||
static void
|
||||
netxen_nic_detach(struct netxen_adapter *adapter)
|
||||
{
|
||||
netxen_release_rx_buffers(adapter);
|
||||
netxen_free_hw_resources(adapter);
|
||||
netxen_release_rx_buffers(adapter);
|
||||
netxen_nic_free_irq(adapter);
|
||||
netxen_free_sw_resources(adapter);
|
||||
|
||||
|
|
Loading…
Reference in a new issue