Changes in / [9ad289d:3acd1bb] in mainline


Ignore:
Files:
1 deleted
4 edited

Legend:

Unmodified
Added
Removed
  • kernel/arch/amd64/include/istate.h

    r9ad289d r3acd1bb  
    6666} istate_t;
    6767
    68 #define RPL_USER        3
    69 
    7068/** Return true if exception happened while in userspace */
    7169NO_TRACE static inline int istate_from_uspace(istate_t *istate)
    7270{
    73         return (istate->cs & RPL_USER) == RPL_USER;
     71        return !(istate->rip & UINT64_C(0x8000000000000000));
    7472}
    7573
  • kernel/arch/ia32/include/istate.h

    r9ad289d r3acd1bb  
    6868} istate_t;
    6969
    70 #define RPL_USER        3
    71 
    7270/** Return true if exception happened while in userspace */
    7371NO_TRACE static inline int istate_from_uspace(istate_t *istate)
    7472{
    75         return (istate->cs & RPL_USER) == RPL_USER;
     73        return !(istate->eip & UINT32_C(0x80000000));
    7674}
    7775
  • kernel/generic/src/main/kinit.c

    r9ad289d r3acd1bb  
    250250                                    CAP_IO_MANAGER | CAP_IRQ_REG);
    251251                               
    252                                 if (!ipc_phone_0) {
     252                                if (!ipc_phone_0)
    253253                                        ipc_phone_0 = &programs[i].task->answerbox;
    254                                         /*
    255                                          * Hold the first task so that the
    256                                          * ipc_phone_0 remains a valid pointer
    257                                          * even if the first task exits for
    258                                          * whatever reason.
    259                                          */
    260                                         task_hold(programs[i].task);
    261                                 }
    262254                        }
    263255                       
  • kernel/generic/src/proc/task.c

    r9ad289d r3acd1bb  
    125125{
    126126        size_t tasks_left;
    127 
    128         if (ipc_phone_0) {
    129                 task_t *task_0 = ipc_phone_0->task;
    130                 ipc_phone_0 = NULL;
    131                 /*
    132                  * The first task is held by kinit(), we need to release it or
    133                  * it will never finish cleanup.
    134                  */
    135                 task_release(task_0);
    136         }
    137127       
    138128        /* Repeat until there are any tasks except TASK */
Note: See TracChangeset for help on using the changeset viewer.