On 02/20/2018 11:33 AM, Rodrigo Rivas Costa wrote: > +static void steam_work_connect_cb(struct work_struct *work) > +{ > + struct steam_device *steam = container_of(work, struct steam_device, > + work_connect); > + unsigned long flags; > + bool connected; > + int ret; > + > + spin_lock_irqsave(&steam->lock, flags); > + connected = steam->connected; > + spin_unlock_irqrestore(&steam->lock, flags); > + > + if (connected) { > + if (steam->input) { > + dbg_hid("%s: already connected\n", __func__); > + return; > + } > + ret = steam_register(steam); > + if (ret) { > + hid_err(steam->hdev, > + "%s:steam_register failed with error %d\n", > + __func__, ret); > + return; > + } > + } else { > + steam_unregister(steam); I think you need synchronization here. You don't want to be in the middle of processing a HID event or power supply update and have your device freed out from underneath you. xpad uses RCU to avoid this race. > + } > +} > + Regards, Cameron -- To unsubscribe from this list: send the line "unsubscribe linux-input" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html