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

loongarch架構介紹—(五)TLB維護

開發 架構
本文介紹了TLB維護操作和相關指令,并結合Linux中代碼進行了分析。這篇文章之后,本系列文章暫時告一段落。主要是目前loongarch相關的資料有限,描述二進制翻譯擴展等擴展內容的loongarch手冊第二、三卷也還沒有出。

??想了解更多關于開源的內容,請訪問:??

??51CTO 開源基礎軟件社區??

??https://ost.51cto.com??

前言

上一篇文章中介紹了loongarch中TLB相關的異常處理,這一篇文章繼續介紹TLB相關的維護操作。

1、TLB硬件組織機構

首先補充loongarch中TLB相關的硬件背景知識。

loongarch架構中,TLB分為兩個部分:一個是所有表項的頁大小都相同的Singular-Page-Size TLB,簡稱STLB;一個是支持不同表項的頁大小可以不同的Multiple-Page-Size TLB,簡稱MTLB。在進行虛實地址轉換時,STLB和MTLB同時查找。同時軟件上需保證不會出現MTLB和STLB同時命中的情況。

STLB和MTLB的表項格式基本一致,區別僅在于MTLB每個表項中均包含了一個頁大小的信息,而STLB每個表項中無此信息。

回顧上一篇文章中介紹了的TLB表項格式:

 #loongarch架構介紹# [五] TLB維護-開源基礎軟件社區

其中PS(page size)域僅存在于MTLB。

2、虛擬內存系統與硬件維護

虛擬地址空間的引入為程序提供了方便,但同時也帶來了其他問題。

其中,有一種稱為homonym的問題,其指的是單個虛擬地址指向多個物理地址的情況。例如,在多個進程中使用了相同的虛擬地址,但這些虛擬地址實際上指向了不同的物理地址。當進程切換、虛擬地址空間切換、頁表修改等情況時,硬件上的緩存數據不一定會自動進行同步,此時就會有數據不一致的問題。

因此,操作系統在軟件上需要手動去維護相關的硬件數據一致性:

  • TLB維護:TLB中緩存的頁表項就有可能因為軟件上對頁表的修改,出現數據不一致的問題。操作系統需要進行invalidate(或者稱為flush)TLB的操作,將相應的表項無效。
  • cache維護:某些類型的cache也可能會因頁表的修改,出現數據不一致的問題。對于這些cache,操作系統同樣需要進行clean或invalidate操作。

(1)TLB維護與ASID

在一些早期的架構中,invalidate TLB操作實際上是將整個TLB中的數據無效,因為TLB因homonym問題無法判斷其緩存的表項屬于哪個進程。

但實際上,刷新整個TLB的數據是一件相當浪費性能的事,既會影響上下文切換時的速度,也會降低TLB加速的作用。因此,后來的架構一般都會在TLB中加入其他標識以識別不同的進程或者虛擬地址空間,這樣TLB不需要每次切換上下文都進行invalidate操作。

ASID(Address Space ID)就是這樣的標識。loongarch中支持ASID,見上文中TLB表項圖,其中就有ASID域。每個TLB表項都有ASID,ASID由操作系統在軟件上進行分配,一般一個虛擬地址空間有一個唯一的ASID,這樣就有效減少了TLB invalidate操作的次數。

loongarch中,CSR.ASID寄存器可以控制當前TLB使用的ASID,如下圖:

 #loongarch架構介紹# [五] TLB維護-開源基礎軟件社區

同時loongarch中TLB相關維護指令也支持根據ASID,只無效部分ASID匹配的表項。見后文介紹。

(2)cache維護

相較于cache維護,TLB相關的維護是本文著重介紹的內容。主要是因為目前loongarch中cache相關的資料較少。

一般來說,在上下文切換、頁表修改等情況時,是否需要在軟件上對cache進行維護,與具體的架構和cache類型有關。以ARM架構為例,其中VIVT類型的cache在涉及頁表切換等操作時需要進行維護。

