色五月色开心色婷婷色丁香,五月婷婷丁香花综合网,婷婷丁香五月激情综合在线,五月婷婷六月丁香动漫,婷婷丁香五月激情综合在线,丁香花中文字幕在线观看,播五月色五月开心五月网,开心激情综合网,狠狠色丁香婷婷综合最新地址,丁香视频在线观看,狠狠做六月爱婷婷综合av,久久激情五月丁香伊人

ARTICLE DETAIL

資訊詳情

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

Linux中斷子系統(tǒng)與設(shè)備樹(shù)映射:驅(qū)動(dòng)移植必知的中斷排查指南

Linux中斷子系統(tǒng)與設(shè)備樹(shù)映射:驅(qū)動(dòng)移植必知的中斷排查指南 1. 移植驅(qū)動(dòng)前先搞清楚中斷子系統(tǒng)到底在幫你做什么做驅(qū)動(dòng)移植最怕拿到一份源碼就開(kāi)干改改寄存器地址、換換時(shí)鐘頻率結(jié)果中斷死活不觸發(fā)或者一觸發(fā)就死機(jī)。我見(jiàn)過(guò)太多人卡在中斷上本質(zhì)問(wèn)題不是代碼寫錯(cuò)了而是對(duì)整個(gè)中斷子系統(tǒng)缺少一張地圖——不知道中斷從硬件引腳到CPU執(zhí)行回調(diào)函數(shù)中間到底經(jīng)過(guò)了哪些環(huán)節(jié)、每一層由誰(shuí)負(fù)責(zé)、移植時(shí)哪些東西必須跟著SoC變化、哪些東西是內(nèi)核幫你擋掉的。先說(shuō)個(gè)場(chǎng)景。你在A平臺(tái)的開(kāi)發(fā)板上跑得好好的驅(qū)動(dòng)換到B平臺(tái)系統(tǒng)起來(lái)后cat /proc/interrupts看不到你的中斷號(hào)或者能看到號(hào)但計(jì)數(shù)永遠(yuǎn)不漲又或者中斷風(fēng)暴直接把CPU打滿。這時(shí)候如果你腦子里沒(méi)有中斷子系統(tǒng)的整體框架排查起來(lái)就是瞎貓碰死耗子一會(huì)懷疑設(shè)備樹(shù)寫錯(cuò)了一會(huì)懷疑寄存器配置不對(duì)一會(huì)又懷疑是內(nèi)核版本差異。而實(shí)際上問(wèn)題可能只是中斷控制器Interrupt Controller的映射關(guān)系沒(méi)對(duì)上或者中斷類型電平觸發(fā)、邊沿觸發(fā)在硬件上根本配不出來(lái)。所以這篇我打算把Linux中斷子系統(tǒng)的整體框架掰開(kāi)揉碎講一遍并且站在“驅(qū)動(dòng)移植”的視角——重點(diǎn)不是你從頭寫一個(gè)中斷子系統(tǒng)而是當(dāng)你把驅(qū)動(dòng)從一個(gè)平臺(tái)搬到另一個(gè)平臺(tái)時(shí)哪些環(huán)節(jié)最容易出問(wèn)題、為什么出問(wèn)題、該怎么定位??蚣芨忝靼琢艘浦策^(guò)程中的九成中斷問(wèn)題你都能自己判斷個(gè)大概。先給一張總覽圖后面逐個(gè)環(huán)節(jié)拆硬件中斷源外設(shè)→ 中斷控制器GIC等→ CPU的IRQ引腳內(nèi)核側(cè)irq domain負(fù)責(zé)把硬件中斷號(hào)翻譯成Linux內(nèi)部中斷號(hào)virqirq_desc每個(gè)virq對(duì)應(yīng)一個(gè)描述符存放回調(diào)函數(shù)、標(biāo)志位、線程化信息中斷流控層handle_irq系列處理不同觸發(fā)類型的中斷流驅(qū)動(dòng)回調(diào)request_irq/devm_request_irq注冊(cè)的handler最終被執(zhí)行通俗點(diǎn)說(shuō)中斷子系統(tǒng)就是一套“硬件中斷事件 → 內(nèi)核事件分發(fā) → 驅(qū)動(dòng)處理函數(shù)”的管道系統(tǒng)。移植驅(qū)動(dòng)的過(guò)程就是讓這套管道在你新的硬件平臺(tái)上重新暢通。2. 硬件中斷號(hào)怎么變成Linux的irq號(hào)從GIC到virq的映射邏輯2.1 GIC是絕大多數(shù)SoC中斷的起點(diǎn)無(wú)論是高通、海思、瑞芯微還是全志主流ARM SoC的中斷控制器基本都走ARM GICGeneric Interrupt Controller架構(gòu)。GIC的版本從GIC-400、GIC-500到GIC-600系列差異主要在支持的CPU核數(shù)、中斷數(shù)、親和性配置上但基本概念一致。GIC把中斷分為三類SGISoftware Generated Interrupt軟件觸發(fā)的中斷用于核間通信0~15號(hào)。PPIPrivate Peripheral Interrupt私有外設(shè)中斷每個(gè)CPU核獨(dú)享比如每個(gè)核的local timer16~31號(hào)。SPIShared Peripheral Interrupt共享外設(shè)中斷所有核都能收到32號(hào)往上一般到幾百號(hào)。在設(shè)備樹(shù)里你經(jīng)??吹筋愃七@樣的節(jié)點(diǎn)uart0: serialff580000 { compatible rockchip,rk3399-uart; reg 0x0 0xff580000 0x0 0x100; interrupts GIC_SPI 115 IRQ_TYPE_LEVEL_HIGH; };這里的GIC_SPI 115就是指SPI中斷硬件中斷號(hào)是115。注意這個(gè)115是GIC視角的硬件編號(hào)不是Linux內(nèi)部使用的irq號(hào)。從GIC的115到Linux的irq號(hào)中間隔著一個(gè)關(guān)鍵的數(shù)據(jù)結(jié)構(gòu)——irq domain。2.2 irq domain就是一張翻譯表在老版本內(nèi)核里硬件中斷號(hào)和Linux irq號(hào)經(jīng)常是線性對(duì)應(yīng)的irq 32 hw_irq之類的簡(jiǎn)單公式就能算出來(lái)。但后來(lái)中斷控制器層級(jí)變多、需要?jiǎng)討B(tài)分配內(nèi)核引入了irq domain機(jī)制。每一個(gè)中斷控制器注冊(cè)一個(gè)irq_domain通過(guò)irq_domain_ops里的map和translate回調(diào)實(shí)現(xiàn)硬件中斷號(hào)到virq的轉(zhuǎn)換。驅(qū)動(dòng)移植中最常見(jiàn)的一個(gè)問(wèn)題就是你板子上的外設(shè)中斷在設(shè)備樹(shù)里寫的硬件號(hào)是GIC視角的號(hào)而內(nèi)核跑起來(lái)之后你cat /proc/interrupts看到的號(hào)是virq。這兩者往往不一致。比如某外設(shè)硬件中斷號(hào)是211在/proc/interrupts里卻顯示為86這都是正常的由irq domain和分配順序決定。以經(jīng)典GIC驅(qū)動(dòng)為例注冊(cè)的irq_domain大概是這個(gè)流程gic_init_bases(...) - irq_domain_add_linear(gic-base, gic-irq_nr, gic_irq_domain_ops, gic)irq_domain_add_linear創(chuàng)建線性映射域gic_irq_domain_ops里核心是兩個(gè)回調(diào)gic_irq_domain_map把GIC硬件中斷號(hào)映射成irq_desc并設(shè)置irq_chipgic_irq_domain_translate解析設(shè)備樹(shù)interrupts屬性里的GIC_SPI 115 IRQ_TYPE_LEVEL_HIGH三元組移植驅(qū)動(dòng)時(shí)你要清楚一件事設(shè)備樹(shù)里你寫的中斷號(hào)是給GIC翻譯用的翻譯完之后的virq才是驅(qū)動(dòng)里真正注冊(cè)使用的號(hào)。你在驅(qū)動(dòng)代碼里寫irq platform_get_irq(pdev, 0)拿到的是這個(gè)virq。2.3 移植中最常見(jiàn)的三類映射錯(cuò)誤第一類設(shè)備樹(shù)中斷號(hào)寫錯(cuò)。比如芯片手冊(cè)里說(shuō)某個(gè)外設(shè)中斷是SPI 118結(jié)果你寫成118后驅(qū)動(dòng)始終不觸發(fā)查手冊(cè)發(fā)現(xiàn)在另一個(gè)中斷控制器域下或者實(shí)際要減去偏移。尤其當(dāng)SoC內(nèi)部有多個(gè)中斷控制器級(jí)聯(lián)時(shí)設(shè)備樹(shù)里寫的號(hào)必須參照該控制器域的定義。第二類interrupt-parent指錯(cuò)。多控制器SoC上外設(shè)節(jié)點(diǎn)要用interrupt-parent指定掛在哪個(gè)中斷控制器下。如果漏寫或者指到錯(cuò)誤的父節(jié)點(diǎn)內(nèi)核會(huì)用默認(rèn)域的翻譯方式去解析出來(lái)的號(hào)可能對(duì)不上硬件實(shí)際接的那條線。第三類觸發(fā)類型不匹配。設(shè)備樹(shù)里寫IRQ_TYPE_LEVEL_HIGH但硬件外設(shè)的實(shí)際中斷輸出是低電平有效、需要IRQ_TYPE_LEVEL_LOW。這種問(wèn)題在/proc/interrupts里能看到中斷號(hào)但計(jì)數(shù)不漲因?yàn)殡娖揭恢睕](méi)被拉低中斷控制器采樣不到有效信號(hào)。3. 驅(qū)動(dòng)側(cè)的中斷注冊(cè)流程從request_irq到回調(diào)執(zhí)行的完整鏈路3.1 platform_get_irq與request_irq之間的微妙關(guān)系寫驅(qū)動(dòng)時(shí)標(biāo)準(zhǔn)流程一般是static int foo_probe(struct platform_device *pdev) { int irq; irq platform_get_irq(pdev, 0); if (irq 0) return irq; ret devm_request_threaded_irq(pdev-dev, irq, foo_irq_handler, foo_irq_thread_fn, IRQF_TRIGGER_HIGH, foo, dev); return ret; }很多人不清楚platform_get_irq到底做了什么。函數(shù)內(nèi)部經(jīng)歷大致是解析設(shè)備樹(shù)節(jié)點(diǎn) → 走of_irq_get→ 找到interrupt-parent對(duì)應(yīng)的irq domain→ 調(diào)用irq_create_of_mapping把硬件中斷號(hào)翻譯成virq→ 返回。注意platform_get_irq拿到virq后中斷還沒(méi)有真正被請(qǐng)求。驅(qū)動(dòng)此時(shí)只是拿到了一個(gè)“令牌”真正把我們的處理函數(shù)掛到中斷管道上是后續(xù)的request_irq或devm_request_irq完成的。移植時(shí)經(jīng)常遇到的情況probe里platform_get_irq返回-ENXIO也就是拿不到中斷號(hào)。排查思路按順序來(lái)設(shè)備樹(shù)節(jié)點(diǎn)是否存在interrupts屬性。設(shè)備樹(shù)節(jié)點(diǎn)是否設(shè)置了正確的interrupt-parent。對(duì)應(yīng)中斷控制器的驅(qū)動(dòng)是否已經(jīng)初始化完成probe順序問(wèn)題經(jīng)常被人忽略。of_irq_get解析時(shí)是否因?yàn)橛|發(fā)類型字段非法而失敗。3.2 top half和bottom half為什么你的回調(diào)不能干重活Linux中斷處理函數(shù)跑在中斷上下文它有幾個(gè)硬性約束不能睡眠、不能調(diào)用可能睡眠的APImutex_lock、kmalloc帶GFP_KERNEL都不行、不能做太耗時(shí)的操作。因?yàn)橹袛嗌舷挛睦顲PU不參與調(diào)度你在里面轉(zhuǎn)5毫秒整個(gè)系統(tǒng)就卡5毫秒。于是有了bottom half機(jī)制。傳統(tǒng)做法是tasklet現(xiàn)在更推薦用threaded irq也就是上面代碼里的devm_request_threaded_irq。這種模式下中斷觸發(fā)時(shí)先跑handler如果handler返回IRQ_WAKE_THREAD內(nèi)核會(huì)喚醒一個(gè)內(nèi)核線程去執(zhí)行thread_fn而thread_fn運(yùn)行在普通進(jìn)程上下文可以睡眠、可以加鎖、可以調(diào)用各種胖接口。移植驅(qū)動(dòng)的經(jīng)驗(yàn)之談如果外設(shè)中斷處理里要操作i2c或者spi總線讀取狀態(tài)寄存器就強(qiáng)烈建議用threaded irq。因?yàn)閕2c控制器本身也是中斷驅(qū)動(dòng)的中斷上下文里再去等它的中斷完成很容易死鎖而在線程化上下文里i2c傳輸可以正常睡眠等待。3.3 中斷標(biāo)志位IRQF_TRIGGER_*與設(shè)備樹(shù)觸發(fā)類型是一致的嗎request_irq里第四個(gè)參數(shù)IRQF_TRIGGER_HIGH/LOW/RISING/FALLING指定觸發(fā)類型。在設(shè)備樹(shù)已經(jīng)寫了觸發(fā)類型的前提下驅(qū)動(dòng)里再指定一次兩者到底聽(tīng)誰(shuí)的這里有坑。GIC這類現(xiàn)代中斷控制器設(shè)備樹(shù)里的觸發(fā)類型最終會(huì)下發(fā)到硬件層GIC配置對(duì)應(yīng)中斷的觸發(fā)方式和優(yōu)先級(jí)。驅(qū)動(dòng)里request_irq的IRQF_TRIGGER_*是Linux中斷子系統(tǒng)的軟件標(biāo)志但如果底層irq_chip已經(jīng)根據(jù)設(shè)備樹(shù)完成了硬件配置驅(qū)動(dòng)里的標(biāo)志可能被忽略或覆蓋不同內(nèi)核版本行為不一樣。我的建議設(shè)備樹(shù)里明確寫觸發(fā)類型驅(qū)動(dòng)里request_irq直接傳0或IRQF_TRIGGER_NONE不要讓兩個(gè)地方出現(xiàn)沖突。尤其移植時(shí)原始平臺(tái)設(shè)備樹(shù)寫的是IRQ_TYPE_EDGE_RISING新平臺(tái)換成IRQ_TYPE_LEVEL_HIGH而驅(qū)動(dòng)代碼里還保留老標(biāo)志這就會(huì)埋雷。4. 中斷控制器驅(qū)動(dòng)與irq_chip移植時(shí)真正要?jiǎng)拥兜牡胤?.1 irq_chip是中斷控制器在內(nèi)核里的抽象irq_chip封裝了中斷控制器的硬件操作包括irq_mask/irq_unmask屏蔽/使能某個(gè)中斷源irq_ack中斷應(yīng)答irq_set_type設(shè)置觸發(fā)類型irq_set_wake使能喚醒irq_set_affinity設(shè)置CPU親和性每個(gè)irq_desc里掛著一個(gè)irq_chip指針驅(qū)動(dòng)調(diào)用enable_irq、disable_irq、irq_set_irq_type時(shí)最終都會(huì)落到對(duì)應(yīng)irq_chip的回調(diào)上。在GIC驅(qū)動(dòng)的實(shí)現(xiàn)里gic_handle_irq是最核心的函數(shù)它做的事是讀GICC_IAR寄存器拿到硬件中斷號(hào) → 如果小于16SGI做核間處理如果是PPI/SPI調(diào)用generic_handle_irq分發(fā)到對(duì)應(yīng)virq的處理流程。移植驅(qū)動(dòng)到新平臺(tái)時(shí)如果新平臺(tái)的中斷控制器不是標(biāo)準(zhǔn)GIC比如有些國(guó)產(chǎn)SoC用了私有中斷控制器或者經(jīng)過(guò)了一層自定義的級(jí)聯(lián)封裝你就需要看這個(gè)芯片廠商是否提供了對(duì)應(yīng)的irq_chip實(shí)現(xiàn)。如果廠商沒(méi)提供驅(qū)動(dòng)里任何中斷都無(wú)法正常工作因?yàn)閕rq_set_type、irq_mask這些操作都沒(méi)有落點(diǎn)。4.2 irq domain層級(jí)級(jí)聯(lián)時(shí)怎么排查有些SoC內(nèi)部不止一個(gè)中斷控制器。典型例子主GIC外掛一個(gè)GPIO控制器而GPIO控制器本身又作為中斷控制器把多路GPIO中斷匯聚成一路SPI中斷送往GIC。這種層級(jí)關(guān)系在設(shè)備樹(shù)里表現(xiàn)為gpio2: gpioff790000 { compatible rockchip,gpio-bank; reg 0x0 0xff790000 0x0 0x100; interrupt-controller; #interrupt-cells 2; interrupts GIC_SPI 116 IRQ_TYPE_LEVEL_HIGH; };此時(shí)一個(gè)外設(shè)掛了gpio2的第5號(hào)引腳作為中斷源foo_device { interrupt-parent gpio2; interrupts 5 IRQ_TYPE_EDGE_RISING; };of_irq_get解析時(shí)就會(huì)先走到gpio2的irq domain把5翻譯成gpio2域的virq與此同時(shí)gpio2本身作為中斷源又掛在GIC的116號(hào)上形成一個(gè)鏈外設(shè)中斷 → GPIO控制器 → GIC → CPU。移植時(shí)這種層級(jí)最容易出問(wèn)題。常見(jiàn)的坑interrupt-controller和#interrupt-cells屬性遺漏導(dǎo)致外設(shè)節(jié)點(diǎn)無(wú)法解析。GPIO控制器里某個(gè)引腳的中斷和別的外設(shè)沖突/proc/interrupts里能看到gpio底下所有中斷事件歸屬同一個(gè)virq計(jì)數(shù)。層次多了之后觸發(fā)類型可能被某一層的irq_chip改變。比如外設(shè)和GPIO控制器申請(qǐng)的是邊沿觸發(fā)但GPIO控制器匯入GIC時(shí)如果只支持電平觸發(fā)內(nèi)核會(huì)自動(dòng)做一次轉(zhuǎn)換嗎不會(huì)。所以你必須保證每層中斷控制器的觸發(fā)類型配置都合理否則邊緣觸發(fā)的外設(shè)在GIC層采樣不到。排查這種層級(jí)問(wèn)題時(shí)我一般會(huì)在設(shè)備樹(shù)里臨時(shí)加interrupts-extended來(lái)跳過(guò)中間層直接指定上層控制器快速確認(rèn)問(wèn)題是出在中間層還是最終層。4.3 percpu中斷和共享中斷在移植中的區(qū)別處理中斷還有一種分類方式是否per-CPU的以及是否可共享。PPI中斷比如每核的local timer就是per-CPU的。設(shè)備樹(shù)里你會(huì)看到類似arch_timer { interrupts GIC_PPI 13 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_LOW); };注意這里中斷號(hào)是GIC_PPI 13而且多了一個(gè)GIC_CPU_MASK_SIMPLE(4)來(lái)指定中斷發(fā)給哪些CPU核。移植這種設(shè)備時(shí)如果有人把PPI當(dāng)成SPI去注冊(cè)或者request_percpu_irq和request_irq用混了就亂了。PPI必須用request_percpu_irq配合enable_percpu_irq處理函數(shù)里訪問(wèn)per-CPU變量也有一套固定寫法。而共享中斷IRQF_SHARED是多個(gè)設(shè)備共用一個(gè)中斷號(hào)。這類中斷在request_irq時(shí)必須傳入設(shè)備ID指針內(nèi)核觸發(fā)時(shí)會(huì)逐個(gè)調(diào)用注冊(cè)在同一virq上的handler直到某個(gè)handler返回IRQ_HANDLED。移植時(shí)如果驅(qū)動(dòng)里沒(méi)用IRQF_SHARED卻在設(shè)備樹(shù)里和別的設(shè)備共用了中斷號(hào)request_irq會(huì)直接失敗返回-EBUSY。5. 從硬件觸發(fā)到回調(diào)執(zhí)行的瞬間中斷流控層與desc處理流程5.1 handle_irq系列函數(shù)到底做了什么中斷流控層是不少人忽略的環(huán)節(jié)。在generic_handle_irq被調(diào)用后內(nèi)核會(huì)根據(jù)中斷的觸發(fā)類型和是否喚醒等屬性調(diào)用不同的流控函數(shù)。最??吹降挠衕andle_level_irq電平觸發(fā)中斷走這個(gè)handle_edge_irq邊沿觸發(fā)中斷走這個(gè)handle_fasteoi_irqGIC這種支持EOIEnd of Interrupt的控制器走這個(gè)handle_simple_irq某些不做硬件屏蔽的控制器用這些函數(shù)的職責(zé)是管理中斷的屏蔽/使能狀態(tài)、處理中斷嵌套和pending狀態(tài)、調(diào)用irq_desc里注冊(cè)的action鏈也就是驅(qū)動(dòng)注冊(cè)的handler。移植時(shí)你不需要改這些流控函數(shù)但你必須理解它們的差異。最常見(jiàn)的現(xiàn)象電平觸發(fā)的中斷如果handler里沒(méi)做irq_ack或者中斷源沒(méi)有被真正清掉handle_level_irq會(huì)在handler返回后立刻再次觸發(fā)導(dǎo)致中斷風(fēng)暴。邊沿觸發(fā)的中斷則容易丟中斷如果中斷觸發(fā)時(shí)irq_desc正被屏蔽邊沿信號(hào)不會(huì)像電平信號(hào)那樣被鎖存恢復(fù)使能后可能就丟了。5.2 實(shí)測(cè)中最容易翻車的場(chǎng)景中斷風(fēng)暴與丟失中斷我實(shí)際移植一個(gè)網(wǎng)卡驅(qū)動(dòng)時(shí)遇到過(guò)這么一件事設(shè)備樹(shù)里寫的中斷觸發(fā)類型是IRQ_TYPE_LEVEL_HIGH但實(shí)際上網(wǎng)卡芯片的中斷輸出引腳在空閑時(shí)本來(lái)就是高電平只有產(chǎn)生中斷時(shí)才短暫拉低。結(jié)果驅(qū)動(dòng)一旦enable_irqGIC采樣到高電平就一直認(rèn)為有中斷中斷風(fēng)暴瞬間打滿CPU。當(dāng)時(shí)的排查過(guò)程很有代表性/proc/interrupts里該中斷的計(jì)數(shù)在瘋狂暴漲CPU0的si時(shí)間百分比飆到90%以上但驅(qū)動(dòng)里的handler卻進(jìn)得很少——因?yàn)轱L(fēng)暴中斷全被流控層攔截處理了。后來(lái)把設(shè)備樹(shù)里的觸發(fā)類型改成IRQ_TYPE_LEVEL_LOW一次問(wèn)題就沒(méi)了。另一個(gè)方向是丟中斷。用邊沿觸發(fā)時(shí)外設(shè)產(chǎn)生中斷的脈沖非常窄如果在GIC采樣到之前信號(hào)就消失了這個(gè)中斷就丟了。這類問(wèn)題在低速總線的外設(shè)上尤其明顯——外設(shè)快、主機(jī)慢兩個(gè)時(shí)鐘域之間的脈沖寬度不足。排查手段是在驅(qū)動(dòng)里做一次“虛假中斷檢測(cè)”handler里讀外設(shè)中斷狀態(tài)寄存器如果發(fā)現(xiàn)沒(méi)有對(duì)應(yīng)中斷標(biāo)志就返回IRQ_NONE讓內(nèi)核把該virq標(biāo)記為可疑中斷/proc/interrupts旁邊會(huì)出現(xiàn)[NMI]之類的錯(cuò)誤提示。5.3 irq_desc里的action鏈表多個(gè)handler怎么排隊(duì)一個(gè)virq可以掛多個(gè)action這正是共享中斷的實(shí)現(xiàn)基礎(chǔ)。request_irq時(shí)傳入的dev_id就是用來(lái)區(qū)分不同action的。當(dāng)handle_*_irq運(yùn)行時(shí)會(huì)遍歷irq_desc的action鏈表逐個(gè)調(diào)用handler直到有一個(gè)返回IRQ_HANDLED。這里有個(gè)性能考慮共享中斷鏈越長(zhǎng)每個(gè)中斷觸發(fā)需要遍歷的handler就越多。所以移植時(shí)如果發(fā)現(xiàn)某個(gè)中斷號(hào)和多個(gè)設(shè)備共享性能敏感的場(chǎng)景下最好在硬件層面錯(cuò)開(kāi)中斷源或者確認(rèn)每個(gè)handler開(kāi)頭都能快速判斷“這個(gè)中斷是不是我的”。6. 設(shè)備樹(shù)里中斷相關(guān)的關(guān)鍵屬性移植時(shí)逐項(xiàng)核對(duì)清單6.1 interrupt-parent、interrupts、interrupt-names的配合設(shè)備樹(shù)中斷屬性三板斧是interrupt-parent指定中斷控制器父節(jié)點(diǎn)告訴內(nèi)核該設(shè)備的某個(gè)引腳接到哪個(gè)中斷控制器的哪個(gè)輸入上。interrupts一般是中斷類型 中斷號(hào) 觸發(fā)類型或中斷號(hào) 觸發(fā)類型取決于父控制器的#interrupt-cells。interrupt-names給每個(gè)中斷起個(gè)名字配合platform_get_irq_byname使用。多中斷設(shè)備很常見(jiàn)比如一個(gè)觸摸屏控制器有觸摸中斷和喚醒中斷兩個(gè)引腳touch38 { interrupt-parent gpio1; interrupts 5 IRQ_TYPE_EDGE_FALLING, 6 IRQ_TYPE_EDGE_FALLING; interrupt-names touch, wakeup; };驅(qū)動(dòng)里用platform_get_irq_byname(pdev, touch)去拿對(duì)應(yīng)中斷號(hào)。移植時(shí)改名會(huì)導(dǎo)致platform_get_irq_byname返回-EINVAL而很多人排查時(shí)老是檢查interrupts卻忘了interrupt-names對(duì)應(yīng)不上。6.2 中斷控制器節(jié)點(diǎn)的關(guān)鍵屬性中斷控制器節(jié)點(diǎn)自身也有幾個(gè)屬性決定它如何被內(nèi)核識(shí)別interrupt-controller空屬性聲明該節(jié)點(diǎn)是一個(gè)中斷控制器。#interrupt-cells聲明子節(jié)點(diǎn)里interrupts需要幾個(gè)單元格來(lái)描述。GIC是3個(gè)類型、號(hào)、觸發(fā)方式GPIO控制器是2個(gè)引腳號(hào)、觸發(fā)方式。interrupts聲明這個(gè)中斷控制器本身接到上級(jí)控制器的哪個(gè)中斷上級(jí)聯(lián)時(shí)才有。interrupt-parent指向更上一級(jí)的控制器。移植新板子時(shí)如果外設(shè)中斷完全不可用我一般會(huì)先檢查控制器節(jié)點(diǎn)這4個(gè)屬性是否齊全。這里有個(gè)隱蔽的問(wèn)題部分SoC的設(shè)備樹(shù)里GPIO節(jié)點(diǎn)的interrupt-controller屬性會(huì)被注釋掉或者缺失因?yàn)镚PIO IP在芯片內(nèi)部不是傳統(tǒng)意義上的“中斷控制器”但驅(qū)動(dòng)里如果某個(gè)外設(shè)把它當(dāng)父控制器用解析就失敗。6.3 中斷映射失敗時(shí)內(nèi)核日志怎么看設(shè)備樹(shù)解析中斷失敗時(shí)串口日志里一般能看到類似could not get irq或failed to get interrupt resource的信息。但更早的解析錯(cuò)誤提示很模糊。定位手段一個(gè)是打開(kāi)動(dòng)態(tài)調(diào)試echo 1 /sys/kernel/debug/tracing/tracing_on echo irq:* /sys/kernel/debug/tracing/set_event另一個(gè)更直接的辦法是查/sys/kernel/debug/irq/irqs/下的每個(gè)irq_desc信息確認(rèn)設(shè)備樹(shù)映射后virq對(duì)應(yīng)的irq_chip是不是你預(yù)期的那顆控制器cat /sys/kernel/debug/irq/irqs/86如果irq_chip顯示的是gic而設(shè)備樹(shù)里你接的是gpio2的域說(shuō)明級(jí)聯(lián)映射沒(méi)有生效問(wèn)題基本出在interrupt-parent。7. 中斷號(hào)查詢與映射調(diào)試把/proc/interrupts讀成診斷書7.1 /proc/interrupts每一列怎么讀驅(qū)動(dòng)移植調(diào)中斷/proc/interrupts是第一現(xiàn)場(chǎng)。它的基本格式CPU0 CPU1 16: 1234 0 GICv3 49 Level arch_timer 86: 56789 321 gpio 20 Edge fdd40000.ethernet第一列是virq號(hào)后面每列是一個(gè)CPU核上該中斷觸發(fā)的次數(shù)然后是中斷控制器名稱和硬件內(nèi)部分組接著是硬件中斷號(hào)、觸發(fā)類型最后是request_irq時(shí)注冊(cè)的設(shè)備名。判斷標(biāo)準(zhǔn)計(jì)數(shù)一直為0中斷根本沒(méi)到控制器或沒(méi)被使能。計(jì)數(shù)暴漲觸發(fā)類型或清中斷邏輯有問(wèn)題。多個(gè)中斷源的計(jì)數(shù)都?xì)w到一個(gè)virq下共享中斷需要靠寄存器判斷是哪路外設(shè)。計(jì)數(shù)在兩個(gè)CPU核間來(lái)回跳動(dòng)說(shuō)明中斷被設(shè)置了親和性或GIC做了負(fù)載均衡正?,F(xiàn)象。7.2 驅(qū)動(dòng)注冊(cè)成功但中斷不觸發(fā)時(shí)的排查順序如果/proc/interrupts里能看到你的virq、設(shè)備名也對(duì)但計(jì)數(shù)一直0我一般按這個(gè)順序排查確認(rèn)外設(shè)確實(shí)產(chǎn)生了中斷信號(hào)。用示波器或者直接在驅(qū)動(dòng)里臨時(shí)寫一個(gè)測(cè)試IO觸發(fā)外設(shè)發(fā)送中斷后再讀外設(shè)的中斷狀態(tài)寄存器確認(rèn)硬件層面中斷標(biāo)志有沒(méi)有置起來(lái)。檢查中斷控制器的屏蔽狀態(tài)。/sys/kernel/debug/irq/irqs/86里能看到irq_data的state確認(rèn)IRQ_MASKED標(biāo)志是否置位。檢查觸發(fā)類型。/proc/interrupts里顯示的觸發(fā)類型是否和硬件實(shí)際信號(hào)匹配。檢查時(shí)鐘。沒(méi)有外設(shè)時(shí)鐘外設(shè)根本不會(huì)工作更不會(huì)產(chǎn)生中斷。這個(gè)聽(tīng)著很傻但確實(shí)在移植中踩過(guò)好多次。我的一個(gè)具體案例某傳感器中斷一直不觸發(fā)排查到最后發(fā)現(xiàn)設(shè)備樹(shù)里給它配的時(shí)鐘源沒(méi)有通過(guò)clk_prepare_enable打開(kāi)傳感器壓根沒(méi)跑起來(lái)自然不會(huì)有中斷。7.3 線程化中斷在/proc/interrupts里的表現(xiàn)線程化中斷在/proc/interrupts里會(huì)看到一個(gè)配套的內(nèi)核線程名字一般是irq/86-fdd40000.ethernet之類的。中斷觸發(fā)時(shí)handler只做快速處理真正的業(yè)務(wù)邏輯在irq/86-xxx線程里執(zhí)行。調(diào)這類問(wèn)題時(shí)除了看/proc/interrupts的計(jì)數(shù)變化還要看線程的調(diào)度狀態(tài)ps -eo pid,comm,state | grep irq/如果線程處于D狀態(tài)不可中斷睡眠長(zhǎng)期不返回多半是thread_fn里阻塞在了某個(gè)等待隊(duì)列或鎖上。這在移植時(shí)很常見(jiàn)因?yàn)樵计脚_(tái)的外設(shè)寄存器延遲和時(shí)序和新平臺(tái)不同原本毫秒級(jí)的等待變成幾十毫秒或者直接超時(shí)了。8. 移植后的中斷驗(yàn)證與踩坑復(fù)盤8.1 冒煙測(cè)試中斷鏈路的壓測(cè)腳本思路移植完之后我一般會(huì)做一個(gè)簡(jiǎn)單的冒煙驗(yàn)證不是只觸發(fā)一次中斷看看handler進(jìn)沒(méi)進(jìn)而是壓一輪高頻中斷# 模擬高頻中斷事件例如用perf觸發(fā)大量定時(shí)器中斷或者IRQ stress-ng --timer 32 --timeout 30 cat /proc/interrupts觀察幾個(gè)點(diǎn)中斷計(jì)數(shù)和中斷源觸發(fā)次數(shù)是否線性匹配允許少量合理丟失但不能差一個(gè)數(shù)量級(jí)。CPU的si軟中斷和hi硬中斷占比是否正常正常情況下不應(yīng)持續(xù)高位。驅(qū)動(dòng)handler是否出現(xiàn)超時(shí)報(bào)錯(cuò)內(nèi)核日志里有沒(méi)有IRQ handler type mismatch或nobody cared這類字樣。cat /proc/interrupts時(shí)如果發(fā)現(xiàn)某中斷觸發(fā)了可觀的次數(shù)但handler沒(méi)有任何反應(yīng)優(yōu)先懷疑IRQF_TRIGGER_*配置。如果使用threaded irq建議也在壓測(cè)期間觀察ps里對(duì)應(yīng)的irq/xxx線程的CPU占用率正常情況下它應(yīng)該能跟上中斷頻率。如果線程CPU占滿而實(shí)際業(yè)務(wù)沒(méi)完成說(shuō)明thread_fn里存在忙等或者頻繁輪詢的問(wèn)題移植時(shí)尤其要注意。8.2 兩種移植場(chǎng)景的處理差異原樣替換和跨內(nèi)核版本移植中斷相關(guān)代碼時(shí)有兩種典型場(chǎng)景一是原廠BSP提供了完整的內(nèi)核和驅(qū)動(dòng)你只是把某個(gè)外設(shè)驅(qū)動(dòng)移到自己的板卡上。這種情況基礎(chǔ)設(shè)施多半是好的重點(diǎn)檢查設(shè)備樹(shù)、時(shí)鐘、IO復(fù)用和中斷引腳。中斷相關(guān)代碼需要?jiǎng)拥目赡苄圆淮蟪荢oC中斷控制器本身變了。二是跨內(nèi)核版本移植比如把4.19的驅(qū)動(dòng)往6.1內(nèi)核上搬。這時(shí)中斷子系統(tǒng)API變化比較明顯最典型的是of_irq_get和platform_get_irq的返回值語(yǔ)義在老內(nèi)核里可能是0表示成功新內(nèi)核里0表示無(wú)效且失敗返回值是負(fù)數(shù)。如果你用老驅(qū)動(dòng)的判斷邏輯在新內(nèi)核上會(huì)誤判。devm_request_threaded_irq的引入時(shí)間、request_percpu_irq的語(yǔ)義變化。老內(nèi)核里handle_irq的入口行為和新內(nèi)核不同部分自定義irq_chip在舊平臺(tái)還能工作新平臺(tái)因?yàn)槿鄙賗rq_set_affinity或者irq_set_wake的調(diào)用上下文直接報(bào)錯(cuò)。這類場(chǎng)景下建議先把老驅(qū)動(dòng)的中斷請(qǐng)求段完整分析一遍確認(rèn)每一處API在當(dāng)前內(nèi)核版本下的行為再動(dòng)手改設(shè)備樹(shù)。8.3 我總結(jié)的七條中斷移植注意事項(xiàng)這幾條不是教科書上的原話是踩了不少坑之后我自己定的檢查順序先確認(rèn)硬件電氣連接再談軟件配置。GPIO復(fù)用的pinmux沒(méi)配好中斷引腳根本到不了控制器。設(shè)備樹(shù)里interrupt-parent一定顯式寫別依賴默認(rèn)值不同內(nèi)核版本的默認(rèn)解析邏輯很不一樣。觸發(fā)類型雙層核對(duì)設(shè)備樹(shù)寫一次request_irq里保持一致不要copy老代碼時(shí)帶上舊平臺(tái)的標(biāo)志。中斷處理函數(shù)里不要做總線操作除非你用threaded irq或者確認(rèn)總線控制器支持中斷上下文使用。移植后先跑高頻中斷壓力測(cè)試別只測(cè)一次觸發(fā)。中斷丟失和死鎖往往在高頻下才現(xiàn)原形。/sys/kernel/debug/irq/和/proc/interrupts配合使用一個(gè)看靜態(tài)配置一個(gè)看動(dòng)態(tài)計(jì)數(shù)。千萬(wàn)別在中斷handler里加調(diào)試打印尤其串口打印。串口本身也是中斷驅(qū)動(dòng)的中斷上下文里打串口很容易把系統(tǒng)鎖死要打印就記錄標(biāo)志位thread_fn里統(tǒng)一處理。9. 最后再補(bǔ)一個(gè)定位中斷問(wèn)題的野路子很多中斷問(wèn)題表面上是“驅(qū)動(dòng)注冊(cè)失敗”或者“中斷計(jì)數(shù)不對(duì)”實(shí)際根源在別的驅(qū)動(dòng)或者系統(tǒng)初始化順序上。比如之前遇到一次某個(gè)外設(shè)的probe成功、中斷注冊(cè)也成功但一使能外部中斷整機(jī)就重啟。查到最后發(fā)現(xiàn)是另一個(gè)驅(qū)動(dòng)把GIC的某種電源域關(guān)了導(dǎo)致GIC在處理該中斷時(shí)訪問(wèn)了未上電的寄存器直接觸發(fā)總線錯(cuò)誤。所以移植驅(qū)動(dòng)時(shí)如果中斷問(wèn)題怎么都查不通不妨回頭看看這幾件事該外設(shè)的電源域和reset GPIO在目標(biāo)平臺(tái)上的配置是否和原平臺(tái)一致。內(nèi)核里CONFIG_ARM_GIC_V3這類中斷控制器配置項(xiàng)是否和實(shí)際SoC匹配。配置不對(duì)的話中斷控制器可能只初始化了一部分。啟動(dòng)日志里GIC相關(guān)的初始化信息確認(rèn)它識(shí)別的中斷范圍是否覆蓋了你外設(shè)使用的硬件中斷號(hào)。中斷子系統(tǒng)是一個(gè)典型的“一榮俱榮、一損俱損”的鏈條。驅(qū)動(dòng)側(cè)代碼再正確只要中間任何一環(huán)沒(méi)對(duì)齊——硬件連接、設(shè)備樹(shù)解析、控制器配置、流控機(jī)制——整個(gè)鏈條就斷了。把這套框架裝進(jìn)腦子里移植時(shí)按圖索驥比盲目改代碼高效得多。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
啪啪啪精品视频| 一级性爱视频免费观看| 久热这里| 裸体女人草逼视频播放一区,二区,三区,四区,五区 | 日韩啪啪视频| 日韩精品1区2区中文字幕| hd成人一区二区在线| 精品无码久久久| 色哟哟1区2区| 欧亚无码视频| 欧美综合97www| 亚洲欧洲中文日韩女优乱码| 伊人久久婷婷| Aa东京男人的天堂| 国产美女销魂在线观看不卡| 日本特黄f c2| 欧美洲精品一级| 色激情综合网站| 91爆操视频| 区二区亚洲婷| 欧亚性爱啪啪| 国产尤物在线三区| 日本丝袜人妻内射| 超碰97玖玖爱| 99色网| 国产 亚洲 丝袜 制服| 欧美国产成人在线| 久久久久久亚洲Av无码精| 午夜丁香婷婷| 美女久久久| 亚洲va综合va国产va中文| 老司机午夜福利视频一区二区| 精品久久久久久AV无码| 亚洲国产综合久久天堂| www.yeyecao| 色欲人妻一区二区在线| 欧美人与动性人交a| 中文在线久久字幕| 亚洲黄色a级片| 青青草原成人| 亚欧高清在线| 97亚洲中文| www超碰| 日韩大香蕉AV影片| 91人妻爽爽人人做人人澡| 国产视频97| 特级毛片特黄久久免费看| 久草精品一区| 日韩欧美视频青青| 黄色成人网久久久久久| 青青伊人加勒比海| 天天看综合网| 欧美性爱日韩性爱| 大乔未久88一区| 中文字幕在线日亚州9| 久久久免费懂色| 美女午夜福利免费视频| 天天躁日日躁狠狠躁| 中国黑人三级片网站上区| 亚洲色 国产 欧美 日韩| 九热超碰| 欧美色图天堂在线| 国产一区二区在线电影| 91搞逼视频| 啊啊啊啊啊舒服| 91精品国产综合久久久蜜臀| 人人操人人操人人人操| 久久久久女教师免费一区| av天堂加勒比| 激情小说日韩无码| 欧美激情色婷婷花野真衣一区二区| www.黄色在线| 性暴力欧美猛交在线直播| 亚洲性刺激| 亚洲国产成人福利在线观看| 加勒比久久av| 国产成人主播| 青青草视频久久久久| 天堂俺去俺来也www久久婷婷| 一本大道青青| 99精品无码| 中文字幕女同在线| 久久婷婷伊人| 333kkkk·亚洲com久久| 日韩精品色呦呦| 色97欧美| 天天综合91入口| 男人的亚洲天堂| 亚洲AO在线| 一起草日韩| 国产精品久久| 中文字幕第7页| 97色妞| 男人的天堂2018东京热啪啪啪| 人人插人人搞人人操| 易易A毛视频| 日欧美色| 97综合国产精品高潮久久| 狠狠五月天| 国产亚洲日本精品在线| 婷婷亚洲五月***久久| 日韩精品在线视频,日韩精品……| 少妇熟女视频一二三区| 婷婷人妻激情| 亚洲国产亚洲天堂| 欧美大香蕉97| 人妻少妇久久| 超碰在线香蕉| 国产69精品久久久久99尤物| 亚洲精品亚洲人成在线麻豆| 日韩人成网站在线播放| 在线无码操| aⅴ日韩成人电影av在线免费看av大全| 亚洲国产成人福利在线观看| 黄色网址在线免费观看| 免费看久久久性性| 欧美午夜精品久久久久久3D| 国产性感在线观看| 亚洲日精品| 超碰超碰超碰超碰的大鸡吧操黑丝袜| 国产深夜福利| 乱伦AVxx| 伊人AAA| 久悠悠av| 夜精品久无码| 91超碰在线观看| 欧美姓爱综合网| 老司机午夜精品福利视频一区二区| 天天操天天谢| 玖玖久久久| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区 | 日本成人免费一区二区三区| 先锋激情∨在线视频播放| 亚洲中文一区二区三区| 久久久久久人妻| 激情文学 国产一二三aV| 美腿丝袜高跟网免费视频免费视频| 国产一区二区在线播放,久久亚洲精品中文字幕第一区,亚洲精品在线中文字幕视频 | 老司机深夜影院18未满| 日本精品一区二区中文字幕| 国产自产91区13区| 五月丁香六月婷综合成人综合| 99精品久久| 亚洲日韩美国人妻| 丰满高潮18xxxx| 欧美性生活综合| 99啪啪视频| 嗯嗯啊啊操死我| 亚洲图片 激情小说| 插插综合网天天影视网| 9久在线视频只有精品| 久久久999| 岛国网址国产| 嗯嗯嗯啊啊啊在线免费观看| com 首页 18岁 禁区 女优 免费 精选 同城 | 亚洲综合色男人网| 中文字幕丝袜美腿| 好色美女九七第一页| 亚洲图片欧美色| 一类av片在线看| 99色热| 清清草影| 国产午夜在线观看| · —级AA伦aa坐爱午夜极速ⅴA一区天天噪天天噪天天噪 | 91色综合激情| 韩日欧亚a级| 日韩有码 一区二区三区| 亚洲制服欧美另类内射| 躁躁日曰躁2020| 九九九久久久W精品| 亚洲 无码 偷拍| ..日韩av毛片精品久久久| 日本三级中国三级99人妇网站| 综合欧美日韩在线| 老子午夜伦不卡影院| www.99色| 97操综合| 乳欲人妻办公室奶水| 97资源制服丝袜| 精品人妻视频一区二区在线播放| 五月天综合网| 欧美黑人168页欧美黑人167| 国产精品毛片?v一区二区三区 | 亚洲精品一二牛牛| 久久一二三四五六七八九区区| 欧美性性性| 爆操无码| 美女爽到高潮91| 在线性黄高清免费视频| 亚州大图综合色图| av在线观看不卡网站| 暖暖精品二区三区观看| 亚洲AV色图一区| 天天艹天天日| 60秒免费小视频| 国产亚洲日韩欧| 肥臀熟女福利视频一区二区| a片久久久久久久久久久久 | 久久久男人的天堂| 嗯啊抽插大香蕉网页| 亚洲精品骚逼| 男人亚洲天堂| 久久9精品视频| 高潮精品| 97bbn| 日本操逼二区| 九九九国产精品| 中国一区二区亚洲人妻| 嗯嗯嗯啊啊啊干死我吧| 99热只有这里有精品| 懂色影视久久| 久热99| 哈哈操电影| av九九| 天天92av| 日韩精品人妻中文字幕久久久| 9Ⅰ超碰| 五月天婷婷综合网| 国产免费黄色一级大片| 无码视频一区二区| 欧美色图人妻| 五月丁香激情啪啪| 天天日天天操天天射河南省| 成人天天爽| 欧美性爱十八禁| 欧色网址| 97欧美色资源| 国产成人+综合亚洲+天堂| 欧美色涩| 成人在线午夜视频一区| 天天日B狠狠操| 国模无码人体一区二区三| 天天澡天天爽日日av| 國產尤物AV尤物在線觀看| 91痴汉| 日本91白丝| 国产对白刺激视频| 欧美在线电影| 久久久18禁| 高清在线偷拍自拍视频| 日韩一卡二卡三卡| 麻豆AV96熟妇人妻| 99久久久99久久91熟女| 免费看黄片现成| 干美女人妻| 亚洲国产欧美日韩精品一区二区三区,国产一区二区三区在线看片,欧美性猛交 XXX | 北京美女一区二区| 丁香六月激情综合| 婷婷丁香九月| 蜜臀一区二区三区亚洲最新章节在线观看 - 高清蜜臀一区二区三区亚洲全集播放 | 亚洲一区二区精品福利| 在线观看不卡一区二区三区| 屁股久久久久久| 久久精品夜色国产亚洲AV| 国产99 中文字幕日韩小视频| 欧美激情久操网| 亚洲综合一| 久热色情精品| 精品人妻伦一二三区久久| 91东京热男人的天堂| 91观看 国产白丝| 男人的天堂午夜av| 极品另类| 超碰地址久久| 传媒在线观看一区二区三区| 9长久久精品| 久久久久日本视| 五月丁香色情| 91操人| 亚洲精品乱码线路中文字幕| 国产精品人妻无码久久久互動交流| 97久久国产亚洲精品超碰热| 亚洲第一色页夜| 国产又黄又猛又粗又爽的网站| 岛国在线一区二区三区| 韩国一级婬片A片无码天美| 97色综合中文网| 久久精品操| 97视频在线视频| 97色妞| 人人摸人人干| 狠狠亚洲| 是还免费视频1727我| 97激情97激情| 久久9久9久99久9久9| 91大学精品激情戏| 麻豆 欧美 日韩| 青青草视频这里只有精品| 99在线精品观看99| 久久伊人大香蕉| 色五月婷婷中文字幕| 国产精品亚洲一区二区三区四区 | 夜夜性| 91狠狠综合久久| 久久久无码精品人妻二区| 欧美91色| 怡春院久久| 国产伊人精品在线| 熟女人妻一区二区三区免费看| 天天射夜夜骑| 97色伦97色伦国产欧美| A一区片| 亚洲精品一区二区精品| 91 亚洲 欧美 日韩 国产 综合| 男人高清无码一区二区| 欧亚免费视频| 婷婷情色综合网| 亚洲国产一区二区三区在线| 亚洲乱色熟女一区| 国产欧美日韩一区二区三区| 家庭乱伦网站国产| 高清无码国产亚洲| 美腿色图| 亚洲人妻久久久| 国产激情在线| 中日韩一区二区三区欧美| 中文AV制服乱伦| 视频在线观看免费一区二区三区| 伊人久操| 精品视频日日夜夜| 搞中出视频在线观看| AV男人天堂网| 老司机福利青青草| 看黄片视频免费| 天天爽天天爽| 97精品综合久久网| 九九热av| 色性综合| 91少妇人妻| 91综合色噜噜| 国产亲戚伦亲在线| 欧美极品女人的天堂| 射丝袜高跟鞋99| 91老熟女老女人国产老太| 日本精品加勒比海一区| 超碰在线欧美性爱激情| 国产一级做a爰大片免费久久| 大香蕉综合| 欧美中文字幕一区 | 91久久久久久久久久久| 色亚州人久干视频在线观看免费版| 天天操福利视频综合网站| 丰满人妻一区二区三区色-百度| 一级日本牲交大片好爽在线看| h无码动漫在线观看| 69精品少妇一区二区三区蜜桃| 九热大香蕉| 91精品人妻一品二品三品| 久久欲| 狠狠色综合网| 欧美草草| 一区| yw尤物av无码点击进入麻豆| 欧美人人AAA| av大香蕉网站| 精品久| 老司机射| 1234区中文字幕在线观看_青青草国产在线_日韩一区二区 | www.久久| 96精品一区| 无码高清少妇久久| 麻豆亚洲Av成人无码一区精品| 久久AV色| 免费人成在线观看网站品爱网| 亚洲熟妇极品| 欧美综合色图网| 国产精品视频一区二区三区八戒| 欧美色图偷拍另类| 久久在线观看免费视频| 啊啊啊好爽快点啊啊啊嗯嗯| 欧美一级二级三级| 亚洲经典啪啪| 日韩无码服务区| 午夜120视频在线观看| 欧美最婬乱婬爆婬性视频| 偷拍亚洲视频一区二区三区四区| 国产传媒操逼视频| 伦在线97| 又大又长又粗又爽又黄| 亚洲欧洲色情高清| 热久久国产| 麻豆人妻少妇在线免费观看| 日本淫乱女一区二区三区视频| 嗯啊不要啊在线 | 啪啪啪亚欧美视频| julia高潮后不停追击中出| 久久熟女嫩草成人片免费| 国产熟女完整版中字| 青草香蕉网| 蜜乳成人AV| 亚洲精品欧美专业| 欧美日韩另类在线播放| 欧美性爱一区二区三区四区| 亚洲无码国产精品久久| 美国三级日本三级久久99| 国产精品制服丝袜清纯唯美| 久久激情亚洲精品无码?V| 亚州综合色图| 亚洲情色中文字幕一区| 久久婷婷苹果| 韩日精品四区| 天堂69亚洲精品中文字| 伊人网在线观看| 日韩性爱1级片视频| 亚洲精品一区二区免费在线观看| 5月婷婷6月六月丁香| 日日躁天天躁狠狠躁| 久久久久久久人妻| 日韩激情电影中文字幕| 超碰伊人在线| 四色永久成人网站| 丁香七月婷婷| 日韩资源网| 亚洲欧美日韩综合在线尤物| 97欧美综合| 裸体女人草逼视频播放一区,二区,三区,四区,五区 | 亚洲精品人妻吞精av| av橘色网站| 麻豆人妻精品一区二区| 成人无码电影在线观看网| 欧美国产操逼| 婷婷三区| 操美女高潮抽搐白浆| 91成人无码| 啊啊啊啊啊啊啊好爽不要| 蜜桃视频成a人v在线| 日韩综合色网| 国产a级精品| 国产福利影视| 91精品无码久久久久久久| 九九九九九九九九九五码| 国产 丝袜 欧美中文 另类| 亚洲男人天堂AV| 欧美激情一区二区| 久久久九九网站| 乱抡国产91| 久热这里| 国产精品人妻熟女aⅴ| 91精品国产91久久久久久久久久久久| 97爱欧美| 日本三级久| 国产亚洲日韩在线三区黑人| 天美传媒AV在线播放| 国产第11页| 黄色污污污污污污网站| 第一高清av中文字幕| 久久久久久99AV无码免费网站| 亚洲影视第一页| 亚洲精品欧美专业| 免费视频在线观看啊啊啊啊啊| 成人八戒网站| 99这里只有精品国产| 男人的天堂com| 欧洲精品久久| 撸撸成人在线视频| 九久9热| 五月婷婷五月天| 顶级丝袜熟女一区二区三区 | 97欧美综合| 中文字幕免费看| av亚洲天堂资源网站| 香蕉在线一区二区三区| 97碰在线视频| JULIA一区二区三区在线播放| 在线观看不卡一区二区三区| 中国人高清www色视频免费| 99在线免费观看| 性在久久久久久| AV在线性爱| 国产高清自拍视频| 国产高清亚洲日韩一区| 国产精品懂色tv影视免费观看| 亚洲欧美97√| 久久99九九九九6666免费观看软件| 麻豆天美在线喷水AV| 色牛牛AV| 久久草在线综合视频| 久久黄人人爽视频| 99在线精品观看视频中文 | 亚洲精品无码久久AV| 欧美爱三级日韩久久| 欧美日韩在线小说| 97在线免费看视频| 91成人18| 偷拍 欧美 日韩| 思思久热在线精品66| 色香综合| 免费AV中文网在线观看| 2025年A片视频精品| 欧州一区二区三区四区| 18禁止看精品中文字幕| 最新av网站在线观看| 国产精品成人久久一区二区三区 | 蜜臀久久99精品久久久久久成人小说 | 欧美亚洲综合色| 日本在线一二 | 亚洲精品日日夜夜52| 超碰人人超在线观看| 三级片网站在线播放| 日韩av乱伦| 中文字幕一区av| 韩国轻伦国内自拍一区| 久超超碰| 欧美淫乱视频| 极品白嫩美少妇在地板上位骑射淫水泛滥| 天天干人人看综合| 欧 美 自 拍 偷 拍| 啪啪免费| 成人网址在线观看| 成人AV素股で擦久久| 欧美精品双插| 成人情色综合网| 老鸭窝成人免费毛片视频| 久久久新亚洲AV| 大香蕉一区二区在线观看.| 91快色色色色色| 婷婷色婷婷| 色狠人在线99| 91激情国产| 老女人综合网| 国产高清在线观看欧美| 九九AV| 久草婷婷| 久久爱97| 亚洲囯产精品女人久久久| 天堂8在线新版官网| 日韩亚洲美女一区久久| 96久久久精品| 97色网| 久久精品国产亚洲AV片多多| 亚洲欧美一区二区三区在钱蜜桃| 91丝袜美腿片| 69天堂| 久久国内| 1234区中文字幕在线观看_青青草国产在线_日韩一区二区 | 丁香色五月 97干| 天天弄欧美| 性欧美第一页| 国产对白刺激视频| 欧美精品在线观看| 日日97| 岛国片在线播放| 亚洲天堂电影精品一区| 天欧美在线| 亚洲欧美国产va在线播放频| 色噜噜婷婷| 欧美天堂第二区| 久久亚洲AV无码白度| 激情五月天社区| 伊人久久久日韩一区| 综合欧美亚洲| 丁香五月大香蕉| 欧美 牲| 亚洲 欧美 精品专区 极品| 欧美人人AAA| 亚洲人久久久网| 超碰免费人妻人人| 色呦呦、国产精品| 伊人麻豆传媒| 91天天美女| 高潮的A片激情扒开一区| 久久久久精| 97视频播放| 久久性爱大全| 久久久久久裸体| 乱伦a片视频| 亚洲男人天堂2012| www.av家庭乱伦| 久久精品一区二区三区不卡| 欧美91网| 99色在线| 九九九九九九九九九国产精品 | 韩国三级一线观看久| 久久久久13| 玖玖综合网| 婷婷尹人大香蕉免费| 九七超碰人人乐| 国产女人成人精品视频| KK色在线影院| 亚洲天堂 视频你懂的| 免费99精品国产自在在线| 2018天天干在线视频| 国产精品久久久九九九| 青娱乐亚洲自拍| 操淫穴亚洲五月丁香| 欧美日韩操逼动图| 日韩中文字幕宗合在线| 人人摸人人摸人人干| 亚洲91综合| 搡老熟女老女人老熟妇免费视频| 中文字幕一品色图| 丁香九月激情| 久久精品国产亚洲av水密被窝| 亚洲九区| 日本色色色网站免费看不卡| 免費人妻夜夜爽天天爽爽一区| а√天堂资源官网在线资源| 青青草视频导航官网| 一级黄色性爱A级片| 东北操逼| 97久久视频| 97天堂| 校园春色欧美色图| 懂色天天爱天天日天天射天天澡| 精品女同一区| 日本狠狠干| 欧美成年人性爱视频免费观看| 黑人与人妻| 日欧操屄视频| 亚洲一区日韩精品中文字幕| 日韩一级二级三级免费看完整版国语版| 午夜偷拍久久熟女| 成人日韩欧美| 无码久久国产| 俺去啦自拍| 男女打扑克高清网站| 欧美亚洲素人制服精品| 天操天操夜操夜月月年年操操| 狠狠操狠狠插| 中文字幕国产| 夜夜爽夜夜操| 美女干逼2| 啊啊啊啊嗯嗯嗯用力好爽 | 久久久久久久国产视频| 久午视频| 精品成人女人久久| 欧美日韩国产中文超碰| 黄色区免费观看中文字幕| 亚洲男人天堂手机版| 欧洲一区二区三区免费| 99欧美| 熟女五十路一区二区三| 国产三级片在线观看| 校园春色宗合网| 亚洲美乱| 日韩精品一区二区三区色欲| 牛牛操视频逼| 欧美宗合网| 91超碰在线播放| 久久久久久久久久久97| 最新国产亚洲精品精品国产亚洲综合| av毛片aaaaa免费看| 久久精品无码熟妇一区二区三区视频导航| 亚洲淫乱骚妇AV| 激情99| 日韩性爱电影一区 | 九九热av| 无码精品啪啪啪一区二区三区三州| 校园春色欧美色图| 熟女性视频| 免费精品福利在线观看| 香蕉久久AⅤ...| 人妻一区二区三区四区视频| 97久久久久| 无卡一区=区| 美欧老女人97| 欧美色图片91| 99re6久热只有精品6在线直播| 国产免费永久精品无码| 中国东北熟女老太婆内谢| 国产兽交视频在线播放| 2021国产成人精品久久| 男人天堂新在线| 天天影视综合色| 9ⅰ久久久天天| 91男人天堂网| 亚洲欧美日韩国产丝袜自拍中文| 欧美操逼视频二区| 91精品人妻一区二区三区蜜桃臀| 人人喜人人妻| 久久久久久久九九九九九九| 久久人妻丝袜一区二区三| 婷婷精品| 欧美视频在线第3页| 大奶啊啊好爽| 天天淫人人妻日日色| 超碰日本97美女人妻人人玩人人爱| 久久九九99| 狠狠操夜夜操蜜桃视频三区| 国产亚洲一黄| 97超碰美国| 啊啊啊想要| 成人国产视频在线观看| 女性喷水高潮在线观看| 精品日韩人妻视频| 最新岛国大片| 午夜无码精品免费看性色| 黄色一区二区秘书性感| 在线无码操| 日本欧美国内在线| 亚洲欧美大| 精品人妻二区三区| 大香蕉欧美日韩| 97欧美色综合| 欧洲视频在线| 亚洲一级黄色毛片| 亚洲,日韩,欧美,成人播放| 美女尤物人人操| 人妻中文字幕日韩电影| 亚洲欧美经典一区二区| 亚洲综合网电影91| 国产盗摄美女如厕大神作品在线观看| 国产 大胆 对白| 热久久无毒不卡| 精品久9| 无码人妻精品一区二区三区99不卡| 大香蕉一区二区在线观看.| 国产精品色片一区二区| 日韩成人综合网| 青青草原狼av| 操死我了啊啊啊| 97超碰大| 天天操人人操狠狠插| 成人免费在线网站| 伊人综合色网| 熟妇国产免费一区| 色97干| 人妻少妇被猛烈进入中| 久久五月婷| 69精品人人人人| 天天天做天天天爱天天天爽| 久操电影| 插欧洲美女欧美精品| 国产伦精品免编号公布| 91艹| 麻豆三极片| 全免费a敌肛交毛片免费| 69超碰综合| 91黑丝操| 日本孕妇一区二区视频操逼免费看| 成人麻豆av电影网站| 精品一区二区三区蜜桃臀赵总| 超碰天天操| 亚洲一二三四区| 久久久久久久久成人av解说| 精品99999久久久久久| 热久久无毒不卡| 青青操网| 久久久A∨| 久湿久久 | 天美国产精品| 欧美日韩亚洲少妇寂寞影院正在播放| 国产精品久久久久久高清无码免费看| 亚洲人妻AV| 亚洲91大片| 一级性爱视频免费在线| 色色五月婷| 色九九综合AV| 一二三四视频中文字幕在线看| 精品久久視頻在线| 极品出轨视频网站| 免费伦费视频在线观看| 性色中出| dy888午夜老子影视达达兔| 青青草天天亲夜夜操网| 日韩一级二级三级免费看完整版国语版| 久久久97| 日韩97超碰中文字幕| 亚洲九九视频| aⅴ日韩成人电影av在线免费看av大全| 日少妇亚洲版| 九九综合九九综合| 91亚洲黑人| 日本欧美不卡| 亚洲色啪| 南澳成人一级片在线播放| 最新中文字幕在线亚洲| 97碰碰日本乱偷人妻中文的| 被男人吃奶很爽的毛片| 日韩AV中文字幕电影| 欧美日韩1234| 人夜夜精品网站香蕉嫩草| 极品少妇久久久| 日韩啪啪网| 老熟女阿 国产91| 亚洲AV无码乱码在线观看性色| 少妇高潮喷水无套久久久久久| 在线a v| 午夜综合在线| 在免费jIzzjIzz在线视频| 偷拍色图| 一级久久性爱视频| 国产97/欧美| 久草大| 九九九九九精品视频| 天天爱天天操| 日本一区不卡| 欧美无圣光在线| 男女激烈网站最新| 男人的天堂2000| 狠狠操夜夜| 久久久熟女一区| 免费黄色片子| 久久久精品网站| 蜜桃臀 后入 一区 二区 三区 在线| 天天看天天日| 国产精品久久久久久久久久久久久久久久久久| 性爱视频免费网址| 国产精品久久久久久久久久久久久久久久| 午夜AV人气不卡| 97欧美色| 小草精彩毛片| 爽极品影院| 中日韩久久久免费看| 丁香五月婷婷啪啪| 熟女探花啪啪| 中文字幕、久久精品国产2020、久久综合久久自在自线精品自、亚洲 | 国产麻豆福利av在线播放| 欧美日韩精品青青| 黑操B| 国产乱伦亚洲| 久久久无码精品人妻二区 | 五月丁香综合| 91伊人久| 天天综合91入口| 久九九九九九九热| 亚洲精品第一| 2017大香蕉| 日日骚精品视频| 中文字幕在线观看丝袜| 国模私拍一区二区三区神乳| 夜夜做夜夜爽精品视频| 91在线色综合| 国产AV毛片| 亚州综合在线| 超碰欧美在线欧美| 啊…啊…操我用力操我| 成人无码电影在线观看网| 夜夜黄| 97久久久精品| 99热| 亚洲黄色a级片| 曰韩中文人妻视频| 欧亚韩国999| 欧美一区二区三区大综合| 爱媛媛久久国产福利| 91精品国产91久久福利| 久草电影网| 夜夜福利| 操九九九九九九| 手机看片1024你懂的国产| yiqicaoav| 女人香蕉久久毛毛片精品| 精品人妻一区二区免费蜜桃| 日韩乱插| 日韩免费看在线黄色片| 亚洲熟妇A V黑人| AV色五月天| 老熟女区| 婷婷四五区| 久久久 国产精品| 国产综合在线视频网站| 狠狠躁伊人中文字幕| 98超碰日本| 男人的天堂色偷偷青青草视频婷婷网| 丁香五月天激情综合| 国产区91柔拿会所技师| 久久久久亚洲熟妇熟女| 男人的天堂va在线| 亚洲91射| 男人的天堂久久狠| 99色婷婷中文字幕乱色| 久久久久骚| 婷婷五月花| 超碰91在线| 一区二区三区精品视频| 国产精品一级特黄aaa大片在线观看| www.av家庭乱伦| 91一区二匹| 亚洲久9| 欧美亚洲首页| 怡红院久久老司机| 超碰9 7女人| 少好三P| 欧美91久久久久| 中文字幕女同在线| 久久免费精品96| 丝袜无码a片| 中文字幕久久精视频久久大全| 91色噜噜狠狠| 爱干爱射网啊啊啊| 成人女人国产| 九九九九日本| 9999亚洲电影| 人妻免费观看| 加勒比综合a∨| 欧美综合777| 懂色av中文字幕| 福利五区| 色色九区| 亚洲欧美首页| 国产呦精品系列在线观看| 久久精品人妻一区| 韩国三级一线观看久| 岛国黄片网站| 日本不卡高清视频| japan日本高清乱xxxx| 无套内射人妻在线播放| 亚洲图片欧洲图片aⅴ| 亚洲少妇中文字幕网址| 国产热RE99久久6国产精品首| 九九人人操| 成人情色一区二区| 久久9精品视频| 91久久18禁| 性欧美精| 九九九久久久W精品| 欧在线一二区| 亚洲av综合伊人久久| 国产黄片精品在线| 欧美性爱在线无码| 国产九月婷婷| 日韩成人午夜精品久久高潮| 96久久久精品| 97鸡把在线视频| 亚洲网站一区二区在线| av网站在线观看了| 天堂8在线新版官网| 亚洲色图久久精品蜜| 亚洲欧洲精品成人| 麻豆区久久久久亚| 亚洲动态色图| 午夜一区二区三区国产| 精品国产精品一区二区| 午夜天天碰综合视频| 色制服丝袜夫妻av一区| 四虎影视国产精品| 国产在线综合福利网站| 丁香五月综合| 欧美78p| 中日亚韩免费视频| 欧美在线视频99| 久久久婷| 欧美熟妇精品黑人巨大91| 三男一女不戴套的A片| 国产麻豆福利av在线播放| 色婷婷六月| 亚熟hd视频在线| 国产99热| 欧美性爱十八禁| 国产白领连续中出在线观看| 欧美丝袜美女电影一二三四区| 91亚洲在线| 欧亚乱色熟女一区二区| 白丝1区2区3区| 99精品无码| 亚洲精品成人动漫在线| 中文字幕在线观看丝袜| 国产精品久久久久久久免牛肉蒲团| 熟妇色99| 日本性爱少妇| 免费网站观看www在线观| 亚洲午夜精品久久久中文影院| 久久精品国产亚洲AV高清演员表| 激情五月天网站| 成人精品欧洲亚洲| 日本孕妇一区二区视频操逼免费看| 亚洲偷拍自拍在线视频| 成人天天看站长推荐| 超碰在线一区二区| 极品极品色影院| 熟女高潮合集-永久久久-成人AV| 亚洲学生妹高清av| 久久丁香| 蜜臀99久久精品| 在线观看岛国有码| 亚洲熟妇熟在线电影视频| 97色色色| 亚洲综合激情五月久久| 欧美日日人人天天| 中文字幕中文字幕一区二区| 不卡人妻少妇精品毛片一区23区视频| 东京热av影院| 久久综合激情| 超碰偷拍| 国产1769在线| 内射黑丝袜| 免费一级性爱久久| 亚洲影院小综合| 国产精品美女视频诱惑| 久久极品伊人| 东京热天堂网| 9 9精品一区二区三区| 97欧美资源| 国产亚洲国产超碰| 青青草中出视频| 五月天黄色激情视频| 九七毛片九九毛片| 亚洲AV无码AV吞精久久久久| 一区二区视频你懂的| 国产无码高清操逼视频| 综合网~91综合网| 成人av毛片在线观看| 97亚洲性爱| 青娱乐淫乱1314| 不卡九肏| 无遮挡一级毛片视频免费的| 超碰1024久久| 又大又长又粗又爽又黄| 亚洲精品一区二区免费在线观看| 熟女五十路一区二区三| 九九九九一级| 91粉嫩萝控精品福利网站_精品影音先锋国 | 婷婷综合网| 97网色| 97资源超碰| 粉嫩av平台| 亚洲欧洲日产国产综合网| xxxx网站亚洲精品| 国产精品3| 五月天激情四射| 97chaopengongkai| 天堂九九九九九九九九九| 婷婷色色五月天福利| 欧美精品久久96人妻无码| 99老司机精品视频在线观看| 久久久久元码视频| 久精品无码av一区二免费国产在线观看| 热久久无毒不卡| 99色热| 三上悠亚在线毛片91| 啊啊啊好湿久久| 蜜乳AV一区| 97久久超碰日韩精品| 超AV色女| 日韩亚洲精品一区二区| 激情文学亚洲| 亚洲色图在线视频| a一区二区三区乱码在线| 久久9精品网站| 一区二区你上我| 国产色综合亚洲色综合吹潮| 肉丝无码中文高清| 狠狠色色| 亚洲av国产av综合av卡| 死我十八禁| 天天透伊人| 欧美经典一区二区三区| 精品久久97| 亚州中文字幕超碰97| 青青草天天亲夜夜操网| 日韩福利电影网| 日韩国产九九精品一区二区三区毛片| 五月天综合| 亚洲人妻在线一区| 精品亚洲天堂| 在线一区| 天天看综合网| 亚洲精品一区二区三区在线播放| 欧美综合另类| 91国产在线精品| 欧美美女视频| 亚州色阁| 国产有码一区| 女人高潮大叫一级毛片| 蜜臀AV秘一区翔田千里| 91亚洲最新在线| 久久爽爽精品| 大香蕉亚洲中文| 韩国午夜理伦三级好看| 91久久青青草原精品| 国产熟女自拍| 天天舔九色婷婷| 囯产精品一区二区三区线|亚洲人成无码网WWW动漫|国产精品免费一级... | 亚洲欧美高清无码| 精品美女少妇一区二区| 天堂伊人久久| 91原创在线观看| 亚洲综合婷婷| 日韩人妻播放| 妇女性内射冈站HDWWWCOM| 97资源站日韩| 97亚洲国产| 老汉网| 天天影视激情欧美| 青草视频在线看看看看看看看看看| 日本天天操| 1769国内精品视频| 欧美色女人| 91美女片在线| 噜噜噜亚洲精| 劲爆欧美人妖三区91| 九热大香蕉| 青青操97| 欧美极品女人的天堂| 色9999日韩国产| 黄片免费看黄片免费看| 国产一级内射无挡观看| 日本操逼aaaaa| 九九九久久久| 亚洲熟女人妻中文字幕一区二区 | 大乔未久88一区| 欧美97日韩| 日韩中文字幕熟妇人妻| 九九热九九热| 大香蕉色十月| 国产在线76页| 97天天摸天天碰| 婷婷成人五月天| 99热这里只有精品8| 婷婷亚洲天堂| 色999五月色| 成人精品在线| 99爱爱| 色五月婷婷中文字幕| 国产亚州日韩欧美看片| 91小视频| 色综合网1| 亚洲免费人妻在| 懂色aV一区二区天美传媒| 最新av网站在线观看| 超碰精品日韩欧美国产| 翔田千里A片一区二区| 国产又黄又爽| aaa亚无码专区| 国产操逼网站亚洲一级黄色| 国产后入| 超碰97人妻免费在线| 人人操人人摸avav| 欧美的性爱网站免费| 欧美黄色片在线播放| 草草影院最新网址| 333kkkk·亚洲com久久| 天天躁日日躁XXXXYY| 国产自偷自拍一区| 五月天社区| 岛国小电影| 久久久∴| 日韩综合色网| 91亚洲情色| 日韩免费福利在线观看| 岛国毛片在线观看免费| 亚洲情色图片区| 91路www| 夜夜嗨一区| 精品免费一区| 操逼天美3区| 亚洲四虎熟女精品| 亚洲日本成人动漫| 久久偷拍人| 2020中文字幕在线| 亚洲视频精选| 无码直播久久久| 国产av美女被艹的乱叫| 国产亚洲一黄| 国内操逼视频二区| 精品少妇人妻一区二区三区| 97色在线视频| 中文字幕日韩人妻视频| 强奸a片网| 北京专精特新企业招聘信息| 亚洲天堂日本| 超碰地址久久| 国产精品网址| 九九热视频在线观看| 天天日天天舔东京热| 噜噜噜噜天天狠狠| 91色人妻| 亚洲综合在线视频| 久久久网一区|