x86: introduce fill_ldt
[linux-2.6.git] / arch / x86 / kernel / ldt.c
index a8cdca3..3e872b4 100644 (file)
@@ -186,7 +186,7 @@ static int read_default_ldt(void __user *ptr, unsigned long bytecount)
 static int write_ldt(void __user *ptr, unsigned long bytecount, int oldmode)
 {
        struct mm_struct *mm = current->mm;
-       __u32 entry_1, entry_2;
+       struct desc_struct ldt;
        int error;
        struct user_desc ldt_info;
 
@@ -218,21 +218,19 @@ static int write_ldt(void __user *ptr, unsigned long bytecount, int oldmode)
        /* Allow LDTs to be cleared by the user. */
        if (ldt_info.base_addr == 0 && ldt_info.limit == 0) {
                if (oldmode || LDT_empty(&ldt_info)) {
-                       entry_1 = 0;
-                       entry_2 = 0;
+                       memset(&ldt, 0, sizeof(ldt));
                        goto install;
                }
        }
 
-       entry_1 = LDT_entry_a(&ldt_info);
-       entry_2 = LDT_entry_b(&ldt_info);
+       fill_ldt(&ldt, &ldt_info);
        if (oldmode)
-               entry_2 &= ~(1 << 20);
+               ldt.avl = 0;
 
        /* Install the new entry ...  */
 install:
-       write_ldt_entry(mm->context.ldt, ldt_info.entry_number, entry_1,
-                       entry_2);
+       write_ldt_entry(mm->context.ldt, ldt_info.entry_number,
+                       ldt.a, ldt.b);
        error = 0;
 
 out_unlock: