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