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

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

?? reserve_cpu.c

?? fsmlabs的real time linux的內核
?? C
字號:
/* * (C) Finite State Machine Labs Inc. 1999 <business@fsmlabs.com> * * Released under the terms of GPL 2. * Open RTLinux makes use of a patented process described in * US Patent 5,995,745. Use of this process is governed * by the Open RTLinux Patent License which can be obtained from * www.fsmlabs.com/PATENT or by sending email to * licensequestions@fsmlabs.com */#include <linux/version.h>#include <linux/config.h>#include <rtl_conf.h>#ifdef CONFIG_RTL_SUSPEND_LINUX#ifndef CONFIG_SMP#error CONFIG_RTL_SUSPEND_LINUX is not supported for non-SMP configurations. Please disable it.#endif#if (LINUX_VERSION_CODE < 0x020300)#error CONFIG_RTL_SUSPEND_LINUX is not supported for 2.2.X kernels. Please disable it.#endif#include <reserve_cpu.h>#include <rtl_core.h>#include <linux/sched.h>#include <asm/irq.h>#include <asm/smplock.h>#include <linux/smp.h>#include <rtl_signal.h>#include <linux/malloc.h>#define __KERNEL_SYSCALLS__#include <linux/sched.h>#include <linux/unistd.h>#include <asm/uaccess.h>static int errno;static int reserve_thread(void * arg);static void reserve_irq(int irq, void *dev_id, struct pt_regs *p);static void restore_linux_irq(int irq, void *dev_id, struct pt_regs *p);static int idle_or_fork(void *);#define NOLINUX_CLONE	(CLONE_FS | CLONE_FILES | CLONE_SIGHAND | SIGCHLD)/* global data: better not rmmod until all users of this * are gone * */struct reserve_thread_data {	atomic_t telescoping;       	atomic_t highwater;       	atomic_t smp_num_cpus;	pid_t root;	int active;       	int rtlinux_reserve_irq;       	int rtlinux_restore_irq;	atomic_t exit;	wait_queue_head_t wait_reserve;	wait_queue_head_t wait_telescope;	wait_queue_head_t wait_root;	}RD;/*TODO make these static */int rtlinux_suspend_linux_signal(void){	return (RD.rtlinux_reserve_irq?\		       	RD.rtlinux_reserve_irq+ RTL_LINUX_MIN_SIGNAL:0);}int rtlinux_suspend_linux_irq(void) { return RD.rtlinux_reserve_irq;}int rtlinux_restore_linux_signal(void){	return (RD.rtlinux_restore_irq?\		       	RD.rtlinux_restore_irq+ RTL_LINUX_MIN_SIGNAL:0);}int rtlinux_restore_linux_irq(void) { return RD.rtlinux_restore_irq;}/* interrupt handlers */static void reserve_irq(int irq, void *dev_id, struct pt_regs *p){	printk("RTLinux got RESERVE irq\n");	wake_up(&RD.wait_reserve);	return;}/* there can't be more than one of these running at one time can * there? */static void restore_linux_irq(int irq, void *dev_id, struct pt_regs *p){	if(atomic_read(&RD.smp_num_cpus) < atomic_read(&RD.highwater)){		smp_num_cpus ++;		atomic_set(&RD.smp_num_cpus,smp_num_cpus);	}	return;}/* module init */void rtlinux_suspend_linux_init(void){	int irq;	atomic_set(&RD.highwater,smp_num_cpus);	atomic_set(&RD.smp_num_cpus,smp_num_cpus);	init_waitqueue_head(&RD.wait_reserve);	init_waitqueue_head(&RD.wait_telescope);	init_waitqueue_head(&RD.wait_root);	irq = rtl_get_soft_irq (reserve_irq, "RTLinux disable linux");	if (irq < 0) {		printk("RTLinux RESERVE can't get first interrupt handler\n");		return;	}	RD.rtlinux_reserve_irq = irq;	irq = rtl_get_soft_irq (restore_linux_irq, "RTLinux restore linux");	if (irq < 0) {		printk("RTLinux RESERVE can't get second interrupt handler\n");		rtl_free_soft_irq(RD.rtlinux_reserve_irq);		return;	}	RD.rtlinux_restore_irq = irq;	/* start the root kernel thread */	if ((RD.root= kernel_thread(reserve_thread,0, NOLINUX_CLONE)) < 0){		rtl_free_irq(RD.rtlinux_reserve_irq);		rtl_free_irq(RD.rtlinux_restore_irq);		printk("RTLinux RESERVE fails: can't make initial Kthread\n");		RD.rtlinux_reserve_irq =0;		RD.rtlinux_restore_irq =0;	}	RD.active = 1;	return;}/* kernel threads */#define ABSURDLY_HIGH_PRIORITY 1000;int reserve_thread(void * arg){       	int target;       	lock_kernel();       	exit_files(current);       	daemonize();	atomic_set(&RD.telescoping,0);       	atomic_set(&RD.highwater,smp_num_cpus);	atomic_set(&RD.exit,0);       	unlock_kernel();	/* until the exit flag becomes true	 * sleep	 * wakeup to steal a cpu	 * if still telescoping (stealing the last one) return	 * else spawn threads until one is on the target CPU and	 * can choke it.	 * */	 	while(atomic_read(&RD.exit) == 0){		       	sleep_on(&RD.wait_reserve);//printk("RTLinux woke up reserve\n");			if(atomic_read(&RD.exit)){//printk("RTLinux exit\n");				if(atomic_read(&RD.telescoping)){//printk("RTLinux wait telescoping\n");					sleep_on(&RD.wait_telescope);//printk("RTLinux woke up telescope exit\n");				}				RD.active = 0;//printk("RTLinux about to wake up root\n");				wake_up(&RD.wait_root);				return 0; /* cleanup time */			}			if(atomic_read(&RD.telescoping)){				/* still working on the last one				 * ignore this*/				printk("RTLinux RESERVE ignore double call\n");				continue;			}			/* ok now we need to act */#if LINUX_2_4_0_FINAL_OR_LATER		       	current->nice =  ABSURDLY_HIGH_PRIORITY;#else		       	current->priority =  ABSURDLY_HIGH_PRIORITY;#endif		       	current->policy =  SCHED_RR; /* take that */		       	if(smp_num_cpus > atomic_read(&RD.highwater))		       	{ /* bad things */		       	printk("RTLinux RESERVE major sync foulup!\n");		       	return -1;		       	}		       	target = smp_num_cpus -1;		       	if(target >= 0){			       	smp_num_cpus --;				atomic_set(&RD.smp_num_cpus,smp_num_cpus);			       	atomic_set(&RD.telescoping,1);				if(kernel_thread(idle_or_fork,(void *)target, NOLINUX_CLONE)< 0){					printk("RTLinux RESERVE root can't fork");					smp_num_cpus++;					atomic_set(&RD.smp_num_cpus,smp_num_cpus);					return 0;				}				else continue;			}			else{				rtl_printf("RTLinux RESERVE no free processors\n");				continue;			}	}	return 0;}extern int rtl_reserved_cpumask;extern void flush_tlb_all(void);static int idle_or_fork(void *kv){	int target = (int) kv;#if LINUX_2_4_0_FINAL_OR_LATER       	current->nice =  ABSURDLY_HIGH_PRIORITY;#else       	current->priority =  ABSURDLY_HIGH_PRIORITY;#endif       	current->policy =  SCHED_RR; /* take that */       	if(hw_smp_processor_id() == target){		unsigned long mask[NR_IRQS],oldmask[NR_IRQS],i;	       	printk("RTLinux RESERVE thread has cpu %d\n",target);		atomic_set(&RD.telescoping,0);		local_irq_disable();		for(i=0; i< NR_IRQS;i++){		rtl_irq_set_affinity (i, 0, &oldmask[i]);		mask[i] = oldmask[i];		clear_bit(hw_smp_processor_id(),&mask[i]);		rtl_irq_set_affinity (i, &mask[i],0 );		}		set_bit (hw_smp_processor_id(), &rtl_reserved_cpumask);		set_bit (0,&mask);	       	while((atomic_read(&RD.smp_num_cpus)  <= target)){			if(atomic_read(&RD.exit)){					printk("RTLinux RESERVE exits loop\n");					break;					}		}		for(i=0; i< NR_IRQS;i++){			rtl_irq_set_affinity (i, &oldmask[i],0);		}		local_irq_enable();		flush_tlb_all();		printk("RTLinux RESERVE unreserve %d\n",hw_smp_processor_id());		clear_bit (hw_smp_processor_id(), &rtl_reserved_cpumask);       	}       	else{	       	if(kernel_thread (idle_or_fork,kv, NOLINUX_CLONE)< 0){		       	printk("RTLinux RESERVE nonroot can't fork\n");			atomic_set(&RD.telescoping,0);			smp_num_cpus++;			atomic_set(&RD.smp_num_cpus,smp_num_cpus);			return -1;		}	       	else{		       	while(atomic_read(&RD.telescoping)){				if(atomic_read(&RD.exit)){					printk("RTLinux RESERVE other exits loop\n");					break;				}			}			printk("RTLinux RESERVE release %d\n",hw_smp_processor_id());	       	}       	}	return 0;}void rtlinux_suspend_linux_cleanup(void){	lock_kernel();	if((volatile int)RD.active){		if(RD.rtlinux_reserve_irq)			rtl_free_soft_irq(RD.rtlinux_reserve_irq);		if(RD.rtlinux_restore_irq)			rtl_free_soft_irq(RD.rtlinux_restore_irq);		RD.rtlinux_reserve_irq = 0;		RD.rtlinux_restore_irq = 0;		atomic_set(&RD.exit,1);//printk("RTLinux debug reserve about to wake %d\n",RD.root);		if(RD.root){ wake_up(&RD.wait_reserve); }		unlock_kernel();		while((volatile int)RD.active){			sleep_on_timeout(&RD.wait_root,1000);//	printk("RTLinux RESERVE cleanup %s\n",(RD.active?"not done":"done"));		}	}else  unlock_kernel();}#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲午夜电影在线观看| 不卡的电影网站| 国产精品久久久久久久久免费丝袜| 欧美片在线播放| a在线播放不卡| 国产精品亚洲成人| 麻豆国产一区二区| 天堂成人国产精品一区| 亚洲电影你懂得| 一区二区三区高清在线| 亚洲三级在线播放| 自拍偷拍国产亚洲| 亚洲欧美综合色| 中文字幕电影一区| 日本一区二区三区久久久久久久久不| 精品日韩99亚洲| 日韩一区二区不卡| 日韩欧美一区在线观看| 日韩午夜精品视频| 日韩一级精品视频在线观看| 在线成人av影院| 欧美伦理电影网| 91精品中文字幕一区二区三区| 欧美乱熟臀69xxxxxx| 欧美一区午夜精品| 欧美一区三区四区| 成人a免费在线看| 麻豆国产精品官网| 亚洲一区影音先锋| 日本一区二区视频在线观看| 欧美不卡123| 欧美成人精品3d动漫h| 夜夜嗨av一区二区三区四季av| 国产999精品久久久久久绿帽| 91小视频免费看| 国产激情视频一区二区三区欧美| 亚洲激情在线激情| 国产在线视频一区二区| 日本电影亚洲天堂一区| 91在线看国产| 欧美亚洲国产一区在线观看网站| 欧美亚洲禁片免费| 色婷婷综合激情| 99麻豆久久久国产精品免费 | 一区二区在线电影| 久久先锋影音av鲁色资源网| 日韩三级免费观看| 日韩亚洲欧美一区| 欧美视频一区二| 日韩欧美激情四射| 亚洲免费观看高清完整版在线观看 | 精品久久国产97色综合| 色8久久精品久久久久久蜜| 91玉足脚交白嫩脚丫在线播放| 91免费看`日韩一区二区| 日本伦理一区二区| 91 com成人网| 欧美久久免费观看| 日韩三级视频中文字幕| 久久婷婷一区二区三区| 成人免费在线播放视频| 久久精品国产在热久久| 美女网站在线免费欧美精品| 亚洲一级二级三级在线免费观看| 视频一区在线视频| 色狠狠色噜噜噜综合网| 欧美疯狂性受xxxxx喷水图片| 精品国产一区二区三区四区四 | 国产精品国产精品国产专区不蜜 | 欧美日韩国产大片| 欧美日韩激情在线| 国产 日韩 欧美大片| 欧美亚洲尤物久久| 2024国产精品| 一区二区三区欧美日| 国产毛片精品视频| 精品婷婷伊人一区三区三| 久久久久亚洲综合| 丝袜国产日韩另类美女| 成人夜色视频网站在线观看| 7777精品伊人久久久大香线蕉完整版 | 亚洲激情自拍视频| 国内成人精品2018免费看| 欧美午夜精品久久久| 国产人伦精品一区二区| 奇米色一区二区| 色综合色综合色综合色综合色综合 | 精品中文av资源站在线观看| 一道本成人在线| 久久只精品国产| 日韩主播视频在线| 欧日韩精品视频| 国产精品日产欧美久久久久| 韩国一区二区三区| 7878成人国产在线观看| 亚洲综合av网| 成人91在线观看| 26uuu欧美日本| 日韩在线播放一区二区| 在线视频国内自拍亚洲视频| 国产精品伦一区| 国产一区二区视频在线播放| 91精品午夜视频| 亚洲福利视频一区二区| 欧美日韩一区二区三区不卡 | 亚洲综合精品久久| 色综合视频在线观看| 中日韩av电影| 欧美一区二区三区四区高清| 亚洲一区电影777| 国产最新精品免费| 91麻豆精品国产| 亚洲成人一区在线| 欧美色涩在线第一页| 亚洲色图清纯唯美| 波多野结衣中文字幕一区 | 亚洲美女区一区| 成人免费视频视频| 国产日韩精品一区| 国产成人在线视频播放| 久久众筹精品私拍模特| 激情另类小说区图片区视频区| 日韩美一区二区三区| 久久国产剧场电影| 欧美成人一区二区| 极品少妇一区二区| 日韩欧美中文一区| 精品系列免费在线观看| 精品嫩草影院久久| 国产一区二区在线观看免费| 久久精品欧美日韩精品| 国产91精品一区二区| 亚洲国产精华液网站w| 成人白浆超碰人人人人| 成人欧美一区二区三区小说| 91影院在线观看| 一区二区国产视频| 欧美理论在线播放| 九九精品视频在线看| 久久久精品一品道一区| 99热精品国产| 亚洲资源在线观看| 3d成人h动漫网站入口| 久久99热这里只有精品| 久久精品日产第一区二区三区高清版 | 欧美日韩精品一区二区| 日韩电影在线一区二区三区| 精品国产在天天线2019| 粉嫩绯色av一区二区在线观看| 亚洲色图在线看| 欧美日韩国产大片| 国产一区二区三区精品视频| 国产精品女同一区二区三区| 91传媒视频在线播放| 日韩高清国产一区在线| 久久久久久**毛片大全| 91欧美一区二区| 婷婷综合五月天| 久久久久综合网| 色猫猫国产区一区二在线视频| 日韩国产欧美三级| 国产女主播视频一区二区| 一本色道久久综合亚洲91 | 美女国产一区二区三区| 国产日本欧美一区二区| 欧美日韩一级黄| 国产一区福利在线| 亚洲精品视频在线看| 日韩免费在线观看| 99久久精品国产导航| 日本一区中文字幕| 亚洲欧洲韩国日本视频| 欧美一级欧美三级在线观看| 成人三级在线视频| 免费人成精品欧美精品| 亚洲视频在线观看三级| 精品国产一区二区三区久久影院| 色噜噜狠狠成人网p站| 美女高潮久久久| 一区二区三区不卡视频在线观看| 久久综合九色综合97婷婷| 91久久久免费一区二区| 国产一区二区三区电影在线观看 | 丁香啪啪综合成人亚洲小说| 亚洲第一成人在线| 日本一区二区三区高清不卡| 欧美一区二区在线播放| 99re在线视频这里只有精品| 黑人巨大精品欧美一区| 亚洲午夜av在线| 中文字幕成人av| 日韩午夜精品电影| 欧美日韩视频不卡| 99久久精品国产导航| 国产精品18久久久久久久久| 男人的天堂久久精品| 亚洲最大色网站| 自拍偷拍亚洲激情| 国产欧美一区二区精品婷婷| 日韩美女主播在线视频一区二区三区|