netxen: fix for kdump
authorRajesh Borundia <rajesh.borundia@qlogic.com>
Thu, 15 Jul 2010 00:55:35 +0000 (17:55 -0700)
committerDavid S. Miller <davem@davemloft.net>
Thu, 15 Jul 2010 00:55:35 +0000 (17:55 -0700)
When the crash kernel is loaded after crash, the device is in unknown state.
So reset the device contexts prior to its creation in case of kdump,
depending upon kernel parameter reset_devices.

Signed-off-by: Rajesh Borundia <rajesh.borundia@qlogic.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/netxen/netxen_nic_ctx.c

index 3a41b6a84a68636a61fd85fd233a17a4c0ce3cd6..12612127a08718e71b0c6ca07881fedd9eb4e31d 100644 (file)
@@ -254,6 +254,19 @@ out_free_rq:
        return err;
 }
 
+static void
+nx_fw_cmd_reset_ctx(struct netxen_adapter *adapter)
+{
+
+       netxen_issue_cmd(adapter, adapter->ahw.pci_func, NXHAL_VERSION,
+                       adapter->ahw.pci_func, NX_DESTROY_CTX_RESET, 0,
+                       NX_CDRP_CMD_DESTROY_RX_CTX);
+
+       netxen_issue_cmd(adapter, adapter->ahw.pci_func, NXHAL_VERSION,
+                       adapter->ahw.pci_func, NX_DESTROY_CTX_RESET, 0,
+                       NX_CDRP_CMD_DESTROY_TX_CTX);
+}
+
 static void
 nx_fw_cmd_destroy_rx_ctx(struct netxen_adapter *adapter)
 {
@@ -685,7 +698,8 @@ int netxen_alloc_hw_resources(struct netxen_adapter *adapter)
        if (!NX_IS_REVISION_P2(adapter->ahw.revision_id)) {
                if (test_and_set_bit(__NX_FW_ATTACHED, &adapter->state))
                        goto done;
-
+               if (reset_devices)
+                       nx_fw_cmd_reset_ctx(adapter);
                err = nx_fw_cmd_create_rx_ctx(adapter);
                if (err)
                        goto err_out_free;