⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rthal-5g-2.4.22-yd2f.patch

📁 rtai-3.1-test3的源代码(Real-Time Application Interface )
💻 PATCH
📖 第 1 页 / 共 2 页
字号:
+	}+//printk("rtai_callback_list %X\n", rtai_callback_list);+}+//+//+//+ NORET_TYPE void do_exit(long code) { 	struct task_struct *tsk = current;@@ -439,6 +504,18 @@ #ifdef CONFIG_BSD_PROCESS_ACCT 	acct_process(code); #endif++/*+ * PGGC added these lines to callback rtai when a task dies.+ * This assumes that a LXRT task should/will always set its+ * scheduling police to SCHED_FIFO or SCHED_RR.+ * We may want to enforce this in rt_task_init(...).+ * (For the moment it is not so, thus let's inform LXRT anyhow (Paolo))+ */+	if(tsk->this_rt_task[0]) {+		inform_rtai();+	}+ 	__exit_mm(tsk);  	lock_kernel();+ diff -u yd-linux-2.4.22-2f/kernel/fork.c.PRE_RTAI yd-linux-2.4.22-2f/kernel/fork.c--- yd-linux-2.4.22-2f/kernel/fork.c.PRE_RTAI	2003-08-25 13:44:44.000000000 +0200+++ yd-linux-2.4.22-2f/kernel/fork.c	2004-03-12 12:21:26.000000000 +0100@@ -233,7 +233,9 @@ 	atomic_set(&mm->mm_count, 1); 	init_rwsem(&mm->mmap_sem); 	mm->page_table_lock = SPIN_LOCK_UNLOCKED;+	lock_kernel(); 	mm->pgd = pgd_alloc(mm);+	unlock_kernel(); 	mm->def_flags = 0; 	if (mm->pgd) 		return mm;@@ -265,7 +267,9 @@ inline void __mmdrop(struct mm_struct *mm) { 	BUG_ON(mm == &init_mm);+	lock_kernel(); 	pgd_free(mm->pgd);+	unlock_kernel(); 	destroy_context(mm); 	free_mm(mm); }+ diff -u yd-linux-2.4.22-2f/kernel/ksyms.c.PRE_RTAI yd-linux-2.4.22-2f/kernel/ksyms.c--- yd-linux-2.4.22-2f/kernel/ksyms.c.PRE_RTAI	2003-11-09 21:57:53.000000000 +0100+++ yd-linux-2.4.22-2f/kernel/ksyms.c	2004-03-12 12:27:45.000000000 +0100@@ -603,3 +603,45 @@ /* To match ksyms with System.map */ extern const char _end[]; EXPORT_SYMBOL(_end);++/*** RTAI ***/+/*+ * used to inform rtai a task is about to die.+ */+extern int  set_rtai_callback(   void (*fun)(struct task_struct *tsk));+extern void remove_rtai_callback(void (*fun)(struct task_struct *tsk));+extern NORET_TYPE void do_exit(long code);+EXPORT_SYMBOL(set_rtai_callback);+EXPORT_SYMBOL(remove_rtai_callback);+EXPORT_SYMBOL(do_exit);++/*+ * used to inform RTAI LXRT a task should deal with a Linux signal, and for rt_lxrt_fork()+ */+extern int (*rtai_signal_handler)(struct task_struct *lnxt, int sig);+EXPORT_SYMBOL(rtai_signal_handler);+extern int do_fork(unsigned long clone_flags, unsigned long stack_start, struct pt_regs *regs, unsigned long stack_size);+EXPORT_SYMBOL(do_fork);++/*+ * used to provide async io support (aio) to RTAI LXRT.+ */+extern ssize_t sys_read(unsigned int fd, char * buf, size_t count);+extern ssize_t sys_write(unsigned int fd, const char * buf, size_t count);+extern ssize_t sys_pread(unsigned int fd, char * buf,+				                             size_t count, loff_t pos);+extern ssize_t sys_pwrite(unsigned int fd, const char * buf,+				                              size_t count, loff_t pos);+extern long sys_fsync(unsigned int fd);+extern long sys_fdatasync(unsigned int fd);+extern long sys_open(const char * filename, int flags, int mode);+extern long sys_close(unsigned int fd);++EXPORT_SYMBOL(sys_read);+EXPORT_SYMBOL(sys_write);+EXPORT_SYMBOL(sys_open);+/*EXPORT_SYMBOL(sys_close);*/+EXPORT_SYMBOL(sys_pread);+EXPORT_SYMBOL(sys_pwrite);+EXPORT_SYMBOL(sys_fsync);+EXPORT_SYMBOL(sys_fdatasync);+ diff -u yd-linux-2.4.22-2f/kernel/sched.c.PRE_RTAI yd-linux-2.4.22-2f/kernel/sched.c--- yd-linux-2.4.22-2f/kernel/sched.c.PRE_RTAI	2003-08-25 13:44:44.000000000 +0200+++ yd-linux-2.4.22-2f/kernel/sched.c	2004-03-12 12:21:26.000000000 +0100@@ -544,6 +544,75 @@  * tasks can run. It can not be killed, and it cannot sleep. The 'state'  * information in task[0] is never used.  */++int idle_weight = -1000;+#define MAX_MM 4096  // How large should it be?+static struct smm_t { int in, out; struct mm_struct *mm[MAX_MM]; } smm[NR_CPUS];+#define incpnd(x) do { x = (x + 1) & (MAX_MM - 1); } while(0)++#ifdef CONFIG_X86+static inline void pend_mm(struct mm_struct *mm, int cpu)+{+	if (rthal.lxrt_global_cli) {+        	struct smm_t *p = smm + cpu;+        	p->mm[p->in] = mm;+	        incpnd(p->in);+	} else {+		mmdrop(mm);+	}+}++static inline void drop_mm(void)+{+	if (rthal.lxrt_global_cli) {+        	struct smm_t *p = smm + smp_processor_id();+	        while (p->out != p->in) {+        	        mmdrop(p->mm[p->out]);+              		incpnd(p->out);+        	}+        }+}++void switch_mem(struct task_struct *prevp, struct task_struct *nextp, int cpuid)+{+	if (cpuid < 0) {+		struct mm_struct *next = nextp->active_mm;+		if (prevp->active_mm != next || (cpuid & 0x40000000)) {+			if ((prevp->active_mm)->context.segments != next->context.segments) {+				load_LDT(next);+			}+			set_bit(cpuid & 0xFFFFFFF, &next->context.cpuvalid);+			asm volatile("movl %0,%%cr3": :"r" (__pa(next->pgd)));+		}+#ifdef CONFIG_SMP+		  else if (!test_and_set_bit(cpuid & 0xFFFFFFF, &next->context.cpuvalid)) {+			load_LDT(next);+		}+#endif+	} else {+		struct mm_struct *oldmm = prevp->active_mm;+		if (nextp->mm) {+			switch_mm(oldmm, nextp->mm, nextp, cpuid);+		} else {+			nextp->active_mm = oldmm;+			atomic_inc(&oldmm->mm_count);+			enter_lazy_tlb(oldmm, nextp, cpuid);+		}+		if (!prevp->mm) {+			prevp->active_mm = NULL;+			pend_mm(oldmm, cpuid);+		}+	}+}+#else+static inline void pend_mm(struct mm_struct *mm, int cpu)+{+	mmdrop(mm);+}+static inline void drop_mm(void) {}+void switch_mem(struct task_struct *prevp, struct task_struct *nextp, int cpuid) {}+#endif+ asmlinkage void schedule(void) { 	struct schedule_data * sched_data;@@ -602,7 +671,7 @@ 	 * Default process to select.. 	 */ 	next = idle_task(this_cpu);-	c = -1000;+	c = idle_weight; 	list_for_each(tmp, &runqueue_head) { 		p = list_entry(tmp, struct task_struct, run_list); 		if (can_schedule(p, this_cpu)) {@@ -684,7 +753,7 @@  		if (!prev->mm) { 			prev->active_mm = NULL;-			mmdrop(oldmm);+			pend_mm(oldmm, this_cpu); 		} 	} @@ -693,6 +762,7 @@ 	 * stack. 	 */ 	switch_to(prev, next, prev);+	drop_mm(); 	__schedule_tail(prev);  same_process:+ diff -u yd-linux-2.4.22-2f/kernel/signal.c.PRE_RTAI yd-linux-2.4.22-2f/kernel/signal.c--- yd-linux-2.4.22-2f/kernel/signal.c.PRE_RTAI	2003-06-13 16:51:39.000000000 +0200+++ yd-linux-2.4.22-2f/kernel/signal.c	2004-03-12 12:21:26.000000000 +0100@@ -1010,9 +1010,30 @@ 	return ret; } +//+//  Add this pointer to the RTAI signal handler.+//+int (*rtai_signal_handler)(struct task_struct *lnxt, int sig);+ asmlinkage long sys_kill(int pid, int sig) {+// Add this section to call the RTAI signal handler.+//+	{+	struct task_struct *p;+	int ret;++	if (rtai_signal_handler) {+	    p = find_task_by_pid(pid);+		if(p && (p->policy == SCHED_FIFO || p->policy == SCHED_RR) && p->this_rt_task[0]) {+			ret = rtai_signal_handler(p, sig);+			if(!ret) return 0; //let Linux deal with it.+			}+		}+	}++	{ 	struct siginfo info;  	info.si_signo = sig;@@ -1022,6 +1043,7 @@ 	info.si_uid = current->uid;  	return kill_something_info(sig, &info, pid);+	} }  /*+ diff -u yd-linux-2.4.22-2f/Makefile.PRE_RTAI yd-linux-2.4.22-2f/Makefile--- yd-linux-2.4.22-2f/Makefile.PRE_RTAI	2003-11-09 23:16:24.000000000 +0100+++ yd-linux-2.4.22-2f/Makefile	2004-03-12 12:28:34.000000000 +0100@@ -1,7 +1,7 @@ VERSION = 2 PATCHLEVEL = 4 SUBLEVEL = 22-EXTRAVERSION = -2fcustom+EXTRAVERSION = -2fcustom-rthal5  KERNELRELEASE=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION) 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -