mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-25 09:40:53 +07:00
pinctrl: mcp23s08: Improve unlocking of a mutex in mcp23s08_irq()
* Add a jump target so that a call of the function "mutex_unlock" is stored only twice in this function implementation. * Replace five calls by goto statements. * Adjust five condition checks. This issue was detected by using the Coccinelle software. Signed-off-by: Markus Elfring <elfring@users.sourceforge.net> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
This commit is contained in:
parent
cb5fda413e
commit
7f6f50dfb5
@ -455,31 +455,22 @@ static irqreturn_t mcp23s08_irq(int irq, void *data)
|
||||
defval_changed, gpio_set;
|
||||
|
||||
mutex_lock(&mcp->lock);
|
||||
if (mcp_read(mcp, MCP_INTF, &intf) < 0) {
|
||||
mutex_unlock(&mcp->lock);
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
if (mcp_read(mcp, MCP_INTF, &intf))
|
||||
goto unlock;
|
||||
|
||||
if (mcp_read(mcp, MCP_INTCAP, &intcap) < 0) {
|
||||
mutex_unlock(&mcp->lock);
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
if (mcp_read(mcp, MCP_INTCAP, &intcap))
|
||||
goto unlock;
|
||||
|
||||
if (mcp_read(mcp, MCP_INTCON, &intcon) < 0) {
|
||||
mutex_unlock(&mcp->lock);
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
if (mcp_read(mcp, MCP_INTCON, &intcon))
|
||||
goto unlock;
|
||||
|
||||
if (mcp_read(mcp, MCP_DEFVAL, &defval) < 0) {
|
||||
mutex_unlock(&mcp->lock);
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
if (mcp_read(mcp, MCP_DEFVAL, &defval))
|
||||
goto unlock;
|
||||
|
||||
/* This clears the interrupt(configurable on S18) */
|
||||
if (mcp_read(mcp, MCP_GPIO, &gpio) < 0) {
|
||||
mutex_unlock(&mcp->lock);
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
if (mcp_read(mcp, MCP_GPIO, &gpio))
|
||||
goto unlock;
|
||||
|
||||
gpio_orig = mcp->cached_gpio;
|
||||
mcp->cached_gpio = gpio;
|
||||
mutex_unlock(&mcp->lock);
|
||||
@ -541,6 +532,10 @@ static irqreturn_t mcp23s08_irq(int irq, void *data)
|
||||
}
|
||||
|
||||
return IRQ_HANDLED;
|
||||
|
||||
unlock:
|
||||
mutex_unlock(&mcp->lock);
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
static void mcp23s08_irq_mask(struct irq_data *data)
|
||||
|
Loading…
Reference in New Issue
Block a user