亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? lock.c

?? 該文件是rt_linux
?? C
字號:
/* lock.c -- IOCTLs for locking -*- linux-c -*- * Created: Tue Feb  2 08:37:54 1999 by faith@precisioninsight.com * * Copyright 1999 Precision Insight, Inc., Cedar Park, Texas. * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California. * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: *  * The above copyright notice and this permission notice (including the next * paragraph) shall be included in all copies or substantial portions of the * Software. *  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL * PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. *  * Authors: *    Rickard E. (Rik) Faith <faith@valinux.com> * */#define __NO_VERSION__#include "drmP.h"int drm_block(struct inode *inode, struct file *filp, unsigned int cmd,	      unsigned long arg){	DRM_DEBUG("\n");	return 0;}int drm_unblock(struct inode *inode, struct file *filp, unsigned int cmd,		unsigned long arg){	DRM_DEBUG("\n");	return 0;}int drm_lock_take(__volatile__ unsigned int *lock, unsigned int context){	unsigned int old, new, prev;	do {		old = *lock;		if (old & _DRM_LOCK_HELD) new = old | _DRM_LOCK_CONT;		else			  new = context | _DRM_LOCK_HELD;		prev = cmpxchg(lock, old, new);	} while (prev != old);	if (_DRM_LOCKING_CONTEXT(old) == context) {		if (old & _DRM_LOCK_HELD) {			if (context != DRM_KERNEL_CONTEXT) {				DRM_ERROR("%d holds heavyweight lock\n",					  context);			}			return 0;		}	}	if (new == (context | _DRM_LOCK_HELD)) {				/* Have lock */		return 1;	}	return 0;}/* This takes a lock forcibly and hands it to context.	Should ONLY be used   inside *_unlock to give lock to kernel before calling *_dma_schedule. */int drm_lock_transfer(drm_device_t *dev,		      __volatile__ unsigned int *lock, unsigned int context){	unsigned int old, new, prev;	dev->lock.pid = 0;	do {		old  = *lock;		new  = context | _DRM_LOCK_HELD;		prev = cmpxchg(lock, old, new);	} while (prev != old);	return 1;}int drm_lock_free(drm_device_t *dev,		  __volatile__ unsigned int *lock, unsigned int context){	unsigned int old, new, prev;	pid_t        pid = dev->lock.pid;	dev->lock.pid = 0;	do {		old  = *lock;		new  = 0;		prev = cmpxchg(lock, old, new);	} while (prev != old);	if (_DRM_LOCK_IS_HELD(old) && _DRM_LOCKING_CONTEXT(old) != context) {		DRM_ERROR("%d freed heavyweight lock held by %d (pid %d)\n",			  context,			  _DRM_LOCKING_CONTEXT(old),			  pid);		return 1;	}	wake_up_interruptible(&dev->lock.lock_queue);	return 0;}static int drm_flush_queue(drm_device_t *dev, int context){	DECLARE_WAITQUEUE(entry, current);	int		  ret	= 0;	drm_queue_t	  *q	= dev->queuelist[context];		DRM_DEBUG("\n");		atomic_inc(&q->use_count);	if (atomic_read(&q->use_count) > 1) {		atomic_inc(&q->block_write);		add_wait_queue(&q->flush_queue, &entry);		atomic_inc(&q->block_count);		for (;;) {			current->state = TASK_INTERRUPTIBLE;			if (!DRM_BUFCOUNT(&q->waitlist)) break;			schedule();			if (signal_pending(current)) {				ret = -EINTR; /* Can't restart */				break;			}		}		atomic_dec(&q->block_count);		current->state = TASK_RUNNING;		remove_wait_queue(&q->flush_queue, &entry);	}	atomic_dec(&q->use_count);	atomic_inc(&q->total_flushed);						/* NOTE: block_write is still incremented!				   Use drm_flush_unlock_queue to decrement. */	return ret;}static int drm_flush_unblock_queue(drm_device_t *dev, int context){	drm_queue_t	  *q	= dev->queuelist[context];		DRM_DEBUG("\n");		atomic_inc(&q->use_count);	if (atomic_read(&q->use_count) > 1) {		if (atomic_read(&q->block_write)) {			atomic_dec(&q->block_write);			wake_up_interruptible(&q->write_queue);		}	}	atomic_dec(&q->use_count);	return 0;}int drm_flush_block_and_flush(drm_device_t *dev, int context,			      drm_lock_flags_t flags){	int ret = 0;	int i;		DRM_DEBUG("\n");		if (flags & _DRM_LOCK_FLUSH) {		ret = drm_flush_queue(dev, DRM_KERNEL_CONTEXT);		if (!ret) ret = drm_flush_queue(dev, context);	}	if (flags & _DRM_LOCK_FLUSH_ALL) {		for (i = 0; !ret && i < dev->queue_count; i++) {			ret = drm_flush_queue(dev, i);		}	}	return ret;}int drm_flush_unblock(drm_device_t *dev, int context, drm_lock_flags_t flags){	int ret = 0;	int i;		DRM_DEBUG("\n");		if (flags & _DRM_LOCK_FLUSH) {		ret = drm_flush_unblock_queue(dev, DRM_KERNEL_CONTEXT);		if (!ret) ret = drm_flush_unblock_queue(dev, context);	}	if (flags & _DRM_LOCK_FLUSH_ALL) {		for (i = 0; !ret && i < dev->queue_count; i++) {			ret = drm_flush_unblock_queue(dev, i);		}	}			return ret;}int drm_finish(struct inode *inode, struct file *filp, unsigned int cmd,	       unsigned long arg){	drm_file_t	  *priv	  = filp->private_data;	drm_device_t	  *dev	  = priv->dev;	int		  ret	  = 0;	drm_lock_t	  lock;	DRM_DEBUG("\n");	if (copy_from_user(&lock, (drm_lock_t *)arg, sizeof(lock)))		return -EFAULT;	ret = drm_flush_block_and_flush(dev, lock.context, lock.flags);	drm_flush_unblock(dev, lock.context, lock.flags);	return ret;}/* If we get here, it means that the process has called DRM_IOCTL_LOCK   without calling DRM_IOCTL_UNLOCK.      If the lock is not held, then let the signal proceed as usual.      If the lock is held, then set the contended flag and keep the signal   blocked.      Return 1 if the signal should be delivered normally.   Return 0 if the signal should be blocked.  */int drm_notifier(void *priv){	drm_sigdata_t *s = (drm_sigdata_t *)priv;	unsigned int  old, new, prev;				/* Allow signal delivery if lock isn't held */	if (!_DRM_LOCK_IS_HELD(s->lock->lock)	    || _DRM_LOCKING_CONTEXT(s->lock->lock) != s->context) return 1;					/* Otherwise, set flag to force call to                                   drmUnlock */	do {		old  = s->lock->lock;		new  = old | _DRM_LOCK_CONT;		prev = cmpxchg(&s->lock->lock, old, new);	} while (prev != old);	return 0;}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产一区二区女| 成人app下载| 一区二区中文视频| 欧美一区二区三区思思人| 成人午夜视频免费看| 免费观看在线色综合| 一区二区三区精品在线| 久久你懂得1024| 日韩视频不卡中文| 欧美影视一区二区三区| 成人不卡免费av| 精品一区二区在线视频| 亚洲123区在线观看| 国产精品久久影院| 久久久亚洲精品一区二区三区| 欧美群妇大交群的观看方式| 色噜噜狠狠成人中文综合| 国产成人在线视频网址| 看片的网站亚洲| 日本欧美在线看| 亚洲va欧美va人人爽| 亚洲一级电影视频| 亚洲欧美国产高清| 亚洲视频精选在线| 亚洲欧洲在线观看av| 国产欧美一二三区| 国产调教视频一区| 欧美激情在线一区二区| 2024国产精品| 久久久久国产一区二区三区四区 | 日韩一区二区三区免费观看| 色综合久久天天| 91浏览器入口在线观看| av网站一区二区三区| 9色porny自拍视频一区二区| 丁香激情综合国产| 国产精品一卡二卡在线观看| 国产综合色精品一区二区三区| 免费高清在线视频一区·| 久久成人久久鬼色| 国产一区二区女| 高清不卡一二三区| 成人高清视频在线观看| voyeur盗摄精品| 色老汉一区二区三区| 在线影院国内精品| 欧美日韩国产区一| 日韩视频一区在线观看| 亚洲精品一区二区在线观看| 国产欧美综合在线| 一区二区中文视频| 亚洲午夜在线电影| 免费高清成人在线| 国产激情一区二区三区四区| 成人丝袜18视频在线观看| 91丨国产丨九色丨pron| 91成人免费电影| 91精品国产麻豆| 国产香蕉久久精品综合网| 亚洲国产精品v| 亚洲综合色婷婷| 美美哒免费高清在线观看视频一区二区| 久久激五月天综合精品| 国产91精品久久久久久久网曝门| 97精品久久久久中文字幕 | 韩国三级电影一区二区| 国产成人8x视频一区二区| 99久久久无码国产精品| 欧美二区乱c少妇| 国产亚洲一区字幕| 亚洲精品成a人| 蜜臀av一区二区三区| 成人ar影院免费观看视频| 欧美片在线播放| 国产欧美一区二区精品久导航| 亚洲综合一区二区| 国产自产高清不卡| 在线中文字幕不卡| 久久久噜噜噜久久中文字幕色伊伊| **网站欧美大片在线观看| 偷拍日韩校园综合在线| 国产精品综合视频| 欧美视频一区二区三区在线观看| 欧美精品一区在线观看| 亚洲另类在线制服丝袜| 久久成人久久爱| 在线一区二区视频| 国产午夜亚洲精品午夜鲁丝片 | 一区二区欧美视频| 狠狠久久亚洲欧美| 欧美日韩激情一区| 日本一区二区三区四区在线视频| 五月激情六月综合| 91视视频在线观看入口直接观看www | 亚洲高清一区二区三区| 懂色av一区二区在线播放| 欧美日韩亚洲国产综合| 中文字幕色av一区二区三区| 奇米精品一区二区三区四区| 91伊人久久大香线蕉| 久久色.com| 麻豆中文一区二区| 欧美日韩一区二区三区视频| 国产精品久久久一本精品| 久久69国产一区二区蜜臀 | 国产精品美女一区二区在线观看| 午夜精品久久久久久久| 91视频免费观看| 久久久99久久精品欧美| 六月丁香综合在线视频| 欧美三级在线视频| 一区二区欧美国产| 99riav一区二区三区| 国产视频一区二区在线| 久久99精品一区二区三区| 91精品国产欧美一区二区| 婷婷综合五月天| 欧美日韩一区二区三区视频| 专区另类欧美日韩| 成人av动漫网站| 国产偷v国产偷v亚洲高清| 精品综合久久久久久8888| 日韩你懂的在线观看| 蜜桃视频一区二区| 日韩欧美视频在线| 精品一区二区日韩| 日韩三级高清在线| 韩国一区二区在线观看| 精品福利一区二区三区免费视频| 麻豆精品在线播放| 精品国产乱码91久久久久久网站| 免费高清视频精品| 精品国产乱码久久久久久浪潮 | 日韩二区三区在线观看| 欧美精品一二三| 五月天久久比比资源色| 91精品国产综合久久小美女| 日韩激情视频在线观看| 欧美一区二区网站| 免费精品视频最新在线| 欧美mv日韩mv亚洲| 国产一区视频在线看| 国产欧美一区二区精品性色| 成人免费电影视频| 亚洲私人黄色宅男| 欧美日韩中文一区| 麻豆国产精品视频| 久久日一线二线三线suv| 成人丝袜18视频在线观看| 亚洲同性gay激情无套| 在线观看中文字幕不卡| 亚洲成人av一区| 日韩一本二本av| 国产毛片精品一区| 亚洲欧美自拍偷拍| 欧美日精品一区视频| 琪琪一区二区三区| 久久久久久毛片| 91免费观看国产| 午夜激情久久久| 精品国精品国产| 97久久精品人人做人人爽| 亚洲国产成人av网| 日韩无一区二区| 国产成人av电影在线| 夜夜夜精品看看| 精品日韩一区二区三区| 成人综合日日夜夜| 亚洲宅男天堂在线观看无病毒| 欧美一区二区三区在线| 国产盗摄视频一区二区三区| 一区二区三区欧美日韩| 欧美v日韩v国产v| 99久久综合精品| 麻豆成人av在线| 亚洲天堂网中文字| 欧美大片免费久久精品三p| 成人午夜在线免费| 偷拍日韩校园综合在线| 中文字幕va一区二区三区| 欧美日韩国产在线观看| 国产a级毛片一区| 日本女优在线视频一区二区| 国产精品私房写真福利视频| 91.com视频| caoporn国产精品| 韩日欧美一区二区三区| 亚洲一区二区三区国产| 国产亚洲欧美中文| 5月丁香婷婷综合| 色猫猫国产区一区二在线视频| 九九精品一区二区| 亚洲18女电影在线观看| 国产精品日韩精品欧美在线 | 亚洲欧美另类图片小说| 欧美大肚乱孕交hd孕妇| 欧美午夜不卡在线观看免费| 国产成人精品亚洲777人妖 | 自拍偷拍国产精品| 久久奇米777|