Message ID | 80e73e33f390001d9c0140ffa9baddf6466a41a2.1652637337.git.christophe.jaillet@wanadoo.fr (mailing list archive) |
---|---|
State | Accepted |
Commit | 5361448e45fac6fb96738df748229432a62d78b6 |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | net/qla3xxx: Fix a test in ql_reset_work() | expand |
Hello: This patch was applied to netdev/net.git (master) by Jakub Kicinski <kuba@kernel.org>: On Sun, 15 May 2022 20:07:02 +0200 you wrote: > test_bit() tests if one bit is set or not. > Here the logic seems to check of bit QL_RESET_PER_SCSI (i.e. 4) OR bit > QL_RESET_START (i.e. 3) is set. > > In fact, it checks if bit 7 (4 | 3 = 7) is set, that is to say > QL_ADAPTER_UP. > > [...] Here is the summary with links: - net/qla3xxx: Fix a test in ql_reset_work() https://git.kernel.org/netdev/net/c/5361448e45fa You are awesome, thank you!
diff --git a/drivers/net/ethernet/qlogic/qla3xxx.c b/drivers/net/ethernet/qlogic/qla3xxx.c index b30589a135c2..70241faaa841 100644 --- a/drivers/net/ethernet/qlogic/qla3xxx.c +++ b/drivers/net/ethernet/qlogic/qla3xxx.c @@ -3614,7 +3614,8 @@ static void ql_reset_work(struct work_struct *work) qdev->mem_map_registers; unsigned long hw_flags; - if (test_bit((QL_RESET_PER_SCSI | QL_RESET_START), &qdev->flags)) { + if (test_bit((QL_RESET_PER_SCSI), &qdev->flags) || + test_bit((QL_RESET_START), &qdev->flags)) { clear_bit(QL_LINK_MASTER, &qdev->flags); /*
test_bit() tests if one bit is set or not. Here the logic seems to check of bit QL_RESET_PER_SCSI (i.e. 4) OR bit QL_RESET_START (i.e. 3) is set. In fact, it checks if bit 7 (4 | 3 = 7) is set, that is to say QL_ADAPTER_UP. This looks harmless, because this bit is likely be set, and when the ql_reset_work() delayed work is scheduled in ql3xxx_isr() (the only place that schedule this work), QL_RESET_START or QL_RESET_PER_SCSI is set. This has been spotted by smatch. Fixes: 5a4faa873782 ("[PATCH] qla3xxx NIC driver") Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr> --- This patch is speculative and should certainly be tested by s.o. with the needed hardware. Maybe, the whole 'if (test_bit(...)' test should be removed because it is always true. If it is really the case, this would save 1 level of indentation. --- drivers/net/ethernet/qlogic/qla3xxx.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)