Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1581513
  • 博文数量: 92
  • 博客积分: 2002
  • 博客等级: 大尉
  • 技术积分: 4717
  • 用 户 组: 普通用户
  • 注册时间: 2010-09-01 17:09
文章分类

全部博文(92)

文章存档

2013年(1)

2012年(6)

2011年(85)

分类: LINUX

2013-07-30 17:18:56

PCIe子卡的驱动在RHEL 5.4上调的好好的,一到RHEL 6.3就出现了问题:MSI中断无法触发。
PCIe接口都是兼容的,硬件上应该没问题;多半还是驱动代码问题。
调试N久,终于发现,代码运行在RHEL6.3时,PCI配置空间中MSI capacity结构的Message Address寄存器没有初始化。




出问题时
msg ctrl is 0081
     .enable:1    [1]
     .msg_cap:3   [0]
     .msg_en:3    [0]
     .bit64_cap:1 [1]
     .pre_mask:1  [0]
msg addr is 0000
msg addr is 0000
msg data is 0000

驱动中加入 pci_enable_device()后,MSI中断总算正常触发了....
msg val is 0081
     .enable:1    [1]
     .msg_cap:3   [0]
     .msg_en:3    [0]
     .bit64_cap:1 [1]
     .pre_mask:1  [0]
msg addr is 0678
msg addr is fee0
msg data is 0000

RHEL5.4 和 RHEL6.3 中pci_enable_device()实现有什么不同?RHEL5.4中不加pci_enable_device()为什么也能正常触发MSI中断
貌似是中断路由的问题 TODO

附上x86平台 message_addr寄存器的处理

Message Address字段其他位的含义如下所示。

  • Destination ID字段保存目标CPUID号,目标CPUID与该字段相等时,目标CPU将接收这个Interrupt MessageFSB Interrupt Message总线事务可以向不同的CPU提交中断请求。
  • RH(Redirection Hint Indication)位为0时,表示Interrupt Message将直接发向与Destination ID字段相同的目标CPU;如果RH1时,将使能中断转发功能。
  • DM(Destination Mode)位表示在传递优先权最低的中断请求时,Destination ID字段是否被翻译为Logical或者Physical APIC ID。在x86处理器中APIC ID有三种模式,分别为PhysicalLogicalCluster ID模式。
  • 如果RH位为1DM位为0时,Destination ID字段使用Physical模式;如果RH位为1DM位为1Destination ID字段使用Logical模式;如果RH位为0DM位将被忽略。


阅读(12213) | 评论(2) | 转发(0) |
0

上一篇:Shell Conditional Logic on Files

下一篇:没有了

给主人留下些什么吧!~~

夏一水12019-05-31 09:32:52

同问

tianchunlong2014-04-19 11:29:53

您好,我最近在调试msi中断,使用的是CentOS 6.2也遇到了同样的问题,在添加pci_enable_device后,发现消息地址寄存器也被初始化了,但是还是不能触发中断,使用cat /proc/interrupts虽然注册成功了,但是没有看到中断发生。