2014-11-20 18:01:04

by Arianna Avanzini

[permalink] [raw]
Subject: [PATCH RFC] tty, serial, 8250: remove __init from function serial8250_console_setup()

Some RS232 adapters handled by this driver are hotpluggable. The function
serial8250_console_setup() is called during device init and is defined with
the __init macro. In case the driver is built-in, hotplugging the device after
the initialization phase has been completed (and the related memory has been
freed) results in a kernel crash.
This commit fixes the issue by removing __init from the function definition.

Signed-off-by: Arianna Avanzini <[email protected]>
---
drivers/tty/serial/8250/8250_core.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/tty/serial/8250/8250_core.c b/drivers/tty/serial/8250/8250_core.c
index ca5cfdc..ca8108d 100644
--- a/drivers/tty/serial/8250/8250_core.c
+++ b/drivers/tty/serial/8250/8250_core.c
@@ -3237,7 +3237,7 @@ serial8250_console_write(struct console *co, const char *s, unsigned int count)
serial8250_rpm_put(up);
}

-static int __init serial8250_console_setup(struct console *co, char *options)
+static int serial8250_console_setup(struct console *co, char *options)
{
struct uart_port *port;
int baud = 9600;
--
2.1.3


2014-11-25 17:56:32

by Greg Kroah-Hartman

[permalink] [raw]
Subject: Re: [PATCH RFC] tty, serial, 8250: remove __init from function serial8250_console_setup()

On Thu, Nov 20, 2014 at 07:00:56PM +0100, Arianna Avanzini wrote:
> Some RS232 adapters handled by this driver are hotpluggable. The function
> serial8250_console_setup() is called during device init and is defined with
> the __init macro. In case the driver is built-in, hotplugging the device after
> the initialization phase has been completed (and the related memory has been
> freed) results in a kernel crash.
> This commit fixes the issue by removing __init from the function definition.
>
> Signed-off-by: Arianna Avanzini <[email protected]>
> ---
> drivers/tty/serial/8250/8250_core.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/tty/serial/8250/8250_core.c b/drivers/tty/serial/8250/8250_core.c
> index ca5cfdc..ca8108d 100644
> --- a/drivers/tty/serial/8250/8250_core.c
> +++ b/drivers/tty/serial/8250/8250_core.c
> @@ -3237,7 +3237,7 @@ serial8250_console_write(struct console *co, const char *s, unsigned int count)
> serial8250_rpm_put(up);
> }
>
> -static int __init serial8250_console_setup(struct console *co, char *options)
> +static int serial8250_console_setup(struct console *co, char *options)
> {
> struct uart_port *port;
> int baud = 9600;
> --
> 2.1.3

I don't apply "RFC" patches as it implies you don't even know if this
works or not.

2014-11-25 22:18:40

by Arianna Avanzini

[permalink] [raw]
Subject: Re: [PATCH RFC] tty, serial, 8250: remove __init from function serial8250_console_setup()

On Tue, Nov 25, 2014 at 09:51:21AM -0800, Greg KH wrote:
> On Thu, Nov 20, 2014 at 07:00:56PM +0100, Arianna Avanzini wrote:
> > Some RS232 adapters handled by this driver are hotpluggable. The function
> > serial8250_console_setup() is called during device init and is defined with
> > the __init macro. In case the driver is built-in, hotplugging the device after
> > the initialization phase has been completed (and the related memory has been
> > freed) results in a kernel crash.
> > This commit fixes the issue by removing __init from the function definition.
> >
> > Signed-off-by: Arianna Avanzini <[email protected]>
> > ---
> > drivers/tty/serial/8250/8250_core.c | 2 +-
> > 1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/drivers/tty/serial/8250/8250_core.c b/drivers/tty/serial/8250/8250_core.c
> > index ca5cfdc..ca8108d 100644
> > --- a/drivers/tty/serial/8250/8250_core.c
> > +++ b/drivers/tty/serial/8250/8250_core.c
> > @@ -3237,7 +3237,7 @@ serial8250_console_write(struct console *co, const char *s, unsigned int count)
> > serial8250_rpm_put(up);
> > }
> >
> > -static int __init serial8250_console_setup(struct console *co, char *options)
> > +static int serial8250_console_setup(struct console *co, char *options)
> > {
> > struct uart_port *port;
> > int baud = 9600;
> > --
> > 2.1.3
>
> I don't apply "RFC" patches as it implies you don't even know if this
> works or not.

I was not aware of the fact that the "RFC" tag had such an implication; thank
you for pointing that out. As I have already tested the patch and it appears to
be effective, I'll resend it and drop the "RFC" tag.

Thank you,
Arianna


--
/*
* Arianna Avanzini
* [email protected]
* http://ava.webhop.me
*/

2014-11-25 22:21:29

by Arianna Avanzini

[permalink] [raw]
Subject: [PATCH] tty, serial, 8250: remove __init from function serial8250_console_setup()

Some RS232 adapters handled by this driver are hotpluggable. The function
serial8250_console_setup() is called during device init and is defined with
the __init macro. In case the driver is built-in, hotplugging the device after
the initialization phase has been completed (and the related memory has been
freed) results in a kernel crash.
This commit fixes the issue by removing __init from the function definition.

Signed-off-by: Arianna Avanzini <[email protected]>
---
drivers/tty/serial/8250/8250_core.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/tty/serial/8250/8250_core.c b/drivers/tty/serial/8250/8250_core.c
index ca5cfdc..ca8108d 100644
--- a/drivers/tty/serial/8250/8250_core.c
+++ b/drivers/tty/serial/8250/8250_core.c
@@ -3237,7 +3237,7 @@ serial8250_console_write(struct console *co, const char *s, unsigned int count)
serial8250_rpm_put(up);
}

