atomic_t write_busy;            /* number of write-urbs submitted */
        atomic_t read_idx;
        atomic_t intr_idx;
-       spinlock_t intr_idx_lock;       /* protects intr_idx */
        atomic_t overflow_flag;         /* signals an index 'rollover' */
        int present;                    /* this is 1 as long as the device is connected */
        int opened;                     /* this is 1 if the device is currently open */
                goto exit;
        }
 
-       spin_lock(&dev->intr_idx_lock);
        intr_idx = atomic_read(&dev->intr_idx);
        /* aux_idx become previous intr_idx */
        aux_idx = (intr_idx == 0) ? (MAX_INTERRUPT_BUFFER - 1) : (intr_idx - 1);
                    (dev->read_queue + offset, urb->transfer_buffer,
                     dev->report_size)) {
                        /* equal values on interface 0 will be ignored */
-                       spin_unlock(&dev->intr_idx_lock);
                        goto exit;
                }
        }
        *(dev->read_queue + offset + (dev->report_size)) = dev->serial_number++;
 
        atomic_set(&dev->intr_idx, aux_idx);
-       spin_unlock(&dev->intr_idx_lock);
        /* tell the blocking read about the new data */
        wake_up_interruptible(&dev->read_wait);
 
 
        atomic_set(&dev->intr_idx, 0);
        atomic_set(&dev->read_idx, 0);
-       spin_lock_init(&dev->intr_idx_lock);
        atomic_set(&dev->overflow_flag, 0);
        init_waitqueue_head(&dev->read_wait);
        atomic_set(&dev->write_busy, 0);