久久亚洲成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| 狼人狠干| 色婷婷狠狠18禁| 另类图片亚洲加勒比另类图片亚洲加勒比另类图片亚洲加勒比 | 中美日韩毛片| 久久香蕉国产线看观看亚洲女人 | 久操免费观看| 婷婷丁香六月| 日韩有码回春沙龙第一页| 很很操在线| 亚洲女毛多水多21P| 亚洲中文字幕乱码无码一区二区| 91老司机在线| 99这里只有精品| 精久久久| 亚洲小电影免费涩涩成人在线高清| 成人在线视频网| 韩国女主播青草福利视频| 久久久久久九九九九九九| 中出欧美| 麻豆天美国美国产| 欧美宗合网| 爽爽淫人网| 这里都是精品| 五月婷婷综合网| 伊人色综合超碰| 国产熟女精品区| 国产高清成人免费视频| 色色五月婷| 精品美女人人干| 爱妃国产亚洲视频中文字幕| 中文字幕乱碼在线| 欧美性爱无码一区二区三区| 国产超碰国产97| 久草新在线| 91视频国品一二三区| 97在线公开视频| 蜜乳性色无码专日粉嫩骚逼AV| 蜜臀亚洲中文| 无码 黑人一区二区三区| 特级毛片特黄久久免费看 | 99热在线观看| 97在线播放| 乱色视频中文字幕| 2003天天干夜夜操| 在线观看一卡二卡| 夜夜爽夜夜高潮夜夜爽| 天天操av懂色| 五十路三级片| av橘色网站| www.99在线| 伊人九九九| 99精品在线播放| 久久超碰网| 99色热| 成人开心网在线视频| 99九九精品| 国产精品人妻免费精品| 伦在线97| 青青草天天亲夜夜操网| 家庭乱伦麻豆| 人人九九精| 人妻少妇久久久| 欧美综合网在线| 人人人人人人少妇| 约操熟妇| 天天操人人操狠狠插| 国产精品色片一区二区| 好色综合| 9997se| 99国内精品| 在线无码视频| 99热在线只有精品| 2017大香蕉国产精品久久| 亚一综合久久久久久久久久| 麻豆久久精品亚洲精品88| 宗合情欲网| 国产精品一区二区 尿失禁| 四方色播| 免费网色网站| 激情第四色| 9国产超碰| 国产一| 91色女| 秋霞一级视频在线观看免费| 亚洲欧洲日韩天堂av| 日本大香蕉综合网红本杳社区| 超碰97欧美在线| 欧美性爱视频免费一区一A| 国产综合久久久麻桃个| 97国产天堂岛| 91狠狠综合久久久久久| 久久草在线综合视频| 亚洲欧美国产中文视频| 99超碰网| 一级免费精品| 熟女网站最新| 亚州免费啪啪视频| 亚洲男人天堂AV| 日韩中文字幕视频| 中文乱码字幕观看| 成人天天爽| 青青草原综合久久大伊人精品| 日本三级中国三级99人妇网站| 久久αⅴ| 久9爱经典视频| 美女淫穴| 搡老女人老妇女老妇老熟女怎么读| 国产精品久久aV| 97视频在线播放| 少妇色欲综合网2| 超碰到97情色| 欧美乱妇狂野欧美在线视频| 怡春苑东京热| 亚洲精品一卡二卡三卡福利视频网站 | 婷婷视频在线免费观看| 天天日天天搞天天干| 国产精品人妻无码久久久互動交流| 九月丁香婷婷| 操人妻丝袜高跟| 在线看免费无码AV天堂的| 亚洲国产成人精品久久久国产成人一区二区三.| 久久人妻| 9九九九九视频在线观看| 国产免费一区在线观看| 日韩性爱视频免费在线 | 久久精品区| 国产91专区| 91美女视频电影| 99精品久久久久久| 国产精品制服丝袜中文字幕日韩一区二区三区 | 免费啪啪啪网站18岁| 国产精品午夜AV完会免费| 舔人妻中文免费视频| 九九九九97| 国产99999久久精品| 99re在线视频| 亚洲少妇自拍中文字幕懂色| 亚洲天天自拍| 蜜臀久久99精品久久久久久无删减 | 久久超碰亚洲人| 6080yy午夜理论三级一区二区三区无码| 密乳AV免费观看| 综合伊人激情| 人人看人人插| 色噜噜婷婷| 人人澡人人干| 18禁在线视频| 中文字幕aⅴ在线视频| 九九九九热| 97在线视频网站| 国产二区三区免费视频| 欧美午夜一区二区三区| 2020中文字幕| 九九九久久久久| 国产av色网| 国语精品av| 成人26uuu| AV污污污污| 国产精品无码av在线| 亚洲国产尤物yw在线观看| 亚洲午夜福利视频| 91在线美女| 加勒比AV天堂| 少妇蹲下买菜露大唇0| 一区二区三区男人的天堂| 91色狼| 在线观看色视频| 亚洲欧美综合图片| 操B视频日韩无码| 在线国产一区二区av| 伊人天堂在线| 欧美亚洲玖玖玖| 亚洲综合码| 国产欧美日产一区二区三区 - 国产欧美日| KK色在线影院| 国产强奸乱伦xd| 国产精品 久久久精品一牛| 99久久久久| 女同性恋一区二区三区精品视频| 人人超碰在线观看黄| 强上我不卡卡| 亚洲视频精选| 美女黄频a美女大全免费皮| 亚洲九九夜夜| 青青草玖玖爱| 东京热一区二区中文字幕| 黄页网站免费高清在线观看| 宅男91视频在线播放| 精品999日本| 中文久久久| 2019天天干天天操| 九九九九九九亚洲| 97在线免费看视频| 成人一道本免费视频| 日本三级中国三级99人妇网站| 超碰在线人妻不卡| 高清国产精品无码| 亚洲自拍欧美国产首页网曝| 国内毛片无遮挡国产| 91黑丝在线播放| 高清不卡 中文 人妻| 色97干| 人妻人人做人人澡人人爽欧美一区| 少妇无码太爽| 99999精品| 嫩草一区二区在线观看| 超碰97久久国| 国产女人成人精品视频| 人妻酒店出差被中出免费在线播放| 蜜臀99久久| 国产无套粉嫩白浆在| 97在线青| 思思热久久成人| 偷拍亚洲高清图片| 色色色日本| julia高潮后不停追击中出| 国产三级中文字幕粉嫩 | 97超级久久强资源| 9I1性色影院| www.国产高潮精品| 91扒丝袜综合在线| 亚洲国产精品成人久久蜜臀| 亚洲色久| 日本三级精品| 深夜激情无码| 亚州综| 午夜黄色免费在线观看| 凹凸 69堂 在线播放| 久久9视频| 色97干| 丁香六月婷婷久久综合| 97超碰色色| 夜夜操二区| 日本成a人v网站在线观看| 狠狠操综合| 清纯唯美综合| 日本免费不卡二区| 97在线观看播放视频| 九九av| 亚洲最大无码中文字幕网站| 97超碰色色| 91欧美成人色站| 色就色综合| 天天日美女的B| 成人电影一区| 午夜国产成人精品视频| 91 国产丝袜在线播放-百度| www.91人妻.com| 狠狠中文字幕| 日本不卡高清视频| 久久熟女嫩草成人片免费| 久久性视频| 欧美资源| 伊人午夜福利视频| 久久婷五月| 国产无码精品成人| 97天天插| 丝袜内射| 久久青青草原免费视频| 校园激情狠狠四射| 色老汉色| 久久一级无码精品毛片6| 精品成人女人久久| 天天流夜夜操| 国产亚洲日韩在线三区黑人| 精…码一二三区| 色盈盈影院| 久操不卡视频| 操老熟女AV| 91女人的网站| 五月丁香色情| 金莲网址| 午夜操逼不卡| 久久啊啊啊| 天堂综合| 日本黄色裸日本黄色裸体 | 男人天堂.AB| 亚洲成人一区二区精品| 色综合加勒比| 天天射天天色成人| 久草精品一区| 大香樵伊人网| 色婷婷激一区二区三区| 欧美影院一区二区三区| 蜜臀久久99精品久久久久久-DVD原版全| 熟女啪啪视频| 妺妺跟我一起洗澡没忍住| 啪啪性爱免费视频| 97在线观看视频| 成熟熟女国产精品一区二区| 婷婷色导航| 在线观看成人性爱免费小视频| 色欧美在线| 久久久婷婷| 一区二区三区精品黑丝白丝酒店对鸡| 人妻在线视频| HEYZO高无码国产精品227| 清纯唯美亚洲| 欧美亚洲中文| 日韩无码服务区| 一牛一区二区三区久久| 色五月婷婷色| 日韩AV无码中文一区二区| 午夜福利国产欧美日韩夜夜| 探花视频免费观看国产专区| 亚州男人天堂| 丁香7月婷婷| 久久夜夜夜| 江都AV在线| 猛交交| 成人婷婷丁香| 黄色污污污污污污网站| 蜜桃精品一区二区三区ww| 91 刺激在线| 色婷婷丁香五月| 成人在线日韩| 成人情色一区二区| 日本久久99| 嫩草影院在线观看精品 | 日韩中文字幕视频在线观看| 爆操无码| 国产日韩在线播放av| 玖草在线视频| 一级黄色性爱裸体视频| 欧美一区二区三区互相| 在线综合 亚洲 欧美中文字幕| 天天上日日上日韩精品| 人妻无一区二区三区| 免费国产电影一区二区| 大香蕉一线视频| 91性高朝久久久久久久久| CCYY草草影院地址入口| 亚洲欧美日韩制服另类| 久操网视频| 久草免费在线一区二区| 欧美亚洲综合色| 婷婷激情五月综合| 91色综合激情| 久日综合网| 国产超碰97| 伊人91| 2019天天干| 国产AAAAAABBBBB| 啪啪资源网| 欧美黄色大香蕉一区二区| 色99视频| 蜜奶av| 欧亚成人在线视频| 老司机香蕉| 国产毛片毛片4p懂色| 摸奶性爱视频网站在线免费播放| www..com操老师| 久久婷婷五月天| 综合国产97| 四季AV一区二区凹凸精品小说| 啊灬啊灬啊灬啊灬高潮奶出了免费视| 97久操| 免费看片黄| 久干9操| 久久国产精品一级二级三级| 超碰97在线中文| 四虎影视欧美| 色网在线视频观看免费| 日韩有码免费视频| 青青草成人视频在线观看二区| 噜噜噜噜天天狠狠| 91操熟女| 亚洲超碰AV| 玖玖97综合| 九九九九一级| 樱花蜜乳av| 亚洲精品一区中文字幕乱码| 97超碰国产亚洲精品| 人妻三级在线中文字幕| 黄色电影观看久久9| 桃色五月天| 亚洲诱惑天堂 | 六月婷婷综合| 伊人嫩草| 午夜操逼不卡| 欧美三级一级| 97精品免费视频网站| 超碰在线欧美性爱激情| 日日操天天操| 精品人妻伦一区二区三区久久| 大香蕉淫人| 国产精品自在线发布| 青青草吊丝| 91丝袜美女视频| 伊人网综合在线视频| yazhousetuoumei| 九九九九热只有精品| AV不卡在线| 亚洲第91页 | 亚洲欧洲小说图片视频| 综合97久久| 操逼免费视频无码国产| 五月天伊人| 91色狼| 日韩啪啪啪啪啪| 亚洲资源吧| 欧美人人AAA| 欧美日韩97在线| 日韩在线性爱免费视频| 加勒比五月天| 日本操BAV| 欧洲精品久久| 亚洲性爱免费电影| 在线天堂999| 免费精品国偷自产在线在线| 玖玖爱综合| 超碰97久久| Av色五月| 欧美美女视频| 九九九久千久久激情蜜桃在线看 | 自拍视频大全亚洲专媒视频/一区二区三区 | 日本色婷婷| 成人青青草原伊人| 黄网在线播放| 国产熟女无套内射| 99热精品免费| 综合97| 色眯眯射| 久久黄色视频一区二区三区| 亚洲色图久久成人| 边做饭边操逼逼| 久久久久久久少妇| 免费精品中文字幕| 伊人网在线点播| 五月丁香六月激情综合| 欧美亚洲天天| 精品无码一区二区| 天天操人人操狠狠插| 97精品国产手机| 色色色天美视频| 麻豆天天躁天天揉揉AV| 福利偷拍视频-中文字幕2019国语完整视频大全-S91AV | 最新国产精品久久精品| 久欲AV| 韩日精品四区| 又粗又长又大国产不卡| 欧美97日韩精品| 自拍偷拍2025在线观看| 久久日韩肥臀| AV高清一区| 久久一区二区三区入口| 男人的天堂日韩| 婷婷丁香六月天| se吧提供国产乱老熟视频胖女人| AV天黑人| 国产60区。| 男人天堂黄片| 国产精品午夜福利| 精品十三区| 亚洲高清在线| 精品国产无码中文| 久久精品高清无码一区| 欧美有码亚洲中文字幕一区二区三区四区| 免费精品人妻一区二区三| 啊啊啊好大好深| 伊人一区二区三区| 东京日日夜夜| 天天色播亚洲综合网站| 亚洲精品白浆高清久久久久久| 岛国999| 999在线电影香蕉| 亚洲色人| 97在线播放 | 免费簧片在线观看| 五月婷亚洲精品天堂| 蜜臀th| 婷婷成人五月天| 人人摸人人入| 日韩欧美蜜桃精品久久中文字幕久久| 亚射在线| 98一区二区精品| 天天躁日日躁XXXXYY| 91高潮| 久久爱超碰网| 亚洲一本色码中文字幕| 麻豆 欧美 日韩| 亚洲色欲天天人妻无码系列专区| 岛国黄片网站| 国产精品人妻免费精品| 99久久久| 久久九九久精品国产尤物|国产精品爽黄69天堂A片潘金莲,国产亚洲精品第一综合 | 国产AV色黄看到爽| 插入逼91| 天天影视色香欲综合网小说| 欧美 亚洲 在线| 国产乱不卡| 国产第11页| 国产美女激情| 大香蕉欧美国产日韩高潮| 色眯眯射| 夫妻四区五区六区| 神马久久久久眼| 亚州色交| 欧美AB在线观看| 久久久草成人网站久久久草成人久久久草久久久| 骚女天天综合网| 天天躁日日躁狠狠狠躁| 超碰97人妻自拍| 久久久96精品| 90后后入| 后入式五六区| 日韩国产九九精品一区二区三区毛片| 国产SV一线| 蜜臀久久99精品久久久久久久久| 成人片在线播放| 久久老子无码午夜伦不卡| 精品人妻av在线播放| 国产最火爆久久国产网站网站| 亚欧色图在线激情| 啊啊啊想要| 三及片网站| JuliaAnnXXX888| 72av视频| 免费精品国偷自产在线在线 | 欧美激情一| 97天堂| 麻豆国产视频精品观看| 中国和日本人色哪个不下载能放| 麻豆天美在线喷水AV| 色九九九九| 天海翼久久| 又黄又硬又粗又长国产视频| 久久久性少妇| 亚洲欧美人妻| 国产精品免费久久久久久久久久| 亚洲欧洲自拍图片专区满春格| 秋霞成人一级在线观看| a一区二区三区乱码在线| 强歼乱伦资源网| 午夜寂寞欧美| 欧美色棕合| 久久色一区二区| 欧美色图小说综合| 思思久热在线精品66| 日韩欧美大片免费高清啪啪| 国产一级作爱毛片| 一区二区 韩日AV| 欧洲射精91| 久草成人影片| 久久久偷拍| 狠狠色噜噜狠狠狠狠2018| 自拍偷拍 高清无码| 五月丁香啪啪| AV丝袜东京热| 男人的天堂不卡一区二区 | 欧美性爱一区二区三区| 乱性AV| 天天日日夜夜| 日本一区二区做爱的视频| 黄污污污污| 内射中国少妇高清视频免费视频 | 午夜一区| 亚洲国内精品成人不卡| 躁躁躁日日躁2020| 日韩三级在线观看网站| 日本亚洲熟女视频| 青青草啪啪网| 网友自拍第一页| 黄页网站免费高清在线观看| 久久的网站啊啊啊啊啊| 久热精品在线| 极品尤物自安慰| 天天干一区二区| 美女AV一区二区| 超碰在线1234区| 亚洲综合97| 超碰成人国产| 日本超碰97日韩精品人妻| 成人国产二区三区在线,男女精品。| 亚洲va有码在线天堂| 99啪| 亚洲男人天堂2| 岛国免费黄色网址| 粉嫩av平台| 日本大香蕉综合网红本杳社区| 亚洲久草AV色图| Av色五月| 亚洲精品国产精品乱码不卡| 久久婷婷影院| 久久久一区二区| 人妻色偷色噜| 亚州色综合| 欧美极度丰满熟妇hd| 久久99精品九九久久久婷婷| 精品日韩人妻精品一二三区| 人人澡人人爽人人精品| 亚洲欧美综合| 亚洲精品蜜桃久久久一区二区三区| 欧美美逼| 人妻中文字幕日韩电影| 热热色色综合| 麻豆国产97在线| ,国产乱人伦精品一区二区三区| 激情婷婷丁香网| 成人午夜视频免费播放| 久草线上视频免费看| 亚洲高清国产理伦片| 欧美亚洲涩涩| 在线人人人人人人精品超| 美女91色黄18| 亚洲成?V人片在线观看福利| 欧美色蜜桃97| 日韩国产欧美伦理在线| 午夜AV污污污| 无码少妇精品一区二区60岁老人| 精品v日韩欧美国产| 日韩高清一二三| 亚洲欧洲网站免费观看| 乱伦3P视频| 亚洲图片欧洲图片aⅴ| 日韩一区二区三区四区五区| 91视频国品一二三区| 99综合自拍| 天躁夜夜躁2021| 麻豆视频国产一区二区| av强奸乱轮| 91啪啪| 欧美在线 亚洲| 少妇一区二区三区| 国产午夜无码片在线观看影视| 成年人黄色小视频网站| 97欧美色资源| 吉田爱美AV在线| 色综合超碰超| 2024年最新色情网站在线观看| 为用户提供免费看黄网址在线观看| 日本午夜福利影院| 超碰97COm中文| 人人 操人人 操人人| 欧美老妇综合网| 日韩青久久| 乱人乱色一区二区三区免费| 久久久久久一日韩字幕无码| 亚洲综合 欧美| 插入粉嫩少妇视频| 欧洲人妻视频| 中日韩欧美精品无码AⅤ一区二区| 91亚洲黑人| 亚洲91av| 女欧美一区二三区| 亚洲欧美国产其他二区| 大香蕉人妻| 禁片 高清 在线观看视频网站| 欧美综合网A| 亚洲啪啪综合?v一区综合精品区| 91青青草| 日产狠狠干| 婷婷六月天| 97免费视频在线观看| 超碰在线人妻中文字幕| 国产成人啪一区二区| 九九亚洲视频| 思思热国产在线视频| 午夜一区| 超碰碰小说97| 麻豆福利视频导航| 婷婷视频在线免费观看| 欧美成人一级麻豆| 亚春色色| 97se综合| 亚洲在高跟鞋自慰久久在色线| 黄色小视频日本txt| 久久综合九色综合欧洲98| 国产超碰97| 曰本91情色| 蜜桃久久综合视频| 国产精品无码在线| 久综合国内精品自在自线| 欧美高清第一页| 青草伊人网| 插入粉嫩少妇视频| 神马久久久久久久久久| 久久久青青草| 亚洲AV无码国产精品久久久久| 69丨亚洲丨精品丨入口免费播放| 97精品免费视频网站| 欧美,日韩,中文,另类| 亚洲午夜福利在线影院| 一本一道久久综合久久| 人妻丝袜日本| 乱子伦一区二区三区国产精品| 欧美少妇第一页| 欧美视频边做饭边橾| 约操熟妇| 老熟女乱子伦中文字幕一区二区| 国产精品国产亚洲区艳妇糸列| 91色插| 麻豆精品.欧美精品.日韩精品.| 大干人妻| 三级日韩一区二区三区| 丰满少妇一区二区三区四区观看| 欧美综合网| 九九九九久久久| 亚洲图片视频小说| 歐美性天天| 噜噜噜亚洲精品| 人人弄人人摸| 亚洲成人妻日韩在线| 一本大道不卡一二三区| 久久这里只精品| 亚洲中文字幕乱码无码一区二区| 素人一区二区三区日韩| 一二三四区操操Av| 人妻插插人妻人| 粉嫩av在线一区二区| 五十路三区在线| 97精品一区二区三区免费| 另类成人首页一区| 色女综合| 欧美午夜视频| 玖色av| 日日骚中文字幕| aaa亚无码专区| 国产精品蜜臀久久久久无码AV| 夜夜操二区| 91欧美高清| 精品视频专区| 亚洲诱惑天堂 | 97色碰| 国产AV人人夜夜澡人人爽麻豆| 超碰在线国产| 国产二区视频在线观看电影| 精久久久| 激情综合97| 免费看欧美美女黄色大片| 国产精品爆乳懂色蜜乳| 天天激色| 97在线欧洲| 久久久久无码| 伊人网综合在线视频| 91久久青青草原精品| 91N综合网| 亚洲高清无码AAA久久久精品| 啪啪AV导航| 91爱看| 色婷婷久久| 麻豆伊人网| 2025亚洲男人天堂| 插入综合网| 二男一女成人A片| 青青操综合网| 欧美成人性爱视频免费观看| 夜夜操2028| 91在线/欧洲| 91久久久久免| www.久久最新地址| 69少妇一区二区| 国产日韩无码一区二区三区久久区| 啊啊啊啊操死我| 九九操久久国产免费视频| 91女优在线观看| 98超碰日本| 国产精品久久久久中文字幕| 91精品女厕偷拍视频| 密桃99999| 蜜乳av一区二区三区四区不卡| 麻豆亚洲AV成人无码久久精品| 欧美性爱日韩性爱| 国产精品91一样| 大但人体久久久久| 亚洲图片日本AⅤ欧美在线| 涩五月婷婷| 国产精品麻豆免费视频| 中文字幕 人妻不满 在线视频| 啊啊啊啊啊操我视频| 99久久久| 秋霞一级A片黄色视频| 91色插| 另类老少妇| 欧美第一页| av日韩中文字幕| 狠狠做深爱婷婷久久二区| 综合网97| 青青草大香蕉视频| 日本精品九九九| a啊啊啊啊啊啊啊啊一区二区| 国产白丝AV| 新怡红院| 日韩精品午夜操呦呦不卡影院| 中国特猛少妇色xxx| 夜夜嗨免费视频| 青娱乐淫乱1314| 亚洲熟女诱惑| 亚洲综合在线91| 精品久久久av无码免费| 97在线观看免费视频l| 欧美图片校园春色| 17c在线成人免费A片观看| 久久久久久大| 97欧美综合网| 色婷婷综合网站| 欧美色图99| 我爱大香蕉| 老司机福利社视频在线观看| 亚洲宗合电影| 超碰78| 欧美老熟另类| 天天日天天干天天色| 一区二区三区高清天码| 国产精品一区二区黄片| 日韩丝袜人妻AV| 999九九精品| 美女91网| 久久人妻| 国产综合操逼高清| 久久伊人网视频一区二区三区| 97视频在线视频| 亚洲国产日韩精品久久久| 亚洲性爱成人| 亚洲九月丁香| 激情图片亚洲色图| 人妻激情视频| 亚州男人天堂| 丰满人妻一区二区三区大胸懂色| 91久久精品国产| 91天天爱| 国产中出内射一区二区| 操逼网免费无码视频| 99re这里只有精品3| 九九九国产精品| 无码外流操逼视频| 亚洲.欧美.丝袜.中文.综合| 久久偷偷色综合蜜桃| 精品三级在线专区| 99爱视频| 男人的天堂色偷偷青青草视频婷婷网| 97中文综合| 翔田千里一区二区三区奶水| 欧美性爱视频免费一区一A| 97超碰天天| 久久香蕉国产线看观看亚洲女人 | 丁香九月激情啪| 亚洲有码第一页| 日韩无码三级影院| 精品亚洲黄色片 国产精品导航一区二区 | 三级三级三级日本99| 久久专区| 碰超人人在线一区二区三区| 色狠狠色| 久久精品熟妇丰满人妻99| 亚洲综合99999| 色五月婷婷色| 免费看黄片现成| 久久9精品网站| 美女黄页| 中国亚洲呦女专区| 午夜爽爽爽| 亚洲91大片| 老鸭窝亚洲毛片| 夜间福利片1000无码| 欧洲人妻视频| 亚洲天堂情色| 大香蕉宗合网在线| 亚洲天堂中文字| 亚洲色图欧洲| 日韩熟女视频二区| 亚洲射综合网| 九九精品热| 国产精品呦一区二区三区| 蜜臀一区二区三区亚洲最新章节在线观看 - 高清蜜臀一区二区三区亚洲全集播放 | 日本 成 人 小说 电影 一区二区| 人人操人人操人人操人人操人人操人人人11.CM | 激情五月天中文字幕色| 亚洲天堂资源| 91天堂视频| 天天综合网日韩7799| 九久精品| 精品国产丝袜一区二区三区乱码| 东京太热男人的天堂久久久| 91欧美丨精品丨入口| 欧美日不卡| 人人色人人操在线| 五月香婷婷| 日日97| www欧美91| 天天做天天爽| 熟女五十路一区二区三| 91日韩国产欧美亚洲另类精盘州至城都| 九九国产热| 在线播放成人网站| 久久av成人无码免费| 三级色影综合网| 久久久精品,3| 人人操人人精品影片| 色婷婷蜜臀av| 视频在线观看一二三区| 99色色网| 午夜精品久久99蜜桃的功能章节| 亚洲美女黄色| 日韩精品操少妇| 男人的天堂成人的社区| 成人五月香网在线| 99ri视频| 99色在线观看| 亚洲操逼网| 极品色www影院| 无码 有码 国产18p| 色色福利| 俺去啦俺来也久久综合| 一区二区视频在看| 亚洲蜜臀精品视频久久| 99热这里是精品| 在线看免费无码AV天堂的| 超碰免费人妻人人| 无码高清少妇久久| 亚洲密乳AV| 免费一级a毛片久久久久久鸭绿欲| 91被操| 亚洲天堂在线怕怕视频 | 国产97视频| 久久超碰天天| 超碰97.com| 91精品国产乱码| 呻吟 欧美 日本 中出| 99久久无色码| 日韩少妇丰满亚洲| 欧美网站免费| 久久蜜色情在线视频xxx免费观看| 日本操色导航| 黄片免费视频2019| 亚洲国产欧美另类自拍| 亚洲日韩美国人妻| 黄色免费网页无码| 久久高清欧美国产| 强奸xx国产| 啊…啊…操我用力操我| 久久9久9久99久9久9| 刺激精品视频| 91美女視頻| 午夜啊啊| 人人人干干人人干| 国产最新小视频在线播放下载| 久久久久久国产无码精品| 久久久久久久国产视频| 亚洲中文字幕久久人妻| 亚洲国产高清福利视频| 国产成人精品日本亚洲语言| 国产又色又爽又舒服的三级视频 | 熟妇熟女一区二三区| 99久久综合| 校园春色家庭伦理欧美激情| 久久精品无码一区二区三区| 少妇被c 黄 免费观看| 亚洲啪啪综合?v一区综合精品区| 成人26uuu| 婷婷伊人| 狠狠色一区二区中文字幕| 91操熟女视频| 国产精品毛片?v一区二区三区| 大香蕉人妻| 加勒比综合九九99视频在线播放| 欧美97免费| 被男人添B超爽视频| www.久久久久| 天天内射| 久久伊人最新网址视频| 2018天天干在线视频| 农村妇女一级二级三级视频| 日韩精品怡红院| 亚洲色阁| 欧美成人一区二区三区在线播放 | 国产99 中文字幕日韩小视频| 精品人妻二区三区| 老鸭窝亚洲毛片| 国产最新小视频在线播放下载| 亚洲日韩东京热一区| 日韩一区二区三区四区五区| 亚洲性爱无码乱伦av| 色五月网址| 性色高清在线| 制服中出中文人人精品| 偷拍亚洲情色| 中文字幕99999| 性久久久| 亚洲欧美中文日韩视频中国语| 中文字幕在线24| 上床不卡网站| 舔舔啊| 久久春色| 天操天操夜操夜月操月年年操| 裸体女人草逼视频播放一区,二区,三区,四区,五区 | 人人操人人uiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii | 少妇高潮喷水无套久久久久久| 97在线欧| 欧州一区二区三区四区| 国产高清成人mv在线观看| 久久久成人国产精品无码| 久久久啊啊| 超碰在线综合97| 91N综合网| 亚洲图片激情综合另类| 国产亚洲在线观看| 国产青青美女玩逼视频| 后入人妻无码| 国产精品毛片?v一区二区三区| 99re在线观看| 秋霞一区二区三区四区五区六区七区| 韩日欧亚a级| 一级黄色性爱A级片| 91青视频| 综合情欲网| 搞中出久久| 偷窥自拍亚洲色图| 日韩不卡网操逼中文字幕日韩| 久久激情婷婷| 国产精品青草综合久久| 夜夜福利| 啊啊啊无码| 强奸a片网| 青青草成人视频在线观看二区| 亚洲情色综合| 影音先锋视频在线| 夜夜中出国产| 伊人9| 亚洲AV色图一区| 成人无码在线视频网站| 99丝袜福利在线播放| 狠狠91| 国产av青草| 久久久精品91八戒| 欧美成人综合| 欧亚无码视频| 欧美性爱精品七区| 五月丁香啪啪啪| 天天综合~91| 一区二区三区国产精产| av网站在线看| 精品人妻一区二区三区视频| 最新啪啪视频| 久久精品—区二区三区内射| 国产青一二三| 秋霞无码av鲁丝片一区| 亚洲第一页色网| 亚洲欧美中日韩| 日韩性爱毛片操骚逼| 成人AV在线网站| 国产suv精品一区二区四| 色网在线视频观看免费| 国产久9| 第二页中文字幕| 亚洲综合精品国产一区| 福利一级版子| 亚洲无码99| 熟妇的味道HD中文字幕| 亚洲成人在线乱码色午夜| 久久精精区一区二区一蜜桃一区二区| 国内精品久久人妻性色av| 亚洲色图欧美色图在线播放| 啊啊啊啊啊啊啊国| 在线观看成人性爱免费小视频| 亚洲图片视频小说| 性生活久久久久久久久久| 亚洲超碰在线| A级国产欧美激情在线| 久久久久久久综合,国产| 色噜噜人妻av 中文字幕| A片 AV一级在线播放观看免费| 婷婷五月天激情四射| 91超碰在线播放| 宅男午夜在线视频| **一级毛片国产| 欧美日韩大香蕉| 久热伊人| 欧美黑人91| 色五月婷婷麻豆在| av在线免费一区二区| 99久久国产精品免费高潮| 少妇高潮九九九九九九九| 人人摸人人干| 激情综合亚洲| 91在线精品| 91香蕉视频在线观看免费| 蜜臀久久99精品久久久电影| 精品一二三区女同 | 日本熟妇人妻中出视频| 婷婷婷婷婷婷久久久久| 亚洲综合色图欧美| 劲爆欧美人妖三区91| 综合网久久| 欧美日不卡| 99精品在线| 欧美在线观看综合国产| 日日日日做夜夜夜夜无码| 超碰97护士| 夜夜性| 美女黄页网站| 97人妻人人躁人人玩人人| 日韩99神马视频片| 蜜臀精品1区2区| 夜夜一区二区| 五月开心网| 中文字幕精品一区二区精| 国产无码三级视频在线观看| 丰满人妻一区二区三区蜜桃视频| 全国男人天堂网| 91精品操美女| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师 | 一级片在线观看高清无码| 欧美激情亚洲| 亚洲码和欧洲精品激情系列| 秋霞视频一区二区| 久久riav中文精品| 国产捆绑一区| 亚洲人人夜夜澡人人爽| 97久久精品| 老鸭窝成人| 天天舔天天日天天射| 99啪| 国产精品亚洲免费| 午夜亚洲| 久久精品91| 午夜视频久久久| 久久久久久99999国产精品| 97久久久久久久久久| 色哟哟av| 亚洲天堂另类| 男人天堂毛片| 青娱乐妇女性生活| 中国一级αV| 自拍偷拍草一草| 欧美,日韩综合久久| 岛国网址国产| 大伊香蕉在线视频免费| 亚洲夜夜欢无码一区二区| 五月丁香激情啪啪| 开心五月深爱五月| 丰满人妻一区二区三区在线| 熟啊v色欧美热| 强奸熟女一区二区三区| 欧美综合自拍亚洲综合图| 亚洲一区二区性爱电影| 综合久久久久久久久91| 久久大| 天天澡天天爽日日AV| 男人的天堂com| 欧美92| 一本久道久久综合狠狠爱一密臀精 | 久久久久久久一级黄色打同平台| 蜜臀亚洲中文| 91久热| 26UUU欧美日本| 日夜伊人网| 精品久久久久久久| 91人人操| 91操熟女| 亚洲自拍青操视频| 国产精品夜夜夜| 欧美啪啪啪91| 视频二区美腿制服人妻欧美| 久久精品国产97欧美精品亚洲 | 97在线免费视频观看| 欧美在线第五页| 精品人妻15区|