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

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

PCIe接口中斷驅(qū)動(dòng)寄存器被覆蓋問題的發(fā)現(xiàn)與解決

FPGA技術(shù)江湖 ? 來源:網(wǎng)絡(luò)交換FPGA ? 2023-01-29 15:16 ? 次閱讀

最近調(diào)試Windows平臺(tái)下的PCIe網(wǎng)絡(luò)驅(qū)動(dòng)程序時(shí),發(fā)現(xiàn)了中斷不被處理的情況,懷疑中斷丟失。隨后在調(diào)試過程中將問題定位在如下兩個(gè)方面。

DMA寫重復(fù)啟動(dòng)

我們?cè)赪indows下使用WDF框架開發(fā)PCIe驅(qū)動(dòng)的DMA讀寫功能。驅(qū)動(dòng)要啟動(dòng)一次DMA傳輸包括兩個(gè)步驟

初始化DMA傳輸對(duì)象

執(zhí)行DMA傳輸

初始化DMA傳輸對(duì)象時(shí),應(yīng)將本次DMA要傳輸?shù)臄?shù)據(jù)緩沖區(qū)的地址和長度寫入該對(duì)象,并向其注冊(cè)用于配置并啟動(dòng)DMA傳輸?shù)幕卣{(diào)函數(shù)PCIeEvtProgramWriteDma。該回調(diào)函數(shù)會(huì)獲取緩沖區(qū)地址和長度,通過PIO方式配置PCIe Bar空間上的寄存器,以通知硬件啟動(dòng)DMA傳輸。

執(zhí)行DMA傳輸時(shí),驅(qū)動(dòng)僅需調(diào)用WDF框架的WdfDmaTransactionExecute函數(shù),操作系統(tǒng)就會(huì)調(diào)用上一步注冊(cè)的回調(diào)函數(shù)對(duì)硬件進(jìn)行配置并啟動(dòng)DMA傳輸。

正常來講,驅(qū)動(dòng)調(diào)用一次WdfDmaTransactionExecute函數(shù),相應(yīng)地操作系統(tǒng)應(yīng)調(diào)用一次回調(diào)函數(shù)進(jìn)行硬件配置。但我們更換硬件平臺(tái)(CPU+FPGA)后,DMA寫流程出現(xiàn)了嚴(yán)重問題,具體表現(xiàn)為:前者的一次調(diào)用可能會(huì)對(duì)應(yīng)著后者的多次調(diào)用,且每次回調(diào)函數(shù)都會(huì)完整執(zhí)行并觸發(fā)DMA寫完成中斷,從而造成了驅(qū)動(dòng)的中斷狀態(tài)機(jī)被打亂,直接表現(xiàn)是后續(xù)的DMA寫開始中斷丟失,無法正常啟動(dòng)DMA寫。

如下,圖1是驅(qū)動(dòng)調(diào)用WdfDmaTransactionExecute函數(shù)的次數(shù)與操作系統(tǒng)調(diào)用回調(diào)函數(shù)的次數(shù)不一致的截圖。

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

圖1 DebugMonito監(jiān)測(cè)

其中,5658(5576+82+0)為驅(qū)動(dòng)調(diào)用WdfDmaTransactionExecute函數(shù)的次數(shù),5664為操作系統(tǒng)調(diào)用回調(diào)函數(shù)的次數(shù)。二者之間差6就是操作系統(tǒng)重復(fù)調(diào)用的次數(shù)。

我們嘗試將操作系統(tǒng)多出來的調(diào)用回調(diào)函數(shù)的次數(shù)跳過,即僅保留第一次調(diào)用。硬件側(cè)可以正常完成這次DMA傳輸,并觸發(fā)DMA寫完成中斷。但驅(qū)動(dòng)去查詢DMA傳輸對(duì)象時(shí),發(fā)現(xiàn)此次DMA傳輸并未處于完成狀態(tài),即無法正常接收數(shù)據(jù)。至此,我們猜測(cè),操作系統(tǒng)多次調(diào)用回調(diào)函數(shù)的原因是其認(rèn)為配置過程出錯(cuò)才重新進(jìn)行配置,直至最后一次成功。而硬件側(cè)并不會(huì)感知到這種錯(cuò)誤,每次都正常啟動(dòng)DMA寫并觸發(fā)DMA寫完成中斷,導(dǎo)致驅(qū)動(dòng)的中斷狀態(tài)機(jī)跑飛。

問題排查到這里,我們無法深入到閉源的Windows操作系統(tǒng)內(nèi)部去探究錯(cuò)誤原因了。所以思路一轉(zhuǎn),我們嘗試能否為中斷狀態(tài)機(jī)提供一些保障機(jī)制。

驅(qū)動(dòng)的中斷狀態(tài)機(jī)

為了方便調(diào)試,我們?cè)谥袛嗵幚沓绦蛑刑砑恿嗽S多關(guān)鍵的調(diào)試日志信息,結(jié)果在其中發(fā)現(xiàn)了端倪。

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

