系统相关
首页 > 系统相关> > Linux网络驱动程序MSI中断问题

Linux网络驱动程序MSI中断问题

作者:互联网

我正在尝试为自定义硬件创建网络驱动程序.我的目标是Xilinx Zync-7000 FPGA器件.

我的问题是CPU端MSI中断的软件处理.我遇到的问题是,当在PCIe设备上触发中断时,驱动程序代码会执行一次中断处理程序并返回,但是当我查看lspci时,PCIe IO会停止工作,并且MSI将重置.内核不会捕获任何将来的中断,PCIe开发人员几乎已经死了.我检查了硬件,没有复位信号发给FPGA,所以我认为内核中发生了某些事情.

先感谢您.

解决方法:

发布此问题后,我发现问题困扰了我一天多了.当我按如下方式映射DMA缓冲区时,发生了什么事:

net_priv->rx_phy_addr = dma_map_single(&pdev->dev, net_priv->rx_virt_addr,  
                                       dev->mtu, PCI_DMA_FROMDEVICE);

我稍后将未映射的缓冲区

dma_unmap_single(&pdev->dev, net_priv->rx_phy_addr, BUFFER_SIZE,  
                 PCI_DMA_FROMDEVICE);

我的BUFFER_SIZE错字是1MB,dev-> mtu是1.5kB.似乎发生的是,当我取消映射1MB的空间时,它开始取消映射除1.5bkB之外的其他内存映射. dma_unmap_single一旦完成,PCIe IO区域以及中断区域都将消失.希望我的错误可以帮助别人.

标签:xilinx,pci-e,linux-kernel,linux-device-driver,linux
来源: https://codeday.me/bug/20191119/2039830.html