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

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

?? appldata_base.c

?? 優龍2410linux2.6.8內核源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* * arch/s390/appldata/appldata_base.c * * Base infrastructure for Linux-z/VM Monitor Stream, Stage 1. * Exports appldata_register_ops() and appldata_unregister_ops() for the * data gathering modules. * * Copyright (C) 2003 IBM Corporation, IBM Deutschland Entwicklung GmbH. * * Author: Gerald Schaefer <geraldsc@de.ibm.com> */#include <linux/config.h>#include <linux/module.h>#include <linux/init.h>#include <linux/slab.h>#include <linux/errno.h>#include <asm/uaccess.h>#include <asm/io.h>#include <asm/smp.h>#include <linux/interrupt.h>#include <linux/proc_fs.h>#include <linux/page-flags.h>#include <linux/swap.h>#include <linux/pagemap.h>#include <linux/sysctl.h>#include <asm/timer.h>//#include <linux/kernel_stat.h>#include <linux/notifier.h>#include <linux/cpu.h>#include "appldata.h"#define MY_PRINT_NAME	"appldata"		/* for debug messages, etc. */#define APPLDATA_CPU_INTERVAL	10000		/* default (CPU) time for						   sampling interval in						   milliseconds */#define TOD_MICRO	0x01000			/* nr. of TOD clock units						   for 1 microsecond */#ifndef CONFIG_ARCH_S390X#define APPLDATA_START_INTERVAL_REC 0x00   	/* Function codes for */#define APPLDATA_STOP_REC	    0x01	/* DIAG 0xDC	  */#define APPLDATA_GEN_EVENT_RECORD   0x02#define APPLDATA_START_CONFIG_REC   0x03#else#define APPLDATA_START_INTERVAL_REC 0x80#define APPLDATA_STOP_REC   	    0x81#define APPLDATA_GEN_EVENT_RECORD   0x82#define APPLDATA_START_CONFIG_REC   0x83#endif /* CONFIG_ARCH_S390X *//* * Parameter list for DIAGNOSE X'DC' */#ifndef CONFIG_ARCH_S390Xstruct appldata_parameter_list {	u16 diag;		/* The DIAGNOSE code X'00DC'          */	u8  function;		/* The function code for the DIAGNOSE */	u8  parlist_length;	/* Length of the parameter list       */	u32 product_id_addr;	/* Address of the 16-byte product ID  */	u16 reserved;	u16 buffer_length;	/* Length of the application data buffer  */	u32 buffer_addr;	/* Address of the application data buffer */};#elsestruct appldata_parameter_list {	u16 diag;	u8  function;	u8  parlist_length;	u32 unused01;	u16 reserved;	u16 buffer_length;	u32 unused02;	u64 product_id_addr;	u64 buffer_addr;};#endif /* CONFIG_ARCH_S390X *//* * /proc entries (sysctl) */static const char appldata_proc_name[APPLDATA_PROC_NAME_LENGTH] = "appldata";static int appldata_timer_handler(ctl_table *ctl, int write, struct file *filp,				  void __user *buffer, size_t *lenp, loff_t *ppos);static int appldata_interval_handler(ctl_table *ctl, int write,					 struct file *filp,					 void __user *buffer,					 size_t *lenp, loff_t *ppos);static struct ctl_table_header *appldata_sysctl_header;static struct ctl_table appldata_table[] = {	{		.ctl_name	= CTL_APPLDATA_TIMER,		.procname	= "timer",		.mode		= S_IRUGO | S_IWUSR,		.proc_handler	= &appldata_timer_handler,	},	{		.ctl_name	= CTL_APPLDATA_INTERVAL,		.procname	= "interval",		.mode		= S_IRUGO | S_IWUSR,		.proc_handler	= &appldata_interval_handler,	},	{ .ctl_name = 0 }};static struct ctl_table appldata_dir_table[] = {	{		.ctl_name	= CTL_APPLDATA,		.procname	= appldata_proc_name,		.maxlen		= 0,		.mode		= S_IRUGO | S_IXUGO,		.child		= appldata_table,	},	{ .ctl_name = 0 }};/* * Timer */DEFINE_PER_CPU(struct vtimer_list, appldata_timer);static atomic_t appldata_expire_count = ATOMIC_INIT(0);static spinlock_t appldata_timer_lock = SPIN_LOCK_UNLOCKED;static int appldata_interval = APPLDATA_CPU_INTERVAL;static int appldata_timer_active;/* * Tasklet */static struct tasklet_struct appldata_tasklet_struct;/* * Ops list */static spinlock_t appldata_ops_lock = SPIN_LOCK_UNLOCKED;static LIST_HEAD(appldata_ops_list);/************************* timer, tasklet, DIAG ******************************//* * appldata_timer_function() * * schedule tasklet and reschedule timer */static void appldata_timer_function(unsigned long data, struct pt_regs *regs){	P_DEBUG("   -= Timer =-\n");	P_DEBUG("CPU: %i, expire_count: %i\n", smp_processor_id(),		atomic_read(&appldata_expire_count));	if (atomic_dec_and_test(&appldata_expire_count)) {		atomic_set(&appldata_expire_count, num_online_cpus());		tasklet_schedule((struct tasklet_struct *) data);	}}/* * appldata_tasklet_function() * * call data gathering function for each (active) module */static void appldata_tasklet_function(unsigned long data){	struct list_head *lh;	struct appldata_ops *ops;	int i;	P_DEBUG("  -= Tasklet =-\n");	i = 0;	spin_lock(&appldata_ops_lock);	list_for_each(lh, &appldata_ops_list) {		ops = list_entry(lh, struct appldata_ops, list);		P_DEBUG("list_for_each loop: %i) active = %u, name = %s\n",			++i, ops->active, ops->name);		if (ops->active == 1) {			ops->callback(ops->data);		}	}	spin_unlock(&appldata_ops_lock);}/* * appldata_diag() * * prepare parameter list, issue DIAG 0xDC */static int appldata_diag(char record_nr, u16 function, unsigned long buffer,			u16 length){	unsigned long ry;	struct appldata_product_id {		char prod_nr[7];			/* product nr. */		char prod_fn[2];			/* product function */		char record_nr;				/* record nr. */		char version_nr[2];			/* version */		char release_nr[2];			/* release */		char mod_lvl[2];			/* modification lvl. */	} appldata_product_id = {	/* all strings are EBCDIC, record_nr is byte */		.prod_nr    = {0xD3, 0xC9, 0xD5, 0xE4,				0xE7, 0xD2, 0xD9},	/* "LINUXKR" */		.prod_fn    = {0xD5, 0xD3},		/* "NL" */		.record_nr  = record_nr,		.version_nr = {0xF2, 0xF6},		/* "26" */		.release_nr = {0xF0, 0xF1},		/* "01" */		.mod_lvl    = {0xF0, 0xF0},		/* "00" */	};	struct appldata_parameter_list appldata_parameter_list = {				.diag = 0xDC,				.function = function,				.parlist_length =					sizeof(appldata_parameter_list),				.buffer_length = length,				.product_id_addr =					(unsigned long) &appldata_product_id,				.buffer_addr = virt_to_phys((void *) buffer)	};	if (!MACHINE_IS_VM)		return -ENOSYS;	ry = -1;	asm volatile(			"diag %1,%0,0xDC\n\t"			: "=d" (ry) : "d" (&(appldata_parameter_list)) : "cc");	return (int) ry;}/********************** timer, tasklet, DIAG <END> ***************************//****************************** /proc stuff **********************************//* * appldata_mod_vtimer_wrap() * * wrapper function for mod_virt_timer(), because smp_call_function_on() * accepts only one parameter. */static void __appldata_mod_vtimer_wrap(void *p) {	struct {		struct vtimer_list *timer;		u64    expires;	} *args = p;	mod_virt_timer(args->timer, args->expires);}#define APPLDATA_ADD_TIMER	0#define APPLDATA_DEL_TIMER	1#define APPLDATA_MOD_TIMER	2/* * __appldata_vtimer_setup() * * Add, delete or modify virtual timers on all online cpus. * The caller needs to get the appldata_timer_lock spinlock. */static void__appldata_vtimer_setup(int cmd){	u64 per_cpu_interval;	int i;	switch (cmd) {	case APPLDATA_ADD_TIMER:		if (appldata_timer_active)			break;		per_cpu_interval = (u64) (appldata_interval*1000 /					  num_online_cpus()) * TOD_MICRO;		for_each_online_cpu(i) {			per_cpu(appldata_timer, i).expires = per_cpu_interval;			smp_call_function_on(add_virt_timer_periodic,					     &per_cpu(appldata_timer, i),					     0, 1, i);		}		appldata_timer_active = 1;		P_INFO("Monitoring timer started.\n");		break;	case APPLDATA_DEL_TIMER:		for_each_online_cpu(i)			del_virt_timer(&per_cpu(appldata_timer, i));		if (!appldata_timer_active)			break;		appldata_timer_active = 0;		atomic_set(&appldata_expire_count, num_online_cpus());		P_INFO("Monitoring timer stopped.\n");		break;	case APPLDATA_MOD_TIMER:		per_cpu_interval = (u64) (appldata_interval*1000 /					  num_online_cpus()) * TOD_MICRO;		if (!appldata_timer_active)			break;		for_each_online_cpu(i) {			struct {				struct vtimer_list *timer;				u64    expires;			} args;			args.timer = &per_cpu(appldata_timer, i);			args.expires = per_cpu_interval;			smp_call_function_on(__appldata_mod_vtimer_wrap,					     &args, 0, 1, i);		}	}}/* * appldata_timer_handler() * * Start/Stop timer, show status of timer (0 = not active, 1 = active) */static intappldata_timer_handler(ctl_table *ctl, int write, struct file *filp,			   void __user *buffer, size_t *lenp, loff_t *ppos){	int len;	char buf[2];	if (!*lenp || *ppos) {		*lenp = 0;		return 0;	}	if (!write) {		len = sprintf(buf, appldata_timer_active ? "1\n" : "0\n");		if (len > *lenp)			len = *lenp;		if (copy_to_user(buffer, buf, len))			return -EFAULT;		goto out;	}	len = *lenp;	if (copy_from_user(buf, buffer, len > sizeof(buf) ? sizeof(buf) : len))		return -EFAULT;	spin_lock(&appldata_timer_lock);	if (buf[0] == '1')		__appldata_vtimer_setup(APPLDATA_ADD_TIMER);	else if (buf[0] == '0')		__appldata_vtimer_setup(APPLDATA_DEL_TIMER);	spin_unlock(&appldata_timer_lock);out:	*lenp = len;	*ppos += len;	return 0;}/* * appldata_interval_handler() * * Set (CPU) timer interval for collection of data (in milliseconds), show * current timer interval. */static intappldata_interval_handler(ctl_table *ctl, int write, struct file *filp,			   void __user *buffer, size_t *lenp, loff_t *ppos){	int len, interval;	char buf[16];	if (!*lenp || *ppos) {		*lenp = 0;		return 0;	}	if (!write) {		len = sprintf(buf, "%i\n", appldata_interval);		if (len > *lenp)			len = *lenp;		if (copy_to_user(buffer, buf, len))			return -EFAULT;		goto out;	}	len = *lenp;	if (copy_from_user(buf, buffer, len > sizeof(buf) ? sizeof(buf) : len)) {		return -EFAULT;	}	sscanf(buf, "%i", &interval);	if (interval <= 0) {		P_ERROR("Timer CPU interval has to be > 0!\n");		return -EINVAL;	}	spin_lock(&appldata_timer_lock);	appldata_interval = interval;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
www.欧美亚洲| 日韩精品资源二区在线| 亚洲国产成人91porn| 91精品国模一区二区三区| 国精产品一区一区三区mba桃花| 日韩午夜三级在线| youjizz国产精品| 奇米影视在线99精品| 久久精品视频在线免费观看| 一本一道久久a久久精品 | 99国产欧美另类久久久精品 | 一区二区在线观看视频 | 欧美一级理论性理论a| 成人高清伦理免费影院在线观看| 亚洲永久精品大片| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆 | 91成人免费在线视频| 国产一区二区三区精品视频| 亚洲观看高清完整版在线观看| 欧美国产欧美综合| 精品播放一区二区| 国产亚洲成av人在线观看导航| 国产日韩视频一区二区三区| 欧美一级片在线| 日韩欧美色电影| 日韩欧美一区二区久久婷婷| 欧美日本视频在线| 欧美日韩精品一区二区| 欧洲精品一区二区三区在线观看| 国产成人激情av| 国产剧情一区在线| 99视频一区二区| 欧美性感一区二区三区| 欧美日韩国产成人在线91| 欧美一区二区视频网站| 欧美精品一区二区三区蜜桃| 精品国产a毛片| 亚洲国产精品人人做人人爽| 奇米色777欧美一区二区| 午夜精品影院在线观看| 久久99久久99精品免视看婷婷| 国产在线精品一区二区| 国产伦精品一区二区三区视频青涩 | 在线免费观看日本欧美| 6080yy午夜一二三区久久| 精品国产一区二区精华| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 久久这里只有精品首页| 亚洲黄色录像片| 国产成人午夜精品影院观看视频 | 欧美三级欧美一级| 中文字幕欧美区| 蜜臀av亚洲一区中文字幕| 成人激情开心网| 欧美一级理论片| 亚洲综合色视频| 国产精品夜夜爽| 欧美一区二区三区免费在线看| 亚洲国产精品ⅴa在线观看| 奇米888四色在线精品| 欧美日韩久久一区| 婷婷开心久久网| 欧美群妇大交群的观看方式| 悠悠色在线精品| 色狠狠一区二区| 亚洲国产精品麻豆| 91麻豆精品国产91久久久更新时间 | 日韩欧美一级二级| 亚洲综合在线观看视频| 成人综合婷婷国产精品久久蜜臀 | 97国产一区二区| 国产精品护士白丝一区av| 国产精品18久久久久久久久久久久| 精品视频免费在线| 亚洲午夜在线电影| 91丨porny丨在线| 专区另类欧美日韩| 色狠狠桃花综合| 久久久五月婷婷| 久久国产精品72免费观看| 8x8x8国产精品| 麻豆专区一区二区三区四区五区| 欧洲av一区二区嗯嗯嗯啊| 一区二区三区中文在线观看| 在线观看日韩高清av| 三级久久三级久久| 亚洲欧美在线高清| 欧美亚洲国产一区二区三区| 亚洲成人av电影在线| 日韩精品一区二区三区视频在线观看| 青娱乐精品在线视频| 精品精品欲导航| 91免费看视频| 亚洲电影激情视频网站| 精品久久免费看| 色婷婷综合久久久| 久久国产婷婷国产香蕉| 自拍偷拍亚洲综合| 日韩免费观看高清完整版在线观看| 韩日av一区二区| 亚洲一区二区高清| 国产亚洲欧美色| 日韩午夜av电影| 91社区在线播放| 欧美一级黄色录像| 伊人婷婷欧美激情| 国产99精品在线观看| 尤物视频一区二区| 欧美精品一区二区三区视频| 色婷婷激情久久| 91网站视频在线观看| 成人av在线电影| 国产在线精品免费av| 麻豆精品视频在线| 亚洲电影中文字幕在线观看| 国产精品美日韩| 欧美日韩精品免费观看视频| 99精品视频一区二区| 成人综合在线视频| 国产iv一区二区三区| 紧缚奴在线一区二区三区| 污片在线观看一区二区| 一个色妞综合视频在线观看| 亚洲欧美一区二区久久| 一区二区三区在线观看网站| 亚洲精品国产一区二区精华液 | 欧洲精品一区二区三区在线观看| 99久久精品国产一区二区三区 | 不卡的av电影| 91丝袜呻吟高潮美腿白嫩在线观看| 91在线小视频| 欧美一区二区三区四区久久| 久久久精品国产99久久精品芒果| 欧美精品一区二区三区在线播放| 日韩欧美国产不卡| 日韩伦理电影网| 亚洲va欧美va天堂v国产综合| 日韩高清不卡在线| 国产成人激情av| 91精品国产乱| 亚洲男同1069视频| 国产激情91久久精品导航| 色综合天天综合网天天看片| 日韩午夜精品电影| 国产农村妇女精品| 午夜精品福利久久久| 日韩二区三区四区| 色综合一个色综合| 99精品视频一区二区| 日韩欧美一二三| 亚洲欧美另类久久久精品| 国产一区二区三区不卡在线观看 | 91麻豆国产在线观看| 国产亚洲精久久久久久| 老司机免费视频一区二区三区| 91丨九色丨尤物| 国产欧美精品在线观看| 免费xxxx性欧美18vr| 日本乱码高清不卡字幕| 日本一区二区三区高清不卡| 婷婷中文字幕综合| 欧美日韩五月天| 亚洲成人免费电影| 欧美日本乱大交xxxxx| 午夜激情综合网| 日韩一区二区三区四区五区六区| 爽爽淫人综合网网站| 日韩一区二区免费在线电影| 日韩电影在线一区| 日韩欧美国产一区在线观看| 麻豆久久一区二区| 久久亚区不卡日本| 国产福利一区二区三区在线视频| 国产午夜精品美女毛片视频| 福利一区在线观看| 亚洲欧洲成人精品av97| 色拍拍在线精品视频8848| 亚洲图片有声小说| 日韩欧美国产小视频| 国产69精品久久久久777| 亚洲一区在线观看免费| 欧美大片一区二区| 久久国产精品免费| 一区二区三区四区不卡在线| 欧美日韩国产影片| 国产成人无遮挡在线视频| 国产精品视频第一区| 欧美视频中文字幕| 丁香婷婷综合网| 日韩国产高清影视| 亚洲电影一级片| 国产日韩欧美高清| 欧美一级高清片在线观看| 国产原创一区二区三区| 日本最新不卡在线| 亚洲男人天堂av网| 国产精品电影一区二区三区| 亚洲精品一区二区三区精华液| 95精品视频在线| 91香蕉视频mp4|