public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: "Pali Rohár" <pali.rohar@gmail.com>
To: Johannes Thumshirn <jthumshirn@suse.de>
Cc: Sebastian Reichel <sre@kernel.org>,
	Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>,
	David Woodhouse <dwmw2@infradead.org>,
	linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] power: Destroy IDRs on module exit
Date: Tue, 14 Jul 2015 11:20:48 +0200	[thread overview]
Message-ID: <20150714092048.GH12844@pali> (raw)
In-Reply-To: <1436865374-22027-1-git-send-email-jthumshirn@suse.de>

On Tuesday 14 July 2015 11:16:14 Johannes Thumshirn wrote:
> Destroy IDRs on module exit, freeing the resources for
> * bq2415x_charger.c
> * ds2782_battery.c
> * ltc2941-battery-gauge.c
> 
> The drivers had to be converted to "ordinary" module_init()/module_exit()
> style drivers instead of using module_i2c_driver.
> 
> Signed-off-by: Johannes Thumshirn <jthumshirn@suse.de>
> ---
>  drivers/power/bq2415x_charger.c       | 20 +++++++++++++++++++-
>  drivers/power/ds2782_battery.c        | 20 +++++++++++++++++++-
>  drivers/power/ltc2941-battery-gauge.c | 20 +++++++++++++++++++-
>  3 files changed, 57 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/power/bq2415x_charger.c b/drivers/power/bq2415x_charger.c
> index e98dcb6..38f4208 100644
> --- a/drivers/power/bq2415x_charger.c
> +++ b/drivers/power/bq2415x_charger.c
> @@ -1773,7 +1773,25 @@ static struct i2c_driver bq2415x_driver = {
>  	.remove = bq2415x_remove,
>  	.id_table = bq2415x_i2c_id_table,
>  };
> -module_i2c_driver(bq2415x_driver);
> +
> +static int __init bq2415x_init(void)
> +{
> +	int ret;
> +
> +	ret = i2c_add_driver(&bq2415x_driver);
> +	if (ret)
> +		printk(KERN_ERR "Unable to register bq2415x-battery driver\n");
> +
> +	return ret;
> +}
> +module_init(bq2415x_init);
> +
> +static void __exit bq2415x_exit(void)
> +{
> +	i2c_del_driver(&bq2415x_driver);
> +	idr_destroy(&bq2415x_id);
> +}
> +module_exit(bq2415x_exit);
>  
>  MODULE_AUTHOR("Pali Rohár <pali.rohar@gmail.com>");
>  MODULE_DESCRIPTION("bq2415x charger driver");
> diff --git a/drivers/power/ds2782_battery.c b/drivers/power/ds2782_battery.c
> index ed4d756..410bc9d 100644
> --- a/drivers/power/ds2782_battery.c
> +++ b/drivers/power/ds2782_battery.c
> @@ -468,7 +468,25 @@ static struct i2c_driver ds278x_battery_driver = {
>  	.remove		= ds278x_battery_remove,
>  	.id_table	= ds278x_id,
>  };
> -module_i2c_driver(ds278x_battery_driver);
> +
> +static int __init ds2782_init(void)
> +{
> +	int ret;
> +
> +	ret = i2c_add_driver(&ds278x_battery_driver);
> +	if (ret)
> +		printk(KERN_ERR "Unable to register ds2782-battery driver\n");
> +
> +	return ret;
> +}
> +module_init(ds2782_init);
> +
> +static void __exit ds2782_exit(void)
> +{
> +	i2c_del_driver(&ds278x_battery_driver);
> +	idr_destroy(&battery_id);
> +}
> +module_exit(ds2782_exit);
>  
>  MODULE_AUTHOR("Ryan Mallon");
>  MODULE_DESCRIPTION("Maxim/Dallas DS2782 Stand-Alone Fuel Gauage IC driver");
> diff --git a/drivers/power/ltc2941-battery-gauge.c b/drivers/power/ltc2941-battery-gauge.c
> index daeb086..6fbbcd2 100644
> --- a/drivers/power/ltc2941-battery-gauge.c
> +++ b/drivers/power/ltc2941-battery-gauge.c
> @@ -544,7 +544,25 @@ static struct i2c_driver ltc294x_driver = {
>  	.remove		= ltc294x_i2c_remove,
>  	.id_table	= ltc294x_i2c_id,
>  };
> -module_i2c_driver(ltc294x_driver);
> +
> +static int __init ltc294x_init(void)
> +{
> +	int ret;
> +
> +	ret = i2c_add_driver(&ltc294x_driver);
> +	if (ret)
> +		printk(KERN_ERR "Unable to register bq2415x-battery driver\n");
> +
> +	return ret;
> +}
> +module_init(ltc294x_init);
> +
> +static void __exit ltc294x_exit(void)
> +{
> +	i2c_del_driver(&ltc294x_driver);
> +	idr_destroy(&ltc294x_id);
> +}
> +module_exit(ltc294x_exit);
>  
>  MODULE_AUTHOR("Auryn Verwegen, Topic Embedded Systems");
>  MODULE_AUTHOR("Mike Looijmans, Topic Embedded Products");

I'm feeling that there is something wrong with idr API. There is no idr
code in __init functions, so why it is needed for __exit? idr functions
are used in devices, not in global module.

-- 
Pali Rohár
pali.rohar@gmail.com

  parent reply	other threads:[~2015-07-14  9:20 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-07-14  9:16 [PATCH] power: Destroy IDRs on module exit Johannes Thumshirn
2015-07-14  9:17 ` Oliver Neukum
2015-07-14  9:20 ` Pali Rohár [this message]
2015-07-14 10:19 ` Sebastian Reichel
2015-07-14 10:48   ` Johannes Thumshirn
2015-07-14 12:14     ` Sebastian Reichel

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20150714092048.GH12844@pali \
    --to=pali.rohar@gmail.com \
    --cc=dbaryshkov@gmail.com \
    --cc=dwmw2@infradead.org \
    --cc=jthumshirn@suse.de \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=sre@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox