Changeset f4946de in mainline


Ignore:
Timestamp:
2010-07-12T16:00:33Z (14 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
efbd094
Parents:
4e91239
Message:

Use trap gate instead of interrupt gate for the syscall int handler.

Location:
kernel/arch/ia32
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • kernel/arch/ia32/include/pm.h

    r4e91239 rf4946de  
    6767#define AR_CODE       (3 << 3)
    6868#define AR_WRITABLE   (1 << 1)
    69 #define AR_INTERRUPT  (0x0e)
    70 #define AR_TSS        (0x09)
     69#define AR_INTERRUPT  (0xe)
     70#define AR_TRAP       (0xf)
     71#define AR_TSS        (0x9)
    7172
    7273#define DPL_KERNEL  (PL_KERNEL << 5)
  • kernel/arch/ia32/src/asm.S

    r4e91239 rf4946de  
    313313               
    314314        cld
    315         sti
    316315               
    317316        /* Call syscall_handler(edx, ecx, ebx, esi, edi, ebp, eax) */
  • kernel/arch/ia32/src/pm.c

    r4e91239 rf4946de  
    130130                d->selector = gdtselector(KTEXT_DES);
    131131
    132                 d->access = AR_PRESENT | AR_INTERRUPT;  /* masking interrupt */
    133 
    134132                if (i == VECTOR_SYSCALL) {
    135133                        /*
    136                          * The syscall interrupt gate must be calleable from
    137                          * userland.
     134                         * The syscall trap gate must be callable from
     135                         * userland. Interrupts will remain enabled.
    138136                         */
    139                         d->access |= DPL_USER;
     137                        d->access = AR_PRESENT | AR_TRAP | DPL_USER;
     138                } else {
     139                        /*
     140                         * Other interrupts use interrupt gates which
     141                         * disable interrupts.
     142                         */
     143                        d->access = AR_PRESENT | AR_INTERRUPT;
    140144                }
    141145        }
Note: See TracChangeset for help on using the changeset viewer.