精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

鴻蒙輕內核A核源碼分析系列之虛實映射(3)虛擬物理內存映射

開發 前端
虛實映射其實就是一個建立頁表的過程。MMU支持多級頁表,LiteOS-A內核采用二級頁表描述進程空間。首先介紹下一級頁表和二級頁表。

[[438476]]

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com

3、虛實映射函數LOS_ArchMmuMap

從上文可知,用戶程序加載啟動時,會將代碼段、數據段映射進虛擬內存空間,此時并沒有物理頁做實際的映射;程序執行時,如下圖(圖片來自OpenHarmony docs開源站點)粗箭頭所示,CPU訪問虛擬地址,通過MMU查找是否有對應的物理內存,若該虛擬地址無對應的物理地址則觸發缺頁異常,內核申請物理內存并將虛實映射關系及對應的屬性配置信息寫進頁表,并把頁表條目緩存至TLB,接著CPU可直接通過轉換關系訪問實際的物理內存;若CPU訪問已緩存至TLB的頁表條目,無需再訪問保存在內存中的頁表,可加快查找速度。本小節我們就詳細分析下虛實映射函數的實現代碼。

鴻蒙輕內核A核源碼分析系列五 虛實映射(3)虛擬物理內存映射-鴻蒙HarmonyOS技術社區

3.1 函數LOS_ArchMmuMap

函數LOS_ArchMmuMap用于映射進程空間虛擬地址區間與物理地址區間,其中輸入參數archMmu為MMU結構體,vaddr和paddr分別是虛擬內存和物理內存的開始地址;count為虛擬地址和物理地址映射的內存頁數量;flags為映射標簽。⑴處進行函數參數校驗,不支持NON-SECURE的標記,虛擬地址和物理地址需要內存頁4KiB對齊,參數檢查函數代碼簡單,自行查看即可。⑵處當虛擬地址、物理地址基于1MiB對齊,并且數量count大于256時,使用Section頁表項格式。⑶處生成L1 section類型頁表項并保存,下文詳細分析該函數OsMapSection()。如果不滿足⑵處條件,需要使用L2映射。首先執行⑷處獲取虛擬地址vaddr對應的L1頁表項,接著執行⑸處判斷是否映射,如果沒有對應的映射,則執行⑹處的函數OsMapL1PTE生成L1 page table類型頁表項并保存,然后執行函數OsMapL2PageContinous生成L2 頁表項并保存。如果已經映射為L1 page table頁表項類型,則執行函數OsMapL2PageContinous生成L2 頁表項并保存。如果不是支持的頁表項類型,則執行LOS_Panic()觸發異常。⑺處統計生成映射的調試,最終會返回映射成功的數量。

可以看出,在給定虛實內存地址和映射的內存頁數后,使用L1頁表映射還是L2頁表映射的判斷條件是:虛實內存地址是否1MiB內存對齊,并且映射數量是否大于256。當使用L1映射時,映射為Section頁表項類型。當使用L2映射時,根據L1頁表項類型,分布處理無效頁表項和Page Table頁表項類型這2種情況。具體的映射方式見下文。

  1. status_t LOS_ArchMmuMap(LosArchMmu *archMmu, VADDR_T vaddr, PADDR_T paddr, size_t count, UINT32 flags) 
  2.     PTE_T l1Entry; 
  3.     UINT32 saveCounts = 0; 
  4.     INT32 mapped = 0; 
  5.     INT32 checkRst; 
  6.  
  7. ⑴  checkRst = OsMapParamCheck(flags, vaddr, paddr); 
  8.     if (checkRst < 0) { 
  9.         return checkRst; 
  10.     } 
  11.  
  12.     /* see what kind of mapping we can use */ 
  13.     while (count > 0) { 
  14. ⑵      if (MMU_DESCRIPTOR_IS_L1_SIZE_ALIGNED(vaddr) && 
  15.             MMU_DESCRIPTOR_IS_L1_SIZE_ALIGNED(paddr) && 
  16.             count >= MMU_DESCRIPTOR_L2_NUMBERS_PER_L1) { 
  17.             /* compute the arch flags for L1 sections cache, r ,w ,x, domain and type */ 
  18. ⑶          saveCounts = OsMapSection(archMmu, flags, &vaddr, &paddr, &count); 
  19.         } else { 
  20.             /* have to use a L2 mapping, we only allocate 4KB for L1, support 0 ~ 1GB */ 
  21. ⑷          l1Entry = OsGetPte1(archMmu->virtTtb, vaddr); 
  22. ⑸          if (OsIsPte1Invalid(l1Entry)) { 
  23. ⑹              OsMapL1PTE(archMmu, &l1Entry, vaddr, flags); 
  24.                 saveCounts = OsMapL2PageContinous(l1Entry, flags, &vaddr, &paddr, &count); 
  25.             } else if (OsIsPte1PageTable(l1Entry)) { 
  26.                 saveCounts = OsMapL2PageContinous(l1Entry, flags, &vaddr, &paddr, &count); 
  27.             } else { 
  28.                 LOS_Panic("%s %d, unimplemented tt_entry %x/n", __FUNCTION__, __LINE__, l1Entry); 
  29.             } 
  30.         } 
  31. ⑺      mapped += saveCounts; 
  32.     } 
  33.  
  34.     return mapped; 

