From da39fe781d9618b7363d53603c79fa1f4c96474d Mon Sep 17 00:00:00 2001
From: Thomas Gleixner <tglx@linutronix.de>
Date: Sat, 12 Nov 2011 14:00:48 +0100
Subject: [PATCH 092/158] scsi/fcoe: Make RT aware.

Do not disable preemption while taking sleeping locks. All user look safe
for migrate_diable() only.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
 drivers/scsi/fcoe/fcoe.c      | 16 ++++++++--------
 drivers/scsi/fcoe/fcoe_ctlr.c |  4 ++--
 drivers/scsi/libfc/fc_exch.c  |  4 ++--
 3 files changed, 12 insertions(+), 12 deletions(-)

Index: linux-5.15.19-rt29/drivers/scsi/fcoe/fcoe.c
===================================================================
@ linux-5.15.19-rt29/drivers/scsi/fcoe/fcoe.c:1453 @ err2:
 static int fcoe_alloc_paged_crc_eof(struct sk_buff *skb, int tlen)
 {
 	struct fcoe_percpu_s *fps;
-	int rc;
+	int rc, cpu = get_cpu_light();
 
-	fps = &get_cpu_var(fcoe_percpu);
+	fps = &per_cpu(fcoe_percpu, cpu);
 	rc = fcoe_get_paged_crc_eof(skb, tlen, fps);
-	put_cpu_var(fcoe_percpu);
+	put_cpu_light();
 
 	return rc;
 }
@ linux-5.15.19-rt29/drivers/scsi/fcoe/fcoe.c:1642 @ static inline int fcoe_filter_frames(str
 		return 0;
 	}
 
-	stats = per_cpu_ptr(lport->stats, get_cpu());
+	stats = per_cpu_ptr(lport->stats, get_cpu_light());
 	stats->InvalidCRCCount++;
 	if (stats->InvalidCRCCount < 5)
 		printk(KERN_WARNING "fcoe: dropping frame with CRC error\n");
-	put_cpu();
+	put_cpu_light();
 	return -EINVAL;
 }
 
@ linux-5.15.19-rt29/drivers/scsi/fcoe/fcoe.c:1687 @ static void fcoe_recv_frame(struct sk_bu
 	 */
 	hp = (struct fcoe_hdr *) skb_network_header(skb);
 
-	stats = per_cpu_ptr(lport->stats, get_cpu());
+	stats = per_cpu_ptr(lport->stats, get_cpu_light());
 	if (unlikely(FC_FCOE_DECAPS_VER(hp) != FC_FCOE_VER)) {
 		if (stats->ErrorFrames < 5)
 			printk(KERN_WARNING "fcoe: FCoE version "
@ linux-5.15.19-rt29/drivers/scsi/fcoe/fcoe.c:1719 @ static void fcoe_recv_frame(struct sk_bu
 		goto drop;
 
 	if (!fcoe_filter_frames(lport, fp)) {
-		put_cpu();
+		put_cpu_light();
 		fc_exch_recv(lport, fp);
 		return;
 	}
 drop:
 	stats->ErrorFrames++;
-	put_cpu();
+	put_cpu_light();
 	kfree_skb(skb);
 }
 
Index: linux-5.15.19-rt29/drivers/scsi/fcoe/fcoe_ctlr.c
===================================================================
--- linux-5.15.19-rt29.orig/drivers/scsi/fcoe/fcoe_ctlr.c
+++ linux-5.15.19-rt29/drivers/scsi/fcoe/fcoe_ctlr.c
@ linux-5.15.19-rt29/drivers/scsi/fcoe/fcoe.c:831 @ static unsigned long fcoe_ctlr_age_fcfs(
 
 	INIT_LIST_HEAD(&del_list);
 
-	stats = per_cpu_ptr(fip->lp->stats, get_cpu());
+	stats = per_cpu_ptr(fip->lp->stats, get_cpu_light());
 
 	list_for_each_entry_safe(fcf, next, &fip->fcfs, list) {
 		deadline = fcf->time + fcf->fka_period + fcf->fka_period / 2;
@ linux-5.15.19-rt29/drivers/scsi/fcoe/fcoe.c:867 @ static unsigned long fcoe_ctlr_age_fcfs(
 				sel_time = fcf->time;
 		}
 	}
-	put_cpu();
+	put_cpu_light();
 
 	list_for_each_entry_safe(fcf, next, &del_list, list) {
 		/* Removes fcf from current list */
Index: linux-5.15.19-rt29/drivers/scsi/libfc/fc_exch.c
===================================================================
--- linux-5.15.19-rt29.orig/drivers/scsi/libfc/fc_exch.c
+++ linux-5.15.19-rt29/drivers/scsi/libfc/fc_exch.c
@ linux-5.15.19-rt29/drivers/scsi/fcoe/fcoe.c:828 @ static struct fc_exch *fc_exch_em_alloc(
 	}
 	memset(ep, 0, sizeof(*ep));
 
-	cpu = get_cpu();
+	cpu = get_cpu_light();
 	pool = per_cpu_ptr(mp->pool, cpu);
 	spin_lock_bh(&pool->lock);
-	put_cpu();
+	put_cpu_light();
 
 	/* peek cache of free slot */
 	if (pool->left != FC_XID_UNKNOWN) {