Skip to content

Commit c5cff16

Browse files
rtylxkuba-moo
authored andcommitted
i40e: fix registers dump after run ethtool adapter self test
Fix invalid registers dump from ethtool -d ethX after adapter self test by ethtool -t ethY. It causes invalid data display. The problem was caused by overwriting i40e_reg_list[].elements which is common for ethtool self test and dump. Fixes: 22dd9ae ("i40e: Rework register diagnostic") Signed-off-by: Radoslaw Tyl <[email protected]> Reviewed-by: Michal Swiatkowski <[email protected]> Tested-by: Arpana Arland <[email protected]> (A Contingent worker at Intel) Signed-off-by: Tony Nguyen <[email protected]> Reviewed-by: Leon Romanovsky <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Jakub Kicinski <[email protected]>
1 parent 165d351 commit c5cff16

File tree

2 files changed

+7
-6
lines changed

2 files changed

+7
-6
lines changed

drivers/net/ethernet/intel/i40e/i40e_diag.c

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ static int i40e_diag_reg_pattern_test(struct i40e_hw *hw,
4444
return 0;
4545
}
4646

47-
struct i40e_diag_reg_test_info i40e_reg_list[] = {
47+
const struct i40e_diag_reg_test_info i40e_reg_list[] = {
4848
/* offset mask elements stride */
4949
{I40E_QTX_CTL(0), 0x0000FFBF, 1,
5050
I40E_QTX_CTL(1) - I40E_QTX_CTL(0)},
@@ -78,27 +78,28 @@ int i40e_diag_reg_test(struct i40e_hw *hw)
7878
{
7979
int ret_code = 0;
8080
u32 reg, mask;
81+
u32 elements;
8182
u32 i, j;
8283

8384
for (i = 0; i40e_reg_list[i].offset != 0 &&
8485
!ret_code; i++) {
8586

87+
elements = i40e_reg_list[i].elements;
8688
/* set actual reg range for dynamically allocated resources */
8789
if (i40e_reg_list[i].offset == I40E_QTX_CTL(0) &&
8890
hw->func_caps.num_tx_qp != 0)
89-
i40e_reg_list[i].elements = hw->func_caps.num_tx_qp;
91+
elements = hw->func_caps.num_tx_qp;
9092
if ((i40e_reg_list[i].offset == I40E_PFINT_ITRN(0, 0) ||
9193
i40e_reg_list[i].offset == I40E_PFINT_ITRN(1, 0) ||
9294
i40e_reg_list[i].offset == I40E_PFINT_ITRN(2, 0) ||
9395
i40e_reg_list[i].offset == I40E_QINT_TQCTL(0) ||
9496
i40e_reg_list[i].offset == I40E_QINT_RQCTL(0)) &&
9597
hw->func_caps.num_msix_vectors != 0)
96-
i40e_reg_list[i].elements =
97-
hw->func_caps.num_msix_vectors - 1;
98+
elements = hw->func_caps.num_msix_vectors - 1;
9899

99100
/* test register access */
100101
mask = i40e_reg_list[i].mask;
101-
for (j = 0; j < i40e_reg_list[i].elements && !ret_code; j++) {
102+
for (j = 0; j < elements && !ret_code; j++) {
102103
reg = i40e_reg_list[i].offset +
103104
(j * i40e_reg_list[i].stride);
104105
ret_code = i40e_diag_reg_pattern_test(hw, reg, mask);

drivers/net/ethernet/intel/i40e/i40e_diag.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ struct i40e_diag_reg_test_info {
2020
u32 stride; /* bytes between each element */
2121
};
2222

23-
extern struct i40e_diag_reg_test_info i40e_reg_list[];
23+
extern const struct i40e_diag_reg_test_info i40e_reg_list[];
2424

2525
int i40e_diag_reg_test(struct i40e_hw *hw);
2626
int i40e_diag_eeprom_test(struct i40e_hw *hw);

0 commit comments

Comments
 (0)