gjgsoft
驱动牛犊
驱动牛犊
  • 注册日期2002-06-04
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
阅读:1238回复:0

求助!关于硬盘中断 i/o的问题

楼主#
更多 发布于:2002-07-23 18:32
最近正在写一个ide硬盘filter的程序,其中用到一个简单的read操作:对端口发出命令后,进程阻塞,直到硬盘中断服务程序完成后继续执行,我用了以下语句实现:
  DECLARE_WAIT_QUEUE_HEAD(my_wq);
  int complete;
  ..........
   complete=0;
   if(do_rw_disk(drive,rq,block)==ide_started)
   if(!complete){
      cli();
      if (!complete)
          interruptible_sleep_on(my_wq);
      ide_sti();
   }
   .......
  
   在中断服务程序中:
static ide_startstop_t read_intr1 (ide_drive_t *drive){
   .......
   my_complete=1;
   wake_up_interruptible(&my_wq);
   return ide_stopped;

}

  执行时发现 interruptible_sleep_on(my_wq)调用 schedule()时出错:
   ”scheduling in interrupt \"
  翻了下原码发现在schedule()中有一行
   if (in_interrupt())
goto scheduling_in_interrupt;
scheduling_in_interrupt:
printk(\"Scheduling in interrupt\\n\");
BUG();

, 问题好像出在这里.后来我在cli()前面调用in_interrupt()返回值也是真,不知如何解决,我对同步问题不太了解,希望那位高人能指点一二!
  
游客

返回顶部