@lay:4407l2 Listing 2. Using Shared GDT Entries ... #define set_shared_tss_desc(addr,cpu)\ _set_tssldt_desc(gdt_table+ SHARED_TSS_ENTRY+2*cpu,(int)addr,235,0x89); #define set_shared_ldt_desc(addr,size,cpu)\ _set_tssldt_desc(gdt_table+SHARED_LDT_ENTRY+2*cpu, (int)addr,((size<<3)-1),0x82); .... void __switch_to(task_struct *prev, task_struct *next){ ... if(next->tss.tr <= 0x0000ffff) { //original code here } else { set_shared_tss_desc(&next->tss), smp_processor_id()); set_shared_ldt_desc(&next->mm->segments, LDT_ENTRIES,smp_processor_id()); } //set LDTR and TR ... }