diff -urNX dontdiff linux-2.5.24/drivers/block/floppy.c linux-2.5.24-imm/drivers/block/floppy.c --- linux-2.5.24/drivers/block/floppy.c Wed Jun 19 06:15:46 2002 +++ linux-2.5.24-imm/drivers/block/floppy.c Fri Jun 21 12:41:52 2002 @@ -150,7 +150,6 @@ #include #include #include -#include #define FDPATCHES #include @@ -997,13 +996,12 @@ { } -static struct tq_struct floppy_tq; +static DECLARE_TASKLET(floppy_tasklet, NULL, 0); -static void schedule_bh( void (*handler)(void*) ) +static void schedule_bh(void (*handler)(void)) { - floppy_tq.routine = (void *)(void *) handler; - queue_task(&floppy_tq, &tq_immediate); - mark_bh(IMMEDIATE_BH); + floppy_tasklet.func = (void *) handler; + tasklet_schedule(&floppy_tasklet); } static struct timer_list fd_timer; @@ -1011,7 +1009,7 @@ static void cancel_activity(void) { do_floppy = NULL; - floppy_tq.routine = (void *)(void *) empty; + floppy_tasklet.func = (void *) empty; del_timer(&fd_timer); } @@ -1789,7 +1787,7 @@ } while ((ST0 & 0x83) != UNIT(current_drive) && inr == 2 && max_sensei); } if (handler) { - schedule_bh( (void *)(void *) handler); + schedule_bh(handler); } else FDCS->reset = 1; is_alive("normal interrupt end"); @@ -1880,8 +1878,8 @@ printk("fdc_busy=%lu\n", fdc_busy); if (do_floppy) printk("do_floppy=%p\n", do_floppy); - if (floppy_tq.sync) - printk("floppy_tq.routine=%p\n", floppy_tq.routine); + if (test_bit(TASKLET_STATE_SCHED, &floppy_tasklet.state)) + printk("floppy_tasklet.func=%p\n", floppy_tasklet.func); if (timer_pending(&fd_timer)) printk("fd_timer.function=%p\n", fd_timer.function); if (timer_pending(&fd_timeout)){ @@ -2049,7 +2047,7 @@ { int ret; - schedule_bh((void *)(void *)handler); + schedule_bh(handler); if (command_status < 2 && NO_SIGNAL) { DECLARE_WAITQUEUE(wait, current); @@ -2968,7 +2966,7 @@ if (TESTF(FD_NEED_TWADDLE)) twaddle(); - schedule_bh( (void *)(void *) floppy_start); + schedule_bh(floppy_start); #ifdef DEBUGT debugt("queue fd request"); #endif @@ -2986,7 +2984,7 @@ static void process_fd_request(void) { cont = &rw_cont; - schedule_bh( (void *)(void *) redo_fd_request); + schedule_bh(redo_fd_request); } static void do_fd_request(request_queue_t * q) @@ -4341,7 +4339,7 @@ if (have_no_fdc) { DPRINT("no floppy controllers found\n"); - run_task_queue(&tq_immediate); + tasklet_kill(&floppy_tasklet); if (usage_count) floppy_release_irq_and_dma(); blk_cleanup_queue(BLK_DEFAULT_QUEUE(MAJOR_NR)); @@ -4495,8 +4493,8 @@ printk("floppy timer still active:%s\n", timeout_message); if (timer_pending(&fd_timer)) printk("auxiliary floppy timer still active\n"); - if (floppy_tq.sync) - printk("task queue still active\n"); + if (test_bit(TASKLET_STATE_SCHED, &floppy_tasklet.state)) + printk("floppy tasklet still active\n"); #endif old_fdc = fdc; for (fdc = 0; fdc < N_FDC; fdc++)