Changeset 11928d5 in mainline


Ignore:
Timestamp:
2006-04-28T14:32:44Z (19 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
a98cdc7
Parents:
040e4e9
Message:

Fix BITS2BYTES macro to return 0 when passed 0 as argument.
Fix ia32 TSS segment granularity to be 0.
Fix ia32 and amd64 initial TSS limit to be 103.
Little textual changes here and there.

Files:
7 edited

Legend:

Unmodified
Added
Removed
  • arch/amd64/include/asm.h

    r040e4e9 r11928d5  
    208208static inline void gdtr_load(struct ptr_16_64 *gdtr_reg)
    209209{
    210         __asm__ volatile ("lgdt %0\n" : : "m" (*gdtr_reg));
     210        __asm__ volatile ("lgdtq %0\n" : : "m" (*gdtr_reg));
    211211}
    212212
     
    217217static inline void gdtr_store(struct ptr_16_64 *gdtr_reg)
    218218{
    219         __asm__ volatile ("sgdt %0\n" : : "m" (*gdtr_reg));
     219        __asm__ volatile ("sgdtq %0\n" : : "m" (*gdtr_reg));
    220220}
    221221
     
    226226static inline void idtr_load(struct ptr_16_64 *idtr_reg)
    227227{
    228         __asm__ volatile ("lidt %0\n" : : "m" (*idtr_reg));
     228        __asm__ volatile ("lidtq %0\n" : : "m" (*idtr_reg));
    229229}
    230230
  • arch/amd64/src/pm.c

    r040e4e9 r11928d5  
    214214       
    215215        gdt_tss_setbase(&gdt_p[TSS_DES], (__address) tss_p);
    216         gdt_tss_setlimit(&gdt_p[TSS_DES], sizeof(tss_t) - 1);
     216        gdt_tss_setlimit(&gdt_p[TSS_DES], TSS_BASIC_SIZE - 1);
    217217
    218218        gdtr_load(&gdtr);
  • arch/ia32/include/asm.h

    r040e4e9 r11928d5  
    259259static inline void gdtr_load(ptr_16_32_t *gdtr_reg)
    260260{
    261         __asm__ volatile ("lgdt %0\n" : : "m" (*gdtr_reg));
     261        __asm__ volatile ("lgdtl %0\n" : : "m" (*gdtr_reg));
    262262}
    263263
     
    268268static inline void gdtr_store(ptr_16_32_t *gdtr_reg)
    269269{
    270         __asm__ volatile ("sgdt %0\n" : : "m" (*gdtr_reg));
     270        __asm__ volatile ("sgdtl %0\n" : : "m" (*gdtr_reg));
    271271}
    272272
     
    277277static inline void idtr_load(ptr_16_32_t *idtr_reg)
    278278{
    279         __asm__ volatile ("lidt %0\n" : : "m" (*idtr_reg));
     279        __asm__ volatile ("lidtl %0\n" : : "m" (*idtr_reg));
    280280}
    281281
  • arch/ia32/include/smp/apic.h

    r040e4e9 r11928d5  
    128128typedef struct icr icr_t;
    129129
    130 /* End Of Interrupt */
     130/* End Of Interrupt. */
    131131#define EOI             (0x0b0/sizeof(__u32))
    132132
     
    252252typedef union l_apic_id l_apic_id_t;
    253253
    254 /* Local APIC Version Register */
     254/** Local APIC Version Register */
    255255#define LAVR            (0x030/sizeof(__u32))
    256256#define LAVR_Mask       0xff
     
    264264        __u32 value;
    265265        struct {
    266                 unsigned : 24;          /**< Reserver. */
     266                unsigned : 24;          /**< Reserved. */
    267267                __u8 id;                /**< Logical APIC ID. */
    268268        } __attribute__ ((packed));
     
    320320                struct {
    321321                        unsigned : 24;                  /**< Reserved. */
    322                         __u8 dest : 8;          /**< Destination Field. */
     322                        __u8 dest : 8;                  /**< Destination Field. */
    323323                } __attribute__ ((packed));
    324324        };
  • arch/ia32/src/pm.c

    r040e4e9 r11928d5  
    200200        gdt_p[TSS_DES].access = AR_PRESENT | AR_TSS | DPL_KERNEL;
    201201        gdt_p[TSS_DES].special = 1;
    202         gdt_p[TSS_DES].granularity = 1;
     202        gdt_p[TSS_DES].granularity = 0;
    203203       
    204204        gdt_setbase(&gdt_p[TSS_DES], (__address) tss_p);
    205         gdt_setlimit(&gdt_p[TSS_DES], sizeof(tss_t) - 1);
     205        gdt_setlimit(&gdt_p[TSS_DES], TSS_BASIC_SIZE - 1);
    206206
    207207        /*
     
    211211        tr_load(selector(TSS_DES));
    212212       
    213         clean_IOPL_NT_flags();    /* Disable I/O on nonprivileged levels */
     213        clean_IOPL_NT_flags();    /* Disable I/O on nonprivileged levels and clear NT flag. */
    214214        clean_AM_flag();          /* Disable alignment check */
    215215}
  • arch/ia32/src/proc/scheduler.c

    r040e4e9 r11928d5  
    3737#include <arch/asm.h>
    3838#include <adt/bitmap.h>
     39#include <print.h>
    3940
    4041/** Perform ia32 specific tasks needed before the new task is run.
     
    5657        if ((bits = TASK->arch.iomap.bits)) {
    5758                bitmap_t iomap;
    58 
     59       
    5960                ASSERT(TASK->arch.iomap.map);
    6061                bitmap_initialize(&iomap, CPU->arch.tss->iomap, TSS_IOMAP_SIZE * 8);
  • generic/include/adt/bitmap.h

    r040e4e9 r11928d5  
    3333#include <typedefs.h>
    3434
    35 #define BITS2BYTES(bits)        ((((bits)-1)>>3)+1)
     35#define BITS2BYTES(bits)        (bits ? ((((bits)-1)>>3)+1) : 0)
    3636
    3737typedef struct {
Note: See TracChangeset for help on using the changeset viewer.