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

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

?? irixsig.c

?? 《嵌入式系統(tǒng)設(shè)計與實例開發(fā)實驗教材二源碼》Linux內(nèi)核移植與編譯實驗
?? C
?? 第 1 頁 / 共 2 頁
字號:
		recalc_sigpending(current);		spin_unlock_irq(&current->sigmask_lock);	}	if(old) {		error = verify_area(VERIFY_WRITE, old, sizeof(*old));		if(error)			return error;		__copy_to_user(old, &current->blocked, sizeof(unsigned long)*4);	}	return 0;}asmlinkage int irix_sigsuspend(struct pt_regs *regs){	sigset_t *uset, saveset, newset;	uset = (sigset_t *) regs->regs[4];	if (copy_from_user(&newset, uset, sizeof(sigset_t)))		return -EFAULT;	sigdelsetmask(&newset, ~_BLOCKABLE);	spin_lock_irq(&current->sigmask_lock);	saveset = current->blocked;	current->blocked = newset;	recalc_sigpending(current);	spin_unlock_irq(&current->sigmask_lock);	regs->regs[2] = -EINTR;	while (1) {		current->state = TASK_INTERRUPTIBLE;		schedule();		if (do_irix_signal(&saveset, regs))			return -EINTR;	}}/* hate hate hate... */struct irix5_siginfo {	int sig, code, error;	union {		char unused[128 - (3 * 4)]; /* Safety net. */		struct {			int pid;			union {				int uid;				struct {					int utime, status, stime;				} child;			} procdata;		} procinfo;		unsigned long fault_addr;		struct {			int fd;			long band;		} fileinfo;		unsigned long sigval;	} stuff;};static inline unsigned long timespectojiffies(struct timespec *value){	unsigned long sec = (unsigned) value->tv_sec;	long nsec = value->tv_nsec;	if (sec > (LONG_MAX / HZ))		return LONG_MAX;	nsec += 1000000000L / HZ - 1;	nsec /= 1000000000L / HZ;	return HZ * sec + nsec;}asmlinkage int irix_sigpoll_sys(unsigned long *set, struct irix5_siginfo *info,				struct timespec *tp){	long expire = MAX_SCHEDULE_TIMEOUT;	sigset_t kset;	int i, sig, error, timeo = 0;#ifdef DEBUG_SIG	printk("[%s:%d] irix_sigpoll_sys(%p,%p,%p)\n",	       current->comm, current->pid, set, info, tp);#endif	/* Must always specify the signal set. */	if(!set)		return -EINVAL;	error = verify_area(VERIFY_READ, set, sizeof(kset));	if (error)		goto out;	__copy_from_user(&kset, set, sizeof(set));	if (error)		goto out;	if (info && clear_user(info, sizeof(*info))) {		error = -EFAULT;		goto out;	}	if(tp) {		error = verify_area(VERIFY_READ, tp, sizeof(*tp));		if(error)			return error;		if(!tp->tv_sec && !tp->tv_nsec) {			error = -EINVAL;			goto out;		}		expire = timespectojiffies(tp)+(tp->tv_sec||tp->tv_nsec);	}	while(1) {		long tmp = 0;		current->state = TASK_INTERRUPTIBLE;		expire = schedule_timeout(expire);		for (i=0; i<=4; i++)			tmp |= (current->pending.signal.sig[i] & kset.sig[i]);		if (tmp)			break;		if (!expire) {			timeo = 1;			break;		}		if (signal_pending(current))			return -EINTR;	}	if (timeo)		return -EAGAIN;	for(sig = 1; i <= 65 /* IRIX_NSIG */; sig++) {		if (sigismember (&kset, sig))			continue;		if (sigismember (&current->pending.signal, sig)) {			/* XXX need more than this... */			if (info)				info->sig = sig;			error = 0;			goto out;		}	}	/* Should not get here, but do something sane if we do. */	error = -EINTR;out:	return error;}/* This is here because of irix5_siginfo definition. */#define P_PID    0#define P_PGID   2#define P_ALL    7extern int getrusage(struct task_struct *, int, struct rusage *);#define W_EXITED     1#define W_TRAPPED    2#define W_STOPPED    4#define W_CONT       8#define W_NOHANG    64#define W_MASK      (W_EXITED | W_TRAPPED | W_STOPPED | W_CONT | W_NOHANG)asmlinkage int irix_waitsys(int type, int pid, struct irix5_siginfo *info,			    int options, struct rusage *ru){	int flag, retval;	DECLARE_WAITQUEUE(wait, current);	struct task_struct *p;	if (!info) {		retval = -EINVAL;		goto out;	}	retval = verify_area(VERIFY_WRITE, info, sizeof(*info));	if(retval)		goto out;	if (ru) {		retval = verify_area(VERIFY_WRITE, ru, sizeof(*ru));		if(retval)			goto out;	}	if (options & ~(W_MASK)) {		retval = -EINVAL;		goto out;	}	if (type != P_PID && type != P_PGID && type != P_ALL) {		retval = -EINVAL;		goto out;	}	add_wait_queue(&current->wait_chldexit, &wait);repeat:	flag = 0;	current->state = TASK_INTERRUPTIBLE;	read_lock(&tasklist_lock);	for (p = current->p_cptr; p; p = p->p_osptr) {		if ((type == P_PID) && p->pid != pid)			continue;		if ((type == P_PGID) && p->pgrp != pid)			continue;		if ((p->exit_signal != SIGCHLD))			continue;		flag = 1;		switch (p->state) {			case TASK_STOPPED:				if (!p->exit_code)					continue;				if (!(options & (W_TRAPPED|W_STOPPED)) &&				    !(p->ptrace & PT_PTRACED))					continue;				if (ru != NULL)					getrusage(p, RUSAGE_BOTH, ru);				__put_user(SIGCHLD, &info->sig);				__put_user(0, &info->code);				__put_user(p->pid, &info->stuff.procinfo.pid);				__put_user((p->exit_code >> 8) & 0xff,				           &info->stuff.procinfo.procdata.child.status);				__put_user(p->times.tms_utime, &info->stuff.procinfo.procdata.child.utime);				__put_user(p->times.tms_stime, &info->stuff.procinfo.procdata.child.stime);				p->exit_code = 0;				retval = 0;				goto end_waitsys;			case TASK_ZOMBIE:				current->times.tms_cutime += p->times.tms_utime + p->times.tms_cutime;				current->times.tms_cstime += p->times.tms_stime + p->times.tms_cstime;				if (ru != NULL)					getrusage(p, RUSAGE_BOTH, ru);				__put_user(SIGCHLD, &info->sig);				__put_user(1, &info->code);      /* CLD_EXITED */				__put_user(p->pid, &info->stuff.procinfo.pid);				__put_user((p->exit_code >> 8) & 0xff,				           &info->stuff.procinfo.procdata.child.status);				__put_user(p->times.tms_utime,				           &info->stuff.procinfo.procdata.child.utime);				__put_user(p->times.tms_stime,				           &info->stuff.procinfo.procdata.child.stime);				retval = 0;				if (p->p_opptr != p->p_pptr) {					REMOVE_LINKS(p);					p->p_pptr = p->p_opptr;					SET_LINKS(p);					notify_parent(p, SIGCHLD);				} else					release_task(p);				goto end_waitsys;			default:				continue;		}	}	read_unlock(&tasklist_lock);	if (flag) {		retval = 0;		if (options & W_NOHANG)			goto end_waitsys;		retval = -ERESTARTSYS;		if (signal_pending(current))			goto end_waitsys;		current->state = TASK_INTERRUPTIBLE;		schedule();		goto repeat;	}	retval = -ECHILD;end_waitsys:	current->state = TASK_RUNNING;	remove_wait_queue(&current->wait_chldexit, &wait);out:	return retval;}struct irix5_context {	u32 flags;	u32 link;	u32 sigmask[4];	struct { u32 sp, size, flags; } stack;	int regs[36];	u32 fpregs[32];	u32 fpcsr;	u32 _unused0;	u32 _unused1[47];	u32 weird_graphics_thing;};asmlinkage int irix_getcontext(struct pt_regs *regs){	int error, i, base = 0;	struct irix5_context *ctx;	unsigned long flags;	if (regs->regs[2] == 1000)		base = 1;	ctx = (struct irix5_context *) regs->regs[base + 4];#ifdef DEBUG_SIG	printk("[%s:%d] irix_getcontext(%p)\n",	       current->comm, current->pid, ctx);#endif	error = verify_area(VERIFY_WRITE, ctx, sizeof(*ctx));	if(error)		goto out;	__put_user(current->thread.irix_oldctx, &ctx->link);	__copy_to_user(&ctx->sigmask, &current->blocked, sizeof(irix_sigset_t));	/* XXX Do sigstack stuff someday... */	__put_user(0, &ctx->stack.sp);	__put_user(0, &ctx->stack.size);	__put_user(0, &ctx->stack.flags);	__put_user(0, &ctx->weird_graphics_thing);	__put_user(0, &ctx->regs[0]);	for (i = 1; i < 32; i++)		__put_user(regs->regs[i], &ctx->regs[i]);	__put_user(regs->lo, &ctx->regs[32]);	__put_user(regs->hi, &ctx->regs[33]);	__put_user(regs->cp0_cause, &ctx->regs[34]);	__put_user(regs->cp0_epc, &ctx->regs[35]);	flags = 0x0f;	if(!current->used_math) {		flags &= ~(0x08);	} else {		/* XXX wheee... */		printk("Wheee, no code for saving IRIX FPU context yet.\n");	}	__put_user(flags, &ctx->flags);	error = 0;out:	return error;}asmlinkage unsigned long irix_setcontext(struct pt_regs *regs){	int error, base = 0;	struct irix5_context *ctx;	if(regs->regs[2] == 1000)		base = 1;	ctx = (struct irix5_context *) regs->regs[base + 4];#ifdef DEBUG_SIG	printk("[%s:%d] irix_setcontext(%p)\n",	       current->comm, current->pid, ctx);#endif	error = verify_area(VERIFY_READ, ctx, sizeof(*ctx));	if (error)		goto out;	if (ctx->flags & 0x02) {		/* XXX sigstack garbage, todo... */		printk("Wheee, cannot do sigstack stuff in setcontext\n");	}	if (ctx->flags & 0x04) {		int i;		/* XXX extra control block stuff... todo... */		for(i = 1; i < 32; i++)			regs->regs[i] = ctx->regs[i];		regs->lo = ctx->regs[32];		regs->hi = ctx->regs[33];		regs->cp0_epc = ctx->regs[35];	}	if (ctx->flags & 0x08) {		/* XXX fpu context, blah... */		printk("Wheee, cannot restore FPU context yet...\n");	}	current->thread.irix_oldctx = ctx->link;	error = regs->regs[2];out:	return error;}struct irix_sigstack { unsigned long sp; int status; };asmlinkage int irix_sigstack(struct irix_sigstack *new, struct irix_sigstack *old){	int error;#ifdef DEBUG_SIG	printk("[%s:%d] irix_sigstack(%p,%p)\n",	       current->comm, current->pid, new, old);#endif	if(new) {		error = verify_area(VERIFY_READ, new, sizeof(*new));		if(error)			goto out;	}	if(old) {		error = verify_area(VERIFY_WRITE, old, sizeof(*old));		if(error)			goto out;	}	error = 0;out:	return error;}struct irix_sigaltstack { unsigned long sp; int size; int status; };asmlinkage int irix_sigaltstack(struct irix_sigaltstack *new,				struct irix_sigaltstack *old){	int error;#ifdef DEBUG_SIG	printk("[%s:%d] irix_sigaltstack(%p,%p)\n",	       current->comm, current->pid, new, old);#endif	if (new) {		error = verify_area(VERIFY_READ, new, sizeof(*new));		if(error)			goto out;	}	if (old) {		error = verify_area(VERIFY_WRITE, old, sizeof(*old));		if(error)			goto out;	}	error = 0;out:	error = 0;	return error;}struct irix_procset {	int cmd, ltype, lid, rtype, rid;};asmlinkage int irix_sigsendset(struct irix_procset *pset, int sig){	int error;	error = verify_area(VERIFY_READ, pset, sizeof(*pset));	if(error)		goto out;#ifdef DEBUG_SIG	printk("[%s:%d] irix_sigsendset([%d,%d,%d,%d,%d],%d)\n",	       current->comm, current->pid,	       pset->cmd, pset->ltype, pset->lid, pset->rtype, pset->rid,	       sig);#endif	error = -EINVAL;out:	return error;}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧美综合在线精品| 欧美二区三区91| 国产精品一区专区| 免费在线观看不卡| 日韩中文字幕亚洲一区二区va在线| **欧美大码日韩| 亚洲欧美日韩一区| 日韩一区中文字幕| 亚洲激情男女视频| 亚洲一区二区三区四区不卡| 亚洲第一搞黄网站| 日本美女一区二区| 国产乱码精品一品二品| 成人开心网精品视频| 97超碰欧美中文字幕| 欧美性高清videossexo| 欧美日韩久久不卡| 91精品国产色综合久久久蜜香臀| 91精品国产入口| 久久久久99精品国产片| 综合婷婷亚洲小说| 日日嗨av一区二区三区四区| 免费看欧美女人艹b| 国产精品18久久久久久久网站| 99免费精品视频| 欧美日韩精品综合在线| 久久久青草青青国产亚洲免观| 国产精品美女久久久久久久| 一区二区三区91| 另类的小说在线视频另类成人小视频在线 | 欧洲激情一区二区| 欧美日韩国产bt| 国产日韩欧美a| 夜夜嗨av一区二区三区四季av | 久久久久久久网| 亚洲欧美激情一区二区| 久久国产精品72免费观看| 成人av手机在线观看| 欧美精品三级在线观看| 欧美国产日韩在线观看| 亚洲高清视频的网址| 国产精品香蕉一区二区三区| 欧美日韩亚洲综合在线 | 欧美大黄免费观看| 亚洲欧洲另类国产综合| 久久成人久久爱| 日本高清不卡在线观看| 久久久久99精品一区| 午夜精品久久久久久久蜜桃app| 国产激情一区二区三区| 欧美电影一区二区三区| 亚洲视频在线观看三级| 精品一区二区av| 欧美精品视频www在线观看| 国产精品久久久久久妇女6080| 日本中文一区二区三区| 在线免费观看视频一区| 国产精品嫩草影院com| 久久99久久久欧美国产| 欧美日产在线观看| 亚洲尤物在线视频观看| 成人av网站免费| 欧美国产成人精品| 精品一区二区在线免费观看| 91精品国产综合久久久久久久| 亚洲男同性视频| 972aa.com艺术欧美| 欧美经典一区二区三区| 极品少妇xxxx精品少妇| 日韩精品一区二区三区在线播放| 亚洲欧美成人一区二区三区| 成人丝袜视频网| 国产精品久久久久久久久快鸭 | 成人欧美一区二区三区1314 | 一区二区三区不卡在线观看| 成人高清免费在线播放| 中文字幕在线观看一区| aa级大片欧美| 亚洲免费观看高清完整版在线| 9久草视频在线视频精品| 国产欧美一区二区精品性色| 国产一区二区免费看| 久久精品日产第一区二区三区高清版 | 久久久www免费人成精品| 韩国女主播一区| 国产欧美一区二区三区在线看蜜臀 | 自拍偷拍亚洲欧美日韩| 91麻豆国产福利精品| 一级中文字幕一区二区| 欧美日本一区二区三区四区| 免费看欧美女人艹b| 国产亚洲欧美中文| 91蜜桃网址入口| 视频一区在线播放| 久久久精品免费观看| 9久草视频在线视频精品| 亚洲综合免费观看高清完整版| 欧美男生操女生| 国产精品一区一区三区| 亚洲欧洲综合另类| 欧美一级艳片视频免费观看| 国产一区二区三区| 亚洲精品乱码久久久久久| 7777精品伊人久久久大香线蕉| 国产乱码字幕精品高清av| 中文字幕五月欧美| 欧美一区二区三区四区高清| 国产精品 欧美精品| 亚洲制服欧美中文字幕中文字幕| 日韩欧美另类在线| 一本一本久久a久久精品综合麻豆| 五月激情六月综合| 国产日韩欧美在线一区| 欧美色精品在线视频| 国产精品1区二区.| 人人精品人人爱| 久久久另类综合| 在线观看一区日韩| 国产福利精品一区二区| 午夜精品在线视频一区| 国产精品国产三级国产普通话99| 日韩一区二区在线观看视频播放 | 亚洲天堂a在线| 4438x成人网最大色成网站| 麻豆免费精品视频| 国产精品久久久一本精品| 日韩欧美国产三级| 欧美日免费三级在线| av男人天堂一区| 国产精品综合网| 美女脱光内衣内裤视频久久网站| 亚洲男同性恋视频| 国产网红主播福利一区二区| 日韩美女在线视频| 欧美一级在线免费| 欧美日韩精品一区二区三区四区| 91麻豆自制传媒国产之光| 免费欧美高清视频| 午夜精品爽啪视频| 亚洲国产欧美另类丝袜| 亚洲精品国产一区二区三区四区在线 | 777午夜精品免费视频| 日本特黄久久久高潮| 亚洲成人免费影院| 一二三区精品福利视频| 亚洲精品第1页| 亚洲精品国久久99热| 亚洲精品国产一区二区三区四区在线| 日本一区二区视频在线观看| 久久你懂得1024| 久久精品欧美一区二区三区麻豆| 欧美成人福利视频| 精品免费视频一区二区| 欧美电影免费提供在线观看| 日韩精品一区二区三区在线| 欧美大片拔萝卜| 国产日韩一级二级三级| 中文字幕五月欧美| 亚洲国产视频网站| 日日夜夜免费精品视频| 蜜臀av亚洲一区中文字幕| 另类小说视频一区二区| 国产一区二区网址| 成人精品一区二区三区中文字幕| 国产98色在线|日韩| 99久久精品国产导航| 色婷婷精品大视频在线蜜桃视频 | 九九九久久久精品| 国产一区二区三区美女| zzijzzij亚洲日本少妇熟睡| 91精品国产综合久久香蕉的特点| 欧美成人精品1314www| 久久久影院官网| 亚洲精品国产a| 蜜臀久久久99精品久久久久久| 精品一区二区三区av| 不卡一区中文字幕| 欧美伦理视频网站| 久久综合99re88久久爱| 国产精品久久福利| 天天影视色香欲综合网老头| 国产最新精品精品你懂的| 成人高清伦理免费影院在线观看| 欧美午夜精品理论片a级按摩| 欧美哺乳videos| 国产精品久99| 免费观看一级特黄欧美大片| 国产老妇另类xxxxx| 欧美调教femdomvk| 久久久九九九九| 日韩高清不卡一区| 成人精品一区二区三区中文字幕| 在线亚洲免费视频| 国产午夜精品久久久久久久| 五月综合激情网| 不卡av免费在线观看| 欧美一区二区三区在线电影| 亚洲欧洲综合另类| 粉嫩久久99精品久久久久久夜| 欧美性猛片aaaaaaa做受|