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

扒開 Linux 中斷的底褲之 workqueue

系統 Linux
workqueue 是除了 softirq 和 tasklet 以外最常用的下半部機制之一。workqueue 的本質是把 work 交給一個內核線程,在進程上下文調度的時候執行。

[[416567]]

 workqueue 是除了 softirq 和 tasklet 以外最常用的下半部機制之一。workqueue 的本質是把 work 交給一個內核線程,在進程上下文調度的時候執行。因為這個特點,所以 workqueue 允許重新調度和睡眠,這種異步執行的進程上下文,能解決因為 softirq 和 tasklet 執行時間長而導致的系統實時性下降等問題。

當驅動程序在進程上下文中有異步執行的工作任務時,可以用 work 來描述工作任務。把 work 添加到一個鏈表 worklist 中,然后由一個內核線程 worker 遍歷鏈表,串行地執行掛入 worklist 中的所有 work。如果 worklist 中沒有 work,那么內核線程 worker 就會變成 IDLE 狀態;如果有 work,則執行 work 中的回調函數。

workqueue 相關的數據結構

關于 workqueue 中幾個概念都是 work 相關的數據結構非常容易混淆,大概可以這樣來理解:

work_struct :

工作。初始化一個 work 并添加到工作隊列后,將會將其傳遞到合適的內核線程來進行處理,它是用于調度的最小單位。 

  1. struct work_struct {  
  2.  atomic_long_t data;     
  3.  struct list_head entry;   
  4.  work_func_t func;       
  5.  #ifdef CONFIG_LOCKDEP  
  6.  struct lockdep_map lockdep_map;  
  7. #endif  
  8. }; 
  •   data:低比特存放狀態位,高比特存放 worker_pool 的ID或者 pool_workqueue 的指針
  •  entry:用于添加到其他隊列上
  •  func:工作任務的處理函數,在內核線程中回調

workqueue_struct :

工作的集合。workqueue 和 work 是一對多的關系。內核中工作隊列分為兩種:

  1.  bound:綁定處理器的工作隊列,每個 worker 創建的內核線程綁定到特定的 CPU 上運行。
  2.  unbound:不綁定處理器的工作隊列,創建的時候需要指定 WQ_UNBOUND 標志,內核線程可以在處理器間遷移。 
  1. struct workqueue_struct {  
  2.  struct list_head pwqs;  /* WR: all pwqs of this wq */    
  3.  struct list_head list;  /* PR: list of all workqueues */    
  4.  struct list_head maydays; /* MD: pwqs requesting rescue */     
  5.  struct worker  *rescuer; /* I: rescue worker */    
  6.  struct pool_workqueue *dfl_pwq; /* PW: only for unbound wqs */  
  7.  char   name[WQ_NAME_LEN]; /* I: workqueue name */  
  8.  /* hot fields used during command issue, aligned to cacheline */  
  9.  unsigned int  flags ____cacheline_aligned; /* WQ: WQ_* flags */  
  10.  struct pool_workqueue __percpu *cpu_pwqs; /* I: per-cpu pwqs */      
  11.  struct pool_workqueue __rcu *numa_pwq_tbl[]; /* PWR: unbound pwqs indexed by node */    //Per-Node創建pool_workqueue  
  12.     ...  
  13. }; 
  •  pwqs:所有的 pool_workqueue 都添加到本鏈表中
  •  list:用于將工作隊列添加到全局鏈表 workqueues 中
  •  maydays:rescue狀態下的 pool_workqueue 添加到本鏈表中
  •  rescuer:rescuer 內核線程,用于處理內存緊張時創建工作線程失敗的情況
  •  cpu_pwqs:Per-CPU 創建 pool_workqueue
  •  numa_pwq_tbl[]:Per-Node 創建 pool_workqueue

pool_workqueue:

中間人 / 中介,負責建立起 workqueue 和 worker_pool 之間的關系。workqueue 和 pool_workqueue 是一對多的關系。 

  1. struct pool_workqueue {  
  2.  struct worker_pool *pool;  /* I: the associated pool */      
  3.  struct workqueue_struct *wq;  /* I: the owning workqueue */     
  4.  int   nr_active; /* L: nr of active works */      
  5.  int   max_active; /* L: max active works */     
  6.  struct list_head delayed_works; /* L: delayed works */     
  7.  struct list_head pwqs_node; /* WR: node on wq->pwqs */     
  8.  struct list_head mayday_node; /* MD: node on wq->maydays */   //用于添加到workqueue鏈表中 
  9.     ...  
  10. } __aligned(1 << WORK_STRUCT_FLAG_BITS); 
  •  pool:指向 worker_pool
  •  wq:指向所屬的 workqueue
  •  nr_active:活躍的 work 數量
  •  max_active:活躍的最大 work 數量
  • delayed_works:延遲執行的 work 掛入本鏈表
  •  pwqs_node:用于添加到 workqueue 鏈表中
  •  mayday_node:用于添加到 workqueue 鏈表中

