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

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

?? cmm.c

?? 優龍2410linux2.6.8內核源代碼
?? C
字號:
/* *  arch/s390/mm/cmm.c * *  S390 version *    Copyright (C) 2003 IBM Deutschland Entwicklung GmbH, IBM Corporation *    Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com) * *  Collaborative memory management interface. */#include <linux/config.h>#include <linux/errno.h>#include <linux/fs.h>#include <linux/init.h>#include <linux/module.h>#include <linux/sched.h>#include <linux/sysctl.h>#include <linux/ctype.h>#include <asm/pgalloc.h>#include <asm/uaccess.h>#include <asm/smp.h>#include "../../../drivers/s390/net/smsgiucv.h"#define CMM_NR_PAGES ((PAGE_SIZE / sizeof(unsigned long)) - 2)struct cmm_page_array {	struct cmm_page_array *next;	unsigned long index;	unsigned long pages[CMM_NR_PAGES];};static long cmm_pages = 0;static long cmm_timed_pages = 0;static volatile long cmm_pages_target = 0;static volatile long cmm_timed_pages_target = 0;static long cmm_timeout_pages = 0;static long cmm_timeout_seconds = 0;static struct cmm_page_array *cmm_page_list = 0;static struct cmm_page_array *cmm_timed_page_list = 0;static unsigned long cmm_thread_active = 0;static struct work_struct cmm_thread_starter;static wait_queue_head_t cmm_thread_wait;static struct timer_list cmm_timer;static void cmm_timer_fn(unsigned long);static void cmm_set_timer(void);static longcmm_strtoul(const char *cp, char **endp){	unsigned int base = 10;	if (*cp == '0') {		base = 8;		cp++;		if ((*cp == 'x' || *cp == 'X') && isxdigit(cp[1])) {			base = 16;			cp++;		}	}	return simple_strtoul(cp, endp, base);}static longcmm_alloc_pages(long pages, long *counter, struct cmm_page_array **list){	struct cmm_page_array *pa;	unsigned long page;	pa = *list;	while (pages) {		page = __get_free_page(GFP_NOIO);		if (!page)			break;		if (!pa || pa->index >= CMM_NR_PAGES) {			/* Need a new page for the page list. */			pa = (struct cmm_page_array *)				__get_free_page(GFP_NOIO);			if (!pa) {				free_page(page);				break;			}			pa->next = *list;			pa->index = 0;			*list = pa;		}		diag10(page);		pa->pages[pa->index++] = page;		(*counter)++;		pages--;	}	return pages;}static voidcmm_free_pages(long pages, long *counter, struct cmm_page_array **list){	struct cmm_page_array *pa;	unsigned long page;	pa = *list;	while (pages) {		if (!pa || pa->index <= 0)			break;		page = pa->pages[--pa->index];		if (pa->index == 0) {			pa = pa->next;			free_page((unsigned long) *list);			*list = pa;		}		free_page(page);		(*counter)--;		pages--;	}}static intcmm_thread(void *dummy){	int rc;	daemonize("cmmthread");	set_cpus_allowed(current, cpumask_of_cpu(0));	while (1) {		rc = wait_event_interruptible(cmm_thread_wait,			(cmm_pages != cmm_pages_target ||			 cmm_timed_pages != cmm_timed_pages_target));		if (rc == -ERESTARTSYS) {			/* Got kill signal. End thread. */			clear_bit(0, &cmm_thread_active);			cmm_pages_target = cmm_pages;			cmm_timed_pages_target = cmm_timed_pages;			break;		}		if (cmm_pages_target > cmm_pages) {			if (cmm_alloc_pages(1, &cmm_pages, &cmm_page_list))				cmm_pages_target = cmm_pages;		} else if (cmm_pages_target < cmm_pages) {			cmm_free_pages(1, &cmm_pages, &cmm_page_list);		}		if (cmm_timed_pages_target > cmm_timed_pages) {			if (cmm_alloc_pages(1, &cmm_timed_pages,					   &cmm_timed_page_list))				cmm_timed_pages_target = cmm_timed_pages;		} else if (cmm_timed_pages_target < cmm_timed_pages) {			cmm_free_pages(1, &cmm_timed_pages,			       	       &cmm_timed_page_list);		}		if (cmm_timed_pages > 0 && !timer_pending(&cmm_timer))			cmm_set_timer();	}	return 0;}static voidcmm_start_thread(void){	kernel_thread(cmm_thread, 0, 0);}static voidcmm_kick_thread(void){	if (!test_and_set_bit(0, &cmm_thread_active))		schedule_work(&cmm_thread_starter);	wake_up(&cmm_thread_wait);}static voidcmm_set_timer(void){	if (cmm_timed_pages_target <= 0 || cmm_timeout_seconds <= 0) {		if (timer_pending(&cmm_timer))			del_timer(&cmm_timer);		return;	}	if (timer_pending(&cmm_timer)) {		if (mod_timer(&cmm_timer, jiffies + cmm_timeout_seconds*HZ))			return;	}	cmm_timer.function = cmm_timer_fn;	cmm_timer.data = 0;	cmm_timer.expires = jiffies + cmm_timeout_seconds*HZ;	add_timer(&cmm_timer);}static voidcmm_timer_fn(unsigned long ignored){	long pages;	pages = cmm_timed_pages_target - cmm_timeout_pages;	if (pages < 0)		cmm_timed_pages_target = 0;	else		cmm_timed_pages_target = pages;	cmm_kick_thread();	cmm_set_timer();}voidcmm_set_pages(long pages){	cmm_pages_target = pages;	cmm_kick_thread();}longcmm_get_pages(void){	return cmm_pages;}voidcmm_add_timed_pages(long pages){	cmm_timed_pages_target += pages;	cmm_kick_thread();}longcmm_get_timed_pages(void){	return cmm_timed_pages;}voidcmm_set_timeout(long pages, long seconds){	cmm_timeout_pages = pages;	cmm_timeout_seconds = seconds;	cmm_set_timer();}static inline intcmm_skip_blanks(char *cp, char **endp){	char *str;	for (str = cp; *str == ' ' || *str == '\t'; str++);	*endp = str;	return str != cp;}#ifdef CONFIG_CMM_PROC/* These will someday get removed. */#define VM_CMM_PAGES		1111#define VM_CMM_TIMED_PAGES	1112#define VM_CMM_TIMEOUT		1113static struct ctl_table cmm_table[];static intcmm_pages_handler(ctl_table *ctl, int write, struct file *filp,		  void *buffer, size_t *lenp, loff_t *ppos){	char buf[16], *p;	long pages;	int len;	if (!*lenp || (*ppos && !write)) {		*lenp = 0;		return 0;	}	if (write) {		len = *lenp;		if (copy_from_user(buf, buffer,				   len > sizeof(buf) ? sizeof(buf) : len))			return -EFAULT;		buf[sizeof(buf) - 1] = '\0';		cmm_skip_blanks(buf, &p);		pages = cmm_strtoul(p, &p);		if (ctl == &cmm_table[0])			cmm_set_pages(pages);		else			cmm_add_timed_pages(pages);	} else {		if (ctl == &cmm_table[0])			pages = cmm_get_pages();		else			pages = cmm_get_timed_pages();		len = sprintf(buf, "%ld\n", pages);		if (len > *lenp)			len = *lenp;		if (copy_to_user(buffer, buf, len))			return -EFAULT;	}	*lenp = len;	*ppos += len;	return 0;}static intcmm_timeout_handler(ctl_table *ctl, int write, struct file *filp,		    void *buffer, size_t *lenp, loff_t *ppos){	char buf[64], *p;	long pages, seconds;	int len;	if (!*lenp || (*ppos && !write)) {		*lenp = 0;		return 0;	}	if (write) {		len = *lenp;		if (copy_from_user(buf, buffer,				   len > sizeof(buf) ? sizeof(buf) : len))			return -EFAULT;		buf[sizeof(buf) - 1] = '\0';		cmm_skip_blanks(buf, &p);		pages = cmm_strtoul(p, &p);		cmm_skip_blanks(p, &p);		seconds = cmm_strtoul(p, &p);		cmm_set_timeout(pages, seconds);	} else {		len = sprintf(buf, "%ld %ld\n",			      cmm_timeout_pages, cmm_timeout_seconds);		if (len > *lenp)			len = *lenp;		if (copy_to_user(buffer, buf, len))			return -EFAULT;	}	*lenp = len;	*ppos += len;	return 0;}static struct ctl_table cmm_table[] = {	{		.ctl_name	= VM_CMM_PAGES,		.procname	= "cmm_pages",		.mode		= 0600,		.proc_handler	= &cmm_pages_handler,	},	{		.ctl_name	= VM_CMM_TIMED_PAGES,		.procname	= "cmm_timed_pages",		.mode		= 0600,		.proc_handler	= &cmm_pages_handler,	},	{		.ctl_name	= VM_CMM_TIMEOUT,		.procname	= "cmm_timeout",		.mode		= 0600,		.proc_handler	= &cmm_timeout_handler,	},	{ .ctl_name = 0 }};static struct ctl_table cmm_dir_table[] = {	{		.ctl_name	= CTL_VM,		.procname	= "vm",		.maxlen		= 0,		.mode		= 0555,		.child		= cmm_table,	},	{ .ctl_name = 0 }};#endif#ifdef CONFIG_CMM_IUCV#define SMSG_PREFIX "CMM"static voidcmm_smsg_target(char *msg){	long pages, seconds;	if (!cmm_skip_blanks(msg + strlen(SMSG_PREFIX), &msg))		return;	if (strncmp(msg, "SHRINK", 6) == 0) {		if (!cmm_skip_blanks(msg + 6, &msg))			return;		pages = cmm_strtoul(msg, &msg);		cmm_skip_blanks(msg, &msg);		if (*msg == '\0')			cmm_set_pages(pages);	} else if (strncmp(msg, "RELEASE", 7) == 0) {		if (!cmm_skip_blanks(msg + 7, &msg))			return;		pages = cmm_strtoul(msg, &msg);		cmm_skip_blanks(msg, &msg);		if (*msg == '\0')			cmm_add_timed_pages(pages);	} else if (strncmp(msg, "REUSE", 5) == 0) {		if (!cmm_skip_blanks(msg + 5, &msg))			return;		pages = cmm_strtoul(msg, &msg);		if (!cmm_skip_blanks(msg, &msg))			return;		seconds = cmm_strtoul(msg, &msg);		cmm_skip_blanks(msg, &msg);		if (*msg == '\0')			cmm_set_timeout(pages, seconds);	}}#endifstruct ctl_table_header *cmm_sysctl_header;static intcmm_init (void){	int rc;	/* Prevent logical cpu 0 from being set offline. */	rc = smp_get_cpu(cpumask_of_cpu(0));	if (rc) {		printk(KERN_ERR "CMM: unable to reserve cpu 0\n");		return rc;	}#ifdef CONFIG_CMM_PROC	cmm_sysctl_header = register_sysctl_table(cmm_dir_table, 1);#endif#ifdef CONFIG_CMM_IUCV	smsg_register_callback(SMSG_PREFIX, cmm_smsg_target);#endif	INIT_WORK(&cmm_thread_starter, (void *) cmm_start_thread, 0);	init_waitqueue_head(&cmm_thread_wait);	init_timer(&cmm_timer);	return 0;}static voidcmm_exit(void){	cmm_free_pages(cmm_pages, &cmm_pages, &cmm_page_list);	cmm_free_pages(cmm_timed_pages, &cmm_timed_pages, &cmm_timed_page_list);#ifdef CONFIG_CMM_PROC	unregister_sysctl_table(cmm_sysctl_header);#endif#ifdef CONFIG_CMM_IUCV	smsg_unregister_callback(SMSG_PREFIX, cmm_smsg_target);#endif	/* Allow logical cpu 0 to be set offline again. */	smp_put_cpu(0);}module_init(cmm_init);module_exit(cmm_exit);EXPORT_SYMBOL(cmm_set_pages);EXPORT_SYMBOL(cmm_get_pages);EXPORT_SYMBOL(cmm_add_timed_pages);EXPORT_SYMBOL(cmm_get_timed_pages);EXPORT_SYMBOL(cmm_set_timeout);MODULE_LICENSE("GPL");

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩视频永久免费| 岛国精品一区二区| 欧美亚洲综合网| 一级中文字幕一区二区| 91福利区一区二区三区| 一级中文字幕一区二区| 欧美日韩日日摸| 免费久久99精品国产| 精品国产凹凸成av人导航| 精品一区二区三区视频 | 91麻豆123| 亚洲午夜一二三区视频| 欧美日韩一区二区三区在线| 91免费观看视频| 亚洲一区中文日韩| 欧美二区三区的天堂| 久久草av在线| 国产精品视频第一区| 色av一区二区| 美女国产一区二区| 国产欧美视频一区二区| 91久久久免费一区二区| 视频一区视频二区在线观看| 久久久九九九九| 色婷婷精品大视频在线蜜桃视频| 视频在线观看一区二区三区| 久久久久99精品一区| 91美女片黄在线观看91美女| 日韩中文字幕亚洲一区二区va在线| 精品国产百合女同互慰| 色视频成人在线观看免| 久久精品国产色蜜蜜麻豆| 中文字幕国产精品一区二区| 欧美日韩中文字幕一区| 国产乱码精品一区二区三区av | 老司机免费视频一区二区三区| 日本一区二区免费在线观看视频| 在线视频一区二区三| 在线观看视频一区二区| 麻豆一区二区三区| 亚洲品质自拍视频网站| 欧美大片在线观看一区二区| 色综合久久中文字幕| 九九在线精品视频| 亚洲另类中文字| 国产喂奶挤奶一区二区三区| 在线播放亚洲一区| 91免费版pro下载短视频| 日韩vs国产vs欧美| 亚洲日本欧美天堂| 国产亚洲欧美激情| 欧美一区二区三区四区久久| av不卡在线播放| 激情综合色播五月| 日韩精品视频网| 一区二区三区蜜桃| 国产精品妹子av| 久久久一区二区| 日韩视频免费观看高清完整版| 在线免费观看日本欧美| 成人免费不卡视频| 国产一区二区毛片| 久久99国产乱子伦精品免费| 亚洲综合免费观看高清完整版 | 99久久久国产精品| 丁香激情综合五月| 国产综合久久久久久久久久久久| 日韩成人免费在线| 亚洲国产另类av| 亚洲乱码国产乱码精品精可以看 | 青青草国产精品97视觉盛宴| 亚洲综合激情另类小说区| 中文字幕在线不卡| 中文字幕中文字幕一区| 国产片一区二区三区| 欧美精品一区二区在线播放 | 在线精品观看国产| 91黄色免费观看| 在线观看欧美精品| 91久久精品网| 欧美性做爰猛烈叫床潮| 欧美在线影院一区二区| 99精品视频在线观看| 91热门视频在线观看| 色综合久久99| 在线看国产一区| 欧美精品自拍偷拍| 日韩一区二区影院| 欧美精品一区男女天堂| 久久精品亚洲精品国产欧美| 国产天堂亚洲国产碰碰| 蜜桃精品视频在线观看| 国产一区福利在线| 国产成人精品午夜视频免费| 国产成人av一区二区三区在线观看| 国产一区二区在线看| 国产剧情一区在线| 成人美女视频在线看| 91热门视频在线观看| 欧美视频一区二区三区四区 | 日韩免费福利电影在线观看| 精品国产91久久久久久久妲己| 久久综合九色综合97婷婷 | 最新中文字幕一区二区三区| 夜夜嗨av一区二区三区| 六月婷婷色综合| 大美女一区二区三区| 在线视频观看一区| 日韩精品中文字幕在线不卡尤物| 国产婷婷色一区二区三区四区| 亚洲精品国产第一综合99久久 | 亚洲国产日韩av| 韩国精品免费视频| 色综合天天综合网天天看片| 欧美疯狂做受xxxx富婆| 久久精品视频网| 玉足女爽爽91| 国产一区二区三区免费播放| 91久久香蕉国产日韩欧美9色| 欧美日韩高清一区| 亚洲精品一线二线三线| 亚洲日本中文字幕区| 洋洋av久久久久久久一区| 蜜臀精品一区二区三区在线观看| 国产高清在线观看免费不卡| 99国产欧美久久久精品| 欧美裸体一区二区三区| 精品福利一区二区三区| 夜夜嗨av一区二区三区四季av| 天天综合色天天综合| 国产精品一区在线| 欧美最新大片在线看 | 成人网页在线观看| 在线欧美日韩精品| 日本一区二区三区在线观看| 亚洲自拍偷拍欧美| 国产一区二区美女诱惑| 91国产免费看| 国产精品毛片无遮挡高清| 亚洲福利一二三区| 成人永久看片免费视频天堂| 91成人国产精品| 久久综合色8888| 日本女优在线视频一区二区 | 久久精品国产77777蜜臀| 东方欧美亚洲色图在线| 欧美喷潮久久久xxxxx| 国产视频一区二区三区在线观看| 亚洲一区二区中文在线| 国产成人在线影院| 日韩免费电影一区| 亚洲综合自拍偷拍| 丰满少妇久久久久久久| 欧美精选在线播放| 国产精品第五页| 成人做爰69片免费看网站| 3d成人h动漫网站入口| 亚洲欧美日韩在线播放| 国产精品自拍毛片| 精品电影一区二区三区| 香蕉久久一区二区不卡无毒影院| 粉嫩av一区二区三区| 日韩欧美久久一区| 一区二区三区影院| 91亚洲精华国产精华精华液| 久久毛片高清国产| 美女视频黄 久久| 色呦呦日韩精品| 一区二区欧美视频| 9人人澡人人爽人人精品| 日本一区二区三区久久久久久久久不 | 奇米精品一区二区三区在线观看| 欧美日韩亚州综合| 亚洲一区二区三区爽爽爽爽爽| av爱爱亚洲一区| 中文字幕一区二区日韩精品绯色| 懂色av中文一区二区三区| 久久精品夜色噜噜亚洲aⅴ| 麻豆91免费看| 欧美v国产在线一区二区三区| 亚洲国产日产av| 日韩欧美一级精品久久| 天天综合网 天天综合色| 欧美人与性动xxxx| 五月天亚洲婷婷| 精品处破学生在线二十三| 精品一区二区三区在线播放视频 | 91麻豆精品国产自产在线| 亚洲黄色小说网站| 91麻豆精品国产91久久久久| 天堂一区二区在线| 日韩欧美国产wwwww| 久久国产免费看| 中文字幕免费观看一区| 成人在线综合网| 亚洲另类在线一区| 欧美午夜电影在线播放| 美女网站在线免费欧美精品| 久久蜜桃av一区二区天堂| 成人中文字幕合集|