日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

自己动手实现自旋锁(spinlock)

發(fā)布時間:2025/6/15 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 自己动手实现自旋锁(spinlock) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

大多數(shù)的并行程序都需要在底層使用鎖機制進行同步,簡單來講,鎖無非是一套簡單的原語,它們保證程序(或進程)對某一資源的互斥訪問來維持數(shù)據(jù)的一致性,如果沒有鎖機制作為保證,多個線程可能同時訪問某一資源,假設沒有精心設計的(很復雜)無鎖算法保證程序正確執(zhí)行,那么后果往往非常嚴重的。無鎖算法難于使用,所以一般而言都使用鎖來保證程序的一致性。

如果更新某一數(shù)據(jù)結構的操作比較緩慢,那么互斥的鎖是一個比較好的選擇,此時如果某一進程或線程被阻塞,操作系統(tǒng)會重新接管控制權,并調度其他進程(或線程)繼續(xù)執(zhí)行,原先被阻塞的進程處于睡眠狀態(tài)。控制權的轉換伴隨著進程上下文的切換,而這往往是一個昂貴而耗時的操作,所以對于等待鎖的時間比較短,那么應該使用其他更高效的方法。


自旋鎖(spinlock)

自旋鎖(Spinlock)是一種常用的互斥(Mutual Exclusion)同步原語(Synchronization Primitive),試圖進入臨界區(qū)(Critical Section)的線程使用忙等待(Busy Waiting)的方式檢測鎖的狀態(tài),若鎖未被持有則嘗試獲取。與其他鎖不同,自旋鎖僅僅只是“自旋”,即不停地檢查某一鎖是否已經(jīng)被解開,自旋鎖是非常快的,所以加鎖-解鎖操作耗時很短,然而,自旋鎖也不是萬精油,當因互斥導致進程睡眠的時間很長時,使用自旋鎖是不明智的選擇。

下面我們考慮實現(xiàn)自己的自旋鎖,首先我們需要一些原語,幸好GCC已經(jīng)為我們提供了一些內置函數(shù),

#define atomic_xadd(P, V) __sync_fetch_and_add((P), (V))
#define cmpxchg(P, O, N) __sync_val_compare_and_swap((P), (O), (N))
#define atomic_inc(P) __sync_add_and_fetch((P), 1)
#define atomic_dec(P) __sync_add_and_fetch((P), -1)
#define atomic_add(P, V) __sync_add_and_fetch((P), (V))
#define atomic_set_bit(P, V) __sync_or_and_fetch((P), 1<<(V))
#define atomic_clear_bit(P, V) __sync_and_and_fetch((P), ~(1<<(V)))

然而,我們也需要自己實現(xiàn)其他的幾個原子操作,如下:

/* Compile read-write barrier */
#define barrier() asm volatile("": : :"memory")

/* Pause instruction to prevent excess processor bus usage */
#define cpu_relax() asm volatile("pause\n": : :"memory")

/* Atomic exchange (of various sizes) */
static inline void *xchg_64(void *ptr, void *x)
{
__asm__ __volatile__("xchgq %0,%1"
:"=r" ((unsigned long long) x)
:"m" (*(volatile long long *)ptr), "0" ((unsigned long long) x)
:"memory");

return x;
}

static inline unsigned xchg_32(void *ptr, unsigned x)
{
__asm__ __volatile__("xchgl %0,%1"
:"=r" ((unsigned) x)
:"m" (*(volatile unsigned *)ptr), "0" (x)
:"memory");

return x;
}

static inline unsigned short xchg_16(void *ptr, unsigned short x)
{
__asm__ __volatile__("xchgw %0,%1"
:"=r" ((unsigned short) x)
:"m" (*(volatile unsigned short *)ptr), "0" (x)
:"memory");

return x;
}

/* Test and set a bit */
static inline char atomic_bitsetandtest(void *ptr, int x)
{
char out;
__asm__ __volatile__("lock; bts %2,%1\n"
"sbb %0,%0\n"
:"=r" (out), "=m" (*(volatile long long *)ptr)
:"Ir" (x)
:"memory");

return out;
}

自旋鎖可以使用交換原語實現(xiàn),如下:

#define EBUSY 1
typedef unsigned spinlock;

static void spin_lock(spinlock *lock)
{
while (1)
{
if (!xchg_32(lock, EBUSY)) return;

while (*lock) cpu_relax();
}
}

static void spin_unlock(spinlock *lock)
{
barrier();
*lock = 0;
}

static int spin_trylock(spinlock *lock)
{
return xchg_32(lock, EBUSY);
}

上面的自旋鎖已經(jīng)能夠工作,但是也會產生問題,因為多個線程可能產生競爭,因為在鎖釋放的時候其他的每個線程都想獲得鎖。這會導致處理器總線的負載增大,從而使性能降低,所以接下來我們將實現(xiàn)另外一種自旋鎖,該自旋鎖能夠感知下一個獲得鎖的進程或線程,因此能夠大大減輕處理器總線負載。

下面我們介紹另外一種自旋鎖,MCS自旋鎖,該鎖使用鏈表維護申請者的請求序列,

typedef struct mcs_lock_t mcs_lock_t;
struct mcs_lock_t
{
mcs_lock_t *next;
int spin;
};
typedef struct mcs_lock_t *mcs_lock;

static void lock_mcs(mcs_lock *m, mcs_lock_t *me)
{
mcs_lock_t *tail;

me->next = NULL;
me->spin = 0;

tail = xchg_64(m, me);

/* No one there? */
if (!tail) return;

/* Someone there, need to link in */
tail->next = me;

/* Make sure we do the above setting of next. */
barrier();

/* Spin on my spin variable */
while (!me->spin) cpu_relax();

return;
}

static void unlock_mcs(mcs_lock *m, mcs_lock_t *me)
{
/* No successor yet? */
if (!me->next)
{
/* Try to atomically unlock */
if (cmpxchg(m, me, NULL) == me) return;

/* Wait for successor to appear */
while (!me->next) cpu_relax();
}

/* Unlock next one */
me->next->spin = 1;
}

static int trylock_mcs(mcs_lock *m, mcs_lock_t *me)
{
mcs_lock_t *tail;

me->next = NULL;
me->spin = 0;

/* Try to lock */
tail = cmpxchg(m, NULL, &me);

/* No one was there - can quickly return */
if (!tail) return 0;

return EBUSY;
}

