日韩精品一区二区三区在线视频放-无码中文字幕V?一区二区-成年片免费观看视频-国内少妇人妻丰满av-国产精品中文字幕免费观看-亚洲成人久久一区二区三区-国内少妇偷人精品视频无缓冲-一区二区国产精品日本一区二区三区在线网

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運營的一線實戰(zhàn)洞察。

PCIe配置空間與BAR空間詳解:從枚舉到FPGA實戰(zhàn)調(diào)試

PCIe配置空間與BAR空間詳解:從枚舉到FPGA實戰(zhàn)調(diào)試 PCIe 這玩意兒剛接觸的時候最容易讓人懵圈的不是那些高速信號、鏈路訓(xùn)練反而是軟件層面那兩個看起來平平無奇的東西配置空間和 BAR 空間。我見過不少做 FPGA 的兄弟邏輯寫得飛起DMA 也能跑通但一到主機識別不到設(shè)備、或者 BAR 地址映射錯亂就抓瞎了。問題往往就出在對這兩個空間的機制理解得不夠透。這篇就專門把配置空間和 BAR 空間掰開揉碎講清楚它們各自裝了什么、為什么這么設(shè)計、實際調(diào)試中怎么用以及那些文檔里不會寫的坑。1. 為什么 PCIe 需要配置空間和 BAR 這兩套地址體系要理解配置空間和 BAR得先回到 PCIe 設(shè)計的一個根本矛盾上。主機 CPU 訪問內(nèi)存是按物理地址走的而 PCIe 設(shè)備自己內(nèi)部也有一堆寄存器、緩沖區(qū)、控制邏輯這些東西也需要被 CPU 訪問。問題是設(shè)備插到哪個槽位、系統(tǒng)里掛了多少設(shè)備這些在開機之前都是未知的。你不可能給每個設(shè)備預(yù)先分配一段固定的物理地址那樣地址空間早就沖突了。所以 PCIe 采用了一套先枚舉、后分配的機制。配置空間就是設(shè)備的身份證加簡歷里面記錄了廠商 ID、設(shè)備 ID、類型、需要多大地址空間等固定信息。主機在枚舉階段掃描總線讀每個設(shè)備的配置空間搞清楚你是誰、你要多少資源然后統(tǒng)一分配地址。BAR 空間則是設(shè)備向主機申請的地盤主機分配好地址后把基地址寫回 BAR 寄存器設(shè)備就知道哦原來我的寄存器在主機眼里是這個地址。這套機制的核心價值在于地址無關(guān)性。設(shè)備不需要知道自己會被映射到哪個地址它只需要聲明我需要 4KB 的寄存器空間和我需要 16MB 的顯存空間剩下的交給主機。這也是為什么同一塊 FPGA 板卡插到不同主板上都能正常工作因為地址是動態(tài)分配的。從拓?fù)浣Y(jié)構(gòu)上看PCIe 是一棵樹根復(fù)合體Root Complex是根下面掛交換機Switch和端點設(shè)備Endpoint。配置空間和 BAR 的分配是沿著這棵樹逐級進(jìn)行的。每個橋設(shè)備包括交換機端口也有自己的配置空間負(fù)責(zé)管理下游總線的地址窗口。理解這個層級關(guān)系對后面排查 BAR 分配失敗非常關(guān)鍵。很多人把配置空間和 BAR 空間混為一談其實它們是兩個完全不同的地址域。配置空間通過 CFG 事務(wù)訪問走的是獨立的配置讀寫通道BAR 空間則是通過 MEM 或 IO 事務(wù)訪問走的是正常的內(nèi)存映射通道。這個區(qū)別在調(diào)試時非常重要。2. 配置空間里到底裝了哪些東西配置空間是 PCIe 設(shè)備的標(biāo)準(zhǔn)寄存器區(qū)域規(guī)范定義每個功能Function必須有至少 256 字節(jié)的配置空間PCIe 還擴展到了 4KB。這 4KB 不是隨便堆的而是按固定偏移劃分成一個個有明確用途的字段。理解這些字段的布局是讀懂枚舉日志和排查識別問題的前提。2.1 前 64 字節(jié)設(shè)備身份與命令控制配置空間的前 64 字節(jié)是所有 PCIe 設(shè)備都必須實現(xiàn)的這部分叫 Type 0 頭對于端點設(shè)備或 Type 1 頭對于橋設(shè)備。里面最關(guān)鍵的幾個字段Vendor ID 和 Device ID偏移 0x00 和 0x02廠商 ID 由 PCI-SIG 統(tǒng)一分配設(shè)備 ID 由廠商自己定義。主機枚舉時第一件事就是讀這兩個值如果是 0xFFFF說明這個位置沒有設(shè)備或者設(shè)備沒準(zhǔn)備好。Command 寄存器偏移 0x04控制設(shè)備是否響應(yīng) MEM 訪問、IO 訪問、總線主控等。很多新手遇到設(shè)備能識別但訪問不了 BAR的問題十有八九是 Command 寄存器里的 Memory Space Enable 位沒置起來。Status 寄存器偏移 0x06反映設(shè)備狀態(tài)比如是否支持能力列表、是否有錯誤等。Revision ID 和 Class Code偏移 0x08 和 0x09Revision 是版本號Class Code 標(biāo)識設(shè)備類型比如 0x020000 是以太網(wǎng)控制器0x010802 是 NVMe 存儲控制器。操作系統(tǒng)就是靠 Class Code 來加載對應(yīng)驅(qū)動的。Header Type偏移 0x0E標(biāo)識這是 Type 0 還是 Type 1 頭以及是否是多功能設(shè)備。BAR0 到 BAR5偏移 0x10 到 0x24六個基地址寄存器這是配置空間和 BAR 空間的交匯點后面單獨展開講。Capabilities Pointer偏移 0x34指向能力列表的偏移PCIe 的各種高級功能都掛在能力列表里。我實際調(diào)試中遇到最多的情況是FPGA 加載了錯誤的比特流Vendor ID 和 Device ID 讀出來是默認(rèn)值或者全 F主機直接判定為無效設(shè)備。所以每次上電先確認(rèn)這兩個 ID 是否正確是最基本的排查動作。2.2 能力列表PCIe 的高級功能入口從偏移 0x34 開始配置空間里掛了一條鏈表叫能力列表Capability List。每個能力項都有一個 8 位的 Capability ID 和一個指向下一項的指針。PCIe 設(shè)備必須實現(xiàn)的能力包括Power Management CapabilityID 0x01電源管理相關(guān)控制設(shè)備在不同電源狀態(tài)間切換。MSI CapabilityID 0x05消息信號中斷替代傳統(tǒng)的 INTx 中斷。現(xiàn)代 PCIe 設(shè)備基本都用 MSI 或 MSI-X。PCI Express CapabilityID 0x10這是 PCIe 特有的包含設(shè)備類型、鏈路狀態(tài)、鏈路能力等信息。調(diào)試鏈路降速、降寬問題時就是讀這里的 Link Status 寄存器。MSI-X CapabilityID 0x11支持更多中斷向量NVMe 和高速網(wǎng)卡常用。能力列表的遍歷方式是從 Capabilities Pointer 開始讀第一個能力的 ID 和 Next Pointer然后順著指針一直走直到 Next Pointer 為 0。這個遍歷邏輯在寫驅(qū)動或者調(diào)試工具時經(jīng)常用到。2.3 擴展配置空間4KB 里的后半部分PCIe 把配置空間從 256 字節(jié)擴展到了 4KB前 256 字節(jié)保持和 PCI 兼容后面的 3.75KB 是 PCIe 擴展配置空間。這里最重要的是擴展能力列表Extended Capability List從偏移 0x100 開始每個擴展能力有 16 位的 ID。常見的擴展能力包括Advanced Error ReportingAER高級錯誤報告能精確報告是哪種錯誤、發(fā)生在哪個層級。排查掉卡、鏈路錯誤時必看。Secondary PCI Express Extended Capability包含鏈路均衡相關(guān)的寄存器調(diào)試鏈路穩(wěn)定性時用得到。SR-IOV Capability單根 IO 虛擬化網(wǎng)卡和 FPGA 加速卡常用。TPHTLP Processing Hints提示 TLP 的處理方式對性能優(yōu)化有幫助。訪問擴展配置空間需要用 PCIe 的配置事務(wù)傳統(tǒng)的 CF8/CFC 端口只能訪問前 256 字節(jié)。在 Linux 下可以用lspci -vvv看到擴展能力的詳細(xì)信息或者用setpci直接讀寫。3. BAR 空間設(shè)備向主機申請的地址地盤BAR 是 Base Address Register 的縮寫直譯就是基地址寄存器。它位于配置空間里但它的作用遠(yuǎn)不止存一個地址這么簡單。BAR 是設(shè)備和主機之間關(guān)于地址空間的一份合同設(shè)備通過 BAR 聲明自己需要多大的空間、是什么類型的空間主機通過 BAR 告訴設(shè)備你的空間被映射到了這個地址。3.1 BAR 的探測機制寫全 1 再讀回BAR 的探測機制是 PCIe 里一個非常巧妙的設(shè)計。主機在枚舉時并不知道設(shè)備需要多大空間它的做法是向 BAR 寫入全 10xFFFFFFFF。讀回 BAR 的值。讀回的值中低位為 0 的位數(shù)就代表了空間大小的對齊要求。舉個例子如果一個 BAR 讀回來是 0xFFFFF000說明低 12 位是 0設(shè)備需要 4KB 的空間。如果讀回來是 0xFF000000說明低 24 位是 0需要 16MB 空間。這個機制的好處是設(shè)備不需要額外的寄存器來聲明大小BAR 自己就能表達(dá)。這里有個細(xì)節(jié)容易踩坑BAR 的最低位表示空間類型。bit 0 為 1 表示 IO 空間為 0 表示 MEM 空間。MEM 空間里 bit 1 和 bit 2 表示是否支持 64 位地址和是否可預(yù)取。所以實際計算大小時要把這些控制位排除掉。比如一個 64 位 MEM BAR低 4 位是控制位從 bit 4 開始才是地址對齊信息。寫全 1 探測 BAR 大小時一定要先保存原來的值探測完再恢復(fù)。有些設(shè)備的 BAR 在探測過程中如果被破壞可能導(dǎo)致設(shè)備進(jìn)入異常狀態(tài)。雖然規(guī)范說這是安全的但實際硬件實現(xiàn)千奇百怪謹(jǐn)慎為上。3.2 MEM BAR 和 IO BAR 的區(qū)別與選擇PCIe 支持兩種 BAR 類型MEM BAR 和 IO BAR。MEM BAR 映射到系統(tǒng)的內(nèi)存地址空間CPU 可以用普通的 load/store 指令訪問IO BAR 映射到 IO 地址空間需要專門的 IN/OUT 指令訪問。現(xiàn)代 PCIe 設(shè)備幾乎都用 MEM BAR原因很簡單IO 空間只有 64KB資源緊張而且訪問效率低。MEM 空間可以很大支持 64 位地址訪問方式統(tǒng)一。PCIe 規(guī)范雖然保留了 IO 事務(wù)但明確不推薦新設(shè)計使用。不過在實際項目中有些老舊的 FPGA 設(shè)計或者兼容性要求可能還會實現(xiàn) IO BAR。我的建議是除非有明確的兼容性需求否則一律用 MEM BAR而且優(yōu)先用 64 位 BAR。MEM BAR 還有一個屬性叫可預(yù)取Prefetchable。如果 BAR 聲明為可預(yù)取主機可以把它映射到帶緩存的內(nèi)存區(qū)域CPU 讀取時可以利用緩存提高性能。但可預(yù)取的前提是讀操作沒有副作用讀和寫之間沒有嚴(yán)格的順序依賴。對于 FIFO、狀態(tài)寄存器這類有副作用的地址絕對不能聲明為可預(yù)取否則會出現(xiàn)讀一次數(shù)據(jù)就丟一次的問題。3.3 64 位 BAR 的配對使用一個 64 位 BAR 需要占用兩個連續(xù)的 BAR 位置。比如 BAR0 和 BAR1 組成一個 64 位 BARBAR0 存低 32 位BAR1 存高 32 位。BAR0 的 bit 2 置 1 表示這是 64 位 BAR此時 BAR1 不再是一個獨立的 BAR而是作為高 32 位地址寄存器。這個配對關(guān)系在寫驅(qū)動和做地址映射時特別容易搞錯。我見過有同事在設(shè)備樹里只寫了 BAR0 的地址結(jié)果高 32 位沒配訪問直接飛到錯誤的內(nèi)存區(qū)域系統(tǒng)當(dāng)場掛掉。正確的做法是先讀 BAR0 判斷 bit 2 是否為 1如果是說明是 64 位 BAR需要同時處理 BAR0 和 BAR1。對于 FPGA 開發(fā)者來說在 IP 核里配置 BAR 時也要注意這個配對。Xilinx 的 XDMA IP 和 Intel 的 PCIe Hard IP 都有 BAR 配置選項選 64 位 BAR 時它會自動占用兩個 BAR 編號。4. 從枚舉到映射配置空間和 BAR 是怎么被主機處理的理解了配置空間和 BAR 各自的內(nèi)容接下來要把它們串起來看看主機從上電到設(shè)備可用到底經(jīng)歷了什么。這個過程叫枚舉Enumeration是 PCIe 系統(tǒng)啟動的核心流程。4.1 枚舉的完整流程枚舉是從根復(fù)合體開始沿著 PCIe 樹逐級掃描的過程。大致步驟如下掃描總線 0根復(fù)合體首先掃描自己下面的總線 0讀取每個可能的設(shè)備號0 到 31和功能號0 到 7的配置空間。讀 Vendor ID如果讀回來的 Vendor ID 是 0xFFFF說明這個位置沒有設(shè)備跳過。如果是有效值說明發(fā)現(xiàn)了一個設(shè)備。判斷設(shè)備類型讀 Header Type如果是 Type 1說明是橋設(shè)備需要繼續(xù)掃描它下面的總線如果是 Type 0說明是端點設(shè)備。分配總線號對于橋設(shè)備主機分配一個總線號范圍給它下面的子樹。探測 BAR 大小對每個端點設(shè)備寫全 1 探測每個 BAR 需要多大空間。分配地址主機根據(jù)所有設(shè)備的需求統(tǒng)一分配 MEM 和 IO 地址空間把基地址寫回 BAR。使能設(shè)備設(shè)置 Command 寄存器使能 MEM 訪問、IO 訪問和總線主控。配置中斷分配中斷號配置 MSI/MSI-X。加載驅(qū)動操作系統(tǒng)根據(jù) Class Code 和 Vendor/Device ID 匹配驅(qū)動。這個過程在 Linux 下可以用lspci -vvv看到結(jié)果在 Windows 下可以用設(shè)備管理器查看資源分配情況。調(diào)試時如果設(shè)備沒被識別就要順著這個流程一步步查是 Vendor ID 沒讀到還是 BAR 分配失敗還是 Command 寄存器沒使能。4.2 地址窗口與橋的轉(zhuǎn)發(fā)規(guī)則PCIe 樹里的每個橋設(shè)備都有三個地址窗口寄存器Memory Base/Limit、Prefetchable Memory Base/Limit、IO Base/Limit。這些寄存器定義了橋下面子樹使用的地址范圍。當(dāng) CPU 發(fā)起一個內(nèi)存訪問時根復(fù)合體首先判斷這個地址落在哪個橋的窗口里然后把事務(wù)轉(zhuǎn)發(fā)給對應(yīng)的橋。橋再往下判斷直到到達(dá)目標(biāo)設(shè)備。如果地址不在任何窗口里事務(wù)就會被丟棄或者報錯。這個機制解釋了為什么 BAR 分配失敗會導(dǎo)致設(shè)備完全無法訪問。如果主機沒有正確配置橋的地址窗口即使設(shè)備的 BAR 被分配了地址事務(wù)也到不了設(shè)備。我在調(diào)試一塊多級交換機的板卡時就遇到過交換機端口的 Memory Limit 設(shè)小了導(dǎo)致下游設(shè)備的 BAR 地址超出了窗口范圍設(shè)備能識別但訪問就報錯。排查這類問題時可以用lspci -vvv查看每個橋的窗口配置對比設(shè)備的 BAR 地址是否落在窗口內(nèi)。也可以用setpci手動調(diào)整窗口寄存器驗證。4.3 Linux 下的資源分配與 sysfs 接口Linux 內(nèi)核在啟動時會做一次完整的 PCIe 枚舉分配資源。如果 BIOS 已經(jīng)分配好了內(nèi)核一般會沿用 BIOS 的分配結(jié)果除非有沖突或者用pcirealloc參數(shù)強制重新分配。在 Linux 下每個 PCIe 設(shè)備在/sys/bus/pci/devices/下有一個目錄目錄名是domain:bus:device.function的格式。這個目錄里有很多有用的文件config配置空間的二進(jìn)制內(nèi)容可以用hexdump查看。resource0、resource1等BAR 空間的內(nèi)存映射文件可以用mmap映射到用戶空間直接訪問。enable寫入 1 使能設(shè)備。driver指向當(dāng)前綁定的驅(qū)動。對于 FPGA 開發(fā)者來說resource0特別有用。你可以寫一個簡單的用戶態(tài)程序mmap這個文件就能直接讀寫 FPGA 的寄存器不需要寫內(nèi)核驅(qū)動。這在調(diào)試階段非常方便。# 查看設(shè)備的 BAR 分配情況 lspci -vvv -s 01:00.0 | grep -A 10 Region # 用 setpci 讀取配置空間 setpci -s 01:00.0 0x04.w # 查看 sysfs 下的資源文件 ls -l /sys/bus/pci/devices/0000:01:00.0/resource*5. FPGA 開發(fā)中配置空間與 BAR 的實戰(zhàn)要點對于做 FPGA 的工程師來說配置空間和 BAR 不是抽象概念而是每天都要打交道的實際配置。無論是用 Xilinx 的 XDMA、Intel 的 PCIe Hard IP還是自己寫 PCIe 核BAR 的規(guī)劃都直接影響系統(tǒng)的易用性和性能。5.1 BAR 規(guī)劃把什么放進(jìn)哪個 BAR一個 PCIe 設(shè)備最多有 6 個 BAR怎么分配這些 BAR 是有講究的。常見的規(guī)劃方式BAR0控制寄存器和狀態(tài)寄存器通常幾 KB 到幾十 KB。這部分訪問頻繁但數(shù)據(jù)量小。BAR1DMA 描述符區(qū)域或者大塊數(shù)據(jù)緩沖區(qū)可能需要 MB 級別。BAR2/BAR3如果做成 64 位 BAR和 BAR0/BAR1 配對使用。BAR4/BAR5預(yù)留給擴展功能或者第二個功能。我的一般原則是把訪問頻繁的小寄存器放在一個 BAR 里把大塊數(shù)據(jù)緩沖區(qū)單獨放一個 BAR。這樣做的好處是小 BAR 可以映射成非預(yù)取的保證讀寫順序大 BAR 可以映射成預(yù)取的利用緩存提高吞吐。另外BAR 的大小要按 2 的冪次對齊。如果你聲明需要 3KB實際會占用 4KB。所以規(guī)劃時要留余量但也不要浪費太多地址空間。在資源緊張的系統(tǒng)里BAR 大小直接影響能不能枚舉成功。5.2 配置空間在 IP 核里的實現(xiàn)用 Xilinx XDMA IP 時配置空間的大部分字段是 IP 自動生成的但有幾個地方需要手動配置Vendor ID 和 Device ID在 IP 配置界面里填寫或者通過參數(shù)傳遞。Class Code決定操作系統(tǒng)加載哪個驅(qū)動比如 0x020000 是以太網(wǎng)0x010802 是 NVMe。BAR 配置選擇每個 BAR 的大小和類型XDMA 支持配置 BAR 為 MEM 或 IO32 位或 64 位。MSI/MSI-X選擇中斷方式XDMA 支持 MSI-X可以配置中斷向量數(shù)量。Intel 的 PCIe Hard IP 類似但配置方式不同。它的配置空間是通過 Avalon-MM 接口暴露的可以在邏輯里動態(tài)修改某些字段。這在需要動態(tài)改變設(shè)備 ID 或者 BAR 大小的場景下很有用。自己寫 PCIe 核的話配置空間的實現(xiàn)就更靈活了但也更容易出錯。最常見的問題是 BAR 大小聲明和實際實現(xiàn)不匹配導(dǎo)致主機分配了地址但設(shè)備不響應(yīng)。我的經(jīng)驗是配置空間里的 BAR 大小一定要和邏輯里地址譯碼的范圍嚴(yán)格一致差一個字節(jié)都可能出問題。5.3 DMA 與 BAR 的配合DMA 是 FPGA 加速卡的核心功能而 DMA 和 BAR 的配合有幾個關(guān)鍵點DMA 描述符的存放位置描述符可以放在 BAR 空間里由主機寫入FPGA 讀取也可以放在主機內(nèi)存里FPGA 通過 DMA 讀取。前者簡單后者靈活。地址轉(zhuǎn)換FPGA 發(fā)出的 DMA 讀寫請求地址是主機物理地址。如果 FPGA 邏輯里用的是虛擬地址或者偏移地址需要做轉(zhuǎn)換。XDMA IP 提供了地址轉(zhuǎn)換功能可以配置 AXI 地址到 PCIe 地址的映射。BAR 空間作為 DMA 目標(biāo)主機可以通過 BAR 空間直接讀寫 FPGA 的緩沖區(qū)這種方式叫 PIOProgrammed IO適合小數(shù)據(jù)量。大數(shù)據(jù)量還是要用 DMA。我做過一個高速 ADC 采集的項目ADC 數(shù)據(jù)先寫入 FPGA 的 DDR然后通過 DMA 搬到主機內(nèi)存。BAR 空間里放的是控制寄存器和 DMA 描述符數(shù)據(jù)緩沖區(qū)不映射到 BAR而是通過 DMA 直接訪問主機內(nèi)存。這樣設(shè)計的好處是 BAR 空間很小枚舉容易而且 DMA 帶寬不受 BAR 大小限制。5.4 調(diào)試 BAR 訪問問題的排查鏈路BAR 訪問出問題是最常見的 PCIe 調(diào)試場景。我總結(jié)了一個排查鏈路按順序走基本能定位問題確認(rèn)設(shè)備被識別lspci能不能看到設(shè)備Vendor ID 和 Device ID 對不對確認(rèn) BAR 被分配lspci -vvv看 Region 字段有沒有Memory at xxxx的分配結(jié)果如果顯示Region 0: Memory at unassigned說明 BAR 沒分配成功。確認(rèn) Command 寄存器setpci -s xx:xx.x 0x04.w讀出來Memory Space Enable 位bit 1是不是 1確認(rèn)橋窗口如果設(shè)備掛在橋下面檢查橋的 Memory Base/Limit 是否覆蓋了設(shè)備的 BAR 地址。確認(rèn)地址譯碼用setpci往 BAR 地址寫一個值再讀回來看是否一致。如果不一致說明地址譯碼有問題。確認(rèn) FPGA 邏輯如果前面都正常但讀寫數(shù)據(jù)不對就要查 FPGA 邏輯里的地址譯碼和寄存器實現(xiàn)。這個鏈路我用了很多次大部分 BAR 問題都能在前三步定位。第四步和第五步涉及橋和地址譯碼稍微復(fù)雜一些但只要有l(wèi)spci和setpci兩個工具也能查清楚。有一個坑特別隱蔽有些主板的 BIOS 會把 BAR 分配到一個和系統(tǒng)內(nèi)存重疊的地址導(dǎo)致訪問 BAR 時實際訪問到了內(nèi)存。這種情況在lspci -vvv里看不出來需要用cat /proc/iomem查看系統(tǒng)的內(nèi)存映射確認(rèn) BAR 地址沒有落在 System RAM 區(qū)域。6. 那些文檔里不會寫的踩坑經(jīng)驗配置空間和 BAR 的規(guī)范寫得很清楚但實際硬件和軟件實現(xiàn)里有很多規(guī)范沒覆蓋的細(xì)節(jié)。這些細(xì)節(jié)往往就是調(diào)試時卡住的地方。6.1 BAR 大小探測的邊界情況寫全 1 探測 BAR 大小時有一個邊界情況如果設(shè)備實現(xiàn)的 BAR 大小是 0也就是不需要任何地址空間寫全 1 讀回來還是全 1。這時候主機應(yīng)該跳過這個 BAR不分配地址。但有些主機會誤判給一個大小為 0 的 BAR 分配地址導(dǎo)致后續(xù) BAR 分配錯位。還有一種情況是 BAR 大小不是 2 的冪次。規(guī)范要求 BAR 大小必須是 2 的冪次但有些 FPGA 設(shè)計為了省地址空間聲明了一個非 2 冪次的大小。這種行為在枚舉時可能被主機糾正也可能導(dǎo)致分配失敗。我的建議是老老實實按 2 的冪次來別耍小聰明。6.2 熱插拔場景下的 BAR 重新分配PCIe 熱插拔是一個復(fù)雜的功能涉及到 BAR 的重新分配。當(dāng)設(shè)備被熱插入時主機需要重新枚舉這條總線給新設(shè)備分配 BAR 地址。如果之前的地址空間不夠可能還需要調(diào)整已有設(shè)備的 BAR 分配。這個過程在 Linux 下由pciehp驅(qū)動處理。實際使用中熱插拔失敗最常見的原因是地址空間不足。特別是 32 位 MEM 空間在很多系統(tǒng)上已經(jīng)很緊張了。如果新設(shè)備需要大塊 32 位 BAR很可能分配失敗。解決辦法是盡量用 64 位 BAR把地址需求放到 64 位空間里。另外熱插拔時橋窗口的配置也需要更新。如果橋的 Memory Limit 沒有擴展到覆蓋新設(shè)備的 BAR 地址設(shè)備雖然被識別但訪問會失敗。這個問題在調(diào)試熱插拔時經(jīng)常遇到需要手動或者通過腳本調(diào)整橋窗口。6.3 鏈路降速與 BAR 訪問的關(guān)系PCIe 鏈路降速比如從 Gen3 降到 Gen1或者降寬從 x4 降到 x1通常被認(rèn)為是物理層問題但實際上它也會影響 BAR 訪問。鏈路降速后配置空間和 BAR 的訪問延遲會增加如果軟件里有超時機制可能會誤判為設(shè)備無響應(yīng)。更嚴(yán)重的是鏈路不穩(wěn)定可能導(dǎo)致配置空間讀取錯誤比如 Vendor ID 讀出來是 0xFFFF 或者隨機值。這種情況下主機會認(rèn)為設(shè)備不存在或者設(shè)備故障直接跳過枚舉。排查這類問題時不能只看 BAR 分配還要檢查鏈路狀態(tài)寄存器確認(rèn)鏈路是否穩(wěn)定在預(yù)期的速度和寬度。AER高級錯誤報告是排查這類問題的利器。使能 AER 后任何鏈路錯誤都會被記錄到 AER 寄存器里包括錯誤類型、發(fā)生時間、涉及的 TLP 等。在 Linux 下可以用dmesg看到 AER 報告的錯誤信息。6.4 不同操作系統(tǒng)對 BAR 分配的差異Windows 和 Linux 在 BAR 分配策略上有一些差異這些差異在跨平臺開發(fā)時需要注意Windows對 32 位 BAR 的分配比較保守如果 32 位空間不足可能會拒絕分配導(dǎo)致設(shè)備無法啟動。Windows 對 64 位 BAR 的支持較好但需要設(shè)備正確聲明。Linux默認(rèn)沿用 BIOS 分配如果 BIOS 分配不合理可以用pcirealloc強制重新分配。Linux 對資源不足的處理更靈活但重新分配可能導(dǎo)致設(shè)備編號變化。我遇到過一塊 FPGA 卡在 Windows 下 BAR 分配失敗但在 Linux 下正常。原因是 Windows 的 32 位 MEM 空間被其他設(shè)備占滿了而這塊卡的 BAR 只支持 32 位。后來把 BAR 改成 64 位Windows 下也正常了。這個案例說明BAR 的類型選擇不只是技術(shù)問題還要考慮目標(biāo)操作系統(tǒng)的資源管理策略。6.5 配置空間讀寫失敗的常見原因配置空間讀寫失敗通常表現(xiàn)為讀回來全 F 或者全 0。常見原因包括設(shè)備未完成鏈路訓(xùn)練鏈路還沒建立配置空間自然讀不到。等鏈路訓(xùn)練完成后再讀。設(shè)備電源未就緒有些設(shè)備需要外部電源電源沒上或者時序不對配置空間不可訪問。配置事務(wù)路由錯誤總線號、設(shè)備號、功能號不對事務(wù)被路由到了錯誤的位置。設(shè)備處于復(fù)位狀態(tài)復(fù)位沒釋放設(shè)備不響應(yīng)配置事務(wù)。時鐘未穩(wěn)定PCIe 參考時鐘不穩(wěn)定鏈路訓(xùn)練反復(fù)失敗。排查時可以用示波器看參考時鐘和復(fù)位信號用協(xié)議分析儀抓配置事務(wù)確認(rèn)事務(wù)是否到達(dá)設(shè)備。軟件層面可以用lspci -xxxx讀原始配置空間看是否全 F。7. 從理解到落地把配置空間和 BAR 用起來講了這么多原理和坑最后回到實際使用上。配置空間和 BAR 不是只用來理解的它們在日常開發(fā)和調(diào)試中有一堆實際用途。7.1 用 sysfs 和工具快速查看設(shè)備信息Linux 下查看 PCIe 設(shè)備信息最常用的工具是lspci配合不同的參數(shù)可以看到不同層次的信息命令作用lspci列出所有設(shè)備的基本信息lspci -t以樹形顯示拓?fù)浣Y(jié)構(gòu)lspci -vvv顯示詳細(xì)配置空間信息包括 BAR、能力列表、鏈路狀態(tài)lspci -xxxx以十六進(jìn)制顯示完整配置空間setpci讀寫配置空間寄存器lspci -vvv -s 01:00.0查看指定設(shè)備的詳細(xì)信息除了lspci/sys/bus/pci/devices/下的文件系統(tǒng)接口也很重要。每個設(shè)備的config文件是配置空間的二進(jìn)制鏡像resource文件是 BAR 空間的映射信息。寫腳本自動化調(diào)試時直接讀這些文件比解析lspci輸出更可靠。7.2 用戶態(tài)直接訪問 BAR 空間對于 FPGA 調(diào)試用戶態(tài)直接訪問 BAR 空間是最方便的方式?;静襟E找到設(shè)備的 sysfs 路徑比如/sys/bus/pci/devices/0000:01:00.0/。打開resource0文件用mmap映射到用戶空間。通過映射后的指針直接讀寫寄存器。#include stdio.h #include stdlib.h #include fcntl.h #include sys/mman.h #include unistd.h int main() { int fd open(/sys/bus/pci/devices/0000:01:00.0/resource0, O_RDWR | O_SYNC); if (fd 0) { perror(open); return -1; } // 假設(shè) BAR0 大小為 64KB size_t bar_size 64 * 1024; volatile unsigned int *bar mmap(NULL, bar_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); if (bar MAP_FAILED) { perror(mmap); close(fd); return -1; } // 讀偏移 0x00 的寄存器 unsigned int value bar[0]; printf(Register at offset 0x00: 0x%08X\n, value); // 寫偏移 0x04 的寄存器 bar[1] 0x12345678; munmap((void *)bar, bar_size); close(fd); return 0; }這段代碼的關(guān)鍵點是O_SYNC標(biāo)志和volatile指針。O_SYNC保證寫操作立即生效不會被緩存volatile防止編譯器優(yōu)化掉看似冗余的讀寫。對于有副作用的寄存器這兩個都很重要。7.3 在 FPGA 邏輯里實現(xiàn)配置空間和 BAR如果自己寫 PCIe 邏輯配置空間的實現(xiàn)需要覆蓋規(guī)范要求的字段。最小實現(xiàn)包括Vendor ID、Device ID、Revision ID、Class CodeHeader Type、Cache Line Size、Latency TimerBAR0 到 BAR5Command 和 Status 寄存器Capabilities Pointer 和能力列表BAR 的實現(xiàn)需要做地址譯碼當(dāng) PCIe 事務(wù)的地址落在 BAR 范圍內(nèi)時把事務(wù)轉(zhuǎn)發(fā)到內(nèi)部邏輯否則返回 URUnsupported Request響應(yīng)。地址譯碼的邏輯不復(fù)雜但要注意幾點BAR 的地址范圍要和配置空間里聲明的大小一致。64 位 BAR 要同時比較高 32 位和低 32 位地址。預(yù)取 BAR 和非預(yù)取 BAR 的處理方式不同預(yù)取 BAR 可以接受更大的突發(fā)長度。地址譯碼的時序要滿足 PCIe 的延遲要求不能引入太多組合邏輯。7.4 配置空間和 BAR 在虛擬化場景下的變化在虛擬化環(huán)境里配置空間和 BAR 的處理會多一層。虛擬機監(jiān)控器Hypervisor需要把物理設(shè)備的配置空間和 BAR 空間映射到虛擬機里讓虛擬機里的操作系統(tǒng)以為自己在直接訪問硬件。這個映射過程涉及到地址轉(zhuǎn)換虛擬機里的 BAR 地址是虛擬地址Hypervisor 需要把它轉(zhuǎn)換成物理地址。如果設(shè)備支持 SR-IOV每個虛擬功能VF都有自己的配置空間和 BARHypervisor 需要管理這些資源的分配。在虛擬化場景下調(diào)試 PCIe 問題要注意區(qū)分是物理設(shè)備的問題還是虛擬化層的問題??梢韵仍谒拗鳈C上確認(rèn)設(shè)備正常再在虛擬機里排查。lspci在虛擬機里看到的設(shè)備信息可能和宿主機不同因為 Hypervisor 可能修改了某些字段。8. 寫在最后配置空間和 BAR 空間是 PCIe 軟件接口的基石理解了它們就理解了 PCIe 設(shè)備是怎么被主機發(fā)現(xiàn)、配置和訪問的。我剛開始接觸 PCIe 的時候也覺得這些東西瑣碎不如高速信號和 DMA 來得刺激。但后來發(fā)現(xiàn)大部分調(diào)試問題都出在這些瑣碎的地方。Vendor ID 讀不對、BAR 分配失敗、Command 寄存器沒使能這些問題看起來簡單但如果沒有系統(tǒng)的理解排查起來就是碰運氣。實際項目中我養(yǎng)成了一個習(xí)慣拿到一塊新的 PCIe 板卡先不急著跑功能而是用lspci -vvv把配置空間完整看一遍確認(rèn) BAR 分配、鏈路狀態(tài)、能力列表都正常。這個習(xí)慣幫我提前發(fā)現(xiàn)了很多問題比如 BAR 大小聲明錯誤、鏈路降速、MSI 配置不對等?;ㄊ昼娮鲞@個檢查比后面花幾個小時排查要劃算得多。對于 FPGA 開發(fā)者來說配置空間和 BAR 的規(guī)劃應(yīng)該在設(shè)計初期就確定好而不是等到調(diào)試時再改。BAR 的大小、類型、數(shù)量Class Code 的選擇MSI-X 向量的數(shù)量這些都會影響后續(xù)的驅(qū)動開發(fā)和系統(tǒng)集成。前期多花點時間規(guī)劃后期少踩很多坑。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
人妻丝袜一区二区三区在线| 五月丁香| 欧亚乱色熟一区二区三四区| 乱论91| 91free福利| 99久久九九| 国产免费大片| 黄页视频网站野外| 97亚洲资源| 中文字幕精品亚洲熟女| 色欧美综合| 超碰97人妻免费在线| 欧美性爱无码一区二区三区| 久久久久中出| 屁股久久久久久| 夜夜草网站| 囯产精品一区二区三区线|亚洲人成无码网WWW动漫|国产精品免费一级... | 丰满少妇高潮无码| 欧美三级偷拍| 狠狠色伊人亚洲综合网站色| 久久久久9| 日本东京热大香蕉a片| 九九亚洲色在线观看| 97国产精品视频| 夜间福利片1000无码| 天天色播| 欧美亚洲天堂| 色噜噜人妻丝袜AV资源| 国产操操日韩三级黄| 色婷婷电影| 亚欧操逼片在线观看| 久久精品国产亚洲AV无码电影| 日韩探花精品在线视频| 精品国产99999| 色婷婷综合网站| 天天搞欧美| 日韩av不卡在线观看| 都市久久精品激情亚洲| 伊人久久88国产女| 26uuu性物| 嗯嗯啊好大| 国产精品ⅴ无码大片在线看.| 亚洲。日韩。欧美| 久久美女国产| 超碰久草| 97精品97| 欧美日不卡| 国产网红精品| 国产一区二区三区高清视频| 欧美成人综合| 伊人久久大香蕉线AV五月天| 免费啪啪啪网站18岁| 国产午夜精品一区二区三区牛牛| 97超碰无码网| 美女啊啊啊啊啊啊啊| 久久亚洲精品成人av| 密臀在线视频| 熟女久久久| 精品人妻av区天天看片| 使劲用力艹少妇视频一区二区| 26uuu性物| 自拍第一页| 禁止观看美女黄| 伊人五月天激情| 国产精品自拍视频| 懂色Av一区二区三区| 男人天堂站| 午夜寂寞欧美| 超碰天天操你比| 久操婷婷| 内射中出日韩在线观看视频| 亚洲国产一区二区三区在线| 亚洲第2页| 美女视频尤物网在线看| a片 xxxx受爽视频| 97免费在线观看视频| 亚洲少妇视频| 97免费视频在线| 激情婷婷黑人91| 欧美一级专区免费大片| 91少妇香蕉久久精品| 国产suv精品一区二区四区999| 啊…啊…操我用力操我 | 揉揉揉夜夜| 蜜区区视频79| 九九九九九九视频免费| 影音先锋乱伦资源| 国产精品三级视频网站| 日韩欧亚太美不卡| 日韩电影天堂视频二区三区| 午夜视频久久久| 91 丝袜在线播放| 国产最火爆久久国产网站网站| 亚洲色婷婷久久91| 13小男生GAY自慰脱裤子| 欧美色图第一页| 久久久91| 国产中文精品一区二区在线观看| 国产精品一二三区福利| 一道本东京热加勒比一区二区三区| 九一亚洲国产免费| 色色九区| 中文字幕后石码三区四区| 国产午夜在线观看视频| 啊啊啊啊啊啊啊国| 精品熟妇视频一区二区| 日韩免费大片一级播放| 久久精品72| 92性色国产午夜福利在线661| 麻花传媒免费网站在线观看| 久久久久久亚洲精品不卡人乳| 夜夜夜夜夜夜夜夜夜狠狠狠狠狠狠狠 | 久婷婷一区| 亚州男人的天堂| 99re98| 超碰狠狠操| 亚洲区限制级| 可以免费看黄片的视频| 精品视频日日夜夜| 九九九九精品| 综合网久久| 玖色av| 天堂69亚洲精品中文字| 动漫片子网站3黄| 91欧美经典| 国产精品三级视频网站| 中文 人妻 制服| 国产精品人人爽人人做可爱福利| 99999精品成人| 亚洲 小说 欧美 激情 另类| 男女91| AAAA级日本片免费视频| 亚洲欧美九九九| 精品玖九九久| 国产 日韩 欧美 人妻 熟女 中文 69人妻精品一区二区绯色 | 不卡超碰护士AV在线免费播放| 国产久久一区二区| 翔田千里av一区二区三区| 精品一区99999| 国产日产精品久久快鸭的功能介绍| 中文字幕55555| 亚洲综合99999| 精品在线78| 久久久久亚洲AV无码专区少妇| 一区AV| 69XX一中文字幕人妻91 | 99re在线观看| 伊人麻豆传媒| 日韩在线地址一| 国产精品久久久久久久久久梁医生| 在线αⅴ| 亚洲AV无码国产精品久久久久| 日本污ww视频网站| 久久久久密| 久久久精品国产亚洲伊人| 91最新综合| 97超碰资源网| J?P?NESEHD熟女熟妇伦| 麻豆国产96在线| 欧美综合骚| 亚州中文字幕超碰97| 97 国产精品| 日韩兔费看黄片| 亚洲成人久久一区二区| 亚洲免费精品一区| 2017大香蕉国产精品久久| 日本免费一区二区不卡 | 九九热免费视频| 99re8超碰| 四虎精品永久在线观看| 精品九九国产无码| 亚洲不卡不卡中文字幕不卡| 色拍偷亚洲| 成人羞羞视频国产| 91粉嫩萝控精品福利网站_精品影音先锋国 | 日韩欧美中文字亚洲慕| 国产偷人伦激情在线观看| 能在线播放的国产三级| 久久久com| 丁香7月婷婷| 色网站导航大全| 日韩性爱网址| 久久视频,这里只有精品| 国产捆绑一区| 噜噜噜狠狠色综合| 久久久久久性爱视频| 亚洲男人综合网| 四虎精品永久在线播放| 久久精品99| 99精品丰满人妻| 久久97| 91色久| 视频黄站| 精品亚洲国产成人av网站| 日韩精彩免费| 亚洲码在线中文在线观看| 99性爱视频| 91熟女视频网| 岛国视频免费在线观看| 天天草AV| 99久久精品国产高潮| 色色综合97| 白嫩少妇| 日本片日本片祼观看网站在线看中文版网页在线看| 啊啊啊啊啊啊啊在线| 不卡中文字幕aⅴ在线| 青娱乐亚洲热| 99re28在线观看| 以及麻豆国产入口在线观看免费| 观看免费区二区三区二| 欧美淫穴| 一区二区三区美女超清| 久久嫩草国产成人一区| 99久久亚洲精品无码毛片潘甜甜| 熟妇高潮一区二区免费视频| 国产精品久久天天干| 精品99999久久久久久| 校园春色综合网| 天天日天天舔| 后入式免费视频| 开心五月激情网| 亚洲丝袜诱惑| 91殴美大片| 久久午夜鲁丝片| 欧美精品自慰系列寂寞少妇| 哈哈操 大香蕉| 午夜天堂精品久久久久91| 国产免费内射视频| 97精品国产97久久久久久户外免费| 九九九九精| 日产狠狠干| 日本成熟少妇A∨网站| 久久综合女优| 日本熟妇人妻中出视频| 超碰人妻久久| 97视频7| 亚洲日本激情| 青青草一区二区三区四| www.99色| 亚乱色| 女人18精品一区二区三区| 欧美色五月| 热99re69精品8在线播放| 看黑人AV不卡| 久久毛卡| 伊人四虎综合| 美女淫穴| 丁香五月性爱| 夜夜精品视频| 亚洲日本天堂| 国产精品久久久亚洲一区| 豆花视频操逼网址| 国产suv一区二区三区6| 四虎免费看黄| 99色在线| 一级啊性爱在线视频| AV女资源| 夜夜操av亚洲一区二区| 天天爽天天爽| 国产熟女完整版中字| 色色九区| 久久久久久久久国产| 日韩肏逼视频| 五十路成人在线视频二区三区| 久久天堂婷婷网| site:sinbotex.com| 天天超级碰碰碰| 激情五月综合| 日韩三级天堂在线观看| 91影库| 男人天堂新| 加勒比久久av| 久久999久| 六月天婷婷| 丰满岳乱妇一区二区三区| 中文字幕无码不卡啪啪| 久久神马影院| 伊人97超碰| 去干网最新版| 最近2019中文字幕国语免费版| 热99这里有精品综合久久| 五月天人妻综合| 午夜精品久久久久久久99热影院| 黑操B| 国产精品99久久久www| 蜜乳中文字幕a在线| 九九热re99re6在线精品| 日本最新免费韩国1区2区视频播放| 激情专区综合| 日本黄 R色 成 人网站| 欧美人黑A片无码免视费| 久艹免费| 78精品| 亚洲综合贴图91| av天天在线观看| 欧美视频一区二区在线| 91小视频| 国产偷拍自拍在线视频| 久久人人爽爽人人爽人人片αV| 亚洲人成网站7777| 欧美少妇色图| 婷婷人妻激情| 久久99干一本高清| 人妻夜爽夜夜爽| 锕锕好爽 死我在线观看| 男人的天堂色偷偷青青草视频婷婷网| 中文字幕视频一区视频二区| 一区二区激情国产熟女| 色婷婷五月天| 放黄片放3级黄片没穿衣服| 欧美人妖内射| 伊人麻豆传媒| 亚洲 小说 欧美 激情 另类| 乱伦一区二区三区‘| 狠狠操官网| 国内精品久久人妻性色av| www.yeyecao| 久久亚洲欧美中文字幕国语| 日韩Va亚洲va欧美Ⅴa久久| 亚洲图片日本AⅤ欧美在线| 在线无码视频| 日韩免费看黄片| 五月综合激情网| 91oumei| 国产成人主播| 青青青在线高清视频在线一二三四区 | 青草av在线| 激情婷婷五月天| 久久超碰爱| www九九热| 久久国产精品一级二级三级| 开心五月天激情网| 色性综合| 天天看人人操屄犊摸阴| 成人久久久精品| 麻豆一区二区三区在线看 | 婷婷五月天影院| 精品一区二区成人动漫| 色99在线| 国产白嫩精品久久| 99re在线精品78| 欧美人妖内射| 91丨国产丨白浆秘 洗澡动漫| 日骚逼视频| 久久免费99精品久久久久久| 国产精品久久久久中文字幕| 丁香五月天堂网| 97色爱| 久久精品高清无码一区| 三四中文字幕| 第四色奇米影视777| 黄片免费久久久久久久| 手机午夜电影神马久久| 国产人妻天天干精品| 97AV爱| 成人熟女区| 色欧美在线| 国产美女销魂在线观看不卡| 欧美亚洲日韩人妻在线观看| 超碰无码五月97| 国产精品自拍视频| 人妻久久久| 素颜老阿姨乱情色| 74成人在线| 久久精品免费| 强乱老妇中文字幕| 国语国产操逼伊人AV网| 亚洲男人的天堂一区二区| 蜜臀久久99精品久久久久久成人小说 | 97超碰欧美精品| 国产操逼逼网| 天天看特黄的免费网站| 精品一区二区国产日韩| 久久午夜伦| 久久风骚城市| 亚洲av无码成人精品国产| 亚州精品丝袜-不卡成人免费| 欧美96精品在线| 手机在线播放国产福利| 日欧毛片久久| 乱伦日本中文自拍| 熟女一区二区| 韩国一级做a久久久久| 99热这里是精品| 美女天天干| 三级网色| 人人操人人狠狠操| 干美女人妻| 另类一区| 亚洲文学偷乱拍啪啪啪啪| 操逼啊啊啊91| 青青草女人天天干| 色嗨嗨在线| 偷拍2020| 久久久久久久久久久免费精品| 丝袜综合| 操操逼操操逼操操逼逼| 国产亚洲日本| 精品一区二区人妖| 校园春色中文字幕AV| 欧美性爱三区二区| 欧美 综合 亚洲| 操比国产| 日本精品五区| 高清不卡国产| 嗯啊抽插大香蕉网页| 性性久久| 爱做久久久久久| 大屁股熟女一区二区三区| 18禁的网站在线| 亚洲91射| 性爱久久| 激情 欧美 亚洲 小说| 中日无幕一二三四区| 无码高清操逼网址| 91在线丝袜视频| 在线岛| 国产亚热在线久久| 伊人99热| 可以免费看黄片的视频| 风月影院男女十八禁| 插欧洲美女欧美精品| 婷婷色香伊人| 96免费视频在线| 一级特级aaaa毛片免费观看| 亚洲色人阁| 91色黑人少妇| 日本熟妇人妻中出视频| 亚洲另类春色| 欧美日韩夜夜| 九月丁香婷婷色| 啊啊啊啊啊啊啊好爽不要| 欧美日产国产在线成人第一区| 亚洲有码第一页| 国产麻豆一级精品视频| 特色a在线上| 后X久久| 国产精品久久久久久久AV大片 | 男人的天堂色偷偷青青草视频婷婷网| 操逼日韩无码 | 欧美 亚洲 另类 综合| 久久ww| 亚洲精品国产日韩无码AV永久免 | 97色欧州| av国产无码| 强奸乱伦免费网站| 91麻豆一二三区| 男人的天堂不卡一区二区| 少妇人妻好深太紧了vr91| 亚洲天堂电影网99999| 国产白嫩精品久久| 涩五月婷婷| 国产亚洲精品美女久久久久久2021| 色约约一区=区三区| 伊人一区二区三区| 97激情97激情| 色婷网| 99国产在线 精品 视频| 亚洲精品乱码久久久久久蜜桃麻豆| 亚洲AO在线| 丝袜六区| 人人操人人狠狠操| 国产av美女被艹的乱叫| 黄色操人| 久操操AV电影| 人人性爱视频免费| 天天久久| 日韩大香蕉| 国产一区二区精品久久久不卡蜜臀| 人妻酒店出差被中出免费在线播放| 亚洲一区二区三区久久 亚洲一区二区| 操逼国产免费| 国产精品亚洲一级av第二区| 97在线视频观看| 操熟女91| 亚洲做性| 亚洲怡春院| 五月开心久久AV官网| 手机不卡视频不卡在线一二三区| 有码人妻系列| 91久青| 久久久久久人妻| 亚洲高清在线| 色五月婷婷中文字幕| 久久男女激情视频网站| 国产无马视频| 偷看洗澡一二三区美女| 亚洲欧美日韩夜夜| 92人人操人人| 97操操| 91一起操| 免费视频无码| 天堂资源欧美| 男人的天堂激情| 欧美性暴力猛交XXXX| 玖玖97综合| 欧美日韩情色一区二区| 97人人中文网| 黄呦呦在线| 婷婷15月天青娱乐| 久热大香蕉网站| 色777999综合| 搡老女人老熟女91老熟女综合网| 欧美超碰在线| 1人人看人人摸人人操| se吧提供91精品国产91久久久久久 | 日韩影片中文字幕一区二区三区| 青青草视频久久久久| 精品亚州18| 无码人妻精品一区二区三区九九| 日韩大香蕉精品在线视频| 国产免费一区| 精品久9| 国产精品视频91久久| 91影库| 国产做?爰片久久毛片?片美国| 中文字幕日本久久| 日韩女优中文字幕| 五月开心久久AV官网| 欧洲精品久久| 国产在线播放成人免费| 2019天天干天天操| 91无人区卡一卡二卡三乱码入口最新版:能让用户有更多选择的选择-经典说说-爱 | 青青草成人视频在线观看二区| 很很很很操| 九九九九一级| 综合色一区三区二区| 一区二区三区四区五区高清无码永久视频| 色综合20p| 国产精品禁久久久精品| 激情天天视频| 婷婷综合五月天| 久插综合| 蜜臀一区二区三区亚洲最新章节在线观看 - 高清蜜臀一区二区三区亚洲全集播放 | 国产精品久久久久久无码红治院| 丝袜美腿诱惑亚洲欧美视频在线观看 | 插穴性爱视频在线观看| 熟女丰满人妻一区| 日韩丨制服丨中文|在线| 日本媚薬中文字幕在线| 精品亚洲黄色片 国产精品导航一区二区 | 亚洲码在线中文在线观看| 亚洲第一狼人丝袜美女另类 | 久久精品国产亚洲AV片多多 | 免费啪啪一级视频| 正在播放:深夜激情大战,自带黑丝袜全力输出骚穴 | 国内精品嫩模A∨私拍小视频| 人人操,操人人| 蜜桃久久综合视频| 天天日天天干天天摸天天操| 天天干干天天干干| 99精品在线| 操逼短片| 无码久久亚洲高清,| 狠狠狠狠狠干| 亚洲激情欧美色图| 亚洲国产欧美一区二区潘金莲 | 在线色导航| 婷婷午夜| 亚洲激情欧美色图| 精品国产乱码久久久久久口爆网站| 看日韩美女二区三区免费操逼视频| 制服诱惑亚洲一区二区三区在线观看| 中文字幕后石码四区五区| 黄色高清无码无码破解免费暗网 | a天堂视频| 艳尻美人妻| 中日韩免费看男女操逼大全| 婷色五月天| 亚洲综合贴图91| 啊啊啊啊操死我| 欧美视频在线视频免费va| Aa东京男人的天堂| 美国精品国产精品| 亚洲第一页欧美| 亚洲久9| 骚逼高潮久久精品| 999国产精品999| 国产成人综合在线播放| 国产免费永久精品无码| 亚洲高清欧美总合| 国内成人圈中文字幕无码视频| 四虎AV影视国产精品亚洲精品| 色穴精品| 一本久道久久综合狠狠爱| 久久精品视-一级做a爰片性色毛片16美国-中国女与老外在线精品 | 亚洲Av无码成人精品国产| 国产蜜臀在线| 老汉网| 亚洲成人在线播放| 欧美一区二区三区另类精品| 日本三级R| 377p欧洲日本亚洲大胆| 亚洲成人无码影院| 国产自产自拍| 玖玖资源综合在线视频| 亚洲欧美成人在线| 99热| 日韩紧密久久| 先锋精品av色鲁| 欧美欲色| 97视频www| 97资源亚洲| 精品久| 日产欧美电影一区二区三区| 能在线播放的国产三级| 亚洲成a人在线观看久| 每日更新AV| 午夜大香蕉| 国产青青美女玩逼视频| 亚洲好色人妻| 99久久久无码国产精品性啊聊| 国产二区三区免费视频| 粉嫩不卡一区二区性爱 | 日韩在线国产字幕| 做爱A级亚欧| 99热婷婷| 亚洲 欧美 综合 91| 一本色道久久综合精品婷婷| 精品久久久中文字幕不| 欧美日日夜夜| 九七超碰人人乐| 九九精品无码专区免费| 亚洲色色色| 色悠久久久av| 午夜福利国产欧美日韩夜夜| 熟女六十路| 欧美婷婷久久| 91久久婷婷| 黄色视频特级毛片| 日韩成人午夜精品久久高潮| 日日夜夜骑| 国产精品极品美女视频| 日韩国产中文字幕| 日本黄页视频在线观看| 一级片在线观看高清无码| 校园春色 男人天堂| 四虎精品亚洲| 韩国三级理论在线| 97在线观视频免费观看| 国产精品久久久久无码Av网曝门| 97久久精品亚洲| 欧洲色综合| 日本亚洲熟女视频| 91狠狠狠| 国产久久久久久久久一区二区 | 中韩中文字幕在线观看| 久久亚洲AV成人精品无码| 成人日韩中文字幕| 中文字幕美女91| 超碰性爱97| 久久亚洲中文字幕视频| 欧美狠狠弄| 翔田千里AⅤHD无码| 中文字幕一区av| 69精品| 久99热| 性91| 色 亚洲 91| av无码av无码专区| 大香交| 91碰碰碰| 婷婷av在线中文字幕| 夜夜狠狠躁日日躁色视频| 日韩欧美成人午夜福利| 四虎影视永久在线观看精品免费网站 | 中文字幕精品丝袜| 日韩黄色av中文字幕| 人人爽夜夜玩视频| 亚洲综合春色| 亚洲AV无线| 97亚洲在线| 无卡一区=区| 大香蕉宗合网在线| 久久精品欧美一区二区三区不卡| 亚洲97网站| 老女人爆菊| 嫖老熟女A片一二三区| 欧美性性性| 久久九操在线观看| 啊啊啊97视频| 日韩精品99999| 熟女精品va中文字幕| 好色综合| 上床啊啊啊| 久久中久文96| 97天天爽| 免费农村成人少妇人妻Aa一区二区视频| 亚洲av夫妻操穴网| 91爆操视频| 国产亚洲色婷婷久久99精品91葵花宝典 | 曰本人妻人人澡人人夹| 大色网久久| 射丝袜大香蕉| 性老妇一区二区三区| 99精品在线| 亚洲 自拍偷拍 欧美| 免费1级a做爰片观看| 九九九精品| 国产丁香精品露脸视频| 神马久久久久眼| 90后性网国产欧美| 亚洲欧洲日韩国产自在线| 美国精品国产精品| 欧美人与动性人交a| 天美传媒AV在线| 日韩无码服务区| 97欧美资源| 91爱| 国产欧美日韩一区二区三区| 国产精品露脸在线观看| 国产高清精品一区二区三区毛片 | 国产一级137片内射麻豆| 国产传媒午夜理伦精品| 加勒比在线观看一区二区| 欧美精品99久久久**| 偷拍自拍在线视频观看| 91在线无码精品秘 软件| 另类一区| 亚洲天堂另类小说男人| 嗯嗯啊好大| 91亚.色| 日韩熟女无码| 久久亚洲AV无码专区国产精品 | 九九九久久久| 狠狠中文字幕| 天堂岛av| 欧美亚洲高清不卡| 97视频免费播放| 国产无码精品高清| 亚洲成人综合在线| 麻豆人妻少妇在线免费观看| 骚货 中文字幕 av| 翔田千里A片一区二区| 亚洲欧美在线观看免费| 九九热精品在线| 老熟妇综合| 国产一区在线播放| 亚洲强奸乱伦影视网| 日本免费不卡二区| 在线观看啊啊啊啊啊| 狠狠婷婷亚洲中文综合久久| 自慰白浆在线观看| 人人噜夜夜操| 我想要啊 啊 啊| 免费一级黄色录像影片| 97亚洲国产影视| 欧美宗合色| 999国产精品999| 日韩三级在线观看mp4| 天天综合网91| 牛黄色久午久| 中精品一区二区三区| 欧美强奸乱能| 久插综合| 欧美激情性久久久久久| 97国产超湿| 中国人高清www色视频免费| 99精品久久| 亚州一区二区| 亚洲有码 欧美精品| 欧美日韩传媒| 睡产熟女乱伦| 国产人妻久久精品一区二区三区| 艹比视频国产精品| 午夜福利 成人 91| 亚洲操操操| 久久99干一本高清| 色爱综合网| 麻豆三极片| 天天综合网久久ww| 搡老女人老妇女AAA一VU麻豆| 一区二区三区成人| 久久激情综合| 99草精| 精品国产91久久久久久一区黄无| 五码视频在线观看| 中文在线视频| 女人高潮抽搐喷水视频网站| 99色视频| 吖在线不卡一区二区国产剧情| 屌妞视频久久久久久久| 午夜福利视频在线一区| 色五月AV| 国内外毛片在线观看| 精品 码产区一区二-1080P高清在线www-B029AV| 久操电影网| 日韩在线视频1234| 欧亚性爱在线视频| 91宗合网| 免看60秒涩涩视频| 日欧美色| 久久毛卡| 日本有码久久| 无码日韩网站| 欧美97网| 大香蕉欧美国产日韩高潮| 99爱精品| 日韩婷婷| 玖玖玖玖精品国产剧情| 影视综合无码少妇| 日韩性爱小视频| 欧洲一区二区| 九九热re99re6在线精品| 久久久久久久六六| 欧美亚洲高清不卡| 五月天婷婷久久| 日本免费亚洲欧美| 激情综合二| 午夜电影在线观看无码专区| 92性色国产午夜福利在线661| 乱色老一区二区三区的观看方式| 亚洲男人的天堂网| 亚洲人在线| 2010男人的天堂| 激情婷婷丁香| 天天淫人人妻日日色| 日本三级韩三级99久久| 久久久久久午夜男人的天堂| 在线观看中文av字幕| 欧美视频中文字幕区| 自拍大香蕉乱插| 九九久久99| 人妻少妇精品一区二区三区| 97爱免费插| 欧美少妇第一页| 老鸭窝黄色视频网站| 中文字幕乱码人妻一区二区三区,99精品 | 亚欧美综合| 综合网97| 97av在线观看| 在线a v| 激情99| 日韩国语字幕| 国桃视频产巨乳精品一区二区在线| 肉丝无码中文高清| 日本一区二区不卡精品| 日韩一区二区三区四区五区| 1禁看欧美黄片免费看| 久热大香蕉| 一本一首道人妻少妇免费久久| 欧美色图97| 亚洲天堂久久久久久粉红视频| 成人一道本免费视频| 成年女人黄网站| 熟女丰满人妻一区| 亚洲日韩资源| 黄色片一区二区三区四区五区| 综合色99| 九九国产热| 欧美性爱第一页久久| 亚洲av强奸乱伦| 嗯嗯,好大,好爽,好骚| 蜜臀无码一区二区| 自拍偷拍 日韩欧美| 国产一级片| 天天日天天干天天摸天天操| ji熟女.com| 亚洲精品天天影视综合网 | 97九色人妻| 九七超碰人人乐| 综合影视国产无码| 日本一区99| 一级AV性爱| 亚洲天堂另类小说男人| 中文字幕丰满子伦无码专区在线视频最新 | 久久成年片色大黄全免费网站| 五月天精品| 久久久久深夜无码| 日本国产亚洲一区在线观看| 91精品无码人妻系列| 超碰97在线 欧美 国产| 思思久热在线精品66| 九久久九精品视频| 五月天婷婷在线看| 中文字日本乱码| 色在线亚洲视频www| 天天摸天天插天天日| 久久性爱视频99| 国产熟妇一区二区| 天天日B夜夜干B时时操B| 91亚洲不卡一区| 日韩无码黄色片| 久久亚洲人妻| 在线观看日韩av不卡| 91岛国动作片| 国产精品网站免费| 亚洲成A∨人影院在线欢看| 99久久99九九99九九九| 久久精品视-一级做a爰片性色毛片16美国-中国女与老外在线精品 | 日本蜜桃| 久久久18| 吖在线不卡一区二区国产剧情 | 日韩精品怡红院| 欧美日韩第一页| 亚洲无码偷拍| 91热色| 欧美激情 日韩精品| 日本三级韩三级99久久| 欧美日韩国产成人高清| 久久久熟妇熟女国产| 717影院理论午夜伦八戒| 日韩欧美性吧婷婷乱伦大香蕉| 国产后入清纯| 亚射在线| 青青草在线成人视频| 色欲Av人妻精品一区二| 蜜臀AV午夜精品久| 久久视频少妇美女| 极品粉嫩少妇视频| 岛国艾薇凹凸视频天堂| 国产SV一线| 成人日韩欧美| 成人一级性爱| 亚洲欧洲成人在线电影| 99re6国产精品99re| 午夜精品99久久久久传媒| 国产亚洲精品A在线观看下载| 国产欧美后入| 天天天天天天天天综合| 97一区二区蜜臀| 啊啊啊好湿久久| 在线观看综合精品亚洲| 午夜无码精品免费看性色| 蜜乳AV一区| 亚欧无码在线| 亚洲啪AⅤ永久无码| 呦呦影院| 美国aaaaa一级黄片| 色嗨嗨在线| 97国产成人精品免费视频| 69XX一中文字幕人妻91 | 国产一级特黄大片处女| 日韩一区二区高清在线观看的| 国产精品天堂| 大屁股人妻女教师撅着屁股| 狠狠操,使劲操| 操逼1区| 色婷婷电影网| 亚洲高清国产理伦片| 操比国产| 国产久久久9999| 96久久久精品| 天天伊人| 眼镜人妻101.com| 操美女高潮抽搐白浆| www.狠狠干.coom| 青青伊人久久| 男人天堂东京热| 欧美的性爱网站免费| 黄片在线免费在线观看| 情侣开房子拍 日韩无码 女的很漂亮| 国产SV一线| 亚洲中文字幕av | 国产精品九9| 中出20p| 欧美日韩色综合网| 久久婷婷国产一区二区色| 热久日综合| 欧美亚洲丝袜美女电影| 中文字幕av片| 亚洲青色欧美| 久操免费电影| 九九草| 久久精品无码熟妇一区二区三区视频导航| 口爆欧美91| 天天看天天综合成人网| 日日爱99| 久久久久久久久久久久久久久乱码| a片偷拍视频| 亚洲日韩少妇一道本视频| 久久丁香| 99操逼| 日本三级日本三级三级人妇四虎| 日本成熟少妇A∨网站| 操逼无毒无码免费视频| 无码外流操逼视频| 综合天天。| 天美av在线观看| av网站在线看| 神马久久网| 六月婷婷综合| 国产www色在线观看| 一区二区三区看视频| 久久天天摸| 国产精品麻豆免费视频| 欧美人妻制服| 一级黄碟在线看| 热久久这里只有精品| 收看日本人日bb| 久久久久深夜无码| 中文久久一区| 五月香婷婷| 性色av大全| 欧美亚洲韩国视频十五区| 色爱欲亚洲| 成人午夜视频免费播放| 性饥渴少妇av无码毛片| 97操B| 高清肉丝中文无码| 一区=区三区视频| 久久久国产成人一区二区三区在线 | 亚洲熟久久| 欧美九九爱| 国产精品午夜高潮呻吟久久av| 亚洲综合第一页| 欧美日韩国产色五月综合在线| 四虎永久在线精品免费网址| 人人做人人妻人人夜视频| 秋霞免费无码视频日韩A片| 传媒在线观看一区二区三区| 欧美成人色| 国产一区二区三区中文字幕| 亚洲成av人片色午夜乱码| 日小BB小视频| 久久久新亚洲AV| 久久久久久99999国产精品| 国精综合一二三区影视| 国产女上位好爽在线| 精品国产片亚洲一区| 日韩无码视频黄色| 一本色道久久综合狠狠操| 国产精品高潮久久AV| 亚洲色图 欧美热图 清纯唯美 另类自拍 | 欧日韩不卡视.频| 亚洲色图殴美色图激情乱伦| 人妻干天天| 试看60秒 爽| 国产蜜臀精品一区二区尤物| 极品内射| 国产超碰在线一区| 啊啊啊 在线观看| 67194国产| 熟女视频久久| 久久久久久一日韩字幕无码| 成人毛片免费| 在线日韩精品一区二区三区| 日逼97| 欧中美三级一区二区三区| 亚洲一区制服诱惑| 在线情色电影 91大 | 亚洲色综合| 色播综合| 精品人体无圣光凹凸| 中文字幕日韩精品久久| 久久中文字幕一区不卡| 另类图片欧美激情综合| 91中出| 精品人妻一区二区三区日产乱码| 后入国产| 91春色| 91欧美www| 97超碰美女| 久久激情婷婷| 久久加勒比| 婷婷午夜清品久久久久久久性色视频观| 精品无码一区二区三区| 神马九九九| 久射吧| 久久精品国产99久久,亚洲日韩久久日本一区一区三区 | 伊人久久AV诱惑悠悠| 天天干夜夜鈤| 亚洲欧美啪啪| caorenqi shipin| 婷婷日韩一区二区三区中文字幕在线| 亚洲第一页色| 性感女人网页在线观看视频| 囯产精品一区二区三区线|亚洲人成无码网WWW动漫|国产精品免费一级... | 人妻激情偷乱视频一区二区三区| 中文字幕av乱伦| 婷婷尹人大香蕉免费| 99啪| 少妇一区二区三区在线观看| 九九九九九九九九九九九九九九九女| 日本精品人妻少妇一区二区| 一区中文字幕二区日韩| 屌妞视频久久久久久久久久久久| 老汉网| 综合熟妇一区二区三区| 狠狠躁伊人中文字幕| 亚洲国产熟妇综合色专区| 亚洲无码偷拍| 2020中文在线一区二区三区| 一区不卡在线观看av| 啊啊啊啊好疼| 免费试看60秒| 日本高清视频xxxx| 中日韩久久久| 伊人AAA| 嗯嗯嗯啊啊啊操的我好爽| 男人天堂综合| 日韩一卡二卡三卡| 亚洲加勒比| 欧美亚洲一级在线观看| 亚洲欧美自拍偷拍| 最近的最新的中文字幕视频| 久久一区无码| 9超碰免费| 亚洲精品黑丝| 97超碰人人模人人拍人人| 久区视频| 久久无码一区二区二三区性色| 欧美人妻久久精品二区三区| 婷婷天堂站| 最新中文字幕av| 亚洲天天自拍| 亚洲人成网站7777| 99久久婷婷国产综合| 色综合91| 中文字幕第23区| 精品人妻视频一区二区在线播放| 情色大香蕉| 日本色色色网站免费看不卡| 亚洲天堂一二| 开心激情婷婷| 后入 亚洲 美女 射| 人人妻人人色| 四虎影视欧美| 亚洲第一精品在线视频| 人妻av在线| 日韩欧美被操黄免费观看| 97久久综合网| 亚洲欧洲av影音| 大香网站| 极品丝袜无码| 97超碰中文| 狠狠爱综合网| 亚洲色系另类精品国产| 操91| 亚洲日韩欧美一区二区| 欧美性xxxxx狂欢| 综合欧美日本三级| 亚洲中文字幕有码视频一区二区三区| 日本最新1区2区3区| 欧美精品成人一区二区在线观看 | 亚洲天堂另类| 色欲av一区二区三区蜜芽| 亚欧性爱无码| 久久国产精品一级二级三级| 操逼短片| 黄色片,com| 欧美美女自慰一区二区三区| 日韩专区久久久| 亚洲精美粉嫩嫩泬在线观看| 九九热九九热| 欧美日韩国产精品久久色婷婷| 欧美性爱第一区| 十八禁网站在线| 少妇久久久久| 中日韩欧美精品无码AⅤ一区二区| 亚洲国产综合久久久性感熟妇| 999国产精品999久久久久久| 免费观看网黄| 五月黑AⅤ| 舔足天天操天天射| 国产成人无码久久精品| 极品五月天噜噜| 亚洲Av诱惑| 国产尹人在线视频免费| 97欧美色综合|