xwpcom
驱动牛犊
驱动牛犊
  • 注册日期2005-01-15
  • 最后登录2011-03-29
  • 粉丝1
  • 关注0
  • 积分72分
  • 威望13点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
阅读:2896回复:3

关于读取PCI配置的问题

楼主#
更多 发布于:2005-05-11 17:29
PCI规范中讲到,直接操作port读取PCI配置信息时,要求分别两步
第一步是向0xCF8写入要读取的位置
mov dx,0xCF8
mov eax,val
out dx,eax

第二步是从0xCFC读取所需要数据。
mov dx,0xCFC
in eax,dx
mov val,eax

这两部是分开的,在有多个线程都读取PCI配置信息时可能出一个线程执行完第一步后被挂起,假设它已向0xCF8写入var1.此时另一个线程执行,它向0xCF8写入var2后也被挂起,然后又轮到线程1执行,这样它得到的将会是var2的信息,而不是var1的信息。这肯定是个错误。

请问,实际情况是这样的吗?
请高人指点!
engineer678
驱动牛犊
驱动牛犊
  • 注册日期2007-01-07
  • 最后登录2007-04-16
  • 粉丝0
  • 关注0
  • 积分210分
  • 威望22点
  • 贡献值0点
  • 好评度21点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-01-08 16:03
不错。坛子里有篇文章就讨论了这个问题的。
engineer678
驱动牛犊
驱动牛犊
  • 注册日期2007-01-07
  • 最后登录2007-04-16
  • 粉丝0
  • 关注0
  • 积分210分
  • 威望22点
  • 贡献值0点
  • 好评度21点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-01-08 16:16
不过哪有那么巧呢?一般都是写后立刻读出来。
boly81
驱动小牛
驱动小牛
  • 注册日期2004-06-25
  • 最后登录2012-06-08
  • 粉丝0
  • 关注0
  • 积分490分
  • 威望73点
  • 贡献值0点
  • 好评度49点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-01-08 18:46
这个地方当然要先 cli 然后再读些,结束后再sti
游客

返回顶部