當然,MCS鎖也是有問題的,因為它的API除了需要傳遞鎖的地址外,還需要傳遞另外一個結構,下面介紹另外一種自旋鎖算法,K42鎖算法,

typedef struct k42lock k42lock;
struct k42lock
{
k42lock *next;
k42lock *tail;
};

static void k42_lock(k42lock *l)
{
k42lock me;
k42lock *pred, *succ;
me.next = NULL;

barrier();

pred = xchg_64(&l->tail, &me);
if (pred)
{
me.tail = (void *) 1;

barrier();
pred->next = &me;
barrier();

while (me.tail) cpu_relax();
}

succ = me.next;

if (!succ)
{
barrier();
l->next = NULL;

if (cmpxchg(&l->tail, &me, &l->next) != &me)
{
while (!me.next) cpu_relax();

l->next = me.next;
}
}
else
{
l->next = succ;
}
}


static void k42_unlock(k42lock *l)
{
k42lock *succ = l->next;

barrier();

if (!succ)
{
if (cmpxchg(&l->tail, &l->next, NULL) == (void *) &l->next) return;

while (!l->next) cpu_relax();
succ = l->next;
}

succ->tail = NULL;
}

static int k42_trylock(k42lock *l)
{
if (!cmpxchg(&l->tail, NULL, &l->next)) return 0;

return EBUSY;
}

K42和MCS鎖都需要遍歷鏈表才能找到下一個最可能獲得鎖的進程(或線程),有時查找可能比較費時,所以我們再次改進后:

typedef struct listlock_t listlock_t;
struct listlock_t
{
listlock_t *next;
int spin;
};
typedef struct listlock_t *listlock;

#define LLOCK_FLAG (void *)1

static void listlock_lock(listlock *l)
{
listlock_t me;
listlock_t *tail;

/* Fast path - no users */
if (!cmpxchg(l, NULL, LLOCK_FLAG)) return;

me.next = LLOCK_FLAG;
me.spin = 0;

/* Convert into a wait list */
tail = xchg_64(l, &me);

if (tail)
{
/* Add myself to the list of waiters */
if (tail == LLOCK_FLAG) tail = NULL;
me.next = tail;

/* Wait for being able to go */
while (!me.spin) cpu_relax();

return;
}

/* Try to convert to an exclusive lock */
if (cmpxchg(l, &me, LLOCK_FLAG) == &me) return;

/* Failed - there is now a wait list */
tail = *l;

/* Scan to find who is after me */
while (1)
{
/* Wait for them to enter their next link */
while (tail->next == LLOCK_FLAG) cpu_relax();

if (tail->next == &me)
{
/* Fix their next pointer */
tail->next = NULL;

return;
}

tail = tail->next;
}
}

static void listlock_unlock(listlock *l)
{
listlock_t *tail;
listlock_t *tp;

while (1)
{
tail = *l;

barrier();

/* Fast path */
if (tail == LLOCK_FLAG)
{
if (cmpxchg(l, LLOCK_FLAG, NULL) == LLOCK_FLAG) return;

continue;
}

tp = NULL;

/* Wait for partially added waiter */
while (tail->next == LLOCK_FLAG) cpu_relax();

/* There is a wait list */
if (tail->next) break;

/* Try to convert to a single-waiter lock */
if (cmpxchg(l, tail, LLOCK_FLAG) == tail)
{
/* Unlock */
tail->spin = 1;

return;
}

cpu_relax();
}

/* A long list */
tp = tail;
tail = tail->next;

/* Scan wait list */
while (1)
{
/* Wait for partially added waiter */
while (tail->next == LLOCK_FLAG) cpu_relax();

if (!tail->next) break;

tp = tail;
tail = tail->next;
}

tp->next = NULL;

barrier();

/* Unlock */
tail->spin = 1;
}

