Oliver Neukum writes: > > Am Donnerstag, 29. Juli 2010, 17:05:41 schrieb Bill Pemberton: > > +static int ssu100_ioctl(struct tty_struct *tty, struct file *file, > > + unsigned int cmd, unsigned long arg) > > +{ > > + struct usb_serial_port *port = tty->driver_data; > > + struct ssu100_port_private *priv = usb_get_serial_port_data(port); > > + > > + dbg("%s cmd 0x%04x", __func__, cmd); > > + > > + switch (cmd) { > > + case TIOCGSERIAL: > > + return get_serial_info(port, > > + (struct serial_struct __user *) arg); > > + > > + case TIOCMIWAIT: > > + while (priv != NULL) { > > + u8 prevMSR = priv->shadowMSR & SERIAL_MSR_MASK; > > + interruptible_sleep_on(&priv->delta_msr_wait); > > This won't fly > > 1. you have no guarantee that the packet that would wake you up hasn't arrived > by the time you go to sleep. Use a proper wait_event_ macro > 2. you need to handle disconnection > Ok, I'll work on it. The TIOCMIWAIT logic is pretty much the same as most of the other usb-serial devices and do not use wait_event_. Is there something in my implementation that I've missed or do all of these drivers need to be fixed in the same way? -- Bill -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html