/* list of thin interrupt input queues */
 static LIST_HEAD(tiq_list);
+DEFINE_MUTEX(tiq_list_lock);
 
 /* adapter local summary indicator */
 static unsigned char *tiqdio_alsi;
        if (!css_qdio_omit_svs && irq_ptr->siga_flag.sync)
                css_qdio_omit_svs = 1;
 
-       for_each_input_queue(irq_ptr, q, i) {
+       mutex_lock(&tiq_list_lock);
+       for_each_input_queue(irq_ptr, q, i)
                list_add_rcu(&q->entry, &tiq_list);
-               synchronize_rcu();
-       }
+       mutex_unlock(&tiq_list_lock);
        xchg(irq_ptr->dsci, 1);
        tasklet_schedule(&tiqdio_tasklet);
 }
                /* if establish triggered an error */
                if (!q || !q->entry.prev || !q->entry.next)
                        continue;
+
+               mutex_lock(&tiq_list_lock);
                list_del_rcu(&q->entry);
+               mutex_unlock(&tiq_list_lock);
                synchronize_rcu();
        }
 }