Re: [PATCH 3/3] usb console,usb-serial: pass initial console baudon to first tty open

From: Jason Wessel
Date: Thu Sep 17 2009 - 10:17:25 EST


Alan Cox wrote:
> On Thu, 17 Sep 2009 14:08:28 +0100
> Alan Cox <alan@xxxxxxxxxxxxxxxxxxx> wrote:
>
>
>>> - memset(&dummy, 0, sizeof(struct ktermios));
>>> - tty->termios = termios;
>>> + tty->termios = &usb_serial_tty_driver->init_termios;
>>>
>> That will corrupt the master one which is a reference used for many ports.
>>
>>

I agree.

>> You need the serial_install stuff or something similar resurrecting to do
>> this properly.
>>
>
> Here's a suggestion on how to do it.
>
> Add a tty->ops->init_termios()
>
> Make tty_init_termios() read
>
> if (tp == NULL) {
> tp = kzalloc(sizeof(struct ktermios[2]), GFP_KERNEL);
> if (tp == NULL)
> return -ENOMEM;
> memcpy(tp, &tty->driver->init_termios,
> sizeof(struct ktermios));
> if (tty->ops->init_termios)
> tty->ops->init_termios(tty);
> tty->driver->termios[idx] = tp;
> }
>
> Thats a good deal cleaner than the ->install override in the USB patches
> Greg inherited and will be usable for cleaning up USB stuff too.
>
>
Sure we can add another layer of init_termios callbacks, but where is
the right place to store the termios per console?

Should the "struct console co*" get a new member for the baud, or should
it get a termios? The source of the problem is how to inherit the
termios setting from the first user (the console code in this case).

Before making several more implementations it is probably worth
discussing few more of the details. In the current code the ->install
override has the opportunity to apply the fixup by copying something
from a "struct console co* termios" if one existed.

Certainly you could do the same thing with the proposed call back you
mentioned, but then the serial_install() needs to be removed from the
usb code and the power management setup would need to find a new home...
or a copy of the new call back would need to go into the
serial_install() as well.

Jason.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/