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

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? cmm.c

?? h內(nèi)核
?? C
字號(hào):
/* *  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 "../../../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");	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){#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}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");

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
午夜激情久久久| 久久精品国产999大香线蕉| 欧美丰满一区二区免费视频| 国产福利一区在线| 亚洲国产wwwccc36天堂| 国产精品丝袜久久久久久app| 91精品国产黑色紧身裤美女| 久久欧美一区二区| 欧美日精品一区视频| 粉嫩欧美一区二区三区高清影视| 日本亚洲天堂网| 亚洲一线二线三线久久久| 国产视频一区二区在线| 日韩视频一区二区| 欧美日本一区二区| 色婷婷精品久久二区二区蜜臂av| 国产精品夜夜爽| 蜜臀久久久久久久| 三级欧美韩日大片在线看| 亚洲精选一二三| 国产精品国产a| 国产日产欧美一区二区视频| 精品理论电影在线| 日韩欧美高清在线| 日韩午夜激情av| 日韩一区二区免费电影| 在线电影一区二区三区| 欧美日韩国产经典色站一区二区三区| 97久久精品人人澡人人爽| 懂色一区二区三区免费观看| 国产高清精品在线| 国产精品456露脸| 国产九色精品成人porny| 韩国成人福利片在线播放| 久久电影网电视剧免费观看| 青娱乐精品视频| 蜜臀精品久久久久久蜜臀| 肉肉av福利一精品导航| 青青草一区二区三区| 日本免费新一区视频| 男人的j进女人的j一区| 美女视频黄久久| 激情欧美日韩一区二区| 国产精品一区在线观看乱码| 韩国av一区二区三区在线观看| 黄网站免费久久| 国产一区二区福利视频| 成人精品国产一区二区4080| 成人美女视频在线观看18| 成人激情综合网站| 色综合av在线| 欧美另类高清zo欧美| 日韩欧美黄色影院| 国产视频一区不卡| 亚洲免费观看高清完整版在线观看| 亚洲乱码国产乱码精品精可以看 | 欧美精品xxxxbbbb| 欧美精品乱人伦久久久久久| 欧美一区二区日韩一区二区| 久久综合九色综合久久久精品综合| 久久久久久久综合狠狠综合| 国产精品久久久久影院亚瑟 | 亚洲国产日韩a在线播放性色| 五月综合激情婷婷六月色窝| 玖玖九九国产精品| 国产成人免费视频网站| 91碰在线视频| 欧美日韩一级片网站| 精品久久久久99| 综合中文字幕亚洲| 午夜视频在线观看一区二区| 国产一区二三区好的| 91浏览器在线视频| 精品理论电影在线| 亚洲日本中文字幕区| 蜜桃精品视频在线| 成人午夜激情影院| 91精品中文字幕一区二区三区| 久久久夜色精品亚洲| 亚洲精品国产a久久久久久| 男人操女人的视频在线观看欧美| 懂色中文一区二区在线播放| 欧美日韩在线播放三区四区| 久久精品一区八戒影视| 亚洲综合偷拍欧美一区色| 久久99精品一区二区三区| 97精品国产97久久久久久久久久久久| 欧美老肥妇做.爰bbww视频| 国产婷婷一区二区| 午夜欧美一区二区三区在线播放| 国产高清无密码一区二区三区| 欧洲精品中文字幕| 欧美国产一区二区| 全国精品久久少妇| 色久优优欧美色久优优| 国产亚洲欧美日韩在线一区| 亚洲丰满少妇videoshd| 粉嫩在线一区二区三区视频| 91精品国产综合久久福利| 亚洲同性gay激情无套| 国产麻豆视频一区二区| 4438亚洲最大| 亚洲综合丁香婷婷六月香| 国产成人精品一区二区三区四区 | 欧美色视频在线| 欧美国产欧美亚州国产日韩mv天天看完整| 香蕉加勒比综合久久| 99国产精品国产精品久久| www亚洲一区| 日韩精品一二区| 色天天综合色天天久久| 国产精品色噜噜| 国产精品1024| 久久综合久久久久88| 日本欧美一区二区在线观看| 91成人在线精品| 亚洲日韩欧美一区二区在线| 成人综合日日夜夜| 国产午夜精品久久| 国产剧情在线观看一区二区| 日韩免费观看2025年上映的电影| 亚洲成年人影院| 欧美色爱综合网| 亚洲国产精品一区二区久久| 色综合天天综合网国产成人综合天| 日本一区二区免费在线| 国产一区二区三区免费在线观看| 日韩欧美国产一区二区在线播放 | 日韩欧美一区中文| 视频一区视频二区中文| 欧亚一区二区三区| 亚洲一卡二卡三卡四卡五卡| 在线一区二区视频| 亚洲高清视频中文字幕| 欧美亚洲综合另类| 天天综合网 天天综合色| 欧美日韩不卡在线| 日韩激情一区二区| 日韩三级av在线播放| 激情文学综合插| 国产清纯美女被跳蛋高潮一区二区久久w | 欧美色视频在线| 偷拍一区二区三区四区| 欧美精品乱码久久久久久 | 成人一区二区三区在线观看| 国产欧美日本一区视频| www.av亚洲| 亚洲一区二区综合| 91精品国产一区二区| 激情五月播播久久久精品| 国产女主播视频一区二区| 99久久免费国产| 亚洲亚洲人成综合网络| 欧美高清视频在线高清观看mv色露露十八 | 国产精品丝袜在线| 一本大道综合伊人精品热热 | 一区二区三区成人| 欧美日韩不卡一区二区| 久久99九九99精品| 国产欧美日韩中文久久| 99re热视频精品| 亚洲v中文字幕| 久久夜色精品国产噜噜av| 不卡一区二区中文字幕| 亚洲国产成人av网| 久久综合狠狠综合久久综合88| 成人动漫视频在线| 午夜久久电影网| 久久久午夜电影| 在线免费观看日韩欧美| 激情五月播播久久久精品| 中文字幕日本乱码精品影院| 51精品国自产在线| 成人美女在线视频| 日日骚欧美日韩| 国产精品久久二区二区| 欧美男人的天堂一二区| 高清免费成人av| 午夜精品久久久久久久久| 国产亚洲欧美日韩俺去了| 色噜噜狠狠一区二区三区果冻| 麻豆传媒一区二区三区| 亚洲欧美经典视频| 精品国产一二三区| 欧美视频日韩视频在线观看| 国内精品久久久久影院色| 亚洲综合视频在线观看| 久久久久久免费毛片精品| 欧美日韩一区二区电影| 国产精品1区二区.| 日韩不卡在线观看日韩不卡视频| 国产精品久线观看视频| 日韩欧美的一区| 欧美日韩一区二区三区视频| 成人高清av在线| 国产一区二区在线免费观看| 亚洲6080在线| 亚洲精品国产高清久久伦理二区| 久久综合色综合88| 欧美一区二区二区|