3.2 OsMapSectionL1 Section類型頁表項映射函數

函數OsMapSection生成L1 Section類型頁表項并保存。⑴處把內存區間標簽(這些標簽定義在文件kernel\base\include\los_vm_map.h中,標簽名稱一般為VM_MAP_REGION_FLAG_XXXX)轉換為MMU標簽(定義在arch\arm\arm\include\los_mmu_descriptor_v6.h中,標簽名稱一般為MMU_DESCRIPTOR_L1_TYPE_XXXX)。 ⑵處的函數OsGetPte1Ptr(archMmu->virtTtb, *vaddr)用于獲取虛擬地址對應的頁表項索引地址,等于頁表項基地址加上虛擬地址的高20位;OsTruncPte1(*paddr) | mmuFlags | MMU_DESCRIPTOR_L1_TYPE_SECTION)為物理內存地址的高12位+MMU標簽+頁表項Section類型值。該行語句的作用是把虛擬地址和物理地理進行映射,映射關系維護在頁表項。這行代碼比較關鍵,我們繪制下圖形來表示,見下圖。⑶處把虛擬地址和物理地址增加1MiB的大小,映射數量減去256(1MiB有256個4KiB大小的內存頁)。

 鴻蒙輕內核A核源碼分析系列五 虛實映射(3)虛擬物理內存映射-鴻蒙HarmonyOS技術社區

  1. STATIC UINT32 OsMapSection(const LosArchMmu *archMmu, UINT32 flags, VADDR_T *vaddr, 
  2.                            PADDR_T *paddr, UINT32 *count
  3.     UINT32 mmuFlags = 0; 
  4.  
  5. ⑴  mmuFlags |= OsCvtSecFlagsToAttrs(flags); 
  6. ⑵  OsSavePte1(OsGetPte1Ptr(archMmu->virtTtb, *vaddr), 
  7.         OsTruncPte1(*paddr) | mmuFlags | MMU_DESCRIPTOR_L1_TYPE_SECTION); 
  8. ⑶  *count -= MMU_DESCRIPTOR_L2_NUMBERS_PER_L1; 
  9.     *vaddr += MMU_DESCRIPTOR_L1_SMALL_SIZE; 
  10.     *paddr += MMU_DESCRIPTOR_L1_SMALL_SIZE; 
  11.  
  12.     return MMU_DESCRIPTOR_L2_NUMBERS_PER_L1; 

3.3 函數OsGetL2Table生成L2頁表項基地址

函數OsGetL2Table用于生成L2頁表,函數參數中archMmu是MMU結構體,l1Index是L1頁表項索引(頁號),ppa屬于輸出參數,保存L2頁表項基地址。⑴處計算L2頁表項偏移值(為啥這么計算? 看不懂 TODO),其中(MMU_DESCRIPTOR_L2_SMALL_SIZE / MMU_DESCRIPTOR_L1_SMALL_L2_TABLES_PER_PAGE)的大小等于1024;l1Index & (MMU_DESCRIPTOR_L1_SMALL_L2_TABLES_PER_PAGE - 1)為虛擬地址的第20-21位。⑵處通過循環遍歷查詢是否存在L2頁表(為啥查詢4次?TODO),⑶處獲取頁表項基地址,然后判斷是否頁表類型,如果是,則返回L2頁表項基地址。

如果沒有存在的頁表,則為L2頁表申請內存,如果支持虛擬地址LOSCFG_KERNEL_VM,執行⑷使用LOS_PhysPageAlloc申請內存頁,把申請的內存頁掛載頁表鏈表上,并根據內存頁計算虛擬內存地址kvaddr;如果不支持虛擬地址,執行⑸使用LOS_MemAlloc申請內存。⑹處轉換為物理地址,然后加上頁表偏移值l2Offset返回L2頁表項基地址。

  1. STATIC STATUS_T OsGetL2Table(LosArchMmu *archMmu, UINT32 l1Index, paddr_t *ppa) 
  2.     UINT32 index
  3.     PTE_T ttEntry; 
  4.     VADDR_T *kvaddr = NULL
  5. ⑴  UINT32 l2Offset = (MMU_DESCRIPTOR_L2_SMALL_SIZE / MMU_DESCRIPTOR_L1_SMALL_L2_TABLES_PER_PAGE) * 
  6.         (l1Index & (MMU_DESCRIPTOR_L1_SMALL_L2_TABLES_PER_PAGE - 1)); 
  7.     /* lookup an existing l2 page table */ 
  8. ⑵   for (index = 0; index < MMU_DESCRIPTOR_L1_SMALL_L2_TABLES_PER_PAGE; index++) { 
  9. ⑶      ttEntry = archMmu->virtTtb[ROUNDDOWN(l1Index, MMU_DESCRIPTOR_L1_SMALL_L2_TABLES_PER_PAGE) + index]; 
  10.         if ((ttEntry & MMU_DESCRIPTOR_L1_TYPE_MASK) == MMU_DESCRIPTOR_L1_TYPE_PAGE_TABLE) { 
  11.             *ppa = (PADDR_T)ROUNDDOWN(MMU_DESCRIPTOR_L1_PAGE_TABLE_ADDR(ttEntry), MMU_DESCRIPTOR_L2_SMALL_SIZE) + 
  12.                 l2Offset; 
  13.             return LOS_OK; 
  14.         } 
  15.     } 
  16.  
  17. #ifdef LOSCFG_KERNEL_VM 
  18.     /* not found: allocate one (paddr) */ 
  19. ⑷  LosVmPage *vmPage = LOS_PhysPageAlloc(); 
  20.     if (vmPage == NULL) { 
  21.         VM_ERR("have no memory to save l2 page"); 
  22.         return LOS_ERRNO_VM_NO_MEMORY; 
  23.     } 
  24.     LOS_ListAdd(&archMmu->ptList, &vmPage->node); 
  25.     kvaddr = OsVmPageToVaddr(vmPage); 
  26. #else 
  27. ⑸  kvaddr = LOS_MemAlloc(OS_SYS_MEM_ADDR, MMU_DESCRIPTOR_L2_SMALL_SIZE); 
  28.     if (kvaddr == NULL) { 
  29.         VM_ERR("have no memory to save l2 page"); 
  30.         return LOS_ERRNO_VM_NO_MEMORY; 
  31.     } 
  32. #endif 
  33.     (VOID)memset_s(kvaddr, MMU_DESCRIPTOR_L2_SMALL_SIZE, 0, MMU_DESCRIPTOR_L2_SMALL_SIZE); 
  34.  
  35.     /* get physical address */ 
  36. ⑹  *ppa = LOS_PaddrQuery(kvaddr) + l2Offset; 
  37.     return LOS_OK; 

3.4 OsMapL1PTEL1 Page Table類型頁表項映射函數

和函數OsMapSection對應,函數OsMapL1PTE用于生成L1 Page Table類型頁表項并保存,其中函數參數pte1Ptr是L1頁表項地址。⑴處調用函數OsGetL2Table()獲取L2頁表項基地址TTB,⑵處把L2頁表項基地址加上描述符類型作為L1頁表項數據。⑶處開始的3行代碼為頁表項設置標簽,⑷處為虛擬內存地址vaddr保存頁表項數據。

  1. STATIC VOID OsMapL1PTE(LosArchMmu *archMmu, PTE_T *pte1Ptr, vaddr_t vaddr, UINT32 flags) 
  2.     paddr_t pte2Base = 0; 
  3.  
  4. ⑴  if (OsGetL2Table(archMmu, OsGetPte1Index(vaddr), &pte2Base) != LOS_OK) { 
  5.         LOS_Panic("%s %d, failed to allocate pagetable\n", __FUNCTION__, __LINE__); 
  6.     } 
  7.  
  8. ⑵  *pte1Ptr = pte2Base | MMU_DESCRIPTOR_L1_TYPE_PAGE_TABLE; 
  9. ⑶  if (flags & VM_MAP_REGION_FLAG_NS) { 
  10.         *pte1Ptr |= MMU_DESCRIPTOR_L1_PAGETABLE_NON_SECURE; 
  11.     } 
  12.     *pte1Ptr &= MMU_DESCRIPTOR_L1_SMALL_DOMAIN_MASK; 
  13.     *pte1Ptr |= MMU_DESCRIPTOR_L1_SMALL_DOMAIN_CLIENT; // use client AP 
  14. ⑷   OsSavePte1(OsGetPte1Ptr(archMmu->virtTtb, vaddr), *pte1Ptr); 

3.5 OsMapL2PageContinuous映射L2頁表函數

函數OsMapL2PageContinuous用于映射L2頁表項,其中函數參數pte1為L1頁表項數據,flags為虛實映射標簽,vaddr為虛擬內存,paddr為物理內存,count為需要映射的內存頁數量。

⑴處根據L1頁表項數據獲取L2頁表項虛擬內存基地址。頁表項的高22位為L2頁表項的物理內存基地址,然后轉換為虛擬內存基地址即可。⑵處把地址區間標簽轉換為L2頁表標簽,⑶處連續設置L2頁表項數據,saveCounts表示映射了多少個L2頁表項。⑷處映射L2頁表項數據后,更新虛擬、物理內存地址,更新映射后的內存頁數量count。由于一個L2頁表項占用4KiB大小,saveCounts個頁表項,需要把saveCounts左移12位來增長內存地址。

  1. STATIC UINT32 OsMapL2PageContinuous(PTE_T pte1, UINT32 flags, VADDR_T *vaddr, PADDR_T *paddr, UINT32 *count
  2.     PTE_T *pte2BasePtr = NULL
  3.     UINT32 archFlags; 
  4.     UINT32 saveCounts; 
  5.  
  6. ⑴  pte2BasePtr = OsGetPte2BasePtr(pte1); 
  7.     if (pte2BasePtr == NULL) { 
  8.         LOS_Panic("%s %d, pte1 %#x error\n", __FUNCTION__, __LINE__, pte1); 
  9.     } 
  10.  
  11.     /* compute the arch flags for L2 4K pages */ 
  12. ⑵  archFlags = OsCvtPte2FlagsToAttrs(flags); 
  13. ⑶  saveCounts = OsSavePte2Continuous(pte2BasePtr, OsGetPte2Index(*vaddr), *paddr | archFlags, *count); 
  14. ⑷  *paddr += (saveCounts << MMU_DESCRIPTOR_L2_SMALL_SHIFT); 
  15.     *vaddr += (saveCounts << MMU_DESCRIPTOR_L2_SMALL_SHIFT); 
  16.     *count -= saveCounts; 
  17.     return saveCounts; 

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com

 

責任編輯:jianghua 來源: 鴻蒙社區
相關推薦

2021-12-03 16:22:05

鴻蒙HarmonyOS應用

2021-12-02 15:08:23

鴻蒙HarmonyOS應用

2021-12-01 15:59:22

鴻蒙HarmonyOS應用

2021-11-08 15:06:15

鴻蒙HarmonyOS應用

2021-11-05 15:00:33

鴻蒙HarmonyOS應用

2022-03-11 20:23:14

鴻蒙源碼分析進程管理

2022-01-10 15:31:44

鴻蒙HarmonyOS應用

2022-01-12 10:50:23

鴻蒙HarmonyOS應用

2021-05-17 09:28:59

鴻蒙HarmonyOS應用

2022-01-14 08:39:47

鴻蒙HarmonyOS應用

2022-03-03 18:28:28

Harmony進程任務管理模塊

2022-04-13 11:02:12

鴻蒙事件模塊事件Event

2021-05-21 09:25:11

鴻蒙HarmonyOS應用

2021-06-04 09:57:49

鴻蒙HarmonyOS應用

2021-06-04 14:15:10

鴻蒙HarmonyOS應用

2021-05-08 15:14:50

鴻蒙HarmonyOS應用

2022-04-13 11:12:43

鴻蒙輕內核信號量模塊操作系統

2021-10-20 16:08:57

鴻蒙HarmonyOS應用

2021-05-25 09:28:34

鴻蒙HarmonyOS應用

2021-06-17 09:36:07

鴻蒙HarmonyOS應用
點贊
收藏

51CTO技術棧公眾號

草莓视频丝瓜在线观看丝瓜18| 久久亚洲国产成人精品性色| av免费在线一区| 中文字幕巨乱亚洲| 99中文视频在线| 中文字幕在线欧美| 欧美在线精品一区| 日韩电影在线观看永久视频免费网站| 777视频在线| 91在线三级| 中文字幕一区二区三区四区| 国产日韩精品久久| 国产精品伦理一区| 老牛影视一区二区三区| 欧美黑人巨大精品一区二区| 成熟人妻av无码专区| 岛国av一区| 777奇米成人网| 97公开免费视频| √天堂8资源中文在线| 国产精品国产三级国产普通话三级| 成人精品水蜜桃| 一级片免费网站| 丝袜诱惑亚洲看片| 97涩涩爰在线观看亚洲| 青青青在线免费观看| 日韩欧美国产精品综合嫩v| 亚洲高清不卡av| 无码国产精品久久一区免费| 亚洲我射av| 欧美日韩精品免费观看视频 | 成人免费无码大片a毛片| 日韩成人在线电影| 欧洲精品视频在线观看| 日韩a∨精品日韩在线观看| yellow91字幕网在线| 国产精品久久久久婷婷二区次| 欧美不卡三区| 神马电影在线观看| www.欧美亚洲| 国产欧美日韩在线播放| 亚洲av无码国产精品久久不卡| 蜜臀av一区二区| 国产精品久久久久久影视| 黄色片网站在线免费观看| 亚洲免费观看| 26uuu另类亚洲欧美日本老年| 欧美三级在线免费观看| 一区二区电影在线观看| 久久偷看各类女兵18女厕嘘嘘| 女教师淫辱の教室蜜臀av软件| 区一区二视频| 日韩在线资源网| 看黄色录像一级片| 欧美1区3d| 久久久亚洲影院| 91看片在线播放| 亚洲一区二区三区四区五区午夜| 国内伊人久久久久久网站视频| av资源吧首页| 国产精品资源| 国产精品久久久久久久久久久不卡 | 成人免费视频在线观看超级碰| 中文字幕乱码一区二区| 麻豆精品视频在线观看| 91欧美日韩一区| 成人精品在线播放| 91在线高清观看| 秋霞毛片久久久久久久久| 国产在线观看网站| 国产精品人妖ts系列视频| 黄色一级片网址| 黄色在线观看视频网站| 欧美日韩精品中文字幕| 国产一级不卡毛片| 91麻豆精品| 337p日本欧洲亚洲大胆精品| 精品人伦一区二区三电影| 欧美丝袜丝交足nylons172| 久久精品一区中文字幕| 国产第100页| 日日噜噜夜夜狠狠视频欧美人| 国产三级精品网站| 全部免费毛片在线播放一个| 久久新电视剧免费观看| 在线视频一区观看| а√在线中文在线新版| 欧美午夜一区二区三区免费大片| 亚洲图片 自拍偷拍| 台湾亚洲精品一区二区tv| 亚洲香蕉在线观看| 永久看片925tv| 性高湖久久久久久久久| 91香蕉国产在线观看| 亚洲色大成网站www| 中文字幕一区二区三区不卡 | 日韩女优中文字幕| 怡红院红怡院欧美aⅴ怡春院| 福利二区91精品bt7086| 日本黄色福利视频| 亚洲三级精品| 欧美黄色片免费观看| 精品无码一区二区三区的天堂| 国产精品99久久久久久宅男| 欧美 日韩 国产在线| 欧美黄色视屏| 欧美日韩免费视频| 一女三黑人理论片在线| 中文精品久久| 国产精品第1页| 婷婷伊人综合中文字幕| 亚洲人午夜精品天堂一二香蕉| 成人在线看视频| 成人另类视频| 久久综合久久美利坚合众国| 国产精品一区无码| 99精品欧美一区二区三区小说| 欧美性受xxxx黑人猛交88| 欧美日韩美女| 日韩av在线免费观看| 精品国产乱码久久久久久鸭王1| 日韩和欧美一区二区三区| 国内精品国语自产拍在线观看| 91精选在线| 欧美一区二区三区视频在线观看| 亚洲精品国产精品国自产网站| 国产精品普通话对白| 国产精品久久久久久久免费大片| 国产高清自拍视频在线观看| 富二代精品短视频| 91玉足脚交白嫩脚丫| 在线国产一区| 91免费版网站在线观看| 免费黄网站在线| 欧美日韩国产首页| 国产传媒在线看| 奇米影视一区二区三区| 欧美重口乱码一区二区| 欧美大胆性生话| 亚洲欧洲在线看| 区一区二在线观看| 久久久久久99精品| 午夜欧美福利视频| 不卡在线一区二区| 国产精品一区二区三区在线播放| av影片免费在线观看| 在线免费观看成人短视频| 国产jjizz一区二区三区视频| 老司机免费视频久久| 日韩免费毛片| 亚洲一区二区三区久久久| 久久久www成人免费精品| 国产精品嫩草影院精东| 亚洲人123区| 精品1卡二卡三卡四卡老狼| 黑人一区二区| 精品欧美一区二区三区久久久| 韩日毛片在线观看| 亚洲精品自产拍| 日批视频免费观看| 一区在线观看免费| 在线成人精品视频| 日韩视频中文| 日本不卡一区二区三区在线观看| 粉嫩av一区二区三区四区五区| xvideos亚洲人网站| 精品国产九九九| 亚洲h动漫在线| 美女洗澡无遮挡| 久久黄色级2电影| 免费一级淫片aaa片毛片a级| 欧美丝袜足交| 国产精品视频不卡| 免费污视频在线| 亚洲人成电影网站色www| ,一级淫片a看免费| 亚洲国产乱码最新视频| 中文字幕高清视频| 精品一区二区三区免费观看| 日韩黄色片在线| 国产欧美日韩精品一区二区三区| 亚洲一区二区三区777| sm久久捆绑调教精品一区| 亚洲一区二区国产| 亚洲成人77777| 一本大道久久a久久综合婷婷| 中文字幕乱码av| 99v久久综合狠狠综合久久| 麻豆一区二区三区视频| 欧美日韩国产欧| 亚洲高清在线观看一区| 成人h动漫精品一区二区器材| 日本三级韩国三级久久| 宅男在线观看免费高清网站| 亚洲欧美自拍一区| 国产极品久久久| 欧美影院午夜播放| 日韩av在线播| 亚洲免费色视频| 欧美丰满老妇熟乱xxxxyyy| 丁香另类激情小说| gogogo高清免费观看在线视频| 国产精品久久久亚洲一区| 97超碰人人爱| 欧美性感美女一区二区| 国产亚洲精品久久飘花| 亚洲伊人精品酒店| 国产极品jizzhd欧美| 成年女人在线看片| 操日韩av在线电影| 五月婷婷在线视频| 一本久久综合亚洲鲁鲁| 亚洲色图狠狠干| 亚洲成人亚洲激情| 亚洲av综合色区无码一区爱av| 欧美日韩精品系列| 最近中文字幕av| 色综合久久综合网欧美综合网 | 国产精品国产精品| 国产精品一区三区在线观看| 国产成人综合久久| 亚洲私拍视频| 韩日精品中文字幕| ririsao久久精品一区| 欧美精品亚州精品| 国产精品剧情| 久久久99久久精品女同性| 99青草视频在线播放视| 亚洲人成电影在线| 黑人与亚洲人色ⅹvideos| 亚洲黄色在线看| 天堂成人在线视频| 亚洲成人999| 黄色av小说在线观看| 日韩精品一区二区三区swag| aaa一区二区三区| 欧美一区二区三区不卡| 91免费视频播放| 制服视频三区第一页精品| 亚洲一级特黄毛片| 欧美日本韩国一区二区三区视频| 亚洲一区中文字幕永久在线| 欧美午夜精品久久久久久超碰| 国产成人精品777777| 91久久精品午夜一区二区| 亚洲影院在线播放| 欧洲色大大久久| 中文字幕精品一区二区精| 欧美日韩免费一区二区三区| 一女二男一黄一片| 欧美一区二区黄色| 亚洲男人第一天堂| 亚洲精品乱码久久久久久金桔影视| 手机av免费在线观看| 精品无人区乱码1区2区3区在线 | 97caocao| 日韩欧美三级在线| 男人天堂av网| 亚洲老头同性xxxxx| av影片免费在线观看| 欧美美女操人视频| 狼人综合视频| 国产精品极品美女在线观看免费| 国语自产精品视频在线看抢先版结局| 91久久久久久久久久久久久| 亚洲三级av| 精品欧美日韩| 成人三级视频| 女人床在线观看| 一区二区三区四区五区精品视频| a√天堂在线观看| 免费成人在线视频观看| 欧美一级免费在线| 91一区二区在线观看| 精品熟妇无码av免费久久| 一区二区高清在线| 亚洲第一网站在线观看| 欧美精品三级日韩久久| 人妻中文字幕一区| 国产一区二区三区精品久久久| 国产剧情在线| 日本欧美在线视频| 香蕉大人久久国产成人av| 美女亚洲精品| 牛牛国产精品| 欧美精品aaaa| 成人污污视频在线观看| x88av在线| 亚洲午夜久久久久中文字幕久| 久久久久久久久久成人| 日韩欧美激情四射| 黄色av网站在线免费观看| 欧美日本亚洲视频| 韩国成人在线| 精品欧美一区二区在线观看视频| 欧美xxav| 麻豆传传媒久久久爱| 国产成人啪免费观看软件| 波多野结衣av在线观看| 亚洲综合在线观看视频| 中文在线最新版天堂| 亚洲激情中文字幕| 黄色的网站在线观看| 777777777亚洲妇女| 亚洲精品aaa| 日韩高清在线播放| 亚洲乱码视频| 少妇欧美激情一区二区三区| 欧美国产日本视频| 久久久久久久久影院| 日韩一级高清毛片| 色网站免费在线观看| 欧美在线视频观看| 99国产精品久久一区二区三区| 亚洲午夜精品久久久久久浪潮| 宅男噜噜噜66一区二区| 中文字幕亚洲日本| 亚洲三级电影全部在线观看高清| 五月天中文字幕| 亚洲男人av电影| 国产拍在线视频| 国产精品18毛片一区二区| 91精品秘密在线观看| 国产小视频精品| 国产三级精品视频| 亚洲 欧美 成人| 日韩二区三区在线| av色在线观看| 成人欧美一区二区三区在线观看| 亚洲国产精品久久久天堂| 亚洲欧美久久久久| 中文字幕第一页久久| 樱花视频在线免费观看| 精品视频中文字幕| 涩涩网在线视频| 麻豆av一区二区| 国产亚洲精品bv在线观看| 国产女人18毛片水真多18| 亚洲夂夂婷婷色拍ww47| 成人爽a毛片一区二区| 欧美高清在线播放| 日本在线成人| 国产1区2区3区中文字幕| 国产成人鲁色资源国产91色综| 久久久久成人精品无码| 日韩欧美在线网站| 乱插在线www| 国产精品久久久久久久久久直播| 亚洲高清资源| yy1111111| 欧美日韩午夜剧场| 欧美中文在线| 国产精品成人aaaaa网站| 欧美色图一区| 在线a免费观看| 亚洲国产一二三| 色视频在线观看| 国产精品久久久久av| 99国产**精品****| 日韩高清一二三区| 欧美三级免费观看| 成人精品福利| 91免费看蜜桃| 乱码第一页成人| 成年人视频软件| 精品国产乱码久久久久久1区2区 | 欧美日韩黄视频| www红色一片_亚洲成a人片在线观看_| 成人免费视频视频在| 老鸭窝毛片一区二区三区| 国产午夜福利一区| 日韩一区二区不卡| 涩涩视频在线免费看| 一本色道婷婷久久欧美| 国产suv精品一区二区三区| 久久艹免费视频| 日韩一区二区av| 美女午夜精品| 中文字幕在线观看日| 亚洲曰韩产成在线| 国产区视频在线播放| 亚洲一区久久久| 亚洲免费在线| 国产精品 欧美激情| 日韩精品极品在线观看| 日韩免费大片| 92看片淫黄大片一级| 亚洲欧美一区二区不卡| 男女网站在线观看| 亚洲最大福利视频网| 天堂成人国产精品一区| 国产波霸爆乳一区二区| 夜夜嗨av色综合久久久综合网| 日韩精品一区国产| 国产精品人人爽人人爽| 亚洲午夜羞羞片| 18视频在线观看网站| 亚洲v日韩v欧美v综合| av在线不卡免费看| 国产又粗又猛又黄|