圖2 日志打印記錄

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

這種現(xiàn)象顯然是不合理的。為了解決這個(gè)問題,我們?yōu)镸PHandleInterrupt函數(shù)內(nèi)部加鎖,防止MPHandleInterrupt并行執(zhí)行。通過這種方式,中斷寄存被覆蓋的現(xiàn)象不再發(fā)生。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5422

    瀏覽量

    123401
  • 接口
    +關(guān)注

    關(guān)注

    33

    文章

    8950

    瀏覽量

    153221
  • WINDOWS
    +關(guān)注

    關(guān)注

    4

    文章

    3608

    瀏覽量

    90968
  • PCIe
    +關(guān)注

    關(guān)注

    16

    文章

    1324

    瀏覽量

    84703
  • dma
    dma
    +關(guān)注

    關(guān)注

    3

    文章

    572

    瀏覽量

    102353

原文標(biāo)題:PCIe接口中斷驅(qū)動(dòng)寄存器被覆蓋問題的發(fā)現(xiàn)與解決

文章出處:【微信號(hào):HXSLH1010101010,微信公眾號(hào):FPGA技術(shù)江湖】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    基于DWC2的USB驅(qū)動(dòng)開發(fā)-控制傳輸中斷相關(guān)寄存器

    本篇講解Scatter/Gather DMA模式下控制傳輸相關(guān)的寄存器。控制傳輸是USB驅(qū)動(dòng)的核心部分,控制傳輸調(diào)通了驅(qū)動(dòng)就完成了一大半,而驅(qū)動(dòng)的核心又是
    的頭像 發(fā)表于 07-24 00:07 ?3532次閱讀
    基于DWC2的USB<b class='flag-5'>驅(qū)動(dòng)</b>開發(fā)-控制傳輸<b class='flag-5'>中斷</b>相關(guān)<b class='flag-5'>寄存器</b>

    寄存器移位時(shí),數(shù)據(jù)不會(huì)被覆蓋嗎?

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

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

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

    求教:關(guān)于DM8168的PCIe寄存器

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

    如何選擇51單片機(jī)的中斷寄存器

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

    中斷寄存器有哪幾種類型

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

    51單片機(jī)與中斷相關(guān)的寄存器

    51單片機(jī)與中斷相關(guān)的寄存器簡介中斷控制寄存器IE中斷優(yōu)先級(jí)控制寄存器IP定時(shí)
    發(fā)表于 11-12 11:36 ?8次下載
    51單片機(jī)與<b class='flag-5'>中斷</b>相關(guān)的<b class='flag-5'>寄存器</b>

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

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

    STC學(xué)習(xí):中斷相關(guān)寄存器

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

    口中斷服務(wù)函數(shù)的觸發(fā)

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

    STM32串口通信相關(guān)寄存器中斷回調(diào)函數(shù)

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

    單片機(jī)工作寄存器作用 單片機(jī)常用專用寄存器

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

    U54內(nèi)核中斷控制和狀態(tài)寄存器

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

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

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

    接口的控制與狀態(tài)寄存器什么作用

    接口的控制與狀態(tài)寄存器(Control and Status Registers,簡稱CSR)是計(jì)算機(jī)系統(tǒng)中用于控制和監(jiān)控硬件設(shè)備操作的寄存器。它們是硬件設(shè)備與其驅(qū)動(dòng)程序之間的橋梁,允
    的頭像 發(fā)表于 10-17 10:42 ?1391次閱讀
    主站蜘蛛池模板: 三级完整在线观看高清视频 | 加勒比黑人喝羽月希奶水 | 久久久国产高清 | 久久伊人草 | aa在线观看 | 亚洲 美腿 欧美 偷拍 | 久久久久久人精品免费费看 | 手机看片91| 免费看黄视频网站 | 看黄视频网站 | 日本不卡视频一区二区三区 | 狠狠色噜噜狠狠狠狠91 | 免费看欧美一级特黄a大片 免费看欧美一级特黄a大片一 | 免费看一级毛片 | 中文字幕一区二区三区精彩视频 | 日本女人啪啪 | 国产人人干 | 四虎影院成人 | 日日噜噜夜夜狠狠tv视频免费 | 国产欧美久久久精品影院 | 久久性久久性久久久爽 | 国产精品17p | 四虎东方va私人影库在线观看 | 亚洲成a人片在线观看导航 亚洲成a人片在线观看尤物 | 亚洲精品456 | 一级特黄aaa大片免费看 | 奇米影视四色首页手机在线 | 78摸在线 | 成年女人免费看一级人体片 | 六月激情丁香 | 视频网站黄 | 天堂网www中文天堂在线 | 亚洲伦理一区二区 | 美女被免费网站视频九色 | 91大神精品 | 波多野结衣在线网址 | 国产免费午夜 | 四虎影院在线免费观看 | 俺去啦最新网址 | 欧美黄色高清 | 国产片在线|