Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/arch/ia32/src/userspace.c

    r0f17bff rd6f9fff  
    3939#include <abi/proc/uarg.h>
    4040#include <mm/as.h>
    41 #include <arch/cpu.h>
    42 #include <arch/asm.h>
    4341
    4442/** Enter userspace
     
    4947void userspace(uspace_arg_t *kernel_uarg)
    5048{
    51         uint32_t eflags = read_eflags();
     49        ipl_t ipl = interrupts_disable();
    5250       
    5351        asm volatile (
     52                /*
     53                 * Clear nested task flag.
     54                 */
     55                "pushfl\n"
     56                "pop %%eax\n"
     57                "and $0xffffbfff, %%eax\n"
     58                "push %%eax\n"
     59                "popfl\n"
     60               
    5461                /* Set up GS register (virtual register segment) */
    5562                "movl %[vreg_des], %%gs\n"
     
    5764                "pushl %[udata_des]\n"
    5865                "pushl %[stack_top]\n"
    59                 "pushl %[eflags]\n"
     66                "pushl %[ipl]\n"
    6067                "pushl %[utext_des]\n"
    6168                "pushl %[entry]\n"
     
    6774                "iret\n"
    6875                :
    69                 : [eflags_mask] "i" (~EFLAGS_NT),
    70                   [udata_des] "i" (GDT_SELECTOR(UDATA_DES) | PL_USER),
     76                : [udata_des] "i" (GDT_SELECTOR(UDATA_DES) | PL_USER),
    7177                  [stack_top] "r" ((uint8_t *) kernel_uarg->uspace_stack +
    7278                      kernel_uarg->uspace_stack_size),
    73                   [eflags] "r" ((eflags & ~(EFLAGS_NT)) | EFLAGS_IF),
     79                  [ipl] "r" (ipl),
    7480                  [utext_des] "i" (GDT_SELECTOR(UTEXT_DES) | PL_USER),
    7581                  [entry] "r" (kernel_uarg->uspace_entry),
Note: See TracChangeset for help on using the changeset viewer.