Chinaunix首页 | 论坛 | 博客
  • 博客访问: 450032
  • 博文数量: 120
  • 博客积分: 2284
  • 博客等级: 大尉
  • 技术积分: 1330
  • 用 户 组: 普通用户
  • 注册时间: 2011-01-25 10:49
个人简介

http://guliqun1983.blog.163.com/blog/static/501116852011730535314/

文章分类
文章存档

2013年(23)

2012年(23)

2011年(74)

分类: 嵌入式

2013-06-24 10:55:10


内核选项为:CONFIG_PCI_MSI

 

MSIMessage Signaled Interrupts,MSI是设备端通过向HostMSG的方式产生IRQ request,在送达Host/PCI桥之前它和普通的Memory Write 并没有区别,Host收到以后再将该Memory Write转化成Interrupt送到各个CPU

 

为什么使用MSI

  1. 基于管脚的PCI中断要经常在几个设备间共享,内核必须调用该中断相关的每个中断处理函数,这样会降低系统的整体性能,MSI不是共享的,就没有这个问题。

  2. 当设备要写数据到内存时,这时产生了一个基于引脚的中断,这时候会产生一种情况就是中断已经到达CPU了,但是数据还没有完全写入到内存中。

    PCI的传输顺序规则要求所有要写入内存的数据,要在产生中断的寄存器返回之前完成(有返回值)。

    所以为了保证所有数据正确的写入到内存,中断处理函数必须去读取产生中断的寄存器,确保这个中断寄存器没有返回,在返回之前将数据写完。

    然而MSI就没有这个问题,因为“中断的产生的”是一定在数据写入到内存之后,所以当中断产生的时候,驱动就知道所有的数据已经写到内存了。

  3. PCI的每个功能设备只支持一个基于引脚的中断,驱动需要查询设备来确定发生的事件,降低了中断处理的效率,通过MSI,一个设备支持多个中断,这样可以为不同的功能使用不同的中断。

阅读(4510) | 评论(0) | 转发(0) |
0

上一篇:Linux 下IS_ERR函数的理解

下一篇:没有了

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