色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

    瀏覽量

    120954
  • 接口
    +關注

    關注

    33

    文章

    8691

    瀏覽量

    151715
  • WINDOWS
    +關注

    關注

    4

    文章

    3567

    瀏覽量

    89140
  • PCIe
    +關注

    關注

    15

    文章

    1258

    瀏覽量

    83011
  • dma
    dma
    +關注

    關注

    3

    文章

    566

    瀏覽量

    100849

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

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

收藏 人收藏

    評論

    相關推薦

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

    本篇講解Scatter/Gather DMA模式下控制傳輸相關的寄存器。控制傳輸是USB驅動的核心部分,控制傳輸調通了驅動就完成了一大半,而驅動的核心又是
    的頭像 發表于 07-24 00:07 ?2747次閱讀
    基于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 ?8867次閱讀
    <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 ?7692次閱讀

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

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

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

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

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

    接口的控制與狀態寄存器(Control and Status Registers,簡稱CSR)是計算機系統中用于控制和監控硬件設備操作的寄存器。它們是硬件設備與其驅動程序之間的橋梁,允
    的頭像 發表于 10-17 10:42 ?570次閱讀
    主站蜘蛛池模板: 男女床上黄色 | 亚洲欲色欲色XXXXX在线AV | 成都电影免费中文高清 | 色播播电影 | 99精彩视频在线观看 | seyeye免费高清观看 | chinesevideos原创麻豆 | 女的把腿张开男的往里面插 | 亚洲色欲色欲综合网站 | 5G在线观看免费年龄确认 | 在线视频久久只有精品第一日韩 | A级毛片无码久久精品免费 a级毛片黄免费a级毛片 | 亚洲午夜精品aaa级久久久久 | 日本午夜看x费免 | 伊人影院亚洲 | 在线不卡中文字幕 | 伊人久久电影院 | 高清视频在线观看SEYEYE | 99九九精品国产高清自在线 | 精品久久伊人 | 伦理片在线线手机版韩国免费观看 | bbwvideos欧美老妇 | 国产黄A片在线观看永久免费麻豆 | 45分钟做受片免费观看 | 亚洲 欧美 综合 高清 在线 | 欧美三级在线完整版免费 | 国产欧美国产综合第一区 | 99久久精品免费看国产免费 | 午夜福利小视频400 午夜福利网国产A | 果冻传媒在线完整免费播放 | 男人插曲女人身体视频 | 中文字幕A片视频一区二区 中文字幕AV在线一二三区 | 亚洲 欧美 国产 综合 播放 | 国产精品色吧国产精品 | 中文国产乱码在线人妻一区二区 | 亚洲欧洲日产国码中学 | 99久久精品国产高清一区二区 | 免费国产久久啪在线 | 被爽到叫呻呤视频免费视频 | 精品国产品国语在线不卡丶 | 中字幕视频在线永久在线 |