IB/hfi1: Don't call cond_resched in atomic mode when sending packets

This patch fixed the problem where the driver might reschedule in atomic
mode when sending packets. This is due to the fact that the call to
cond_resched() in hfi1_do_send() might occur in atomic mode and a check is
required to avoid the warning message:
    "kernel: BUG: scheduling while atomic: swapper/2/0/0x10000100."

Reviewed-by: Dennis Dalessandro <dennis.dalessandro@intel.com>
Signed-off-by: Mike Marciniszyn <mike.marciniszyn@intel.com>
Signed-off-by: Kaike Wan <kaike.wan@intel.com>
Signed-off-by: Jubin John <jubin.john@intel.com>
Signed-off-by: Doug Ledford <dledford@redhat.com>
This commit is contained in:
Kaike Wan 2016-03-05 08:50:49 -08:00 коммит произвёл Doug Ledford
Родитель 528ee9fbf0
Коммит 831464ce4b
1 изменённых файлов: 5 добавлений и 2 удалений

Просмотреть файл

@ -906,8 +906,11 @@ void hfi1_do_send(struct rvt_qp *qp)
*ps.ppd->dd->send_schedule); *ps.ppd->dd->send_schedule);
return; return;
} }
if (!irqs_disabled()) {
cond_resched(); cond_resched();
this_cpu_inc(*ps.ppd->dd->send_schedule); this_cpu_inc(
*ps.ppd->dd->send_schedule);
}
timeout = jiffies + (timeout_int) / 8; timeout = jiffies + (timeout_int) / 8;
} }
spin_lock_irqsave(&qp->s_lock, flags); spin_lock_irqsave(&qp->s_lock, flags);