From: Seung-Woo Kim Date: Mon, 25 Jan 2021 06:48:02 +0000 (+0900) Subject: amlogic: bt: Remove memory leak X-Git-Tag: submit/tizen/20210204.012538~14 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=326ee33b0b1d2d64ce7f7820c6bd0b96a49f3603;p=platform%2Fkernel%2Flinux-amlogic.git amlogic: bt: Remove memory leak The prdata is covered by pdata from bt_probe, so there is memory leak for prdata. Remove the memory leak store prdata, and get pdata from prdata. This fixes following kmemleak issue: unreferenced object 0xffffffc00c39e300 (size 64): ... backtrace: [] create_object+0x278/0x580 [] kmemleak_alloc+0x74/0xa0 [] kmem_cache_alloc_trace+0x328/0x5e8 [] bt_probe+0x20c/0x870 ... Change-Id: Ic3f2091d16806dba0855927d048747b40cb96f80 Signed-off-by: Seung-Woo Kim --- diff --git a/drivers/amlogic/bluetooth/bt_device.c b/drivers/amlogic/bluetooth/bt_device.c index 19f3bc9b26bb..b3bc97d21fef 100644 --- a/drivers/amlogic/bluetooth/bt_device.c +++ b/drivers/amlogic/bluetooth/bt_device.c @@ -242,20 +242,34 @@ static void bt_lateresume(struct early_suspend *h) static int bt_suspend(struct platform_device *pdev, pm_message_t state) { - struct bt_dev_data *pdata = platform_get_drvdata(pdev); + struct bt_dev_runtime_data *prdata = + platform_get_drvdata(pdev); + struct bt_dev_data *pdata; pr_info("bt suspend\n"); - enable_irq(pdata->irqno_wakeup); + + if (prdata) { + pdata = prdata->pdata; + if (pdata) + enable_irq(pdata->irqno_wakeup); + } return 0; } static int bt_resume(struct platform_device *pdev) { - struct bt_dev_data *pdata = platform_get_drvdata(pdev); + struct bt_dev_runtime_data *prdata = + platform_get_drvdata(pdev); + struct bt_dev_data *pdata; pr_info("bt resume\n"); - disable_irq(pdata->irqno_wakeup); + + if (prdata) { + pdata = prdata->pdata; + if (pdata) + disable_irq(pdata->irqno_wakeup); + } return 0; } @@ -401,8 +415,6 @@ static int bt_probe(struct platform_device *pdev) register_early_suspend(&bt_early_suspend); #endif - platform_set_drvdata(pdev, pdata); - /*1.Set BT_WAKE_HOST to the input state;*/ /*2.Get interrupt number(irqno_wakeup).*/ pdata->irqno_wakeup = gpio_to_irq(pdata->gpio_btwakeup);