3、TLB相關維護指令

  • tlbclr:tlbclr指令根據TLB相關CSR中的信息無效TLB中的內容。
  • 當CSR.TLBIDX.Index落在MTLB范圍內時,執行tlbclr,將MTLB中所有G=0且ASID等于CSR.ASID.ASID的表項無效。其中G、ASID為表項中的域。
  • 當CSR.TLBIDX.Index落在STLB范圍內時,執行tlbclr,將STLB中CSR.TLBIDX.Index對應的且G=0且ASID等于CSR.ASID.ASID的表項無效。
  • tlbflush:tlbflush指令同樣根據TLB相關CSR中的信息無效TLB中的內容,但作用范圍較tlbclr指令更廣。
  • 當CSR.TLBIDX.Index落在MTLB范圍內時,執行tlbflush,將MTLB中所有的表項無效。
  • 當CSR.TLBIDX.Index落在STLB范圍內時,執行tlbflush,將STLB中CSR.TLBIDX.Index對應的表項無效。
  • invtlb op, rj, rk:invtlb指令同樣用于無效TLB中的內容,但相較于tlbclr和tlbflush指令更加靈活。
  • op表示操作類型,下面是loongarch手冊中列出的op類型:
  • op=0:清除所有表項。
  • op=1:清除所有表項。效果和op=0完全一致。
  • op=2:清除所有G=1的表項。
  • op=3:清除所有G=0的表項。
  • op=4:清除所有G=0,且ASID等于寄存器指定ASID的表項。
  • op=5:清除所有G=0,ASID等于寄存器指定ASID,且VA等于寄存器指定VA的表項。
  • op=6:清除所有G=1或ASID等于寄存器指定ASID,且VA等于寄存器指定VA的表項。
  • 通用寄存器rj中存放ASID信息。當op對應的操作不需要ASID時,rj應設置為r0。
  • 通用寄存器rk中存放VA虛擬地址信息。當op對應的操作不需要VA時,rk應設置為r0。

下面用linux中loongarch下TLB flush相關API對invtlb指令舉例說明。

注:目前loongarch手冊中的op操作類型似乎不全。

// invtlb指令中的op
enum invtlb_ops {
/* Invalid all tlb */
INVTLB_ALL = 0x0,
/* Invalid current tlb */
INVTLB_CURRENT_ALL = 0x1,
/* Invalid all global=1 lines in current tlb */
INVTLB_CURRENT_GTRUE = 0x2,
/* Invalid all global=0 lines in current tlb */
INVTLB_CURRENT_GFALSE = 0x3,
/* Invalid global=0 and matched asid lines in current tlb */
INVTLB_GFALSE_AND_ASID = 0x4,
/* Invalid addr with global=0 and matched asid in current tlb */
INVTLB_ADDR_GFALSE_AND_ASID = 0x5,
/* Invalid addr with global=1 or matched asid in current tlb */
INVTLB_ADDR_GTRUE_OR_ASID = 0x6,
/* Invalid matched gid in guest tlb */
INVGTLB_GID = 0x9,
/* Invalid global=1, matched gid in guest tlb */
INVGTLB_GID_GTRUE = 0xa,
/* Invalid global=0, matched gid in guest tlb */
INVGTLB_GID_GFALSE = 0xb,
/* Invalid global=0, matched gid and asid in guest tlb */
INVGTLB_GID_GFALSE_ASID = 0xc,
/* Invalid global=0 , matched gid, asid and addr in guest tlb */
INVGTLB_GID_GFALSE_ASID_ADDR = 0xd,
/* Invalid global=1 , matched gid, asid and addr in guest tlb */
INVGTLB_GID_GTRUE_ASID_ADDR = 0xe,
/* Invalid all gid gva-->gpa guest tlb */
INVGTLB_ALLGID_GVA_TO_GPA = 0x10,
/* Invalid all gid gpa-->hpa tlb */
INVTLB_ALLGID_GPA_TO_HPA = 0x11,
/* Invalid all gid tlb, including gva-->gpa and gpa-->hpa */
INVTLB_ALLGID = 0x12,
/* Invalid matched gid gva-->gpa guest tlb */
INVGTLB_GID_GVA_TO_GPA = 0x13,
/* Invalid matched gid gpa-->hpa tlb */
INVTLB_GID_GPA_TO_HPA = 0x14,
/* Invalid matched gid tlb,including gva-->gpa and gpa-->hpa */
INVTLB_GID_ALL = 0x15,
/* Invalid matched gid and addr gpa-->hpa tlb */
INVTLB_GID_ADDR = 0x16,
};
/*
* invtlb op info addr
* (0x1 << 26) | (0x24 << 20) | (0x13 << 15) |
* (addr << 10) | (info << 5) | op
*/
// 基于機器碼封裝了invtlb op info addr格式的指令
static inline void invtlb(u32 op, u32 info, u64 addr)
{
__asm__ __volatile__(
"parse_r addr,%0\n\t"
"parse_r info,%1\n\t"
".word ((0x6498000) | (addr << 10) | (info << 5) | %2)\n\t"
:
: "r"(addr), "r"(info), "i"(op)
:
);
}
// invtlb op 0 0指令
static inline void invtlb_all(u32 op, u32 info, u64 addr)
{
__asm__ __volatile__(
".word ((0x6498000) | (0 << 10) | (0 << 5) | %0)\n\t"
:
: "i"(op)
:
);
}

