Fixed double fault handler. Personally I disclaim all responsiblity

for these changes. I was mostly just staring in amazement at the screen
while Axel and Thomas were discussing IA32 internals. A particularly
fascinating moment was when Thomas produced the cause of a bug we had
been trying to track down for hours off the top of his head (of course
iret behaves specially when the NT bit is set :-). His slowness must be
excused though, since he hadn't slept for more then 30 hours. ;-)

The code doesn't wholeheartedly deal with multi-processor machines yet.
Axel will certainly do some cleanup...


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12239 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Ingo Weinhold
2005-04-04 21:43:47 +00:00
parent 3a2b5bfc6d
commit 8e26b085e5
8 changed files with 104 additions and 31 deletions
@@ -17,8 +17,8 @@
// this file can also be included from assembler as well
// (and is in arch_interrupts.S)
#define DOUBLE_FAULT_TSS_SEGMENT 5
#define TSS_BASE_SEGMENT 6
#define DOUBLE_FAULT_TSS_BASE_SEGMENT 5
#define TSS_BASE_SEGMENT (DOUBLE_FAULT_TSS_BASE_SEGMENT + smp_get_num_cpus())
#define TLS_BASE_SEGMENT (TSS_BASE_SEGMENT + smp_get_num_cpus())
@@ -125,7 +125,7 @@ set_tss_descriptor(struct segment_descriptor *desc, addr_t base, uint32 limit)
desc->privilege_level = DPL_KERNEL;
desc->present = 1;
desc->granularity = 1; // 4 GB size (in page size steps)
desc->granularity = 0; // 1 Byte granularity
desc->available = 0; // system available bit is currently not used
desc->d_b = 0;