Re: [PATCH] serial: mps2-uart: make driver explicitly non-modular

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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



[Index of Archives]     [Kernel Newbies]     [Security]     [Netfilter]     [Bugtraq]     [Linux PPP]     [Linux FS]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Linmodem]     [Device Mapper]     [Linux Kernel for ARM]

  Powered by Linux