mirror of
				https://github.com/Ysurac/openmptcprouter.git
				synced 2025-03-09 15:40:20 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			43 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			43 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| From 13ece232e15aee2b390b81a00cf6564372c99a77 Mon Sep 17 00:00:00 2001
 | |
| From: Lukas Wunner <lukas@wunner.de>
 | |
| Date: Sat, 19 Jan 2019 09:00:26 +0100
 | |
| Subject: [PATCH 390/432] bcm2835-mmc: Fix duplicate free_irq() on remove
 | |
| 
 | |
| The BCM2835 MMC host driver requests its interrupt as a device-managed
 | |
| resource, so the interrupt is automatically freed after the driver is
 | |
| unbound.
 | |
| 
 | |
| However on driver unbind, bcm2835_mmc_remove() frees the interrupt
 | |
| explicitly to avoid invocation of the interrupt handler after driver
 | |
| structures have been torn down.
 | |
| 
 | |
| The interrupt is thus freed twice, leading to a WARN splat in
 | |
| __free_irq().  Fix by not requesting the interrupt as a device-managed
 | |
| resource.
 | |
| 
 | |
| Signed-off-by: Lukas Wunner <lukas@wunner.de>
 | |
| Cc: Frank Pavlic <f.pavlic@kunbus.de>
 | |
| ---
 | |
|  drivers/mmc/host/bcm2835-mmc.c | 6 +++---
 | |
|  1 file changed, 3 insertions(+), 3 deletions(-)
 | |
| 
 | |
| diff --git a/drivers/mmc/host/bcm2835-mmc.c b/drivers/mmc/host/bcm2835-mmc.c
 | |
| index e7d7cdead40c..3e920936fb78 100644
 | |
| --- a/drivers/mmc/host/bcm2835-mmc.c
 | |
| +++ b/drivers/mmc/host/bcm2835-mmc.c
 | |
| @@ -1389,9 +1389,9 @@ static int bcm2835_mmc_add_host(struct bcm2835_host *host)
 | |
|  	init_waitqueue_head(&host->buf_ready_int);
 | |
|  
 | |
|  	bcm2835_mmc_init(host, 0);
 | |
| -	ret = devm_request_threaded_irq(dev, host->irq, bcm2835_mmc_irq,
 | |
| -					bcm2835_mmc_thread_irq, IRQF_SHARED,
 | |
| -					mmc_hostname(mmc), host);
 | |
| +	ret = request_threaded_irq(host->irq, bcm2835_mmc_irq,
 | |
| +				   bcm2835_mmc_thread_irq, IRQF_SHARED,
 | |
| +				   mmc_hostname(mmc), host);
 | |
|  	if (ret) {
 | |
|  		dev_err(dev, "Failed to request IRQ %d: %d\n", host->irq, ret);
 | |
|  		goto untasklet;
 | |
| -- 
 | |
| 2.19.1
 | |
| 
 |