久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码av不卡一区二区|久久亚洲精品中文字

ARTICLE DETAIL

資訊詳情

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

Linux PCI設(shè)備驅(qū)動核心機(jī)制:匹配、BAR映射與DMA配置實戰(zhàn)

Linux PCI設(shè)備驅(qū)動核心機(jī)制:匹配、BAR映射與DMA配置實戰(zhàn) 做PCI設(shè)備驅(qū)動開發(fā)的人大概都有過這種體驗照著范例把struct pci_driver填滿在 probe 里寫上一堆初始化代碼編譯加載然后心提到嗓子眼——設(shè)備到底有沒有被正確掛上BAR 空間夠不夠中斷會不會來我上周調(diào)一塊 PCIe 采集卡時就撞上了pci out of resources這個經(jīng)典報錯排查過程讓我意識到與其零散地搜日志不如把 Linux PCI 驅(qū)動框架的運(yùn)轉(zhuǎn)邏輯完整梳理一遍。這是系列的第二篇上一篇講了 PCIe 拓?fù)浜兔杜e的基本概念這次聚焦驅(qū)動開發(fā)真正繞不開的部分設(shè)備匹配流程、資源映射手法、DMA 與中斷配置以及現(xiàn)場怎么排障。內(nèi)容不追求覆蓋每一個 API而是幫你在腦子里搭出一張設(shè)備從識別到跑數(shù)據(jù)的路線圖。1. 先弄清誰來找誰PCI 設(shè)備與驅(qū)動的匹配機(jī)制剛接觸 PCI 驅(qū)動的人最容易犯的一個錯是把字符設(shè)備驅(qū)動的思路直接搬過來注冊一個 file_operations然后等著用戶 open 設(shè)備文件。但 PCI 驅(qū)動的主動權(quán)根本不在驅(qū)動這邊。內(nèi)核的pci_bus_type會在總線枚舉和后續(xù)熱插拔事件中主動掃描設(shè)備拿著設(shè)備信息去比對所有已注冊的pci_driver找到匹配項之后才調(diào)用你的 probe??梢哉f設(shè)備是崗位驅(qū)動是候選人內(nèi)核是 HR。1.1 一張 pci_device_id 表就是尋人啟事struct pci_device_id是驅(qū)動和設(shè)備之間的約定。內(nèi)核匹配時就是拿設(shè)備的 vendor、device、subvendor、subdevice、class 等字段逐條遍歷驅(qū)動提供的 id_table只要任何一條能對上就認(rèn)為這個驅(qū)動負(fù)責(zé)這個設(shè)備。struct pci_device_id { __u32 vendor, device; // 主ID必須匹配 __u32 subvendor, subdevice; // 子系統(tǒng)ID可設(shè) PCI_ANY_ID __u32 class, class_mask; // 類別匹配帶掩碼 kernel_ulong_t driver_data; // 透傳給 probe 的私有數(shù)據(jù) };vendor 和 device 是主干匹配項幾乎不會用PCI_ANY_ID去模糊匹配因為那等于對所有設(shè)備喊我是你爹會把別人的設(shè)備搶過來。subvendor 和 subdevice 描述的是具體板卡而不僅僅是芯片。同一顆芯片可能被多家廠商做成不同板卡如果你只寫 vendor/device 而不約束 subdevice驅(qū)動就會錯誤綁定到不是你目標(biāo)的板卡上。我自己就踩過這個坑。當(dāng)時有兩個子型號vendor/device 完全一樣只有 subdevice 不同。我偷懶只寫了PCI_DEVICE(0x1234, 0x5678)結(jié)果兩個型號都被 probe第二個型號的寄存器布局不一樣初始化直接崩。改成PCI_DEVICE_SUB(0x1234, 0x5678, 0x1234, 0x0002)之后才清凈。所以如果你的硬件有子系統(tǒng)標(biāo)識盡量用全約束。1.2 匹配成功之后driver_data 和 MODULE_DEVICE_TABLE 在忙什么driver_data是個kernel_ulong_t按內(nèi)核慣例用來存放指向私有配置結(jié)構(gòu)體的指針取整。probe 的第二個參數(shù)const struct pci_device_id *id會把這一項原樣傳給你這樣同一個驅(qū)動支持多個型號時你可以在 probe 入口直接根據(jù) id 拿到對應(yīng)配置不用到處寫 if/else。static const struct pci_device_id cap_ids[] { { PCI_DEVICE(0x1234, 0x5678), .driver_data (kernel_ulong_t)cap_a_config }, { PCI_DEVICE(0x1234, 0x5679), .driver_data (kernel_ulong_t)cap_b_config }, { } }; MODULE_DEVICE_TABLE(pci, cap_ids);MODULE_DEVICE_TABLE不是給人看的儀式它會在編譯時生成模塊的 alias 信息depmod后寫入modules.alias。系統(tǒng)里 udev 在發(fā)現(xiàn) PCI 設(shè)備時會讀取設(shè)備 sysfs 下的 modalias 文件內(nèi)容像一串編碼比如pci:v00001234d00005678sv...然后用它去 modules.alias 里反查該加載哪個 .ko。所以哪怕你在板子上手動insmod沒問題如果忘了寫MODULE_DEVICE_TABLE開箱時驅(qū)動基本不會被自動加載——這不是內(nèi)核 bug是你不小心砍掉了自動加載鏈路。1.3 class 匹配的適用場景除了精確 ID 匹配pci_device_id 還支持按設(shè)備類別匹配比如匹配某個網(wǎng)卡或者顯卡類別下的所有設(shè)備。class 字段本身是編碼形式class_mask用來屏蔽不需要比較的位。實操中 class 匹配用得少因為同一個類別下不同設(shè)備的寄存器差異巨大強(qiáng)行匹配進(jìn)去probe 里還得再靠 vendor/device 二次區(qū)分不如直接精確匹配干凈。真正的典型用途是某種通用類驅(qū)動比如某些 vendor 提供的通用 PCIe 驅(qū)動先按 class 兜底再在內(nèi)部分流派。新手不建議模仿。一句話總結(jié)匹配機(jī)制id_table 是門禁driver_data 是進(jìn)門后遞給你的工牌MODULE_DEVICE_TABLE 是讓門衛(wèi)知道今天有你這個候選人的通訊錄。三者配合probe 才會在一個設(shè)備真實存在的前提下被調(diào)用。2. probe 不是隨便寫寫驅(qū)動的出生、存活與退休probe是 PCI 驅(qū)動的核心主戰(zhàn)場但很多人把它當(dāng)成初始化硬件的地方這個理解太窄。probe 更準(zhǔn)確的定位是資源申請清單。設(shè)備枚舉是內(nèi)核做的驅(qū)動能做的只是把自己需要的資源申請下來做好映射然后讓設(shè)備可被系統(tǒng)其他子系統(tǒng)使用。2.1 probe 里該干的七件事和對應(yīng)釋放我按自己寫 PCIe 驅(qū)動的習(xí)慣給出 probe 的標(biāo)準(zhǔn)動作static int my_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id) { struct my_dev *dev; int ret; dev kzalloc(sizeof(*dev), GFP_KERNEL); if (!dev) return -ENOMEM; dev-pdev pdev; pci_set_drvdata(pdev, dev); ret pci_enable_device(pdev); if (ret) goto err_free; ret pci_request_regions(pdev, my_driver); if (ret) goto err_disable; dev-bar pci_iomap(pdev, 0, pci_resource_len(pdev, 0)); if (!dev-bar) goto err_release; pci_set_master(pdev); ret dma_set_mask_and_coherent(pdev-dev, DMA_BIT_MASK(64)); if (ret) { ret dma_set_mask_and_coherent(pdev-dev, DMA_BIT_MASK(32)); if (ret) goto err_unmap; } ret pci_alloc_irq_vectors(pdev, 1, 1, PCI_IRQ_MSI | PCI_IRQ_INTX); if (ret 0) goto err_unmap; dev-irq pci_irq_vector(pdev, 0); ret devm_request_irq(pdev-dev, dev-irq, my_irq_handler, 0, my_driver, dev); if (ret) goto err_irq; ret misc_register(dev-miscdev); if (ret) goto err_irq; return 0; err_irq: pci_free_irq_vectors(pdev); err_unmap: pci_iounmap(pdev, dev-bar); err_release: pci_release_regions(pdev); err_disable: pci_disable_device(pdev); err_free: kfree(dev); return ret; }對應(yīng)的 remove 就是把這套動作倒著做一遍首先注銷 miscdev 這類對外接口確保不再有用戶態(tài)路徑能摸到設(shè)備然后 free 中斷、釋放中斷向量、iounmap、release regions、disable device最后 kfree。順序不能亂尤其要記住先斷對外接口再斷內(nèi)部資源否則 remove 過程中有進(jìn)程正在讀寫你這邊把 ioremap 釋放了那邊 read 還在訪問非法地址直接 oops。2.2 devm 資源偷懶的前提是搞清楚生命周期上面的錯誤處理鏈里有一堆 goto寫多了容易漏。內(nèi)核提供了一套 devmmanaged device resources機(jī)制注冊的資源會在設(shè)備解除綁定或驅(qū)動移除時自動釋放。比如devm_kzalloc、devm_ioremap、devm_request_irq以及較新內(nèi)核里的devm_request_pci_regions和pcim_enable_device。用 devm 的好處是 probe 中途失敗時不用一個個手動回滾代碼里可以少寫很多錯誤處理標(biāo)簽。但副作用也很明確這些資源按棧順序逆序釋放也就是后申請的反而先釋放。如果你的資源之間有依賴關(guān)系就必須仔細(xì)設(shè)計申請次序。我現(xiàn)在的習(xí)慣是小驅(qū)動直接用 devm 一把梭減少出錯大驅(qū)動則保持手動管理因為移除順序我想完全掌控。有一點必須強(qiáng)調(diào)用了devm_request_irq之后remove 里絕對不要再手動free_irq否則會重復(fù)釋放內(nèi)核直接炸給你看。2.3 suspend/resume別讓設(shè)備在睡眠中失憶現(xiàn)代 PCI 驅(qū)動很少直接在struct pci_driver里寫 suspend/resume 回調(diào)而是用driver.pm my_pm_ops掛dev_pm_ops。掛起時主要做三件事停掉數(shù)據(jù)流DMA 停、中斷屏蔽、保存需要恢復(fù)的寄存器狀態(tài)、把設(shè)備放到低功耗狀態(tài)?;謴?fù)時反過來先恢復(fù) PCI 配置空間再重新初始化設(shè)備內(nèi)部狀態(tài)最后開中斷、啟動 DMA。這里有個最常見的誤解很多人以為 resume 之后 BAR 地址、DMA 配置由內(nèi)核全包了。內(nèi)核確實會恢復(fù)標(biāo)準(zhǔn) PCI 配置空間pci_restore_state但設(shè)備內(nèi)部私有寄存器和 DMA 描述符狀態(tài)屬于設(shè)備固件上下文內(nèi)核管不著。如果硬件固件設(shè)計得比較偷懶D3 之后內(nèi)部狀態(tài)全丟resume 里不重新初始化開起來的 DMA 會像脫韁野馬一樣訪問無效地址。我碰到過一塊板卡resume 后必須重新下發(fā)整個描述符環(huán)基地址否則中斷永遠(yuǎn)不來數(shù)據(jù)也永遠(yuǎn)不更新。3. 地址空間真相BAR、MMIO 與pci out of resources的根因PCI 設(shè)備不直接知道CPU 物理地址這個概念。它只知道自己有幾個 BARBase Address RegisterBAR 是設(shè)備向系統(tǒng)申報地址空間的窗口。固件在枚舉時讀取 BAR 的寫入行為來判斷窗口大小然后給每個窗口分配一段 PCI 域地址這段地址再經(jīng)過 Host Bridge 映射到 CPU 物理地址空間。驅(qū)動要訪問設(shè)備寄存器本質(zhì)上就是訪問這段被映射進(jìn)來的內(nèi)存或 IO 空間。3.1 從 BAR 描述符讀出你要的資源驅(qū)動不要自己去讀配置空間里的 BAR 原始值那是固件和內(nèi)核枚舉階段的事。內(nèi)核已經(jīng)幫你解析好了直接使用pci_resource_*系列函數(shù)resource_size_t start pci_resource_start(pdev, bar); resource_size_t len pci_resource_len(pdev, bar); unsigned long flags pci_resource_flags(pdev, bar);flags 里需要注意兩位IORESOURCE_IO表示 IO 端口空間IORESOURCE_MEM表示內(nèi)存映射空間。內(nèi)存空間里還有IORESOURCE_PREFETCH標(biāo)志表示可預(yù)取。可預(yù)取的含義是讀這個地址沒有副作用、數(shù)據(jù)可以被 CPU 緩存合并。如果你的 BAR 實際是控制寄存器或者 FIFO讀它本身會改變設(shè)備狀態(tài)那就絕不該標(biāo)成 prefetchable。之前調(diào)試一塊回讀 FIFO 的板卡readl 拿回來的數(shù)據(jù)偶爾亂序查到最后就是硬件工程師把 BAR 配成了 prefetchable軟件這邊讀操作被 CPU 重排合并了。3.2 從 PCI 域地址到 CPU 指針ioremap 的三條路拿到pci_resource_start之后你還需要把它映射成內(nèi)核虛擬地址才能用 C 語言訪問。最省事的是pci_iomap它內(nèi)部會根據(jù)資源類型自動選擇ioremap還是ioport_mapvoid __iomem *bar0 pci_iomap(pdev, 0, pci_resource_len(pdev, 0)); if (!bar0) { ... } u32 val ioread32(bar0 REG_STATUS); iowrite32(0x1, bar0 REG_CTRL);這里我建議統(tǒng)一用ioread32/iowrite32而不是readl/writel。兩者在 x86 上行為差別不大但ioread32的語義就是訪問 MMIO移植到 ARM、RISC-V 上更安全。64 位 BAR 也沒有玄學(xué)pci_resource_len返回的已經(jīng)是resource_size_t64 位只要內(nèi)核開啟 64 位資源支持直接按同樣方式訪問即可。3.3 排障實戰(zhàn)新卡在老機(jī)器上報 no space 的完整排查這個報錯值得單獨立一節(jié)因為它不是驅(qū)動的鍋而是整個系統(tǒng)資源分配的鍋。典型 dmesg 長這樣pci 0000:03:00.0: BAR 0: no space for resource [mem size 0x01000000] pci 0000:03:00.0: BAR 0: cant assign mem (size 0x01000000)第一句的意思是設(shè)備想要 16MB 的 MMIO 窗口但系統(tǒng)當(dāng)前的 PCI 域地址空間里找不到連續(xù) 16MB 的空閑區(qū)間。這在老平臺和虛擬機(jī)上特別常見。PCI 地址空間不是無限的傳統(tǒng) PC 在 32 位時代只把 3G 到 4G 附近一段留給 PCI 設(shè)備多個設(shè)備瓜分完就沒了?,F(xiàn)代主板 BIOS 里有Above 4G Decoding選項打開之后才允許把 PCI 資源放到 4G 以上的高位地址空間。我那次遇到的具體情況是一塊板卡 BAR0 要 16MB插上一臺只有 8MB 空閑 MMIO 窗口的舊工控機(jī)報的正是這個錯。排查順序是那一次排查的節(jié)奏是先看lspci -vvv -s 03:00.0發(fā)現(xiàn) Region 0 顯示[size16M]而不是具體地址說明 BAR 沒被分配再看dmesg | grep -i pci立刻定位到 no space 日志最后進(jìn) BIOS 確認(rèn)平臺上確實沒有 Above 4G 選項。你要是也遇到同樣日志處理手段按優(yōu)先級來BIOS 里打開 Above 4G Decoding有些 BIOS 叫 Large BAR、SR-IOV 支持都得開換插槽避開集顯或其他大 BAR 設(shè)備占用的窗口內(nèi)核啟動參數(shù)加pcirealloc讓內(nèi)核在啟動階段強(qiáng)行重新分配所有 PCI 資源虛擬機(jī)環(huán)境則檢查虛擬機(jī)的 MMIO 窗口配置有些 hypervisor 默認(rèn)給 PCIe 預(yù)留空間很小還有一個容易被忽略的細(xì)節(jié)pci_enable_device失敗時也可能報cant enable device: BAR 0 ... not assigned。很多人以為 enable 只是開電源管理實際上它內(nèi)部也會嘗試為未分配資源的 BAR 爭取空間。如果 BAR 壓根沒分到地址這里的報錯只是把枚舉階段的問題延遲到了驅(qū)動加載階段而已。4. 讓數(shù)據(jù)流動起來DMA 設(shè)置與中斷選擇的若干細(xì)節(jié)設(shè)備識別了、寄存器能訪問了但一塊 PCIe 板卡真正的價值在于數(shù)據(jù)搬運(yùn)。這一步繞不開 DMA 和中斷也是驅(qū)動開發(fā)中出錯率最高的部分。4.1 DMA 掩碼先讓設(shè)備夠得著內(nèi)存設(shè)備做 DMA 時要往內(nèi)存總線地址上寫數(shù)據(jù)但設(shè)備本身不知道自己 CPU 物理地址多寬。你需要用dma_set_mask_and_coherent告訴 DMA 層這個設(shè)備認(rèn)得多少位地址if (dma_set_mask_and_coherent(pdev-dev, DMA_BIT_MASK(64))) { if (dma_set_mask_and_coherent(pdev-dev, DMA_BIT_MASK(32))) return -EIO; }先試 64 位失敗再退化 32 位這是標(biāo)準(zhǔn)順序。為什么失敗可能是 IOMMU 限制、設(shè)備硬件本身只支持 32 位尋址或者總線地址寬度不足。注意dma_set_mask和dma_set_coherent_mask可以分開設(shè)置一般情況用dma_set_mask_and_coherent一起設(shè)更省事。忘了設(shè)掩碼的后果是 DMA 映射層不知道設(shè)備能力可能交出 64 位地址而設(shè)備只能寫低 32 位數(shù)據(jù)寫入完全隨機(jī)排查時讓人抓狂。4.2 一致性內(nèi)存與流式映射的分工DMA 內(nèi)存分兩大類使用場景完全不同。一致性內(nèi)存用dma_alloc_coherent分配CPU 和設(shè)備看到的地址不需要額外同步。適合放描述符環(huán)、狀態(tài)區(qū)域、控制塊這類需要頻繁被雙方讀寫的小塊數(shù)據(jù)struct ring { struct desc *cpu; dma_addr_t dma; }; ring-cpu dma_alloc_coherent(pdev-dev, ring_size, ring-dma, GFP_KERNEL);流式映射用dma_map_single/dma_map_sg一次映射一段緩沖區(qū)用完就 unmap。適合網(wǎng)絡(luò)包、塊數(shù)據(jù)這類一次性大塊數(shù)據(jù)傳輸。速度更快但 CPU 訪問前必須dma_sync_single_for_cpu設(shè)備訪問前必須dma_sync_single_for_device。我吃過一次虧DMA 完成中斷里直接讀 data buffer發(fā)現(xiàn)數(shù)據(jù)是舊的折騰了半天根源就是忘了在 CPU 讀之前做 synccache 里的舊數(shù)據(jù)擋住了新鮮結(jié)果。還要提醒一點dma_alloc_coherent分配的是頁對齊內(nèi)存別指望它能分配幾十 MB。大塊數(shù)據(jù)老老實實走流式映射或者自己管理 SG 列表。設(shè)備端用什么驅(qū)動端就用對應(yīng)的映射 APIDMA 地址一定要用 API 返回的dma_addr_t不要自己拿 virt_to_phys 算有 IOMMU 的時候這兩個值可能完全不一樣。4.3 MSI 與 INTx 的取舍以及分配向量代碼模板現(xiàn)代 PCIe 設(shè)備優(yōu)先用 MSI/MSI-XINTx 是針腳共享中斷的舊方案能不用就不用。MSI-X 的優(yōu)勢是每個隊列可以分配獨立中斷向量多個 CPU 核分別處理不同隊列吞吐量完全不一樣。分配代碼一般這樣寫int nvec pci_alloc_irq_vectors(pdev, 1, num_queues, PCI_IRQ_MSIX | PCI_IRQ_MSI); if (nvec 0) { nvec pci_alloc_irq_vectors(pdev, 1, 1, PCI_IRQ_INTX); if (nvec 0) return nvec; } for (i 0; i nvec; i) { unsigned int irq pci_irq_vector(pdev, i); devm_request_irq(pdev-dev, irq, my_irq_handler, 0, dev_name(pdev-dev), queue[i]); }pci_alloc_irq_vectors會按你給的類型優(yōu)先級依次嘗試返回值是實際分配到的向量數(shù)。拿到nvec后每個向量的 IRQ 號必須用pci_irq_vector查詢不能假設(shè)它們是連續(xù)的。如果走到 INTx 兜底request_irq里要加IRQF_SHARED因為 INTx 本來就是共享中斷線handler 里必須先讀取設(shè)備中斷狀態(tài)寄存器確認(rèn)是不是自己的中斷不是就返回IRQ_NONE。中斷 handler 本身的撰寫原則是在原子上下文里只做最少的事。讀狀態(tài)、清中斷、把數(shù)據(jù)搬進(jìn)預(yù)分配緩沖、置一個標(biāo)志位、喚起 workqueue然后返回IRQ_HANDLED。重活放到線程化中斷或 workqueue 里硬中斷里做得越少鎖的問題越少系統(tǒng)延遲越可控。我甚至?xí)裷equest_threaded_irq的線程化 handler 作為大塊數(shù)據(jù)處理的主戰(zhàn)場硬中斷只負(fù)責(zé) ack 和喚醒。5. 現(xiàn)場調(diào)試三板斧sysfs、dmesg 與 lspci 的配合寫 PCI 驅(qū)動不是一次就能成功的準(zhǔn)備一套高效的現(xiàn)場排查手段能省下大量時間。我在調(diào)試中用的最多的是這三個工具組合lspci -vvv看設(shè)備狀態(tài)、dmesg看內(nèi)核日志、sysfs 里的接口做動態(tài)試驗。5.1 從 lspci -vvv 讀設(shè)備當(dāng)前狀態(tài)lspci -nnvvv -s 03:00.0是查看單設(shè)備全貌的標(biāo)準(zhǔn)命令。重點看幾個字段Region 0: Memory at ...如果顯示的是實際地址說明 BAR 已分配如果顯示[size16M]而沒有地址說明資源沒分配Interrupt: pin A routed to IRQ 51能看到中斷路由狀態(tài)Capabilities: ... MSI-X確認(rèn) MSI-X 能力是否可用LnkCap/LnkSta鏈路速率和寬度懷疑物理連接問題時先看這里每次加載驅(qū)動前后都跑一遍對比設(shè)備狀態(tài)變化很多時候問題一眼就能看出來。5.2 模擬熱插拔與強(qiáng)制綁定的正確姿勢sysfs 提供了一套不需要斷電的熱插拔試驗環(huán)境。把設(shè)備從總線邏輯上移除再重新掃描echo 0000:03:00.0 /sys/bus/pci/devices/0000:03:00.0/remove echo 1 /sys/bus/pci/rescan這樣模擬一次完整的設(shè)備消失-重新枚舉流程非常適合驗證 probe/remove 的配對邏輯。手動綁定驅(qū)動則在驅(qū)動目錄下操作echo 0000:03:00.0 /sys/bus/pci/drivers/my_driver/bind echo 0000:03:00.0 /sys/bus/pci/drivers/my_driver/unbind如果設(shè)備已經(jīng)被別的驅(qū)動占用了會綁定失敗。這時可以先去占用的驅(qū)動目錄下 unbind再回來綁定。另外一個技巧是driver_override往設(shè)備 sysfs 里寫驅(qū)動名可以強(qiáng)制指定某個驅(qū)動來匹配這個在測試多個候選驅(qū)動時非常管用。5.3 常見問題速查調(diào)試中反復(fù)出現(xiàn)的幾類問題我整理成一個速查表省得每次現(xiàn)查現(xiàn)象可能原因優(yōu)先排查手段probe 不調(diào)用id_table 沒匹配lspci -nn 核對 vendor/device/subsystemmodinfo 看 aliasBAR 分配失敗BIOS 窗口不足dmesg 搜 BAR開 Above 4Gpcirealloc讀寄存器全是 0xFF設(shè)備未 enable、地址映射錯誤、設(shè)備沒上電先 pci_enable_device核對 bar0 虛擬地址中斷不觸發(fā)中斷向量配置錯、設(shè)備中斷源被 mask/proc/interrupts 看計數(shù)嘗試 pcinomsi 排除 MSI 問題中斷風(fēng)暴沒屏蔽掛起中斷、共享誤判probe 早期先把設(shè)備中斷輸出 disable清 pending再 request_irqDMA 數(shù)據(jù)全零DMA 掩碼沒設(shè)、映射錯地址核對 dma_alloc_coherent 返回的 dma_addr 是否正確寫入設(shè)備我再分享一個調(diào)試 DMA 時屢試不爽的小技巧在硬件還沒有真正跑起來之前先讓設(shè)備寫一段已知 pattern 到一致性內(nèi)存里CPU 這邊輪詢這段內(nèi)存如果能看到 pattern說明 DMA 寫路徑和地址映射是通的再把 CPU 寫好的 pattern 讓設(shè)備讀出去驗證讀路徑。先打通地址對不對再去調(diào)數(shù)據(jù)對不對能少走很多彎路。最后說點實在的。Linux PCI 驅(qū)動框架表面上是一堆結(jié)構(gòu)體和回調(diào)實際上它把設(shè)備發(fā)現(xiàn)、資源分配、驅(qū)動綁定、生命周期管理這些臟活全包了。真正考驗開發(fā)者的往往不是 API 記不記得住而是對匹配規(guī)則、資源窗口、DMA 語義和中斷模型的理解是否到位。如果你照著這個思路把 probe 當(dāng)資源清單、把 remove 當(dāng)逆序拆解、把 sysfs 當(dāng)實驗臺絕大多數(shù) PCI 驅(qū)動問題都能一步步拆到根因上。下一篇文章我會挑一個具體的 PCIe DMA 驅(qū)動示例從零到一把完整流程跑一遍。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
久久香蕉国产线看观看猫咪av| 公司1区2区3区精产精| V A在线| 成人精品视频一区二区| 亚洲毛片一级带毛片基地| 花花AV导航| 久久一留热品黄| 奇米狠999| 后入日本1234| 人妻插插人妻人| se吧提供国产乱老熟视频胖女人 | 国产传媒午夜理伦精品| 男人的天堂三级| 亚洲,欧美,春色,另类| 欧美日韩电影成人在线| 日韩精品人妻一区二区| 欧美中文狠| 女人被添高潮免费视频| 久操com| 天美传媒av一区二区| 啊视频在线| 内射夫妻三片| av网站免费看| A级片日韩欧美国产欧美视频精选观看 | 日本123区操B视频| 亚洲无吗在线视频| 91强热人妻| 国产黄色小视频网站| 91欧美性| 日本加靬比网站发布页| 久久久九97| 欧洲欧美视频一区二区| 在线观看中文字幕| 亚洲毛片久久| 精品无人区麻豆乱码1区2区图片 | 免费操逼91| 福利五区| 免看60秒涩涩视频| 欧美日韩亚洲少妇寂寞影院正在播放| 啊啊啊不要啊啊受不了了视频在线| www.99热| 欧美一级三级| 欧美天天综| 91亚州日韩高清| 狠狠色综合网| 超碰99热| 国内91熟女人妻丝袜天天精品视频在线| 夜夜欧美| 中文字幕后石码四区五区| 青青青草原| 欧美亚洲厕所精品偷拍91| 暖暖精品二区三区观看| 韩国一区二区精品亚洲| 蜜臀精品1区2区| 999久久久精品国产| 成人三一级一片aaa| 国产精品一区二区校花| 中国国国产一级特黄毛片| 岛国在线免费视频| 综合色色网| 91精品无码人妻系列| 久久人人舔人人爽舔人人av片| 高清无码在线播放网站| 日韩成人精品视频自拍| 亚欧高清在线| 在线播放中文字幕| 99999精品视频| 国产精品网站www| 中文字幕一区二区三区蜜臀| 成人综合视频久久| 九九热在线精品视频| 亚洲日韩XXX| 欧美人妻另类在线| 四虎影视欧美| 欧美不卡五十路| 囯产精品久久久久久久久久梁医生| 激情小说图片亚洲首页| 久久久亚洲欧美综合| 欧美精品三级黄片| jazzjazz国产精品麻豆| 婷婷操逼| 亚州综合AⅤ| 色五月第四色| 欧美热图99| 黄片视频观看| 成人五月香网在线| 91黑丝美女| 国产精品视频在线播放| 久久久久久999| 青青草综合在线| 大香蕉中文201| 另类欧美| 免费伦费视频在线观看| 亚洲综合精品国产一区| 四虎影库国产精品免费| 老熟妇一区二区三区啪啪| 日韩人人精品| 欧美操人视频| 狠狠爱综合| 欧亚第一综合网| 亚州熟妇精品| 日本免费专区| 国产SV一线| 欧美丰满少妇交换91欧美精品| 91天天综合日韩欧美| 日韩黄色av中文字幕| 少妇高潮对白在线观看| 啊啊啊快操我视频| 欧美亚洲综合高清在线| 欧美老熟另类| 丝袜AV一区二区三区| 国产精品久久久久久久黄无码 | 囯产操逼片| 天美国产精品| 亚洲成人ab| 精品欧美А∨无码黑人大荫蒂| 91狠狠综合久久久| 欧美91色| 91c色| 丝袜无码a片| 成人国产视频在线观看| 99国内精品| 天美传媒麻豆一区二区三区国产精| 大香蕉懂9| 午夜福利av电影在线| 床上啊啊啊一区二区三区| 亚洲中亚日激情视频| PMv在线观看| 九九热免费视频| 蜜臀网址在线| 国产精品爽爽v| 青青11操操操操操操操操| 免费亚洲国产精品久久一区| 可以在线观看AV的网站| 少妇久久久免费| 丰满人妻一区二区三区性色| 亚洲色图国产另类| 国产探花精品在线| 欧亚成人在线视频| 免费αⅴ在线观看| 日本天堂在线播放| 欧美v亚洲v日韩v最新在线二区| 樱花草社区www中国| 午夜福利国产欧美日韩夜夜| 精品小视频在线| 日韩有码 一区二区三区| www.狠狠干.coom| 97综合在线| 人人操人人搞人人草| 91欧美丨精品丨入口| 97视频免费在线观看| 久久久久免费少妇| 成人线上超碰| 97色涩| 色综合久久av| 九七人妻在线| 白丝1区2区3区| 97chaopengongkai| 国产精品久久久久久久久久久久久久久久久久 | 黄色AV影视| 久草看看看| 猛交交| 一区二区视频在看| 精品精品精品| www亚洲免费| 91中文字幕在线观看| 亚洲伊人a线观看视频| 无码视频黄色网战| 国产亚洲精品第一最新| 亚洲毛片久久| 女人一区| 2024人人操人人摸| 国产精品无码久久久久2025| 久啪| 精品久久久久9999| 99热自拍| 五码视频在线观看| 五十路三区在线| 在线播放成人高清免费视频| 99re在线观看| 欧美日韩久久精品爱爱| 亚洲青色欧美| 99九九精品| 亚洲国产丝袜熟女av| 久久久久久性爱视频| 日本一级二级三级网站| 美日韩在线不卡人妻| 国产 日韩 另类 视频一区爱| 亚洲女优有码无码高清| 高潮嗯啊性感美女久久久| av天堂5| 一区二区视频在看| 久久久av爱| 日韩性色b| 日本天天操| 国产传媒日韩| 97大色网| 天堂日本亚洲欧美| 天堂蜜桃无码视频一区二区| 91精品无码人妻系列| 日本不卡一区二区| 91欧美色| 91亚洲图片| 国产AV天美传媒一区二区三区 | 99ri在线视频| 色yeye成人免费视频| 亚洲图片91| 中文字幕视频在线观看一区二区| 妇女性内射冈站HDWWWCOM| 午夜一区| 色综合大香蕉| 天天操天天日天天干| 在线亚洲精品久久久| 亚洲色图久久成人| 国产精品午夜成人福利| 青青操在线亚洲视频观看欧美在线 | 日韩有码回春沙龙第一页| 人妻无码后入| 大香蕉啪啪啪啪在线| av婷婷色网| 伊人91| 高清在线偷拍自拍视频| 中英熟女操女| 超碰色综合| 自拍亚洲综合| 欧美另类色| 2001天天操| 女人天堂AV五区在线| 国产精品一级特黄aaa大片在线观看| 亚洲熟女乱综合一区二区在线-...亚洲国产日韩欧美一区二区三区,久久久久久精 | 国产一区二区在线电影| 91人妻做a观看视频| 欧美亚洲国产91在线| 国产无码久久高清| 国产精品另类一区大香蕉| 国产传媒一区日韩| 狠操91,com| 天天干夜夜肏| 日韩欧美加勒比| 在线不欧美| 中文字幕欧美丝袜07资源| 青娱乐国产剧情av一区| 久久久久久亚洲Av无码精| 午夜操逼不卡| 日韩一区二区精彩视频| 美女极品一区二区三区| 日韩一性一交一A片俄罗斯| 草b在线| 欧美综合第一| 四虎884| 丰满人妻一区二区三区免费| 日韩猛交| 福利伊人玖玖国产| 亚洲色图大香| 绑缚麻绳人妻寝取完整版| 婷婷五月天久久精品视频一区二区三区 | 脫衣舞一区二区三区| 丰满高潮18xxxx| 精品伊人久久久大香线蕉小说| 开心五月激情网| 久久黄色网址| 国产视频第2页| 欧美激情一| 校园春色 欧美| 97精品一区二区视频| 亚洲va有码在线天堂| 青娱乐久久艹| 国产天天看| 五十路成人在线视频二区三区| 东北熟女91| 一区二区三区黄色片a| 天天躁日日躁XXXXYY| 麻豆国产尤物AV| 精品美女少妇一区二区三区| 蜜臀99久久精品久久久懂爱| 18禁的网站在线| av中亚| 日韩综合无码色欲vv| 中文字幕在线观看二区三区| 成人热久久精品| 亚洲天天自拍| 日本视频在线观看污污污| 6080yy午夜理论三级一区二区三区无码| 亚洲中文字幕有码视频一区二区三区| 97资源站日韩| 人人爱人人操人人性| 97欧美精品综合| 精品夜夜澡人妻无码AV| AV网站高清无码在线观看| 精品国产乱码久久久久久久久1| 亚洲情色在线| 亚洲精品毛片在线观看| 1二区9| 国产精品96| 日韩精品人妻一| 亚洲国产一区二区三区在线| 久久久久成人网| 强奸乱伦大香蕉网| 加勒比av官网在线| 亚洲成人性爱网站在线播放| 日本少妇va7777| 久久久国产护士丝袜美腿一| 超碰在线香蕉| 超碰 国产熟女精品一区| 伊人丁香五月婷婷| 香蕉久久精品| 伦激情人妻另类人妻| 欧美精品另类人妖xxxx| 国产久久久久久| 欧美一级做a爰片免费视频| 欲色啪| 最新三级网址| 夜夜爽爽夜夜精品视频| 国产www色在线观看| 青青草手机在线免费观看| 国产精品久久天天干| 久久综合精品一区二区三区| 日本性爱欧美性爱| 激情文学欧美| 中文字幕精品一区二| 顶级少妇BT天堂| 国产91亚洲精品一区二区三区| 一区,二区,三区网站| 欧美日韩*字幕一区| 91爰爱欧美| 天天色,天天干,天天干| 91成人亚洲色图| 成人国产精品三级A片| 4tube欧美女厕所| 91狠狠综合久久久| 欧美一区二区男人天堂| 亚洲天堂情色| 久久久久成人亚洲国产| 美女诱惑久久| 亚洲污污网站| www.91人妻.com| 日本三级韩国三级美三级91| 久久久久久欧美精品se一二三四| 人人操人人肉久久精品| 好吊色一区| …亚洲黄色厕厕女女在线播…| 91丝袜美女| 福利视频一区二区微拍| 中文乱码字幕观看视频| 草伊人高潮喷水超碰| 操逼操逼逼操操逼91 | 国产欧美精选自拍一区| 色原狠狠天天天| 视频在线观看一二三区| 在线性黄高清免费视频| 91亚州| 嫩草影院永久在线制服丝袜| 欧美 亚洲 偷拍自拍| 91在线视频国产网站| 熟女自慰久久久| 久久久久国产精品片区无码直播| 国产女大学生AV| 日韩精品影视| 亚洲国产综合久久天堂| **一级毛片国产| 日韩一卡二卡三卡| 一二三四区操操Av| 97 国产一区| 另类小说五月天| 自拍偷拍国产欧美日韩韩| 激情婷婷黑人91| 60秒免费小视频| 男人的天堂2019AV| 乱伦熟女区| 超碰国产精品无码| 亚洲情色欧美| 99re视频在线播放青草| 啊啊啊啊好疼视频| 91久久国产综合精品| 色情综合网| 一级啊性爱在线视频| 粉嫩av平台| 啪啪综合网| 女生自91网站| 制服少妇欧美| 玖玖蜜臀资源网| 密桃99999| 中文字幕av亚洲在线| 国产一区二区在线播放量| 2017天天拍大香蕉| 一二区在线观看视频| 色香伊人| 熟女AV一区| 夜夜操狠狠操| 丁香五月色| 国产精品老师| 午夜男女爽爽爽在线视频| 九九干| 国产欧美成人第一页在线观看| 国产高清午夜成人在线观看| 免费自拍三级综合| 成人av在线播放| 26uuu久久| 亚洲av成人精品一区| 99久久99久久免费精品蜜臀| 欧美在线91| 国产久久久久久| 加勒比中文av| 超碰成人人人爽人人爽| 日韩成年人性爱视频| 亚洲全色网| 日本操逼无码| 69少妇一区二区| 国内偷自视频区视频综合| 九九精品99| 黄色视频60分钟| 亚洲天堂中文字| 日本免费专区| 国产激情久久久| 狠狠欧美| 亚洲天堂自拍| 久久久九九九九| 欧美韩日精品资源| 97久久超碰日韩精品| 国产精品久久久久久久久久久久久久| 日本Suv精品一区二区| 国产美女高潮| 婷婷超| 日本免费专区| 99色在线| 少妇同性| 天天肏夜夜肏| 日韩免费中文字幕视频| 高清有码一区二区| 日本肏逼视频在线观看| 一区二区三区四区色图| 九九九久久久久| 亚洲精品九九九九九九| 1769成人国产精品视频| 久久激情亚洲精品无码?V| 91日韩在线| 色婷婷蜜臀av| 色呦色呦色精品| 午夜欧美精品久久久| 天天干天天操天天操夜夜操天天操 | 草草网站影院白丝内射| 日本三级韩三级99久久| 亚州九九九精品视频| 久区视频| 99老司机精品视频在线观看| 亚欧精品久久久久久久久久久| 97久久精品亚洲| 日韩ab网| 超碰午夜| 九九成人视频| 国产精品午夜精品| 高潮的A片激情扒开一区| 欧美中出1| 使劲用力艹少妇视频一区二区| 青青久草| 亚洲五码一区二区三区| 久热69九色熟妇97| 制服丝袜第二页| www久久国产精品| 99无码精品| 免费成人在线熟妇网| 日本不卡五区| www.狠狠操| 久久精品99| 伊人专区一区二区三区| 丰满人妻-区二区三区免费| www. 男人天堂成人在线| 夜色91| 国产91精品福利在线| 97人妻色| 女优大全 - 91n| 国模精品娜娜一二三区| 亚洲脚交| 五月天黄色激情视频| 97青青操视频| 欧美人妻少妇| 亚洲 综合 欧美| 91精品人妻一区二区三区蜜桃| 色噜噜人妻丝袜a∨先锋影| 天天看特黄的免费网站| 欧美伊人久久综合网| 国产原创精品| 亚洲不卡不卡中文字幕不卡| 欧美性暴力| 人妻熟女一区在| 天天综合网在线91| 中文高清一区二区的| 抽插亚洲无码| 91人妻爽爽人人做人人澡| 97亚洲综合在线| 婷婷精品视频| 亚洲日韩精品一区二区| 久久大香蕉手机高清视频| 亚洲欧美第一页| 伊人网av| 久久免费少妇| 国产自产91区13区| 亚洲一区二区在线观看91| 第二页中文字幕| 人妻色偷色噜| 色色综合97| 亚洲天堂人妻熟妇视频| 国内外激情在线| 99在线精品视频| 欧美热图99| 正在播放:深夜激情大战,自带黑丝袜全力输出骚穴 | 国产亚洲深夜激情| m欧洲一级午老| 嫩草影院性色| 精品午夜福利| 亚洲视频一二区| 岛园激情| 亚洲天堂男人天堂| 金典av| 亚洲天堂电影网99999| 久久久久婷婷| 天天干人人看综合| 日韩熟女视频二区| 天天流夜夜操| 国产一区二区三三视频| 少妇熟女视频一区二区三区| 欧美图片偷拍| 国产 亚洲 丝袜 制服| 婷婷九月丁香| 富二代亚洲精品99| 日韩欧美中文| 中文字幕一区二区视频在线观看| 久都青青视频| 操逼片中文| 97在线免费观看| 制服诱惑亚洲一区二区三区在线观看| 色999亚洲人成色| 精品人妻视频入口| 天天综合麻豆视频| 国内黄色精品| 亚洲图片欧美91N| 成人性爱高清视频免费看| 人人性爱视频免费| 亚洲欧美洲综合| 色网1| 久久国产99精品72福利| 精品毛片av一区二区| 伊香蕉综合久久久久久久噜噜噜 | 69视频福利导航| 久久久精品成人国产| 免费无码婬片AAAA片直播色戒| 歐美性天天| 久久国产99精品72福利| 日本精品第一视频在'| 级做a爱无码性色永久免费| 亚洲骚逼少妇| 色九九九综合| 四虎884a| 91xingse| 69超碰综合| 无套内射性感少妇视频| 18禁的网站在线| 99精品视频在线观看免费| gogogo免费高清看中国国语| 日韩高清黄片| 嫩草在线视频| 国产精品亚洲天堂网址| 久久九九视频九九视频| 顶级丝袜熟女一区二区三区| 午夜福利在线合集| 精品国产久热在线观看| 大香蕉综合在线| 五月丁香狠狠爱| 水野优香在线观看| 亚洲精品男人的天堂| 日韩素人无码一区二区三区三州| 青青草视频这里只有精品| 日本免费中文一区二区三区四区| 人妻少妇精品一区二区三区| 好吊色在线观看| 欧美有码亚洲中文字幕一区二区三区四区| 啊啊啊啊啊啊啊国| surenchaopeng| 91精品免费| 精品人妻一区二区蜜桃视频 | 亚洲欧美自拍偷拍| 亚洲操人| 亚洲日产专区| 狠狠夜色午夜久久综合在线| 土豪酒店各种姿势玩弄极品幼稚| 欧美色图99| 综合网91| 亚洲国产婷婷在线播放| 午夜精品视频777| 蜜臀久久99精品久久久久久久久| 亚洲 图片 欧美 色图| 色九九综合AV| 久草这里只有精品| 蜜臀99999| 色欲久久久久综合网| 中文字幕人乱码中文字的预防方法 | 97 九色| 限制级中的三级片中的黑粗大屌屌日人妻熟女| 97在线公开视频| 天天草天天日| 亚洲五码一区二区三区| 极品色社| 久久精品日韩专区免费观看| 性综合网| 日本一区二区不卡精品| 人妻碰碰碰碰碰碰| 久久久久久久9最新免费视频观看| 欧美图片校园春色| 国内精品a| 久久99久久99久久99人受| 国产精品 午夜福利| 亚洲双插| 国产性爱在线视频一区二区| 婷婷午夜| 91欧美巨乳| 黄色免费网| 伊人AAA| 97视频新免费| 人人操人人干xxx| 色五月综合网| 97亚洲国产| 国产传媒午夜理伦精品| 正在播放:深夜激情大战,自带黑丝袜全力输出骚穴 | 欧美页片| 成人精品在线免费视频| 久操热| 欧美,亚洲,日韩,v,天堂,手机在线观看| 亚洲色图 欧美| 色综合九九| 天操天操夜操夜月月年年操操| 视频一区二区免费在线| 蜜臀国产AV中文字幕| 免费国产| 妇人噜噜| 97人人夜夜精品视频| 亚洲s在线观看| 欧美色蜜桃97| 亚洲精品成人激情在线| 涩亚洲欧洲| 一级aaaaa欧美中文字幕录像片| 欧美综合色站| 无码久久国产| 亚州成人a∨| 超碰在线一区二区| 五月天丁香欧洲日韩| 4虎在线观看| 色噜噜婷婷| 亚洲无码一区成人免费午夜| 国产免费一区在线观看| av天堂加勒比| 99热亚洲| 玖玖爱影院| 97日本超碰综合| 又粗又长又大国产不卡| 操穴国产| 日欧操屄| 亚洲美女 晚间男人天堂 | 中文字幕超碰CAO| 亚洲精品尤物yw在线影院| 精品97久久综合| 午夜.DJ高清在线观看免费7 | 日本性爰一道本| 日韩欧美水蜜桃人妻| 国产亚洲中文不卡二区| AV色五月天| 性爱乱伦一区| 日本天天干天天操一区| 97亚洲综合电影| av网站国产主播在线| 熟妇艹鸡八| 波多野结衣被操50分钟免费视频| 亚洲资源网| 久9视频| 91五十路| 亚洲欧美日产国产91毛片| 日韩乱伦影音先锋| 欧美一区二区| 婷婷五月天久久精品视频一区二区三区| 亚洲男人久久综合天堂| 久久美女福利是上海美女| 欧美三四五区| 亚洲综合在线高清| 亚洲二区精品在线观看| 久久久久99999| 91熟女综合| 日本3级一区二区免费| 97天堂| 涩涩久久精品| 亚洲有码 欧美精品| 久久久久免费看少妇A片特黄| 久久九九久精品国产尤物|国产精品爽黄69天堂A片潘金莲,国产亚洲精品第一综合 | av日韩国产一区二区| 亚洲春色欧美| 国产污视频麻豆传媒一区二区 | 欧美专区17页| 91最新综合| 麻豆啪啪啪视频| 26uuu久久| 97伦综合| 精品久久九| 超AV色女| 国产成人无码久久精品| 无码一区二区精品视频久久久春药 | 亚洲春色一区二区三区| 四季av一区二区凹凸精品小说| 91丝袜美腿网站| 五月天激情四射| 国产51色综合久久免费| 97在线免费视频| 日产精品久久久一区二区| 日韩精品99久久久久久中文字幕| 五月激情天| 美中日韩无码| 国内精品嫩模A∨私拍小视频| 久久久久久中文| 欧美亚洲厕所精品偷拍91| 97人妻色| 色一情一乱一乱一区91Av| 欧美人妻久久精品二区三区| 国产 亚洲 一二三四| www欧美91| 超碰偷拍| 欧美激情一| 日噜夜夜夜夜夜夜夜夜夜夜爽爽爽爽爽爽爽爽爽爽爽爽 | 大屁股国产在线视频| 久热精品色情| 天天综合网久久ww| 精彩视频日韩| 2011国产精品| 人人摸人人干| 六月激情网| 日本三级大片| 香蕉久久国产AV一区二区| 91影库| 91啦人妻| 美女诱惑一区| 97免费视频在线观看| 精品久久久久久久久久久久 | 亚洲国产91精品一区二区久久| 蜜臀一区二区三区亚洲最新章节在线观看 - 高清蜜臀一区二区三区亚洲全集播放 | 丰满熟妇大乳做爰| 99福利社| 亚洲一二三四区在线免费看视频| 国产成人天堂| 超碰中文字幕人妻草一区| 日韩欧美丝袜诱惑| 青青草精玖玖69精品| 超碰人妻久久人妻中文97| 天天肏美女| 亚洲国产综合久久天堂| 亚洲AV无码天美传媒一区| 亚洲中文制服诱惑| 你操综合| 狠狠操一区二区| 大吊色| 国产性爱欧美性爱在线| 天天干天天中出av| 久热99999| 蜜桃午夜视频一区二区| 亚洲日韩精品一区二区| 亚洲情色一区二区三区| 日韩精品在线观看网站| 激情综合婷婷| 激情五月婷| 91扒丝袜综合在线| 亚洲精品天天影视综合网| 女人的天堂大香蕉网| 色娱乐色呦呦夜夜夜夜av| 东京热大香焦| 黄页网站成人免费| 老司机福利青青草| 欧美中文字幕日韩在线| 另类 日韩 熟女| 一区二区三区欧美激情| 男人天堂.AB| 插老姨肥穴| 欧美第五页| 九热中文字幕| 99色热国产视频精品| 日本在线不卡v二区| 午夜天堂精品久久久久91| 天天综合日韩网| 9999久久久久| a片亚洲一本通视频| 在线二区不卡| 国产精品区在线12p| 亚洲欧综合另类无码一区| 啊啊啊好爽快点啊啊啊嗯嗯| 91精品人妻一区二区-全集完整版免费正片国语-B02AV | 99999精品成人| 综合久久99亚洲人妻中文在线| 97久久久网站| 日韩黄片影院| 久久婷婷影院| 久久欧洲| 蜜桃久久一区二区| 日韩无码三级影院| 五月婷婷六月丁香| 91N综合在线| 亚洲无 码A片在线观看麻豆| 欧美成人黄网色网站| 男人天堂婷婷五月天校园春色| 久啪| 少妇久久久久久| 一区在线国产播放| 91红杏| 中文字幕精品码亚洲| 91人精品妻入口| 丁香激情网| 亚洲男人的天堂网| 色视频蜜乳| 丁香五月激情五月| 黄色网址在线免费观看| 99操视频| 久久熟女精品不卡一区| 岛国网址国产 | 红桃视频高潮| 色97欧美| HEYZO高无码国产精品227| 久久久久久久国产| 亚洲欧洲激情卡通另类文学四射小说网站 | 67194国产| 加勒比av网| 欧美性爱日韩性爱| 青青草五月天| 波多野42部激情无码喷潮| 丁香五月婷婷基地| 国产一区二区精品在线视频| 国产亚洲色停停久久99精品91| 日日夜夜天天| 超碰97人人乐| 亚洲av强奸乱伦| 欧美性天天影院| 日va操| 国产精品小视频一区二区三区| 水滴偷拍| 亚洲综合网电影91| 9精品久久久久| 国产自偷自拍一区| 麻豆a'v电影| 亚洲偷拍自拍在线视频| 小骚逼被操的爽不爽| 中文字幕奈奈美被公侵犯| 久久婷婷五月| 国内一区二区免费| 91丝袜美女| 亚洲精品久久久久毛片A片拉屎 | 另类图片亚洲加勒比另类图片亚洲加勒比另类图片亚洲加勒比 | 久久久久久综合久久伊人蜜月| 一级久久性爱视频| 97久久天天综合色天天综合色电影| 高清成年美女黄网站免费大全 | 亚洲无码成人精品| 色精品极品| 天天澡天天爽日日AV| 欧美综合色站| 欧美大香蕉久| 亚洲视频二区| 伊人女女资源在线观看| 成人性交免费视屏| 九九aV| 日日夜夜精品视频| 麻豆伊人网| 日操粉逼逼| 久久九九97| 色妹子A V| 午夜乱轮操逼视频免费看| 四虎国产成人精品免费一女五男| 99精品欧美一区二区三区桃色| 97超碰色中文字幕| 免费毛片在线播放| 91老司机视频| 韩日男人的天堂| 亚洲无吗在线视频| 少妇精品久久久八区九区| 1024香蕉视频| 天天视频黄| 偷拍新久久| 日本三级小说中文字幕| 激情五月天插| 一区二区三区一亚洲中文字幕、综合区灬| 天天射,天天操,天天爽-国内精品一区二区三区-成人AV | 午夜福利视频在线一区| 美女91在线| 国产超碰在线一区| 一区二区三区机械有限公司| 九九久精品| 欧美激情超碰777| 天天色播| 亚洲国产成人精品999| 国产乱码久久久| 亚洲AO在线| 久久xxxx| 日韩国产乱子伦App| 欧美劲爆第一页| 欧美与日韩97| 96精品在线| 97天天插| 夜夜高潮夜夜爽高清视频一| 精品久久久亚洲AV成人网站| 人人操人人摸人人看人人插| 欧美综合色图片| 精品九九九九九九九九九| 五月丁香色综合| 日本熟妇人妻中出视频| 人人干人人操人人爱| 欧美日日人人天天| 精品无码一二三四区| 亚洲人妻AV| 免费中文在线| 超碰在线一区| 国产精品久久久午夜夜伦鲁鲁| 中文字幕天天操| 日日日日日| 色色色99| 啪啪资源网| 人妻中文字幕精品无码| 无码久久国产| 诱惑网综合| 久操免费电影| 色拍偷亚洲| 99热这里只有精品9| 大香焦A片| 日韩精品色呦呦| 女性喷水高潮在线观看| 97久久久久| 18精品一二区| 超碰碰小说97| 男人天堂网手机版婷婷| 操91| 久久神马影院| 青青草手机在线免费观看| 国产玖玖| 超碰97起碰| 大香蕉97久久| 思思热在线视频精品| www.99视频| 一级黄色视频网| 尤物黄色在线观看网站| 精品午夜福利国产一区二区在线观看 | 逼操网站| 黑人精品XXX一区一二区| 日韩熟女无码| 国产乱色国产精品免费视| 在线观看一级α片刺激高潮视频| 一二三区操逼国产91| 91亚洲欧洲| 乱伦熟女论坛| 亚洲精品一区二区精品| 香伊人在线| 亚州免费啪啪视频| 熟妇的味道HD中文字幕| 亚洲日韩美国人妻| 日本高清一区二区在线| 亚洲欧美日韩精品久久久一区二区 | 国产av又色又爽又黄| 亚洲国产精品成人无码久久久| 淫荡少妇免费| 激情五月天色色网| 五月婷色| 殴美日韩m| 无码男人天堂| 欧美九一精品久久久熟妇| 精品人妻一区二区三区不卡断| 97精品国产97久久久久久免费| 黄色AV影视| 狠狠干精品一二三四五六2022| 欧美超碰96| 四虎免费视频| av中亚| 精品国产乱码| 免费久久精品麻豆一区二区av| 又黄又爽在线观看视频| 久久久999网站| 久久综合av| 亚洲玖玖爱| 欧美不卡五十路| 乱伦图av| 国产亚洲国产超碰| 成人网欧美风情| 9九九国产| 91精片| 久久精品国产96精品亚洲拳交| 久久99网站| 最新av在线| 人妻丝袜一区二区三区在线| av黄图片在线观看| 很很热性爱视频| 国产久久视频| 啊啊啊在线看| 欧美传媒| 大香樵伊人网| 伦在线97| 成人精品无码| 国产91av在线播放| 国产超碰在线| 欧美精品三区| 综合久久9| 日韩精品中文字幕二区| 久久国模av| 91精品91久久久中77777| 男人高清无码一区二区| 91丝袜美腿网站| 久久精品一区二区三区蜜桃臀| 无码137片内射在线影院| 五月婷视频| 天天澡天天爽日日av| 高清国产精品福利网站| 加勒比在线观看一区二区| 天天日天天插| 99蜜月精品久久| 一区二区三区免费视频入口| 久热久| 青青草影视蜜久久| 一级性爱啪啪视频| 日本丝袜美腿人妻九九| 久久这里只| 欧亚在线视频| 97网址97| 国产精品熟女九色九色蜜臀| 日韩AV电影网站| 啪啪啪综合| 中文字幕日本久久| 歐美性天天| 74成人在线| 精品人妻一区二区免费蜜桃| 久久线上视频免费看| 婷婷亚洲五月***久久| 手机av亚洲丝袜美腿日韩第一页二页| 91精品国产91久久青草| 超碰人人妻| 91激情综合| 精品国产丝袜一区二区三区乱码| 久偷拍| 999久久久免费精品国产牛牛| 97九色人妻| 亚洲欧美黄| 五月婷婷性爱| 日本一级一级一级一级| 揉揉揉夜夜| 无码视频黄色网战| 欧美日韩精品久久久久东北老熟妇| 国产区91柔拿会所技师| 欧洲乱码视频| 亚洲黄片免费在线播放| 美女97超碰| 亚洲欧美精品国产一区二区| 欧美se亚洲| 亚洲欧美综合区自拍另类| 我中文字幕6区| 国产一进一出视频网站| 蜜桃丰满熟妇av无码区不卡| 久久久无码av精| 操淫穴亚洲五月丁香| 91精品无码人妻系列| 亚洲第二页| 97色色婷婷| 超碰91在线| 亚洲淫乱骚妇AV| wwwxxx日本爽| 夜色97| 狠狠色婷婷| 99999亚洲| 女同性恋一区二区三区精品视频| 白丝被操91| 日韩内射视频| 翔田千里爆乳巨臀无码| 天天看特黄的免费网站| 在线岛| 九九热超碰97亚洲最新香蕉 | 囯产操逼片| 一起草视频在线| 青久操| 久久精品国产亚洲AV片多多 | 操逼视频免费日韩无码| 久操国产在线| 久久久影院| 青青久久手机线视频| 久久久91| 午夜性| 日本免费亚洲欧美| 成 人 A V免费视频在线观看| 久操九九九九九九九九九九九九九九九九九九九九九九九九九九九九 | 在线αⅴ| 91老熟女91老女人| 九九九九九九亚洲| 密乳AV免费观看| 校园春色AV天堂| 亚洲国产精品久久久男人的天堂| 亚洲一区二区三区中文字幕| 色色色热| 97玖玖人妻| 欧美人妻久久精品二区三区| 久久华人网| 天天摸夜夜摸| 久久久激情| 老熟女乱伦片| 后入合集| 精品人妻一区二区三区视频| 亚洲好看强奸乱伦| 国产97亚洲| 激情视屏国产乱伦强奸| 青娱乐二区免费| 99re6在线视频精品免费完整版安卓版| 亚洲nv男人的天堂网| 黄片免费久久久久久久| 中文区中文字幕免费看| 狠狠做深爱婷婷久久二区| 久久国产精品91| 亚洲一区二区精品福利| 日本人妻中文字幕精品| 九九九九热| 九九九久| 国产精品久久久久久久久久久久久久久久久久 | 色999五月色| 无码丰满熟妇一区二区浪潮AV| 校园春色中文字幕AV| 丝袜性亚洲| 国产精品一区人妻精品阁在线| 国产一区二区欧美日本| 免费家庭乱伦视频| 日韩超碰97| 亚洲欧美91| 校园春色家庭伦理欧美激情| 久久综合女优| 嗯嗯嗯,草死我| 美女写真| 人人操人人干网页| 精品人妻1区| 中文字幕日韩专区精品系列 | 欧美制服网站美腿丝袜| 99久在线精品99re8热| 欧美经典一区二区三区| 精品无码久久久久久国产浪潮| 久9re热视频这里只有精品| 婷婷五月天激情四射| 超碰9 7女人| 在线电影亚洲色图| 蜜臀一二三区| 欧亚成人在线视频| 天天看高清麻豆| 欧美人妻中出| 天堂伊人久久| 日韩精品9999| 日欧毛片久久| 欧洲精品一二三在线| 亚洲情色一区三区| 蜜臀亚洲中文| 欧美熟女激情| 清清草影| 国产精品 午夜福利| 亚洲情色在线| 91艹| 亚洲天堂久| 老熟妇一区二区三区| 91操熟女视频| 夜夜躁狠狠躁日日躁av| 91在线丝袜| 欧美日韩久久精品爱爱| 国产乱子伦一区二区三区在线观看|