worker_pool:

工人的集合。pool_workqueue 和 worker_pool 是一對一的關系,worker_pool 和 worker 是一對多的關系。

  1.   bound 類型的工作隊列:worker_pool 是 Per-CPU 創建,每個 CPU 都有兩個 worker_pool,對應不同的優先級,nice 值分別為 0 和 -20。
  2.   unbound 類型的工作隊列:worker_pool 創建后會添加到 unbound_pool_hash 哈希表中。 
  1. struct worker_pool {  
  2.  spinlock_t  lock;  /* the pool lock */  
  3.  int   cpu;  /* I: the associated cpu */    
  4.  int   node;  /* I: the associated node ID */   
  5.  int   id;  /* I: pool ID */  
  6.  unsigned int  flags;  /* X: flags */  
  7.  unsigned long  watchdog_ts; /* L: watchdog timestamp */  
  8.  struct list_head worklist; /* L: list of pending works */    
  9.  int   nr_workers; /* L: total number of workers */     
  10.  /* nr_idle includes the ones off idle_list for rebinding */  
  11.  int   nr_idle; /* L: currently idle ones */  
  12.  struct list_head idle_list; /* X: list of idle workers */    
  13.  struct timer_list idle_timer; /* L: worker idle timeout */  
  14.  struct timer_list mayday_timer; /* L: SOS timer for workers */  
  15.  /* a workers is either on busy_hash or idle_list, or the manager */  
  16.  DECLARE_HASHTABLE(busy_hash, BUSY_WORKER_HASH_ORDER);   /* L: hash of busy workers */  
  17.  /* see manage_workers() for details on the two manager mutexes */  
  18.  struct worker  *manager; /* L: purely informational */  
  19.  struct mutex  attach_mutex; /* attach/detach exclusion */  
  20.  struct list_head workers; /* A: attached workers */     
  21.  struct completion *detach_completion; /* all workers detached */  
  22.  struct ida  worker_ida; /* worker IDs for task name */  
  23.  struct workqueue_attrs *attrs;  /* I: worker attributes */  
  24.  struct hlist_node hash_node; /* PL: unbound_pool_hash node */     
  25.     ...  
  26. } ____cacheline_aligned_in_smp; 
  •  cpu:綁定到 CPU 的 workqueue,代表 CPU ID
  •  node:非綁定類型的 workqueue,代表內存 Node ID
  •  worklist:pending 狀態的 work 添加到本鏈表
  •  nr_workers:worker 的數量
  •  idle_list:處于 IDLE 狀態的 worker 添加到本鏈表
  •  busy_hash:工作狀態的 worker 添加到本哈希表中
  •  workers:worker_pool 管理的 worker 添加到本鏈表中
  •  hash_node:用于添加到 unbound_pool_hash 中

worker :

工人。在代碼中 worker 對應一個 work_thread() 內核線程。 

  1. struct worker {  
  2.  /* on idle list while idle, on busy hash table while busy */  
  3.  union {  
  4.   struct list_head entry; /* L: while idle */     
  5.    struct hlist_node hentry; /* L: while busy */  
  6.  };  
  7.  struct work_struct *current_work; /* L: work being processed */    
  8.  work_func_t  current_func; /* L: current_work's fn */                
  9.   struct pool_workqueue *current_pwq; /* L: current_work's pwq */    
  10.  struct list_head scheduled; /* L: scheduled works */     
  11.   /* 64 bytes boundary on 64bit, 32 on 32bit */  
  12.  struct task_struct *task;  /* I: worker task */     
  13.  struct worker_pool *pool;  /* I: the associated pool */     
  14.       /* L: for rescuers */  
  15.  struct list_head node;  /* A: anchored at pool->workers */  //添加到worker_pool->workers鏈表中  
  16.       /* A: runs through worker->node */  
  17.     ...  
  18. }; 
  •  entry:用于添加到 worker_pool 的空閑鏈表中
  •  hentry:用于添加到 worker_pool 的忙碌列表中
  •  current_work:當前正在處理的 work
  •  current_func:當前正在執行的 work 回調函數
  •  current_pwq:指向當前 work 所屬的 pool_workqueue
  •  scheduled:所有被調度執行的 work 都將添加到該鏈表中
  •  task:指向內核線程
  •  pool:該 worker 所屬的 worker_pool
  •  node:添加到 worker_pool->workers 鏈表中