-static int __init serial8250_console_setup(struct console *co, char *options)
+static int serial8250_console_setup(struct console *co, char *options)
{
struct uart_port *port;
int baud = 9600;
--
2.1.3

2014-11-26 14:26:03

by Peter Hurley

[permalink] [raw]
Subject: Re: [PATCH] tty, serial, 8250: remove __init from function serial8250_console_setup()

On 11/25/2014 05:21 PM, Arianna Avanzini wrote:
> Some RS232 adapters handled by this driver are hotpluggable. The function
> serial8250_console_setup() is called during device init and is defined with
> the __init macro. In case the driver is built-in, hotplugging the device after
> the initialization phase has been completed (and the related memory has been
> freed) results in a kernel crash.
> This commit fixes the issue by removing __init from the function definition.

Reviewed-by: Peter Hurley <[email protected]>

2014-11-26 17:26:27

by Greg Kroah-Hartman

[permalink] [raw]
Subject: Re: [PATCH] tty, serial, 8250: remove __init from function serial8250_console_setup()

On Tue, Nov 25, 2014 at 11:21:22PM +0100, Arianna Avanzini wrote:
> Some RS232 adapters handled by this driver are hotpluggable. The function
> serial8250_console_setup() is called during device init and is defined with
> the __init macro. In case the driver is built-in, hotplugging the device after
> the initialization phase has been completed (and the related memory has been
> freed) results in a kernel crash.
> This commit fixes the issue by removing __init from the function definition.
>
> Signed-off-by: Arianna Avanzini <[email protected]>
> ---
> drivers/tty/serial/8250/8250_core.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/tty/serial/8250/8250_core.c b/drivers/tty/serial/8250/8250_core.c
> index ca5cfdc..ca8108d 100644
> --- a/drivers/tty/serial/8250/8250_core.c
> +++ b/drivers/tty/serial/8250/8250_core.c
> @@ -3237,7 +3237,7 @@ serial8250_console_write(struct console *co, const char *s, unsigned int count)
> serial8250_rpm_put(up);
> }
>
> -static int __init serial8250_console_setup(struct console *co, char *options)
> +static int serial8250_console_setup(struct console *co, char *options)
> {
> struct uart_port *port;
> int baud = 9600;
> --
> 2.1.3

This has already been in my tree for a long time, always work against
linux-next to avoid redoing work that others have already done.

thanks,

greg k-h