Re: [PATCH 2/2] power: charger-manager: Fix a bug when it unregistersnotifier block of extcon.

From: Chanwoo Choi
Date: Tue Jun 25 2013 - 21:22:34 EST


On 06/26/2013 10:19 AM, jonghwa3.lee@xxxxxxxxxxx wrote:
> Hi,
> On 2013년 06월 25일 22:34, Chanwoo Choi wrote:
>
>> On Tue, Jun 25, 2013 at 2:02 PM, Jonghwa Lee <jonghwa3.lee@xxxxxxxxxxx
>> <mailto:jonghwa3.lee@xxxxxxxxxxx>> wrote:
>>
>> This patch prevents NULL pointer error cauesed by unregistering unregistered
>> exton notifier block. At the probing time of charger manager, it tries to
>> remove extcon notifier block when it fails to initialize them. It has to be
>> applied for only registered one. Otherwise, it'd make kernel panic. To make it
>> work right, it checks extcon_specific_cable_nb's extcon_dev node. If extcon
>> cable notifier block was registered successfully, it has proper extcon_dev
>> pointer if not so it has NULL pointer.
>>
>> Signed-off-by: Jonghwa Lee <jonghwa3.lee@xxxxxxxxxxx
>> <mailto:jonghwa3.lee@xxxxxxxxxxx>>
>> Signed-off-by: Myungjoo Ham <myungjoo.ham@xxxxxxxxxxx
>> <mailto:myungjoo.ham@xxxxxxxxxxx>>
>> ---
>> drivers/power/charger-manager.c | 4 +++-
>> 1 file changed, 3 insertions(+), 1 deletion(-)
>>
>> diff --git a/drivers/power/charger-manager.c b/drivers/power/charger-manager.c
>> index 7d1bcde..c55a7dc 100644
>> --- a/drivers/power/charger-manager.c
>> +++ b/drivers/power/charger-manager.c
>> @@ -1666,7 +1666,9 @@ err_reg_extcon:
>> charger = &desc->charger_regulators[i];
>> for (j = 0; j < charger->num_cables; j++) {
>> struct charger_cable *cable = &charger->cables[j];
>> - extcon_unregister_interest(&cable->extcon_dev);
>> + /* Remove notifier block if only edev exists */
>> + if (cable->extcon_dev.edev)
>> + extcon_unregister_interest(&cable->extcon_dev);
>> }
>>
>> regulator_put(desc->charger_regulators[i].consumer);
>> --
>> 1.7.9.5
>>
>>
>> The charger-manager.c call extcon_unregister_interest() in
>> charger_manager_remove() function.
>> So, you should to fix it on charger_manager_remove() to remove NULL pointer error.
>>
>
>
> When .remove() callback function is called, there is no unregistered cable
> notifier block. Because all extcon notifier block would be registered at probing
> time, and if it is failed the probing can't be achieved. So I think it doesn't
> need to fix .remove() callback function as like above.
>
> Thank you for reviewing.
>
> Best regards,
> Jonghwa.
>
>
>> Acked-by: Chanwoo Choi <cw00.choi@xxxxxxxxxxx <mailto:cw00.choi@xxxxxxxxxxx>>
>>
>> Thanks,
>> Chanwoo Choi
>>
>

OK, I agree your opinion.

Acked-by: Chanwoo Choi <cw00.choi@xxxxxxxxxxx>

Thanks,
Chanwoo Choi

--
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/