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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? jiq.c

?? Linux設備驅動程序第二版
?? C
字號:
/* * jiq.c -- the just-in-queue module * * Tested with 2.0 on the x86, Sparc */ /* BUGS: the module is not reentrant: only one file can be read at a time *       the module usage count is not used: you could remove the module *           while reading it, thus asking for troubles. */#ifndef __KERNEL__#  define __KERNEL__#endif#ifndef MODULE#  define MODULE#endif#include <linux/module.h>#define VERSION_CODE(vers,rel,seq) ( ((vers)<<16) | ((rel)<<8) | (seq) )#if LINUX_VERSION_CODE < VERSION_CODE(1,99,4)#  error "This module needs Linux 1.99.4 or newer"#else#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/tqueue.h>#include <linux/interrupt.h> /* intr_count *//* * This module is a silly one: it only embeds short code fragments * that show how enqueued tasks `feel' theit 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. */struct wait_queue *jiq_wait;struct tq_struct jiq_task; /* global: initialized to zero */struct clientdata {    int len;    char *buf;    unsigned long jiffies;    task_queue *queue;} jiq_data;void jiq_print(void *ptr){  struct clientdata *data = (struct clientdata *)ptr;  int len = data->len;  char *buf = data->buf;  unsigned long j = jiffies;  if (len > LIMIT) {      wake_up_interruptible(&jiq_wait);      return;  }  if (len == 0)      len = sprintf(buf,"    time  delta intr_count pid 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 %3li        %li   %5i %s\n",                 j, j - data->jiffies,                 intr_count, current->pid, current->comm);  data->len += len;  data->buf += len;  data->jiffies = j;  /* re-register yourself, if needed */  if (data->queue)      queue_task(&jiq_task, data->queue);  if (data->queue == &tq_immediate)      mark_bh(IMMEDIATE_BH); /* this one needs to be marked */}/* * Use the scheduler queue  -- /proc/jiqsched */int jiq_read_sched(char *buf, char **start, off_t offset,                   int len, int unused){    jiq_data.len = 0;               /* nothing printed, yet */    jiq_data.buf = buf;             /* print in this place */    jiq_data.jiffies = jiffies;     /* initial time */    /* jiq_print will queue_task() again in jiq_data.queue */    jiq_data.queue = &tq_scheduler;    queue_task(&jiq_task, &tq_scheduler); /* ready to run */    interruptible_sleep_on(&jiq_wait);    /* sleep till completion */    return jiq_data.len;}struct proc_dir_entry jiq_proc_sched = {        0,                 /* low_ino: the inode -- dynamic */        8, "jiqsched",     /* len of name and name */        S_IFREG | S_IRUGO, /* mode */        1, 0, 0,           /* nlinks, owner, group */        0, NULL,           /* size - unused; operations -- use default */        &jiq_read_sched,   /* function used to read data */        /* nothing more */    };int jiq_read_timer(char *buf, char **start, off_t offset,                   int len, int unused){    jiq_data.len = 0;            /* nothing printed, yet */    jiq_data.buf = buf;          /* print in this place */    jiq_data.jiffies = jiffies;  /* initial time */    jiq_data.queue = &tq_timer;  /* re-register yourself here */    queue_task(&jiq_task, &tq_timer);     /* ready to run */    interruptible_sleep_on(&jiq_wait);    /* sleep till completion */    return jiq_data.len;}struct proc_dir_entry jiq_proc_timer = {        0,                 /* low_ino: the inode -- dynamic */        8, "jiqtimer",     /* len of name and name */        S_IFREG | S_IRUGO, /* mode */        1, 0, 0,           /* nlinks, owner, group */        0, NULL,           /* size - unused; operations -- use default */        &jiq_read_timer,   /* function used to read data */        /* nothing more */    };int jiq_read_immed(char *buf, char **start, off_t offset,                   int len, int unused){    jiq_data.len = 0;                /* nothing printed, yet */    jiq_data.buf = buf;              /* print in this place */    jiq_data.jiffies = jiffies;      /* initial time */    jiq_data.queue = &tq_immediate;  /* re-register yourself here */    queue_task(&jiq_task, &tq_immediate); /* ready to run */    mark_bh(IMMEDIATE_BH);    interruptible_sleep_on(&jiq_wait);    /* sleep till completion */    return jiq_data.len;}struct proc_dir_entry jiq_proc_immed = {        0,                 /* low_ino: the inode -- dynamic */        8, "jiqimmed",     /* len of name and name */        S_IFREG | S_IRUGO, /* mode */        1, 0, 0,           /* nlinks, owner, group */        0, NULL,           /* size - unused; operations -- use default */        &jiq_read_immed,   /* function used to read data */        /* nothing more */    };/* * This one, instead, tests out the timers. */struct timer_list jiq_timer;void jiq_timedout(unsigned long ptr){    jiq_print((void *)ptr);            /* print a line */    wake_up_interruptible(&jiq_wait);  /* awake the process */}int jiq_read_run_timer(char *buf, char **start, off_t offset,                   int len, int unused){    jiq_data.len = 0;           /* prepare the argument for jiq_print() */    jiq_data.buf = buf;    jiq_data.jiffies = jiffies;    jiq_data.queue = NULL;      /* don't requeue */    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);    return jiq_data.len;}struct proc_dir_entry jiq_proc_run_timer = {        0,                 /* low_ino: the inode -- dynamic */        7, "jitimer",      /* len of name and name */        S_IFREG | S_IRUGO, /* mode */        1, 0, 0,           /* nlinks, owner, group */        0, NULL,           /* size - unused; operations -- use default */        &jiq_read_run_timer, /* function used to read data */        /* nothing more */    };/* * the init/clean material */int init_module(void){    /* this lines are in init_module() */    jiq_task.routine = jiq_print;    jiq_task.data = (void *)&jiq_data;    proc_register_dynamic(&proc_root, &jiq_proc_sched);    proc_register_dynamic(&proc_root, &jiq_proc_timer);    proc_register_dynamic(&proc_root, &jiq_proc_immed);    proc_register_dynamic(&proc_root, &jiq_proc_run_timer);#ifndef JIT_DEBUG    register_symtab(NULL); /* hide symbols */#endif    return 0; /* succeed */}void cleanup_module(void){    proc_unregister(&proc_root, jiq_proc_sched.low_ino);    proc_unregister(&proc_root, jiq_proc_timer.low_ino);    proc_unregister(&proc_root, jiq_proc_immed.low_ino);    proc_unregister(&proc_root, jiq_proc_run_timer.low_ino);}#endif /* version 1.99.4 or newer */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日产欧产美韩系列久久99| 亚洲精品日韩专区silk| 91麻豆精品国产91久久久使用方法 | 亚洲国产欧美一区二区三区丁香婷| 国产色综合一区| 国产欧美久久久精品影院| 国产午夜久久久久| 国产精品美女久久久久高潮 | 99国产精品久久久久久久久久久 | 国产精品二三区| 亚洲色图欧美在线| 亚洲精品国产精品乱码不99| 一区二区久久久久久| 亚洲成人激情av| av亚洲精华国产精华| 99精品桃花视频在线观看| 99精品欧美一区| 日本道色综合久久| 91精品久久久久久久久99蜜臂| 欧美一区二区精品久久911| 欧美一区二区三区公司| 久久久久高清精品| 最新欧美精品一区二区三区| 亚洲最快最全在线视频| 裸体歌舞表演一区二区| 国产成人av电影在线播放| 色综合久久综合网欧美综合网| 色哟哟一区二区在线观看| 欧美日韩国产精品成人| 久久免费美女视频| 一区二区三区中文免费| 秋霞电影一区二区| av一区二区不卡| 欧美一区二区三区白人| 国产精品久线观看视频| 亚洲444eee在线观看| 国产成人在线视频网址| 欧美三级日韩三级| 国产日韩欧美精品在线| 亚洲成国产人片在线观看| 国产精品69毛片高清亚洲| 欧美性大战久久| 日本一区二区成人| 日本大胆欧美人术艺术动态| av中文字幕不卡| 日韩免费看的电影| 亚洲综合丝袜美腿| 成人一级黄色片| 日韩欧美精品在线视频| 亚洲国产成人精品视频| 成人国产在线观看| 久久综合久久99| 天天色天天操综合| 日本电影欧美片| 亚洲视频在线一区二区| 国产伦精品一区二区三区免费迷| 欧美日韩视频不卡| 怡红院av一区二区三区| 白白色亚洲国产精品| 久久亚洲一级片| 久久精品国产亚洲a| 欧美日韩国产成人在线免费| 亚洲另类在线制服丝袜| 豆国产96在线|亚洲| 26uuu精品一区二区在线观看| 亚洲成人三级小说| 欧美系列在线观看| 一区二区三区精密机械公司| 一本大道久久a久久精二百| 国产精品污www在线观看| 国产91丝袜在线播放0| 亚洲不卡一区二区三区| 在线观看视频一区| 一区二区三区视频在线看| 色噜噜夜夜夜综合网| 亚洲日本免费电影| 日本高清不卡一区| 午夜成人在线视频| 91精品国产欧美日韩| 蜜桃视频第一区免费观看| 91精品欧美久久久久久动漫| 日韩av一区二区在线影视| 制服视频三区第一页精品| 男女男精品网站| 精品精品欲导航| 国产一区二区三区蝌蚪| 欧美国产日韩亚洲一区| 99这里都是精品| 亚洲狠狠爱一区二区三区| 欧美日韩国产综合久久| 久久国产乱子精品免费女| 久久久久国产成人精品亚洲午夜| 粉嫩一区二区三区在线看| 中文字幕一区二区三区在线播放| 91免费观看视频| 石原莉奈在线亚洲二区| 久久天堂av综合合色蜜桃网| 成年人午夜久久久| 亚洲福利一区二区| 精品国产乱码久久久久久牛牛| 国产高清精品久久久久| 亚洲免费电影在线| 欧美电影免费提供在线观看| 粉嫩绯色av一区二区在线观看| 伊人性伊人情综合网| 日韩一级黄色大片| 99国产麻豆精品| 麻豆国产精品视频| 亚洲免费在线视频一区 二区| 欧美高清视频一二三区 | 精油按摩中文字幕久久| 欧美激情一区二区三区全黄| 欧美丝袜丝nylons| 国产精品小仙女| 天天综合网 天天综合色| 欧美韩日一区二区三区| 欧美麻豆精品久久久久久| 国产91丝袜在线播放九色| 午夜视频久久久久久| 国产精品久久午夜夜伦鲁鲁| 51精品秘密在线观看| 91亚洲精品久久久蜜桃| 国模娜娜一区二区三区| 五月天久久比比资源色| 中文字幕亚洲精品在线观看| 日韩欧美www| 欧美三级电影在线看| 不卡在线观看av| 国产一区二区三区在线观看免费| 亚洲午夜精品网| 中文一区一区三区高中清不卡| 69堂精品视频| 欧美日韩亚洲丝袜制服| 99久久99久久精品国产片果冻| 国产一区二区三区在线观看免费视频 | 91精品国产色综合久久| 色老头久久综合| 北条麻妃一区二区三区| 国产一区二区三区在线看麻豆| 麻豆精品一二三| 日韩av在线发布| 日本aⅴ亚洲精品中文乱码| 午夜视频在线观看一区二区| 亚洲激情六月丁香| 亚洲天堂精品在线观看| 亚洲欧美在线高清| 亚洲天堂中文字幕| ●精品国产综合乱码久久久久| 亚洲国产精品精华液ab| 欧美激情在线看| 国产精品色婷婷久久58| 国产精品久久久久久久裸模| 中文字幕国产精品一区二区| 国产精品第13页| 17c精品麻豆一区二区免费| 亚洲欧美偷拍三级| 亚洲一区中文日韩| 亚洲成人在线网站| 图片区小说区国产精品视频| 偷拍日韩校园综合在线| 日韩国产欧美在线观看| 蜜臀国产一区二区三区在线播放| 麻豆精品视频在线观看| 国产成人精品免费在线| caoporn国产精品| 欧美中文字幕久久| 欧美久久久久久久久中文字幕| 91精品麻豆日日躁夜夜躁| 亚洲精品一区二区三区蜜桃下载 | 亚洲免费av高清| 午夜免费久久看| 国产一区二区精品在线观看| 高清不卡一区二区在线| 在线观看日韩毛片| 欧美一区二区三区视频免费播放 | 色偷偷久久一区二区三区| 欧美在线综合视频| 日韩精品一区在线| 亚洲欧洲成人av每日更新| 婷婷久久综合九色综合绿巨人| 久久国产精品99久久久久久老狼| 丁香啪啪综合成人亚洲小说| 在线欧美小视频| 日韩欧美久久久| 亚洲欧洲成人精品av97| 免费人成精品欧美精品| 99久久综合狠狠综合久久| 555夜色666亚洲国产免| 国产日韩精品一区二区浪潮av | 91精品国产入口| 日本一区二区久久| 日韩av电影天堂| 99久久精品情趣| 91精品国产综合久久国产大片| 国产精品二区一区二区aⅴ污介绍| 五月婷婷久久丁香| 波多野结衣一区二区三区 | 亚洲一区二区精品视频| 成人中文字幕合集| 日韩一区二区三区观看|