rtc: ep93xx: Fix 'rtc' may be used uninitialized warning
PATCH 1/1 rtc: ep93xx: Fix 'rtc' may be used uninitialized warning
commit 92d921c5d "rtc: ep93xx: Initialize drvdata before registering device" ensures the drvdata is initialized prior to registering the rtc device. But it set the drvdata to an uninitialized pointer.
Thus calling platform_get_drvdata in ep93xx_rtc_remove does not get correct address.
This patch fixes below warning by adding struct rtc_device *rtc to struct ep93xx_rtc. Then set platform drvdata to ep93xx_rtc instead of rtc.
CC drivers/rtc/rtc-ep93xx.odrivers/rtc/rtc-ep93xx.c: In function 'ep93xx_rtc_probe':drivers/rtc/rtc-ep93xx.c:154: warning: 'rtc' may be used uninitialized in this function
---
hi,
I don't have this hardware handy, I appreciate someone can test this patch. Thanks,
Axel
drivers/rtc/rtc-ep93xx.c | 16 ++++++++-------- 1 files changed, 8 insertions(+), 8 deletions(-)
drivers/rtc/rtc-ep93xx.c +8 -8
@@ -36,6 +36,7 @@*/ struct ep93xx_rtc {void __iomem *mmio_base; +struct rtc_device *rtc; }; static int ep93xx_rtc_get_swcomp(struct device *dev, unsigned short *preload,
@@ -130,7 +131,6 @@ static int __init ep93xx_rtc_probe(struct platform_device *pdev) {struct ep93xx_rtc *ep93xx_rtc;struct resource *res; -struct rtc_device *rtc;int err; ep93xx_rtc =devm_kzalloc (&pdev->dev,sizeof (*ep93xx_rtc),GFP_KERNEL );
@@ -151,12 +151,12 @@ static int __init ep93xx_rtc_probe(struct platform_device *pdev)return -ENXIO ; pdev->dev.platform_data = ep93xx_rtc; -platform_set_drvdata (pdev, rtc); +platform_set_drvdata (pdev, ep93xx_rtc); - rtc =rtc_device_register (pdev->name, + ep93xx_rtc->rtc =rtc_device_register (pdev->name, &pdev->dev, &ep93xx_rtc_ops,THIS_MODULE ); -if (IS_ERR (rtc)) { - err =PTR_ERR (rtc); +if (IS_ERR (ep93xx_rtc->rtc)) { + err =PTR_ERR (ep93xx_rtc->rtc); goto exit; }
@@ -167,7 +167,7 @@ static int __init ep93xx_rtc_probe(struct platform_device *pdev)return 0 ; fail: -rtc_device_unregister (rtc); +rtc_device_unregister (ep93xx_rtc->rtc); exit:platform_set_drvdata (pdev,NULL ); pdev->dev.platform_data =NULL ;
@@ -176,11 +176,11 @@ exit: static int __exit ep93xx_rtc_remove(struct platform_device *pdev) { -struct rtc_device *rtc =platform_get_drvdata (pdev); +struct ep93xx_rtc *ep93xx_rtc =platform_get_drvdata (pdev);sysfs_remove_group (&pdev->dev.kobj, &ep93xx_rtc_sysfs_files);platform_set_drvdata (pdev,NULL ); -rtc_device_unregister (rtc); +rtc_device_unregister (ep93xx_rtc->rtc); pdev->dev.platform_data =NULL ;return 0 ;
Signature · 1 line
1.7.4.1
Quoted 5 lines · Axel Lin
commit
92d921c5d"rtc: ep93xx: Initialize drvdata before registering device" ensures the drvdata is initialized prior to registering the rtc device. But it set the drvdata to an uninitialized pointer.
Thus callingplatform_get_drvdatainep93xx_rtc_removedoes not get correct address.
Quoted 8 lines
This patch fixes below warning by adding struct
rtc_device*rtc to structep93xx_rtc. Then set platform drvdata toep93xx_rtcinstead of rtc.CC
drivers/rtc/rtc-ep93xx.odrivers/rtc/rtc-ep93xx.c: In function 'ep93xx_rtc_probe':drivers/rtc/rtc-ep93xx.c:154: warning: 'rtc' may be used uninitialized in this functionSigned-off-by Axel Lin <[email protected]>
Thanks! I went ahead and queued this.
-john