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

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

?? rtl_sched.c

?? fsmlabs的real time linux的內(nèi)核
?? C
?? 第 1 頁 / 共 2 頁
字號:
			       	sched->rtl_task_fpu_owner != sched->rtl_current)		{			if (sched->rtl_task_fpu_owner)			{				rtl_fpu_save (sched,sched->rtl_task_fpu_owner);			}			rtl_fpu_restore (sched,sched->rtl_current);			sched->rtl_task_fpu_owner = sched->rtl_current;		}#endif /* CONFIG_RTL_FP_SUPPORT */	}	mask = pthread_self()->pending;	rtl_restore_interrupts(interrupt_state);		/* handle any pending signals of the new task */	if (pthread_self()->pending & ~(1 << RTL_SIGNAL_READY)) do_signal(pthread_self());#ifdef CONFIG_OC_PSIGNALS	/* Signal handlers are non re-entrant, i.e. first finish current handler execution 	  and then manage the rest of pending signals.	*/ 	if (test_bit(RTL_SIGNAL_HANDLER_EXECUTION_INPROGRESS,&pthread_self()->pending)) goto end;	if ((pthread_self()->pending  & ~pthread_self()->blocked) & RTL_THREAD_SIGNALS_MASK) do_user_signal(pthread_self());#endif	if (!rtl_sigismember(&pthread_self()->pending, RTL_SIGNAL_READY)) {	  goto idle;	}	#ifdef CONFIG_OC_PSIGNALSend:	#endif	rtl_trace2 (RTL_TRACE_SCHED_OUT, (long) pthread_self());	return mask;}int rtl_cpu_exists (int cpu){	int n;	int i;	for (i = 0; i < rtl_num_cpus(); i++) {		n = cpu_logical_map (i);		if (n == cpu) {			return 1;		}	}	return 0;}int pthread_suspend_np (pthread_t thread){	if (thread == pthread_self()) {		RTL_MARK_SUSPENDED (pthread_self());		rtl_schedule();		pthread_testcancel();	} else {		pthread_kill(thread,RTL_SIGNAL_SUSPEND);	}	return 0;}int pthread_wakeup_np (pthread_t thread){#ifdef CONFIG_SMP	if (thread->cpu != rtl_getcpuid()) {		pthread_kill(thread,RTL_SIGNAL_WAKEUP);		rtl_reschedule_thread(thread);	} else#endif	{		pthread_kill(thread,RTL_SIGNAL_WAKEUP);		rtl_schedule();	}	return 0;}int pthread_attr_setcpu_np(pthread_attr_t *attr, int cpu){#ifdef CONFIG_SMP	if (!rtl_cpu_exists(cpu)) {		return EINVAL;	}#endif	attr->cpu = cpu;	return 0;}int pthread_attr_setstackaddr(pthread_attr_t *attr, void *stackaddr){	attr->stack_addr = stackaddr;	return 0;}int pthread_attr_getstackaddr(const pthread_attr_t *attr, void **stackaddr){	*stackaddr = attr->stack_addr;	return 0;}static void add_to_task_list(pthread_t thread){	schedule_t *s = LOCAL_SCHED;	thread->next = s -> rtl_tasks;	s->rtl_tasks = thread;} int __pthread_create (pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void *), void *arg, struct module *creator){	int *stack_addr;	long interrupt_state;	struct rtl_thread_struct *task;	pthread_attr_t default_attr;	int stack_size;	if (!attr) {		pthread_attr_init(&default_attr);		attr = &default_attr;	}	stack_size = attr->stack_size;	stack_addr = (int *) attr->stack_addr;	task = (struct rtl_thread_struct *) kmalloc(sizeof(struct rtl_thread_struct), GFP_KERNEL); 	if (!task) {  		return EAGAIN;  	}	if (!stack_addr) {		if (pthread_self() != pthread_linux()) {			kfree(task);			return EAGAIN;		}		stack_addr = (int *) kmalloc(stack_size, GFP_KERNEL); 		if (!stack_addr) {			kfree(task);  			return EAGAIN;  		}		task->kmalloc_stack_bottom = stack_addr;	} else {		task->kmalloc_stack_bottom = 0;	}	*thread = task;	task -> threadflags = 0;	if (attr->detachstate == PTHREAD_CREATE_JOINABLE) {		set_bit(RTL_THREAD_JOINABLE, &task->threadflags);	}	task->magic = RTL_THREAD_MAGIC;	task->creator = creator;	task->pending = attr->initial_state;	task->blocked = 0;	task->abort = 0;	task->cpu = attr->cpu;	task->cleanup = 0;	task->resume_time = HRTIME_INFINITY;	task->period = 0;	task->sched_param = attr->sched_param;	task->stack = stack_addr + stack_size / sizeof(int);	rtl_init_stack(task,start_routine, arg,rtl_startup);	rtl_no_interrupts(interrupt_state);	task->fpu_initialized = 0;	task->uses_fp = attr->use_fp;	{	schedule_t *s = sched_data(task->cpu);#ifdef CONFIG_SMP	if (task->cpu != rtl_getcpuid()) {		rtl_spin_lock (&s->rtl_tasks_lock);		task->next = s -> rtl_new_tasks;		s->rtl_new_tasks = task;		rtl_spin_unlock (&s->rtl_tasks_lock);		rtl_reschedule (task->cpu);	} else#endif	{		rtl_spin_lock (&s->rtl_tasks_lock);		add_to_task_list(task);		rtl_spin_unlock (&s->rtl_tasks_lock);		rtl_schedule();	}	}	rtl_restore_interrupts(interrupt_state);	return 0;}#ifdef CONFIG_RTL_FP_SUPPORTint pthread_attr_setfp_np (pthread_attr_t *attr, int flag){	attr->use_fp = flag;	return 0;}int pthread_setfp_np (pthread_t thread, int flag){	schedule_t *sched = LOCAL_SCHED;	rtl_irqstate_t flags;#ifdef CONFIG_SMP	if (rtl_getcpuid() != thread->cpu) {		rtl_printf("pthread_setfp_np() called on a wrong CPU!\n");		return EINVAL;	}#endif	rtl_no_interrupts(flags);#ifdef CONFIG_RTL_FP_SUPPORT	if (thread -> uses_fp != flag) {		thread -> uses_fp = flag;		if (flag) {			if (thread == pthread_self()) {				if (sched->rtl_task_fpu_owner) {					rtl_fpu_save (sched, sched->rtl_task_fpu_owner);				}				rtl_fpu_restore (sched, thread);				sched->rtl_task_fpu_owner = thread;			}		}/*  else {			if (sched->rtl_task_fpu_owner == thread) {				sched->rtl_task_fpu_owner = 0;			}		} */	}#endif /* CONFIG_RTL_FP_SUPPORT */	rtl_restore_interrupts(flags);	return 0;}#endifstatic void rtl_sched_timer_interrupt( struct pt_regs *regs){	clear_bit (RTL_SCHED_TIMER_OK, &LOCAL_SCHED->sched_flags); \	rtl_schedule();}int pthread_setcancelstate(int state, int *oldstate){	if (oldstate) {		*oldstate = rtl_sigismember (&pthread_self()->blocked, RTL_SIGNAL_CANCEL);	}	if (state) {		set_bit (RTL_SIGNAL_CANCEL, &pthread_self()->blocked);	} else {		clear_bit (RTL_SIGNAL_CANCEL, &pthread_self()->blocked);	}	return 0;}int pthread_setcanceltype(int type, int *oldtype){	rtl_irqstate_t flags;	rtl_no_interrupts (flags);	if (oldtype) {		*oldtype = test_bit(RTL_CANCELTYPE, &pthread_self()->threadflags);	}	if (type) {		set_bit (RTL_CANCELTYPE, &pthread_self()->threadflags);	} else {		clear_bit (RTL_CANCELTYPE, &pthread_self()->threadflags);	}	rtl_restore_interrupts(flags);	return 0;}int pthread_cancel (pthread_t thread){	if (RTL_PRIO(thread) < RTL_PRIO(pthread_linux())) {		RTL_PRIO(thread) = RTL_PRIO(pthread_linux()) + 3;	}	return pthread_kill(thread, RTL_SIGNAL_CANCEL);}void pthread_testcancel(void){	if (test_and_clear_bit(RTL_CANCELPENDING, &pthread_self()->threadflags)) {		pthread_exit(PTHREAD_CANCELED);	}}int pthread_delete_np (pthread_t thread){	hrtime_t timeout = gethrtime() + 1000000000;	clear_bit (RTL_SIGNAL_CANCEL, &thread->blocked);	set_bit (RTL_CANCELTYPE, &thread->threadflags);	set_bit(RTL_CANCELPENDING, &thread->threadflags);	clear_bit(RTL_THREAD_JOINABLE, &thread->threadflags);	/* now the cancel is enabled+asynchronous */	pthread_cancel (thread);	while (!test_bit (RTL_THREAD_FINISHED, &thread->threadflags)) {		barrier();		rtl_schedule();		if (gethrtime() >= timeout) {			rtl_printf("timed out in pthread_delete_np!\n");			break;		}	}	return 0;}#ifdef RTL_DEBUGvoid rtl_dump_tasks(void){	schedule_t *sched = LOCAL_SCHED;	struct rtl_thread_struct *t;	hrtime_t ts = sched->clock->gethrtime(sched->clock);	rtl_printf("Tasks on CPU %d time = (%9d)\n", rtl_getcpuid(), ts);	for (t = sched->rtl_tasks; t; t = t->next) {		if (t == &sched->rtl_linux_task) {			rtl_printf("linux task ");		}		rtl_printf("addr=%08x state=%04x i=(%9d) p=(%9d)\n", t, t->state, t->resume_time, t->period);	}}#endifint pthread_wait_np(void){	long interrupt_state;	pthread_t self = pthread_self();	rtl_no_interrupts(interrupt_state);	RTL_MARK_SUSPENDED (self);	__rtl_setup_timeout (self, self->resume_time);	self->resume_time += self->period;	rtl_schedule();	pthread_testcancel();	rtl_restore_interrupts(interrupt_state);	return 0;}#ifdef CONFIG_SMPstatic unsigned int resched_irq(struct pt_regs *r){	pthread_t t;	pthread_t nexttask;/* 	rtl_printf(" r on cpu %d; rtl_new_tasks = %x\n", rtl_getcpuid(), LOCAL_SCHED->rtl_new_tasks); */	rtl_spin_lock (&LOCAL_SCHED->rtl_tasks_lock);	for (t = LOCAL_SCHED->rtl_new_tasks; t; t = nexttask) {		nexttask = t->next;		add_to_task_list(t); /* modifies t->next */	}	LOCAL_SCHED->rtl_new_tasks = 0;	rtl_spin_unlock (&LOCAL_SCHED->rtl_tasks_lock);	rtl_schedule();		return 0;}#endif /* CONFIG_SMP */static void sched_irq_handler (int irq, void *dev_id, struct pt_regs *p){	rtl_irqstate_t flags;	rtl_spin_lock_irqsave(&rtl_tqueue_lock, flags);	while (zombie_threads) {		pthread_t th = zombie_threads;		zombie_threads = zombie_threads->next;		rtl_spin_unlock_irqrestore(&rtl_tqueue_lock, flags);		rtl_posix_on_delete(th);		if (th->kmalloc_stack_bottom) {			rtl_schedule_task ((struct tq_struct *) th->cleanup);		}		rtl_spin_lock_irqsave(&rtl_tqueue_lock, flags);	}	rtl_spin_unlock_irqrestore(&rtl_tqueue_lock, flags);}static int *thread_errno_location(void){	return &(RTL_CURRENT->errno_val);}static int *(*save_errno_location)(void);		 int init_module(void){	rtl_irqstate_t interrupt_state;	int i;	int ret;	int my_cpu_id;	schedule_t *s;	unsigned int cpu_id = rtl_getcpuid();	#ifdef CONFIG_OC_PTIMERS	rtl_spin_lock_init(&rtl_timer_list_lock);#endif	rtl_spin_lock_init (&rtl_tqueue_lock);	zombie_threads = 0;	ret  = rtl_get_soft_irq (sched_irq_handler, "RTLinux Scheduler");	if (ret  > 0) {		rtl_sched_irq = ret ;	} else {		rtl_printf ("Can't get an irq for RTLinux scheduler");		return -EINVAL;	}	rtl_no_interrupts(interrupt_state);	my_cpu_id = cpu_id;	for (i = 0; i < rtl_num_cpus(); i++) {		cpu_id = cpu_logical_map (i);		s = &rtl_sched [cpu_id];		s -> rtl_current = &s->rtl_linux_task;		s -> rtl_tasks = &s->rtl_linux_task;		s -> rtl_new_tasks = 0;		rtl_spin_lock_init (&s->rtl_tasks_lock);		s -> rtl_linux_task . magic = RTL_THREAD_MAGIC;		rtl_sigemptyset(&s -> rtl_linux_task . pending);		rtl_sigaddset(&s -> rtl_linux_task . pending, RTL_SIGNAL_READY);		s -> rtl_linux_task . blocked = 0;		s -> rtl_linux_task . threadflags = 0;		s -> rtl_linux_task . sched_param . sched_priority = -1;		s -> rtl_linux_task . next = 0;		s -> rtl_linux_task . uses_fp = 1;		s -> rtl_linux_task . fpu_initialized = 1;		s -> rtl_linux_task . creator = 0;		s -> rtl_linux_task . abort = 0;		s -> rtl_task_fpu_owner = &s->rtl_linux_task;		s -> sched_flags = 0;		rtl_posix_init (&s->rtl_linux_task);	        s-> clock =  rtl_getbestclock (cpu_id);		if (s->clock && rtl_setclockhandler (s->clock, rtl_sched_timer_interrupt) == 0) {			s->clock->init(s->clock);		} else {			rtl_printf("Can't get a clock for processor %d\n",cpu_id);			rtl_restore_interrupts (interrupt_state);			return  -EINVAL;		}	}	cpu_id = my_cpu_id;#ifdef CONFIG_SMP	for (i = 0; i < rtl_num_cpus(); i++) {		int cpu;		int ret;		cpu = cpu_logical_map (i);		s = &rtl_sched [cpu];		ret = rtl_request_ipi(resched_irq, cpu);	}#endif	rtl_restore_interrupts (interrupt_state);	save_errno_location = __errno_location_ptr;	__errno_location_ptr = thread_errno_location;/* 	rtl_setdebug (RTLDBG_ALL); */	return 0;}void cleanup_module(void){	int i;	int cpu;	schedule_t *s;	__errno_location_ptr = save_errno_location;	rtl_free_soft_irq(rtl_sched_irq);	for (i = 0; i < rtl_num_cpus(); i++) {		cpu = cpu_logical_map (i);		s = &rtl_sched [cpu];		s->clock->uninit(s->clock);#ifdef CONFIG_SMP		rtl_free_ipi(cpu);#endif	}}int usleep (useconds_t interval){	rtl_irqstate_t flags;	pthread_t th = pthread_self();	hrtime_t save_resume_time;	rtl_no_interrupts (flags);	save_resume_time = th->resume_time;	RTL_MARK_SUSPENDED(th);	__rtl_setup_timeout (th, gethrtime() + (long long) interval * 1000LL);	rtl_schedule();	pthread_testcancel();	th->resume_time = save_resume_time;	rtl_restore_interrupts (flags);	return 0;}int clock_nanosleep(clockid_t clock_id, int flags,		const struct timespec *rqtp, struct timespec *rmtp){	hrtime_t timeout;	rtl_irqstate_t irqstate;	hrtime_t save_resume_time;	pthread_t self = pthread_self();	int ret;	if (rqtp == (const struct timespec *) &self->timeval) {		timeout = self->timeval;	} else {		timeout = timespec_to_ns(rqtp);	}	rtl_no_interrupts (irqstate);	if (!(flags & TIMER_ABSTIME)) {		timeout += clock_gethrtime(CLOCK_RTL_SCHED);	} else {		timeout = __rtl_fix_timeout_for_clock(clock_id, timeout);	}	save_resume_time = self->resume_time;#ifdef CONFIG_OC_PSIGNALS	set_bit(RTL_THREAD_SIGNAL_INTERRUMPIBLE,&self->threadflags);#endif	RTL_MARK_SUSPENDED(self);	__rtl_setup_timeout (self, timeout);	ret = rtl_schedule();	pthread_testcancel();	if (RTL_TIMED_OUT(&ret)) {		self->resume_time = save_resume_time;#ifdef CONFIG_OC_PSIGNALS		clear_bit(RTL_THREAD_SIGNAL_INTERRUMPIBLE,&self->threadflags);#endif		rtl_restore_interrupts (irqstate);		return 0;	}	/* interrupted by a signal */	if (!(flags & TIMER_ABSTIME) && rmtp) {		*rmtp = timespec_from_ns(self->resume_time - clock_gethrtime(CLOCK_RTL_SCHED));	}	self->resume_time = save_resume_time;	rtl_restore_interrupts (irqstate);	return EINTR;}int nanosleep(const struct timespec *rqtp, struct timespec *rmtp){	int ret;	if ((ret = clock_nanosleep(CLOCK_RTL_SCHED, 0, rqtp, rmtp))) {		errno = ret;		return -1;	}	return 0;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲三级久久久| 亚洲国产精品久久人人爱蜜臀| 色综合 综合色| 蜜臀久久99精品久久久久久9 | 亚洲va欧美va人人爽| 26uuu另类欧美亚洲曰本| 色婷婷综合久久久久中文一区二区| 美女视频网站黄色亚洲| 亚洲丝袜另类动漫二区| 26uuu亚洲| 欧美日韩黄视频| 97久久久精品综合88久久| 免费高清成人在线| 亚洲福利视频导航| 亚洲欧美日韩在线不卡| 国产欧美综合在线观看第十页| 日韩视频免费观看高清完整版在线观看 | 亚洲国产精品一区二区www | 国产日韩欧美一区二区三区乱码 | 国内成+人亚洲+欧美+综合在线| 亚洲一区二区三区在线播放| 欧美经典一区二区| 欧美变态tickling挠脚心| 欧美日韩mp4| 欧美色图激情小说| 一本色道久久综合亚洲91 | 91精品国产欧美日韩| 在线观看视频一区二区欧美日韩| 成人久久视频在线观看| 国产精品一区二区三区乱码| 久久er精品视频| 蜜臀a∨国产成人精品| 性感美女久久精品| 亚洲一区二区美女| 亚洲国产精品久久一线不卡| 亚洲国产综合色| 亚洲国产精品久久不卡毛片 | 久久蜜桃香蕉精品一区二区三区| 日韩三级精品电影久久久| 欧美一区二区成人6969| 欧美久久久久久蜜桃| 欧美日韩视频不卡| 精品视频1区2区| 欧美精品高清视频| 91精品国产免费| 日韩一级大片在线观看| 日韩一级大片在线| 精品国产欧美一区二区| 亚洲精品一线二线三线| 久久久亚洲精品石原莉奈| 久久精品亚洲精品国产欧美| 久久久www成人免费毛片麻豆 | 日本成人中文字幕| 久久成人综合网| 国产精品一区2区| 成人激情小说乱人伦| 99久久99久久精品免费观看| 色婷婷av一区二区三区软件| 在线观看欧美精品| 欧美日韩在线直播| 日韩欧美一卡二卡| 精品国产99国产精品| 日本一区二区免费在线观看视频| 亚洲欧洲国产日韩| 亚洲成人黄色影院| 久久99精品久久久久久动态图| 国产真实乱对白精彩久久| 成人性生交大片| 欧美写真视频网站| 欧美电视剧在线观看完整版| 久久久99精品久久| 亚洲人成网站色在线观看 | 波多野结衣中文一区| 在线观看日韩国产| 精品久久久久久综合日本欧美| 国产人妖乱国产精品人妖| 亚洲精品视频免费观看| 日本不卡在线视频| 福利一区二区在线观看| 欧美色精品在线视频| 久久综合999| 亚洲精品国产一区二区精华液 | 亚洲一区影音先锋| 狠狠色综合日日| 在线观看91视频| 久久久美女毛片| 亚洲高清一区二区三区| 国产suv精品一区二区三区| 在线这里只有精品| 久久众筹精品私拍模特| 亚洲影院免费观看| 国产美女娇喘av呻吟久久| 一本大道久久a久久精品综合| 天堂在线一区二区| 久久婷婷国产综合国色天香 | 2021中文字幕一区亚洲| 1区2区3区国产精品| 日本午夜精品一区二区三区电影| 国产成人8x视频一区二区| 欧美日韩国产综合一区二区三区| 久久久久久97三级| 日韩精品午夜视频| 99久久伊人久久99| 日韩欧美国产一二三区| 亚洲精品日韩综合观看成人91| 国产一区二区在线看| 欧美性大战久久久久久久| 中文字幕av一区二区三区高| 免费欧美在线视频| 欧美午夜免费电影| 成人欧美一区二区三区黑人麻豆 | 午夜久久久久久| a亚洲天堂av| 精品电影一区二区三区| 亚洲成人tv网| 色欧美88888久久久久久影院| 久久久久国产一区二区三区四区| 琪琪久久久久日韩精品| 欧美日韩黄色一区二区| 夜夜嗨av一区二区三区四季av| 国产成a人亚洲精| 久久久夜色精品亚洲| 久久草av在线| 欧美一区二区三区人| 亚洲国产你懂的| 色婷婷国产精品| 亚洲精品中文在线观看| 91亚洲精品乱码久久久久久蜜桃| 日本一区二区在线不卡| 国产精品一区一区三区| 精品国产制服丝袜高跟| 精品一区二区三区在线视频| 日韩一区二区三区av| 夜夜嗨av一区二区三区网页| 91久久精品一区二区| 亚洲综合在线免费观看| 色8久久精品久久久久久蜜 | 日韩专区欧美专区| 欧美伦理影视网| 日韩精品三区四区| 欧美一区二区久久久| 免费不卡在线观看| 欧美电影免费观看高清完整版在| 麻豆91免费看| 精品国产免费久久| 国产一区二区电影| 欧美国产成人在线| 成人av资源在线观看| 国产精品国产成人国产三级| 99麻豆久久久国产精品免费优播| 中文字幕中文字幕一区二区| 99精品桃花视频在线观看| 亚洲免费观看在线观看| 欧美怡红院视频| 日本91福利区| 久久久精品免费免费| 99精品视频一区| 亚洲午夜视频在线| 日韩免费高清电影| 国产精品综合一区二区三区| 国产精品三级视频| 欧美亚洲尤物久久| 久久69国产一区二区蜜臀| 日本一区二区三区四区| 91丨九色porny丨蝌蚪| 香蕉影视欧美成人| 久久久三级国产网站| 91色综合久久久久婷婷| 日韩在线一区二区| 久久美女艺术照精彩视频福利播放 | 欧美精品123区| 国模一区二区三区白浆| 亚洲欧洲成人自拍| 日韩一区二区三区视频| 成人不卡免费av| 午夜av电影一区| 国产欧美日韩久久| 欧美日本一区二区在线观看| 精品一区二区三区在线观看国产| 亚洲特级片在线| 69堂成人精品免费视频| 国产99一区视频免费| 香蕉久久一区二区不卡无毒影院| 久久久久久久久久久久久久久99| 在线免费观看日本欧美| 国产精品中文欧美| 亚洲一二三四久久| 国产欧美一区二区三区沐欲| 欧美日韩久久一区| 国产成人综合在线播放| 亚洲一二三区视频在线观看| 国产欧美日韩亚州综合| 91精品国产综合久久久久久久久久| 国产·精品毛片| 免费一级片91| 一区二区三区影院| 国产欧美日韩三级| 欧美成人激情免费网| 色婷婷国产精品| 成人激情文学综合网|