mirror of
https://github.com/torvalds/linux.git
synced 2024-11-26 22:21:42 +00:00
cxgb4: avoid collecting SGE_QBASE regs during traffic
Accessing SGE_QBASE_MAP[0-3] and SGE_QBASE_INDEX registers can lead
to SGE missing doorbells under heavy traffic. So, only collect them
when adapter is idle. Also update the regdump range to skip collecting
these registers.
Fixes: 80a95a80d3
("cxgb4: collect SGE PF/VF queue map")
Signed-off-by: Rahul Lakkireddy <rahul.lakkireddy@chelsio.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
fb6ec87f72
commit
1bfb3dea96
@ -1794,11 +1794,25 @@ int cudbg_collect_sge_indirect(struct cudbg_init *pdbg_init,
|
||||
struct cudbg_buffer temp_buff = { 0 };
|
||||
struct sge_qbase_reg_field *sge_qbase;
|
||||
struct ireg_buf *ch_sge_dbg;
|
||||
u8 padap_running = 0;
|
||||
int i, rc;
|
||||
u32 size;
|
||||
|
||||
rc = cudbg_get_buff(pdbg_init, dbg_buff,
|
||||
sizeof(*ch_sge_dbg) * 2 + sizeof(*sge_qbase),
|
||||
&temp_buff);
|
||||
/* Accessing SGE_QBASE_MAP[0-3] and SGE_QBASE_INDEX regs can
|
||||
* lead to SGE missing doorbells under heavy traffic. So, only
|
||||
* collect them when adapter is idle.
|
||||
*/
|
||||
for_each_port(padap, i) {
|
||||
padap_running = netif_running(padap->port[i]);
|
||||
if (padap_running)
|
||||
break;
|
||||
}
|
||||
|
||||
size = sizeof(*ch_sge_dbg) * 2;
|
||||
if (!padap_running)
|
||||
size += sizeof(*sge_qbase);
|
||||
|
||||
rc = cudbg_get_buff(pdbg_init, dbg_buff, size, &temp_buff);
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
@ -1820,7 +1834,8 @@ int cudbg_collect_sge_indirect(struct cudbg_init *pdbg_init,
|
||||
ch_sge_dbg++;
|
||||
}
|
||||
|
||||
if (CHELSIO_CHIP_VERSION(padap->params.chip) > CHELSIO_T5) {
|
||||
if (CHELSIO_CHIP_VERSION(padap->params.chip) > CHELSIO_T5 &&
|
||||
!padap_running) {
|
||||
sge_qbase = (struct sge_qbase_reg_field *)ch_sge_dbg;
|
||||
/* 1 addr reg SGE_QBASE_INDEX and 4 data reg
|
||||
* SGE_QBASE_MAP[0-3]
|
||||
|
@ -2090,7 +2090,8 @@ void t4_get_regs(struct adapter *adap, void *buf, size_t buf_size)
|
||||
0x1190, 0x1194,
|
||||
0x11a0, 0x11a4,
|
||||
0x11b0, 0x11b4,
|
||||
0x11fc, 0x1274,
|
||||
0x11fc, 0x123c,
|
||||
0x1254, 0x1274,
|
||||
0x1280, 0x133c,
|
||||
0x1800, 0x18fc,
|
||||
0x3000, 0x302c,
|
||||
|
Loading…
Reference in New Issue
Block a user