John Meneghini
ec4334152d
scsi: bnx2fc: Make bnx2fc_recv_frame() mp safe
...
commit 936bd03405fc83ba039d42bc93ffd4b88418f1d3 upstream.
Running tests with a debug kernel shows that bnx2fc_recv_frame() is
modifying the per_cpu lport stats counters in a non-mpsafe way. Just boot
a debug kernel and run the bnx2fc driver with the hardware enabled.
[ 1391.699147] BUG: using smp_processor_id() in preemptible [00000000] code: bnx2fc_
[ 1391.699160] caller is bnx2fc_recv_frame+0xbf9/0x1760 [bnx2fc]
[ 1391.699174] CPU: 2 PID: 4355 Comm: bnx2fc_l2_threa Kdump: loaded Tainted: G B
[ 1391.699180] Hardware name: HP ProLiant DL120 G7, BIOS J01 07/01/2013
[ 1391.699183] Call Trace:
[ 1391.699188] dump_stack_lvl+0x57/0x7d
[ 1391.699198] check_preemption_disabled+0xc8/0xd0
[ 1391.699205] bnx2fc_recv_frame+0xbf9/0x1760 [bnx2fc]
[ 1391.699215] ? do_raw_spin_trylock+0xb5/0x180
[ 1391.699221] ? bnx2fc_npiv_create_vports.isra.0+0x4e0/0x4e0 [bnx2fc]
[ 1391.699229] ? bnx2fc_l2_rcv_thread+0xb7/0x3a0 [bnx2fc]
[ 1391.699240] bnx2fc_l2_rcv_thread+0x1af/0x3a0 [bnx2fc]
[ 1391.699250] ? bnx2fc_ulp_init+0xc0/0xc0 [bnx2fc]
[ 1391.699258] kthread+0x364/0x420
[ 1391.699263] ? _raw_spin_unlock_irq+0x24/0x50
[ 1391.699268] ? set_kthread_struct+0x100/0x100
[ 1391.699273] ret_from_fork+0x22/0x30
Restore the old get_cpu/put_cpu code with some modifications to reduce the
size of the critical section.
Link: https://lore.kernel.org/r/20220124145110.442335-1-jmeneghi@redhat.com
Fixes: d576a5e80cd0 ("bnx2fc: Improve stats update mechanism")
Tested-by: Guangwu Zhang <guazhang@redhat.com>
Acked-by: Saurav Kashyap <skashyap@marvell.com>
Signed-off-by: John Meneghini <jmeneghi@redhat.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2022-02-08 18:30:39 +01:00
..
2020-12-30 11:53:02 +01:00
2021-07-25 14:36:16 +02:00
2021-07-25 14:36:16 +02:00
2021-07-20 16:05:39 +02:00
2020-10-14 15:15:35 -07:00
2021-07-20 16:05:58 +02:00
2020-10-23 16:19:02 -07:00
2022-02-08 18:30:39 +01:00
2021-07-20 16:05:41 +02:00
2021-11-18 14:04:18 +01:00
2021-07-20 16:05:41 +02:00
2020-10-16 12:21:15 -07:00
2021-08-26 08:35:37 -04:00
2020-03-11 23:07:59 -04:00
2020-10-14 15:15:35 -07:00
2020-10-23 16:19:02 -07:00
2021-02-07 15:37:14 +01:00
2021-07-25 14:36:16 +02:00
2021-05-14 09:50:27 +02:00
2020-08-23 17:36:59 -05:00
2021-07-25 14:36:16 +02:00
2021-07-25 14:36:16 +02:00
2021-07-25 14:36:16 +02:00
2022-01-27 10:54:22 +01:00
2021-08-26 08:35:36 -04:00
2021-12-01 09:19:04 +01:00
2021-07-25 14:36:16 +02:00
2021-09-18 13:40:14 +02:00
2022-01-27 10:54:04 +01:00
2021-09-18 13:40:14 +02:00
2021-09-18 13:40:14 +02:00
2021-12-14 11:32:38 +01:00
2020-10-23 16:19:02 -07:00
2021-09-18 13:40:14 +02:00
2020-10-07 23:50:03 -04:00
2020-10-23 16:19:02 -07:00
2022-01-27 10:54:06 +01:00
2020-03-25 11:50:48 +01:00
2019-02-25 21:37:25 -05:00
2019-03-02 11:39:54 -08:00
2019-10-23 17:23:44 +02:00
2020-10-23 16:19:02 -07:00
2020-09-25 06:20:43 +02:00
2019-01-08 07:58:37 -05:00
2020-06-09 09:39:13 -07:00
2020-06-09 09:39:13 -07:00
2019-05-21 10:50:45 +02:00
2021-11-26 10:39:10 +01:00
2020-07-08 01:12:53 -04:00
2019-05-21 10:50:45 +02:00
2020-03-26 21:10:53 -04:00
2019-05-21 10:50:45 +02:00
2019-11-12 22:21:34 -05:00
2019-11-12 22:21:35 -05:00
2021-09-18 13:40:35 +02:00
2021-06-03 09:00:43 +02:00
2019-05-21 10:50:45 +02:00
2020-02-24 14:54:25 -05:00
2020-04-01 22:03:04 -04:00
2021-11-18 14:04:15 +01:00
2019-05-24 17:36:45 +02:00
2020-09-01 22:15:47 -04:00
2020-03-11 23:07:59 -04:00
2020-08-23 17:36:59 -05:00
2019-12-19 22:08:51 -05:00
2020-09-02 22:49:07 -04:00
2019-06-18 19:46:18 -04:00
2019-07-30 12:17:28 -04:00
2020-07-08 01:12:44 -04:00
2021-07-14 16:56:40 +02:00
2020-08-23 17:36:59 -05:00
2019-01-08 21:58:35 -05:00
2020-03-17 13:36:10 -04:00
2019-01-08 21:57:42 -05:00
2020-10-07 21:48:28 -04:00
2019-01-08 21:58:35 -05:00
2020-06-09 09:39:13 -07:00
2021-10-27 09:56:56 +02:00
2020-09-02 22:49:06 -04:00
2020-10-29 21:55:21 -04:00
2020-09-02 22:49:06 -04:00
2019-06-05 17:36:37 +02:00
2019-06-05 17:36:37 +02:00
2020-08-23 17:36:59 -05:00
2020-10-07 21:48:28 -04:00
2020-08-06 16:50:07 -07:00
2020-07-15 17:26:58 -04:00
2020-07-24 22:32:00 -04:00
2020-06-02 21:23:47 -04:00
2020-10-13 12:12:44 -07:00
2019-05-30 11:26:37 -07:00
2021-05-14 09:50:27 +02:00
2020-07-24 22:09:55 -04:00
2020-06-09 09:39:13 -07:00
2020-10-02 15:27:08 -07:00
2022-01-11 15:25:02 +01:00
2020-06-09 09:39:13 -07:00
2020-10-02 21:52:53 -04:00
2019-11-12 22:21:34 -05:00
2019-07-17 22:39:27 +09:00
2020-10-14 15:15:35 -07:00
2020-08-23 17:36:59 -05:00
2019-05-21 10:50:45 +02:00
2020-06-09 09:39:13 -07:00
2020-10-02 21:42:22 -04:00
2020-03-11 23:07:56 -04:00
2020-10-23 16:19:02 -07:00
2020-01-02 21:57:44 -05:00
2021-03-25 09:04:09 +01:00
2020-01-02 21:57:44 -05:00
2020-08-23 17:36:59 -05:00
2019-05-24 17:36:45 +02:00
2020-08-23 17:36:59 -05:00
2019-06-20 15:37:02 -04:00
2020-09-15 17:34:18 -04:00
2019-05-24 17:39:02 +02:00
2020-09-09 22:40:41 -04:00
2020-03-11 23:07:56 -04:00
2020-08-23 17:36:59 -05:00
2019-05-30 11:26:38 -07:00
2020-09-09 22:37:48 -04:00
2020-01-15 23:09:11 -05:00
2019-03-19 17:11:37 -04:00
2020-10-14 15:15:35 -07:00
2019-02-13 22:07:03 -05:00
2019-06-05 17:37:17 +02:00
2019-05-24 17:36:45 +02:00
2021-12-22 09:30:59 +01:00
2022-01-27 10:54:29 +01:00
2019-05-21 06:16:21 -04:00
2021-06-18 10:00:05 +02:00
2020-07-08 01:16:23 -04:00
2020-10-14 15:15:35 -07:00
2020-08-23 17:36:59 -05:00
2021-11-18 14:03:37 +01:00
2020-07-24 22:09:57 -04:00
2019-12-19 22:08:54 -05:00
2019-05-30 11:26:35 -07:00
2022-01-27 10:54:08 +01:00
2020-10-02 18:53:06 -04:00
2020-02-04 03:05:26 +00:00
2021-08-26 08:35:37 -04:00
2019-05-30 11:29:53 -07:00
2021-12-01 09:19:05 +01:00
2020-03-16 22:08:36 -04:00
2020-09-02 22:49:07 -04:00
2021-12-08 09:03:19 +01:00
2021-07-20 16:05:40 +02:00
2021-01-12 20:18:15 +01:00
2021-04-21 13:00:52 +02:00
2021-11-06 14:10:08 +01:00
2020-03-24 07:57:08 -06:00
2019-06-05 17:37:14 +02:00
2021-09-30 10:11:01 +02:00
2021-10-09 14:40:56 +02:00
2020-10-14 15:15:35 -07:00
2020-09-15 20:28:06 -04:00
2021-10-17 10:43:33 +02:00
2020-10-03 00:02:13 -04:00
2020-09-25 06:20:44 +02:00
2019-05-24 17:36:45 +02:00
2021-05-14 09:50:27 +02:00
2022-01-27 10:54:23 +01:00
2022-01-27 10:54:23 +01:00
2020-02-24 15:01:57 -05:00
2021-04-07 15:00:05 +02:00
2020-03-11 23:07:56 -04:00
2021-07-20 16:05:43 +02:00
2020-08-23 17:36:59 -05:00
2021-05-14 09:50:27 +02:00
2020-10-02 21:52:55 -04:00
2021-10-17 10:43:33 +02:00
2022-01-05 12:40:33 +01:00
2020-08-23 17:36:59 -05:00
2019-05-24 17:39:02 +02:00
2019-07-11 15:14:01 -07:00
2020-08-23 17:36:59 -05:00
2020-01-06 09:45:59 +01:00
2019-05-21 10:50:45 +02:00
2020-06-09 09:39:13 -07:00