关于ticks_to_floppy_on和floppy_on的疑问

来源:互联网 发布:2016新能源数据 编辑:程序博客网 时间:2024/06/07 03:20

int ticks_to_floppy_on(unsigned int nr){extern unsigned char selected;unsigned char mask = 0x10 << nr;if (nr>3)panic("floppy_on: nr>3");moff_timer[nr]=10000;/* 100 s = very big :-) */cli();/* use floppy_off to turn it off */mask |= current_DOR;if (!selected) {mask &= 0xFC;mask |= nr;}if (mask != current_DOR) {outb(mask,FD_DOR);if ((mask ^ current_DOR) & 0xf0)mon_timer[nr] = HZ/2;else if (mon_timer[nr] < 2)mon_timer[nr] = 2;current_DOR = mask;}sti();return mon_timer[nr];}void floppy_on(unsigned int nr){cli();while (ticks_to_floppy_on(nr))sleep_on(nr+wait_motor);sti();}

上面的代码来自linux0.11代码中的sched.c,我的问题是floppy_on中的cli和sti是不是可以不要?因为ticks_to_floppy_on里面已经使用了cli和sti,而sleep_on是不需要屏蔽中断来保护的。大神写的代码,是不是应该说:多一行觉得多余,少一行又不能实现逻辑?因为tick_to_floppy_on函数开始不久就调用cli了,难道是ticks_to_floppy_on开始处与ticks_to_floppy_on中调用的cli之间需要保护?并且ticks_to_floppy_on返回的时候,肯定已经调用过sti了,接下来的floppy_on中的sti也根本没有必要。欢迎拍砖!

0 0
原创粉丝点击