* [PATCH 0/2] Consolidate the insb/outsb emulation into x86_emulate.c (second try)
@ 2007-08-03 9:28 Laurent Vivier
[not found] ` <46B2F559.5060604-6ktuUTfB/bM@public.gmane.org>
0 siblings, 1 reply; 16+ messages in thread
From: Laurent Vivier @ 2007-08-03 9:28 UTC (permalink / raw)
To: kvm-devel
[-- Attachment #1.1: Type: text/plain, Size: 841 bytes --]
From the TODO, this serie of patches consolidates the insb/outsb emulation into
x86_emulate.c.
[PATCH 1/2] emulate_ins_outs, defines ins/outs opcode in x86_emulate.c and call
emulate_instruction() from io_interception() (svm.c) and from handle_io()
(vmx.c). This patch remove all vmx/svm prefix instruction decoders
(get_addr_size(), io_get_override(), io_address(), get_io_count())
[PATCH 2/2] setup_pio-cleanup, some cleanup, split kvm_setup_pio() in two
functions, one to setup in/out pio (kvm_emulate_pio()) and one to setup ins/outs
pio (kvm_emulate_pio_string()).
As usual for me, AMD part has not been tested...
Signed-off-by: Laurent Vivier <Laurent.Vivier-6ktuUTfB/bM@public.gmane.org>
--
------------- Laurent.Vivier-6ktuUTfB/bM@public.gmane.org --------------
"Software is hard" - Donald Knuth
[-- Attachment #1.2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 189 bytes --]
[-- Attachment #2: Type: text/plain, Size: 315 bytes --]
-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems? Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >> http://get.splunk.com/
[-- Attachment #3: Type: text/plain, Size: 186 bytes --]
_______________________________________________
kvm-devel mailing list
kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org
https://lists.sourceforge.net/lists/listinfo/kvm-devel
^ permalink raw reply [flat|nested] 16+ messages in thread[parent not found: <46B2F559.5060604-6ktuUTfB/bM@public.gmane.org>]
* [PATCH 1/2] call emulate_instruction() to emulate ins/outs [not found] ` <46B2F559.5060604-6ktuUTfB/bM@public.gmane.org> @ 2007-08-03 9:34 ` Laurent Vivier [not found] ` <46B2F6A7.5010301-6ktuUTfB/bM@public.gmane.org> 0 siblings, 1 reply; 16+ messages in thread From: Laurent Vivier @ 2007-08-03 9:34 UTC (permalink / raw) To: Laurent Vivier; +Cc: kvm-devel [-- Attachment #1.1.1: Type: text/plain, Size: 548 bytes --] [PATCH 1/2] emulate_ins_outs, defines ins/outs opcode in x86_emulate.c and call emulate_instruction() from io_interception() (svm.c) and from handle_io() (vmx.c). This patch remove all vmx/svm prefix instruction decoders (get_addr_size(), io_get_override(), io_address(), get_io_count()) As usual for me, AMD part has not been tested... Signed-off-by: Laurent Vivier <Laurent.Vivier-6ktuUTfB/bM@public.gmane.org> -- ------------- Laurent.Vivier-6ktuUTfB/bM@public.gmane.org -------------- "Software is hard" - Donald Knuth [-- Attachment #1.1.2: emulate_ins_outs --] [-- Type: text/plain, Size: 10417 bytes --] Index: kvm/drivers/kvm/kvm_main.c =================================================================== --- kvm.orig/drivers/kvm/kvm_main.c 2007-08-02 18:38:55.000000000 +0200 +++ kvm/drivers/kvm/kvm_main.c 2007-08-03 09:26:52.000000000 +0200 @@ -1222,6 +1222,8 @@ vcpu->mmio_is_write = 0; r = x86_emulate_memop(&emulate_ctxt, &emulate_ops); + if (r && vcpu->pio.count) + return EMULATE_DO_MMIO; if ((r || vcpu->mmio_is_write) && run) { run->exit_reason = KVM_EXIT_MMIO; Index: kvm/drivers/kvm/svm.c =================================================================== --- kvm.orig/drivers/kvm/svm.c 2007-08-02 18:38:55.000000000 +0200 +++ kvm/drivers/kvm/svm.c 2007-08-02 18:38:58.000000000 +0200 @@ -98,20 +98,6 @@ return svm_features & feat; } -static unsigned get_addr_size(struct vcpu_svm *svm) -{ - struct vmcb_save_area *sa = &svm->vmcb->save; - u16 cs_attrib; - - if (!(sa->cr0 & X86_CR0_PE) || (sa->rflags & X86_EFLAGS_VM)) - return 2; - - cs_attrib = sa->cs.attrib; - - return (cs_attrib & SVM_SELECTOR_L_MASK) ? 8 : - (cs_attrib & SVM_SELECTOR_DB_MASK) ? 4 : 2; -} - static inline u8 pop_irq(struct kvm_vcpu *vcpu) { int word_index = __ffs(vcpu->irq_summary); @@ -995,147 +981,32 @@ return 0; } -static int io_get_override(struct vcpu_svm *svm, - struct vmcb_seg **seg, - int *addr_override) -{ - u8 inst[MAX_INST_SIZE]; - unsigned ins_length; - gva_t rip; - int i; - - rip = svm->vmcb->save.rip; - ins_length = svm->next_rip - rip; - rip += svm->vmcb->save.cs.base; - - if (ins_length > MAX_INST_SIZE) - printk(KERN_DEBUG - "%s: inst length err, cs base 0x%llx rip 0x%llx " - "next rip 0x%llx ins_length %u\n", - __FUNCTION__, - svm->vmcb->save.cs.base, - svm->vmcb->save.rip, - svm->vmcb->control.exit_info_2, - ins_length); - - if (emulator_read_std(rip, inst, ins_length, &svm->vcpu) - != X86EMUL_CONTINUE) - /* #PF */ - return 0; - - *addr_override = 0; - *seg = NULL; - for (i = 0; i < ins_length; i++) - switch (inst[i]) { - case 0xf0: - case 0xf2: - case 0xf3: - case 0x66: - continue; - case 0x67: - *addr_override = 1; - continue; - case 0x2e: - *seg = &svm->vmcb->save.cs; - continue; - case 0x36: - *seg = &svm->vmcb->save.ss; - continue; - case 0x3e: - *seg = &svm->vmcb->save.ds; - continue; - case 0x26: - *seg = &svm->vmcb->save.es; - continue; - case 0x64: - *seg = &svm->vmcb->save.fs; - continue; - case 0x65: - *seg = &svm->vmcb->save.gs; - continue; - default: - return 1; - } - printk(KERN_DEBUG "%s: unexpected\n", __FUNCTION__); - return 0; -} - -static unsigned long io_address(struct vcpu_svm *svm, int ins, gva_t *address) -{ - unsigned long addr_mask; - unsigned long *reg; - struct vmcb_seg *seg; - int addr_override; - struct vmcb_save_area *save_area = &svm->vmcb->save; - u16 cs_attrib = save_area->cs.attrib; - unsigned addr_size = get_addr_size(svm); - - if (!io_get_override(svm, &seg, &addr_override)) - return 0; - - if (addr_override) - addr_size = (addr_size == 2) ? 4: (addr_size >> 1); - - if (ins) { - reg = &svm->vcpu.regs[VCPU_REGS_RDI]; - seg = &svm->vmcb->save.es; - } else { - reg = &svm->vcpu.regs[VCPU_REGS_RSI]; - seg = (seg) ? seg : &svm->vmcb->save.ds; - } - - addr_mask = ~0ULL >> (64 - (addr_size * 8)); - - if ((cs_attrib & SVM_SELECTOR_L_MASK) && - !(svm->vmcb->save.rflags & X86_EFLAGS_VM)) { - *address = (*reg & addr_mask); - return addr_mask; - } - - if (!(seg->attrib & SVM_SELECTOR_P_SHIFT)) { - svm_inject_gp(&svm->vcpu, 0); - return 0; - } - - *address = (*reg & addr_mask) + seg->base; - return addr_mask; -} - static int io_interception(struct vcpu_svm *svm, struct kvm_run *kvm_run) { u32 io_info = svm->vmcb->control.exit_info_1; //address size bug? int size, down, in, string, rep; unsigned port; - unsigned long count; - gva_t address = 0; ++svm->vcpu.stat.io_exits; svm->next_rip = svm->vmcb->control.exit_info_2; + string = (io_info & SVM_IOIO_STR_MASK) != 0; + + if (string) { + if (emulate_instruction(&svm->vcpu, kvm_run, 0, 0) == EMULATE_DO_MMIO) + return 0; + return 1; + } + in = (io_info & SVM_IOIO_TYPE_MASK) != 0; port = io_info >> 16; size = (io_info & SVM_IOIO_SIZE_MASK) >> SVM_IOIO_SIZE_SHIFT; - string = (io_info & SVM_IOIO_STR_MASK) != 0; rep = (io_info & SVM_IOIO_REP_MASK) != 0; - count = 1; down = (svm->vmcb->save.rflags & X86_EFLAGS_DF) != 0; - if (string) { - unsigned addr_mask; - - addr_mask = io_address(svm, in, &address); - if (!addr_mask) { - printk(KERN_DEBUG "%s: get io address failed\n", - __FUNCTION__); - return 1; - } - - if (rep) - count = svm->vcpu.regs[VCPU_REGS_RCX] & addr_mask; - } - return kvm_setup_pio(&svm->vcpu, kvm_run, in, size, count, string, - down, address, rep, port); + return kvm_setup_pio(&svm->vcpu, kvm_run, in, size, 1, 0, + down, 0, rep, port); } static int nop_on_interception(struct vcpu_svm *svm, struct kvm_run *kvm_run) Index: kvm/drivers/kvm/vmx.c =================================================================== --- kvm.orig/drivers/kvm/vmx.c 2007-08-02 18:38:55.000000000 +0200 +++ kvm/drivers/kvm/vmx.c 2007-08-02 18:38:58.000000000 +0200 @@ -1761,82 +1761,30 @@ return 0; } -static int get_io_count(struct kvm_vcpu *vcpu, unsigned long *count) -{ - u64 inst; - gva_t rip; - int countr_size; - int i; - - if ((vmcs_readl(GUEST_RFLAGS) & X86_EFLAGS_VM)) { - countr_size = 2; - } else { - u32 cs_ar = vmcs_read32(GUEST_CS_AR_BYTES); - - countr_size = (cs_ar & AR_L_MASK) ? 8: - (cs_ar & AR_DB_MASK) ? 4: 2; - } - - rip = vmcs_readl(GUEST_RIP); - if (countr_size != 8) - rip += vmcs_readl(GUEST_CS_BASE); - - if (emulator_read_std(rip, &inst, sizeof(inst), vcpu) != - X86EMUL_CONTINUE) - return 0; - - for (i = 0; i < sizeof(inst); i++) { - switch (((u8*)&inst)[i]) { - case 0xf0: - case 0xf2: - case 0xf3: - case 0x2e: - case 0x36: - case 0x3e: - case 0x26: - case 0x64: - case 0x65: - case 0x66: - break; - case 0x67: - countr_size = (countr_size == 2) ? 4: (countr_size >> 1); - default: - goto done; - } - } - return 0; -done: - countr_size *= 8; - *count = vcpu->regs[VCPU_REGS_RCX] & (~0ULL >> (64 - countr_size)); - //printk("cx: %lx\n", vcpu->regs[VCPU_REGS_RCX]); - return 1; -} - static int handle_io(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run) { u64 exit_qualification; int size, down, in, string, rep; unsigned port; - unsigned long count; - gva_t address; ++vcpu->stat.io_exits; exit_qualification = vmcs_read64(EXIT_QUALIFICATION); - in = (exit_qualification & 8) != 0; - size = (exit_qualification & 7) + 1; string = (exit_qualification & 16) != 0; + + if (string) { + if (emulate_instruction(vcpu, kvm_run, 0, 0) == EMULATE_DO_MMIO) + return 0; + return 1; + } + + size = (exit_qualification & 7) + 1; + in = (exit_qualification & 8) != 0; down = (vmcs_readl(GUEST_RFLAGS) & X86_EFLAGS_DF) != 0; - count = 1; rep = (exit_qualification & 32) != 0; port = exit_qualification >> 16; - address = 0; - if (string) { - if (rep && !get_io_count(vcpu, &count)) - return 1; - address = vmcs_readl(GUEST_LINEAR_ADDRESS); - } - return kvm_setup_pio(vcpu, kvm_run, in, size, count, string, down, - address, rep, port); + + return kvm_setup_pio(vcpu, kvm_run, in, size, 1, 0, down, + 0, rep, port); } static void Index: kvm/drivers/kvm/x86_emulate.c =================================================================== --- kvm.orig/drivers/kvm/x86_emulate.c 2007-08-02 18:38:55.000000000 +0200 +++ kvm/drivers/kvm/x86_emulate.c 2007-08-03 09:47:09.000000000 +0200 @@ -103,9 +103,12 @@ /* 0x58 - 0x5F */ ImplicitOps, ImplicitOps, ImplicitOps, ImplicitOps, ImplicitOps, ImplicitOps, ImplicitOps, ImplicitOps, - /* 0x60 - 0x6F */ + /* 0x60 - 0x6B */ 0, 0, 0, DstReg | SrcMem32 | ModRM | Mov /* movsxd (x86/64) */ , - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + /* 0x6C - 0x6F */ + SrcNone | ByteOp | ImplicitOps, SrcNone | ImplicitOps, /* insb, insw/insd */ + SrcNone | ByteOp | ImplicitOps, SrcNone | ImplicitOps, /* outsb, outsw/outsd */ /* 0x70 - 0x7F */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 - 0x87 */ @@ -428,10 +431,11 @@ }) /* Access/update address held in a register, based on addressing mode. */ +#define address_mask(reg) \ + ((ad_bytes == sizeof(unsigned long)) ? \ + (reg) : ((reg) & ((1UL << (ad_bytes << 3)) - 1))) #define register_address(base, reg) \ - ((base) + ((ad_bytes == sizeof(unsigned long)) ? (reg) : \ - ((reg) & ((1UL << (ad_bytes << 3)) - 1)))) - + ((base) + address_mask(reg)) #define register_address_increment(reg, inc) \ do { \ /* signed type ensures sign extension to long */ \ @@ -1116,6 +1120,41 @@ special_insn: if (twobyte) goto twobyte_special_insn; + switch(b) { + case 0x6c: /* insb */ + case 0x6d: /* insw/insd */ + if (kvm_setup_pio(ctxt->vcpu, NULL, + 1, /* in */ + (d & ByteOp) ? 1 : op_bytes, /* size */ + rep_prefix ? + address_mask(_regs[VCPU_REGS_RCX]) : 1, /* count */ + 1, /* strings */ + (_eflags & EFLG_DF), /* down */ + register_address(ctxt->es_base, + _regs[VCPU_REGS_RDI]), /* address */ + rep_prefix, + _regs[VCPU_REGS_RDX] /* port */ + ) == 0) + return -1; + return 0; + case 0x6e: /* outsb */ + case 0x6f: /* outsw/outsd */ + if (kvm_setup_pio(ctxt->vcpu, NULL, + 0, /* in */ + (d & ByteOp) ? 1 : op_bytes, /* size */ + rep_prefix ? + address_mask(_regs[VCPU_REGS_RCX]) : 1, /* count */ + 1, /* strings */ + (_eflags & EFLG_DF), /* down */ + register_address(override_base ? + *override_base : ctxt->ds_base, + _regs[VCPU_REGS_RSI]), /* address */ + rep_prefix, + _regs[VCPU_REGS_RDX] /* port */ + ) == 0) + return -1; + return 0; + } if (rep_prefix) { if (_regs[VCPU_REGS_RCX] == 0) { ctxt->vcpu->rip = _eip; [-- Attachment #1.2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 189 bytes --] [-- Attachment #2: Type: text/plain, Size: 315 bytes --] ------------------------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/ [-- Attachment #3: Type: text/plain, Size: 186 bytes --] _______________________________________________ kvm-devel mailing list kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org https://lists.sourceforge.net/lists/listinfo/kvm-devel ^ permalink raw reply [flat|nested] 16+ messages in thread
[parent not found: <46B2F6A7.5010301-6ktuUTfB/bM@public.gmane.org>]
* [PATCH 2/2] pio cleanup, split kvm_setup_pio() in two functions [not found] ` <46B2F6A7.5010301-6ktuUTfB/bM@public.gmane.org> @ 2007-08-03 9:37 ` Laurent Vivier [not found] ` <46B2F775.2060301-6ktuUTfB/bM@public.gmane.org> 2007-08-05 7:38 ` [PATCH 1/2] call emulate_instruction() to emulate ins/outs Avi Kivity 1 sibling, 1 reply; 16+ messages in thread From: Laurent Vivier @ 2007-08-03 9:37 UTC (permalink / raw) To: kvm-devel [-- Attachment #1.1.1: Type: text/plain, Size: 393 bytes --] PATCH 2/2] setup_pio-cleanup, some cleanup, split kvm_setup_pio() in two functions, one to setup in/out pio (kvm_emulate_pio()) and one to setup ins/outs pio (kvm_emulate_pio_string()). Signed-off-by: Laurent Vivier <Laurent.Vivier-6ktuUTfB/bM@public.gmane.org> -- ------------- Laurent.Vivier-6ktuUTfB/bM@public.gmane.org -------------- "Software is hard" - Donald Knuth [-- Attachment #1.1.2: setup_pio-cleanup --] [-- Type: text/plain, Size: 6350 bytes --] Index: kvm/drivers/kvm/kvm.h =================================================================== --- kvm.orig/drivers/kvm/kvm.h 2007-08-03 10:03:26.000000000 +0200 +++ kvm/drivers/kvm/kvm.h 2007-08-03 10:04:25.000000000 +0200 @@ -539,9 +539,11 @@ struct x86_emulate_ctxt; -int kvm_setup_pio(struct kvm_vcpu *vcpu, struct kvm_run *run, int in, - int size, unsigned long count, int string, int down, - gva_t address, int rep, unsigned port); +int kvm_emulate_pio (struct kvm_vcpu *vcpu, struct kvm_run *run, int in, + int size, unsigned port); +int kvm_emulate_pio_string(struct kvm_vcpu *vcpu, struct kvm_run *run, int in, + int size, unsigned long count, int down, + gva_t address, int rep, unsigned port); void kvm_emulate_cpuid(struct kvm_vcpu *vcpu); int kvm_emulate_halt(struct kvm_vcpu *vcpu); int emulate_invlpg(struct kvm_vcpu *vcpu, gva_t address); Index: kvm/drivers/kvm/kvm_main.c =================================================================== --- kvm.orig/drivers/kvm/kvm_main.c 2007-08-03 09:52:37.000000000 +0200 +++ kvm/drivers/kvm/kvm_main.c 2007-08-03 11:11:17.000000000 +0200 @@ -1734,8 +1734,39 @@ } } -int kvm_setup_pio(struct kvm_vcpu *vcpu, struct kvm_run *run, int in, - int size, unsigned long count, int string, int down, +int kvm_emulate_pio (struct kvm_vcpu *vcpu, struct kvm_run *run, int in, + int size, unsigned port) +{ + struct kvm_io_device *pio_dev; + + vcpu->run->exit_reason = KVM_EXIT_IO; + vcpu->run->io.direction = in ? KVM_EXIT_IO_IN : KVM_EXIT_IO_OUT; + vcpu->run->io.size = vcpu->pio.size = size; + vcpu->run->io.data_offset = KVM_PIO_PAGE_OFFSET * PAGE_SIZE; + vcpu->run->io.count = vcpu->pio.count = vcpu->pio.cur_count = 1; + vcpu->run->io.port = vcpu->pio.port = port; + vcpu->pio.in = in; + vcpu->pio.string = 0; + vcpu->pio.down = 0; + vcpu->pio.guest_page_offset = 0; + vcpu->pio.rep = 0; + + kvm_arch_ops->cache_regs(vcpu); + memcpy(vcpu->pio_data, &vcpu->regs[VCPU_REGS_RAX], 4); + kvm_arch_ops->decache_regs(vcpu); + + pio_dev = vcpu_find_pio_dev(vcpu, port); + if (pio_dev) { + kernel_pio(pio_dev, vcpu, vcpu->pio_data); + complete_pio(vcpu); + return 1; + } + return 0; +} +EXPORT_SYMBOL_GPL(kvm_emulate_pio); + +int kvm_emulate_pio_string(struct kvm_vcpu *vcpu, struct kvm_run *run, int in, + int size, unsigned long count, int down, gva_t address, int rep, unsigned port) { unsigned now, in_page; @@ -1746,33 +1777,16 @@ vcpu->run->exit_reason = KVM_EXIT_IO; vcpu->run->io.direction = in ? KVM_EXIT_IO_IN : KVM_EXIT_IO_OUT; - vcpu->run->io.size = size; + vcpu->run->io.size = vcpu->pio.size = size; vcpu->run->io.data_offset = KVM_PIO_PAGE_OFFSET * PAGE_SIZE; - vcpu->run->io.count = count; - vcpu->run->io.port = port; - vcpu->pio.count = count; - vcpu->pio.cur_count = count; - vcpu->pio.size = size; + vcpu->run->io.count = vcpu->pio.count = vcpu->pio.cur_count = count; + vcpu->run->io.port = vcpu->pio.port = port; vcpu->pio.in = in; - vcpu->pio.port = port; - vcpu->pio.string = string; + vcpu->pio.string = 1; vcpu->pio.down = down; vcpu->pio.guest_page_offset = offset_in_page(address); vcpu->pio.rep = rep; - pio_dev = vcpu_find_pio_dev(vcpu, port); - if (!string) { - kvm_arch_ops->cache_regs(vcpu); - memcpy(vcpu->pio_data, &vcpu->regs[VCPU_REGS_RAX], 4); - kvm_arch_ops->decache_regs(vcpu); - if (pio_dev) { - kernel_pio(pio_dev, vcpu, vcpu->pio_data); - complete_pio(vcpu); - return 1; - } - return 0; - } - if (!count) { kvm_arch_ops->skip_emulated_instruction(vcpu); return 1; @@ -1817,6 +1831,7 @@ } } + pio_dev = vcpu_find_pio_dev(vcpu, port); if (!vcpu->pio.in) { /* string PIO write */ ret = pio_copy_data(vcpu); @@ -1833,7 +1848,7 @@ return ret; } -EXPORT_SYMBOL_GPL(kvm_setup_pio); +EXPORT_SYMBOL_GPL(kvm_emulate_pio_string); static int kvm_vcpu_ioctl_run(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run) { Index: kvm/drivers/kvm/svm.c =================================================================== --- kvm.orig/drivers/kvm/svm.c 2007-08-03 10:02:58.000000000 +0200 +++ kvm/drivers/kvm/svm.c 2007-08-03 10:05:40.000000000 +0200 @@ -1005,8 +1005,7 @@ rep = (io_info & SVM_IOIO_REP_MASK) != 0; down = (svm->vmcb->save.rflags & X86_EFLAGS_DF) != 0; - return kvm_setup_pio(&svm->vcpu, kvm_run, in, size, 1, 0, - down, 0, rep, port); + return kvm_emulate_pio(&svm->vcpu, kvm_run, in, size, port); } static int nop_on_interception(struct vcpu_svm *svm, struct kvm_run *kvm_run) Index: kvm/drivers/kvm/vmx.c =================================================================== --- kvm.orig/drivers/kvm/vmx.c 2007-08-03 10:00:11.000000000 +0200 +++ kvm/drivers/kvm/vmx.c 2007-08-03 10:02:55.000000000 +0200 @@ -1783,8 +1783,7 @@ rep = (exit_qualification & 32) != 0; port = exit_qualification >> 16; - return kvm_setup_pio(vcpu, kvm_run, in, size, 1, 0, down, - 0, rep, port); + return kvm_emulate_pio(vcpu, kvm_run, in, size, port); } static void Index: kvm/drivers/kvm/x86_emulate.c =================================================================== --- kvm.orig/drivers/kvm/x86_emulate.c 2007-08-03 10:04:34.000000000 +0200 +++ kvm/drivers/kvm/x86_emulate.c 2007-08-03 10:05:16.000000000 +0200 @@ -1123,12 +1123,11 @@ switch(b) { case 0x6c: /* insb */ case 0x6d: /* insw/insd */ - if (kvm_setup_pio(ctxt->vcpu, NULL, + if (kvm_emulate_pio_string(ctxt->vcpu, NULL, 1, /* in */ (d & ByteOp) ? 1 : op_bytes, /* size */ rep_prefix ? address_mask(_regs[VCPU_REGS_RCX]) : 1, /* count */ - 1, /* strings */ (_eflags & EFLG_DF), /* down */ register_address(ctxt->es_base, _regs[VCPU_REGS_RDI]), /* address */ @@ -1139,12 +1138,11 @@ return 0; case 0x6e: /* outsb */ case 0x6f: /* outsw/outsd */ - if (kvm_setup_pio(ctxt->vcpu, NULL, + if (kvm_emulate_pio_string(ctxt->vcpu, NULL, 0, /* in */ (d & ByteOp) ? 1 : op_bytes, /* size */ rep_prefix ? address_mask(_regs[VCPU_REGS_RCX]) : 1, /* count */ - 1, /* strings */ (_eflags & EFLG_DF), /* down */ register_address(override_base ? *override_base : ctxt->ds_base, [-- Attachment #1.2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 189 bytes --] [-- Attachment #2: Type: text/plain, Size: 315 bytes --] ------------------------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/ [-- Attachment #3: Type: text/plain, Size: 186 bytes --] _______________________________________________ kvm-devel mailing list kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org https://lists.sourceforge.net/lists/listinfo/kvm-devel ^ permalink raw reply [flat|nested] 16+ messages in thread
[parent not found: <46B2F775.2060301-6ktuUTfB/bM@public.gmane.org>]
* Re: [PATCH 2/2] pio cleanup, split kvm_setup_pio() in two functions [not found] ` <46B2F775.2060301-6ktuUTfB/bM@public.gmane.org> @ 2007-08-03 10:53 ` Dong, Eddie [not found] ` <10EA09EFD8728347A513008B6B0DA77A01E00832-wq7ZOvIWXbNpB2pF5aRoyrfspsVTdybXVpNB7YpNyf8@public.gmane.org> 2007-08-05 7:43 ` Avi Kivity 1 sibling, 1 reply; 16+ messages in thread From: Dong, Eddie @ 2007-08-03 10:53 UTC (permalink / raw) To: Laurent Vivier, kvm-devel kvm-devel-bounces-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org wrote: > PATCH 2/2] setup_pio-cleanup, some cleanup, split > kvm_setup_pio() in two > functions, one to setup in/out pio (kvm_emulate_pio()) and one to > setup ins/outs pio (kvm_emulate_pio_string()). > Did u try on lapic3 branch with XP guest? Only windows guest is using string IO. thanks, eddie ------------------------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/ ^ permalink raw reply [flat|nested] 16+ messages in thread
[parent not found: <10EA09EFD8728347A513008B6B0DA77A01E00832-wq7ZOvIWXbNpB2pF5aRoyrfspsVTdybXVpNB7YpNyf8@public.gmane.org>]
* Re: [PATCH 2/2] pio cleanup, split kvm_setup_pio() in two functions [not found] ` <10EA09EFD8728347A513008B6B0DA77A01E00832-wq7ZOvIWXbNpB2pF5aRoyrfspsVTdybXVpNB7YpNyf8@public.gmane.org> @ 2007-08-03 11:06 ` Laurent Vivier [not found] ` <46B30C47.3000007-6ktuUTfB/bM@public.gmane.org> 0 siblings, 1 reply; 16+ messages in thread From: Laurent Vivier @ 2007-08-03 11:06 UTC (permalink / raw) To: Dong, Eddie; +Cc: kvm-devel [-- Attachment #1.1: Type: text/plain, Size: 711 bytes --] Dong, Eddie wrote: > kvm-devel-bounces-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org wrote: >> PATCH 2/2] setup_pio-cleanup, some cleanup, split >> kvm_setup_pio() in two >> functions, one to setup in/out pio (kvm_emulate_pio()) and one to >> setup ins/outs pio (kvm_emulate_pio_string()). >> > Did u try on lapic3 branch with XP guest? Only windows guest is using > string IO. Yes, I tried XP guest, it works fine, but not on lapic3 branch. BTW, I saw string IO with linux too. But Windows XP uses insb/outsb, unlike linux which uses ins{wd}/outs{wd}. Laurent -- ------------- Laurent.Vivier-6ktuUTfB/bM@public.gmane.org -------------- "Software is hard" - Donald Knuth [-- Attachment #1.2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 189 bytes --] [-- Attachment #2: Type: text/plain, Size: 315 bytes --] ------------------------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/ [-- Attachment #3: Type: text/plain, Size: 186 bytes --] _______________________________________________ kvm-devel mailing list kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org https://lists.sourceforge.net/lists/listinfo/kvm-devel ^ permalink raw reply [flat|nested] 16+ messages in thread
[parent not found: <46B30C47.3000007-6ktuUTfB/bM@public.gmane.org>]
* Re: [PATCH 2/2] pio cleanup, split kvm_setup_pio() in two functions [not found] ` <46B30C47.3000007-6ktuUTfB/bM@public.gmane.org> @ 2007-08-03 11:45 ` Dong, Eddie [not found] ` <10EA09EFD8728347A513008B6B0DA77A01E00842-wq7ZOvIWXbNpB2pF5aRoyrfspsVTdybXVpNB7YpNyf8@public.gmane.org> 0 siblings, 1 reply; 16+ messages in thread From: Dong, Eddie @ 2007-08-03 11:45 UTC (permalink / raw) To: Laurent Vivier; +Cc: kvm-devel Laurent Vivier wrote: > Dong, Eddie wrote: >> kvm-devel-bounces-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org wrote: >>> PATCH 2/2] setup_pio-cleanup, some cleanup, split >>> kvm_setup_pio() in two >>> functions, one to setup in/out pio (kvm_emulate_pio()) and one to >>> setup ins/outs pio (kvm_emulate_pio_string()). >>> >> Did u try on lapic3 branch with XP guest? Only windows guest is using >> string IO. > > Yes, I tried XP guest, it works fine, but not on lapic3 branch. > > BTW, I saw string IO with linux too. But Windows XP uses insb/outsb, > unlike linux which uses ins{wd}/outs{wd}. > Only with lapic3 + windows guest, string PIO has a real usage model. I think we have to do that before taking. thanks, eddie ------------------------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/ ^ permalink raw reply [flat|nested] 16+ messages in thread
[parent not found: <10EA09EFD8728347A513008B6B0DA77A01E00842-wq7ZOvIWXbNpB2pF5aRoyrfspsVTdybXVpNB7YpNyf8@public.gmane.org>]
* Re: [PATCH 2/2] pio cleanup, split kvm_setup_pio() in two functions [not found] ` <10EA09EFD8728347A513008B6B0DA77A01E00842-wq7ZOvIWXbNpB2pF5aRoyrfspsVTdybXVpNB7YpNyf8@public.gmane.org> @ 2007-08-03 11:52 ` Dong, Eddie [not found] ` <10EA09EFD8728347A513008B6B0DA77A01E00843-wq7ZOvIWXbNpB2pF5aRoyrfspsVTdybXVpNB7YpNyf8@public.gmane.org> 0 siblings, 1 reply; 16+ messages in thread From: Dong, Eddie @ 2007-08-03 11:52 UTC (permalink / raw) To: Dong, Eddie, Laurent Vivier; +Cc: kvm-devel kvm-devel-bounces-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org wrote: > Laurent Vivier wrote: >> Dong, Eddie wrote: >>> kvm-devel-bounces-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org wrote: >>>> PATCH 2/2] setup_pio-cleanup, some cleanup, split >>>> kvm_setup_pio() in two >>>> functions, one to setup in/out pio (kvm_emulate_pio()) and one to >>>> setup ins/outs pio (kvm_emulate_pio_string()). >>>> >>> Did u try on lapic3 branch with XP guest? Only windows guest is >>> using string IO. >> >> Yes, I tried XP guest, it works fine, but not on lapic3 branch. >> >> BTW, I saw string IO with linux too. But Windows XP uses insb/outsb, >> unlike linux which uses ins{wd}/outs{wd}. >> > > Only with lapic3 + windows guest, string PIO has a real usage model. > I think we have to do that before taking. > thanks, eddie > I may confuse you. Currently master doesn't do in kernel PIO emulation, all string PIO will go to user level which is fine. With lapic3, we have kernel PIO emulation for PIC. Linux doesn;t use string PIO for PIC (port 0x20/0x21) but XP and Win2003 does. So can u test kernel string PIO? thx,eddie ------------------------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/ ^ permalink raw reply [flat|nested] 16+ messages in thread
[parent not found: <10EA09EFD8728347A513008B6B0DA77A01E00843-wq7ZOvIWXbNpB2pF5aRoyrfspsVTdybXVpNB7YpNyf8@public.gmane.org>]
* Re: [PATCH 2/2] pio cleanup, split kvm_setup_pio() in two functions [not found] ` <10EA09EFD8728347A513008B6B0DA77A01E00843-wq7ZOvIWXbNpB2pF5aRoyrfspsVTdybXVpNB7YpNyf8@public.gmane.org> @ 2007-08-03 11:56 ` Laurent Vivier [not found] ` <46B31801.8030709-6ktuUTfB/bM@public.gmane.org> 0 siblings, 1 reply; 16+ messages in thread From: Laurent Vivier @ 2007-08-03 11:56 UTC (permalink / raw) To: Dong, Eddie; +Cc: kvm-devel [-- Attachment #1.1: Type: text/plain, Size: 1389 bytes --] Dong, Eddie wrote: > kvm-devel-bounces-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org wrote: >> Laurent Vivier wrote: >>> Dong, Eddie wrote: >>>> kvm-devel-bounces-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org wrote: >>>>> PATCH 2/2] setup_pio-cleanup, some cleanup, split >>>>> kvm_setup_pio() in two >>>>> functions, one to setup in/out pio (kvm_emulate_pio()) and one to >>>>> setup ins/outs pio (kvm_emulate_pio_string()). >>>>> >>>> Did u try on lapic3 branch with XP guest? Only windows guest is >>>> using string IO. >>> Yes, I tried XP guest, it works fine, but not on lapic3 branch. >>> >>> BTW, I saw string IO with linux too. But Windows XP uses insb/outsb, >>> unlike linux which uses ins{wd}/outs{wd}. >>> >> Only with lapic3 + windows guest, string PIO has a real usage model. >> I think we have to do that before taking. >> thanks, eddie >> > I may confuse you. Currently master doesn't do in kernel PIO emulation, > all string PIO > will go to user level which is fine. With lapic3, we have kernel PIO > emulation for PIC. > Linux doesn;t use string PIO for PIC (port 0x20/0x21) but XP and Win2003 > does. > So can u test kernel string PIO? Yes, I should be able, just explain me what and how... Laurent -- ------------- Laurent.Vivier-6ktuUTfB/bM@public.gmane.org -------------- "Software is hard" - Donald Knuth [-- Attachment #1.2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 189 bytes --] [-- Attachment #2: Type: text/plain, Size: 315 bytes --] ------------------------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/ [-- Attachment #3: Type: text/plain, Size: 186 bytes --] _______________________________________________ kvm-devel mailing list kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org https://lists.sourceforge.net/lists/listinfo/kvm-devel ^ permalink raw reply [flat|nested] 16+ messages in thread
[parent not found: <46B31801.8030709-6ktuUTfB/bM@public.gmane.org>]
* Re: [PATCH 2/2] pio cleanup, split kvm_setup_pio() in two functions [not found] ` <46B31801.8030709-6ktuUTfB/bM@public.gmane.org> @ 2007-08-03 12:06 ` Dong, Eddie [not found] ` <10EA09EFD8728347A513008B6B0DA77A01E00844-wq7ZOvIWXbNpB2pF5aRoyrfspsVTdybXVpNB7YpNyf8@public.gmane.org> 0 siblings, 1 reply; 16+ messages in thread From: Dong, Eddie @ 2007-08-03 12:06 UTC (permalink / raw) To: Laurent Vivier; +Cc: kvm-devel >> I may confuse you. Currently master doesn't do in kernel PIO >> emulation, all string PIO will go to user level which is fine. With >> lapic3, we have kernel PIO emulation for PIC. Linux doesn;t use >> string PIO for PIC (port 0x20/0x21) but XP and Win2003 does. So can >> u test kernel string PIO? > > Yes, I should be able, just explain me what and how... > > Laurent Just check out both lapic3 user & kernel branch (may need to rebase to master). And try to boot XP guest like you do for master. thanks, eddie ------------------------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/ ^ permalink raw reply [flat|nested] 16+ messages in thread
[parent not found: <10EA09EFD8728347A513008B6B0DA77A01E00844-wq7ZOvIWXbNpB2pF5aRoyrfspsVTdybXVpNB7YpNyf8@public.gmane.org>]
* Re: [PATCH 2/2] pio cleanup, split kvm_setup_pio() in two functions [not found] ` <10EA09EFD8728347A513008B6B0DA77A01E00844-wq7ZOvIWXbNpB2pF5aRoyrfspsVTdybXVpNB7YpNyf8@public.gmane.org> @ 2007-08-03 12:24 ` Dong, Eddie [not found] ` <10EA09EFD8728347A513008B6B0DA77A01E0084D-wq7ZOvIWXbNpB2pF5aRoyrfspsVTdybXVpNB7YpNyf8@public.gmane.org> 2007-08-03 15:13 ` Laurent Vivier 1 sibling, 1 reply; 16+ messages in thread From: Dong, Eddie @ 2007-08-03 12:24 UTC (permalink / raw) To: Dong, Eddie, Laurent Vivier; +Cc: kvm-devel kvm-devel-bounces-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org wrote: >>> I may confuse you. Currently master doesn't do in kernel PIO >>> emulation, all string PIO will go to user level which is fine. With >>> lapic3, we have kernel PIO emulation for PIC. Linux doesn;t use >>> string PIO for PIC (port 0x20/0x21) but XP and Win2003 does. So can >>> u test kernel string PIO? >> >> Yes, I should be able, just explain me what and how... >> >> Laurent > > Just check out both lapic3 user & kernel branch > (may need to rebase to master). And try to boot XP > guest like you do for master. > thanks, eddie BTW, I did a quick try, it broke Windows XP & 2003. in kernel PIC get wrong initial value (port 0x20). thx,eddie ------------------------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/ ^ permalink raw reply [flat|nested] 16+ messages in thread
[parent not found: <10EA09EFD8728347A513008B6B0DA77A01E0084D-wq7ZOvIWXbNpB2pF5aRoyrfspsVTdybXVpNB7YpNyf8@public.gmane.org>]
* Re: [PATCH 2/2] pio cleanup, split kvm_setup_pio() in two functions [not found] ` <10EA09EFD8728347A513008B6B0DA77A01E0084D-wq7ZOvIWXbNpB2pF5aRoyrfspsVTdybXVpNB7YpNyf8@public.gmane.org> @ 2007-08-03 14:45 ` Laurent Vivier [not found] ` <46B33F71.5000605-6ktuUTfB/bM@public.gmane.org> 0 siblings, 1 reply; 16+ messages in thread From: Laurent Vivier @ 2007-08-03 14:45 UTC (permalink / raw) To: Dong, Eddie; +Cc: kvm-devel [-- Attachment #1.1: Type: text/plain, Size: 1074 bytes --] Dong, Eddie wrote: > kvm-devel-bounces-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org wrote: >>>> I may confuse you. Currently master doesn't do in kernel PIO >>>> emulation, all string PIO will go to user level which is fine. With >>>> lapic3, we have kernel PIO emulation for PIC. Linux doesn;t use >>>> string PIO for PIC (port 0x20/0x21) but XP and Win2003 does. So can >>>> u test kernel string PIO? >>> Yes, I should be able, just explain me what and how... >>> >>> Laurent >> Just check out both lapic3 user & kernel branch >> (may need to rebase to master). And try to boot XP >> guest like you do for master. >> thanks, eddie > BTW, I did a quick try, it broke Windows XP & 2003. > in kernel PIC get wrong initial value (port 0x20). I think I know why it doesn't work: I suppose when it exits from kvm_setup_pio() that pio.count is different from 0... which is not the case with in-kernel io. Regards, Laurent -- ------------- Laurent.Vivier-6ktuUTfB/bM@public.gmane.org -------------- "Software is hard" - Donald Knuth [-- Attachment #1.2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 189 bytes --] [-- Attachment #2: Type: text/plain, Size: 315 bytes --] ------------------------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/ [-- Attachment #3: Type: text/plain, Size: 186 bytes --] _______________________________________________ kvm-devel mailing list kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org https://lists.sourceforge.net/lists/listinfo/kvm-devel ^ permalink raw reply [flat|nested] 16+ messages in thread
[parent not found: <46B33F71.5000605-6ktuUTfB/bM@public.gmane.org>]
* Re: [PATCH 2/2] pio cleanup, split kvm_setup_pio() in two functions [not found] ` <46B33F71.5000605-6ktuUTfB/bM@public.gmane.org> @ 2007-08-03 14:58 ` Laurent Vivier 0 siblings, 0 replies; 16+ messages in thread From: Laurent Vivier @ 2007-08-03 14:58 UTC (permalink / raw) To: Laurent Vivier; +Cc: kvm-devel [-- Attachment #1.1.1: Type: text/plain, Size: 1233 bytes --] Laurent Vivier wrote: > Dong, Eddie wrote: >> kvm-devel-bounces-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org wrote: >>>>> I may confuse you. Currently master doesn't do in kernel PIO >>>>> emulation, all string PIO will go to user level which is fine. With >>>>> lapic3, we have kernel PIO emulation for PIC. Linux doesn;t use >>>>> string PIO for PIC (port 0x20/0x21) but XP and Win2003 does. So can >>>>> u test kernel string PIO? >>>> Yes, I should be able, just explain me what and how... >>>> >>>> Laurent >>> Just check out both lapic3 user & kernel branch >>> (may need to rebase to master). And try to boot XP >>> guest like you do for master. >>> thanks, eddie >> BTW, I did a quick try, it broke Windows XP & 2003. >> in kernel PIC get wrong initial value (port 0x20). > > I think I know why it doesn't work: I suppose when it exits from kvm_setup_pio() > that pio.count is different from 0... which is not the case with in-kernel io. this little patch makes it working... (It took me more time to fight against git than to find where was the bug... :-P ) Laurent -- ------------- Laurent.Vivier-6ktuUTfB/bM@public.gmane.org -------------- "Software is hard" - Donald Knuth [-- Attachment #1.1.2: lapic3-ins_outs --] [-- Type: text/plain, Size: 572 bytes --] Index: kvm/drivers/kvm/kvm_main.c =================================================================== --- kvm.orig/drivers/kvm/kvm_main.c 2007-08-03 16:46:40.000000000 +0200 +++ kvm/drivers/kvm/kvm_main.c 2007-08-03 16:52:51.000000000 +0200 @@ -1321,8 +1321,9 @@ emulate_ctxt.fs_base = get_segment_base(vcpu, VCPU_SREG_FS); vcpu->mmio_is_write = 0; + vcpu->pio.string = 0; r = x86_emulate_memop(&emulate_ctxt, &emulate_ops); - if (r && vcpu->pio.count) + if (vcpu->pio.string) return EMULATE_DO_MMIO; if ((r || vcpu->mmio_is_write) && run) { [-- Attachment #1.2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 189 bytes --] [-- Attachment #2: Type: text/plain, Size: 315 bytes --] ------------------------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/ [-- Attachment #3: Type: text/plain, Size: 186 bytes --] _______________________________________________ kvm-devel mailing list kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org https://lists.sourceforge.net/lists/listinfo/kvm-devel ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 2/2] pio cleanup, split kvm_setup_pio() in two functions [not found] ` <10EA09EFD8728347A513008B6B0DA77A01E00844-wq7ZOvIWXbNpB2pF5aRoyrfspsVTdybXVpNB7YpNyf8@public.gmane.org> 2007-08-03 12:24 ` Dong, Eddie @ 2007-08-03 15:13 ` Laurent Vivier [not found] ` <46B34611.7030800-6ktuUTfB/bM@public.gmane.org> 1 sibling, 1 reply; 16+ messages in thread From: Laurent Vivier @ 2007-08-03 15:13 UTC (permalink / raw) To: Dong, Eddie; +Cc: kvm-devel [-- Attachment #1.1.1: Type: text/plain, Size: 811 bytes --] Dong, Eddie wrote: >>> I may confuse you. Currently master doesn't do in kernel PIO >>> emulation, all string PIO will go to user level which is fine. With >>> lapic3, we have kernel PIO emulation for PIC. Linux doesn;t use >>> string PIO for PIC (port 0x20/0x21) but XP and Win2003 does. So can >>> u test kernel string PIO? >> Yes, I should be able, just explain me what and how... >> >> Laurent > > Just check out both lapic3 user & kernel branch > (may need to rebase to master). And try to boot XP > guest like you do for master. > thanks, eddie BTW, could you apply this tiny patch to your branch... (I don't like garbage in logs :-D ) Regards, Laurent -- ------------- Laurent.Vivier-6ktuUTfB/bM@public.gmane.org -------------- "Software is hard" - Donald Knuth [-- Attachment #1.1.2: lapic3-printk --] [-- Type: text/plain, Size: 651 bytes --] Index: kvm/drivers/kvm/i8259.c =================================================================== --- kvm.orig/drivers/kvm/i8259.c 2007-08-03 17:00:23.000000000 +0200 +++ kvm/drivers/kvm/i8259.c 2007-08-03 17:01:10.000000000 +0200 @@ -218,10 +218,10 @@ s->init_state = 1; s->init4 = val & 1; if (val & 0x02) - printk(KERN_ERR "single mode not supported"); + printk(KERN_ERR "single mode not supported\n"); if (val & 0x08) printk(KERN_ERR - "level sensitive irq not supported"); + "level sensitive irq not supported\n"); } else if (val & 0x08) { if (val & 0x04) s->poll = 1; [-- Attachment #1.2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 189 bytes --] [-- Attachment #2: Type: text/plain, Size: 315 bytes --] ------------------------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/ [-- Attachment #3: Type: text/plain, Size: 186 bytes --] _______________________________________________ kvm-devel mailing list kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org https://lists.sourceforge.net/lists/listinfo/kvm-devel ^ permalink raw reply [flat|nested] 16+ messages in thread
[parent not found: <46B34611.7030800-6ktuUTfB/bM@public.gmane.org>]
* Re: [PATCH 2/2] pio cleanup, split kvm_setup_pio() in two functions [not found] ` <46B34611.7030800-6ktuUTfB/bM@public.gmane.org> @ 2007-08-04 1:41 ` Dong, Eddie 0 siblings, 0 replies; 16+ messages in thread From: Dong, Eddie @ 2007-08-04 1:41 UTC (permalink / raw) To: Laurent Vivier; +Cc: kvm-devel Laurent Vivier wrote: > Dong, Eddie wrote: >>>> I may confuse you. Currently master doesn't do in kernel PIO >>>> emulation, all string PIO will go to user level which is fine. >>>> With lapic3, we have kernel PIO emulation for PIC. Linux doesn;t >>>> use string PIO for PIC (port 0x20/0x21) but XP and Win2003 does. >>>> So can u test kernel string PIO? >>> Yes, I should be able, just explain me what and how... >>> >>> Laurent >> >> Just check out both lapic3 user & kernel branch >> (may need to rebase to master). And try to boot XP >> guest like you do for master. >> thanks, eddie > > BTW, could you apply this tiny patch to your branch... Yes, it works now :-) Thanks, Eddie ------------------------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/ ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 2/2] pio cleanup, split kvm_setup_pio() in two functions [not found] ` <46B2F775.2060301-6ktuUTfB/bM@public.gmane.org> 2007-08-03 10:53 ` Dong, Eddie @ 2007-08-05 7:43 ` Avi Kivity 1 sibling, 0 replies; 16+ messages in thread From: Avi Kivity @ 2007-08-05 7:43 UTC (permalink / raw) To: Laurent Vivier; +Cc: kvm-devel Laurent Vivier wrote: > PATCH 2/2] setup_pio-cleanup, some cleanup, split kvm_setup_pio() in two > functions, one to setup in/out pio (kvm_emulate_pio()) and one to setup ins/outs > pio (kvm_emulate_pio_string()). > Applied this too, thanks. -- error compiling committee.c: too many arguments to function ------------------------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/ ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 1/2] call emulate_instruction() to emulate ins/outs [not found] ` <46B2F6A7.5010301-6ktuUTfB/bM@public.gmane.org> 2007-08-03 9:37 ` [PATCH 2/2] pio cleanup, split kvm_setup_pio() in two functions Laurent Vivier @ 2007-08-05 7:38 ` Avi Kivity 1 sibling, 0 replies; 16+ messages in thread From: Avi Kivity @ 2007-08-05 7:38 UTC (permalink / raw) To: Laurent Vivier; +Cc: kvm-devel Laurent Vivier wrote: > [PATCH 1/2] emulate_ins_outs, defines ins/outs opcode in x86_emulate.c and call > emulate_instruction() from io_interception() (svm.c) and from handle_io() > (vmx.c). This patch remove all vmx/svm prefix instruction decoders > (get_addr_size(), io_get_override(), io_address(), get_io_count()) > > As usual for me, AMD part has not been tested... > I tested this on amd and it works. Applied together with the lapic3 fix you posted later -- thanks. -- error compiling committee.c: too many arguments to function ------------------------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/ ^ permalink raw reply [flat|nested] 16+ messages in thread
end of thread, other threads:[~2007-08-05 7:43 UTC | newest]
Thread overview: 16+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-08-03 9:28 [PATCH 0/2] Consolidate the insb/outsb emulation into x86_emulate.c (second try) Laurent Vivier
[not found] ` <46B2F559.5060604-6ktuUTfB/bM@public.gmane.org>
2007-08-03 9:34 ` [PATCH 1/2] call emulate_instruction() to emulate ins/outs Laurent Vivier
[not found] ` <46B2F6A7.5010301-6ktuUTfB/bM@public.gmane.org>
2007-08-03 9:37 ` [PATCH 2/2] pio cleanup, split kvm_setup_pio() in two functions Laurent Vivier
[not found] ` <46B2F775.2060301-6ktuUTfB/bM@public.gmane.org>
2007-08-03 10:53 ` Dong, Eddie
[not found] ` <10EA09EFD8728347A513008B6B0DA77A01E00832-wq7ZOvIWXbNpB2pF5aRoyrfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2007-08-03 11:06 ` Laurent Vivier
[not found] ` <46B30C47.3000007-6ktuUTfB/bM@public.gmane.org>
2007-08-03 11:45 ` Dong, Eddie
[not found] ` <10EA09EFD8728347A513008B6B0DA77A01E00842-wq7ZOvIWXbNpB2pF5aRoyrfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2007-08-03 11:52 ` Dong, Eddie
[not found] ` <10EA09EFD8728347A513008B6B0DA77A01E00843-wq7ZOvIWXbNpB2pF5aRoyrfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2007-08-03 11:56 ` Laurent Vivier
[not found] ` <46B31801.8030709-6ktuUTfB/bM@public.gmane.org>
2007-08-03 12:06 ` Dong, Eddie
[not found] ` <10EA09EFD8728347A513008B6B0DA77A01E00844-wq7ZOvIWXbNpB2pF5aRoyrfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2007-08-03 12:24 ` Dong, Eddie
[not found] ` <10EA09EFD8728347A513008B6B0DA77A01E0084D-wq7ZOvIWXbNpB2pF5aRoyrfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2007-08-03 14:45 ` Laurent Vivier
[not found] ` <46B33F71.5000605-6ktuUTfB/bM@public.gmane.org>
2007-08-03 14:58 ` Laurent Vivier
2007-08-03 15:13 ` Laurent Vivier
[not found] ` <46B34611.7030800-6ktuUTfB/bM@public.gmane.org>
2007-08-04 1:41 ` Dong, Eddie
2007-08-05 7:43 ` Avi Kivity
2007-08-05 7:38 ` [PATCH 1/2] call emulate_instruction() to emulate ins/outs Avi Kivity
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox