summaryrefslogtreecommitdiff
path: root/Documentation/ioctl
diff options
context:
space:
mode:
authorSomnath Kotur <somnath.kotur@broadcom.com>2022-05-02 21:13:10 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2022-05-12 12:23:46 +0200
commitcff6cb162f7aa5fa8ff49994f92634f6514c5da1 (patch)
tree5be753334bb169e1300601b4a94b986064c9aa65 /Documentation/ioctl
parent64ece01adb428c931720f27878a1f6eb5461b531 (diff)
bnxt_en: Fix possible bnxt_open() failure caused by wrong RFS flag
commit 13ba794397e45e52893cfc21d7a69cb5f341b407 upstream. bnxt_open() can fail in this code path, especially on a VF when it fails to reserve default rings: bnxt_open() __bnxt_open_nic() bnxt_clear_int_mode() bnxt_init_dflt_ring_mode() RX rings would be set to 0 when we hit this error path. It is possible for a subsequent bnxt_open() call to potentially succeed with a code path like this: bnxt_open() bnxt_hwrm_if_change() bnxt_fw_init_one() bnxt_fw_init_one_p3() bnxt_set_dflt_rfs() bnxt_rfs_capable() bnxt_hwrm_reserve_rings() On older chips, RFS is capable if we can reserve the number of vnics that is equal to RX rings + 1. But since RX rings is still set to 0 in this code path, we may mistakenly think that RFS is supported for 0 RX rings. Later, when the default RX rings are reserved and we try to enable RFS, it would fail and cause bnxt_open() to fail unnecessarily. We fix this in 2 places. bnxt_rfs_capable() will always return false if RX rings is not yet set. bnxt_init_dflt_ring_mode() will call bnxt_set_dflt_rfs() which will always clear the RFS flags if RFS is not supported. Fixes: 20d7d1c5c9b1 ("bnxt_en: reliably allocate IRQ table on reset to avoid crash") Signed-off-by: Somnath Kotur <somnath.kotur@broadcom.com> Signed-off-by: Michael Chan <michael.chan@broadcom.com> Signed-off-by: Jakub Kicinski <kuba@kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'Documentation/ioctl')
0 files changed, 0 insertions, 0 deletions