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