i386: convert mm_context_t semaphore to a mutex
PATCH 1/1 i386: convert mm_context_t semaphore to a mutex
--- arch/i386/kernel/i386_ksyms.c | 1 + arch/i386/kernel/ldt.c | 14 +++++++------- arch/i386/kernel/ptrace.c | 4 ++-- include/asm-i386/mmu.h | 4 ++-- 4 files changed, 12 insertions(+), 11 deletions(-)
arch/i386/kernel/ldt.c +7 -7
@@ -94,13 +94,13 @@ int init_new_context(struct task_structstruct mm_struct * old_mm;int retval =0 ; -init_MUTEX (&mm->context.sem); +mutex_init (&mm->context.lock); mm->context.size =0 ; old_mm = current->mm;if (old_mm && old_mm->context.size >0 ) { -down (&old_mm->context.sem); +mutex_lock (&old_mm->context.lock); retval =copy_ldt (&mm->context, &old_mm->context); -up (&old_mm->context.sem); +mutex_unlock (&old_mm->context.lock); }return retval; }
@@ -132,7 +132,7 @@ static int read_ldt(void __user * ptr, uif (bytecount >LDT_ENTRY_SIZE *LDT_ENTRIES ) bytecount =LDT_ENTRY_SIZE *LDT_ENTRIES ; -down (&mm->context.sem); +mutex_lock (&mm->context.lock); size = mm->context.size*LDT_ENTRY_SIZE ;if (size > bytecount) size = bytecount;
@@ -140,7 +140,7 @@ static int read_ldt(void __user * ptr, u err =0 ;if (copy_to_user (ptr, mm->context.ldt, size)) err = -EFAULT ; -up (&mm->context.sem); +mutex_unlock (&mm->context.lock);if (err <0 ) goto error_return;if (size != bytecount) {
@@ -196,7 +196,7 @@ static int write_ldt(void __user * ptr, goto out; } -down (&mm->context.sem); +mutex_lock (&mm->context.lock);if (ldt_info.entry_number >= mm->context.size) { error =alloc_ldt (¤t->mm->context, ldt_info.entry_number+1 ,1 );if (error <0 )
@@ -223,7 +223,7 @@ install: error =0 ; out_unlock: -up (&mm->context.sem); +mutex_unlock (&mm->context.lock); out:return error; }
arch/i386/kernel/ptrace.c +2 -2
@@ -166,7 +166,7 @@ static unsigned long convert_eip_to_line seg &= ~7UL ; -down (&child->mm->context.sem); +mutex_lock (&child->mm->context.lock);if (unlikely ((seg >>3 ) >= child->mm->context.size)) addr =-1L ;/* bogus selector, access would fault */ else {
@@ -180,7 +180,7 @@ static unsigned long convert_eip_to_line addr &=0xffff ; addr += base; } -up (&child->mm->context.sem); +mutex_unlock (&child->mm->context.lock); }return addr; }
include/asm-i386/mmu.h +2 -2
@@ -1,7 +1,7 @@#ifndef __i386_MMU_H#define __i386_MMU_H -#include <asm/semaphore.h> +#include <linux/mutex.h> /* * The i386 doesn't have a mmu context, but * we put the segment information here.
@@ -10,7 +10,7 @@*/ typedef struct {int size; -struct semaphore sem; +struct mutex lock;void *ldt;void *vdso; }mm_context_t ;
arch/i386/kernel/i386_ksyms.c +1 -0
@@ -1,4 +1,5 @@#include <linux/module.h> +#include <asm/semaphore.h> #include <asm/checksum.h> #include <asm/desc.h>
Signature · 1 line
Luiz Fernando N. Capitulino
include/asm-i386/mmu.h line 13
Quoted 5 lines
typedef struct {
include/asm-i386/mmu.h +1
-1int size; -struct semaphore sem; +struct mutex lock;
hm, looks good to me but i'm wondering why this was a holdout for such a long time :-) Did you manage to test actual LDT functionality with this patch applied?
Ingo
Em Mon, 6 Aug 2007 09:46:08 +0200
Ingo Molnar <[email protected]> escreveu:
|
| > typedef struct {
| > int size;
| > - struct semaphore sem;
| > + struct mutex lock;
|
| hm, looks good to me but i'm wondering why this was a holdout for such a
| long time :-) Did you manage to test actual LDT functionality with this
| patch applied? No, I didn't. The only test I did was to run the kernel with this
patch applied.
I'll manage to test it then. Do you have a test-case or has any
suggestion?
Oh, btw, I forgot to 'quilt add arch/i386/mm/fault.c' so the
patch I sent was incomplete. Fixed version below. Shame on me.
[PATCH] i386: convert mm_context_t semaphore to a mutex
--- arch/i386/kernel/i386_ksyms.c | 1 + arch/i386/kernel/ldt.c | 14 +++++++------- arch/i386/kernel/ptrace.c | 4 ++-- arch/i386/mm/fault.c | 4 ++-- include/asm-i386/mmu.h | 4 ++-- 5 files changed, 14 insertions(+), 13 deletions(-)
arch/i386/kernel/ldt.c +7 -7
@@ -94,13 +94,13 @@ int init_new_context(struct task_structstruct mm_struct * old_mm;int retval =0 ; -init_MUTEX (&mm->context.sem); +mutex_init (&mm->context.lock); mm->context.size =0 ; old_mm = current->mm;if (old_mm && old_mm->context.size >0 ) { -down (&old_mm->context.sem); +mutex_lock (&old_mm->context.lock); retval =copy_ldt (&mm->context, &old_mm->context); -up (&old_mm->context.sem); +mutex_unlock (&old_mm->context.lock); }return retval; }
@@ -132,7 +132,7 @@ static int read_ldt(void __user * ptr, uif (bytecount >LDT_ENTRY_SIZE *LDT_ENTRIES ) bytecount =LDT_ENTRY_SIZE *LDT_ENTRIES ; -down (&mm->context.sem); +mutex_lock (&mm->context.lock); size = mm->context.size*LDT_ENTRY_SIZE ;if (size > bytecount) size = bytecount;
@@ -140,7 +140,7 @@ static int read_ldt(void __user * ptr, u err =0 ;if (copy_to_user (ptr, mm->context.ldt, size)) err = -EFAULT ; -up (&mm->context.sem); +mutex_unlock (&mm->context.lock);if (err <0 ) goto error_return;if (size != bytecount) {
@@ -196,7 +196,7 @@ static int write_ldt(void __user * ptr, goto out; } -down (&mm->context.sem); +mutex_lock (&mm->context.lock);if (ldt_info.entry_number >= mm->context.size) { error =alloc_ldt (¤t->mm->context, ldt_info.entry_number+1 ,1 );if (error <0 )
@@ -223,7 +223,7 @@ install: error =0 ; out_unlock: -up (&mm->context.sem); +mutex_unlock (&mm->context.lock); out:return error; }
arch/i386/kernel/ptrace.c +2 -2
@@ -166,7 +166,7 @@ static unsigned long convert_eip_to_line seg &= ~7UL ; -down (&child->mm->context.sem); +mutex_lock (&child->mm->context.lock);if (unlikely ((seg >>3 ) >= child->mm->context.size)) addr =-1L ;/* bogus selector, access would fault */ else {
@@ -180,7 +180,7 @@ static unsigned long convert_eip_to_line addr &=0xffff ; addr += base; } -up (&child->mm->context.sem); +mutex_unlock (&child->mm->context.lock); }return addr; }
include/asm-i386/mmu.h +2 -2
@@ -1,7 +1,7 @@#ifndef __i386_MMU_H#define __i386_MMU_H -#include <asm/semaphore.h> +#include <linux/mutex.h> /* * The i386 doesn't have a mmu context, but * we put the segment information here.
@@ -10,7 +10,7 @@*/ typedef struct {int size; -struct semaphore sem; +struct mutex lock;void *ldt;void *vdso; }mm_context_t ;
arch/i386/kernel/i386_ksyms.c +1 -0
@@ -1,4 +1,5 @@#include <linux/module.h> +#include <asm/semaphore.h> #include <asm/checksum.h> #include <asm/desc.h>
arch/i386/mm/fault.c +2 -2
@@ -110,7 +110,7 @@ static inline unsigned long get_segment_LDT and other horrors are only used in user space. */ if (seg & (1 <<2 )) {/* Must lock the LDT while reading it. */ -down (¤t->mm->context.sem); +mutex_lock (¤t->mm->context.lock); desc = current->mm->context.ldt; desc = (void *)desc + (seg & ~7 ); }else {
@@ -123,7 +123,7 @@ static inline unsigned long get_segment_ base =get_desc_base ((unsigned long *)desc);if (seg & (1 <<2 )) { -up (¤t->mm->context.sem); +mutex_unlock (¤t->mm->context.lock); }else put_cpu ();
Signature · 1 line
Luiz Fernando N. Capitulino
Em Mon, 6 Aug 2007 09:46:08 +0200
Ingo Molnar <[email protected]> escreveu:
|
| > typedef struct {
| > int size;
| > - struct semaphore sem;
| > + struct mutex lock;
|
| hm, looks good to me but i'm wondering why this was a holdout for such a
| long time :-) Did you manage to test actual LDT functionality with this
| patch applied? No, I didn't. The only test I did was to run the kernel with this
patch applied.
I'll manage to test it then. Do you have a test-case or has any
suggestion?
Oh, btw, I forgot to 'quilt add arch/i386/mm/fault.c' so the
patch I sent was incomplete. Fixed version below. Shame on me.
[PATCH] i386: convert mm_context_t semaphore to a mutex
--- arch/i386/kernel/i386_ksyms.c | 1 + arch/i386/kernel/ldt.c | 14 +++++++------- arch/i386/kernel/ptrace.c | 4 ++-- arch/i386/mm/fault.c | 4 ++-- include/asm-i386/mmu.h | 4 ++-- 5 files changed, 14 insertions(+), 13 deletions(-)
arch/i386/kernel/ldt.c +7 -7
@@ -94,13 +94,13 @@ int init_new_context(struct task_structstruct mm_struct * old_mm;int retval =0 ; -init_MUTEX (&mm->context.sem); +mutex_init (&mm->context.lock); mm->context.size =0 ; old_mm = current->mm;if (old_mm && old_mm->context.size >0 ) { -down (&old_mm->context.sem); +mutex_lock (&old_mm->context.lock); retval =copy_ldt (&mm->context, &old_mm->context); -up (&old_mm->context.sem); +mutex_unlock (&old_mm->context.lock); }return retval; }
@@ -132,7 +132,7 @@ static int read_ldt(void __user * ptr, uif (bytecount >LDT_ENTRY_SIZE *LDT_ENTRIES ) bytecount =LDT_ENTRY_SIZE *LDT_ENTRIES ; -down (&mm->context.sem); +mutex_lock (&mm->context.lock); size = mm->context.size*LDT_ENTRY_SIZE ;if (size > bytecount) size = bytecount;
@@ -140,7 +140,7 @@ static int read_ldt(void __user * ptr, u err =0 ;if (copy_to_user (ptr, mm->context.ldt, size)) err = -EFAULT ; -up (&mm->context.sem); +mutex_unlock (&mm->context.lock);if (err <0 ) goto error_return;if (size != bytecount) {
@@ -196,7 +196,7 @@ static int write_ldt(void __user * ptr, goto out; } -down (&mm->context.sem); +mutex_lock (&mm->context.lock);if (ldt_info.entry_number >= mm->context.size) { error =alloc_ldt (¤t->mm->context, ldt_info.entry_number+1 ,1 );if (error <0 )
@@ -223,7 +223,7 @@ install: error =0 ; out_unlock: -up (&mm->context.sem); +mutex_unlock (&mm->context.lock); out:return error; }
arch/i386/kernel/ptrace.c +2 -2
@@ -166,7 +166,7 @@ static unsigned long convert_eip_to_line seg &= ~7UL ; -down (&child->mm->context.sem); +mutex_lock (&child->mm->context.lock);if (unlikely ((seg >>3 ) >= child->mm->context.size)) addr =-1L ;/* bogus selector, access would fault */ else {
@@ -180,7 +180,7 @@ static unsigned long convert_eip_to_line addr &=0xffff ; addr += base; } -up (&child->mm->context.sem); +mutex_unlock (&child->mm->context.lock); }return addr; }
include/asm-i386/mmu.h +2 -2
@@ -1,7 +1,7 @@#ifndef __i386_MMU_H#define __i386_MMU_H -#include <asm/semaphore.h> +#include <linux/mutex.h> /* * The i386 doesn't have a mmu context, but * we put the segment information here.
@@ -10,7 +10,7 @@*/ typedef struct {int size; -struct semaphore sem; +struct mutex lock;void *ldt;void *vdso; }mm_context_t ;
arch/i386/kernel/i386_ksyms.c +1 -0
@@ -1,4 +1,5 @@#include <linux/module.h> +#include <asm/semaphore.h> #include <asm/checksum.h> #include <asm/desc.h>
arch/i386/mm/fault.c +2 -2
@@ -110,7 +110,7 @@ static inline unsigned long get_segment_LDT and other horrors are only used in user space. */ if (seg & (1 <<2 )) {/* Must lock the LDT while reading it. */ -down (¤t->mm->context.sem); +mutex_lock (¤t->mm->context.lock); desc = current->mm->context.ldt; desc = (void *)desc + (seg & ~7 ); }else {
@@ -123,7 +123,7 @@ static inline unsigned long get_segment_ base =get_desc_base ((unsigned long *)desc);if (seg & (1 <<2 )) { -up (¤t->mm->context.sem); +mutex_unlock (¤t->mm->context.lock); }else put_cpu ();
Signature · 1 line
Luiz Fernando N. Capitulino
Em Mon, 6 Aug 2007 09:46:08 +0200
Ingo Molnar <[email protected]> escreveu:
|
| > typedef struct {
| > int size;
| > - struct semaphore sem;
| > + struct mutex lock;
|
| hm, looks good to me but i'm wondering why this was a holdout for such a
| long time :-) Did you manage to test actual LDT functionality with this
| patch applied? No, I didn't. The only test I did was to run the kernel with this
patch applied.
I'll manage to test it then. Do you have a test-case or has any
suggestion?
Oh, btw, I forgot to 'quilt add arch/i386/mm/fault.c' so the
patch I sent was incomplete. Fixed version below. Shame on me.
[PATCH] i386: convert mm_context_t semaphore to a mutex
--- arch/i386/kernel/i386_ksyms.c | 1 + arch/i386/kernel/ldt.c | 14 +++++++------- arch/i386/kernel/ptrace.c | 4 ++-- arch/i386/mm/fault.c | 4 ++-- include/asm-i386/mmu.h | 4 ++-- 5 files changed, 14 insertions(+), 13 deletions(-)
arch/i386/kernel/ldt.c +7 -7
@@ -94,13 +94,13 @@ int init_new_context(struct task_structstruct mm_struct * old_mm;int retval =0 ; -init_MUTEX (&mm->context.sem); +mutex_init (&mm->context.lock); mm->context.size =0 ; old_mm = current->mm;if (old_mm && old_mm->context.size >0 ) { -down (&old_mm->context.sem); +mutex_lock (&old_mm->context.lock); retval =copy_ldt (&mm->context, &old_mm->context); -up (&old_mm->context.sem); +mutex_unlock (&old_mm->context.lock); }return retval; }
@@ -132,7 +132,7 @@ static int read_ldt(void __user * ptr, uif (bytecount >LDT_ENTRY_SIZE *LDT_ENTRIES ) bytecount =LDT_ENTRY_SIZE *LDT_ENTRIES ; -down (&mm->context.sem); +mutex_lock (&mm->context.lock); size = mm->context.size*LDT_ENTRY_SIZE ;if (size > bytecount) size = bytecount;
@@ -140,7 +140,7 @@ static int read_ldt(void __user * ptr, u err =0 ;if (copy_to_user (ptr, mm->context.ldt, size)) err = -EFAULT ; -up (&mm->context.sem); +mutex_unlock (&mm->context.lock);if (err <0 ) goto error_return;if (size != bytecount) {
@@ -196,7 +196,7 @@ static int write_ldt(void __user * ptr, goto out; } -down (&mm->context.sem); +mutex_lock (&mm->context.lock);if (ldt_info.entry_number >= mm->context.size) { error =alloc_ldt (¤t->mm->context, ldt_info.entry_number+1 ,1 );if (error <0 )
@@ -223,7 +223,7 @@ install: error =0 ; out_unlock: -up (&mm->context.sem); +mutex_unlock (&mm->context.lock); out:return error; }
arch/i386/kernel/ptrace.c +2 -2
@@ -166,7 +166,7 @@ static unsigned long convert_eip_to_line seg &= ~7UL ; -down (&child->mm->context.sem); +mutex_lock (&child->mm->context.lock);if (unlikely ((seg >>3 ) >= child->mm->context.size)) addr =-1L ;/* bogus selector, access would fault */ else {
@@ -180,7 +180,7 @@ static unsigned long convert_eip_to_line addr &=0xffff ; addr += base; } -up (&child->mm->context.sem); +mutex_unlock (&child->mm->context.lock); }return addr; }
include/asm-i386/mmu.h +2 -2
@@ -1,7 +1,7 @@#ifndef __i386_MMU_H#define __i386_MMU_H -#include <asm/semaphore.h> +#include <linux/mutex.h> /* * The i386 doesn't have a mmu context, but * we put the segment information here.
@@ -10,7 +10,7 @@*/ typedef struct {int size; -struct semaphore sem; +struct mutex lock;void *ldt;void *vdso; }mm_context_t ;
arch/i386/kernel/i386_ksyms.c +1 -0
@@ -1,4 +1,5 @@#include <linux/module.h> +#include <asm/semaphore.h> #include <asm/checksum.h> #include <asm/desc.h>
arch/i386/mm/fault.c +2 -2
@@ -110,7 +110,7 @@ static inline unsigned long get_segment_LDT and other horrors are only used in user space. */ if (seg & (1 <<2 )) {/* Must lock the LDT while reading it. */ -down (¤t->mm->context.sem); +mutex_lock (¤t->mm->context.lock); desc = current->mm->context.ldt; desc = (void *)desc + (seg & ~7 ); }else {
@@ -123,7 +123,7 @@ static inline unsigned long get_segment_ base =get_desc_base ((unsigned long *)desc);if (seg & (1 <<2 )) { -up (¤t->mm->context.sem); +mutex_unlock (¤t->mm->context.lock); }else put_cpu ();
Signature · 1 line
Luiz Fernando N. Capitulino
Em Mon, 6 Aug 2007 09:46:08 +0200
Ingo Molnar <[email protected]> escreveu:
|
| > typedef struct {
| > int size;
| > - struct semaphore sem;
| > + struct mutex lock;
|
| hm, looks good to me but i'm wondering why this was a holdout for such a
| long time :-) Did you manage to test actual LDT functionality with this
| patch applied? No, I didn't. The only test I did was to run the kernel with this
patch applied.
I'll manage to test it then. Do you have a test-case or has any
suggestion?
Oh, btw, I forgot to 'quilt add arch/i386/mm/fault.c' so the
patch I sent was incomplete. Fixed version below. Shame on me.
[PATCH] i386: convert mm_context_t semaphore to a mutex
--- arch/i386/kernel/i386_ksyms.c | 1 + arch/i386/kernel/ldt.c | 14 +++++++------- arch/i386/kernel/ptrace.c | 4 ++-- arch/i386/mm/fault.c | 4 ++-- include/asm-i386/mmu.h | 4 ++-- 5 files changed, 14 insertions(+), 13 deletions(-)
arch/i386/kernel/ldt.c +7 -7
@@ -94,13 +94,13 @@ int init_new_context(struct task_structstruct mm_struct * old_mm;int retval =0 ; -init_MUTEX (&mm->context.sem); +mutex_init (&mm->context.lock); mm->context.size =0 ; old_mm = current->mm;if (old_mm && old_mm->context.size >0 ) { -down (&old_mm->context.sem); +mutex_lock (&old_mm->context.lock); retval =copy_ldt (&mm->context, &old_mm->context); -up (&old_mm->context.sem); +mutex_unlock (&old_mm->context.lock); }return retval; }
@@ -132,7 +132,7 @@ static int read_ldt(void __user * ptr, uif (bytecount >LDT_ENTRY_SIZE *LDT_ENTRIES ) bytecount =LDT_ENTRY_SIZE *LDT_ENTRIES ; -down (&mm->context.sem); +mutex_lock (&mm->context.lock); size = mm->context.size*LDT_ENTRY_SIZE ;if (size > bytecount) size = bytecount;
@@ -140,7 +140,7 @@ static int read_ldt(void __user * ptr, u err =0 ;if (copy_to_user (ptr, mm->context.ldt, size)) err = -EFAULT ; -up (&mm->context.sem); +mutex_unlock (&mm->context.lock);if (err <0 ) goto error_return;if (size != bytecount) {
@@ -196,7 +196,7 @@ static int write_ldt(void __user * ptr, goto out; } -down (&mm->context.sem); +mutex_lock (&mm->context.lock);if (ldt_info.entry_number >= mm->context.size) { error =alloc_ldt (¤t->mm->context, ldt_info.entry_number+1 ,1 );if (error <0 )
@@ -223,7 +223,7 @@ install: error =0 ; out_unlock: -up (&mm->context.sem); +mutex_unlock (&mm->context.lock); out:return error; }
arch/i386/kernel/ptrace.c +2 -2
@@ -166,7 +166,7 @@ static unsigned long convert_eip_to_line seg &= ~7UL ; -down (&child->mm->context.sem); +mutex_lock (&child->mm->context.lock);if (unlikely ((seg >>3 ) >= child->mm->context.size)) addr =-1L ;/* bogus selector, access would fault */ else {
@@ -180,7 +180,7 @@ static unsigned long convert_eip_to_line addr &=0xffff ; addr += base; } -up (&child->mm->context.sem); +mutex_unlock (&child->mm->context.lock); }return addr; }
include/asm-i386/mmu.h +2 -2
@@ -1,7 +1,7 @@#ifndef __i386_MMU_H#define __i386_MMU_H -#include <asm/semaphore.h> +#include <linux/mutex.h> /* * The i386 doesn't have a mmu context, but * we put the segment information here.
@@ -10,7 +10,7 @@*/ typedef struct {int size; -struct semaphore sem; +struct mutex lock;void *ldt;void *vdso; }mm_context_t ;
arch/i386/kernel/i386_ksyms.c +1 -0
@@ -1,4 +1,5 @@#include <linux/module.h> +#include <asm/semaphore.h> #include <asm/checksum.h> #include <asm/desc.h>
arch/i386/mm/fault.c +2 -2
@@ -110,7 +110,7 @@ static inline unsigned long get_segment_LDT and other horrors are only used in user space. */ if (seg & (1 <<2 )) {/* Must lock the LDT while reading it. */ -down (¤t->mm->context.sem); +mutex_lock (¤t->mm->context.lock); desc = current->mm->context.ldt; desc = (void *)desc + (seg & ~7 ); }else {
@@ -123,7 +123,7 @@ static inline unsigned long get_segment_ base =get_desc_base ((unsigned long *)desc);if (seg & (1 <<2 )) { -up (¤t->mm->context.sem); +mutex_unlock (¤t->mm->context.lock); }else put_cpu ();
Signature · 1 line
Luiz Fernando N. Capitulino
Quoted 9 lines · Luiz Fernando N. Capitulino
| hm, looks good to me but i'm wondering why this was a holdout for | such a long time :-) Did you manage to test actual LDT functionality | with this patch applied?No, I didn't. The only test I did was to run the kernel with this
patch applied.I'll manage to test it then. Do you have a test-case or has any
suggestion?
i think try any pthread program with:
export LD_ASSUME_KERNEL=2.4.0
should trigger the LDT code. Try stracing the code and modify_ldt calls should show up.
Quoted 1 line
Oh, btw, I forgot to 'quilt add
arch/i386/mm/fault.c' [...]
heh. After a dozen of such incidents i scripted my editor command to automatically do the quilt add :)
Ingo
Em Mon, 6 Aug 2007 17:25:02 +0200
Ingo Molnar <[email protected]> escreveu:
| | * Luiz Fernando N. Capitulino <[email protected]> wrote: | | > | hm, looks good to me but i'm wondering why this was a holdout for | > | such a long time :-) Did you manage to test actual LDT functionality | > | with this patch applied? | > | > No, I didn't. The only test I did was to run the kernel with this | > patch applied. | > | > I'll manage to test it then. Do you have a test-case or has any | > suggestion? | | i think try any pthread program with: | | export LD_ASSUME_KERNEL=2.4.0 | | should trigger the LDT code. Try stracing the code and modify_ldt calls | should show up.
I couldn't run this because my libc requires 2.6 kernels.
But I've managed to run wine with a game called 'Align-it!', and
I have the following result:
"""
~/tmp/ egrep -c 'modify_ldt' wine-strace.txt
46
~/tmp/
"""
I've checked the calls and none has failed. Not sure how good
this test is though.
Maybe it could be more tested in -mm?
| > Oh, btw, I forgot to 'quilt add arch/i386/mm/fault.c' [...] | | heh. After a dozen of such incidents i scripted my editor command to | automatically do the quilt add :)
Oh, that's a good tip.
Thanks a lot,
Signature · 1 line
Luiz Fernando N. Capitulino
Ingo Molnar
Acked-byQuoted 11 lines · Luiz Fernando N. Capitulino
But I've managed to run wine with a game called 'Align-it!', and
I have the following result:"""
~/tmp/ egrep -c 'modify_ldt' wine-strace.txt
46
~/tmp/
"""I've checked the calls and none has failed. Not sure how good
this test is though.
ok, this is certainly good enough.
Ingo
Quoted 3 lines · Luiz Fernando N. Capitulino
I'll manage to test it then. Do you have a test-case or has any
suggestion?
LTP has some simple test cases for modify_ldt
-Andi
Em 06 Aug 2007 21:32:29 +0200
Andi Kleen <[email protected]> escreveu:
| "Luiz Fernando N. Capitulino" <[email protected]> writes: | > | > I'll manage to test it then. Do you have a test-case or has any | > suggestion? | | LTP has some simple test cases for modify_ldt
I've just ran them from a LTP suite from 2007/04/30:
"""/usr/lib/ltp/testcases/kernel/syscalls/modify_ldt/ ./modify_ldt01
modify_ldt01 0 INFO : Enter block 1 modify_ldt01 0 INFO : block 1 PASSED modify_ldt01 0 INFO : Exit block 1 modify_ldt01 0 INFO : Enter block 2 modify_ldt01 0 INFO : block 2 PASSED modify_ldt01 0 INFO : Exit block 2 modify_ldt01 0 INFO : block 3 PASSED modify_ldt01 0 INFO : Exit block 3
"""
"""/usr/lib/ltp/testcases/kernel/syscalls/modify_ldt/ ./modify_ldt02
modify_ldt02 0 INFO : Enter block 1 modify_ldt02 0 INFO : block 1 PASSED modify_ldt02 0 INFO : Exit block 1 modify_ldt02 0 INFO : Enter block 2 modify_ldt02 0 INFO : received signal: 11 modify_ldt02 0 INFO : block 2 PASSED
/usr/lib/ltp/testcases/kernel/syscalls/modify_ldt/ """
All passed it seems.
Btw, I've send the same patch for x86_64 to you too.
Signature · 1 line
Luiz Fernando N. Capitulino
Em Mon, 6 Aug 2007 10:36:55 -0300
"Luiz Fernando N. Capitulino" <[email protected]> escreveu:
| Em Mon, 6 Aug 2007 09:46:08 +0200 | Ingo Molnar <[email protected]> escreveu: | | | | | > typedef struct { | | > int size; | | > - struct semaphore sem; | | > + struct mutex lock; | | | | hm, looks good to me but i'm wondering why this was a holdout for such a | | long time :-) Did you manage to test actual LDT functionality with this | | patch applied? | | No, I didn't. The only test I did was to run the kernel with this | patch applied. | | I'll manage to test it then. Do you have a test-case or has any | suggestion?
And again, SMTP problems makes me looks like a joker...
Sorry for the spam, just realized the problem now.
Signature · 1 line
Luiz Fernando N. Capitulino