在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

PCIe接口中斷驅動寄存器被覆蓋問題的發現與解決

FPGA技術江湖 ? 來源:網絡交換FPGA ? 2023-01-29 15:16 ? 次閱讀

最近調試Windows平臺下的PCIe網絡驅動程序時,發現了中斷不被處理的情況,懷疑中斷丟失。隨后在調試過程中將問題定位在如下兩個方面。

DMA寫重復啟動

我們在Windows下使用WDF框架開發PCIe驅動的DMA讀寫功能。驅動要啟動一次DMA傳輸包括兩個步驟

初始化DMA傳輸對象

執行DMA傳輸

初始化DMA傳輸對象時,應將本次DMA要傳輸的數據緩沖區的地址和長度寫入該對象,并向其注冊用于配置并啟動DMA傳輸的回調函數PCIeEvtProgramWriteDma。該回調函數會獲取緩沖區地址和長度,通過PIO方式配置PCIe Bar空間上的寄存器,以通知硬件啟動DMA傳輸。

執行DMA傳輸時,驅動僅需調用WDF框架的WdfDmaTransactionExecute函數,操作系統就會調用上一步注冊的回調函數對硬件進行配置并啟動DMA傳輸。

正常來講,驅動調用一次WdfDmaTransactionExecute函數,相應地操作系統應調用一次回調函數進行硬件配置。但我們更換硬件平臺(CPU+FPGA)后,DMA寫流程出現了嚴重問題,具體表現為:前者的一次調用可能會對應著后者的多次調用,且每次回調函數都會完整執行并觸發DMA寫完成中斷,從而造成了驅動的中斷狀態機被打亂,直接表現是后續的DMA寫開始中斷丟失,無法正常啟動DMA寫。

如下,圖1是驅動調用WdfDmaTransactionExecute函數的次數與操作系統調用回調函數的次數不一致的截圖。

d46e8f36-96c6-11ed-bfe3-dac502259ad0.jpg

圖1 DebugMonito監測

其中,5658(5576+82+0)為驅動調用WdfDmaTransactionExecute函數的次數,5664為操作系統調用回調函數的次數。二者之間差6就是操作系統重復調用的次數。

我們嘗試將操作系統多出來的調用回調函數的次數跳過,即僅保留第一次調用。硬件側可以正常完成這次DMA傳輸,并觸發DMA寫完成中斷。但驅動去查詢DMA傳輸對象時,發現此次DMA傳輸并未處于完成狀態,即無法正常接收數據。至此,我們猜測,操作系統多次調用回調函數的原因是其認為配置過程出錯才重新進行配置,直至最后一次成功。而硬件側并不會感知到這種錯誤,每次都正常啟動DMA寫并觸發DMA寫完成中斷,導致驅動的中斷狀態機跑飛。

問題排查到這里,我們無法深入到閉源的Windows操作系統內部去探究錯誤原因了。所以思路一轉,我們嘗試能否為中斷狀態機提供一些保障機制。

驅動的中斷狀態機

為了方便調試,我們在中斷處理程序中添加了許多關鍵的調試日志信息,結果在其中發現了端倪。

d48e3b1a-96c6-11ed-bfe3-dac502259ad0.jpg

圖2 日志打印記錄

觀察圖2中的日志,發現兩個中斷延遲處理函數MPHandleInterrupt在并行執行。在這個過程中,用于臨時拷貝中斷寄存的變量Adapter->IsrCode_dpc被覆蓋重寫。覆蓋的直接后果是,前者已讀取到的寄存的中斷,后者覆蓋后就無法由中斷延遲處理程序進行處理。

這種現象顯然是不合理的。為了解決這個問題,我們為MPHandleInterrupt函數內部加鎖,防止MPHandleInterrupt并行執行。通過這種方式,中斷寄存被覆蓋的現象不再發生。

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 寄存器
    +關注

    關注

    31

    文章

    5363

    瀏覽量

    121002
  • 接口
    +關注

    關注

    33

    文章

    8691

    瀏覽量

    151746
  • WINDOWS
    +關注

    關注

    4

    文章

    3567

    瀏覽量

    89175
  • PCIe
    +關注

    關注

    15

    文章

    1258

    瀏覽量

    83057
  • dma
    dma
    +關注

    關注

    3

    文章

    566

    瀏覽量

    100870

原文標題:PCIe接口中斷驅動寄存器被覆蓋問題的發現與解決