static int listlock_trylock(listlock *l)
{
/* Simple part of a spin-lock */
if (!cmpxchg(l, NULL, LLOCK_FLAG)) return 0;

/* Failure! */
return EBUSY;

等等,還可以改進,可以在自旋鎖里面嵌套一層自旋鎖,

typedef struct bitlistlock_t bitlistlock_t;
struct bitlistlock_t
{
bitlistlock_t *next;
int spin;
};

typedef bitlistlock_t *bitlistlock;

#define BLL_USED ((bitlistlock_t *) -2LL)

static void bitlistlock_lock(bitlistlock *l)
{
bitlistlock_t me;
bitlistlock_t *tail;

/* Grab control of list */
while (atomic_bitsetandtest(l, 0)) cpu_relax();

/* Remove locked bit */
tail = (bitlistlock_t *) ((uintptr_t) *l & ~1LL);

/* Fast path, no waiters */
if (!tail)
{
/* Set to be a flag value */
*l = BLL_USED;
return;
}

if (tail == BLL_USED) tail = NULL;
me.next = tail;
me.spin = 0;

barrier();

/* Unlock, and add myself to the wait list */
*l = &me;

/* Wait for the go-ahead */
while (!me.spin) cpu_relax();
}

static void bitlistlock_unlock(bitlistlock *l)
{
bitlistlock_t *tail;
bitlistlock_t *tp;

/* Fast path - no wait list */
if (cmpxchg(l, BLL_USED, NULL) == BLL_USED) return;

/* Grab control of list */
while (atomic_bitsetandtest(l, 0)) cpu_relax();

tp = *l;

barrier();

/* Get end of list */
tail = (bitlistlock_t *) ((uintptr_t) tp & ~1LL);

/* Actually no users? */
if (tail == BLL_USED)
{
barrier();
*l = NULL;
return;
}

/* Only one entry on wait list? */
if (!tail->next)
{
barrier();

/* Unlock bitlock */
*l = BLL_USED;

barrier();

/* Unlock lock */
tail->spin = 1;

return;
}

barrier();

/* Unlock bitlock */
*l = tail;

barrier();

/* Scan wait list for start */
do
{
tp = tail;
tail = tail->next;
}
while (tail->next);

tp->next = NULL;

barrier();

/* Unlock */
tail->spin = 1;
}

static int bitlistlock_trylock(bitlistlock *l)
{
if (!*l && (cmpxchg(l, NULL, BLL_USED) == NULL)) return 0;

return EBUSY;
}

還可以再次改進,如下

/* Bit-lock for editing the wait block */
#define SLOCK_LOCK 1
#define SLOCK_LOCK_BIT 0

/* Has an active user */
#define SLOCK_USED 2

#define SLOCK_BITS 3

typedef struct slock slock;
struct slock
{
uintptr_t p;
};

typedef struct slock_wb slock_wb;
struct slock_wb
{
/*
* last points to the last wait block in the chain.
* The value is only valid when read from the first wait block.
*/
slock_wb *last;

/* next points to the next wait block in the chain. */
slock_wb *next;

/* Wake up? */
int wake;
};

/* Wait for control of wait block */
static slock_wb *slockwb(slock *s)
{
uintptr_t p;

/* Spin on the wait block bit lock */
while (atomic_bitsetandtest(&s->p, SLOCK_LOCK_BIT))
{
cpu_relax();
}

p = s->p;

if (p <= SLOCK_BITS)
{
/* Oops, looks like the wait block was removed. */
atomic_dec(&s->p);
return NULL;
}

return (slock_wb *)(p - SLOCK_LOCK);
}

static void slock_lock(slock *s)
{
slock_wb swblock;

/* Fastpath - no other readers or writers */
if (!s->p && (cmpxchg(&s->p, 0, SLOCK_USED) == 0)) return;

/* Initialize wait block */
swblock.next = NULL;
swblock.last = &swblock;
swblock.wake = 0;

while (1)
{
uintptr_t p = s->p;

cpu_relax();

/* Fastpath - no other readers or writers */
if (!p)
{
if (cmpxchg(&s->p, 0, SLOCK_USED) == 0) return;
continue;
}

if (p > SLOCK_BITS)
{
slock_wb *first_wb, *last;

first_wb = slockwb(s);
if (!first_wb) continue;

last = first_wb->last;
last->next = &swblock;
first_wb->last = &swblock;

/* Unlock */
barrier();
s->p &= ~SLOCK_LOCK;

break;
}

/* Try to add the first wait block */
if (cmpxchg(&s->p, p, (uintptr_t)&swblock) == p) break;
}

/* Wait to acquire exclusive lock */
while (!swblock.wake) cpu_relax();
}


static void slock_unlock(slock *s)
{
slock_wb *next;
slock_wb *wb;
uintptr_t np;

while (1)
{
uintptr_t p = s->p;

/* This is the fast path, we can simply clear the SRWLOCK_USED bit. */
if (p == SLOCK_USED)
{
if (cmpxchg(&s->p, SLOCK_USED, 0) == SLOCK_USED) return;
continue;
}

/* There's a wait block, we need to wake the next pending user */
wb = slockwb(s);
if (wb) break;

cpu_relax();
}

next = wb->next;
if (next)
{
/*
* There's more blocks chained, we need to update the pointers
* in the next wait block and update the wait block pointer.
*/
np = (uintptr_t) next;

next->last = wb->last;
}
else
{
/* Convert the lock to a simple lock. */
np = SLOCK_USED;
}

barrier();
/* Also unlocks lock bit */
s->p = np;
barrier();

/* Notify the next waiter */
wb->wake = 1;

/* We released the lock */
}

static int slock_trylock(slock *s)
{
/* No other readers or writers? */
if (!s->p && (cmpxchg(&s->p, 0, SLOCK_USED) == 0)) return 0;

return EBUSY;
}

下面是另外一種實現(xiàn)方式,稱為stack-lock算法,

typedef struct stlock_t stlock_t;
struct stlock_t
{
stlock_t *next;
};

typedef struct stlock_t *stlock;

static __attribute__((noinline)) void stlock_lock(stlock *l)
{
stlock_t *me = NULL;

barrier();
me = xchg_64(l, &me);

/* Wait until we get the lock */
while (me) cpu_relax();
}

#define MAX_STACK_SIZE (1<<12)

static __attribute__((noinline)) int on_stack(void *p)
{
int x;

uintptr_t u = (uintptr_t) &x;

return ((u - (uintptr_t)p + MAX_STACK_SIZE) < MAX_STACK_SIZE * 2);
}

static __attribute__((noinline)) void stlock_unlock(stlock *l)
{
stlock_t *tail = *l;
barrier();

/* Fast case */
if (on_stack(tail))
{
/* Try to remove the wait list */
if (cmpxchg(l, tail, NULL) == tail) return;

tail = *l;
}

/* Scan wait list */
while (1)
{
/* Wait for partially added waiter */
while (!tail->next) cpu_relax();

if (on_stack(tail->next)) break;

tail = tail->next;
}

barrier();

/* Unlock */
tail->next = NULL;
}

static int stlock_trylock(stlock *l)
{
stlock_t me;

if (!cmpxchg(l, NULL, &me)) return 0;

return EBUSY;
}

改進后變成,

typedef struct plock_t plock_t;
struct plock_t
{
plock_t *next;
};

typedef struct plock plock;
struct plock
{
plock_t *next;
plock_t *prev;
plock_t *last;
};

static void plock_lock(plock *l)
{
plock_t *me = NULL;
plock_t *prev;

barrier();
me = xchg_64(l, &me);

prev = NULL;

/* Wait until we get the lock */
while (me)
{
/* Scan wait list for my previous */
if (l->next != (plock_t *) &me)
{
plock_t *t = l->next;

while (me)
{
if (t->next == (plock_t *) &me)
{
prev = t;

while (me) cpu_relax();

goto done;
}

if (t->next) t = t->next;
cpu_relax();
}
}
cpu_relax();
}

done:
l->prev = prev;
l->last = (plock_t *) &me;
}

static void plock_unlock(plock *l)
{
plock_t *tail;

/* Do I know my previous? */
if (l->prev)
{
/* Unlock */
l->prev->next = NULL;
return;
}

tail = l->next;
barrier();

/* Fast case */
if (tail == l->last)
{
/* Try to remove the wait list */
if (cmpxchg(&l->next, tail, NULL) == tail) return;

tail = l->next;
}

/* Scan wait list */
while (1)
{
/* Wait for partially added waiter */
while (!tail->next) cpu_relax();

if (tail->next == l->last) break;

tail = tail->next;
}

barrier();

/* Unlock */
tail->next = NULL;
}

static int plock_trylock(plock *l)
{
plock_t me;

if (!cmpxchg(&l->next, NULL, &me))
{
l->last = &me;
return 0;
}

return EBUSY;
}

下面介紹另外一種算法,ticket lock算法,實際上,Linux內核正是采用了該算法,不過考慮到執(zhí)行效率,人家是以匯編形式寫的,

typedef union ticketlock ticketlock;

union ticketlock
{
unsigned u;
struct
{
unsigned short ticket;
unsigned short users;
} s;
};

static void ticket_lock(ticketlock *t)
{
unsigned short me = atomic_xadd(&t->s.users, 1);

while (t->s.ticket != me) cpu_relax();
}

static void ticket_unlock(ticketlock *t)
{
barrier();
t->s.ticket++;
}

static int ticket_trylock(ticketlock *t)
{
unsigned short me = t->s.users;
unsigned short menew = me + 1;
unsigned cmp = ((unsigned) me << 16) + me;
unsigned cmpnew = ((unsigned) menew << 16) + me;

if (cmpxchg(&t->u, cmp, cmpnew) == cmp) return 0;

return EBUSY;
}

static int ticket_lockable(ticketlock *t)
{
ticketlock u = *t;
barrier();
return (u.s.ticket == u.s.users);
}

至此,自旋鎖各種不同的實現(xiàn)介紹完畢,親,你明白了嗎?:)

