Skip to content

Commit 6f48394

Browse files
LiBaokun96Damien Le Moal
authored andcommitted
sata_fsl: fix warning in remove_proc_entry when rmmod sata_fsl
Trying to remove the fsl-sata module in the PPC64 GNU/Linux leads to the following warning: ------------[ cut here ]------------ remove_proc_entry: removing non-empty directory 'irq/69', leaking at least 'fsl-sata[ff0221000.sata]' WARNING: CPU: 3 PID: 1048 at fs/proc/generic.c:722 .remove_proc_entry+0x20c/0x220 IRQMASK: 0 NIP [c00000000033826c] .remove_proc_entry+0x20c/0x220 LR [c000000000338268] .remove_proc_entry+0x208/0x220 Call Trace: .remove_proc_entry+0x208/0x220 (unreliable) .unregister_irq_proc+0x104/0x140 .free_desc+0x44/0xb0 .irq_free_descs+0x9c/0xf0 .irq_dispose_mapping+0x64/0xa0 .sata_fsl_remove+0x58/0xa0 [sata_fsl] .platform_drv_remove+0x40/0x90 .device_release_driver_internal+0x160/0x2c0 .driver_detach+0x64/0xd0 .bus_remove_driver+0x70/0xf0 .driver_unregister+0x38/0x80 .platform_driver_unregister+0x14/0x30 .fsl_sata_driver_exit+0x18/0xa20 [sata_fsl] ---[ end trace 0ea876d4076908f5 ]--- The driver creates the mapping by calling irq_of_parse_and_map(), so it also has to dispose the mapping. But the easy way out is to simply use platform_get_irq() instead of irq_of_parse_map(). Also we should adapt return value checking and propagate error values. In this case the mapping is not managed by the device but by the of core, so the device has not to dispose the mapping. Fixes: faf0b2e ("drivers/ata: add support to Freescale 3.0Gbps SATA Controller") Cc: [email protected] Reported-by: Hulk Robot <[email protected]> Signed-off-by: Baokun Li <[email protected]> Reviewed-by: Sergei Shtylyov <[email protected]> Signed-off-by: Damien Le Moal <[email protected]>
1 parent 6c8ad7e commit 6f48394

File tree

1 file changed

+3
-5
lines changed

1 file changed

+3
-5
lines changed

drivers/ata/sata_fsl.c

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1490,9 +1490,9 @@ static int sata_fsl_probe(struct platform_device *ofdev)
14901490
host_priv->ssr_base = ssr_base;
14911491
host_priv->csr_base = csr_base;
14921492

1493-
irq = irq_of_parse_and_map(ofdev->dev.of_node, 0);
1494-
if (!irq) {
1495-
dev_err(&ofdev->dev, "invalid irq from platform\n");
1493+
irq = platform_get_irq(ofdev, 0);
1494+
if (irq < 0) {
1495+
retval = irq;
14961496
goto error_exit_with_cleanup;
14971497
}
14981498
host_priv->irq = irq;
@@ -1567,8 +1567,6 @@ static int sata_fsl_remove(struct platform_device *ofdev)
15671567

15681568
ata_host_detach(host);
15691569

1570-
irq_dispose_mapping(host_priv->irq);
1571-
15721570
return 0;
15731571
}
15741572

0 commit comments

Comments
 (0)