文章出處:【微信號:HXSLH1010101010,微信公眾號:FPGA技術江湖】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    基于DWC2的USB驅動開發-控制傳輸中斷相關寄存器

    本篇講解Scatter/Gather DMA模式下控制傳輸相關的寄存器??刂苽鬏斒荱SB驅動的核心部分,控制傳輸調通了驅動就完成了一大半,而驅動的核心又是
    的頭像 發表于 07-24 00:07 ?2756次閱讀
    基于DWC2的USB<b class='flag-5'>驅動</b>開發-控制傳輸<b class='flag-5'>中斷</b>相關<b class='flag-5'>寄存器</b>

    寄存器移位時,數據不會被覆蓋嗎?

    ;output Z ;parameter NUM_REG = 6;reg [1: NUM_REG] Q ;integer P ;always@ (negedge Clock) begin//寄存器右移一位
    發表于 11-08 18:49

    求教串口中斷寄存器需要控制哪幾個寄存器的哪幾位?

    求教串口中斷寄存器需要控制哪幾個寄存器的哪幾位?用寄存器寫程序
    發表于 03-20 21:24

    求教:關于DM8168的PCIe寄存器

    : ?????????????? 1.如何將DM8168 PCIe寄存器(地址是0x51000000)映射到它的內核空間,這樣我就可以在內核空間通過訪問其對應的虛擬地址查看PCIe寄存器
    發表于 05-28 01:52

    如何選擇51單片機的中斷寄存器

    首先介紹一下51的寄存器組:通過設置PSW寄存器的第3位和第4位可以任意切換寄存器組。在進入中斷前,切換寄存器組,可以方便的保護原
    發表于 04-17 17:27 ?0次下載
    如何選擇51單片機的<b class='flag-5'>中斷寄存器</b>組

    中斷寄存器有哪幾種類型

    中斷寄存器包括定時/計數控制寄存器TCON和串行通信口控制寄存器SCON。
    的頭像 發表于 05-01 17:18 ?8877次閱讀
    <b class='flag-5'>中斷</b>源<b class='flag-5'>寄存器</b>有哪幾種類型

    51單片機與中斷相關的寄存器

    51單片機與中斷相關的寄存器簡介中斷控制寄存器IE中斷優先級控制寄存器IP定時
    發表于 11-12 11:36 ?8次下載
    51單片機與<b class='flag-5'>中斷</b>相關的<b class='flag-5'>寄存器</b>

    (指南者)(二)寄存器、定時中斷

    (指南者)(二)寄存器、定時中斷寄存器定時時鐘定時寄存器0110代碼例程定時
    發表于 12-23 19:19 ?0次下載
    (指南者)(二)<b class='flag-5'>寄存器</b>、定時<b class='flag-5'>器</b>和<b class='flag-5'>中斷</b>

    STC學習:中斷相關寄存器

    中斷允許寄存器IE、IE2和INT_CLKOIE:中斷允許寄存器(可位尋址)SFR namebitB7B6B5B4B3B2B1B0IEnameEAELVDEADCESET1EX1ET0
    發表于 12-23 19:50 ?0次下載
    STC學習:<b class='flag-5'>中斷</b>相關<b class='flag-5'>寄存器</b>

    口中斷服務函數的觸發

    口中斷服務函數的觸發USART1_IRQHandler(void)1. 串口發送中斷下圖為狀態寄存器(USART_SR)中的位7、位6說明,發送完一幀并且發送數據寄存器為空時,位6置
    發表于 12-28 19:01 ?19次下載
    串<b class='flag-5'>口中斷</b>服務函數的觸發

    STM32串口通信相關寄存器中斷回調函數

    (USART_CR1)控制寄存器 2 (USART_CR2)控制寄存器 3 (USART_CR3)串口配置串口初始化GPIO配置,開啟中斷中斷函數串口1
    發表于 12-28 19:11 ?7次下載
    STM32串口通信相關<b class='flag-5'>寄存器</b>和<b class='flag-5'>中斷</b>回調函數

    單片機工作寄存器作用 單片機常用專用寄存器

    除了通用寄存器(如累加、通用寄存器等),單片機中還會有特定功能的寄存器,如定時寄存器、
    的頭像 發表于 04-08 14:46 ?7694次閱讀

    U54內核中斷控制和狀態寄存器

    中斷控制和狀態寄存器 Machine Status Register (mstatus) mstatus 寄存器跟蹤并控制 hart 的當前操作狀態,包括是否啟用中斷。 通過設置 ms
    的頭像 發表于 10-08 09:54 ?1056次閱讀
    U54內核<b class='flag-5'>中斷</b>控制和狀態<b class='flag-5'>寄存器</b>

    CPSR寄存器和APSR寄存器的組成

    程序狀態寄存器的作用就是反映處理的狀態信息。在程序運行期間我們可以通過查看程序狀態寄存器的狀態位來進行程序的分支跳轉處理,或者我們可以設置程序狀態寄存器的模式位來改變處理
    的頭像 發表于 10-20 11:38 ?4830次閱讀
    CPSR<b class='flag-5'>寄存器</b>和APSR<b class='flag-5'>寄存器</b>的組成

    接口的控制與狀態寄存器什么作用

    接口的控制與狀態寄存器(Control and Status Registers,簡稱CSR)是計算機系統中用于控制和監控硬件設備操作的寄存器。它們是硬件設備與其驅動程序之間的橋梁,允
    的頭像 發表于 10-17 10:42 ?582次閱讀
    主站蜘蛛池模板: 亚洲天堂视频一区 | 欧美性满足hd1819 | 一级毛片在播放免费 | 影音先锋色偷偷米奇四色 | 99久久久久国产精品免费 | 种子在线搜索 | 人人爽天天碰天天躁夜夜躁 | 欧美三级黄 | 四虎院影永久在线观看 | 欧美成人亚洲欧美成人 | 日日摸夜夜添免费毛片小说 | 91po狼人社在线观看 | 久久激情综合网 | 一级片aaaaaa | 国产色司机在线视频免费观看 | 国产精品嫩草影院人体模特 | 人人看人人看人做人人模 | 毛片网子| 狠狠插天天干 | 人人干人人干人人干 | 日本一级大片 | 尤物久久99热国产综合 | 日本成人黄色网址 | 操片免费| 色视频在线 | 色偷偷成人网免费视频男人的天堂 | 操美女免费网站 | 欧美日韩精品乱国产 | 欧美午夜色大片在线观看免费 | 日日射天天射 | 日日射天天射 | h网站亚洲 | 久青草免费视频手机在线观看 | 性69交片免费看 | 日韩三级精品 | 欧美日本俄罗斯一级毛片 | 开心色99×xxxx| 特黄色片 | 成人黄色激情网 | 亚洲综合日韩欧美一区二区三 | 狠狠色狠狠色 |