After an interrupt urb with status -EPIPE is seen in the completion handler hid_irq_in, there is no GetReport performed over the control endpoint to compensate for potentially lost interrupt urbs. So the state of my keyboard does not get synced up with Linux until the next interrupt urb is sent (when I next press or release a key). So for example, Linux can think I am holding down a key when no key is being pressed, due to missing a report of the key release. -- Frank