4、上下文切換和TLB維護

本節結合linux中上下文切換部分代碼對TLB invalidate操作進行分析。

以下為linux中context_switch上下文切換函數的流程:

context_switch(struct rq *rq, struct task_struct *prev,
| struct task_struct *next)
| // 更新時間片、最近進隊時間等調度信息以及其他準備工作
|-> prepare_task_switch(rq, prev, next);
|
| // 虛擬地址空間切換相關
|-> mm = next->mm;
| oldmm = prev->active_mm;
| if (!mm) {
| next->active_mm = oldmm;
| atomic_inc(&oldmm->mm_count); // 增加oldmm的引用計數
| // 其他架構(x86)相關,這里不關注
| enter_lazy_tlb(oldmm, next);
| } else
| // 切換到用戶進程,需切換進程虛擬空間
| switch_mm(oldmm, mm, next);
|
|-> ...
|
| // 切換任務上下文
|-> switch_to(prev, next, prev);
| // 切換后再次被調度時向下執行
|
| // 用barrier機制同步,
| // 保證switch_to和finish_task_switch的執行順序
|-> barrier();
| // 使用gcc內聯匯編:::"memory"語法實現,
| // 這樣編譯器不會優化此語句前后的訪存順序
|-> #define barrier() __asm__ __volatile__("": : :"memory")
|
| // 再次被調度時,進行清理工作
|-> finish_task_switch(this_rq(), prev);

在進行任務上下文切換函數switch_to之前,如果涉及進程虛擬地址空間改變,則需要切換mmu上下文。上面switch_mm函數的作用就是切換mmu上下文。

loongarch架構代碼中switch_mm及相關函數的分析如下:

switch_mm(struct mm_struct *prev, struct mm_struct *next,
| struct task_struct *tsk)
|-> switch_mm_irqs_off(prev, next, tsk);
|-> unsigned int cpu = smp_processor_id();
|
| /* Check if our ASID is of an older version and thus invalid */
| // 如果asid不同,則需重新分配
|-> if (!asid_valid(next, cpu))
| get_new_mmu_context(next, cpu);
|
| // 寫入asid到寄存器CSR.ASID
|-> write_csr_asid(cpu_asid(cpu, next));
|
| // 切換頁表
|-> if (next != &init_mm)
| csr_writeq((unsigned long)next->pgd, LOONGARCH_CSR_PGDL);
| else
| csr_writeq((unsigned long)invalid_pg_dir, LOONGARCH_CSR_PGDL);
|
|-> ...

#define cpu_context(cpu, mm) ((mm)->context.asid[cpu])
#define asid_cache(cpu) (cpu_data[cpu].asid_cache)
static inline int asid_valid(struct mm_struct *mm, unsigned int cpu)
{
// 如果mm中的asid和當前asid_cache不同,則返回無效
if ((cpu_context(cpu, mm) ^ asid_cache(cpu)) & asid_version_mask(cpu))
return 0;

return 1;
}

