mirror of
https://github.com/torvalds/linux.git
synced 2024-11-28 15:11:31 +00:00
floppy: cleanup: do not iterate on current_fdc in DMA grab/release functions
Both floppy_grab_irq_and_dma() and floppy_release_irq_and_dma() used to iterate on the global variable while setting up or freeing resources. Now that they exclusively rely on functions which take the fdc as an argument, so let's not touch the global one anymore. Link: https://lore.kernel.org/r/20200331094054.24441-23-w@1wt.eu Signed-off-by: Willy Tarreau <w@1wt.eu> Signed-off-by: Denis Efremov <efremov@linux.com>
This commit is contained in:
parent
e5a9c95f9b
commit
82a6301058
@ -4854,6 +4854,8 @@ static void floppy_release_regions(int fdc)
|
||||
|
||||
static int floppy_grab_irq_and_dma(void)
|
||||
{
|
||||
int fdc;
|
||||
|
||||
if (atomic_inc_return(&usage_count) > 1)
|
||||
return 0;
|
||||
|
||||
@ -4881,24 +4883,24 @@ static int floppy_grab_irq_and_dma(void)
|
||||
}
|
||||
}
|
||||
|
||||
for (current_fdc = 0; current_fdc < N_FDC; current_fdc++) {
|
||||
if (fdc_state[current_fdc].address != -1) {
|
||||
if (floppy_request_regions(current_fdc))
|
||||
for (fdc = 0; fdc < N_FDC; fdc++) {
|
||||
if (fdc_state[fdc].address != -1) {
|
||||
if (floppy_request_regions(fdc))
|
||||
goto cleanup;
|
||||
}
|
||||
}
|
||||
for (current_fdc = 0; current_fdc < N_FDC; current_fdc++) {
|
||||
if (fdc_state[current_fdc].address != -1) {
|
||||
reset_fdc_info(current_fdc, 1);
|
||||
fdc_outb(fdc_state[current_fdc].dor, current_fdc, FD_DOR);
|
||||
for (fdc = 0; fdc < N_FDC; fdc++) {
|
||||
if (fdc_state[fdc].address != -1) {
|
||||
reset_fdc_info(fdc, 1);
|
||||
fdc_outb(fdc_state[fdc].dor, fdc, FD_DOR);
|
||||
}
|
||||
}
|
||||
current_fdc = 0;
|
||||
|
||||
set_dor(0, ~0, 8); /* avoid immediate interrupt */
|
||||
|
||||
for (current_fdc = 0; current_fdc < N_FDC; current_fdc++)
|
||||
if (fdc_state[current_fdc].address != -1)
|
||||
fdc_outb(fdc_state[current_fdc].dor, current_fdc, FD_DOR);
|
||||
for (fdc = 0; fdc < N_FDC; fdc++)
|
||||
if (fdc_state[fdc].address != -1)
|
||||
fdc_outb(fdc_state[fdc].dor, fdc, FD_DOR);
|
||||
/*
|
||||
* The driver will try and free resources and relies on us
|
||||
* to know if they were allocated or not.
|
||||
@ -4909,15 +4911,16 @@ static int floppy_grab_irq_and_dma(void)
|
||||
cleanup:
|
||||
fd_free_irq();
|
||||
fd_free_dma();
|
||||
while (--current_fdc >= 0)
|
||||
floppy_release_regions(current_fdc);
|
||||
while (--fdc >= 0)
|
||||
floppy_release_regions(fdc);
|
||||
current_fdc = 0;
|
||||
atomic_dec(&usage_count);
|
||||
return -1;
|
||||
}
|
||||
|
||||
static void floppy_release_irq_and_dma(void)
|
||||
{
|
||||
int old_fdc;
|
||||
int fdc;
|
||||
#ifndef __sparc__
|
||||
int drive;
|
||||
#endif
|
||||
@ -4958,11 +4961,9 @@ static void floppy_release_irq_and_dma(void)
|
||||
pr_info("auxiliary floppy timer still active\n");
|
||||
if (work_pending(&floppy_work))
|
||||
pr_info("work still pending\n");
|
||||
old_fdc = current_fdc;
|
||||
for (current_fdc = 0; current_fdc < N_FDC; current_fdc++)
|
||||
if (fdc_state[current_fdc].address != -1)
|
||||
floppy_release_regions(current_fdc);
|
||||
current_fdc = old_fdc;
|
||||
for (fdc = 0; fdc < N_FDC; fdc++)
|
||||
if (fdc_state[fdc].address != -1)
|
||||
floppy_release_regions(fdc);
|
||||
}
|
||||
|
||||
#ifdef MODULE
|
||||
|
Loading…
Reference in New Issue
Block a user