Lines Matching defs:cpu
67 static void fixup_gdt_table(struct lg_cpu *cpu, unsigned start, unsigned end)
84 if ((cpu->arch.gdt[i].b & 0x00006000) == 0)
85 cpu->arch.gdt[i].b |= (GUEST_PL << 13);
93 cpu->arch.gdt[i].b |= 0x00000100;
130 void setup_guest_gdt(struct lg_cpu *cpu)
136 cpu->arch.gdt[GDT_ENTRY_KERNEL_CS] = FULL_EXEC_SEGMENT;
137 cpu->arch.gdt[GDT_ENTRY_KERNEL_DS] = FULL_SEGMENT;
138 cpu->arch.gdt[GDT_ENTRY_KERNEL_CS].b |= (GUEST_PL << 13);
139 cpu->arch.gdt[GDT_ENTRY_KERNEL_DS].b |= (GUEST_PL << 13);
146 void copy_gdt_tls(const struct lg_cpu *cpu, struct desc_struct *gdt)
151 gdt[i] = cpu->arch.gdt[i];
159 void copy_gdt(const struct lg_cpu *cpu, struct desc_struct *gdt)
169 gdt[i] = cpu->arch.gdt[i];
176 void load_guest_gdt_entry(struct lg_cpu *cpu, u32 num, u32 lo, u32 hi)
182 if (num >= ARRAY_SIZE(cpu->arch.gdt)) {
183 kill_guest(cpu, "too many gdt entries %i", num);
188 cpu->arch.gdt[num].a = lo;
189 cpu->arch.gdt[num].b = hi;
190 fixup_gdt_table(cpu, num, num+1);
195 cpu->changed |= CHANGED_GDT;
204 void guest_load_tls(struct lg_cpu *cpu, unsigned long gtls)
206 struct desc_struct *tls = &cpu->arch.gdt[GDT_ENTRY_TLS_MIN];
208 __lgread(cpu, tls, gtls, sizeof(*tls)*GDT_ENTRY_TLS_ENTRIES);
209 fixup_gdt_table(cpu, GDT_ENTRY_TLS_MIN, GDT_ENTRY_TLS_MAX+1);
211 cpu->changed |= CHANGED_GDT_TLS;