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

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

?? jiq.c

?? Linux設備驅動程序第二版
?? C
字號:
/* * jiq.c -- the just-in-queue module (v2.1) * * 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>#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 */#include "sysdep-2.1.h"/* * 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 in_intrpt  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,                 (long)in_interrupt(), 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    EXPORT_NO_SYMBOLS; /* 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);}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产亚洲成年网址在线观看| 26uuu亚洲| 99精品热视频| 成人精品视频一区二区三区| 国产成人精品三级| 国产高清一区日本| 成人国产精品免费| 99久久综合精品| 91高清视频在线| 日本韩国欧美三级| 欧美日本精品一区二区三区| 91黄视频在线观看| 欧美精品视频www在线观看| 制服丝袜亚洲播放| 亚洲视频 欧洲视频| 国产精品久久精品日日| 一区二区三区鲁丝不卡| 亚洲午夜久久久久久久久电影网 | 精品sm捆绑视频| 欧美成人bangbros| 久久精品视频免费观看| 中文字幕日韩av资源站| 一区二区三区国产| 日本免费新一区视频 | 久久综合久久综合久久综合| 国产婷婷色一区二区三区在线| 中文字幕第一区二区| 亚洲精品中文在线观看| 日韩电影免费一区| 国产乱码精品一区二区三区忘忧草| 大美女一区二区三区| 在线欧美一区二区| 精品国精品自拍自在线| 亚洲啪啪综合av一区二区三区| 亚洲午夜电影在线| 国产乱国产乱300精品| 欧美性高清videossexo| 久久综合狠狠综合久久激情 | 色噜噜久久综合| 欧美xxxxxxxx| 蜜桃久久久久久| 国产福利不卡视频| 欧美精品丝袜中出| 1024成人网| 韩国av一区二区| 欧美日韩一区久久| 中文字幕一区二区三区不卡在线 | 久久综合综合久久综合| 99riav一区二区三区| 精品久久久三级丝袜| 一区二区三区四区在线免费观看| 国产在线不卡一区| 欧美一区二区三区在线观看视频| 国产欧美视频一区二区| 蜜臀精品一区二区三区在线观看| 91影院在线观看| 久久久久久久久久久久久久久99| 午夜精品福利久久久| 91女厕偷拍女厕偷拍高清| 久久久美女毛片| 麻豆国产一区二区| 欧美精品一二三| 伊人夜夜躁av伊人久久| proumb性欧美在线观看| 久久综合成人精品亚洲另类欧美| 奇米精品一区二区三区在线观看| 欧美亚洲综合在线| 一区二区三区日本| 97se狠狠狠综合亚洲狠狠| 欧美激情综合网| 国产精品一二一区| 国产三级一区二区| 国产真实乱偷精品视频免| 777午夜精品视频在线播放| 亚洲精品高清视频在线观看| 91亚洲午夜精品久久久久久| 欧美国产成人精品| 成人h动漫精品一区二区| 中文字幕精品在线不卡| 国产91综合网| 国产精品初高中害羞小美女文| 国产伦理精品不卡| 国产欧美精品区一区二区三区| 国产一区二区美女诱惑| 国产三级久久久| 9人人澡人人爽人人精品| 中文字幕佐山爱一区二区免费| 99久久免费视频.com| 18成人在线视频| 欧美在线短视频| 视频一区二区不卡| 91精品国产欧美一区二区| 久久疯狂做爰流白浆xx| 久久精品人人做人人爽97| 福利视频网站一区二区三区| 成人免费一区二区三区在线观看 | 欧美三级在线播放| 麻豆一区二区三区| 久久久久久9999| 91蜜桃婷婷狠狠久久综合9色| 玉米视频成人免费看| 欧美电影免费观看完整版| 国产传媒一区在线| 一级特黄大欧美久久久| 欧美一级夜夜爽| 成人免费黄色在线| 亚洲成人黄色影院| 国产亚洲婷婷免费| 欧日韩精品视频| 韩国精品主播一区二区在线观看 | 亚洲国产美女搞黄色| 精品久久久久久久久久久久久久久久久 | 日韩电影在线观看网站| 久久久久国产精品麻豆ai换脸| 99国产欧美久久久精品| 免费成人在线影院| 日韩伦理免费电影| 精品欧美一区二区在线观看 | 亚洲一区二区视频在线观看| 日韩欧美一区二区免费| 91网上在线视频| 狠狠久久亚洲欧美| 亚洲午夜在线电影| 国产精品久久久久久久久久免费看 | 亚洲综合免费观看高清在线观看| 日韩欧美一区二区免费| 在线观看免费一区| 成人在线综合网站| 久久99精品久久久久久久久久久久 | 亚洲日本韩国一区| 国产亚洲综合av| 欧美一卡2卡三卡4卡5免费| 色综合天天天天做夜夜夜夜做| 九九九久久久精品| 日韩国产精品91| 亚洲韩国精品一区| 亚洲日本一区二区三区| 欧美激情在线一区二区| 久久综合五月天婷婷伊人| 91麻豆精品国产91久久久久久久久 | 99热这里都是精品| 成人一区二区在线观看| 久久99国产精品尤物| 蜜臀99久久精品久久久久久软件| 亚洲国产精品视频| 一区二区三区四区乱视频| 日韩理论电影院| 国产精品久久久久久久蜜臀 | 亚洲一区国产视频| 一区二区三区资源| 中文字幕一区二区不卡| 国产精品国产a级| 日韩理论电影院| 亚洲视频在线观看三级| 亚洲色图另类专区| 亚洲免费观看视频| 亚洲电影一区二区三区| 亚洲午夜精品17c| 污片在线观看一区二区| 婷婷激情综合网| 久久国产精品无码网站| 国产一区二区三区在线看麻豆| 国产精品亚洲а∨天堂免在线| 国产精品亚洲一区二区三区妖精| 国产99精品在线观看| av网站免费线看精品| 91传媒视频在线播放| 4hu四虎永久在线影院成人| 日韩精品在线一区二区| 国产性做久久久久久| 亚洲视频图片小说| 亚洲第一福利视频在线| 日本美女视频一区二区| 国产一区二区三区高清播放| 成人一区二区三区视频在线观看 | 欧美在线观看视频一区二区三区| 欧美亚洲动漫精品| 精品国产百合女同互慰| 日本一二三四高清不卡| 亚洲乱码国产乱码精品精小说| 丝袜美腿亚洲色图| 国产91精品精华液一区二区三区 | 99久久精品99国产精品| 欧美手机在线视频| 久久人人超碰精品| 亚洲一区中文日韩| 国产一区二区不卡老阿姨| 色欧美片视频在线观看在线视频| 在线播放91灌醉迷j高跟美女| 久久亚洲免费视频| 亚洲午夜一区二区三区| 国产麻豆欧美日韩一区| 欧洲一区在线电影| 久久久久成人黄色影片| 视频一区国产视频| 9色porny自拍视频一区二区| 精品国免费一区二区三区| 亚洲综合激情网| 成人毛片在线观看| 日韩精品一区二区三区中文不卡|