Lines Matching refs:cpu
67 static void fixup_gdt_table(struct lg_cpu *cpu, unsigned start, unsigned end) in fixup_gdt_table() argument
84 if (cpu->arch.gdt[i].dpl == 0) in fixup_gdt_table()
85 cpu->arch.gdt[i].dpl |= GUEST_PL; in fixup_gdt_table()
93 cpu->arch.gdt[i].type |= 0x1; in fixup_gdt_table()
136 void setup_guest_gdt(struct lg_cpu *cpu) in setup_guest_gdt() argument
142 cpu->arch.gdt[GDT_ENTRY_KERNEL_CS] = FULL_EXEC_SEGMENT; in setup_guest_gdt()
143 cpu->arch.gdt[GDT_ENTRY_KERNEL_DS] = FULL_SEGMENT; in setup_guest_gdt()
144 cpu->arch.gdt[GDT_ENTRY_KERNEL_CS].dpl |= GUEST_PL; in setup_guest_gdt()
145 cpu->arch.gdt[GDT_ENTRY_KERNEL_DS].dpl |= GUEST_PL; in setup_guest_gdt()
152 void copy_gdt_tls(const struct lg_cpu *cpu, struct desc_struct *gdt) in copy_gdt_tls() argument
157 gdt[i] = cpu->arch.gdt[i]; in copy_gdt_tls()
165 void copy_gdt(const struct lg_cpu *cpu, struct desc_struct *gdt) in copy_gdt() argument
175 gdt[i] = cpu->arch.gdt[i]; in copy_gdt()
182 void load_guest_gdt_entry(struct lg_cpu *cpu, u32 num, u32 lo, u32 hi) in load_guest_gdt_entry() argument
188 if (num >= ARRAY_SIZE(cpu->arch.gdt)) { in load_guest_gdt_entry()
189 kill_guest(cpu, "too many gdt entries %i", num); in load_guest_gdt_entry()
194 cpu->arch.gdt[num].a = lo; in load_guest_gdt_entry()
195 cpu->arch.gdt[num].b = hi; in load_guest_gdt_entry()
196 fixup_gdt_table(cpu, num, num+1); in load_guest_gdt_entry()
201 cpu->changed |= CHANGED_GDT; in load_guest_gdt_entry()
210 void guest_load_tls(struct lg_cpu *cpu, unsigned long gtls) in guest_load_tls() argument
212 struct desc_struct *tls = &cpu->arch.gdt[GDT_ENTRY_TLS_MIN]; in guest_load_tls()
214 __lgread(cpu, tls, gtls, sizeof(*tls)*GDT_ENTRY_TLS_ENTRIES); in guest_load_tls()
215 fixup_gdt_table(cpu, GDT_ENTRY_TLS_MIN, GDT_ENTRY_TLS_MAX+1); in guest_load_tls()
217 cpu->changed |= CHANGED_GDT_TLS; in guest_load_tls()