|
Hannes Reinecke |
24a328 |
From: Davidlohr Bueso <dave@stgolabs.net>
|
|
Hannes Reinecke |
24a328 |
Date: Fri, 6 May 2022 12:57:57 +0200
|
|
Hannes Reinecke |
24a328 |
Subject: [PATCH] scsi: libfc: Remove get_cpu() semantics in fc_exch_em_alloc()
|
|
Hannes Reinecke |
24a328 |
Git-commit: a0548edf852a8776dade1e511694b2980c674e2a
|
|
Hannes Reinecke |
24a328 |
Patch-mainline: v5.19-rc1
|
|
Hannes Reinecke |
24a328 |
References: jsc#PED-1559
|
|
Hannes Reinecke |
24a328 |
|
|
Hannes Reinecke |
24a328 |
The get_cpu() in fc_exch_em_alloc() was introduced in commit f018b73af6db
|
|
Hannes Reinecke |
24a328 |
("[SCSI] libfc, libfcoe, fcoe: use smp_processor_id() only when preempt
|
|
Hannes Reinecke |
24a328 |
disabled") for no other reason than to simply use smp_processor_id()
|
|
Hannes Reinecke |
24a328 |
without getting a warning, because everything is done with the pool->lock
|
|
Hannes Reinecke |
24a328 |
held anyway. However, get_cpu(), by disabling preemption, does not play
|
|
Hannes Reinecke |
24a328 |
well with PREEMPT_RT, particularly when acquiring a regular (and thus
|
|
Hannes Reinecke |
24a328 |
sleepable) spinlock.
|
|
Hannes Reinecke |
24a328 |
|
|
Hannes Reinecke |
24a328 |
Therefore remove the get_cpu() and just use the unstable value as we will
|
|
Hannes Reinecke |
24a328 |
have CPU locality guarantees next by taking the lock. The window of
|
|
Hannes Reinecke |
24a328 |
migration, as noted by Sebastian, is small and even if it happens the
|
|
Hannes Reinecke |
24a328 |
result is correct.
|
|
Hannes Reinecke |
24a328 |
|
|
Hannes Reinecke |
24a328 |
Link: https://lore.kernel.org/r/20211117025956.79616-2-dave@stgolabs.net
|
|
Hannes Reinecke |
24a328 |
Link: https://lore.kernel.org/r/20220506105758.283887-4-bigeasy@linutronix.de
|
|
Hannes Reinecke |
24a328 |
Acked-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
|
|
Hannes Reinecke |
24a328 |
Signed-off-by: Davidlohr Bueso <dbueso@suse.de>
|
|
Hannes Reinecke |
24a328 |
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
|
|
Hannes Reinecke |
24a328 |
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
|
|
Hannes Reinecke |
24a328 |
Acked-by: Hannes Reinecke <hare@suse.com>
|
|
Hannes Reinecke |
24a328 |
---
|
|
Hannes Reinecke |
24a328 |
drivers/scsi/libfc/fc_exch.c | 3 +--
|
|
Hannes Reinecke |
24a328 |
1 file changed, 1 insertion(+), 2 deletions(-)
|
|
Hannes Reinecke |
24a328 |
|
|
Hannes Reinecke |
24a328 |
diff --git a/drivers/scsi/libfc/fc_exch.c b/drivers/scsi/libfc/fc_exch.c
|
|
Hannes Reinecke |
24a328 |
index aa223db4cf53..1d91c457527f 100644
|
|
Hannes Reinecke |
24a328 |
--- a/drivers/scsi/libfc/fc_exch.c
|
|
Hannes Reinecke |
24a328 |
+++ b/drivers/scsi/libfc/fc_exch.c
|
|
Hannes Reinecke |
24a328 |
@@ -825,10 +825,9 @@ static struct fc_exch *fc_exch_em_alloc(struct fc_lport *lport,
|
|
Hannes Reinecke |
24a328 |
}
|
|
Hannes Reinecke |
24a328 |
memset(ep, 0, sizeof(*ep));
|
|
Hannes Reinecke |
24a328 |
|
|
Hannes Reinecke |
24a328 |
- cpu = get_cpu();
|
|
Hannes Reinecke |
24a328 |
+ cpu = raw_smp_processor_id();
|
|
Hannes Reinecke |
24a328 |
pool = per_cpu_ptr(mp->pool, cpu);
|
|
Hannes Reinecke |
24a328 |
spin_lock_bh(&pool->lock);
|
|
Hannes Reinecke |
24a328 |
- put_cpu();
|
|
Hannes Reinecke |
24a328 |
|
|
Hannes Reinecke |
24a328 |
/* peek cache of free slot */
|
|
Hannes Reinecke |
24a328 |
if (pool->left != FC_XID_UNKNOWN) {
|
|
Hannes Reinecke |
24a328 |
--
|
|
Hannes Reinecke |
24a328 |
2.35.3
|
|
Hannes Reinecke |
24a328 |
|