提交 ac0a9fb2 创建 作者: Silas Boyd-Wickizer's avatar Silas Boyd-Wickizer

A 64-bit struct taskstate.

上级 e030cdee
......@@ -110,7 +110,7 @@ struct intdesc
u16 rip1;
u32 rip2;
u32 reserved1;
};
} __attribute__((packed, aligned(16)));
// See section 4.6 of amd64 vol2
struct desctr
......@@ -121,8 +121,13 @@ struct desctr
struct taskstate
{
u64 rsp0;
} __attribute__((packed));
u8 reserved0[4];
u64 rsp[3];
u64 ist[8];
u8 reserved1[10];
u16 iomba;
u8 iopb[];
} __attribute__ ((packed, aligned(16)));
#endif
#define INT_P (1<<7) /* interrupt descriptor present */
......
......@@ -11,6 +11,7 @@
#include "queue.h"
#include "condvar.h"
#include "proc.h"
#include <stddef.h>
extern char data[]; // defined in data.S
......@@ -123,7 +124,8 @@ switchuvm(struct proc *p)
mycpu()->gdt[TSSSEG>>3] = (struct segdesc)
SEGDESC(base, (sizeof(mycpu()->ts)-1), SEG_P|SEG_TSS64A);
mycpu()->gdt[(TSSSEG>>3)+1] = (struct segdesc) SEGDESCHI(base);
mycpu()->ts.rsp0 = (u64) myproc()->kstack + KSTACKSIZE;
mycpu()->ts.rsp[0] = (u64) myproc()->kstack + KSTACKSIZE;
mycpu()->ts.iomba = (u16)offsetof(struct taskstate, iopb);
ltr(TSSSEG);
if(p->vmap == 0 || p->vmap->pml4 == 0)
panic("switchuvm: no vmap/pml4");
......
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论