|
Jiri Slaby |
6e4f7d |
From: Vishal Kulkarni <vishal@chelsio.com>
|
|
Jiri Slaby |
6e4f7d |
Date: Wed, 22 Apr 2020 21:20:07 +0530
|
|
Jiri Slaby |
6e4f7d |
Subject: cxgb4: fix adapter crash due to wrong MC size
|
|
Jiri Slaby |
6e4f7d |
Git-commit: ce222748078592afb51b810dc154531aeba4f512
|
|
Jiri Slaby |
6e4f7d |
Patch-mainline: 5.7-rc3
|
|
Jiri Slaby |
6e4f7d |
References: networking-stable-20_04_27
|
|
Jiri Slaby |
6e4f7d |
|
|
Jiri Slaby |
6e4f7d |
In the absence of MC1, the size calculation function
|
|
Jiri Slaby |
6e4f7d |
cudbg_mem_region_size() was returing wrong MC size and
|
|
Jiri Slaby |
6e4f7d |
resulted in adapter crash. This patch adds new argument
|
|
Jiri Slaby |
6e4f7d |
to cudbg_mem_region_size() which will have actual size
|
|
Jiri Slaby |
6e4f7d |
and returns error to caller in the absence of MC1.
|
|
Jiri Slaby |
6e4f7d |
|
|
Jiri Slaby |
6e4f7d |
Fixes: a1c69520f785 ("cxgb4: collect MC memory dump")
|
|
Jiri Slaby |
6e4f7d |
Signed-off-by: Vishal Kulkarni <vishal@chelsio.com>"
|
|
Jiri Slaby |
6e4f7d |
Signed-off-by: David S. Miller <davem@davemloft.net>
|
|
Jiri Slaby |
6e4f7d |
Signed-off-by: Jiri Slaby <jslaby@suse.cz>
|
|
Jiri Slaby |
6e4f7d |
---
|
|
Jiri Slaby |
6e4f7d |
drivers/net/ethernet/chelsio/cxgb4/cudbg_lib.c | 27 ++++++++++++++++++-------
|
|
Jiri Slaby |
6e4f7d |
1 file changed, 20 insertions(+), 7 deletions(-)
|
|
Jiri Slaby |
6e4f7d |
|
|
Jiri Slaby |
6e4f7d |
--- a/drivers/net/ethernet/chelsio/cxgb4/cudbg_lib.c
|
|
Jiri Slaby |
6e4f7d |
+++ b/drivers/net/ethernet/chelsio/cxgb4/cudbg_lib.c
|
|
Jiri Slaby |
6e4f7d |
@@ -1049,9 +1049,9 @@ static void cudbg_t4_fwcache(struct cudb
|
|
Jiri Slaby |
6e4f7d |
}
|
|
Jiri Slaby |
6e4f7d |
}
|
|
Jiri Slaby |
6e4f7d |
|
|
Jiri Slaby |
6e4f7d |
-static unsigned long cudbg_mem_region_size(struct cudbg_init *pdbg_init,
|
|
Jiri Slaby |
6e4f7d |
- struct cudbg_error *cudbg_err,
|
|
Jiri Slaby |
6e4f7d |
- u8 mem_type)
|
|
Jiri Slaby |
6e4f7d |
+static int cudbg_mem_region_size(struct cudbg_init *pdbg_init,
|
|
Jiri Slaby |
6e4f7d |
+ struct cudbg_error *cudbg_err,
|
|
Jiri Slaby |
6e4f7d |
+ u8 mem_type, unsigned long *region_size)
|
|
Jiri Slaby |
6e4f7d |
{
|
|
Jiri Slaby |
6e4f7d |
struct adapter *padap = pdbg_init->adap;
|
|
Jiri Slaby |
6e4f7d |
struct cudbg_meminfo mem_info;
|
|
Jiri Slaby |
6e4f7d |
@@ -1060,15 +1060,23 @@ static unsigned long cudbg_mem_region_si
|
|
Jiri Slaby |
6e4f7d |
|
|
Jiri Slaby |
6e4f7d |
memset(&mem_info, 0, sizeof(struct cudbg_meminfo));
|
|
Jiri Slaby |
6e4f7d |
rc = cudbg_fill_meminfo(padap, &mem_info);
|
|
Jiri Slaby |
6e4f7d |
- if (rc)
|
|
Jiri Slaby |
6e4f7d |
+ if (rc) {
|
|
Jiri Slaby |
6e4f7d |
+ cudbg_err->sys_err = rc;
|
|
Jiri Slaby |
6e4f7d |
return rc;
|
|
Jiri Slaby |
6e4f7d |
+ }
|
|
Jiri Slaby |
6e4f7d |
|
|
Jiri Slaby |
6e4f7d |
cudbg_t4_fwcache(pdbg_init, cudbg_err);
|
|
Jiri Slaby |
6e4f7d |
rc = cudbg_meminfo_get_mem_index(padap, &mem_info, mem_type, &mc_idx);
|
|
Jiri Slaby |
6e4f7d |
- if (rc)
|
|
Jiri Slaby |
6e4f7d |
+ if (rc) {
|
|
Jiri Slaby |
6e4f7d |
+ cudbg_err->sys_err = rc;
|
|
Jiri Slaby |
6e4f7d |
return rc;
|
|
Jiri Slaby |
6e4f7d |
+ }
|
|
Jiri Slaby |
6e4f7d |
+
|
|
Jiri Slaby |
6e4f7d |
+ if (region_size)
|
|
Jiri Slaby |
6e4f7d |
+ *region_size = mem_info.avail[mc_idx].limit -
|
|
Jiri Slaby |
6e4f7d |
+ mem_info.avail[mc_idx].base;
|
|
Jiri Slaby |
6e4f7d |
|
|
Jiri Slaby |
6e4f7d |
- return mem_info.avail[mc_idx].limit - mem_info.avail[mc_idx].base;
|
|
Jiri Slaby |
6e4f7d |
+ return 0;
|
|
Jiri Slaby |
6e4f7d |
}
|
|
Jiri Slaby |
6e4f7d |
|
|
Jiri Slaby |
6e4f7d |
static int cudbg_collect_mem_region(struct cudbg_init *pdbg_init,
|
|
Jiri Slaby |
6e4f7d |
@@ -1076,7 +1084,12 @@ static int cudbg_collect_mem_region(stru
|
|
Jiri Slaby |
6e4f7d |
struct cudbg_error *cudbg_err,
|
|
Jiri Slaby |
6e4f7d |
u8 mem_type)
|
|
Jiri Slaby |
6e4f7d |
{
|
|
Jiri Slaby |
6e4f7d |
- unsigned long size = cudbg_mem_region_size(pdbg_init, cudbg_err, mem_type);
|
|
Jiri Slaby |
6e4f7d |
+ unsigned long size = 0;
|
|
Jiri Slaby |
6e4f7d |
+ int rc;
|
|
Jiri Slaby |
6e4f7d |
+
|
|
Jiri Slaby |
6e4f7d |
+ rc = cudbg_mem_region_size(pdbg_init, cudbg_err, mem_type, &size);
|
|
Jiri Slaby |
6e4f7d |
+ if (rc)
|
|
Jiri Slaby |
6e4f7d |
+ return rc;
|
|
Jiri Slaby |
6e4f7d |
|
|
Jiri Slaby |
6e4f7d |
return cudbg_read_fw_mem(pdbg_init, dbg_buff, mem_type, size,
|
|
Jiri Slaby |
6e4f7d |
cudbg_err);
|