• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/components/opensource/linux/linux-2.6.36/drivers/lguest/

Lines Matching defs:cpu

51 static void push_guest_stack(struct lg_cpu *cpu, unsigned long *gstack, u32 val)
55 lgwrite(cpu, *gstack, u32, val);
72 static void set_guest_interrupt(struct lg_cpu *cpu, u32 lo, u32 hi,
84 if ((cpu->regs->ss&0x3) != GUEST_PL) {
89 virtstack = cpu->esp1;
90 ss = cpu->ss1;
92 origstack = gstack = guest_pa(cpu, virtstack);
99 push_guest_stack(cpu, &gstack, cpu->regs->ss);
100 push_guest_stack(cpu, &gstack, cpu->regs->esp);
103 virtstack = cpu->regs->esp;
104 ss = cpu->regs->ss;
106 origstack = gstack = guest_pa(cpu, virtstack);
115 eflags = cpu->regs->eflags;
116 if (get_user(irq_enable, &cpu->lg->lguest_data->irq_enabled) == 0
125 push_guest_stack(cpu, &gstack, eflags);
126 push_guest_stack(cpu, &gstack, cpu->regs->cs);
127 push_guest_stack(cpu, &gstack, cpu->regs->eip);
131 push_guest_stack(cpu, &gstack, cpu->regs->errcode);
137 cpu->regs->ss = ss;
138 cpu->regs->esp = virtstack + (gstack - origstack);
139 cpu->regs->cs = (__KERNEL_CS|GUEST_PL);
140 cpu->regs->eip = idt_address(lo, hi);
147 if (put_user(0, &cpu->lg->lguest_data->irq_enabled))
148 kill_guest(cpu, "Disabling interrupts");
158 unsigned int interrupt_pending(struct lg_cpu *cpu, bool *more)
164 if (!cpu->lg->lguest_data)
171 if (copy_from_user(&blk, cpu->lg->lguest_data->blocked_interrupts,
174 bitmap_andnot(blk, cpu->irqs_pending, blk, LGUEST_IRQS);
187 void try_deliver_interrupt(struct lg_cpu *cpu, unsigned int irq, bool more)
197 if (cpu->regs->eip >= cpu->lg->noirq_start &&
198 (cpu->regs->eip < cpu->lg->noirq_end))
202 if (cpu->halted) {
204 if (put_user(X86_EFLAGS_IF, &cpu->lg->lguest_data->irq_enabled))
205 kill_guest(cpu, "Re-enabling interrupts");
206 cpu->halted = 0;
210 if (get_user(irq_enabled, &cpu->lg->lguest_data->irq_enabled))
215 &cpu->lg->lguest_data->irq_pending);
225 idt = &cpu->arch.idt[FIRST_EXTERNAL_VECTOR+irq];
229 clear_bit(irq, cpu->irqs_pending);
235 set_guest_interrupt(cpu, idt->a, idt->b, false);
245 write_timestamp(cpu);
252 put_user(0, &cpu->lg->lguest_data->irq_pending);
256 void set_interrupt(struct lg_cpu *cpu, unsigned int irq)
262 set_bit(irq, cpu->irqs_pending);
268 if (!wake_up_process(cpu->tsk))
269 kick_process(cpu->tsk);
331 bool deliver_trap(struct lg_cpu *cpu, unsigned int num)
337 if (num >= ARRAY_SIZE(cpu->arch.idt))
344 if (!idt_present(cpu->arch.idt[num].a, cpu->arch.idt[num].b))
346 set_guest_interrupt(cpu, cpu->arch.idt[num].a,
347 cpu->arch.idt[num].b, has_err(num));
412 void pin_stack_pages(struct lg_cpu *cpu)
420 for (i = 0; i < cpu->lg->stack_pages; i++)
427 pin_page(cpu, cpu->esp1 - 1 - i * PAGE_SIZE);
440 void guest_set_stack(struct lg_cpu *cpu, u32 seg, u32 esp, unsigned int pages)
446 kill_guest(cpu, "bad stack segment %i", seg);
449 kill_guest(cpu, "bad stack pages %u", pages);
451 cpu->ss1 = seg;
452 cpu->esp1 = esp;
453 cpu->lg->stack_pages = pages;
455 pin_stack_pages(cpu);
467 static void set_trap(struct lg_cpu *cpu, struct desc_struct *trap,
480 kill_guest(cpu, "bad IDT type %i", type);
501 void load_guest_idt_entry(struct lg_cpu *cpu, unsigned int num, u32 lo, u32 hi)
514 cpu->changed |= CHANGED_IDT;
517 if (num >= ARRAY_SIZE(cpu->arch.idt))
518 kill_guest(cpu, "Setting idt entry %u", num);
520 set_trap(cpu, &cpu->arch.idt[num], num, lo, hi);
569 void copy_traps(const struct lg_cpu *cpu, struct desc_struct *idt,
578 for (i = 0; i < ARRAY_SIZE(cpu->arch.idt); i++) {
579 const struct desc_struct *gidt = &cpu->arch.idt[i];
615 void guest_set_clockevent(struct lg_cpu *cpu, unsigned long delta)
621 hrtimer_cancel(&cpu->hrt);
631 hrtimer_start(&cpu->hrt, expires, HRTIMER_MODE_ABS);
637 struct lg_cpu *cpu = container_of(timer, struct lg_cpu, hrt);
640 set_interrupt(cpu, 0);
645 void init_clockdev(struct lg_cpu *cpu)
647 hrtimer_init(&cpu->hrt, CLOCK_REALTIME, HRTIMER_MODE_ABS);
648 cpu->hrt.function = clockdev_fn;