msm: xo: Add NULL pointer and error pointer check
Add NULL pointer check since msm_get_xo() might return NULL due to
RPM is not available. Also add error pointer check to make msm_xo_*
APIs more defensive.
Change-Id: Ie20ae974215e05430a3d5d8cc826774cbe243f51
Signed-off-by: Tianyi Gou <tgou@codeaurora.org>
diff --git a/arch/arm/mach-msm/msm_xo.c b/arch/arm/mach-msm/msm_xo.c
index a82d4d5..1e9c05f 100644
--- a/arch/arm/mach-msm/msm_xo.c
+++ b/arch/arm/mach-msm/msm_xo.c
@@ -190,11 +190,11 @@
{
int ret;
unsigned long flags;
- /* TODO: Remove or fix this function for 8064 once xo is in */
- if (cpu_is_apq8064())
+
+ if (!xo_voter)
return 0;
- if (mode >= NUM_MSM_XO_MODES)
+ if (mode >= NUM_MSM_XO_MODES || IS_ERR(xo_voter))
return -EINVAL;
spin_lock_irqsave(&msm_xo_lock, flags);
@@ -221,7 +221,10 @@
unsigned long flags;
struct msm_xo_voter *xo_voter;
- /* TODO: Remove or fix this function for 8064 once xo is in */
+ /*
+ * TODO: Remove early return for 8064 once RPM XO voting support
+ * is available.
+ */
if (cpu_is_apq8064())
return NULL;
@@ -271,6 +274,9 @@
{
unsigned long flags;
+ if (!xo_voter || IS_ERR(xo_voter))
+ return;
+
spin_lock_irqsave(&msm_xo_lock, flags);
__msm_xo_mode_vote(xo_voter, MSM_XO_MODE_OFF);
xo_voter->xo->votes[MSM_XO_MODE_OFF]--;