From 3b8851f97412a88fc16319a967bc2dc7f07dde39 Mon Sep 17 00:00:00 2001 From: Somesh Dey Date: Fri, 24 Nov 2023 14:16:40 +0530 Subject: [PATCH] i2c: i2c-msm-geni: check for gi2c->cur null pointer In geni_i2c_irq_handle_watermark, due to spurious interrupt gi2c->cur is becoming null resulting in crash. Hence added a check to prevent this scenario due to spurious interrupts. Change-Id: I522b2dbdacb48208ecddd81115c7a9a7c40da021 Signed-off-by: Visweswara Tanuku Signed-off-by: Somesh Dey --- drivers/i2c/busses/i2c-msm-geni.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/drivers/i2c/busses/i2c-msm-geni.c b/drivers/i2c/busses/i2c-msm-geni.c index 132b100501af..88034df42830 100644 --- a/drivers/i2c/busses/i2c-msm-geni.c +++ b/drivers/i2c/busses/i2c-msm-geni.c @@ -797,6 +797,12 @@ static void geni_i2c_irq_handle_watermark(struct geni_i2c_dev *gi2c, u32 m_stat) int i, j; u32 rx_st = readl_relaxed(gi2c->base + SE_GENI_RX_FIFO_STATUS); + if (!cur) { + I2C_LOG_DBG(gi2c->ipcl, false, gi2c->dev, "%s: Spurious irq\n", __func__); + geni_i2c_err(gi2c, GENI_SPURIOUS_IRQ); + return; + } + if (((m_stat & M_RX_FIFO_WATERMARK_EN) || (m_stat & M_RX_FIFO_LAST_EN)) && (cur->flags & I2C_M_RD)) { u32 rxcnt = rx_st & RX_FIFO_WC_MSK; @@ -858,7 +864,7 @@ static irqreturn_t geni_i2c_irq(int irq, void *dev) "%s: m_irq_status:0x%x\n", __func__, m_stat); if (!cur) { - I2C_LOG_ERR(gi2c->ipcl, false, gi2c->dev, "Spurious irq\n"); + I2C_LOG_DBG(gi2c->ipcl, false, gi2c->dev, "Spurious irq\n"); geni_i2c_err(gi2c, GENI_SPURIOUS_IRQ); gi2c->cmd_done = true; is_clear_watermark = true;