On Wed, Nov 21, 2012 at 06:34:00PM -0800, Sanjay Lal wrote: > +struct kvm_mips_callbacks { > + int (*handle_cop_unusable) (struct kvm_vcpu *vcpu); > + int (*handle_tlb_mod) (struct kvm_vcpu *vcpu); > + int (*handle_tlb_ld_miss) (struct kvm_vcpu *vcpu); > + int (*handle_tlb_st_miss) (struct kvm_vcpu *vcpu); > + int (*handle_addr_err_st) (struct kvm_vcpu *vcpu); > + int (*handle_addr_err_ld) (struct kvm_vcpu *vcpu); > + int (*handle_syscall) (struct kvm_vcpu *vcpu); > + int (*handle_res_inst) (struct kvm_vcpu *vcpu); > + int (*handle_break) (struct kvm_vcpu *vcpu); > + int (*vm_init) (struct kvm *kvm); > + int (*vcpu_init) (struct kvm_vcpu *vcpu); > + int (*vcpu_setup) (struct kvm_vcpu *vcpu); > + gpa_t(*gva_to_gpa) (gva_t gva); > + void (*queue_timer_int) (struct kvm_vcpu *vcpu); > + void (*dequeue_timer_int) (struct kvm_vcpu *vcpu); > + void (*queue_io_int) (struct kvm_vcpu *vcpu, > + struct kvm_mips_interrupt *irq); > + void (*dequeue_io_int) (struct kvm_vcpu *vcpu, > + struct kvm_mips_interrupt *irq); > + int (*irq_deliver) (struct kvm_vcpu *vcpu, unsigned int priority, > + uint32_t cause); > + int (*irq_clear) (struct kvm_vcpu *vcpu, unsigned int priority, > + uint32_t cause); > + int (*vcpu_ioctl_get_regs) (struct kvm_vcpu *vcpu, > + struct kvm_regs *regs); > + int (*vcpu_ioctl_set_regs) (struct kvm_vcpu *vcpu, > + struct kvm_regs *regs); > +}; You haven't addressed Avi's comment about dropping the interaction and adding it later, when other HW is supported and the best way to do the split is known. -- Gleb.