[uml-devel] [patch 4/4] SYSEMU: fix sysaudit / singlestep interaction
From: Bodo Stroesser <[EMAIL PROTECTED]>, Paolo 'Blaisorblade' Giarrusso <[EMAIL PROTECTED]> CC: Roland McGrath <[EMAIL PROTECTED]> This is simply an adjustment for "Ptrace - i386: fix Syscall Audit interaction with singlestep" to work on top of SYSEMU patches, too. On this patch, I have some doubts: I wonder why we need to alter that way ptrace_disable(). I left the patch this way because it has been extensively tested, but I don't understand the reason. The current PTRACE_DETACH handling simply clears child->ptrace; actually this is not enough because entry.S just looks at the thread_flags; actually, do_syscall_trace checks current->ptrace but I don't think depending on that is good, at least for performance, so I think the clearing is done elsewhere. For instance, on PTRACE_CONT it's done, but doing PTRACE_DETACH without PTRACE_CONT is possible (and happens when gdb crashes and one kills it manually). Signed-off-by: Paolo 'Blaisorblade' Giarrusso <[EMAIL PROTECTED]> --- linux-2.6.git-paolo/arch/i386/kernel/ptrace.c | 23 --- 1 files changed, 20 insertions(+), 3 deletions(-) diff -puN arch/i386/kernel/ptrace.c~sysaudit-singlestep-umlhost arch/i386/kernel/ptrace.c --- linux-2.6.git/arch/i386/kernel/ptrace.c~sysaudit-singlestep-umlhost 2005-07-26 20:27:56.0 +0200 +++ linux-2.6.git-paolo/arch/i386/kernel/ptrace.c 2005-07-26 20:27:56.0 +0200 @@ -271,6 +271,8 @@ static void clear_singlestep(struct task void ptrace_disable(struct task_struct *child) { clear_singlestep(child); + clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE); + clear_tsk_thread_flag(child, TIF_SYSCALL_EMU); } /* @@ -693,14 +695,29 @@ __attribute__((regparm(3))) int do_syscall_trace(struct pt_regs *regs, int entryexit) { int is_sysemu = test_thread_flag(TIF_SYSCALL_EMU), ret = 0; - /* With TIF_SYSCALL_EMU set we want to ignore TIF_SINGLESTEP */ + /* With TIF_SYSCALL_EMU set we want to ignore TIF_SINGLESTEP for syscall +* interception. */ int is_singlestep = !is_sysemu && test_thread_flag(TIF_SINGLESTEP); /* do the secure computing check first */ secure_computing(regs->orig_eax); - if (unlikely(current->audit_context) && entryexit) - audit_syscall_exit(current, AUDITSC_RESULT(regs->eax), regs->eax); + if (unlikely(current->audit_context)) { + if (entryexit) + audit_syscall_exit(current, AUDITSC_RESULT(regs->eax), regs->eax); + /* Debug traps, when using PTRACE_SINGLESTEP, must be sent only +* on the syscall exit path. Normally, when TIF_SYSCALL_AUDIT is +* not used, entry.S will call us only on syscall exit, not +* entry; so when TIF_SYSCALL_AUDIT is used we must avoid +* calling send_sigtrap() on syscall entry. +* +* Note that when PTRACE_SYSEMU_SINGLESTEP is used, +* is_singlestep is false, despite his name, so we will still do +* the correct thing. +*/ + else if (is_singlestep) + goto out; + } if (!(current->ptrace & PT_PTRACED)) goto out; _ --- SF.Net email is sponsored by: Discover Easy Linux Migration Strategies from IBM. Find simple to follow Roadmaps, straightforward articles, informative Webcasts and more! Get everything you need to get up to speed, fast. http://ads.osdn.com/?ad_id=7477&alloc_id=16492&op=click ___ User-mode-linux-devel mailing list User-mode-linux-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel
[uml-devel] [patch 1/4] UML Support - Ptrace: adds the host SYSEMU support, for UML and general usage
From: Laurent Vivier <[EMAIL PROTECTED]>, Jeff Dike <[EMAIL PROTECTED]>, Paolo 'Blaisorblade' Giarrusso <[EMAIL PROTECTED]>, Bodo Stroesser <[EMAIL PROTECTED]> Adds a new ptrace(2) mode, called PTRACE_SYSEMU, resembling PTRACE_SYSCALL except that the kernel does not execute the requested syscall; this is useful to improve performance for virtual environments, like UML, which want to run the syscall on their own. In fact, using PTRACE_SYSCALL means stopping child execution twice, on entry and on exit, and each time you also have two context switches; with SYSEMU you avoid the 2nd stop and so save two context switches per syscall. Also, some architectures don't have support in the host for changing the syscall number via ptrace(), which is currently needed to skip syscall execution (UML turns any syscall into getpid() to avoid it being executed on the host). Fixing that is hard, while SYSEMU is easier to implement. * This version of the patch includes some suggestions of Jeff Dike to avoid adding any instructions to the syscall fast path, plus some other little changes, by myself, to make it work even when the syscall is executed with SYSENTER (but I'm unsure about them). It has been widely tested for quite a lot of time. * Various fixed were included to handle the various switches between various states, i.e. when for instance a syscall entry is traced with one of PT_SYSCALL / _SYSEMU / _SINGLESTEP and another one is used on exit. Basically, this is done by remembering which one of them was used even after the call to ptrace_notify(). * We're combining TIF_SYSCALL_EMU with TIF_SYSCALL_TRACE or TIF_SINGLESTEP to make do_syscall_trace() notice that the current syscall was started with SYSEMU on entry, so that no notification ought to be done in the exit path; this is a bit of a hack, so this problem is solved in another way in next patches. * Also, the effects of the patch: "Ptrace - i386: fix Syscall Audit interaction with singlestep" are cancelled; they are restored back in the last patch of this series. Detailed descriptions of the patches doing this kind of processing follow (but I've already summed everything up). * Fix behaviour when changing interception kind #1. In do_syscall_trace(), we check the status of the TIF_SYSCALL_EMU flag only after doing the debugger notification; but the debugger might have changed the status of this flag because he continued execution with PTRACE_SYSCALL, so this is wrong. This patch fixes it by saving the flag status before calling ptrace_notify(). * Fix behaviour when changing interception kind #2: avoid intercepting syscall on return when using SYSCALL again. A guest process switching from using PTRACE_SYSEMU to PTRACE_SYSCALL crashes. The problem is in arch/i386/kernel/entry.S. The current SYSEMU patch inhibits the syscall-handler to be called, but does not prevent do_syscall_trace() to be called after this for syscall completion interception. The appended patch fixes this. It reuses the flag TIF_SYSCALL_EMU to remember "we come from PTRACE_SYSEMU and now are in PTRACE_SYSCALL", since the flag is unused in the depicted situation. * Fix behaviour when changing interception kind #3: avoid intercepting syscall on return when using SINGLESTEP. When testing 2.6.9 and the skas3.v6 patch, with my latest patch and had problems with singlestepping on UML in SKAS with SYSEMU. It looped receiving SIGTRAPs without moving forward. EIP of the traced process was the same for all SIGTRAPs. What's missing is to handle switching from PTRACE_SYSCALL_EMU to PTRACE_SINGLESTEP in a way very similar to what is done for the change from PTRACE_SYSCALL_EMU to PTRACE_SYSCALL_TRACE. I.e., after calling ptrace(PTRACE_SYSEMU), on the return path, the debugger is notified and then wake ups the process; the syscall is executed (or skipped, when do_syscall_trace() returns 0, i.e. when using PTRACE_SYSEMU), and do_syscall_trace() is called again. Since we are on the return path of a SYSEMU'd syscall, if the wake up is performed through ptrace(PTRACE_SYSCALL), we must still avoid notifying the parent of the syscall exit. Now, this behaviour is extended even to resuming with PTRACE_SINGLESTEP. Signed-off-by: Paolo 'Blaisorblade' Giarrusso <[EMAIL PROTECTED]> --- linux-2.6.git-paolo/arch/i386/kernel/entry.S |9 ++- linux-2.6.git-paolo/arch/i386/kernel/ptrace.c | 57 ++--- linux-2.6.git-paolo/include/asm-i386/thread_info.h |5 + linux-2.6.git-paolo/include/linux/ptrace.h |1 linux-2.6.git-paolo/kernel/fork.c |3 + 5 files changed, 53 insertions(+), 22 deletions(-) diff -puN arch/i386/kernel/ptrace.c~host-sysemu arch/i386/kernel/ptrace.c --- linux-2.6.git/arch/i386/kernel/ptrace.c~host-sysemu 2005-07-26 20:24:57.0 +0200 +++ linux-2.6.git-paolo/arch/i386/kernel/ptrace.c 2005-07-26 20:39:59.0 +0200 @@ -509,15 +509,27 @@ asmlinkage int sys_ptrace(long request,
[uml-devel] [patch 3/4] Uml support: add PTRACE_SYSEMU_SINGLESTEP option to i386
From: Bodo Stroesser <[EMAIL PROTECTED]> This patch implements the new ptrace option PTRACE_SYSEMU_SINGLESTEP, which can be used by UML to singlestep a process: it will receive SINGLESTEP interceptions for normal instructions and syscalls, but syscall execution will be skipped just like with PTRACE_SYSEMU. Signed-off-by: Bodo Stroesser <[EMAIL PROTECTED]> Signed-off-by: Paolo 'Blaisorblade' Giarrusso <[EMAIL PROTECTED]> --- linux-2.6.git-paolo/arch/i386/kernel/ptrace.c | 21 + linux-2.6.git-paolo/include/linux/ptrace.h|1 + 2 files changed, 18 insertions(+), 4 deletions(-) diff -puN arch/i386/kernel/ptrace.c~sysemu-add-SYSEMU_SINGLESTEP arch/i386/kernel/ptrace.c --- linux-2.6.git/arch/i386/kernel/ptrace.c~sysemu-add-SYSEMU_SINGLESTEP 2005-07-26 20:27:45.0 +0200 +++ linux-2.6.git-paolo/arch/i386/kernel/ptrace.c 2005-07-26 20:39:55.0 +0200 @@ -547,11 +547,17 @@ asmlinkage int sys_ptrace(long request, wake_up_process(child); break; + case PTRACE_SYSEMU_SINGLESTEP: /* Same as SYSEMU, but singlestep if not syscall */ case PTRACE_SINGLESTEP: /* set the trap flag. */ ret = -EIO; if (!valid_signal(data)) break; - clear_tsk_thread_flag(child, TIF_SYSCALL_EMU); + + if (request == PTRACE_SYSEMU_SINGLESTEP) + set_tsk_thread_flag(child, TIF_SYSCALL_EMU); + else + clear_tsk_thread_flag(child, TIF_SYSCALL_EMU); + clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE); set_singlestep(child); child->exit_code = data; @@ -686,7 +692,10 @@ void send_sigtrap(struct task_struct *ts __attribute__((regparm(3))) int do_syscall_trace(struct pt_regs *regs, int entryexit) { - int is_sysemu, is_singlestep, ret = 0; + int is_sysemu = test_thread_flag(TIF_SYSCALL_EMU), ret = 0; + /* With TIF_SYSCALL_EMU set we want to ignore TIF_SINGLESTEP */ + int is_singlestep = !is_sysemu && test_thread_flag(TIF_SINGLESTEP); + /* do the secure computing check first */ secure_computing(regs->orig_eax); @@ -696,8 +705,11 @@ int do_syscall_trace(struct pt_regs *reg if (!(current->ptrace & PT_PTRACED)) goto out; - is_sysemu = test_thread_flag(TIF_SYSCALL_EMU); - is_singlestep = test_thread_flag(TIF_SINGLESTEP); + /* If a process stops on the 1st tracepoint with SYSCALL_TRACE +* and then is resumed with SYSEMU_SINGLESTEP, it will come in +* here. We have to check this and return */ + if (is_sysemu && entryexit) + return 0; /* Fake a debug trap */ if (is_singlestep) @@ -728,6 +740,7 @@ int do_syscall_trace(struct pt_regs *reg if (ret == 0) return 0; + regs->orig_eax = -1; /* force skip of syscall restarting */ if (unlikely(current->audit_context)) audit_syscall_exit(current, AUDITSC_RESULT(regs->eax), regs->eax); return 1; diff -puN include/linux/ptrace.h~sysemu-add-SYSEMU_SINGLESTEP include/linux/ptrace.h --- linux-2.6.git/include/linux/ptrace.h~sysemu-add-SYSEMU_SINGLESTEP 2005-07-26 20:27:45.0 +0200 +++ linux-2.6.git-paolo/include/linux/ptrace.h 2005-07-26 20:27:45.0 +0200 @@ -21,6 +21,7 @@ #define PTRACE_SYSCALL 24 #define PTRACE_SYSEMU31 +#define PTRACE_SYSEMU_SINGLESTEP 32 /* 0x4200-0x4300 are reserved for architecture-independent additions. */ #define PTRACE_SETOPTIONS 0x4200 _ --- SF.Net email is sponsored by: Discover Easy Linux Migration Strategies from IBM. Find simple to follow Roadmaps, straightforward articles, informative Webcasts and more! Get everything you need to get up to speed, fast. http://ads.osdn.com/?ad_id=7477&alloc_id=16492&op=click ___ User-mode-linux-devel mailing list User-mode-linux-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel
[uml-devel] [patch 2/4] Uml support: reorganize PTRACE_SYSEMU support
From: Bodo Stroesser <[EMAIL PROTECTED]> With this patch, we change the way we handle switching from PTRACE_SYSEMU to PTRACE_{SINGLESTEP,SYSCALL}, to free TIF_SYSCALL_EMU from double use as a preparation for PTRACE_SYSEMU_SINGLESTEP extension, without changing the behavior of the host kernel. Signed-off-by: Bodo Stroesser <[EMAIL PROTECTED]> Signed-off-by: Paolo 'Blaisorblade' Giarrusso <[EMAIL PROTECTED]> --- linux-2.6.git-paolo/arch/i386/kernel/entry.S |8 linux-2.6.git-paolo/arch/i386/kernel/ptrace.c | 43 -- 2 files changed, 21 insertions(+), 30 deletions(-) diff -puN arch/i386/kernel/entry.S~sysemu-reorganize arch/i386/kernel/entry.S --- linux-2.6.git/arch/i386/kernel/entry.S~sysemu-reorganize2005-07-26 20:25:58.0 +0200 +++ linux-2.6.git-paolo/arch/i386/kernel/entry.S2005-07-26 20:25:58.0 +0200 @@ -339,12 +339,18 @@ syscall_trace_entry: xorl %edx,%edx call do_syscall_trace cmpl $0, %eax - jne syscall_exit# ret != 0 -> running under PTRACE_SYSEMU, + jne syscall_skip# ret != 0 -> running under PTRACE_SYSEMU, # so must skip actual syscall movl ORIG_EAX(%esp), %eax cmpl $(nr_syscalls), %eax jnae syscall_call jmp syscall_exit +syscall_skip: + cli # make sure we don't miss an interrupt + # setting need_resched or sigpending + # between sampling and the iret + movl TI_flags(%ebp), %ecx + jmp work_pending # perform syscall exit tracing ALIGN diff -puN arch/i386/kernel/ptrace.c~sysemu-reorganize arch/i386/kernel/ptrace.c --- linux-2.6.git/arch/i386/kernel/ptrace.c~sysemu-reorganize 2005-07-26 20:25:58.0 +0200 +++ linux-2.6.git-paolo/arch/i386/kernel/ptrace.c 2005-07-26 20:39:57.0 +0200 @@ -515,21 +515,14 @@ asmlinkage int sys_ptrace(long request, ret = -EIO; if (!valid_signal(data)) break; - /* If we came here with PTRACE_SYSEMU and now continue with -* PTRACE_SYSCALL, entry.S used to intercept the syscall return. -* But it shouldn't! -* So we don't clear TIF_SYSCALL_EMU, which is always unused in -* this special case, to remember, we came from SYSEMU. That -* flag will be cleared by do_syscall_trace(). -*/ if (request == PTRACE_SYSEMU) { set_tsk_thread_flag(child, TIF_SYSCALL_EMU); - } else if (request == PTRACE_CONT) { - clear_tsk_thread_flag(child, TIF_SYSCALL_EMU); - } - if (request == PTRACE_SYSCALL) { + clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE); + } else if (request == PTRACE_SYSCALL) { set_tsk_thread_flag(child, TIF_SYSCALL_TRACE); + clear_tsk_thread_flag(child, TIF_SYSCALL_EMU); } else { + clear_tsk_thread_flag(child, TIF_SYSCALL_EMU); clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE); } child->exit_code = data; @@ -558,8 +551,7 @@ asmlinkage int sys_ptrace(long request, ret = -EIO; if (!valid_signal(data)) break; - /*See do_syscall_trace to know why we don't clear -* TIF_SYSCALL_EMU.*/ + clear_tsk_thread_flag(child, TIF_SYSCALL_EMU); clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE); set_singlestep(child); child->exit_code = data; @@ -694,7 +686,7 @@ void send_sigtrap(struct task_struct *ts __attribute__((regparm(3))) int do_syscall_trace(struct pt_regs *regs, int entryexit) { - int is_sysemu, is_systrace, is_singlestep, ret = 0; + int is_sysemu, is_singlestep, ret = 0; /* do the secure computing check first */ secure_computing(regs->orig_eax); @@ -705,25 +697,13 @@ int do_syscall_trace(struct pt_regs *reg goto out; is_sysemu = test_thread_flag(TIF_SYSCALL_EMU); - is_systrace = test_thread_flag(TIF_SYSCALL_TRACE); is_singlestep = test_thread_flag(TIF_SINGLESTEP); - /* We can detect the case of coming from PTRACE_SYSEMU and now running -* with PTRACE_SYSCALL or PTRACE_SINGLESTEP, by TIF_SYSCALL_EMU being -* set additionally. -* If so let's reset the flag and return without action (no singlestep -* nor syscall tracing, since no actual step has been executed). -*/ - if (is_sysemu && (is_systrace || is_singlestep)) { - clear_thread_flag(TIF_SYSCALL_EMU); - goto out; - } - /* Fake
Re: [uml-devel] Slower system call with SMP
On Monday 30 May 2005 20:58, Majid Salame wrote: > > UML uses multiple processes for it's buisness. > With Skas UML is just one process as it appears on the Host, or do you mean > something else. No, it's at least two (+ possible service threads): one is the thread executing kernel code, which ptraces another thread which executes userspace code. > >When host is > > SMP, these can be mapped to different cpu's, and when > > interprocess stuff is to occure, cpu's have to sync. It's not just interprocess comunication. Those two threads could be running on two different processors (which will happen very likely, I fear, if UML is the only thing running, and can happen even without this - I don't think scheduler optimizations consider ptrace() as something needing to join threads together). > I saw the syscall about 300% slower, it does not make sense due to > interprocess. > IT should not be that slow, unless missing UML implementation I think it could, if the two threads run on different processors. Luckily, you can stop the host kernel from doing that: there should be a control option in /proc/, something like cpus_allowed. Ok, let's assume you talk about SKAS (I'm not expert in TT implementation, should check a couple of things, but you said you use SKAS). Well, it makes sense. In late days I've been studying signal delivery code, and for UML operations, to have a page fault in the guest, what happens is that the guest takes a SIGSEGV. That signal must be intercepted by the UML kernel thread. Sadly, this is largely suboptimal in Linux. In fact, you have, at signal delivery time, to wake up the guest thread (possibly via inter-processor comunication, which is an IPI), which will then have to wake up its tracer (and if that's on a different CPU, that's through an IPI), and then get back to wake up the thread itself. > > Also, some few kernel things is slower on SMP, while > > user-space things that are not related, and multithreaded > > apps run faster. > > Stian -- Inform me of my mistakes, so I can keep imitating Homer Simpson's "Doh!". Paolo Giarrusso, aka Blaisorblade (Skype ID "PaoloGiarrusso", ICQ 215621894) http://www.user-mode-linux.org/~blaisorblade ___ Yahoo! Mail: gratis 1GB per i messaggi e allegati da 10MB http://mail.yahoo.it --- SF.Net email is sponsored by: Discover Easy Linux Migration Strategies from IBM. Find simple to follow Roadmaps, straightforward articles, informative Webcasts and more! Get everything you need to get up to speed, fast. http://ads.osdn.com/?ad_id=7477&alloc_id=16492&op=click ___ User-mode-linux-devel mailing list User-mode-linux-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel
Re: [uml-devel] NEW compile errors for UMLPPC
On Monday 25 July 2005 20:28, ashwin tanugula wrote: > Hi, > I think those errors came due to the inclusion of > include/asm/processor-i386.h. I remover that inclusion and included > the structure arch_thread in processor-generic.h, which removed the > previous errors. > > Now I am getting the following errors > - Show quoted text - > > > [EMAIL PROTECTED]:/home/ashwin/Desktop/ashwin/linux-2.6.0-test9 # make > linux ARCH=um CHK include/linux/version.h > UPD include/linux/version.h > SYMLINK include/asm -> include/asm-um > HOSTCC scripts/genksyms/genksyms.o > SHIPPED scripts/genksyms/lex.c > SHIPPED scripts/genksyms/parse.h > SHIPPED scripts/genksyms/keywords.c > HOSTCC scripts/genksyms/lex.o > SHIPPED scripts/genksyms/parse.c > HOSTCC scripts/genksyms/parse.o > HOSTLD scripts/genksyms/genksyms > HOSTCC scripts/split-include > HOSTCC scripts/conmakehash > HOSTCC scripts/docproc > HOSTCC scripts/kallsyms > CC scripts/empty.o > HOSTCC scripts/mk_elfconfig > MKELF scripts/elfconfig.h > HOSTCC scripts/file2alias.o > HOSTCC scripts/modpost.o > HOSTLD scripts/modpost > HOSTCC scripts/pnmtologo > HOSTCC scripts/bin2c > SPLIT include/linux/autoconf.h -> include/config/* > sed 's/ CONFIG/ UML_CONFIG/' > /home/ashwin/Desktop/ashwin/linux-2.6.0-test9/include/linux/autoconf.h > > > arch/um/include/uml-config.h > > make -f scripts/Makefile.build obj=arch/um/util > gcc -o arch/um/util/mk_task_user.o -c arch/um/util/mk_task_user.c > CC arch/um/util/mk_task_kern.o > In file included from include/asm/processor.h:13, > from include/asm/thread_info.h:11, > from include/linux/thread_info.h:21, > from include/linux/spinlock.h:12, > from include/linux/capability.h:45, > from include/linux/sched.h:7, > from arch/um/util/mk_task_kern.c:1: > include/asm/processor-generic.h:118: warning: `struct user' declared > inside parameter list > include/asm/processor-generic.h:118: warning: its scope is only this > definition or declaration, which is probably not what you want Means that you should have "struct user;" somewhere before that: when you have this: void foo(struct bar * foobar); the compiler assumes an implicit "struct bar;" declaration ending there, which won't match with anything else. > In file included from include/asm/arch/semaphore.h:21, I'm sure this (asm/arch) still points to asm-i386. Will you do a "make mrproper ARCH=um" first? It causes all those "regparm" errors. For the below one, don't know, sort it out somehow. Since it's declared in archparam, update it, comparing with the other ones (it's the only one to still define irq_enter/exit). > include/asm/arch/hardirq.h:82:1: warning: "irq_enter" redefined > include/asm/archparam.h:34:1: warning: this is the location of the > previous definition > include/asm/arch/hardirq.h:91:1: warning: "irq_exit" redefined > include/asm/archparam.h:35:1: warning: this is the location of the > previous definition > ignored In file included from include/linux/bootmem.h:7, > from init/main.c:29: > include/asm/pgtable.h: In function `pte_file': > include/asm/pgtable.h:277: error: request for member `pte_low' in > something not a structure or union Means that for ppc pte_t is not a struct, which probably has to be fixed. typedef struct { unsigned long pte; } pte_t; > In file included from include/linux/skbuff.h:26, > from include/linux/security.h:34, > from init/main.c:34: On the below one, I don't know, but I would disable HIGHMEM for now, probably it doesn't work for i386 either in such a old UML version. Btw, are you at least using Jeff DIke's patch? Also, why not updating to a more recent UML release? Do as you like, but surely you'll meet the bugs affecting UML itself (independent from arch ports) which were already fixed in later releases (for instance, module support and HIGHMEM, I guess). > include/asm/arch/highmem.h: In function `kmap_atomic': > include/asm/arch/highmem.h:89: error: `CONFIG_HIGHMEM_START' > undeclared (first use in this function) > include/asm/arch/highmem.h:89: error: (Each undeclared identifier is > reported only once > include/asm/arch/highmem.h:89: error: for each function it appears in.) > include/asm/arch/highmem.h: In function `kunmap_atomic': > include/asm/arch/highmem.h:106: error: `CONFIG_HIGHMEM_START' > undeclared (first use in this function) > include/asm/arch/highmem.h: In function `kmap_atomic_to_page': > include/asm/arch/highmem.h:128: error: `CONFIG_HIGHMEM_START' > undeclared (first use in this function) > make[1]: *** [init/main.o] Error 1 > make: *** [init] Error 2 -- Inform me of my mistakes, so I can keep imitating Homer Simpson's "Doh!". Paolo Giarrusso, aka Blaisorblade (Skype ID "PaoloGiarrusso", ICQ 215621894) http://www.user-mode-linux.org/~blaisorblade ___ Yahoo! M
[uml-devel] Venda a 7.000.000 de consumidores sale a 7.0000 customers
Contact 7,000,000+ e-mail addresses to expose your product to the retail sector!http://www.hireoffices.com/Ingles/servi-integrales/Espanol/crea-nece.asp Contacte con + de 7.000.000 de consumidores y muestrele su productohttp://www.hireoffices.com/servi-integrales/Espanol/crea-nece.asp remove - dar de bajahttp://www.hireoffices.com/indexcarta.asp