diff options
Diffstat (limited to 'drivers/char/ttyprintk.c')
| -rw-r--r-- | drivers/char/ttyprintk.c | 33 | 
1 files changed, 13 insertions, 20 deletions
diff --git a/drivers/char/ttyprintk.c b/drivers/char/ttyprintk.c index 46b77ede84c..af98f6d6509 100644 --- a/drivers/char/ttyprintk.c +++ b/drivers/char/ttyprintk.c @@ -67,7 +67,7 @@ static int tpk_printk(const unsigned char *buf, int count)  				tmp[tpk_curr + 1] = '\0';  				printk(KERN_INFO "%s%s", tpk_tag, tmp);  				tpk_curr = 0; -				if (buf[i + 1] == '\n') +				if ((i + 1) < count && buf[i + 1] == '\n')  					i++;  				break;  			case '\n': @@ -178,11 +178,17 @@ static struct tty_driver *ttyprintk_driver;  static int __init ttyprintk_init(void)  {  	int ret = -ENOMEM; -	void *rp; -	ttyprintk_driver = alloc_tty_driver(1); -	if (!ttyprintk_driver) -		return ret; +	tty_port_init(&tpk_port.port); +	tpk_port.port.ops = &null_ops; +	mutex_init(&tpk_port.port_write_mutex); + +	ttyprintk_driver = tty_alloc_driver(1, +			TTY_DRIVER_RESET_TERMIOS | +			TTY_DRIVER_REAL_RAW | +			TTY_DRIVER_UNNUMBERED_NODE); +	if (IS_ERR(ttyprintk_driver)) +		return PTR_ERR(ttyprintk_driver);  	ttyprintk_driver->driver_name = "ttyprintk";  	ttyprintk_driver->name = "ttyprintk"; @@ -191,9 +197,8 @@ static int __init ttyprintk_init(void)  	ttyprintk_driver->type = TTY_DRIVER_TYPE_CONSOLE;  	ttyprintk_driver->init_termios = tty_std_termios;  	ttyprintk_driver->init_termios.c_oflag = OPOST | OCRNL | ONOCR | ONLRET; -	ttyprintk_driver->flags = TTY_DRIVER_RESET_TERMIOS | -		TTY_DRIVER_REAL_RAW | TTY_DRIVER_DYNAMIC_DEV;  	tty_set_operations(ttyprintk_driver, &ttyprintk_ops); +	tty_port_link_device(&tpk_port.port, ttyprintk_driver, 0);  	ret = tty_register_driver(ttyprintk_driver);  	if (ret < 0) { @@ -201,22 +206,10 @@ static int __init ttyprintk_init(void)  		goto error;  	} -	/* create our unnumbered device */ -	rp = device_create(tty_class, NULL, MKDEV(TTYAUX_MAJOR, 3), NULL, -				ttyprintk_driver->name); -	if (IS_ERR(rp)) { -		printk(KERN_ERR "Couldn't create ttyprintk device\n"); -		ret = PTR_ERR(rp); -		goto error; -	} - -	tty_port_init(&tpk_port.port); -	tpk_port.port.ops = &null_ops; -	mutex_init(&tpk_port.port_write_mutex); -  	return 0;  error: +	tty_unregister_driver(ttyprintk_driver);  	put_tty_driver(ttyprintk_driver);  	ttyprintk_driver = NULL;  	return ret;  |