Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/generic/src/syscall/syscall.c

    r2fa10f6 r5e984f2  
    5959    unative_t a4, unative_t a5, unative_t a6, unative_t id)
    6060{
     61        unative_t rc;
     62        ipl_t ipl;
     63
    6164        /* Do userpace accounting */
    62         irq_spinlock_lock(&THREAD->lock, true);
     65        ipl = interrupts_disable();
     66        spinlock_lock(&THREAD->lock);
    6367        thread_update_accounting(true);
    64         irq_spinlock_unlock(&THREAD->lock, true);
    65        
     68        spinlock_unlock(&THREAD->lock);
     69        interrupts_restore(ipl);
     70
    6671#ifdef CONFIG_UDEBUG
    6772        /*
    6873         * Early check for undebugged tasks. We do not lock anything as this
    6974         * test need not be precise in either direction.
    70          *
    7175         */
    72         if (THREAD->udebug.active)
     76        if (THREAD->udebug.active) {
    7377                udebug_syscall_event(a1, a2, a3, a4, a5, a6, id, 0, false);
     78        }
    7479#endif
    7580       
    76         unative_t rc;
    7781        if (id < SYSCALL_END) {
    7882                rc = syscall_table[id](a1, a2, a3, a4, a5, a6);
     
    8993        if (THREAD->udebug.active) {
    9094                udebug_syscall_event(a1, a2, a3, a4, a5, a6, id, rc, true);
    91                
     95       
    9296                /*
    9397                 * Stopping point needed for tasks that only invoke
     
    99103        }
    100104#endif
    101        
     105
    102106        /* Do kernel accounting */
    103         irq_spinlock_lock(&THREAD->lock, true);
     107        ipl = interrupts_disable();
     108        spinlock_lock(&THREAD->lock);
    104109        thread_update_accounting(false);
    105         irq_spinlock_unlock(&THREAD->lock, true);
     110        spinlock_unlock(&THREAD->lock);
     111        interrupts_restore(ipl);
    106112       
    107113        return rc;
     
    159165        (syshandler_t) sys_physmem_map,
    160166        (syshandler_t) sys_iospace_enable,
     167        (syshandler_t) sys_preempt_control,
    161168       
    162169        /* Sysinfo syscalls */
Note: See TracChangeset for help on using the changeset viewer.