/* prototypes for thin interrupt */
 int qdio_establish_thinint(struct qdio_irq *irq_ptr);
 void qdio_shutdown_thinint(struct qdio_irq *irq_ptr);
-void tiqdio_add_device(struct qdio_irq *irq_ptr);
-void tiqdio_remove_device(struct qdio_irq *irq_ptr);
 int qdio_thinint_init(void);
 void qdio_thinint_exit(void);
 int test_nonshared_ind(struct qdio_irq *);
 
         */
        qdio_set_state(irq_ptr, QDIO_IRQ_STATE_STOPPED);
 
-       tiqdio_remove_device(irq_ptr);
        qdio_shutdown_queues(irq_ptr);
        qdio_shutdown_debug_entries(irq_ptr);
 
        if (rc)
                goto err_queues;
 
-       INIT_LIST_HEAD(&irq_ptr->entry);
        cdev->private->qdio_data = irq_ptr;
        qdio_set_state(irq_ptr, QDIO_IRQ_STATE_INACTIVE);
        return 0;
                goto out;
        }
 
-       if (is_thinint_irq(irq_ptr))
-               tiqdio_add_device(irq_ptr);
-
        /* wait for subchannel to become active */
        msleep(5);
 
 
        atomic_dec(&ind->count);
 }
 
-void tiqdio_add_device(struct qdio_irq *irq_ptr)
-{
-       mutex_lock(&tiq_list_lock);
-       list_add_rcu(&irq_ptr->entry, &tiq_list);
-       mutex_unlock(&tiq_list_lock);
-}
-
-void tiqdio_remove_device(struct qdio_irq *irq_ptr)
-{
-       mutex_lock(&tiq_list_lock);
-       list_del_rcu(&irq_ptr->entry);
-       mutex_unlock(&tiq_list_lock);
-       synchronize_rcu();
-       INIT_LIST_HEAD(&irq_ptr->entry);
-}
-
 static inline int references_shared_dsci(struct qdio_irq *irq_ptr)
 {
        return irq_ptr->dsci == &q_indicators[TIQDIO_SHARED_IND].ind;
        DBF_HEX(&irq_ptr->dsci, sizeof(void *));
 
        rc = set_subchannel_ind(irq_ptr, 0);
-       if (rc)
+       if (rc) {
                put_indicator(irq_ptr->dsci);
+               return rc;
+       }
 
-       return rc;
+       mutex_lock(&tiq_list_lock);
+       list_add_rcu(&irq_ptr->entry, &tiq_list);
+       mutex_unlock(&tiq_list_lock);
+       return 0;
 }
 
 void qdio_shutdown_thinint(struct qdio_irq *irq_ptr)
        if (!is_thinint_irq(irq_ptr))
                return;
 
+       mutex_lock(&tiq_list_lock);
+       list_del_rcu(&irq_ptr->entry);
+       mutex_unlock(&tiq_list_lock);
+       synchronize_rcu();
+
        /* reset adapter interrupt indicators */
        set_subchannel_ind(irq_ptr, 1);
        put_indicator(irq_ptr->dsci);