struct ishtp_cl *hid_ishtp_cl = ishtp_get_drvdata(device);
        struct ishtp_cl_rb *rb_in_proc;
        size_t r_length;
-       unsigned long flags;
 
        if (!hid_ishtp_cl)
                return;
 
-       spin_lock_irqsave(&hid_ishtp_cl->in_process_spinlock, flags);
-       while (!list_empty(&hid_ishtp_cl->in_process_list.list)) {
-               rb_in_proc = list_entry(
-                       hid_ishtp_cl->in_process_list.list.next,
-                       struct ishtp_cl_rb, list);
-               list_del_init(&rb_in_proc->list);
-               spin_unlock_irqrestore(&hid_ishtp_cl->in_process_spinlock,
-                       flags);
-
+       while ((rb_in_proc = ishtp_cl_rx_get_rb(hid_ishtp_cl)) != NULL) {
                if (!rb_in_proc->buffer.data)
                        return;
 
                process_recv(hid_ishtp_cl, rb_in_proc->buffer.data, r_length);
 
                ishtp_cl_io_rb_recycle(rb_in_proc);
-               spin_lock_irqsave(&hid_ishtp_cl->in_process_spinlock, flags);
        }
-       spin_unlock_irqrestore(&hid_ishtp_cl->in_process_spinlock, flags);
 }
 
 /**