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

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

?? jiq.c

?? LINUX設備驅動2源代碼
?? 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一区二区三区免费野_久草精品视频
色屁屁一区二区| 成人高清免费观看| 亚洲精品视频免费看| 精品sm捆绑视频| 久久这里只有精品首页| 日韩欧美区一区二| www欧美成人18+| 国产视频亚洲色图| 国产精品欧美一区喷水| 欧美韩国日本综合| 国产精品久久久久久久久图文区| 欧美激情中文字幕一区二区| 国产精品无人区| 国产精品初高中害羞小美女文| 国产精品久久久久久久久免费桃花| 国产精品视频一二| 一区二区三区 在线观看视频| 亚洲一区二区av在线| 天天亚洲美女在线视频| 日韩精品久久久久久| 久久99国产精品久久99| 国产一区二区三区视频在线播放| 国产91精品免费| 在线免费不卡视频| 日韩欧美123| 亚洲色图制服诱惑| 亚洲电影你懂得| 国产毛片精品视频| 911精品产国品一二三产区| 欧美一二三区在线观看| 国产日韩欧美精品综合| 亚洲一区中文在线| 久久99久久99精品免视看婷婷 | 精品日本一线二线三线不卡| 91成人网在线| 成年人午夜久久久| 在线国产电影不卡| 久久伊99综合婷婷久久伊| 中文字幕一区免费在线观看| 亚洲国产精品久久久久婷婷884| 久久成人免费网站| 欧美性xxxxxxxx| 国产人成一区二区三区影院| 一区二区三区在线视频免费观看| 蜜桃在线一区二区三区| 99精品热视频| 久久精品一区二区三区av| 亚洲高清三级视频| 国产成人a级片| 欧美一区二区三区视频免费播放| 欧美国产乱子伦| 蜜臀av性久久久久蜜臀aⅴ流畅| 91丨九色丨尤物| 欧美激情中文字幕一区二区| 日本成人在线电影网| 91色综合久久久久婷婷| 国产亚洲欧美激情| 久久精品国产第一区二区三区| 色哟哟日韩精品| 亚洲国产精品99久久久久久久久 | 欧美精品v日韩精品v韩国精品v| 久久中文字幕电影| 麻豆一区二区三| 欧美福利视频一区| 亚洲精品免费在线| 91免费小视频| 亚洲视频综合在线| av在线不卡网| 一区在线播放视频| 91亚洲精华国产精华精华液| 久久久99久久精品欧美| 激情偷乱视频一区二区三区| 5566中文字幕一区二区电影| 午夜视频在线观看一区二区三区| 欧美亚洲高清一区二区三区不卡| 亚洲色图在线视频| 色综合天天综合狠狠| 日本一区二区久久| 国产精品资源在线看| 精品久久久久久久人人人人传媒| 日韩精品色哟哟| 日韩视频免费观看高清完整版在线观看 | eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 成人性生交大合| 国产视频一区二区三区在线观看| 国产尤物一区二区在线| 久久精品人人做人人综合 | 国产伦精品一区二区三区免费 | 91亚洲午夜精品久久久久久| 中文字幕在线免费不卡| 91黄色在线观看| 日韩有码一区二区三区| 欧美大片拔萝卜| 国产传媒日韩欧美成人| 中文字幕一区二区三区在线不卡 | 精品欧美一区二区久久| 国产麻豆午夜三级精品| 国产精品免费观看视频| 在线观看国产精品网站| 日本一区中文字幕| 国产精品毛片高清在线完整版| 91女人视频在线观看| 日韩av中文字幕一区二区| 久久夜色精品国产欧美乱极品| 国产精品乡下勾搭老头1| 综合激情成人伊人| 欧美日韩国产高清一区二区 | 91免费国产视频网站| 午夜电影网亚洲视频| 精品国产一区二区三区久久影院 | 久久久国产精品午夜一区ai换脸| 成人av资源在线观看| 亚洲图片有声小说| 国产欧美日韩卡一| 欧美日韩一区二区不卡| 国产精品456露脸| 天堂va蜜桃一区二区三区漫画版| 久久久久久久久久久99999| 在线一区二区三区四区五区| 九九久久精品视频| 亚洲午夜在线电影| 中文字幕国产一区| 日韩三级中文字幕| 91女厕偷拍女厕偷拍高清| 韩国成人在线视频| 亚洲v精品v日韩v欧美v专区| 中文字幕第一页久久| 日韩免费一区二区| 欧美日韩精品一二三区| 99视频精品全部免费在线| 蜜桃视频一区二区三区在线观看| 亚洲女爱视频在线| 欧美激情中文不卡| 久久综合狠狠综合| 日韩欧美一级精品久久| 欧美日本一道本在线视频| av在线播放成人| 国产电影一区在线| 久久99深爱久久99精品| 日韩激情中文字幕| 亚洲成人免费电影| 亚洲一区av在线| 亚洲久草在线视频| 中文字幕一区在线| 综合久久久久综合| 国产精品美女一区二区三区 | 日本一区二区三区免费乱视频| 91麻豆精品久久久久蜜臀| 欧美日韩亚洲国产综合| 91福利在线观看| 色哟哟日韩精品| 欧美中文字幕一区二区三区| 成人av片在线观看| 91免费国产在线观看| 色哟哟一区二区在线观看| 99久久久精品| 一本色道久久综合亚洲精品按摩| 99久久婷婷国产综合精品| 国产jizzjizz一区二区| 成人av网在线| 在线视频一区二区免费| 在线观看亚洲专区| 6080日韩午夜伦伦午夜伦| 91精品婷婷国产综合久久性色| 欧美一区二区在线免费播放| 日韩一二三区不卡| 久久久久一区二区三区四区| 国产日韩欧美高清| 综合亚洲深深色噜噜狠狠网站| 亚洲美女少妇撒尿| 午夜精品久久久久久久久久久| 日韩高清中文字幕一区| 久久er99精品| 99久久精品费精品国产一区二区 | 欧美96一区二区免费视频| 久久精品国产在热久久| 国产精品综合一区二区| jlzzjlzz亚洲女人18| 欧美福利视频导航| 久久久国产精品麻豆| 亚洲另类在线一区| 美国毛片一区二区| 99精品热视频| 欧美日韩一本到| 久久精品欧美一区二区三区不卡 | 精品少妇一区二区三区视频免付费| 久久婷婷一区二区三区| 亚洲视频免费在线| 日本不卡一区二区三区 | 亚洲r级在线视频| 国产伦精一区二区三区| 91精品办公室少妇高潮对白| 91精品国产综合久久精品app| 国产欧美视频一区二区三区| 一区二区三区欧美在线观看| 激情综合五月天| 欧美日韩一区二区电影| 国产精品色婷婷久久58| 日本女人一区二区三区| 91麻豆精东视频|