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

📄 uml-2.6.10-fc3.patch

📁 lustre 1.6.5 source code
💻 PATCH
📖 第 1 页 / 共 5 页
字号:
++	fixrange_init( FIXADDR_USER_START, FIXADDR_USER_END, swapper_pg_dir);+	paddr = (unsigned long)alloc_bootmem_low_pages( size);+	memcpy( (void *)paddr, (void *)FIXADDR_USER_START, size);+	paddr = __pa(paddr);+	for ( ; size > 0; size-=PAGE_SIZE, vaddr+=PAGE_SIZE, paddr+=PAGE_SIZE) {+		pgd = swapper_pg_dir + pgd_index(vaddr);+		pmd = pmd_offset(pgd, vaddr);+		pte = pte_offset_kernel(pmd, vaddr);+		/*pte_set_val( (*pte), paddr, PAGE_READONLY);*/+		pte_val(*pte) = paddr | pgprot_val(PAGE_READONLY);+	}+}+ void paging_init(void) { 	unsigned long zones_size[MAX_NR_ZONES], vaddr;@@ -195,6 +219,8 @@ 	vaddr = __fix_to_virt(__end_of_fixed_addresses - 1) & PMD_MASK; 	fixrange_init(vaddr, FIXADDR_TOP, swapper_pg_dir); +	fixaddr_user_init();+ #ifdef CONFIG_HIGHMEM 	init_highmem(); #endifIndex: linux-2.6.10/arch/um/kernel/skas/process.c===================================================================--- linux-2.6.10.orig/arch/um/kernel/skas/process.c	2004-12-25 05:35:39.000000000 +0800+++ linux-2.6.10/arch/um/kernel/skas/process.c	2005-04-07 22:05:29.483759976 +0800@@ -11,6 +11,7 @@ #include <sched.h> #include <sys/wait.h> #include <sys/ptrace.h>+#include <linux/ptrace.h> #include <sys/mman.h> #include <sys/user.h> #include <asm/unistd.h>@@ -60,15 +61,10 @@ /*To use the same value of using_sysemu as the caller, ask it that value (in local_using_sysemu)*/ static void handle_trap(int pid, union uml_pt_regs *regs, int local_using_sysemu) {-	int err, syscall_nr, status;--	syscall_nr = PT_SYSCALL_NR(regs->skas.regs);-	UPT_SYSCALL_NR(regs) = syscall_nr;-	if(syscall_nr < 0){-		relay_signal(SIGTRAP, regs);-		return;-	} + 	int err, status;+  + 	UPT_SYSCALL_NR(regs) = PT_SYSCALL_NR(regs->skas.regs); /* Mark this as a syscall */ 	if (!local_using_sysemu) 	{ 		err = ptrace(PTRACE_POKEUSER, pid, PT_SYSCALL_NR_OFFSET, __NR_getpid);@@ -82,7 +78,8 @@ 			      "errno = %d\n", errno);  		CATCH_EINTR(err = waitpid(pid, &status, WUNTRACED));-		if((err < 0) || !WIFSTOPPED(status) || (WSTOPSIG(status) != SIGTRAP))+		if((err < 0) || !WIFSTOPPED(status) ||+		                (WSTOPSIG(status) != (SIGTRAP|SYSCALL_TRAP))) 			panic("handle_trap - failed to wait at end of syscall, " 			      "errno = %d, status = %d\n", errno, status); 	}@@ -131,6 +128,10 @@ 		panic("start_userspace : expected SIGSTOP, got status = %d", 		      status); +	if (ptrace(PTRACE_OLDSETOPTIONS, pid, NULL, (void *)PTRACE_O_TRACESYSGOOD) < 0)+		panic("start_userspace : PTRACE_SETOPTIONS failed, errno=%d\n",+		      errno);+ 	if(munmap(stack, PAGE_SIZE) < 0) 		panic("start_userspace : munmap failed, errno = %d\n", errno); @@ -160,15 +161,19 @@  		regs->skas.is_user = 1; 		save_registers(regs);+		UPT_SYSCALL_NR(regs) = -1; /* Assume: It's not a syscall */  		if(WIFSTOPPED(status)){ 		  	switch(WSTOPSIG(status)){ 			case SIGSEGV: 				handle_segv(pid); 				break;-			case SIGTRAP:+			case (SIGTRAP|SYSCALL_TRAP): 			        handle_trap(pid, regs, local_using_sysemu); 				break;+			case SIGTRAP:+				relay_signal(SIGTRAP, regs);+				break; 			case SIGIO: 			case SIGVTALRM: 			case SIGILL:@@ -222,9 +227,10 @@ 	block_signals(); 	if(sigsetjmp(fork_buf, 1) == 0) 		new_thread_proc(stack, handler);-	set_signals(flags);  	remove_sigstack();++	set_signals(flags); }  void thread_wait(void *sw, void *fb)Index: linux-2.6.10/arch/um/kernel/skas/sys-i386/Makefile===================================================================--- linux-2.6.10.orig/arch/um/kernel/skas/sys-i386/Makefile	2004-12-25 05:35:27.000000000 +0800+++ linux-2.6.10/arch/um/kernel/skas/sys-i386/Makefile	2005-04-07 19:34:21.197950744 +0800@@ -1,12 +0,0 @@-# -# Copyright (C) 2002 Jeff Dike (jdike@karaya.com)-# Licensed under the GPL-#--obj-y = sigcontext.o--USER_OBJS = sigcontext.o-USER_OBJS := $(foreach file,$(USER_OBJS),$(obj)/$(file))--$(USER_OBJS) : %.o: %.c-	$(CC) $(CFLAGS_$(notdir $@)) $(USER_CFLAGS) -c -o $@ $<Index: linux-2.6.10/arch/um/kernel/skas/sys-i386/sigcontext.c===================================================================--- linux-2.6.10.orig/arch/um/kernel/skas/sys-i386/sigcontext.c	2004-12-25 05:33:51.000000000 +0800+++ linux-2.6.10/arch/um/kernel/skas/sys-i386/sigcontext.c	2005-04-07 19:34:21.197950744 +0800@@ -1,114 +0,0 @@-/* - * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)- * Licensed under the GPL- */--#include <errno.h>-#include <asm/sigcontext.h>-#include <sys/ptrace.h>-#include <linux/ptrace.h>-#include "sysdep/ptrace.h"-#include "sysdep/ptrace_user.h"-#include "kern_util.h"-#include "user.h"-#include "sigcontext.h"-#include "mode.h"--int copy_sc_from_user_skas(int pid, union uml_pt_regs *regs, void *from_ptr)-{-  	struct sigcontext sc, *from = from_ptr;-	unsigned long fpregs[FP_FRAME_SIZE];-	int err;--	err = copy_from_user_proc(&sc, from, sizeof(sc));-	err |= copy_from_user_proc(fpregs, sc.fpstate, sizeof(fpregs));-	if(err)-		return(err);--	regs->skas.regs[GS] = sc.gs;-	regs->skas.regs[FS] = sc.fs;-	regs->skas.regs[ES] = sc.es;-	regs->skas.regs[DS] = sc.ds;-	regs->skas.regs[EDI] = sc.edi;-	regs->skas.regs[ESI] = sc.esi;-	regs->skas.regs[EBP] = sc.ebp;-	regs->skas.regs[UESP] = sc.esp;-	regs->skas.regs[EBX] = sc.ebx;-	regs->skas.regs[EDX] = sc.edx;-	regs->skas.regs[ECX] = sc.ecx;-	regs->skas.regs[EAX] = sc.eax;-	regs->skas.regs[EIP] = sc.eip;-	regs->skas.regs[CS] = sc.cs;-	regs->skas.regs[EFL] = sc.eflags;-	regs->skas.regs[SS] = sc.ss;-	regs->skas.fault_addr = sc.cr2;-	regs->skas.fault_type = FAULT_WRITE(sc.err);-	regs->skas.trap_type = sc.trapno;--	err = ptrace(PTRACE_SETFPREGS, pid, 0, fpregs);-	if(err < 0){-	  	printk("copy_sc_to_user - PTRACE_SETFPREGS failed, "-		       "errno = %d\n", errno);-		return(1);-	}--	return(0);-}--int copy_sc_to_user_skas(int pid, void *to_ptr, void *fp,-			 union uml_pt_regs *regs, unsigned long fault_addr,-			 int fault_type)-{-  	struct sigcontext sc, *to = to_ptr;-	struct _fpstate *to_fp;-	unsigned long fpregs[FP_FRAME_SIZE];-	int err;--	sc.gs = regs->skas.regs[GS];-	sc.fs = regs->skas.regs[FS];-	sc.es = regs->skas.regs[ES];-	sc.ds = regs->skas.regs[DS];-	sc.edi = regs->skas.regs[EDI];-	sc.esi = regs->skas.regs[ESI];-	sc.ebp = regs->skas.regs[EBP];-	sc.esp = regs->skas.regs[UESP];-	sc.ebx = regs->skas.regs[EBX];-	sc.edx = regs->skas.regs[EDX];-	sc.ecx = regs->skas.regs[ECX];-	sc.eax = regs->skas.regs[EAX];-	sc.eip = regs->skas.regs[EIP];-	sc.cs = regs->skas.regs[CS];-	sc.eflags = regs->skas.regs[EFL];-	sc.esp_at_signal = regs->skas.regs[UESP];-	sc.ss = regs->skas.regs[SS];-	sc.cr2 = fault_addr;-	sc.err = TO_SC_ERR(fault_type);-	sc.trapno = regs->skas.trap_type;--	err = ptrace(PTRACE_GETFPREGS, pid, 0, fpregs);-	if(err < 0){-	  	printk("copy_sc_to_user - PTRACE_GETFPREGS failed, "-		       "errno = %d\n", errno);-		return(1);-	}-	to_fp = (struct _fpstate *) -		(fp ? (unsigned long) fp : ((unsigned long) to + sizeof(*to)));-	sc.fpstate = to_fp;--	if(err)-	  	return(err);--	return(copy_to_user_proc(to, &sc, sizeof(sc)) ||-	       copy_to_user_proc(to_fp, fpregs, sizeof(fpregs)));-}--/*- * Overrides for Emacs so that we follow Linus's tabbing style.- * Emacs will notice this stuff at the end of the file and automatically- * adjust the settings for this buffer only.  This must remain at the end- * of the file.- * ---------------------------------------------------------------------------- * Local variables:- * c-file-style: "linux"- * End:- */Index: linux-2.6.10/arch/um/kernel/skas/process_kern.c===================================================================--- linux-2.6.10.orig/arch/um/kernel/skas/process_kern.c	2004-12-25 05:35:50.000000000 +0800+++ linux-2.6.10/arch/um/kernel/skas/process_kern.c	2005-04-07 22:05:29.488759216 +0800@@ -19,7 +19,6 @@ #include "os.h" #include "user_util.h" #include "tlb.h"-#include "frame.h" #include "kern.h" #include "mode.h" #include "proc_mm.h"@@ -183,7 +182,6 @@ int start_uml_skas(void) { 	start_userspace(0);-	capture_signal_stack();  	init_new_thread_signals(1); 	uml_idle_timer();Index: linux-2.6.10/arch/um/kernel/skas/trap_user.c===================================================================--- linux-2.6.10.orig/arch/um/kernel/skas/trap_user.c	2004-12-25 05:34:32.000000000 +0800+++ linux-2.6.10/arch/um/kernel/skas/trap_user.c	2005-04-07 22:05:29.488759216 +0800@@ -21,6 +21,14 @@ 	int save_errno = errno; 	int save_user; +	/* This is done because to allow SIGSEGV to be delivered inside a SEGV+	 * handler.  This can happen in copy_user, and if SEGV is disabled,+	 * the process will die.+	 * XXX Figure out why this is better than SA_NODEFER+	 */+	if(sig == SIGSEGV)+		change_sig(SIGSEGV, 1);+ 	r = &TASK_REGS(get_current())->skas; 	save_user = r->is_user; 	r->is_user = 0;Index: linux-2.6.10/arch/um/kernel/skas/syscall_kern.c===================================================================--- linux-2.6.10.orig/arch/um/kernel/skas/syscall_kern.c	2004-12-25 05:35:00.000000000 +0800+++ linux-2.6.10/arch/um/kernel/skas/syscall_kern.c	2005-04-07 22:05:29.488759216 +0800@@ -6,6 +6,7 @@ #include "linux/sys.h" #include "linux/ptrace.h" #include "asm/errno.h"+#include "linux/ptrace.h" #include "asm/unistd.h" #include "asm/ptrace.h" #include "asm/current.h"Index: linux-2.6.10/arch/um/kernel/skas/Makefile===================================================================--- linux-2.6.10.orig/arch/um/kernel/skas/Makefile	2004-12-25 05:34:30.000000000 +0800+++ linux-2.6.10/arch/um/kernel/skas/Makefile	2005-04-07 22:05:29.488759216 +0800@@ -4,8 +4,7 @@ #  obj-y := exec_kern.o mem.o mem_user.o mmu.o process.o process_kern.o \-	syscall_kern.o syscall_user.o time.o tlb.o trap_user.o uaccess.o \-	sys-$(SUBARCH)/+ 	syscall_kern.o syscall_user.o time.o tlb.o trap_user.o uaccess.o  subdir-y := util Index: linux-2.6.10/arch/um/kernel/skas/include/mmu-skas.h===================================================================--- linux-2.6.10.orig/arch/um/kernel/skas/include/mmu-skas.h	2004-12-25 05:35:24.000000000 +0800+++ linux-2.6.10/arch/um/kernel/skas/include/mmu-skas.h	2005-04-07 22:05:29.488759216 +0800@@ -22,3 +22,27 @@  * c-file-style: "linux"  * End:  */+/*+ * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)+ * Licensed under the GPL+ */++#ifndef __SKAS_MMU_H+#define __SKAS_MMU_H++struct mmu_context_skas {+	int mm_fd;+};++#endif++/*+ * Overrides for Emacs so that we follow Linus's tabbing style.+ * Emacs will notice this stuff at the end of the file and automatically+ * adjust the settings for this buffer only.  This must remain at the end+ * of the file.+ * ---------------------------------------------------------------------------+ * Local variables:+ * c-file-style: "linux"+ * End:+ */Index: linux-2.6.10/arch/um/kernel/skas/include/mode-skas.h===================================================================--- linux-2.6.10.orig/arch/um/kernel/skas/include/mode-skas.h	2004-12-25 05:34:58.000000000 +0800+++ linux-2.6.10/arch/um/kernel/skas/include/mode-skas.h	2005-04-07 22:05:29.489759064 +0800@@ -14,6 +14,40 @@ extern int have_fpx_regs;  extern void user_time_init_skas(void);+extern void sig_handler_common_skas(int sig, void *sc_ptr);+extern void halt_skas(void);+extern void reboot_skas(void);+extern void kill_off_processes_skas(void);+extern int is_skas_winch(int pid, int fd, void *data);++#endif++/*+ * Overrides for Emacs so that we follow Linus's tabbing style.+ * Emacs will notice this stuff at the end of the file and automatically+ * adjust the settings for this buffer only.  This must remain at the end+ * of the file.+ * ---------------------------------------------------------------------------+ * Local variables:+ * c-file-style: "linux"+ * End:+ */+/*+ * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)+ * Licensed under the GPL+ */++#ifndef __MODE_SKAS_H__+#define __MODE_SKAS_H__++#include <sysdep/ptrace.h>++extern unsigned long exec_regs[];+extern unsigned long exec_fp_regs[];+extern unsigned long exec_fpx_regs[];+extern int have_fpx_regs;++extern void user_time_init_skas(void); extern int copy_sc_from_user_skas(int pid, union uml_pt_regs *regs, 				  void *from_ptr); extern int copy_sc_to_user_skas(int pid, void *to_ptr, void *fp,Index: linux-2.6.10/arch/um/kernel/skas/include/uaccess-skas.h===================================================================--- linux-2.6.10.orig/arch/um/kernel/skas/include/uaccess-skas.h	2004-12-25 05:34:32.000000000 +0800+++ linux-2.6.10/arch/um/kernel/skas/include/uaccess-skas.h	2005-04-07 22:05:29.489759064 +0800@@ -7,6 +7,51 @@ #define __SKAS_UACCESS_H  #include "asm/errno.h"+#include "asm/fixmap.h"++#define access_ok_skas(type, addr, size) \+	((segment_eq(get_fs(), KERNEL_DS)) || \+	 (((unsigned long) (addr) < TASK_SIZE) && \+	  ((unsigned long) (addr) + (size) <= TASK_SIZE)) || \+	 ((type == VERIFY_READ ) && \+	  ((unsigned long) (addr) >= FIXADDR_USER_START) && \+	  ((unsigned long) (addr) + (size) <= FIXADDR_USER_END) && \+	  ((unsigned long) (addr) + (size) >= (unsigned long)(addr))))++static inline int verify_area_skas(int type, const void * addr,+				   unsigned long size)+{+	return(access_ok_skas(type, addr, size) ? 0 : -EFAULT);+}++extern int copy_from_user_skas(void *to, const void *from, int n);+extern int copy_to_user_skas(void *to, const void *from, int n);+extern int strncpy_from_user_skas(char *dst, const char *src, int count);+extern int __clear_user_skas(void *mem, int len);+extern int clear_user_skas(void *mem, int len);+extern int strnlen_user_skas(const void *str, int len);++#endif++/*+ * Overrides for Emacs so that we follow Linus's tabbing style.

⌨️ 快捷键说明

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