可以用下圖來總結:

workqueue 的初始化

內核在啟動的時候會對 workqueue 做初始化,workqueue 的初始化包含兩個階段,分別是 workqueue_init_early 和 workqueue_init。

workqueue_init_early

  •  分配 worker_pool,并且對該結構中的字段進行初始化操作
  • 分配 workqueue_struct,并且對該結構中的字段進行初始化操作
  •  alloc_and_link_pwqs:分配 pool_workqueue,將 workqueue_struct 和 worker_pool 關聯起來

workqueue_init

這里主要完成的工作是給之前創建好的 worker_pool,添加一個初始的 worker,然后利用函數 create_worker,創建名字為 kworker/XX:YY 或者 kworker/uXX:YY 的內核線程。其中 XX 表示 worker_pool 的編號,YY 表示 worker 的編號,u 表示unbound。

  •  分配 worker,并且對該結構中的字段進行初始化操作
  •  為 worker 創建內核線程 worker_thread
  •  將 worker 添加到 worker_pool 中
  •  worker 進入 IDLE 狀態

經過上面兩個階段的初始化,workqueue 子系統基本就已經將數據結構的關聯建立好了,當有 work 來進行調度的時候,就可以進行處理了。

使用 workqueue

內核推薦驅動開發者使用默認的 workqueue,而不是新建 workqueue。要使用系統默認的 workqueue,首先需要初始化 work,內核提供了相應的宏 INIT_WORK。

初始化 work 

  1. #define INIT_WORK(_work, _func)      \  
  2.  __INIT_WORK((_work), (_func), 0)   
  3.  #define __INIT_WORK(_work, _func, _onstack)    \  
  4.  do {        \  
  5.   __init_work((_work), _onstack);    \  
  6.   (_work)->data = (atomic_long_t) WORK_DATA_INIT(); \  
  7.   INIT_LIST_HEAD(&(_work)->entry);   \  
  8.   (_work)->func = (_func);    \  
  9.  } while (0) 

初始化 work 后,就可以調用 shedule_work 函數把 work 掛入系統默認的 workqueue 中。

work 調度

  •  將 work 添加到系統的 system_wq 工作隊列中。
  •  判斷 workqueue 的類型,如果是 bound 類型,根據 CPU 來獲取 pool_workqueue。如果是 unbound 類型,通過 node 號來獲取 pool_workqueue。
  •  判斷 pool_workqueue 活躍的 work 數量,少于最大限值則將 work 加入到 pool->worklist 中,否則加入到 pwq->delayed_works 鏈表中。
  •  如果 __need_more_worker 判斷沒有 worker 在執行,則通過 wake_up_worker 喚醒 worker 內核線程。

worker_thread

worker 內核線程的執行函數是 worker_thread。

  •  設置標志位 PF_WQ_WORKER,調度器在進行調度處理時會對 task 進行判斷,針對 workerqueue worker 有特殊的處理。
  •  worker 被喚醒的時候,跳轉到 woke_up 執行。
  •  woke_up 中,如果此時 worker 是需要銷毀的,那就進行清理工作并返回。否則,離開 IDLE 狀態,并進入 recheck 模塊執行。
  •  recheck 中,判斷是否需要更多的 worker 來處理,如果沒有任務處理,跳轉到 sleep 地方進行睡眠。如果有任務需要處理時,遍歷工作鏈表,對鏈表中的每個節點調用 process_one_work 來執行 work 的回調函數,即 INIT_WORK 里的回調函數。

  •  sleep 中,沒有任務處理時,worker 進入空閑狀態,并將當前的內核線程設置成睡眠狀態,讓出 CPU。

總結

 

 

責任編輯:龐桂玉 來源: Linux學習
相關推薦

2021-12-27 07:55:59

Linux 中斷處理Linux 系統

2021-03-28 20:44:34

Kafka中間件MQ

2020-12-29 08:02:37

SqlSession 程序Executor

2022-01-12 12:35:36

Linuxworkqueue工作隊列

2025-09-16 00:31:23

2025-09-10 04:00:00

2021-12-10 08:45:45

Linux GIC Linux 系統

2021-08-10 11:30:30

Linux代碼中斷控制器

2021-08-03 15:10:26

Linux代碼驅動

2015-11-02 16:42:26

2021-12-14 08:51:23

Linux 中斷子系統Linux 系統

2025-04-28 01:22:45

2021-11-30 07:02:10

虛擬化Linux 中斷

2021-12-01 07:02:16

虛擬化LinuxCPU

2020-12-29 09:11:33

LinuxLinux內核

2021-12-08 08:41:31

Linux 中斷子系統Linux 系統

2017-07-14 14:35:27

Linux中斷系統

2021-05-25 07:59:59

Linux運維Linux系統

2025-10-23 16:38:30

2021-09-03 09:12:09

Linux中斷軟件
點贊
收藏

51CTO技術棧公眾號

国产丰满美女做爰| 亚洲av无码一区二区三区在线| 欧美艳星kaydenkross| 国产欧美一区二区精品忘忧草| 国产欧美精品在线| 校园春色 亚洲| 欧美激情15p| 精品污污网站免费看| 天天做天天躁天天躁| 国产网站在线播放| 国产麻豆精品在线观看| 热草久综合在线| 久久久久亚洲av无码专区体验| 亚洲欧美日本伦理| 91精品国产麻豆| 欧洲av无码放荡人妇网站| 国产在线1区| 久久久九九九九| 91亚洲精品丁香在线观看| 69视频免费看| 亚洲美女网站| 欧美精品午夜视频| 国产精品无码无卡无需播放器| 日本一区二区三区播放| 欧美午夜在线观看| 久久亚洲中文字幕无码| 黄网站免费在线播放| 久久久久久久久97黄色工厂| 波多野结衣精品久久| 一区二区自拍偷拍| 亚洲一区观看| 久久久中精品2020中文| 无码黑人精品一区二区| 精品久久久中文字幕| 亚洲激情视频在线| 亚洲少妇中文字幕| 99精品女人在线观看免费视频| 色婷婷精品大在线视频| 青青草成人免费在线视频| 91三级在线| 自拍偷拍亚洲综合| 伊人av成人| www 日韩| 久久久精品免费免费| 久久久久久久久四区三区| 欧美 日韩 国产 成人 在线 91| 捆绑调教美女网站视频一区| 国产精品久久久久久久美男 | 日本在线精品视频| 日韩成人免费观看| 国产婷婷精品| 日本成人免费在线| 国语对白永久免费| 丝瓜av网站精品一区二区| 国产精品白丝jk喷水视频一区| 亚洲第一在线播放| 美女精品网站| 国产精品色午夜在线观看| 中文字幕视频一区二区| 欧美a级一区二区| 国产日韩欧美视频| 国产精品久久久久久免费免熟| 国产一区二区在线免费观看| 亚洲最大成人免费视频| 亚洲av无码一区二区三区性色| 国产999精品久久久久久绿帽| 成人欧美一区二区三区黑人免费| 国模人体一区二区| 99精品国产热久久91蜜凸| 噜噜噜噜噜久久久久久91| 免费在线黄色电影| 国产精品卡一卡二| 韩国黄色一级大片| 6699嫩草久久久精品影院| 欧美日韩综合视频网址| 91最新在线观看| 综合久草视频| 亚洲国产成人爱av在线播放| 日本黄色动态图| 精品国产美女| 久热精品在线视频| 亚洲黄色三级视频| 日日摸夜夜添夜夜添国产精品| 国产原创欧美精品| 丰满熟妇人妻中文字幕| 久久久激情视频| 中文精品一区二区三区| 2020国产在线| 欧美亚洲一区二区在线观看| aaaaaaaa毛片| 女人丝袜激情亚洲| 久久综合伊人77777蜜臀| 西西44rtwww国产精品| 裸体在线国模精品偷拍| 国产激情美女久久久久久吹潮| 欧美69xxxxx| 亚洲男人的天堂一区二区| 成年人视频观看| 91精品网站在线观看| 亚洲激情久久久| 视频这里只有精品| 丝袜美腿亚洲综合| 国产成人亚洲欧美| 亚洲成a人v欧美综合天堂麻豆| 亚洲综合成人网| 日本人视频jizz页码69| 日韩大尺度在线观看| 日韩中文字幕国产精品| 日本天堂网在线| 国产成人高清视频| 一个色的综合| 亚洲校园激情春色| 亚洲成人激情视频| 欧美一级片在线视频| 石原莉奈在线亚洲二区| 国产视频在线观看一区| 黄色在线免费看| 欧美性受xxxx黑人xyx性爽| 超碰男人的天堂| 欧美女激情福利| 91精品国产综合久久香蕉的用户体验| 飘雪影视在线观看免费观看| 一区二区三区免费| 制服丝袜中文字幕第一页 | 一级一片免费看| 成人激情免费网站| 国产免费xxx| 伊人亚洲精品| xxxx欧美18另类的高清| 国产美女www爽爽爽| 国产视频一区在线观看| 无码人妻丰满熟妇区96| 久久悠悠精品综合网| 蜜月aⅴ免费一区二区三区| 在线观看亚洲国产| 亚洲国产成人私人影院tom| 国产午夜福利视频在线观看| 老牛国内精品亚洲成av人片| 欧美精品videosex极品1| 性一交一乱一乱一视频| 一区二区三区在线观看网站| 日韩不卡的av| 午夜性色一区二区三区免费视频| 成人免费视频网| 黄视频网站在线看| 日韩欧美视频在线| 久草免费新视频| 成人av在线资源| 久久精品国产sm调教网站演员| av成人综合| 97香蕉超级碰碰久久免费的优势| 女人18毛片水真多18精品| 亚洲二区视频在线| 日韩精品视频一区二区| 亚洲一区国产| 欧美一区二视频在线免费观看| 91精品xxx在线观看| 永久免费毛片在线播放不卡 | 精品福利二区三区| 国产精品老女人| 久久亚洲影视婷婷| 2022亚洲天堂| 精品久久美女| 91在线直播亚洲| 成人福利电影| 亚洲乱码一区av黑人高潮| jizz国产在线观看| 中文字幕中文字幕在线一区| 在线免费看v片| 精品动漫3d一区二区三区免费版| 精品国产综合久久| yw.尤物在线精品视频| 日韩在线观看网址| 亚洲精品97久久中文字幕| 精品国产91久久久久久| 免费看的黄色网| 国产福利91精品一区二区三区| 成人黄色av片| 欧美肉体xxxx裸体137大胆| 成人久久久久久久| 国产精品xx| 色悠悠国产精品| 东京干手机福利视频| 色8久久精品久久久久久蜜 | 亚洲国产不卡| 精品国产乱码久久久久久108| 亚洲精品国产嫩草在线观看| 久久成人在线视频| 日本国产在线| 欧美一级片在线| 一级做a爰片久久毛片| 亚洲色图20p| 女~淫辱の触手3d动漫| 久久91精品国产91久久小草| av免费观看大全| 99久久www免费| 久久精品ww人人做人人爽| 亚洲欧美在线综合| 2019中文字幕在线观看| www在线免费观看视频| 亚洲欧美成人精品| 亚洲国产视频一区二区三区| 欧美在线观看视频在线| 日本熟妇一区二区| 综合久久国产九一剧情麻豆| 女人又爽又黄免费女仆| 国产91精品免费| 777一区二区| 免费亚洲一区| 亚洲精品久久久久久久蜜桃臀| 国内黄色精品| 狠狠色综合色区| 视频二区欧美毛片免费观看| 国产精品久久久久久亚洲影视| 国产99在线观看| 欧美日本亚洲视频| 巨大荫蒂视频欧美大片| 亚洲天堂成人在线| 三级av在线| 亚洲激情在线观看| www.精品久久| 91精品国产免费| 国产又粗又猛又黄又爽无遮挡| 91成人免费在线视频| 美日韩一二三区| 亚洲国产婷婷综合在线精品| 欧美日韩亚洲国产另类| 中文字幕一区二区三区av| 日本人亚洲人jjzzjjz| 国产亚洲一二三区| 丰满少妇一区二区| 91丨九色丨蝌蚪富婆spa| 美女伦理水蜜桃4| 国产成人av福利| 中文字幕无人区二| 大美女一区二区三区| 亚洲丝袜在线观看| 国产精选一区二区三区| www.久久com| 国产精品一区专区| 免费观看黄网站| 国产成人av在线影院| 国产精品亚洲一区二区无码| 国产aⅴ综合色| 国产成人av免费观看| 国产 欧美在线| 国产综合内射日韩久| 99久久精品免费看国产| 日韩成人av一区二区| 91在线观看免费视频| 少妇精品一区二区三区| 久久精品亚洲精品国产欧美kt∨ | 亚洲欧洲av色图| 91无套直看片红桃在线观看| 国产精品久久久久久久久免费樱桃| 林心如三级全黄裸体| 国产精品国产自产拍在线| 大地资源高清在线视频观看| 亚洲天堂网中文字| 久久精品波多野结衣| 天天av天天翘天天综合网色鬼国产| 欧美bbbbbbbbbbbb精品| 91高清在线观看| 亚洲最新av网站| 日韩欧美中文字幕制服| 搡老岳熟女国产熟妇| 亚洲欧美激情一区| 美女羞羞视频在线观看| 欧美黑人性猛交| 在线观看欧美日韩电影| 国产精品黄页免费高清在线观看| 色综合一区二区日本韩国亚洲| 97人人澡人人爽| 日韩美女精品| www亚洲国产| 1024日韩| av在线网址导航| www..com久久爱| 黄色av免费播放| 亚洲一级电影视频| 成人免费视频国产免费| 91精品国产综合久久精品麻豆 | 在线观看视频99| 国产三级在线播放| 国产91av在线| 高清久久一区| 久久综合九九| 欧美一区亚洲| 成年人在线看片| 国产精品18久久久久久久久| 爱爱的免费视频| 亚洲精品中文在线观看| 亚洲天堂五月天| 精品久久一区二区三区| 成人免费黄色网页| 欧美精品video| 99tv成人影院| 色999五月色| 99视频一区| 免费在线观看污网站| 26uuu精品一区二区三区四区在线| 色哟哟一一国产精品| 色呦呦一区二区三区| 亚洲国产综合网| 久久久国产视频91| 欧美羞羞视频| 久久久7777| 国产精品s色| 国产一级免费大片| 国产欧美精品一区二区三区四区| 久久精品久久精品久久| 在线电影欧美成精品| 国产精品ⅴa有声小说| 97人人做人人爱| 亚洲性视频在线| 久久免费视频2| 免费一级片91| www在线观看免费视频| 五月天中文字幕一区二区| 99久久久久久久| 久久精品国产清自在天天线| 台湾佬成人网| 欧美国产一区二区在线| 亚洲福利免费| 色哟哟无码精品一区二区三区| 亚洲精品日日夜夜| 中文字幕一区2区3区| 国产亚洲激情视频在线| 国产精品专区免费| 精品一区2区三区| 一区二区三区成人精品| 亚洲色偷偷色噜噜狠狠99网 | 蜜臀精品一区二区三区| 亚洲精品自拍偷拍| 色多多在线观看| 免费不卡亚洲欧美| 亚洲在线一区| 丰满少妇高潮一区二区| 欧美视频一区二区三区…| 五月婷婷在线观看视频| 97福利一区二区| 日韩黄色网络| 黑人糟蹋人妻hd中文字幕| 久久久久免费观看| 欧美黄色一级大片| 国产小视频91| 国产福利91精品一区二区| 亚洲国产午夜伦理片大全在线观看网站| 日本美女一区二区三区| 久久午夜精品视频| 91麻豆精品国产91久久久 | 国产成人亚洲综合91| 国产亚洲电影| 2025韩国理伦片在线观看| 亚洲天堂2016| 国精产品一品二品国精品69xx | 欧洲大片精品免费永久看nba| 粉嫩av一区二区三区天美传媒| 成人毛片视频在线观看| 久久露脸国语精品国产91| 亚洲日韩欧美视频一区| av成人亚洲| 国产激情片在线观看| 99久久免费视频.com| 五月天激情四射| 色妞一区二区三区| 亚洲国产精品免费视频| 久久久久久久午夜| 欧美国产日本视频| a天堂在线视频| 国产91精品青草社区| 日本高清免费电影一区| 丰满少妇中文字幕| 色综合久久久久久久| 国产在线更新| 久久综合九九| 狠狠v欧美v日韩v亚洲ⅴ| 国产系列精品av| 在线观看日韩av| 一区二区精彩视频| 亚洲精品中文字幕无码蜜桃| 亚洲欧美日韩电影| 日本视频在线观看一区二区三区| 成人观看高清在线观看免费| 激情婷婷亚洲| 女人裸体性做爰全过| 亚洲国产91精品在线观看| 日韩成人综合网站| 国产精品自拍片| 亚洲视频一区在线| 可以在线观看的av| αv一区二区三区| 蜜桃av一区二区三区| 四虎成人精品永久免费av| 深夜福利日韩在线看| 牛牛影视一区二区三区免费看| 天天综合天天添夜夜添狠狠添| 欧美日韩一二三四五区| 手机电影在线观看| 亚洲一区二区在线观|