static inline void
get_new_mmu_context(struct mm_struct *mm, unsigned long cpu)
{
| // 循環遞增地分配新的asid,為舊的asid_cache + 1
|-> u64 asid = asid_cache(cpu);
| if (!((++asid) & cpu_asid_mask(&cpu_data[cpu])))
| // 當asid溢出時開始新的分配循環,此時需刷新TLB中所有用戶部分
| local_flush_tlb_user(); /* start new asid cycle */
|
| // 將mm中asid和當前asid_cache設為新分配的asid
|-> cpu_context(cpu, mm) = asid_cache(cpu) = asid;
}

其中,switch_mm函數主要完成兩個任務:

  • 維護TLB:如前文所述,loongarch中上下文切換時需要維護TLB數據一致性。在上面的代碼中,是結合ASID進行實現:
  • 每次檢測ASID是否變化,如果變化則說明虛擬地址空間需要進行切換,CSR.ASID寄存器需要重新設置
  • 上面代碼實現中是通過循環遞增的方式分配新的ASID,當ASID溢出時需要使用invalidate TLB操作來保證數據一致性
  • 切換頁表:不同的用戶虛擬地址空間有不同的頁表,需通過設置相關寄存器進行切換。頁表相關的配置可參考前面的文章。

上面的asid_valid函數檢測ASID是否變化,get_new_mmu_context函數負責重新分配ASID和ASID溢出時調用local_flush_tlb_user函數進行invalidate TLB操作。

local_flush_tlb_user函數分析如下:

local_flush_tlb_user(void)
| // 刷新所有global=0的TLB表項
|-> invtlb_all(INVTLB_CURRENT_GFALSE, 0, 0);

另外,上面代碼中ASID管理部分可以進一步改進,因為每次檢測到ASID變化后,mm結構體被設置了一個新分配的ASID,這樣實際上未能利用mm結構體中原來的ASID和TLB中對應緩存數據。

總結

本文介紹了TLB維護操作和相關指令,并結合linux中代碼進行了分析。這篇文章之后,本系列文章暫時告一段落。主要是目前loongarch相關的資料有限,描述二進制翻譯擴展等擴展內容的loongarch手冊第二、三卷也還沒有出。

最后,在查詢loongarch資料(主要是基于龍芯手冊第一卷1.02和linux中loongarch部分源碼)的過程中也發現了一些不足點或者是不夠詳細的地方,這里一并列出:

  • 指令的介紹有信息遺漏:如第一篇文章中列出的一部分手冊上沒有,但在代碼中出現的move等指令;又如前文中的invtlb指令中的op操作類型相比代碼中缺少一些
  • 內存一致性模型,內存訪存類型的信息不夠詳細:第二篇文章中提到了這點,如手冊中出現的一致可緩存等術語沒有解釋
  • 中斷機制相關信息不夠詳細
  • cache相關信息不夠詳細

??想了解更多關于開源的內容,請訪問:??

??51CTO 開源基礎軟件社區??

??https://ost.51cto.com??

責任編輯:jianghua 來源: 51CTO 開源基礎軟件社區
相關推薦

2023-02-21 16:46:04

loongarch架構

2022-12-15 17:31:41

架構龍芯

2023-02-03 14:41:03

地址翻譯模式loongarch

2023-01-04 15:20:51

loongarch架構

2022-10-08 11:16:04

UbuntuLoongArch

2010-05-07 17:29:26

Unix系統

2023-07-12 16:03:37

Android開發架構

2012-05-29 09:59:34

2019-07-05 08:56:50

預測性維護物聯網智能工廠

2011-06-01 11:28:38

復合機技巧

2011-05-07 17:46:14

復合機維護

2009-12-22 16:29:51

Linux多媒體軟件

2012-03-05 15:59:15

基礎架構整合服務器數據中心

2010-06-01 09:50:26

MySQL維護管理工具

2010-03-05 12:50:38

Linux shell

2009-07-23 13:23:47

開源游戲引擎

2014-04-22 09:34:12

大數據

2009-06-18 09:03:58

Unix關機

2016-12-07 18:22:23

shelllinuxgrep

2023-09-03 16:41:07

點贊
收藏

51CTO技術棧公眾號

