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

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

?? printk.c

?? Linux2.4.20針對三星公司的s3c2410開發板的內核改造。
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* *  linux/kernel/printk.c * *  Copyright (C) 1991, 1992  Linus Torvalds * * Modified to make sys_syslog() more flexible: added commands to * return the last 4k of kernel messages, regardless of whether * they've been read or not.  Added option to suppress kernel printk's * to the console.  Added hook for sending the console messages * elsewhere, in preparation for a serial line console (someday). * Ted Ts'o, 2/11/93. * Modified for sysctl support, 1/8/97, Chris Horn. * Fixed SMP synchronization, 08/08/99, Manfred Spraul  *     manfreds@colorfullife.com * Rewrote bits to get rid of console_lock *	01Mar01 Andrew Morton <andrewm@uow.edu.au> */#include <linux/kernel.h>#include <linux/mm.h>#include <linux/tty.h>#include <linux/tty_driver.h>#include <linux/smp_lock.h>#include <linux/console.h>#include <linux/init.h>#include <linux/module.h>#include <linux/interrupt.h>			/* For in_interrupt() */#include <linux/config.h>#include <linux/delay.h>#include <asm/uaccess.h>#if defined(CONFIG_MULTIQUAD) || defined(CONFIG_IA64)#define LOG_BUF_LEN	(65536)#elif defined(CONFIG_ARCH_S390)#define LOG_BUF_LEN	(131072)#elif defined(CONFIG_SMP)#define LOG_BUF_LEN	(32768)#else	#define LOG_BUF_LEN	(16384)			/* This must be a power of two */#endif#define LOG_BUF_MASK	(LOG_BUF_LEN-1)#ifndef arch_consoles_callable#define arch_consoles_callable() (1)#endif/* printk's without a loglevel use this.. */#define DEFAULT_MESSAGE_LOGLEVEL 4 /* KERN_WARNING *//* We show everything that is MORE important than this.. */#define MINIMUM_CONSOLE_LOGLEVEL 1 /* Minimum loglevel we let people use */#define DEFAULT_CONSOLE_LOGLEVEL 7 /* anything MORE serious than KERN_DEBUG */DECLARE_WAIT_QUEUE_HEAD(log_wait);int console_printk[4] = {	DEFAULT_CONSOLE_LOGLEVEL,	/* console_loglevel */	DEFAULT_MESSAGE_LOGLEVEL,	/* default_message_loglevel */	MINIMUM_CONSOLE_LOGLEVEL,	/* minimum_console_loglevel */	DEFAULT_CONSOLE_LOGLEVEL,	/* default_console_loglevel */};int oops_in_progress;/* * console_sem protects the console_drivers list, and also * provides serialisation for access to the entire console * driver system. */static DECLARE_MUTEX(console_sem);struct console *console_drivers;/* * logbuf_lock protects log_buf, log_start, log_end, con_start and logged_chars * It is also used in interesting ways to provide interlocking in * release_console_sem(). */static spinlock_t logbuf_lock = SPIN_LOCK_UNLOCKED;static char log_buf[LOG_BUF_LEN];#define LOG_BUF(idx) (log_buf[(idx) & LOG_BUF_MASK])/* * The indices into log_buf are not constrained to LOG_BUF_LEN - they * must be masked before subscripting */static unsigned long log_start;			/* Index into log_buf: next char to be read by syslog() */static unsigned long con_start;			/* Index into log_buf: next char to be sent to consoles */static unsigned long log_end;			/* Index into log_buf: most-recently-written-char + 1 */static unsigned long logged_chars;		/* Number of chars produced since last read+clear operation */struct console_cmdline console_cmdline[MAX_CMDLINECONSOLES];static int preferred_console = -1;/* Flag: console code may call schedule() */static int console_may_schedule;/* *	Setup a list of consoles. Called from init/main.c */static int __init console_setup(char *str){	struct console_cmdline *c;	char name[sizeof(c->name)];	char *s, *options;	int i, idx;	/*	 *	Decode str into name, index, options.	 */	if (str[0] >= '0' && str[0] <= '9') {		strcpy(name, "ttyS");		strncpy(name + 4, str, sizeof(name) - 5);	} else		strncpy(name, str, sizeof(name) - 1);	name[sizeof(name) - 1] = 0;	if ((options = strchr(str, ',')) != NULL)		*(options++) = 0;#ifdef __sparc__	if (!strcmp(str, "ttya"))		strcpy(name, "ttyS0");	if (!strcmp(str, "ttyb"))		strcpy(name, "ttyS1");#endif	for(s = name; *s; s++)		if (*s >= '0' && *s <= '9')			break;	idx = simple_strtoul(s, NULL, 10);	*s = 0;	/*	 *	See if this tty is not yet registered, and	 *	if we have a slot free.	 */	for(i = 0; i < MAX_CMDLINECONSOLES && console_cmdline[i].name[0]; i++)		if (strcmp(console_cmdline[i].name, name) == 0 &&			  console_cmdline[i].index == idx) {				preferred_console = i;				return 1;		}	if (i == MAX_CMDLINECONSOLES)		return 1;	preferred_console = i;	c = &console_cmdline[i];	memcpy(c->name, name, sizeof(c->name));	c->options = options;	c->index = idx;	return 1;}__setup("console=", console_setup);/* * Commands to do_syslog: * * 	0 -- Close the log.  Currently a NOP. * 	1 -- Open the log. Currently a NOP. * 	2 -- Read from the log. * 	3 -- Read all messages remaining in the ring buffer. * 	4 -- Read and clear all messages remaining in the ring buffer * 	5 -- Clear ring buffer. * 	6 -- Disable printk's to console * 	7 -- Enable printk's to console *	8 -- Set level of messages printed to console *	9 -- Return number of unread characters in the log buffer */int do_syslog(int type, char * buf, int len){	unsigned long i, j, limit, count;	int do_clear = 0;	char c;	int error = 0;	switch (type) {	case 0:		/* Close log */		break;	case 1:		/* Open log */		break;	case 2:		/* Read from log */		error = -EINVAL;		if (!buf || len < 0)			goto out;		error = 0;		if (!len)			goto out;		error = verify_area(VERIFY_WRITE,buf,len);		if (error)			goto out;		error = wait_event_interruptible(log_wait, (log_start - log_end));		if (error)			goto out;		i = 0;		spin_lock_irq(&logbuf_lock);		while ((log_start != log_end) && i < len) {			c = LOG_BUF(log_start);			log_start++;			spin_unlock_irq(&logbuf_lock);			__put_user(c,buf);			buf++;			i++;			spin_lock_irq(&logbuf_lock);		}		spin_unlock_irq(&logbuf_lock);		error = i;		break;	case 4:		/* Read/clear last kernel messages */		do_clear = 1; 		/* FALL THRU */	case 3:		/* Read last kernel messages */		error = -EINVAL;		if (!buf || len < 0)			goto out;		error = 0;		if (!len)			goto out;		error = verify_area(VERIFY_WRITE,buf,len);		if (error)			goto out;		count = len;		if (count > LOG_BUF_LEN)			count = LOG_BUF_LEN;		spin_lock_irq(&logbuf_lock);		if (count > logged_chars)			count = logged_chars;		if (do_clear)			logged_chars = 0;		limit = log_end;		/*		 * __put_user() could sleep, and while we sleep		 * printk() could overwrite the messages 		 * we try to copy to user space. Therefore		 * the messages are copied in reverse. <manfreds>		 */		for(i=0;i < count;i++) {			j = limit-1-i;			if (j+LOG_BUF_LEN < log_end)				break;			c = LOG_BUF(j);			spin_unlock_irq(&logbuf_lock);			__put_user(c,&buf[count-1-i]);			spin_lock_irq(&logbuf_lock);		}		spin_unlock_irq(&logbuf_lock);		error = i;		if(i != count) {			int offset = count-error;			/* buffer overflow during copy, correct user buffer. */			for(i=0;i<error;i++) {				__get_user(c,&buf[i+offset]);				__put_user(c,&buf[i]);			}		}		break;	case 5:		/* Clear ring buffer */		spin_lock_irq(&logbuf_lock);		logged_chars = 0;		spin_unlock_irq(&logbuf_lock);		break;	case 6:		/* Disable logging to console */		spin_lock_irq(&logbuf_lock);		console_loglevel = minimum_console_loglevel;		spin_unlock_irq(&logbuf_lock);		break;	case 7:		/* Enable logging to console */		spin_lock_irq(&logbuf_lock);		console_loglevel = default_console_loglevel;		spin_unlock_irq(&logbuf_lock);		break;	case 8:		/* Set level of messages printed to console */		error = -EINVAL;		if (len < 1 || len > 8)			goto out;		if (len < minimum_console_loglevel)			len = minimum_console_loglevel;		spin_lock_irq(&logbuf_lock);		console_loglevel = len;		spin_unlock_irq(&logbuf_lock);		error = 0;		break;	case 9:		/* Number of chars in the log buffer */		spin_lock_irq(&logbuf_lock);		error = log_end - log_start;		spin_unlock_irq(&logbuf_lock);		break;	default:		error = -EINVAL;		break;	}out:	return error;}asmlinkage long sys_syslog(int type, char * buf, int len){	if ((type != 3) && !capable(CAP_SYS_ADMIN))		return -EPERM;	return do_syslog(type, buf, len);}/* * Call the console drivers on a range of log_buf */static void __call_console_drivers(unsigned long start, unsigned long end){	struct console *con;	for (con = console_drivers; con; con = con->next) {		if ((con->flags & CON_ENABLED) && con->write)			con->write(con, &LOG_BUF(start), end - start);	}}/* * Write out chars from start to end - 1 inclusive */static void _call_console_drivers(unsigned long start, unsigned long end, int msg_log_level){	if (msg_log_level < console_loglevel && console_drivers && start != end) {		if ((start & LOG_BUF_MASK) > (end & LOG_BUF_MASK)) {			/* wrapped write */			__call_console_drivers(start & LOG_BUF_MASK, LOG_BUF_LEN);			__call_console_drivers(0, end & LOG_BUF_MASK);		} else {			__call_console_drivers(start, end);		}	}}/* * Call the console drivers, asking them to write out * log_buf[start] to log_buf[end - 1]. * The console_sem must be held. */static void call_console_drivers(unsigned long start, unsigned long end){	unsigned long cur_index, start_print;	static int msg_level = -1;	if (((long)(start - end)) > 0)		BUG();	cur_index = start;	start_print = start;	while (cur_index != end) {

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品国产综合久久久久久| wwww国产精品欧美| 亚洲成人av一区二区三区| 91麻豆免费观看| 亚洲日本在线看| 不卡电影免费在线播放一区| 日本一区二区三区在线观看| 成人午夜激情在线| 日韩美女久久久| 色综合久久久久| 亚洲免费观看视频| 欧美丝袜自拍制服另类| 性做久久久久久免费观看 | 美女任你摸久久 | 日韩一区二区三区观看| 秋霞影院一区二区| 欧美mv日韩mv亚洲| 久久99国产精品成人| 精品国产百合女同互慰| 国产在线视频一区二区三区| 久久综合九色欧美综合狠狠 | 成人av资源站| 亚洲精品国产第一综合99久久| 色av成人天堂桃色av| 亚洲精品成人天堂一二三| 欧美自拍偷拍一区| 五月天欧美精品| 日韩欧美一区二区免费| 国产九色sp调教91| 国产精品热久久久久夜色精品三区 | 精品日韩99亚洲| 国产精品99久久不卡二区| 国产精品剧情在线亚洲| 91美女片黄在线| 五月激情综合网| 日韩欧美高清一区| 成人的网站免费观看| 亚洲精品久久久久久国产精华液| 欧美三级一区二区| 精品一区二区日韩| 国产精品麻豆99久久久久久| 色综合久久88色综合天天6| 亚洲国产精品尤物yw在线观看| 欧美一区二区性放荡片| 国产一区二区剧情av在线| 国产精品久久久久久久午夜片 | 欧美成人一区二区三区在线观看| 国产美女在线观看一区| 国产精品白丝在线| 欧美欧美欧美欧美| 国产麻豆日韩欧美久久| 国产精品国产三级国产普通话99 | 欧美日韩五月天| 极品少妇一区二区| 亚洲人妖av一区二区| 欧美美女一区二区| 国产福利一区二区三区视频| 亚洲欧美成人一区二区三区| 日韩一区二区精品在线观看| 懂色av中文一区二区三区| 一区二区三区在线视频观看| 欧美一级专区免费大片| 成人国产精品免费网站| 亚洲18女电影在线观看| 国产午夜精品久久久久久久| 欧美影视一区二区三区| 久久爱另类一区二区小说| 亚洲三级免费观看| 精品国产123| 在线国产电影不卡| 国产伦精品一区二区三区在线观看| 亚洲免费毛片网站| 亚洲精品一区二区三区99| 一本色道**综合亚洲精品蜜桃冫| 另类综合日韩欧美亚洲| 一区二区三区在线免费| 久久久精品黄色| 在线播放亚洲一区| 91亚洲精华国产精华精华液| 老司机精品视频一区二区三区| 亚洲蜜桃精久久久久久久| www日韩大片| 欧美精品123区| 一本久久精品一区二区| 国产一区二区三区免费| 爽好久久久欧美精品| 中文无字幕一区二区三区| 欧美一区二区三区日韩视频| 91一区二区三区在线观看| 国产乱一区二区| 日韩中文字幕91| 亚洲女子a中天字幕| 国产欧美一区二区在线| 日韩欧美一级特黄在线播放| 欧美色电影在线| 成年人国产精品| 国产一区二区看久久| 日韩1区2区3区| 一区二区成人在线| 国产精品电影一区二区| 2024国产精品| 日韩精品综合一本久道在线视频| 欧美亚一区二区| 99久久精品国产精品久久| 国产精品2024| 精品一区二区成人精品| 调教+趴+乳夹+国产+精品| 亚洲色图清纯唯美| 欧美国产1区2区| 久久亚洲精华国产精华液| 91精品婷婷国产综合久久竹菊| 欧美在线免费播放| 91黄色免费看| 91免费视频网| 色综合中文字幕| 91丨porny丨蝌蚪视频| 成人一区二区三区视频在线观看| 国产一区二区三区精品视频| 精品亚洲成a人| 久久成人精品无人区| 青青草国产精品亚洲专区无| 午夜一区二区三区在线观看| 亚洲午夜一区二区三区| 亚洲欧美激情在线| 亚洲天堂久久久久久久| 亚洲欧美自拍偷拍| 国产精品的网站| 日韩理论片中文av| 亚洲三级在线看| 一区二区三区在线视频观看| 亚洲精品一二三| 亚洲一区欧美一区| 亚洲国产精品久久久久婷婷884| 亚洲精品亚洲人成人网在线播放| 亚洲久草在线视频| 亚洲小说欧美激情另类| 亚洲在线一区二区三区| 亚洲va韩国va欧美va精品| 亚洲va欧美va国产va天堂影院| 天天综合网 天天综合色| 日本vs亚洲vs韩国一区三区二区| 日本欧美一区二区三区| 极品美女销魂一区二区三区| 精品一区二区av| 成人永久看片免费视频天堂| av亚洲产国偷v产偷v自拍| 91猫先生在线| 欧美日韩不卡在线| 欧美大胆人体bbbb| 久久美女艺术照精彩视频福利播放 | 亚洲精选视频免费看| 亚洲成人av电影| 免费成人美女在线观看| 国产一区二区三区四区五区入口 | 精品三级在线观看| 国产日产精品一区| 国产精品国产三级国产普通话99 | 国产情人综合久久777777| 中文字幕中文在线不卡住| 夜夜亚洲天天久久| 日本欧美在线观看| 国产真实乱对白精彩久久| 成人午夜激情影院| 欧美色偷偷大香| 日韩一区二区免费高清| 国产日韩欧美一区二区三区乱码 | 国产欧美一区二区在线观看| 亚洲天堂精品视频| 天天亚洲美女在线视频| 激情五月婷婷综合| 97久久久精品综合88久久| 欧美日韩国产美| 欧美精品一区二区三区一线天视频| 中文字幕免费观看一区| 亚洲一级电影视频| 久草精品在线观看| 99久久婷婷国产综合精品| 欧美精品一卡两卡| 久久精品欧美日韩| 亚洲一区二区三区在线看| 久久99九九99精品| 91污在线观看| 日韩免费视频一区| 中文字幕在线播放不卡一区| 午夜精品久久久久| 国产成人精品免费一区二区| 欧美日韩一区视频| 欧美国产精品一区二区| 天堂蜜桃91精品| 成人精品国产一区二区4080| 欧美日韩国产精品自在自线| 久久这里都是精品| 亚洲国产中文字幕在线视频综合| 久久99国产精品久久| 日本韩国欧美一区| 久久久亚洲高清| 视频一区欧美精品| av在线这里只有精品| 日韩免费观看高清完整版在线观看| 中文字幕在线视频一区|