| Subject: scsi/fcoe: Make RT aware. |
| From: Thomas Gleixner <tglx@linutronix.de> |
| Date: Sat, 12 Nov 2011 14:00:48 +0100 |
| |
| 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(-) |
| |
| --- a/drivers/scsi/fcoe/fcoe.c |
| +++ b/drivers/scsi/fcoe/fcoe.c |
| @@ -1455,11 +1455,11 @@ static int fcoe_rcv(struct sk_buff *skb, |
| 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; |
| } |
| @@ -1646,11 +1646,11 @@ 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; |
| } |
| |
| @@ -1693,7 +1693,7 @@ 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 " |
| @@ -1725,13 +1725,13 @@ 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); |
| } |
| |
| --- a/drivers/scsi/fcoe/fcoe_ctlr.c |
| +++ b/drivers/scsi/fcoe/fcoe_ctlr.c |
| @@ -834,7 +834,7 @@ 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; |
| @@ -870,7 +870,7 @@ 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 */ |
| --- a/drivers/scsi/libfc/fc_exch.c |
| +++ b/drivers/scsi/libfc/fc_exch.c |
| @@ -814,10 +814,10 @@ 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) { |