亚洲第一区第二区| 99久久久无码国产精品| 久久久www成人免费精品| 日本超碰在线观看| 日本资源在线| 91麻豆免费观看| 国产精品视频地址| 国产精品成人aaaa在线| 欧美三级美国一级| 日韩精品一区二区三区四区| 中国丰满人妻videoshd| 在线看的av网站| 成人在线视频一区| 国产精品一区二区3区| 久久精品www人人爽人人| 久9久9色综合| 欧美成人猛片aaaaaaa| 成人性生生活性生交12| 免费毛片在线看片免费丝瓜视频 | 亚洲成年人在线观看| 亚洲天堂一区二区| 亚洲成人一区二区| 中文字幕一区二区三区精彩视频| 日本成人动漫在线观看| 久久精品国产秦先生| 97久久久久久| 伊人在线视频观看| 精品久久久久久久久久久下田| 日韩一区二区三区av| 欧美日韩亚洲一| 亚洲小说区图片区都市| 国产精品免费人成网站| 久久久久久99| 亚洲风情第一页| 免费精品视频在线| 欧美在线免费视频| 国产一级淫片免费| 中文字幕免费一区二区| 中文字幕日韩专区| 在哪里可以看毛片| 露出调教综合另类| 日韩欧美一二三区| 亚洲一级片av| 欧美成人福利| 欧美亚洲综合色| 欧美 丝袜 自拍 制服 另类| 天堂av在线电影| 自拍偷拍亚洲激情| 亚洲国产精品视频一区| 欧洲免费在线视频| 99国产精品国产精品久久| 91超碰rencao97精品| 亚洲综合精品在线| 蜜乳av一区二区| 日韩福利在线播放| 群体交乱之放荡娇妻一区二区| 国产精品美女久久久久久久网站| 国产伦精一区二区三区| 久久久亚洲影院你懂的| 国产精品久久久精品四季影院| 精品freesex老太交| 亚洲免费影视第一页| av理论在线观看| 国产亚洲欧美中文| 欧美精品久久| 日韩美女一级视频| 91丨九色丨国产丨porny| 精品高清视频| 视频二区在线| 久久久精品国产免大香伊| 午夜久久久影院| 穿情趣内衣被c到高潮视频| 免费黄网站在线| 亚洲日本韩国一区| 青青草影院在线观看| 国产视频中文字幕在线观看| 综合久久国产九一剧情麻豆| 国产在线拍揄自揄拍无码| 岛国成人毛片| 亚洲一区二区三区爽爽爽爽爽| 少妇久久久久久被弄到高潮| 国产丝袜在线播放| 欧美性生活大片免费观看网址| 能在线观看的av| 国产91欧美| 这里只有精品电影| 日韩成人av影院| 欧洲vs亚洲vs国产| 国产一级揄自揄精品视频| 天堂在线中文视频| 亚洲精品午夜av福利久久蜜桃| 欧美成在线观看| 日韩av女优在线观看| 久久国产日韩| 成人激情春色网| 亚洲av无码一区二区三区性色| proumb性欧美在线观看| 日本不卡二区高清三区| 国产午夜精品久久久久免费视| 亚洲一区在线视频| 日韩视频在线免费看| 亚洲国产伊人| 亚洲精品久久久久久久久久久久 | 韩国精品主播一区二区在线观看| 欧美亚洲尤物久久| 中文字幕1区2区| 国产成人av| 欧美成人在线影院| 中文字幕69页| 国产成人免费网站| 午夜视频久久久| 丰满诱人av在线播放| 色婷婷av一区二区三区之一色屋| www.成人黄色| 亚洲裸色大胆大尺寸艺术写真| 久久精品中文字幕| 国产成人在线视频观看| 国产精品一级在线| 视频一区二区三| 菠萝蜜视频在线观看www入口| 色乱码一区二区三区88| 亚洲AV无码久久精品国产一区| 亚洲精品**不卡在线播he| 欧美精品免费在线观看| 中文字幕乱伦视频| 99re这里都是精品| 久久亚洲国产成人精品无码区| 日韩不卡免费高清视频| 亚洲国产精品网站| 校园春色 亚洲| 免费人成网站在线观看欧美高清| 久草精品电影| 亚洲精品国产av| 欧美日韩国产综合网| 人人澡人人澡人人看欧美| 99精品在线视频观看| 国产亚洲欧美激情| 免费无码毛片一区二三区| 玖玖精品在线| 亚洲天堂第一页| 久久精品99国产精| 国产一区二区精品在线观看| 相泽南亚洲一区二区在线播放| 欧美办公室脚交xxxx| 精品国产污污免费网站入口| 日韩乱码一区二区三区| 综合激情一区| 国产欧美日韩免费看aⅴ视频| 亚洲日本在线播放| 一区二区三区蜜桃| 日本少妇一区二区三区| 国产精品久久久久久久久妇女 | 日本无删减在线| 香蕉视频一区二区三区| 性欧美xxxx交| 天天操天天爱天天干| 亚洲www啪成人一区二区麻豆| 极品人妻一区二区| 国产精品hd| 91亚洲精品丁香在线观看| av片在线观看永久免费| 7777精品久久久大香线蕉| 亚洲欧美日韩一区| 久久最新免费视频| 只有精品亚洲| 麻豆国产精品va在线观看不卡| 91免费视频播放| 亚洲人成影院在线观看| 女人扒开腿免费视频app| 亚洲欧美伊人| 国产精品久久久久免费| www.色在线| 亚洲美女精品成人在线视频| 岛国av中文字幕| 国产欧美精品一区二区三区四区| 天美星空大象mv在线观看视频| 色综合天天爱| 91最新国产视频| 午夜影院免费在线| 亚洲第一男人天堂| 亚洲精品久久久久久久蜜桃| 国产精品第五页| 蜜桃视频无码区在线观看| 激情综合在线| 欧美国产一二三区| 成人福利片在线| 欧美成人精品三级在线观看 | 久久成人久久爱| 麻豆传媒网站在线观看| 老司机aⅴ在线精品导航| 日韩美女写真福利在线观看| 日本www在线观看视频| 午夜精品久久久久影视| av在线免费观看国产| 欧美自拍视频| 国产深夜精品福利| 国产美女情趣调教h一区二区| 亚洲精品国产欧美| 真实的国产乱xxxx在线91| 亚洲女人****多毛耸耸8| 水蜜桃av无码| 精品1卡二卡三卡四卡老狼| 精品69视频一区二区三区Q| 蜜桃传媒视频麻豆第一区免费观看 | 国产视频欧美视频| 成人毛片在线播放| 自拍偷自拍亚洲精品播放| 国产真实乱人偷精品| 日韩成人午夜精品| 国产传媒久久久| 欧美一级一片| 92国产精品视频| 国产精品一区二区av影院萌芽| 中文字幕乱码在线人视频| 视频一区日韩精品| 欧美在线一级视频| 高h视频在线观看| 亚洲人a成www在线影院| 亚洲不卡免费视频| 欧美精品三级日韩久久| 91午夜精品亚洲一区二区三区| 夜夜嗨av一区二区三区| 色偷偷www8888| 国产三级一区二区三区| 久久久久久久无码| 国产成人综合在线观看| 亚洲欧洲日本精品| 久久亚洲欧洲| 无码专区aaaaaa免费视频| 亚洲一区二区三区无吗| 日韩欧美视频一区二区三区四区 | 91在线播放国产| 欧美xnxx| 国产69久久精品成人| 国内小视频在线看| 欧美成人免费在线视频| 秋霞成人影院| 揄拍成人国产精品视频| 青梅竹马是消防员在线| 91黄色小视频| 波多结衣在线观看| 午夜亚洲性色福利视频| 高清无码一区二区在线观看吞精| 日韩欧美网址| 欧美日韩高清一区二区三区| 亚洲 欧美 成人| 午夜精品福利一区二区三区av | 国产精品亚洲a| 亚洲欧美日本视频在线观看| 免费毛片网站在线观看| 亚洲香蕉网站| 日韩视频在线视频| 亚洲国产专区校园欧美| 国产精品自拍合集| 欧美涩涩视频| 丝袜人妻一区二区三区| 在线日韩电影| 欧美激情 国产精品| 99精品视频免费观看视频| 无码人妻少妇伦在线电影| 亚洲国产网站| 国产h视频在线播放| 亚洲欧洲一区二区天堂久久| av在线播放亚洲| 国产一区二区日韩| 亚洲天堂成人av| 成人精品国产一区二区4080| 野花视频免费在线观看| 国产99久久久国产精品免费看| 国产精品久久久久野外| 东方aⅴ免费观看久久av| 国产伦精品一区二区免费| 91婷婷韩国欧美一区二区| 97超碰在线免费观看| 国产女人18毛片水真多成人如厕| 亚洲精品国产精品国自产网站| 国产日韩精品一区二区三区在线| 国产jjizz一区二区三区视频| 日本一区二区三区四区| a在线视频播放观看免费观看| 一区二区免费看| 亚洲免费在线观看av| 欧洲一区二区三区免费视频| 在线免费a视频| 欧美成人高清电影在线| 亚洲人成色777777精品音频| 26uuuu精品一区二区| 青青久久av北条麻妃黑人| 秋霞伦理一区| 国产成人精品亚洲精品| 国产精品一区二区三区av| 国产伦视频一区二区三区| 久操精品在线| 99亚洲国产精品| 一区二区三区福利| 亚洲激情在线看| 成人综合激情网| 丁香激情五月少妇| 一区二区三区四区在线播放| 四虎成人在线观看| 欧美一区二区三区色| 欧美另类自拍| 久久人人爽人人爽人人片亚洲| 爱情岛论坛亚洲品质自拍视频网站| 日韩免费在线播放| 亚洲午夜免费| 日韩精品国内| 影院欧美亚洲| 超碰人人草人人| 久久综合精品国产一区二区三区 | 在线免费观看视频网站| 精品日韩av一区二区| 91在线导航| 欧美亚洲激情视频| 一本色道69色精品综合久久| 少妇精品久久久久久久久久| 亚洲一级黄色| 亚洲天堂伊人网| 亚洲国产精品精华液ab| 日韩欧美中文字幕一区二区| 欧美日本在线播放| 国产中文字幕在线| 97国产真实伦对白精彩视频8| 99精品美女视频在线观看热舞| 欧美大陆一区二区| 激情视频一区| 亚洲免费观看在线| 专区另类欧美日韩| 免费无码国产精品| 亚洲精品久久久久久久久久久 | 2018国产精品视频| 视频精品一区| 正义之心1992免费观看全集完整版| 久久精品亚洲| 右手影院亚洲欧美| 亚洲va欧美va天堂v国产综合| www.国产免费| xxx欧美精品| 国语自产精品视频在线看抢先版结局| 蜜桃传媒视频麻豆一区| 亚洲国产电影| 免费黄色三级网站| 亚洲6080在线| 人妻少妇精品无码专区久久| 欧美肥臀大乳一区二区免费视频| 国产电影一区二区| 超碰97免费观看| 国产在线精品一区二区夜色| 香蕉成人在线视频| 亚洲自拍偷拍综合| 成人在线免费在线观看| 国产麻豆精品一区二区| 中文字幕无码日韩专区免费| 欧日韩精品视频| 成人高清网站| 国产精品扒开腿做爽爽爽视频| 亚洲欧洲av| 热久久精品免费视频| 中文字幕成人网| 一区二区三区精彩视频| 麻豆成人在线看| www.神马久久| 男人天堂网视频| 久久久91精品国产一区二区精品 | 亚洲成人av一区二区三区| 日本高清视频免费观看| 2019亚洲日韩新视频| 国产日产精品一区二区三区四区的观看方式 | 青青草免费观看免费视频在线| 国产成人精品久久二区二区| 日韩精品永久网址| 毛片毛片毛片毛片毛| 亚洲成人在线网站| 国产69精品久久app免费版| 亚洲va欧美va国产综合剧情| 99av国产精品欲麻豆| 天堂久久精品忘忧草| 欧美久久一二三四区| 美女91在线| 色99中文字幕| 国产不卡视频一区| 日韩xxx视频| 色综合久久久久久中文网| 天堂av一区二区三区在线播放| 国产一二三区av| 亚洲午夜免费电影| 国产毛片av在线| 97超碰人人看人人| 视频在线在亚洲| 欧美色图亚洲天堂| 亚洲欧美综合另类中字| 免费一级欧美在线大片| 中文字幕日本最新乱码视频| 亚洲国产成人在线| 99热这里只有精品9| 91精品国产电影| 日韩理论电影| 日本黄色片在线播放| 亚洲国产精品麻豆| 男人影院在线观看|