} 
static int serport_ldisc_open(struct tty_struct *tty){	struct serport *serport;	struct serio *serio;	char name[64];	if (!capable(CAP_SYS_ADMIN))		return -EPERM;	serport = kmalloc(sizeof(struct serport), GFP_KERNEL);	serio = kmalloc(sizeof(struct serio), GFP_KERNEL);	if (unlikely(!serport || !serio)) {		kfree(serport);		kfree(serio);		return -ENOMEM;	}	memset(serport, 0, sizeof(struct serport));	serport->serio = serio;	set_bit(TTY_DO_WRITE_WAKEUP, &tty->flags);	serport->tty = tty;	tty->disc_data = serport;	memset(serio, 0, sizeof(struct serio));	strlcpy(serio->name, "Serial port", sizeof(serio->name));	snprintf(serio->phys, sizeof(serio->phys), "%s/serio0", tty_name(tty, name));	serio->id.type = SERIO_RS232;	serio->write = serport_serio_write;	serio->close = serport_serio_close;	serio->port_data = serport;	init_waitqueue_head(&serport->wait);	return 0;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/1ff2c873ca11f9e6abffb004b908756b27597672/serport.c/clean/drivers/input/serio/serport.c