On 07/06/16 18:32, Paul Gortmaker wrote: > [Re: [PATCH] serial: mps2-uart: make driver explicitly non-modular] On 07/06/2016 (Tue 15:39) Vladimir Murzin wrote: > >> On 07/06/16 15:33, Paul Gortmaker wrote: >>> [[PATCH] serial: mps2-uart: make driver explicitly non-modular] On 07/06/2016 (Tue 14:47) Vladimir Murzin wrote: >>> >>>> mps2-uart is currently selected by the arch code, which implies is not >>>> being built as a module by anyone. >>> >>> Maybe "depends on" is more accurate, since we have: >>> >>> >>> config SERIAL_MPS2_UART >>> bool "MPS2 UART port" >>> depends on ARM || COMPILE_TEST >>> >>> ...so even if people are not using ARM, they can still build it if they >>> have selected COMPILE_TEST. >>> >>>> >>>> Follow 89ebc27 "drivers/tty: make serial/mvebu-uart.c explicitly >>>> non-modular" as an example of moving modular code to non-modular. >>> >>> It is good to reference other commits, but the commit message should >>> give enough detail to have the full meaning stand-alone even if someone >>> doesn't have reference to cited ones. >>> >> >> Ok. Just wanted to avoid copy-and-paste, since there is nothing new >> except s/module_init/arch_initcall :) >> >>> Also it is good to give at least 12/40 chars of the existing commit ID >>> since the kernel has so many commits now that any less than 12 has a >>> risk of being ambiguous. There is ./scripts/checkpatch.pl that some >>> people find useful for detecting common oversights. >> >> Hmm... it is what I got from checkpatch >> >> total: 0 errors, 0 warnings, 61 lines checked >> >> Anyway, thanks for feedback - I'll update and send v2 shortly. > > It would appear you didn't read the whole mail ; the more important > feedback that impacts the code itself was below, and was not addressed > in your v2 that you just sent. My bad :( I seems I got preempted and lost context while I was reading your comments. Sorry for incomplete v2, I'll incorporate your code related feedback in v3 and send it out shortly. Thanks Vladimir > > Paul. > -- > >> >> Cheers >> Vladimir >> >>> >>>> >>>> Reported-by: Paul Gortmaker <paul.gortmaker@xxxxxxxxxxxxx> >>>> Signed-off-by: Vladimir Murzin <vladimir.murzin@xxxxxxx> >>>> --- >>>> drivers/tty/serial/mps2-uart.c | 29 ++++------------------------- >>>> 1 file changed, 4 insertions(+), 25 deletions(-) >>>> >>>> diff --git a/drivers/tty/serial/mps2-uart.c b/drivers/tty/serial/mps2-uart.c >>>> index da9e27d..492ec4b 100644 >>>> --- a/drivers/tty/serial/mps2-uart.c >>>> +++ b/drivers/tty/serial/mps2-uart.c >>>> @@ -1,4 +1,6 @@ >>>> /* >>>> + * MPS2 UART driver >>>> + * >>>> * Copyright (C) 2015 ARM Limited >>>> * >>>> * Author: Vladimir Murzin <vladimir.murzin@xxxxxxx> >>>> @@ -17,7 +19,6 @@ >>>> #include <linux/console.h> >>>> #include <linux/io.h> >>>> #include <linux/kernel.h> >>>> -#include <linux/module.h> >>> >>> You should replace this with init.h since your driver uses "__init" and >>> the file does not have that include already. We shouldn't rely on any >>> implicit include paths, even if they just happen to work. >>> >>>> #include <linux/of_device.h> >>>> #include <linux/of.h> >>>> #include <linux/platform_device.h> >>>> @@ -569,30 +570,20 @@ static int mps2_serial_probe(struct platform_device *pdev) >>>> return 0; >>>> } >>>> >>>> -static int mps2_serial_remove(struct platform_device *pdev) >>>> -{ >>>> - struct mps2_uart_port *mps_port = platform_get_drvdata(pdev); >>>> - >>>> - uart_remove_one_port(&mps2_uart_driver, &mps_port->port); >>>> - >>>> - return 0; >>>> -} >>>> - >>>> #ifdef CONFIG_OF >>>> static const struct of_device_id mps2_match[] = { >>>> { .compatible = "arm,mps2-uart", }, >>>> {}, >>>> }; >>>> -MODULE_DEVICE_TABLE(of, mps2_match); >>>> #endif >>>> >>>> static struct platform_driver mps2_serial_driver = { >>>> .probe = mps2_serial_probe, >>>> - .remove = mps2_serial_remove, >>>> >>>> .driver = { >>>> .name = DRIVER_NAME, >>>> .of_match_table = of_match_ptr(mps2_match), >>>> + .suppress_bind_attrs = true, >>>> }, >>>> }; >>>> >>>> @@ -610,16 +601,4 @@ static int __init mps2_uart_init(void) >>>> >>>> return ret; >>>> } >>>> -module_init(mps2_uart_init); >>>> - >>>> -static void __exit mps2_uart_exit(void) >>>> -{ >>>> - platform_driver_unregister(&mps2_serial_driver); >>>> - uart_unregister_driver(&mps2_uart_driver); >>>> -} >>>> -module_exit(mps2_uart_exit); >>>> - >>>> -MODULE_AUTHOR("Vladimir Murzin <vladimir.murzin@xxxxxxx>"); >>>> -MODULE_DESCRIPTION("MPS2 UART driver"); >>>> -MODULE_LICENSE("GPL v2"); >>>> -MODULE_ALIAS("platform:" DRIVER_NAME); >>>> +arch_initcall(mps2_uart_init); >>> >>> The "module_init" maps onto "device_initcall" and since this is a device >>> driver, that seems like the appropriate mapping. By moving it to >>> arch_initcall, you've changed it to be earlier and that may not be good. >>> >>> The arch_initcall is more meant for things like poking registers to >>> enable some arch/platform specific MMIO bus mapping of devices or >>> similar. If you look at include/linux/init.h and the ordering of the >>> calls there, it will probably make more sense to you then to leave it as >>> device_initcall. >>> >>> >>> #define pure_initcall(fn) __define_initcall(fn, 0) >>> #define core_initcall(fn) __define_initcall(fn, 1) >>> #define postcore_initcall(fn) __define_initcall(fn, 2) >>> #define arch_initcall(fn) __define_initcall(fn, 3) <--- >>> #define subsys_initcall(fn) __define_initcall(fn, 4) >>> #define fs_initcall(fn) __define_initcall(fn, 5) >>> #define device_initcall(fn) __define_initcall(fn, 6) <--- >>> #define late_initcall(fn) __define_initcall(fn, 7) >>> >>> >>> Thanks. >>> Paul. >>> -- >>> >>>> -- >>>> 1.7.9.5 >>>> >>> >> > -- To unsubscribe from this list: send the line "unsubscribe linux-serial" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html