|
@@ -2402,7 +2402,8 @@ static void mwifiex_pcie_fw_dump(struct mwifiex_adapter *adapter)
|
|
struct pcie_service_card *card = adapter->card;
|
|
struct pcie_service_card *card = adapter->card;
|
|
const struct mwifiex_pcie_card_reg *creg = card->pcie.reg;
|
|
const struct mwifiex_pcie_card_reg *creg = card->pcie.reg;
|
|
unsigned int reg, reg_start, reg_end;
|
|
unsigned int reg, reg_start, reg_end;
|
|
- u8 *dbg_ptr, *end_ptr, dump_num, idx, i, read_reg, doneflag = 0;
|
|
|
|
|
|
+ u8 *dbg_ptr, *end_ptr, *tmp_ptr, dump_num;
|
|
|
|
+ u8 idx, i, read_reg, doneflag = 0;
|
|
enum rdwr_status stat;
|
|
enum rdwr_status stat;
|
|
u32 memory_size;
|
|
u32 memory_size;
|
|
int ret;
|
|
int ret;
|
|
@@ -2485,11 +2486,21 @@ static void mwifiex_pcie_fw_dump(struct mwifiex_adapter *adapter)
|
|
mwifiex_read_reg_byte(adapter, reg, dbg_ptr);
|
|
mwifiex_read_reg_byte(adapter, reg, dbg_ptr);
|
|
if (dbg_ptr < end_ptr) {
|
|
if (dbg_ptr < end_ptr) {
|
|
dbg_ptr++;
|
|
dbg_ptr++;
|
|
- } else {
|
|
|
|
- mwifiex_dbg(adapter, ERROR,
|
|
|
|
- "Allocated buf not enough\n");
|
|
|
|
- return;
|
|
|
|
|
|
+ continue;
|
|
}
|
|
}
|
|
|
|
+ mwifiex_dbg(adapter, ERROR,
|
|
|
|
+ "pre-allocated buf not enough\n");
|
|
|
|
+ tmp_ptr =
|
|
|
|
+ vzalloc(memory_size + MWIFIEX_SIZE_4K);
|
|
|
|
+ if (!tmp_ptr)
|
|
|
|
+ return;
|
|
|
|
+ memcpy(tmp_ptr, entry->mem_ptr, memory_size);
|
|
|
|
+ vfree(entry->mem_ptr);
|
|
|
|
+ entry->mem_ptr = tmp_ptr;
|
|
|
|
+ tmp_ptr = NULL;
|
|
|
|
+ dbg_ptr = entry->mem_ptr + memory_size;
|
|
|
|
+ memory_size += MWIFIEX_SIZE_4K;
|
|
|
|
+ end_ptr = entry->mem_ptr + memory_size;
|
|
}
|
|
}
|
|
|
|
|
|
if (stat != RDWR_STATUS_DONE)
|
|
if (stat != RDWR_STATUS_DONE)
|