static int if_open(struct tty_struct *tty, struct file *filp) { struct cardstate *cs; unsigned long flags; gig_dbg(DEBUG_IF, "%d+%d: %s()", tty->driver->minor_start, tty->index, __func__); tty->driver_data = NULL; cs = gigaset_get_cs_by_tty(tty); if (!cs || !try_module_get(cs->driver->owner)) return -ENODEV; if (mutex_lock_interruptible(&cs->mutex)) return -ERESTARTSYS; // FIXME -EINTR? tty->driver_data = cs; ++cs->open_count; if (cs->open_count == 1) { spin_lock_irqsave(&cs->lock, flags); cs->tty = tty; spin_unlock_irqrestore(&cs->lock, flags); tty->low_latency = 1; //FIXME test } mutex_unlock(&cs->mutex); return 0; }
static int if_open(struct tty_struct *tty, struct file *filp) { struct cardstate *cs; gig_dbg(DEBUG_IF, "%d+%d: %s()", tty->driver->minor_start, tty->index, __func__); cs = gigaset_get_cs_by_tty(tty); if (!cs || !try_module_get(cs->driver->owner)) return -ENODEV; if (mutex_lock_interruptible(&cs->mutex)) { module_put(cs->driver->owner); return -ERESTARTSYS; } tty->driver_data = cs; ++cs->port.count; if (cs->port.count == 1) { tty_port_tty_set(&cs->port, tty); tty->low_latency = 1; } mutex_unlock(&cs->mutex); return 0; }