patch-2.0.36 linux/drivers/block/floppy.c
Next file: linux/drivers/block/ide-cd.c
Previous file: linux/arch/sparc/kernel/sys_sunos.c
Back to the patch index
Back to the overall index
- Lines: 52
- Date:
Sun Nov 15 10:32:51 1998
- Orig file:
v2.0.35/linux/drivers/block/floppy.c
- Orig date:
Mon Jul 13 13:46:26 1998
diff -u --recursive --new-file v2.0.35/linux/drivers/block/floppy.c linux/drivers/block/floppy.c
@@ -328,7 +328,7 @@
0, { 1, 0, 0, 0, 0, 0, 0, 0}, 3*HZ/2, 1 }, "360K PC" }, /*5 1/4 360 KB PC*/
{{2, 500, 16, 16, 6000, 4*HZ/10, 3*HZ, 14, SEL_DLY, 6, 83, 3*HZ, 17, {3,1,2,0,2}, 0,
- 0, { 2, 5, 6,23,10,20,11, 0}, 3*HZ/2, 2 }, "1.2M" }, /*5 1/4 HD AT*/
+ 0, { 2, 5, 6,23,10,20,12, 0}, 3*HZ/2, 2 }, "1.2M" }, /*5 1/4 HD AT*/
{{3, 250, 16, 16, 3000, 1*HZ, 3*HZ, 0, SEL_DLY, 5, 83, 3*HZ, 20, {3,1,2,0,2}, 0,
0, { 4,22,21,30, 3, 0, 0, 0}, 3*HZ/2, 4 }, "720k" }, /*3 1/2 DD*/
@@ -1682,12 +1682,14 @@
if(do_print)
print_result("unexpected interrupt", inr);
if (inr == 0){
+ int max_sensei = 4;
do {
output_byte(FD_SENSEI);
inr = result();
if(do_print)
print_result("sensei", inr);
- } while ((ST0 & 0x83) != UNIT(current_drive) && inr == 2);
+ max_sensei--;
+ } while ((ST0 & 0x83) != UNIT(current_drive) && inr == 2 && max_sensei);
}
if (handler) {
if(intr_count >= 2) {
@@ -3989,6 +3991,8 @@
#endif
if (floppy_grab_irq_and_dma()){
+ del_timer(&fd_timeout);
+ blk_dev[MAJOR_NR].request_fn = NULL;
unregister_blkdev(MAJOR_NR,"fd");
return -EBUSY;
}
@@ -4042,6 +4046,17 @@
initialising=0;
if (have_no_fdc) {
DPRINT("no floppy controllers found\n");
+ request_tq.routine = (void *)(void *) empty;
+ /*
+ * When we return we may be unloaded. This little
+ * trick forces the immediate_bh handler to have run
+ * before we unload it, lest we cause bad things.
+ */
+ mark_bh(IMMEDIATE_BH);
+ schedule();
+ if (usage_count)
+ floppy_release_irq_and_dma();
+ blk_dev[MAJOR_NR].request_fn = NULL;
unregister_blkdev(MAJOR_NR,"fd");
}
return have_no_fdc;
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen, slshen@lbl.gov