|
@@ -1187,41 +1187,38 @@ int qlcnic_dump_fw(struct qlcnic_adapter *adapter)
|
|
|
}
|
|
|
|
|
|
if (ops_index == ops_cnt) {
|
|
|
- dev_info(&adapter->pdev->dev,
|
|
|
- "Invalid entry type %d, exiting dump\n",
|
|
|
+ dev_info(dev, "Skipping unknown entry opcode %d\n",
|
|
|
entry->hdr.type);
|
|
|
- goto error;
|
|
|
+ entry->hdr.flags |= QLCNIC_DUMP_SKIP;
|
|
|
+ entry_offset += entry->hdr.offset;
|
|
|
+ continue;
|
|
|
}
|
|
|
|
|
|
/* Collect dump for this entry */
|
|
|
dump = fw_dump_ops[ops_index].handler(adapter, entry, buffer);
|
|
|
- if (!qlcnic_valid_dump_entry(&adapter->pdev->dev, entry, dump))
|
|
|
+ if (!qlcnic_valid_dump_entry(dev, entry, dump)) {
|
|
|
entry->hdr.flags |= QLCNIC_DUMP_SKIP;
|
|
|
+ entry_offset += entry->hdr.offset;
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
buf_offset += entry->hdr.cap_size;
|
|
|
entry_offset += entry->hdr.offset;
|
|
|
buffer = fw_dump->data + buf_offset;
|
|
|
}
|
|
|
- if (dump_size != buf_offset) {
|
|
|
- dev_info(&adapter->pdev->dev,
|
|
|
- "Captured(%d) and expected size(%d) do not match\n",
|
|
|
- buf_offset, dump_size);
|
|
|
- goto error;
|
|
|
- } else {
|
|
|
- fw_dump->clr = 1;
|
|
|
- snprintf(mesg, sizeof(mesg), "FW_DUMP=%s",
|
|
|
- adapter->netdev->name);
|
|
|
- dev_info(&adapter->pdev->dev, "%s: Dump data, %d bytes captured\n",
|
|
|
- adapter->netdev->name, fw_dump->size);
|
|
|
- /* Send a udev event to notify availability of FW dump */
|
|
|
- kobject_uevent_env(&adapter->pdev->dev.kobj, KOBJ_CHANGE, msg);
|
|
|
- return 0;
|
|
|
- }
|
|
|
-error:
|
|
|
+
|
|
|
+ fw_dump->clr = 1;
|
|
|
+ snprintf(mesg, sizeof(mesg), "FW_DUMP=%s", adapter->netdev->name);
|
|
|
+ dev_info(dev, "%s: Dump data %d bytes captured, template header size %d bytes\n",
|
|
|
+ adapter->netdev->name, fw_dump->size, tmpl_hdr->size);
|
|
|
+ /* Send a udev event to notify availability of FW dump */
|
|
|
+ kobject_uevent_env(&dev->kobj, KOBJ_CHANGE, msg);
|
|
|
+
|
|
|
if (fw_dump->use_pex_dma)
|
|
|
dma_free_coherent(dev, QLC_PEX_DMA_READ_SIZE,
|
|
|
fw_dump->dma_buffer, fw_dump->phys_addr);
|
|
|
- vfree(fw_dump->data);
|
|
|
- return -EINVAL;
|
|
|
+
|
|
|
+ return 0;
|
|
|
}
|
|
|
|
|
|
void qlcnic_83xx_get_minidump_template(struct qlcnic_adapter *adapter)
|