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

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

?? jiq.c

?? Linux設(shè)備驅(qū)動的經(jīng)典教材, 該電子書是第三版,并附有全部配套代碼.
?? C
字號:
/* * jiq.c -- the just-in-queue module * * Copyright (C) 2001 Alessandro Rubini and Jonathan Corbet * Copyright (C) 2001 O'Reilly & Associates * * The source code in this file can be freely used, adapted, * and redistributed in source or binary form, so long as an * acknowledgment appears in derived source files.  The citation * should list that the code comes from the book "Linux Device * Drivers" by Alessandro Rubini and Jonathan Corbet, published * by O'Reilly & Associates.   No warranty is attached; * we cannot take responsibility for errors or fitness for use. * * $Id: jiq.c,v 1.7 2004/09/26 07:02:43 gregkh Exp $ */ #include <linux/config.h>#include <linux/module.h>#include <linux/moduleparam.h>#include <linux/init.h>#include <linux/sched.h>#include <linux/kernel.h>#include <linux/fs.h>     /* everything... */#include <linux/proc_fs.h>#include <linux/errno.h>  /* error codes */#include <linux/workqueue.h>#include <linux/preempt.h>#include <linux/interrupt.h> /* tasklets */MODULE_LICENSE("Dual BSD/GPL");/* * The delay for the delayed workqueue timer file. */static long delay = 1;module_param(delay, long, 0);/* * This module is a silly one: it only embeds short code fragments * that show how enqueued tasks `feel' the environment */#define LIMIT	(PAGE_SIZE-128)	/* don't print any more after this size *//* * Print information about the current environment. This is called from * within the task queues. If the limit is reched, awake the reading * process. */static DECLARE_WAIT_QUEUE_HEAD (jiq_wait);static struct work_struct jiq_work;/* * Keep track of info we need between task queue runs. */static struct clientdata {	int len;	char *buf;	unsigned long jiffies;	long delay;} jiq_data;#define SCHEDULER_QUEUE ((task_queue *) 1)static void jiq_print_tasklet(unsigned long);static DECLARE_TASKLET(jiq_tasklet, jiq_print_tasklet, (unsigned long)&jiq_data);/* * Do the printing; return non-zero if the task should be rescheduled. */static int jiq_print(void *ptr){	struct clientdata *data = ptr;	int len = data->len;	char *buf = data->buf;	unsigned long j = jiffies;	if (len > LIMIT) { 		wake_up_interruptible(&jiq_wait);		return 0;	}	if (len == 0)		len = sprintf(buf,"    time  delta preempt   pid cpu command\n");	else		len =0;  	/* intr_count is only exported since 1.3.5, but 1.99.4 is needed anyways */	len += sprintf(buf+len, "%9li  %4li     %3i %5i %3i %s\n",			j, j - data->jiffies,			preempt_count(), current->pid, smp_processor_id(),			current->comm);	data->len += len;	data->buf += len;	data->jiffies = j;	return 1;}/* * Call jiq_print from a work queue */static void jiq_print_wq(void *ptr){	struct clientdata *data = (struct clientdata *) ptr;    	if (! jiq_print (ptr))		return;    	if (data->delay)		schedule_delayed_work(&jiq_work, data->delay);	else		schedule_work(&jiq_work);}static int jiq_read_wq(char *buf, char **start, off_t offset,                   int len, int *eof, void *data){	DEFINE_WAIT(wait);		jiq_data.len = 0;                /* nothing printed, yet */	jiq_data.buf = buf;              /* print in this place */	jiq_data.jiffies = jiffies;      /* initial time */	jiq_data.delay = 0;    	prepare_to_wait(&jiq_wait, &wait, TASK_INTERRUPTIBLE);	schedule_work(&jiq_work);	schedule();	finish_wait(&jiq_wait, &wait);	*eof = 1;	return jiq_data.len;}static int jiq_read_wq_delayed(char *buf, char **start, off_t offset,                   int len, int *eof, void *data){	DEFINE_WAIT(wait);		jiq_data.len = 0;                /* nothing printed, yet */	jiq_data.buf = buf;              /* print in this place */	jiq_data.jiffies = jiffies;      /* initial time */	jiq_data.delay = delay;    	prepare_to_wait(&jiq_wait, &wait, TASK_INTERRUPTIBLE);	schedule_delayed_work(&jiq_work, delay);	schedule();	finish_wait(&jiq_wait, &wait);	*eof = 1;	return jiq_data.len;}/* * Call jiq_print from a tasklet */static void jiq_print_tasklet(unsigned long ptr){	if (jiq_print ((void *) ptr))		tasklet_schedule (&jiq_tasklet);}static int jiq_read_tasklet(char *buf, char **start, off_t offset, int len,                int *eof, void *data){	jiq_data.len = 0;                /* nothing printed, yet */	jiq_data.buf = buf;              /* print in this place */	jiq_data.jiffies = jiffies;      /* initial time */	tasklet_schedule(&jiq_tasklet);	interruptible_sleep_on(&jiq_wait);    /* sleep till completion */	*eof = 1;	return jiq_data.len;}/* * This one, instead, tests out the timers. */static struct timer_list jiq_timer;static void jiq_timedout(unsigned long ptr){	jiq_print((void *)ptr);            /* print a line */	wake_up_interruptible(&jiq_wait);  /* awake the process */}static int jiq_read_run_timer(char *buf, char **start, off_t offset,                   int len, int *eof, void *data){	jiq_data.len = 0;           /* prepare the argument for jiq_print() */	jiq_data.buf = buf;	jiq_data.jiffies = jiffies;	init_timer(&jiq_timer);              /* init the timer structure */	jiq_timer.function = jiq_timedout;	jiq_timer.data = (unsigned long)&jiq_data;	jiq_timer.expires = jiffies + HZ; /* one second */	jiq_print(&jiq_data);   /* print and go to sleep */	add_timer(&jiq_timer);	interruptible_sleep_on(&jiq_wait);  /* RACE */	del_timer_sync(&jiq_timer);  /* in case a signal woke us up */    	*eof = 1;	return jiq_data.len;}/* * the init/clean material */static int jiq_init(void){	/* this line is in jiq_init() */	INIT_WORK(&jiq_work, jiq_print_wq, &jiq_data);	create_proc_read_entry("jiqwq", 0, NULL, jiq_read_wq, NULL);	create_proc_read_entry("jiqwqdelay", 0, NULL, jiq_read_wq_delayed, NULL);	create_proc_read_entry("jitimer", 0, NULL, jiq_read_run_timer, NULL);	create_proc_read_entry("jiqtasklet", 0, NULL, jiq_read_tasklet, NULL);	return 0; /* succeed */}static void jiq_cleanup(void){	remove_proc_entry("jiqwq", NULL);	remove_proc_entry("jiqwqdelay", NULL);	remove_proc_entry("jitimer", NULL);	remove_proc_entry("jiqtasklet", NULL);}module_init(jiq_init);module_exit(jiq_cleanup);

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久精品视频在线看| 欧美日韩精品免费| 亚洲免费观看高清完整版在线| 91色视频在线| 日本亚洲视频在线| 久久久高清一区二区三区| 色网站国产精品| 免费观看一级特黄欧美大片| 中文欧美字幕免费| 欧美午夜一区二区三区| 日韩精品一区第一页| 久久久青草青青国产亚洲免观| 91丨porny丨蝌蚪视频| 日本成人在线看| 亚洲特黄一级片| 精品日本一线二线三线不卡| av综合在线播放| 激情综合色播激情啊| 一区二区三区在线播放| 欧美成人一区二区三区片免费| 成人永久看片免费视频天堂| 午夜av电影一区| 国产精品理论片| 欧美大尺度电影在线| 欧美顶级少妇做爰| 99re这里都是精品| 国产精品99久久久久久久vr | 亚洲摸摸操操av| 这里只有精品电影| 亚洲成在人线免费| 中文字幕一区二区三区色视频 | 国产成人免费视频网站高清观看视频| 午夜视频在线观看一区二区 | 欧美电影免费观看高清完整版在线| 欧美写真视频网站| 欧亚一区二区三区| 色天天综合色天天久久| 97精品电影院| 91丨九色丨黑人外教| 99久久久久免费精品国产| yourporn久久国产精品| 91在线视频观看| 91福利小视频| 欧美三级韩国三级日本三斤| 欧美日韩在线播放一区| 欧美在线视频日韩| 欧美日韩第一区日日骚| 欧美四级电影网| 欧美日韩dvd在线观看| 欧美日韩精品系列| 制服丝袜亚洲色图| 欧美成人a∨高清免费观看| 日韩精品一区二区三区老鸭窝| 欧美mv和日韩mv的网站| 久久免费偷拍视频| 国产精品久久福利| 玉米视频成人免费看| 一区二区在线观看不卡| 午夜欧美在线一二页| 轻轻草成人在线| 国产一区二区福利| 成人黄页毛片网站| 欧美亚男人的天堂| 欧美一二三四在线| 国产欧美精品区一区二区三区| 午夜激情久久久| 久久精品国产亚洲高清剧情介绍 | 蜜臀久久99精品久久久久宅男 | 亚洲一区国产视频| 日韩福利视频导航| 激情文学综合丁香| 成人av网站在线观看| 欧美日韩免费高清一区色橹橹 | 欧洲国产伦久久久久久久| 4438成人网| 中文字幕乱码亚洲精品一区| 亚洲一区二区三区四区不卡| 免费在线观看精品| jlzzjlzz亚洲日本少妇| 69堂精品视频| 国产精品色婷婷久久58| 亚洲成人一区二区| 国产不卡视频一区二区三区| 欧美色中文字幕| 欧美激情综合网| 首页国产欧美久久| 成人福利在线看| 日韩视频免费观看高清完整版 | 久久久久久久精| 一个色综合av| 精品一区二区在线免费观看| 99在线精品免费| 精品国产一区二区国模嫣然| 亚洲欧美日韩一区| 狠狠色丁香久久婷婷综合丁香| 91麻豆精品一区二区三区| 欧美成人在线直播| 一区二区免费看| 国产91丝袜在线18| 日韩精品在线看片z| 亚洲综合一区二区精品导航| 国产精品1区2区| 337p亚洲精品色噜噜狠狠| 亚洲欧美日韩小说| 成人开心网精品视频| 精品福利av导航| 亚洲bt欧美bt精品| 色综合激情五月| 国产精品天美传媒| 韩国三级在线一区| 日韩欧美高清一区| 五月婷婷久久丁香| 在线观看91视频| 日韩码欧中文字| 春色校园综合激情亚洲| 亚洲三级久久久| 波波电影院一区二区三区| 精品免费国产一区二区三区四区| 婷婷综合另类小说色区| 91极品美女在线| 中文乱码免费一区二区| 国产高清不卡一区| 久久综合久久综合九色| 久久99精品久久久久久久久久久久| 欧美色爱综合网| 亚洲在线观看免费视频| 色综合天天综合网国产成人综合天 | 91捆绑美女网站| 国产精品网站导航| 国产成人精品在线看| 久久久精品综合| 国产乱国产乱300精品| 精品91自产拍在线观看一区| 免费成人在线网站| 欧美大尺度电影在线| 国产综合久久久久久久久久久久| 精品国产髙清在线看国产毛片| 日韩激情av在线| 久久不见久久见中文字幕免费| 欧美一级专区免费大片| 日韩精品一二三区| 欧美sm极限捆绑bd| 国模无码大尺度一区二区三区| 精品成人私密视频| 国产一区在线看| 国产精品久久久久影院老司| 99视频有精品| 亚洲在线一区二区三区| 制服丝袜亚洲网站| 国内精品伊人久久久久av影院 | 久久精品无码一区二区三区| 国产一区二区网址| 欧美国产97人人爽人人喊| 99久久国产综合精品女不卡| 一区二区三区四区视频精品免费| 欧美视频一区二区在线观看| 日本亚洲最大的色成网站www| 精品久久久久久综合日本欧美| 国产精品538一区二区在线| 亚洲欧美中日韩| 欧美日韩精品一区二区三区蜜桃| 免费看精品久久片| 欧美国产精品一区二区| 日本韩国精品一区二区在线观看| 香蕉成人伊视频在线观看| 精品国产自在久精品国产| 成人国产精品免费观看动漫| 夜色激情一区二区| 日韩精品一区二区三区四区视频| 成人午夜电影久久影院| 亚洲午夜在线电影| 国产精品水嫩水嫩| 精品视频全国免费看| 国产资源在线一区| 亚洲免费观看高清完整| 日韩一区二区三| 99久久国产综合精品麻豆| 日本va欧美va精品发布| 中文幕一区二区三区久久蜜桃| 欧美日韩视频第一区| 国产91丝袜在线播放0| 手机精品视频在线观看| 国产精品理论片| 日韩美女一区二区三区四区| a在线欧美一区| 另类小说色综合网站| 亚洲精品日产精品乱码不卡| 精品国产一区二区三区四区四 | 成人av在线影院| 人妖欧美一区二区| 日韩一区在线看| 精品捆绑美女sm三区| 欧美性大战xxxxx久久久| 国产99久久久国产精品免费看| 午夜精品影院在线观看| 中文字幕在线一区| 精品国产99国产精品| 8x福利精品第一导航| 一本久久综合亚洲鲁鲁五月天| 国产精品性做久久久久久|