(全文完)




總結

以上是生活随笔為你收集整理的自己动手实现自旋锁(spinlock)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。

国产日韩精品在线观看 | 久久精品艹 | 久久精品波多野结衣 | 精品国产视频在线 | 99免费在线观看视频 | 人人爽人人澡 | 午夜视频免费 | 97成人免费 | 91在线中文 | 中文字幕在线播放第一页 | 99精品免费久久久久久久久日本 | 国产视频久久 | 网站你懂的 | 欧美久久久久久久久久 | 亚洲性xxxx | 在线v| 亚洲免费精品一区二区 | 中文字幕色在线 | 国产麻豆果冻传媒在线观看 | 免费国产黄线在线观看视频 | 国产视频一 | 超碰av在线 | 99九九免费视频 | 中文在线a在线 | 国产精品对白一区二区三区 | 日韩影视在线观看 | 成人免费视频视频在线观看 免费 | 亚洲成人av片在线观看 | 亚洲乱码国产乱码精品天美传媒 | 日韩电影在线观看中文字幕 | 91久久电影 | 精品久久久久一区二区国产 | 久久久免费电影 | www.com.日本一级 | 五月天久久久久久 | 草在线视频 | 国产精品嫩草影院9 | 中文字幕国产在线 | 五月天六月丁香 | 欧美不卡视频在线 | 亚洲 欧美 综合 在线 精品 | 成人免费视频网站在线观看 | 国产精品中文字幕av | 天天操狠狠操夜夜操 | 在线观看免费一区 | 开心激情久久 | 夜夜高潮夜夜爽国产伦精品 | 欧美91视频 | 毛片网站在线看 | www.午夜| 欧美日韩在线视频观看 | 日韩欧美国产成人 | 久久夜色精品国产欧美乱 | 91成人在线看| 中文字幕在线不卡国产视频 | 色吊丝在线永久观看最新版本 | 国产专区视频在线观看 | 在线免费看黄色 | 中文字幕在线观看av | 国产黄在线| 婷婷播播网 | 国产成人综合图片 | 不卡电影一区二区三区 | 日韩精品一卡 | 人人爽人人爽人人爽 | 国产对白av | 日本久久久精品视频 | 玖草在线观看 | 成人av一级片 | 国产九九热视频 | 成年人免费在线播放 | 国产精品久久久久aaaa九色 | 国产不卡av在线播放 | 全久久久久久久久久久电影 | 日韩欧美视频在线观看免费 | 国产成人三级在线观看 | 欧美精品久久人人躁人人爽 | 国产理论影院 | 91精品久久久久久粉嫩 | 亚洲一区二区精品 | 久久国产精品一区二区 | 亚洲精品88欧美一区二区 | 国产精品久久99综合免费观看尤物 | 狠狠五月婷婷 | 99九九99九九九视频精品 | 狠狠狠色丁香婷婷综合激情 | 六月丁香在线观看 | 精品高清视频 | 婷五月天激情 | 在线观看视频国产 | 视频高清| 四虎影视欧美 | 国产精品美女免费 | 国产在线观看av | av爱干 | 久色免费视频 | 免费亚洲片 | 91视频亚洲 | 黄色软件大全网站 | 国产精品久久久久一区二区三区共 | 在线免费观看麻豆 | 最近中文字幕免费 | 成人av一级片 | 午夜精品视频福利 | 日韩中文字幕网站 | 色综合狠狠干 | 久久亚洲婷婷 | 成人片在线播放 | 中文字幕成人在线观看 | 夜夜躁天天躁很躁波 | 国产免费又粗又猛又爽 | 久久免费视频国产 | 国产亚洲成av人片在线观看桃 | 国产美腿白丝袜足在线av | 国产色黄网站 | 日韩一级黄色大片 | 最新av在线播放 | 久久久亚洲国产精品麻豆综合天堂 | 日韩久久在线 | 婷婷六月天丁香 | 亚洲国产精品女人久久久 | 欧洲精品久久久久毛片完整版 | 一区二区亚洲精品 | 国产你懂的在线 | 免费在线观看av的网站 | 2019中文字幕第一页 | 福利视频一区二区 | 久久综合婷婷 | 亚洲精品视频中文字幕 | 天堂在线一区二区三区 | 日韩亚洲精品电影 | 黄色精品一区 | 2024国产精品视频 | 亚洲欧洲精品一区二区 | 成av在线| 男女激情免费网站 | 9免费视频 | 午夜一级免费电影 | 免费在线黄 | 亚洲精选99| 国产精品 国产精品 | 高清不卡毛片 | 久久精品视频在线播放 | 最新高清无码专区 | www.色国产 | 午夜视频免费在线观看 | 91高清完整版在线观看 | 色综合久久精品 | 国产区高清在线 | 五月婷婷六月丁香在线观看 | 亚洲日本中文字幕在线观看 | 国产精品久久久久久久久久了 | 国产精成人品免费观看 | 久久国产精品99久久久久久老狼 | 日本精品视频一区 | 日韩有色| 久久色在线播放 | 国产精品久久久毛片 | 午夜精品一区二区三区在线 | 人人舔人人舔 | 精品视频99 | 中文字幕中文字幕 | av先锋中文字幕 | 99久久精品日本一区二区免费 | 国产精品第一页在线 | 天天射天天干天天插 | 欧美日韩破处 | 国产专区视频在线观看 | 欧美日韩免费在线视频 | 亚洲精品综合一二三区在线观看 | 美女视频免费精品 | 久久久国产精品麻豆 | 久久av伊人 | 天天操天天射天天爱 | 日日爽天天爽 | 精品a在线| 国产色女人 | 国产成人在线一区 | 西西人体www444| 综合色久| 国产高清在线a视频大全 | 亚洲精品色 | 久久亚洲区 | 在线看av的网址 | 精品国产日本 | 久久久久久久久久网站 | 日韩精品一区二区三区视频播放 | 9ⅰ精品久久久久久久久中文字幕 | 99在线观看视频 | 国产精品女同一区二区三区久久夜 | 午夜精品成人一区二区三区 | 91香蕉嫩草| 国产精品九色 | 国产中文字幕一区二区三区 | 日韩精品久久久免费观看夜色 | 五月婷婷在线视频观看 | 国产午夜精品在线 | 97国产超碰在线 | 久久黄色美女 | 色综合a| 最近中文字幕免费av | 美国av大片 | 涩av在线 | 亚洲精品乱码久久久久v最新版 | 免费精品国产va自在自线 | 国内外成人在线 | 人人玩人人爽 | 日韩视频一区二区三区在线播放免费观看 | 国产a网站| 五月情婷婷 | 中文字幕av一区二区三区四区 | 三级黄色免费 | 91成人精品国产刺激国语对白 | 中文字幕在线看 | 亚洲综合成人婷婷小说 | 日日夜夜网站 | www免费网站在线观看 | 成年人在线免费看片 | 丁香婷婷在线观看 | 欧美视频网址 | www日日夜夜 | 91女子私密保健养生少妇 | 一区二区三区四区五区在线 | 天天天天干 | 欧美激情在线网站 | 制服丝袜成人在线 | 在线观看av免费观看 | 一本色道久久精品 | 久久久久久久福利 | 日日干 天天干 | 国产精品丝袜 | 亚洲精品一区二区三区新线路 | 色婷婷综合久久久中文字幕 | av成人动漫| 国内精品久久久久久久久 | 麻豆精品91 | 国产成人三级在线 | 亚洲经典视频在线观看 | 天天爱天天操 | 综合网在线视频 | 国产成人精品久久二区二区 | 久草国产在线观看 | 国产精品毛片一区二区 | 久久精品久久精品 | 日韩精品视 | 国产精品毛片完整版 | 免费在线观看av电影 | 免费看三级 | 日韩a在线| 99精品在线免费 | 欧美一区三区四区 | 欧美一区二区三区免费观看 | 国产精品综合在线 | 毛片永久新网址首页 | 中文字幕在线视频免费播放 | 在线观看视频黄 | 久草网站| 国产尤物一区二区三区 | 午夜18视频在线观看 | 免费中文字幕在线观看 | 欧美日韩国产一区二区三区 | 91成版人在线观看入口 | 亚洲激情在线 | 日b视频在线观看网址 | av免费福利 | 在线天堂8√| 男女拍拍免费视频 | www.五月天婷婷 | 日韩在线小视频 | 蜜臀精品久久久久久蜜臀 | 999国产精品视频 | 午夜美女福利 | 97香蕉久久超级碰碰高清版 | 丁香免费视频 | 超碰国产在线播放 | av中文字幕av | 久久久久久久毛片 | 天天爱天天操天天爽 | japanesefreesex中国少妇 | 亚洲一二区视频 | 国产私拍在线 | 久久人人爽人人爽人人 | 91人人澡人人爽 | 欧美成年人在线视频 | 国产精品99久久99久久久二8 | 菠萝菠萝蜜在线播放 | 激情影音 | 天天干夜夜夜操天 | 国产精品一区二区三区99 | 久久久久亚洲国产 | 日韩av黄 | www免费黄色 | 亚洲 欧美 综合 在线 精品 | 亚洲涩涩涩涩涩涩 | 久久精品电影网 | 久久精品欧美一 | 精品国产乱码久久久久 | 深夜福利视频一区二区 | 美女视频黄是免费的 | 国产h在线观看 | 蜜臀aⅴ国产精品久久久国产 | 五月婷婷丁香激情 | 日日干精品 | 午夜久久久久久久久久影院 | 成人免费一区二区三区在线观看 | 久久久精品国产免费观看一区二区 | 99久久精品免费 | 成全在线视频免费观看 | 国产v视频 | 成人网中文字幕 | 成在线播放 | 天天色天天草天天射 | 国产高清视频免费最新在线 | 人人爽人人香蕉 | 欧美狠狠操 | 国产在线精品一区二区不卡了 | 亚洲综合一区二区精品导航 | 天天干天天干天天色 | 欧美成人免费在线 | 日韩高清一 | 欧美性色黄大片在线观看 | 亚洲狠狠丁香婷婷综合久久久 | 久久理论片 | 成人免费观看网址 | 91看片看淫黄大片 | 久热电影| 久久99深爱久久99精品 | 国产亚洲欧洲 | 久久人人添人人爽添人人88v | 婷婷av网站 | 久久久久久国产精品免费 | 亚洲一区二区三区毛片 | 97视频在线免费播放 | 久久久精品国产一区二区三区 | 久久精品久久综合 | 狠狠色丁香婷婷综合视频 | 日韩精品中字 | 婷婷av综合 | 爱爱一区| 夜夜骑首页 | 国产又黄又硬又爽 | 91麻豆精品国产91久久久无需广告 | 国产婷婷| 国内99视频 | 国产不卡视频在线 | 制服丝袜欧美 | 久久久久久久福利 | 91亚洲国产成人久久精品网站 | 国产99久久九九精品免费 | 黄色大片日本 | 久久99九九99精品 | 日韩在线不卡av | 91在线九色 | 精品视频在线播放 | 中文字幕色综合网 | 久草五月 | 国产亚洲精品无 | 久久久免费播放 | 久久国产经典视频 | 在线免费91| 人人爽人人爽人人片 | 97热视频| 日韩在线观看第一页 | 国产情侣一区 | 国产一区二区三区在线免费观看 | 丁香 婷婷 激情 | 久久久国产精品人人片99精片欧美一 | 欧美精品中文字幕亚洲专区 | 欧美色伊人 | 亚洲精品一区二区三区高潮 | 中文字幕在线播放视频 | 精品亚洲免费视频 | 欧美色图亚洲图片 | 999视频在线播放 | 一区二区三区电影 | 免费看片网址 | 中文字幕在线播放视频 | 久热av在线 | 国产视频一区在线 | 欧美精品在线观看一区 | 日韩精品一区二区久久 | 黄色网址a | 欧美一级日韩三级 | 91精品999 | 在线免费黄色av | 国产色一区 | 麻豆国产在线视频 | 免费网站在线观看成人 | 国产精品乱码在线 | 日韩视频免费观看高清 | 日本黄色片一区二区 | 天天爽天天搞 | 成人免费观看网址 | 久热超碰 | 欧美视频日韩 | 97视频免费在线看 | 亚洲黄色av一区 | 久久久久日本精品一区二区三区 | 夜色成人网| 欧美91av| 91亚洲激情 | 九九热在线视频 | 五月天堂网 | 亚洲国产精品久久 | 亚洲国产操 | 成人免费视频视频在线观看 免费 | 免费视频一区二区 | 黄色成人av | 亚洲精品中文字幕在线 | 日日摸日日 | 啪啪免费试看 | 国产一区二区精 | 国产香蕉视频在线播放 | 免费av一级电影 | 免费久久片 | 欧美视频xxx | 久久婷婷精品视频 | 少妇bbbb搡bbbb桶 | 99久免费精品视频在线观看 | 成人免费视频免费观看 | 国产又粗又长的视频 | 国产黄色片免费看 | 天天综合区 | 最新精品国产 | av在观看| 欧美精品久久久久久久久久丰满 | 女人18毛片90分钟 | 91中文字幕 | 狠日日| 久久免费看a级毛毛片 | 国产黄网在线 | 国产一级电影 | 久久99久久99精品中文字幕 | 超碰97中文 | 亚洲成人免费观看 | 亚洲三级黄色 | 激情五月婷婷综合网 | av色图天堂网 | 国产精品1区2区3区在线观看 | 欧美在线视频一区二区三区 | 五月开心网 | 美女久久久久久久 | 狠狠色伊人亚洲综合网站色 | 国产自制av | 精品国模一区二区三区 | 成人av电影网址 | 欧美另类成人 | 麻豆手机在线 | 婷婷丁香色 | 亚洲日本va中文字幕 | 久草在线精品观看 | 成人a在线观看高清电影 | 婷婷国产精品 | 91成人小视频 | 国产在线精品一区二区三区 | av中文字幕亚洲 | 成人av中文字幕在线观看 | 免费在线视频一区二区 | 午夜免费电影院 | 99热在线国产精品 | 在线97| 99视频在线| 99久国产| 三上悠亚一区二区在线观看 | 午夜精品视频福利 | 成人免费视频播放 | 999久久久久久久久久久 | 欧美一性一交一乱 | 色综合久久88 | 69欧美视频| 国产高清在线 | 丝袜网站在线观看 | 色偷偷888欧美精品久久久 | 日韩精品一区二区免费视频 | 日韩久久久久久久久久久久 | 国产精品久久久久影视 | 97影视 | 国产美女网 | 国产精品久久久久婷婷 | 中文字幕成人网 | 天天干天天干天天干天天干天天干天天干 | 国产一级二级在线观看 | www.天堂av| 西西444www高清大胆 | 日韩免 | 五月天丁香综合 | 91入口在线观看 | 精品久久中文 | 日韩一区二区三区高清在线观看 | 黄色网址中文字幕 | 亚洲v精品 | 亚洲精品乱码久久久久久蜜桃动漫 | 91网在线观看 | 久久久网页 | 天躁狠狠躁 | 欧美午夜一区二区福利视频 | 99精品色 | 久久伦理电影网 | 日韩天天综合 | 美女久久久久 | 狠狠干中文字幕 | 久久人91精品久久久久久不卡 | 国产精品久久99 | 久久999久久 | 三级小视频在线观看 | 五月开心激情网 | 午夜国产一区二区 | 天天搞天天 | 在线视频观看国产 | 91av视频免费在线观看 | 中文字幕第一页在线视频 | 国产免费中文字幕 | 天堂av在线网站 | 国产精品一区二区果冻传媒 | 日韩中文字幕免费看 | 亚洲无吗视频在线 | 久久国产午夜精品理论片最新版本 | 亚洲免费在线看 | 国产高清视频在线播放 | 精品久久久久久亚洲综合网站 | 99热99re6国产在线播放 | 国产精品欧美日韩 | 国产一级片一区二区三区 | 国产老妇av | 免费看黄色91 | 国产手机在线观看视频 | 国产不卡av在线 | 欧美韩日视频 | 久久理论影院 | 久久久久人人 | 免费情趣视频 | 亚洲视频,欧洲视频 | 婷婷色在线 | 国产又粗又猛又色 | 国产成人久久久77777 | 视频国产精品 | 干亚洲少妇 | 精品一二三四五区 | 国产在线观看91 | 狠狠狠狠狠色综合 | 91精品国产入口 | 亚洲第一香蕉视频 | 中文字幕精品一区二区精品 | www.av免费 | 91伊人久久大香线蕉蜜芽人口 | 国产精品18久久久久久首页狼 | 制服丝袜在线 | 国产成人精品亚洲a | 亚洲电影成人 | 日韩在线电影 | 欧美综合久久 | 国产精彩在线视频 | 中文在线字幕免费观 | 欧美日韩国产页 | 欧美日韩另类在线 | 一区中文字幕在线观看 | 亚洲成a人片在线观看中文 中文字幕在线视频第一页 狠狠色丁香婷婷综合 | 91在线免费观看网站 | 黄色影院在线观看 | 99久久精品免费看国产一区二区三区 | 六月婷婷网 | 午夜18视频在线观看 | 亚洲永久免费av | 中文字幕一区三区 | 999久久国精品免费观看网站 | 亚洲黄色一级大片 | 国产美女被啪进深处喷白浆视频 | 日韩在线播放av | 久久精品亚洲精品国产欧美 | 国产电影黄色av | 久久99国产精品二区护士 | 欧美久久影院 | 一级淫片在线观看 | 中文字幕在线播放日韩 | 91人人揉日日捏人人看 | 日本精品视频网站 | av一区在线 | 日本福利视频在线 | 99久久久久国产精品免费 | 狠狠色丁香婷婷综合最新地址 | 香蕉在线观看视频 | 国产成人一区二区三区在线观看 | 国产成a人亚洲精v品在线观看 | 亚洲精品免费在线播放 | 亚洲成人精品影院 | avlulu久久精品 | 精品久久一区 | 国产精品久久久久久久av大片 | 69视频国产| 中文不卡视频在线 | 国产精品毛片一区视频播 | 97色婷婷成人综合在线观看 | 久久久伊人网 | 超碰在97| 天天草天天 | 日韩成人精品在线观看 | 中文字幕乱码在线播放 | 色网站在线 | 91视频免费看网站 | a久久免费视频 | 日韩美女免费线视频 | 久草在在线视频 | 狠狠狠狠狠干 | 亚洲精品久久久久www | 久久精品视频一 | 天天综合天天做天天综合 | 久久综合天天 | 国产亚洲激情视频在线 | 免费视频三区 | 黄色成人91 | 国产电影一区二区三区四区 | 国内精品在线看 | 国产一级片一区二区三区 | 在线日本v二区不卡 | 激情五月婷婷综合网 | 999精品| 日韩av图片| av导航福利 | www.av在线.com| 久在线观看 | 久久综合成人 | 亚洲一二区视频 | 欧美一级片在线 | 日韩久久久久久久久 | 欧美日韩视频免费 | 在线视频一区二区 | 91久久久久久久一区二区 | 亚洲色图27p | 成人免费观看在线视频 | 色综合网在线 | 四虎成人免费影院 | 夜夜躁日日躁狠狠久久av | 亚洲做受高潮欧美裸体 | a级国产乱理论片在线观看 特级毛片在线观看 | 贫乳av女优大全 | 国产视频二区三区 | 日韩二级毛片 | 久久国产精品久久久久 | 激情网站免费观看 | 激情在线免费视频 | 超碰在线人人 | 99久久一区| 国产九九九精品视频 | 成人免费观看在线视频 | 黄色av网站在线免费观看 | 国产在线91在线电影 | 国产精品视频免费观看 | 亚洲 欧美 变态 国产 另类 | 亚洲精品国偷拍自产在线观看 | 九九九九免费视频 | 在线一二三区 | 色偷偷88888欧美精品久久 | 九精品 | 黄色大全在线观看 | 色婷婷在线视频 | 麻豆久久久 | 韩日电影在线免费看 | av在线永久免费观看 | 国产美女在线观看 | 狂野欧美激情性xxxx欧美 | 日韩一区二区免费视频 | 97成人精品区在线播放 | 国产精品高清免费在线观看 | 五月婷婷精品 | 91香蕉视频 | 久久久网站 | 香蕉在线观看视频 | 国产97碰免费视频 | 国产伦理一区二区 | 一区二区欧美日韩 | 日日操天天射 | 国产免费高清 | 国产一区免费 | 精品免费视频123区 午夜久久成人 | av在线播放观看 | 91色影院| 国产精品欧美久久久久三级 | 91视频久久久久 | 国语自产偷拍精品视频偷 | 国产精品久久久一区二区三区网站 | 人人擦| 国色天香在线 | 婷婷丁香激情网 | 激情视频国产 | 久久久国产视频 | 精品久久一区二区 | 免费高清在线视频一区· | 国产日韩在线观看一区 | 色综合久久综合网 | 日韩在线免费电影 | 99精品久久精品一区二区 | 国产黄色片免费 | 私人av | 国产精品久久久久久婷婷天堂 | 久久久久99999 | 成年人在线观看 | 日本中文字幕在线视频 | 一区二区三区日韩在线观看 | 香蕉影院在线观看 | 亚洲一区二区精品3399 | 白丝av免费观看 | 亚洲综合丁香 | 99精品在这里 | 久久免费影院 | 国产精品自在欧美一区 | 国产精品毛片一区 | 日韩性色 | 国产xx视频| 在线观看视频99 | 免费观看成人 | 久草av在线播放 | 亚洲精品免费在线观看视频 | 国产一区欧美日韩 | 五月激情电影 | 伊人天天狠天天添日日拍 | 国产成人精品日本亚洲999 | 观看免费av | 国产一区二区久久久久 | 国偷自产中文字幕亚洲手机在线 | 久久精品电影网 | 日日夜夜91| 亚洲三级在线 | 国产最新福利 | 久久精品三级 | 国产午夜精品福利视频 | 欧美91精品| 黄色一区二区在线观看 | 色先锋av资源中文字幕 | 国产老太婆免费交性大片 | 在线视频中文字幕一区 | 久av电影 | 天天色天| 在线看成人av | 免费在线成人 | 国产在线97 | 久久久久久久久久免费视频 | 成人在线视 | 久久久久久久久久久福利 | 四虎影视精品成人 | 91久久偷偷做嫩草影院 | 亚洲激情精品 | 五月天视频网 | 国产精品久久久久久99 | 亚洲一区二区视频在线播放 | 欧美日本在线观看视频 | 欧美一级性生活视频 | 中文字幕在线免费看 | 中文字幕一区三区 | 日韩精品视频久久 | 国产不卡精品 | 国产精品自产拍在线观看蜜 | 99精品国产免费久久久久久下载 | 日韩av免费在线看 | 亚洲精品99久久久久久 | 亚洲精品在线看 | 日韩在线视频观看 | 又湿又紧又大又爽a视频国产 | 久久久网页 | 日韩精品免费一区二区在线观看 | 美女网站在线看 | 极品国产91在线网站 | www.亚洲黄色 | 久久99精品国产麻豆婷婷 | 精品成人国产 | 亚洲综合在线观看视频 | 91原创在线观看 | 天天干天天拍天天操天天拍 | 久久综合五月天婷婷伊人 | 日韩视频在线观看免费 | 久操97 | 免费人成在线观看网站 | 日本二区三区在线 | 天堂av最新网址 | 激情综合一区 | 欧美日韩aaaa | va视频在线| 国产精品福利在线观看 | 在线超碰av| 欧美综合在线视频 | 在线观看中文字幕2021 | bbw av| 一区二区精品在线 | a精品视频 | 在线成人一区二区 | 国产在线免费av | 国产小视频你懂的在线 | 人人爽久久涩噜噜噜网站 | 久久精品中文字幕免费mv | 欧美-第1页-屁屁影院 | 中文字幕在线专区 | 国产免费人成xvideos视频 | 丁香激情五月 | 97**国产露脸精品国产 | 国产一级在线播放 | 免费久久网站 | 亚洲国产精品久久久久久 | 精品1区2区3区 | 丁香婷五月 | 成人在线播放免费观看 | 国产欧美日韩精品一区二区免费 | 亚洲一区精品二人人爽久久 | 欧美成人视 | 国产色视频一区 | 久草在线观看视频免费 | 精品1区2区 | 国产精品午夜免费福利视频 | 1000部18岁以下禁看视频 | 九七人人干 | 国产一线二线三线在线观看 | 久久久久久黄 | 午夜av在线电影 | 国产精品第三页 | 狠狠色丁香婷婷综合久小说久 | 欧美日韩国产一区 | 成人av免费在线 | 免费视频xnxx com | 日韩视频在线一区 | 在线观看中文字幕 | 欧美日韩精品综合 | 黄色一级大片在线观看 | 欧美成人影音 | 永久精品视频 | av大全在线免费观看 | 韩国精品一区二区三区六区色诱 | 一级全黄毛片 | 久久av一区二区三区亚洲 | 久久免费试看 | 91精选在线 | 日韩二区三区 | 久久欧美精品 | av色综合| 成人污视频在线观看 | 国产小视频在线观看 | 91丨九色丨蝌蚪丨老版 | 国产特级毛片aaaaaaa高清 | 国产1区2区3区精品美女 | 美女网站视频久久 | 国产第一页在线播放 | 在线免费视频a | 探花视频免费观看高清视频 | 久久一区国产 | 日韩高清成人 | 91麻豆国产 | 五月亚洲综合 | 国产视频1 | 久久99国产精品免费网站 | 香蕉视频免费在线播放 | 97在线观看免费 | 中文字幕在线观看播放 | 国产精品精品 | 亚洲午夜久久久久 | 午夜精品一区二区三区可下载 | 国产成人黄色av | 色综合天 | 一级α片免费看 | 久久综合色影院 | 精品免费观看 | 色综合咪咪久久网 | 久草爱视频 | 国产成人三级 | 日日草天天干 | 中文字幕在线色 | 免费在线观看av网址 | 欧美日韩在线播放 | 欧美 日韩 成人 | 久久视频6| 91精品视频网站 | 国产精品1区2区3区 久久免费视频7 | 操久在线 | 深爱五月激情网 | av成人动漫 | 好看的国产精品视频 | 欧美亚洲国产精品久久高清浪潮 | 黄色录像av | 国产色综合天天综合网 | 久久精品这里热有精品 | 亚洲第一av在线播放 | av黄色在线观看 | 久久这里精品视频 | 久久久久99999| 婷婷色在线播放 | 国产精品久久99综合免费观看尤物 | 久久精品国产免费看久久精品 | 成人av中文字幕在线观看 | 欧美日韩性视频 | 四虎在线免费 | 午夜在线观看 | 全久久久久久久久久久电影 | 欧美少妇的秘密 | 久久韩国免费视频 | 欧美日比视频 | 久久草在线免费 | 亚洲欧美日韩国产一区二区三区 | www.福利| 国产精品青青 | 色多多视频在线观看 | 国产精品美女久久久久久久久 | 成人免费观看视频大全 | 一区二区中文字幕在线播放 | 日韩欧美综合视频 | 中文字幕在线资源 | 久久久亚洲国产精品麻豆综合天堂 | 精品国偷自产国产一区 | 日韩伦理一区二区三区av在线 | 五月婷久久 | 欧美一级片播放 | 国产一二三四在线视频 | 97精品久久| 欧美日韩在线观看一区二区 | 中文字幕一区二区三区在线播放 | aaa亚洲精品一二三区 | 激情五月色播五月 | 91九色网址 | 中文字幕免费在线 | av成人动漫 | 亚洲视频久久久久 | www.xxxx变态.com | av免费网站在线观看 | 91片在线观看 | 最近日韩中文字幕中文 | 国产午夜精品av一区二区 | 在线免费黄网站 | 五月综合| 91视频久久久久久 | 韩日电影在线免费看 | 国产精品久久久久久一区二区三区 | 久草在线免费播放 | 2021国产精品视频 | 99视频国产精品 | 色偷偷88888欧美精品久久 | 午夜久久福利影院 | 国产免费区 | 久久久久免费看 | 91精品网站在线观看 | 中文字幕在线观看91 | 免费的黄色av | 国产一区二区视频在线 | 色www.| 久草视频在线资源 | 国产理论在线 | 新av在线 | 免费在线观看视频一区 | 亚洲人成在线观看 | 欧美日韩综合在线 | 国产 精品 资源 | 人人超碰人人 | 欧美最猛性xxxx | 在线观看视频在线 | 96精品高清视频在线观看软件特色 | 国产成人精品av在线观 | 成人va视频| www黄com| 色偷偷网站视频 | 超碰在线观看av | 日韩中文在线字幕 | 激情久久一区二区三区 | 97在线成人 | 亚洲国产中文字幕在线观看 | 欧美精品中文在线免费观看 | 欧美午夜久久久 | 日本精品一区二区在线观看 | 国产区久久 | 在线观看激情av | 成 人 a v天堂| 天天拍天天爽 | 麻豆手机在线 | 久久伊人色综合 | 成人网看片 | 中文在线免费视频 | bbbbb女女女女女bbbbb国产 | 久久久久久欧美二区电影网 | 国产视频精品免费 | 97视频人人免费看 | 婷婷中文字幕在线观看 | av福利免费 | 免费看的av片 | 国产一区二区三区四区大秀 | 欧美一级在线看 | 精品久久久久久久久久久院品网 | 国产亚洲综合精品 | 在线色网站 | 亚洲日本韩国一区二区 | 四虎在线免费观看 | 国产在线观看地址 | 久久精品久久久久久久 | 97视频亚洲| 麻豆传媒视频在线播放 | 天天干天天操天天做 | 西西4444www大胆无视频 | 国产精品一区二区在线免费观看 | 日韩成人在线一区二区 | 亚洲精品播放 | 免费男女羞羞的视频网站中文字幕 | 欧美在线观看视频一区二区 | 亚洲精选视频免费看 | 美女黄频在线观看 | 丁香色婷| 精品国产自在精品国产精野外直播 |