@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
...
}

