|
@@ -3878,6 +3878,9 @@ static void smi_recv_tasklet(unsigned long val)
|
|
|
* because the lower layer is allowed to hold locks while calling
|
|
* because the lower layer is allowed to hold locks while calling
|
|
|
* message delivery.
|
|
* message delivery.
|
|
|
*/
|
|
*/
|
|
|
|
|
+
|
|
|
|
|
+ rcu_read_lock();
|
|
|
|
|
+
|
|
|
if (!run_to_completion)
|
|
if (!run_to_completion)
|
|
|
spin_lock_irqsave(&intf->xmit_msgs_lock, flags);
|
|
spin_lock_irqsave(&intf->xmit_msgs_lock, flags);
|
|
|
if (intf->curr_msg == NULL && !intf->in_shutdown) {
|
|
if (intf->curr_msg == NULL && !intf->in_shutdown) {
|
|
@@ -3900,6 +3903,8 @@ static void smi_recv_tasklet(unsigned long val)
|
|
|
if (newmsg)
|
|
if (newmsg)
|
|
|
intf->handlers->sender(intf->send_info, newmsg);
|
|
intf->handlers->sender(intf->send_info, newmsg);
|
|
|
|
|
|
|
|
|
|
+ rcu_read_unlock();
|
|
|
|
|
+
|
|
|
handle_new_recv_msgs(intf);
|
|
handle_new_recv_msgs(intf);
|
|
|
}
|
|
}
|
|
|
|
|
|