You can subscribe to this list here.
2006 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(33) |
Nov
(325) |
Dec
(320) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2007 |
Jan
(484) |
Feb
(438) |
Mar
(407) |
Apr
(713) |
May
(831) |
Jun
(806) |
Jul
(1023) |
Aug
(1184) |
Sep
(1118) |
Oct
(1461) |
Nov
(1224) |
Dec
(1042) |
2008 |
Jan
(1449) |
Feb
(1110) |
Mar
(1428) |
Apr
(1643) |
May
(682) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: Avi K. <av...@qu...> - 2008-04-15 13:07:14
|
Guillaume Thouvenin wrote: > On Mon, 07 Apr 2008 11:05:06 -0500 > Anthony Liguori <an...@co...> wrote: > > >> Perhaps a viable way to fix this upstream would be to catch the vmentry >> failure, look to see if SS.CPL != CS.CPL, and if so, invoke >> x86_emulate() in a loop until SS.CPL == CS.CPL. >> >> There are very few instructions in gfxboot that would need to be added >> to x86_emulate (if they aren't already there). >> > > So to see if I'm on the good way here is an attempt to implement the > solution. It doesn't work yet. > > I'm trying to: > - Disable the code that modifies SS value in order to detect VM entry > failure > - Add the handler that catches the VM entry failure > - Emulate the instruction until we recover a friendly VMX state > => add the jmp far (opcode 0xea) instruction in the emulation. > > With the patch, the VM entry failure is caught but the jmp far > instruction seems to fail. I've got the following dmesg: > > ... > handle_vmentry_failure: invalid guest state > handle_vmentry_failure: start emulation > handle_vmentry_failure: emulation failed > What instruction failed, exactly? > ... > > > Regards, > Guillaume > > --- > > diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c > index 8e5d664..a56bd83 100644 > --- a/arch/x86/kvm/vmx.c > +++ b/arch/x86/kvm/vmx.c > @@ -1178,13 +1178,16 @@ static void enter_pmode(struct kvm_vcpu *vcpu) > > update_exception_bitmap(vcpu); > > + fix_pmode_dataseg(VCPU_SREG_SS, &vcpu->arch.rmode.ss); > fix_pmode_dataseg(VCPU_SREG_ES, &vcpu->arch.rmode.es); > fix_pmode_dataseg(VCPU_SREG_DS, &vcpu->arch.rmode.ds); > fix_pmode_dataseg(VCPU_SREG_GS, &vcpu->arch.rmode.gs); > fix_pmode_dataseg(VCPU_SREG_FS, &vcpu->arch.rmode.fs); > You need to drop the fixes rather than add more. > > +#if 0 > vmcs_write16(GUEST_SS_SELECTOR, 0); > vmcs_write32(GUEST_SS_AR_BYTES, 0x93); > +#endif > > vmcs_write16(GUEST_CS_SELECTOR, > vmcs_read16(GUEST_CS_SELECTOR) & ~SELECTOR_RPL_MASK); > @@ -1952,6 +1955,33 @@ static int handle_rmode_exception(struct kvm_vcpu *vcpu, > return 0; > } > > +static int handle_vmentry_failure(u32 exit_reason, struct kvm_vcpu *vcpu) > +{ > + unsigned int basic_exit_reason = (uint16_t) exit_reason; > + unsigned int cs_rpl = vmcs_read16(GUEST_CS_SELECTOR) & SELECTOR_RPL_MASK; > + unsigned int ss_rpl = vmcs_read16(GUEST_SS_SELECTOR) & SELECTOR_RPL_MASK; > + > + switch (basic_exit_reason) { > + case EXIT_REASON_INVALID_GUEST_STATE: > + printk(KERN_INFO "%s: invalid guest state\n", __FUNCTION__); > + printk(KERN_INFO "%s: start emulation \n", __FUNCTION__); > + while (cs_rpl != ss_rpl) { > + if (emulate_instruction(vcpu, NULL, 0, 0, 0) == EMULATE_FAIL) { > + printk(KERN_INFO "%s: emulation failed\n", __FUNCTION__); > + return 0; > + } > + cs_rpl = vmcs_read16(GUEST_CS_SELECTOR) & SELECTOR_RPL_MASK; > + ss_rpl = vmcs_read16(GUEST_SS_SELECTOR) & SELECTOR_RPL_MASK; > + } > + printk(KERN_INFO "%s: VMX friendly state recovered\n", __FUNCTION__); > + break; > + default: > + printk(KERN_INFO "VM-entry failure due to unkown reason\n"); > + return 0; > + } > + return 1; > +} > + > static int handle_exception(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run) > { > struct vcpu_vmx *vmx = to_vmx(vcpu); > @@ -2364,6 +2394,9 @@ static int kvm_handle_exit(struct kvm_run *kvm_run, struct kvm_vcpu *vcpu) > KVMTRACE_3D(VMEXIT, vcpu, exit_reason, (u32)vmcs_readl(GUEST_RIP), > (u32)((u64)vmcs_readl(GUEST_RIP) >> 32), entryexit); > > + if (unlikely(exit_reason & VMX_EXIT_REASONS_FAILED_VMENTRY)) > + return handle_vmentry_failure(exit_reason, vcpu); > + > if (unlikely(vmx->fail)) { > kvm_run->exit_reason = KVM_EXIT_FAIL_ENTRY; > kvm_run->fail_entry.hardware_entry_failure_reason > diff --git a/arch/x86/kvm/vmx.h b/arch/x86/kvm/vmx.h > index 5dff460..200c0f8 100644 > --- a/arch/x86/kvm/vmx.h > +++ b/arch/x86/kvm/vmx.h > @@ -223,7 +223,10 @@ enum vmcs_field { > #define EXIT_REASON_IO_INSTRUCTION 30 > #define EXIT_REASON_MSR_READ 31 > #define EXIT_REASON_MSR_WRITE 32 > +#define EXIT_REASON_INVALID_GUEST_STATE 33 > +#define EXIT_REASON_MSR_LOADING 34 > #define EXIT_REASON_MWAIT_INSTRUCTION 36 > +#define EXIT_REASON_MACHINE_CHECK 41 > #define EXIT_REASON_TPR_BELOW_THRESHOLD 43 > #define EXIT_REASON_APIC_ACCESS 44 > #define EXIT_REASON_WBINVD 54 > diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c > index 0ce5563..b38065d 100644 > --- a/arch/x86/kvm/x86.c > +++ b/arch/x86/kvm/x86.c > @@ -3267,7 +3267,7 @@ static int load_segment_descriptor_to_kvm_desct(struct kvm_vcpu *vcpu, > return 0; > } > > -static int load_segment_descriptor(struct kvm_vcpu *vcpu, u16 selector, > +int load_segment_descriptor(struct kvm_vcpu *vcpu, u16 selector, > int type_bits, int seg) > { > struct kvm_segment kvm_seg; > diff --git a/arch/x86/kvm/x86_emulate.c b/arch/x86/kvm/x86_emulate.c > index 2ca0838..4bc3c80 100644 > --- a/arch/x86/kvm/x86_emulate.c > +++ b/arch/x86/kvm/x86_emulate.c > @@ -168,7 +168,7 @@ static u16 opcode_table[256] = { > /* 0xE0 - 0xE7 */ > 0, 0, 0, 0, 0, 0, 0, 0, > /* 0xE8 - 0xEF */ > - ImplicitOps | Stack, SrcImm|ImplicitOps, 0, SrcImmByte|ImplicitOps, > + ImplicitOps | Stack, SrcImm|ImplicitOps, ImplicitOps, SrcImmByte|ImplicitOps, > 0, 0, 0, 0, > /* 0xF0 - 0xF7 */ > 0, 0, 0, 0, > @@ -1156,6 +1156,9 @@ static inline int emulate_grp45(struct x86_emulate_ctxt *ctxt, > case 4: /* jmp abs */ > c->eip = c->src.val; > break; > + case 5: /* jmp far */ > + printk(KERN_INFO "Jmp far need to be implemented\n"); > + break; > case 6: /* push */ > emulate_push(ctxt); > break; > @@ -1657,6 +1660,24 @@ special_insn: > break; > } > case 0xe9: /* jmp rel */ > + jmp_rel(c, c->src.val); > + c->dst.type = OP_NONE; /* Disable writeback. */ > + break; > + case 0xea: /* jmp far */ { > + struct kvm_segment kvm_seg; > + int ret; > + > + kvm_x86_ops->get_segment(ctxt->vcpu, &kvm_seg, VCPU_SREG_CS); > + > + > + ret = load_segment_descriptor(ctxt->vcpu, kvm_seg.selector, 9, VCPU_SREG_CS); > + if (ret < 0){ > + printk(KERN_INFO "%s: Failed to load CS descriptor\n", __FUNCTION__); > + return ret; > + } > + > You need to load rip as well. I suggest you print the instruction to be emulated and the register state before and after, and compare with the expected state. -- error compiling committee.c: too many arguments to function |
From: Jun K. <jun...@gm...> - 2008-04-15 11:41:15
|
On Tue, Apr 15, 2008 at 12:34 PM, Anthony Liguori <ali...@us...> wrote: > Nguyen Anh Quynh wrote: > > On 4/15/08, Anthony Liguori <ali...@us...> wrote: > > > >> Hi Nguyen, > >> > >> Nguyen Anh Quynh wrote: > >> > >> > >>> Hi Anthony, > >>> > >>> I spot a bug and few dead code in the extboot option rom. Perhaps the > >>> reason they are there is because less people want to look at assembly > >>> code, and it looks indeed scary. > >>> > >>> So I decided to rewrite it in C, using .code16gcc directive. Some > >>> > >> advantages: > >> > >>> - C code is easier to understand, find bugs, maintain and hack (so we > >>> can add more features in the future) > >>> - The binary image is same: 1.5K. The actual code size is also about > >>> the same size: around 1.2K. (gcc can optimize really well) > >>> > >>> > >>> > >> I think converting to code16gcc is a good direction to go in. I actually > >> rewrote it myself using code16gcc but I ran into problems with segment > >> assumptions and Windows guests. I tried out your version with a Linux guest > >> with good success but it fails with a win2k guest. > >> > >> Have you tested with a Windows guest? > >> > > > > Not yet. Last time I tried, the Windows virtio drivers posted a while > > ago dont work with my WinXP. I will try again, though. > > > > I just test with scsi, not virtio. > > You should be able to get very far along the Windows boot process with > extboot. If you just install the LSI driver in Win2k, you can boot up > completely. Someone just posted instructions for doing scsi boot with > Windows XP assuming you installed the VM from IDE. > Anthony, could you post in detail on how to configure LSI with W2k to boot on scsi? I tried hard here, but it never works for me. I always get error at bootup step. W2k reports something like it cannot find Windows kernel :-( Many thanks, Jun |
From: Guillaume T. <gui...@ex...> - 2008-04-15 11:16:57
|
On Mon, 07 Apr 2008 11:05:06 -0500 Anthony Liguori <an...@co...> wrote: > Perhaps a viable way to fix this upstream would be to catch the vmentry > failure, look to see if SS.CPL != CS.CPL, and if so, invoke > x86_emulate() in a loop until SS.CPL == CS.CPL. > > There are very few instructions in gfxboot that would need to be added > to x86_emulate (if they aren't already there). So to see if I'm on the good way here is an attempt to implement the solution. It doesn't work yet. I'm trying to: - Disable the code that modifies SS value in order to detect VM entry failure - Add the handler that catches the VM entry failure - Emulate the instruction until we recover a friendly VMX state => add the jmp far (opcode 0xea) instruction in the emulation. With the patch, the VM entry failure is caught but the jmp far instruction seems to fail. I've got the following dmesg: ... handle_vmentry_failure: invalid guest state handle_vmentry_failure: start emulation handle_vmentry_failure: emulation failed ... Regards, Guillaume --- diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c index 8e5d664..a56bd83 100644 --- a/arch/x86/kvm/vmx.c +++ b/arch/x86/kvm/vmx.c @@ -1178,13 +1178,16 @@ static void enter_pmode(struct kvm_vcpu *vcpu) update_exception_bitmap(vcpu); + fix_pmode_dataseg(VCPU_SREG_SS, &vcpu->arch.rmode.ss); fix_pmode_dataseg(VCPU_SREG_ES, &vcpu->arch.rmode.es); fix_pmode_dataseg(VCPU_SREG_DS, &vcpu->arch.rmode.ds); fix_pmode_dataseg(VCPU_SREG_GS, &vcpu->arch.rmode.gs); fix_pmode_dataseg(VCPU_SREG_FS, &vcpu->arch.rmode.fs); +#if 0 vmcs_write16(GUEST_SS_SELECTOR, 0); vmcs_write32(GUEST_SS_AR_BYTES, 0x93); +#endif vmcs_write16(GUEST_CS_SELECTOR, vmcs_read16(GUEST_CS_SELECTOR) & ~SELECTOR_RPL_MASK); @@ -1952,6 +1955,33 @@ static int handle_rmode_exception(struct kvm_vcpu *vcpu, return 0; } +static int handle_vmentry_failure(u32 exit_reason, struct kvm_vcpu *vcpu) +{ + unsigned int basic_exit_reason = (uint16_t) exit_reason; + unsigned int cs_rpl = vmcs_read16(GUEST_CS_SELECTOR) & SELECTOR_RPL_MASK; + unsigned int ss_rpl = vmcs_read16(GUEST_SS_SELECTOR) & SELECTOR_RPL_MASK; + + switch (basic_exit_reason) { + case EXIT_REASON_INVALID_GUEST_STATE: + printk(KERN_INFO "%s: invalid guest state\n", __FUNCTION__); + printk(KERN_INFO "%s: start emulation \n", __FUNCTION__); + while (cs_rpl != ss_rpl) { + if (emulate_instruction(vcpu, NULL, 0, 0, 0) == EMULATE_FAIL) { + printk(KERN_INFO "%s: emulation failed\n", __FUNCTION__); + return 0; + } + cs_rpl = vmcs_read16(GUEST_CS_SELECTOR) & SELECTOR_RPL_MASK; + ss_rpl = vmcs_read16(GUEST_SS_SELECTOR) & SELECTOR_RPL_MASK; + } + printk(KERN_INFO "%s: VMX friendly state recovered\n", __FUNCTION__); + break; + default: + printk(KERN_INFO "VM-entry failure due to unkown reason\n"); + return 0; + } + return 1; +} + static int handle_exception(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run) { struct vcpu_vmx *vmx = to_vmx(vcpu); @@ -2364,6 +2394,9 @@ static int kvm_handle_exit(struct kvm_run *kvm_run, struct kvm_vcpu *vcpu) KVMTRACE_3D(VMEXIT, vcpu, exit_reason, (u32)vmcs_readl(GUEST_RIP), (u32)((u64)vmcs_readl(GUEST_RIP) >> 32), entryexit); + if (unlikely(exit_reason & VMX_EXIT_REASONS_FAILED_VMENTRY)) + return handle_vmentry_failure(exit_reason, vcpu); + if (unlikely(vmx->fail)) { kvm_run->exit_reason = KVM_EXIT_FAIL_ENTRY; kvm_run->fail_entry.hardware_entry_failure_reason diff --git a/arch/x86/kvm/vmx.h b/arch/x86/kvm/vmx.h index 5dff460..200c0f8 100644 --- a/arch/x86/kvm/vmx.h +++ b/arch/x86/kvm/vmx.h @@ -223,7 +223,10 @@ enum vmcs_field { #define EXIT_REASON_IO_INSTRUCTION 30 #define EXIT_REASON_MSR_READ 31 #define EXIT_REASON_MSR_WRITE 32 +#define EXIT_REASON_INVALID_GUEST_STATE 33 +#define EXIT_REASON_MSR_LOADING 34 #define EXIT_REASON_MWAIT_INSTRUCTION 36 +#define EXIT_REASON_MACHINE_CHECK 41 #define EXIT_REASON_TPR_BELOW_THRESHOLD 43 #define EXIT_REASON_APIC_ACCESS 44 #define EXIT_REASON_WBINVD 54 diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index 0ce5563..b38065d 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -3267,7 +3267,7 @@ static int load_segment_descriptor_to_kvm_desct(struct kvm_vcpu *vcpu, return 0; } -static int load_segment_descriptor(struct kvm_vcpu *vcpu, u16 selector, +int load_segment_descriptor(struct kvm_vcpu *vcpu, u16 selector, int type_bits, int seg) { struct kvm_segment kvm_seg; diff --git a/arch/x86/kvm/x86_emulate.c b/arch/x86/kvm/x86_emulate.c index 2ca0838..4bc3c80 100644 --- a/arch/x86/kvm/x86_emulate.c +++ b/arch/x86/kvm/x86_emulate.c @@ -168,7 +168,7 @@ static u16 opcode_table[256] = { /* 0xE0 - 0xE7 */ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE8 - 0xEF */ - ImplicitOps | Stack, SrcImm|ImplicitOps, 0, SrcImmByte|ImplicitOps, + ImplicitOps | Stack, SrcImm|ImplicitOps, ImplicitOps, SrcImmByte|ImplicitOps, 0, 0, 0, 0, /* 0xF0 - 0xF7 */ 0, 0, 0, 0, @@ -1156,6 +1156,9 @@ static inline int emulate_grp45(struct x86_emulate_ctxt *ctxt, case 4: /* jmp abs */ c->eip = c->src.val; break; + case 5: /* jmp far */ + printk(KERN_INFO "Jmp far need to be implemented\n"); + break; case 6: /* push */ emulate_push(ctxt); break; @@ -1657,6 +1660,24 @@ special_insn: break; } case 0xe9: /* jmp rel */ + jmp_rel(c, c->src.val); + c->dst.type = OP_NONE; /* Disable writeback. */ + break; + case 0xea: /* jmp far */ { + struct kvm_segment kvm_seg; + int ret; + + kvm_x86_ops->get_segment(ctxt->vcpu, &kvm_seg, VCPU_SREG_CS); + + + ret = load_segment_descriptor(ctxt->vcpu, kvm_seg.selector, 9, VCPU_SREG_CS); + if (ret < 0){ + printk(KERN_INFO "%s: Failed to load CS descriptor\n", __FUNCTION__); + return ret; + } + + break; + } case 0xeb: /* jmp rel short */ jmp_rel(c, c->src.val); c->dst.type = OP_NONE; /* Disable writeback. */ diff --git a/include/asm-x86/kvm_host.h b/include/asm-x86/kvm_host.h index 31aa7d6..cdb5572 100644 --- a/include/asm-x86/kvm_host.h +++ b/include/asm-x86/kvm_host.h @@ -270,7 +270,7 @@ struct kvm_vcpu_arch { unsigned long base; u32 limit; u32 ar; - } tr, es, ds, fs, gs; + } tr, es, ds, fs, gs, ss; } rmode; int halt_request; /* real mode on Intel only */ @@ -487,6 +487,8 @@ int emulator_get_dr(struct x86_emulate_ctxt *ctxt, int dr, int emulator_set_dr(struct x86_emulate_ctxt *ctxt, int dr, unsigned long value); +int load_segment_descriptor(struct kvm_vcpu *vcpu, u16 selector, + int type_bits, int seg); int kvm_task_switch(struct kvm_vcpu *vcpu, u16 tss_selector, int reason); void kvm_set_cr0(struct kvm_vcpu *vcpu, unsigned long cr0); |
From: Avi K. <av...@qu...> - 2008-04-15 09:28:08
|
Anders wrote: > >>> Why not enable SIGIO on stdio input, like the rest of the fd handling in >>> qemu? >>> >> Thats a possibility, but I think we've now agreed that doing select() with >> a timeout is cleaner and possibly half a cent faster. >> > > Since I can only follow this list as a hobby, I managed to miss that > discussion. Can somebody point me to the relevant thread, as I would find > it interesting? > > This was off-list. The point is, that with the iothread we don't need to rely on signals at all (qemu needs signals to break out of the emulation loop, kvm without iothread needs them to exit guest mode, but the iothread can simply sit in select() waiting for an fd to become active (or for aio to complete via a signal). -- error compiling committee.c: too many arguments to function |
From: Avi K. <av...@qu...> - 2008-04-15 08:38:27
|
Jerone Young wrote: > 2 files changed, 2 insertions(+), 8 deletions(-) > qemu/Makefile.target | 3 +-- > qemu/configure | 7 +------ > > > Now that kvm headers are synced locally, qemu does not need a specific option to find the kernel headers as they can now be specified in the --extra-cflags option. > > I find it quite useful to compile qemu without running 'make sync' too often (using --with-patched-kernel). These days the headers don't change so often, so maybe this is less of an issue. -- error compiling committee.c: too many arguments to function |
From: Avi K. <av...@qu...> - 2008-04-15 08:35:38
|
Jerone Young wrote: > 2 files changed, 25 insertions(+), 4 deletions(-) > Makefile | 21 ++++++++++++++++++++- > configure | 8 +++++--- > > > This patch adds ability for kvm-userspace build system to sync needed kernel headers locally without the need of compiled kernel source. > > Signed-off-by: Jerone Young <jy...@us...> > > diff --git a/Makefile b/Makefile > --- a/Makefile > +++ b/Makefile > @@ -7,7 +7,7 @@ rpmrelease = devel > > .PHONY: kernel user libkvm qemu bios vgabios extboot clean libfdt > > -all: libkvm qemu > +all: sync libkvm qemu > 'all' shouldn't include 'sync', since it's run by end users that have just the tarball, not an entire kernel. > ifneq '$(filter $(ARCH), x86_64 i386 ia64)' '' > all: $(if $(WANT_MODULE), kernel) user > endif > @@ -69,6 +69,24 @@ install: > make -C libkvm DESTDIR="$(DESTDIR)" install > make -C qemu DESTDIR="$(DESTDIR)" install > > + > +ASM_DIR=$(ARCH) > +ifneq '$(filter $(ARCH), i386 x86_64)' '' > + ASM_DIR=x86 > +endif > + > +sync: > + mkdir -p $(INCLUDES_DIR) > + mkdir -p $(INCLUDES_DIR)/asm-$(ASM_DIR) > + mkdir -p $(INCLUDES_DIR)/linux > + cp -f $(KERNELDIR)/include/asm-$(ASM_DIR)/kvm*.h \ > + $(INCLUDES_DIR)/asm-$(ASM_DIR)/ > + cp -f $(KERNELDIR)/include/linux/kvm*.h \ > + $(KERNELDIR)/include/linux/compiler*.h \ > + $(INCLUDES_DIR)/linux > + ln -sf $(INCLUDES_DIR)/asm-$(ASM_DIR) $(INCLUDES_DIR)/asm > + > + > Please use the existing infrastructure in kernel/Makefile. -- error compiling committee.c: too many arguments to function |
From: Anders <ma...@fl...> - 2008-04-15 08:35:38
|
Marcelo Tosatti wrote: > On Mon, Apr 14, 2008 at 07:24:06PM +0300, Avi Kivity wrote: >> Why not enable SIGIO on stdio input, like the rest of the fd handling in >> qemu? > > Thats a possibility, but I think we've now agreed that doing select() with > a timeout is cleaner and possibly half a cent faster. Since I can only follow this list as a hobby, I managed to miss that discussion. Can somebody point me to the relevant thread, as I would find it interesting? Thanks, Anders. |
From: Yunfeng Z. <yun...@in...> - 2008-04-15 07:29:32
|
Hi All, This is today's KVM test result against kvm.git 8d3a833dc9d42f0967e57717f89c518375d6a417 and kvm-userspace.git e665b723bd12c01068879fe8106a8108b070c653. One Issue Fixed: ================================================ 1. Fails to save/restore ia32e guests https://sourceforge.net/tracker/?func=detail&atid=893831&aid=1936539&group_id=180599 Three Old Issues: ================================================ 1. Booting four guests likely fails https://sourceforge.net/tracker/?func=detail&atid=893831&aid=1919354&group_id=180599 2. booting smp windows guests has 30% chance of hang https://sourceforge.net/tracker/?func=detail&atid=893831&aid=1910923&group_id=180599 3. Cannot boot guests with hugetlbfs https://sourceforge.net/tracker/?func=detail&atid=893831&aid=1941302&group_id=180599 Test environment ================================================ Platform Woodcrest CPU 4 Memory size 8G' Details ================================================ IA32-pae: 1. boot guest with 256M memory PASS 2. boot two windows xp guest PASS 3. boot 4 same guest in parallel PASS 4. boot linux and windows guest in parallel PASS 5. boot guest with 1500M memory PASS 6. boot windows 2003 with ACPI enabled PASS 7. boot Windows xp with ACPI enabled PASS 8. boot Windows 2000 without ACPI PASS 9. kernel build on SMP linux guest PASS 10. LTP on SMP linux guest PASS 11. boot base kernel linux PASS 12. save/restore 32-bit HVM guests PASS 13. live migration 32-bit HVM guests PASS 14. boot SMP Windows xp with ACPI enabled PASS 15. boot SMP Windows 2003 with ACPI enabled PASS 16. boot SMP Windows 2000 with ACPI enabled PASS ================================================ IA32e: 1. boot four 32-bit guest in parallel PASS 2. boot four 64-bit guest in parallel PASS 3. boot 4G 64-bit guest PASS 4. boot 4G pae guest PASS 5. boot 32-bit linux and 32 bit windows guest in parallel PASS 6. boot 32-bit guest with 1500M memory PASS 7. boot 64-bit guest with 1500M memory PASS 8. boot 32-bit guest with 256M memory PASS 9. boot 64-bit guest with 256M memory PASS 10. boot two 32-bit windows xp in parallel PASS 11. boot four 32-bit different guest in para PASS 12. save/restore 64-bit linux guests PASS 13. save/restore 32-bit linux guests PASS 14. boot 32-bit SMP windows 2003 with ACPI enabled PASS 15. boot 32-bit SMP Windows 2000 with ACPI enabled PASS 16. boot 32-bit SMP Windows xp with ACPI enabled PASS 17. boot 32-bit Windows 2000 without ACPI PASS 18. boot 64-bit Windows xp with ACPI enabled PASS 19. boot 32-bit Windows xp without ACPI PASS 20. boot 64-bit UP vista PASS 21. boot 64-bit SMP vista PASS 22. kernel build in 32-bit linux guest OS PASS 23. kernel build in 64-bit linux guest OS PASS 24. LTP on SMP 32-bit linux guest OS PASS 25. LTP on SMP 64-bit linux guest OS PASS 26. boot 64-bit guests with ACPI enabled PASS 27. boot 32-bit x-server PASS 28. boot 64-bit SMP windows XP with ACPI enabled PASS 29. boot 64-bit SMP windows 2003 with ACPI enabled PASS 30. live migration 64bit linux guests PASS 31. live migration 32bit linux guests PASS 32. reboot 32bit windows xp guest PASS 33. reboot 32bit windows xp guest PASS Report Summary on IA32-pae Summary Test Report of Last Session ===================================================================== Total Pass Fail NoResult Crash ===================================================================== control_panel 7 7 0 0 0 Restart 2 2 0 0 0 gtest 15 15 0 0 0 ===================================================================== control_panel 7 7 0 0 0 :KVM_LM_PAE_gPAE 1 1 0 0 0 :KVM_four_sguest_PAE_gPA 1 1 0 0 0 :KVM_256M_guest_PAE_gPAE 1 1 0 0 0 :KVM_linux_win_PAE_gPAE 1 1 0 0 0 :KVM_1500M_guest_PAE_gPA 1 1 0 0 0 :KVM_SR_PAE_gPAE 1 1 0 0 0 :KVM_two_winxp_PAE_gPAE 1 1 0 0 0 Restart 2 2 0 0 0 :GuestPAE_PAE_gPAE 1 1 0 0 0 :BootTo32pae_PAE_gPAE 1 1 0 0 0 gtest 15 15 0 0 0 :ltp_nightly_PAE_gPAE 1 1 0 0 0 :boot_up_acpi_PAE_gPAE 1 1 0 0 0 :reboot_xp_PAE_gPAE 1 1 0 0 0 :boot_up_vista_PAE_gPAE 1 1 0 0 0 :boot_up_acpi_xp_PAE_gPA 1 1 0 0 0 :boot_up_acpi_win2k3_PAE 1 1 0 0 0 :boot_base_kernel_PAE_gP 1 1 0 0 0 :boot_smp_acpi_win2k3_PA 1 1 0 0 0 :boot_smp_acpi_win2k_PAE 1 1 0 0 0 :boot_up_acpi_win2k_PAE_ 1 1 0 0 0 :boot_smp_acpi_xp_PAE_gP 1 1 0 0 0 :boot_up_noacpi_win2k_PA 1 1 0 0 0 :boot_smp_vista_PAE_gPAE 1 1 0 0 0 :bootx_PAE_gPAE 1 1 0 0 0 :kb_nightly_PAE_gPAE 1 1 0 0 0 ===================================================================== Total 24 24 0 0 0 Report Summary on IA32e Summary Test Report of Last Session ===================================================================== Total Pass Fail NoResult Crash ===================================================================== control_panel 15 13 2 0 0 Restart 3 3 0 0 0 gtest 26 25 1 0 0 ===================================================================== control_panel 15 13 2 0 0 :KVM_LM_64_g64 1 1 0 0 0 :KVM_four_sguest_64_gPAE 1 1 0 0 0 :KVM_4G_guest_64_g64 1 1 0 0 0 :KVM_four_sguest_64_g64 1 0 1 0 0 :KVM_linux_win_64_gPAE 1 1 0 0 0 :KVM_1500M_guest_64_gPAE 1 1 0 0 0 :KVM_SR_64_g64 1 1 0 0 0 :KVM_LM_64_gPAE 1 1 0 0 0 :KVM_256M_guest_64_g64 1 1 0 0 0 :KVM_1500M_guest_64_g64 1 1 0 0 0 :KVM_4G_guest_64_gPAE 1 1 0 0 0 :KVM_SR_64_gPAE 1 1 0 0 0 :KVM_256M_guest_64_gPAE 1 1 0 0 0 :KVM_two_winxp_64_gPAE 1 1 0 0 0 :KVM_four_dguest_64_gPAE 1 0 1 0 0 Restart 3 3 0 0 0 :GuestPAE_64_gPAE 1 1 0 0 0 :BootTo64_64_gPAE 1 1 0 0 0 :Guest64_64_gPAE 1 1 0 0 0 gtest 26 25 1 0 0 :boot_up_acpi_64_gPAE 1 1 0 0 0 :boot_up_noacpi_xp_64_gP 1 1 0 0 0 :boot_smp_acpi_xp_64_g64 1 1 0 0 0 :boot_base_kernel_64_gPA 1 1 0 0 0 :boot_smp_acpi_win2k3_64 1 1 0 0 0 :boot_smp_acpi_win2k_64_ 1 1 0 0 0 :boot_base_kernel_64_g64 1 1 0 0 0 :bootx_64_gPAE 1 1 0 0 0 :kb_nightly_64_gPAE 1 1 0 0 0 :ltp_nightly_64_g64 1 1 0 0 0 :boot_up_acpi_64_g64 1 1 0 0 0 :boot_up_noacpi_win2k_64 1 1 0 0 0 :boot_smp_acpi_xp_64_gPA 1 1 0 0 0 :boot_smp_vista_64_gPAE 1 1 0 0 0 :boot_up_acpi_win2k3_64_ 1 1 0 0 0 :reboot_xp_64_gPAE 1 1 0 0 0 :bootx_64_g64 1 1 0 0 0 :reboot_xp_64_g64 1 0 1 0 0 :boot_up_vista_64_g64 1 1 0 0 0 :boot_smp_vista_64_g64 1 1 0 0 0 :boot_up_acpi_xp_64_g64 1 1 0 0 0 :boot_up_vista_64_gPAE 1 1 0 0 0 :ltp_nightly_64_gPAE 1 1 0 0 0 :boot_smp_acpi_win2k3_64 1 1 0 0 0 :boot_up_noacpi_win2k3_6 1 1 0 0 0 :kb_nightly_64_g64 1 1 0 0 0 ===================================================================== Total 44 41 3 0 0 Thanks Yunfeng |
From: Avi K. <av...@qu...> - 2008-04-15 07:25:49
|
Jerone Young wrote: > I just took the old description that was there before. A much better one > would be: > > Remove declarations of kvm_*_pit() on architectures who do not support > not have a PIT. > > That is what I was really intending. It removes a lot of compile > warnings, when compiling anything with libkvm.h on platforms that do not > have a pit. It's mainly because of the structures that are used as > arguments to these function declrations. > Thanks, applied. -- error compiling committee.c: too many arguments to function |
From: Liu, E. E <eri...@in...> - 2008-04-15 07:22:30
|
>From 193536b1cd96f646b66bea52bc46fdebcdcfc1cf Mon Sep 17 00:00:00 2001 From: Feng (Eric) Liu <eri...@in...> Date: Wed, 16 Apr 2008 07:05:22 -0400 Subject: [PATCH] KVM: trace: fix a redundant assignment. Romove the redundant assignment, since the variable "extra" will not be used again. Signed-off-by: Feng (Eric) Liu <eri...@in...> --- virt/kvm/kvm_trace.c | 3 +-- 1 files changed, 1 insertions(+), 2 deletions(-) diff --git a/virt/kvm/kvm_trace.c b/virt/kvm/kvm_trace.c index 5425440..030cfde 100644 --- a/virt/kvm/kvm_trace.c +++ b/virt/kvm/kvm_trace.c @@ -66,8 +66,7 @@ static void kvm_add_trace(void *probe_private, void *call_data, extra = va_arg(*args, u32); WARN_ON(!(extra <= KVM_TRC_EXTRA_MAX)); - extra = min_t(u32, extra, KVM_TRC_EXTRA_MAX); - rec.extra_u32 = extra; + rec.extra_u32 = min_t(u32, extra, KVM_TRC_EXTRA_MAX); rec.cycle_in = p->cycle_in; -- 1.5.1 --Eric (Liu, Feng) |
From: Liu, E. E <eri...@in...> - 2008-04-15 07:20:03
|
>From 9314f8b249fe6c32f006e6a1cec5d3868b66e6ff Mon Sep 17 00:00:00 2001 From: Feng (Eric) Liu <eri...@in...> Date: Wed, 16 Apr 2008 05:45:40 -0400 Subject: [PATCH] kvm: user: Add event mask support in kvmtrace. Signed-off-by: Feng (Eric) Liu <eri...@in...> --- user/kvmtrace.c | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 53 insertions(+), 3 deletions(-) diff --git a/user/kvmtrace.c b/user/kvmtrace.c index 876ac27..a7b2071 100644 --- a/user/kvmtrace.c +++ b/user/kvmtrace.c @@ -54,7 +54,7 @@ static char kvmtrace_version[] = "0.1"; #define max(a, b) ((a) > (b) ? (a) : (b)) -#define S_OPTS "r:o:w:?Vb:n:D:" +#define S_OPTS "r:o:w:?Vb:n:D:e:" static struct option l_opts[] = { { .name = "relay", @@ -99,6 +99,12 @@ static struct option l_opts[] = { .val = 'D' }, { + .name = "event_mask", + .has_arg = required_argument, + .flag = NULL, + .val = 'e' + }, + { .name = NULL, } }; @@ -154,6 +160,8 @@ static char *output_dir; static int stop_watch; static unsigned long buf_size = BUF_SIZE; static unsigned long buf_nr = BUF_NR; +static int cat_mask = ~0u; +static unsigned long long act_bitmap[16]; static unsigned int page_size; #define for_each_cpu_online(cpu) \ @@ -175,6 +183,13 @@ static void handle_sigint(__attribute__((__unused__)) int sig) done = 1; } +static inline int valid_mask_opt(int x) +{ + return ((1 << KVM_TRC_SHIFT) <= x) && + (x < (1 << (KVM_TRC_CAT_NR_BITS + KVM_TRC_SHIFT))) && + (0 <= KVM_TRC_ACT(x)) && (KVM_TRC_ACT(x) < 64); +} + static int get_lost_records() { int fd; @@ -473,6 +488,8 @@ static int start_trace(void) memset(&kuts, 0, sizeof(kuts)); kuts.buf_size = trace_information.buf_size = buf_size; kuts.buf_nr = trace_information.buf_nr = buf_nr; + kuts.cat_mask = cat_mask; + memcpy(kuts.act_bitmap, act_bitmap, sizeof(act_bitmap)); if (ioctl(trace_information.fd , KVM_TRACE_ENABLE, &kuts) < 0) { perror("KVM_TRACE_ENABLE"); @@ -587,13 +604,21 @@ static void show_stats(void) static char usage_str[] = \ "[ -r debugfs path ] [ -D output dir ] [ -b buffer size ]\n" \ - "[ -n number of buffers] [ -o <output file> ] [ -w time ] [ -V ]\n\n" \ + "[ -n number of buffers] [ -o <output file> ] [ -e event mask ]" \ + "[ -w time ] [ -V ]\n\n" \ "\t-r Path to mounted debugfs, defaults to /sys/kernel/debug\n" \ "\t-o File(s) to send output to\n" \ "\t-D Directory to prepend to output file names\n" \ "\t-w Stop after defined time, in seconds\n" \ "\t-b Sub buffer size in KiB\n" \ "\t-n Number of sub buffers\n" \ + "\t-e Only trace specified categories or actions.\n" \ + "\t kvmtrace defaults to collecting all events can be traced.\n" \ + "\t To limit the events being captured, you can specify filter.\n" \ + "\t if you want to trace all the actions of one category," \ + " set action to zero. \n" \ + "\t eg: -e 0x00010000 -e 00020001 trace entryexit and PAGE_FAULT \n" \ + "\t -e 0x00020005 -e 00020006 trace IO_READ and IO_WRITE. \n" \ "\t-V Print program version info\n\n"; static void show_usage(char *prog) @@ -604,7 +629,7 @@ static void show_usage(char *prog) void parse_args(int argc, char **argv) { - int c; + int c, cat_mask_tmp = 0; while ((c = getopt_long(argc, argv, S_OPTS, l_opts, NULL)) >= 0) { switch (c) { @@ -647,6 +672,26 @@ void parse_args(int argc, char **argv) case 'D': output_dir = optarg; break; + case 'e': { + int index, mask; + + if ((sscanf(optarg, "%x", &mask) != 1) || + !valid_mask_opt(mask)) { + fprintf(stderr, + "Invalid event mask (%u)\n", mask); + exit(EXIT_FAILURE); + } + cat_mask_tmp |= KVM_TRC_CAT(mask); + index = ffs(KVM_TRC_CAT(mask)) - 1; + if (KVM_TRC_ACT(mask) == 0) + act_bitmap[index] = ~0ull; + else { + if (act_bitmap[index] == ~0ull) + act_bitmap[index] = 0; + act_bitmap[index] |= 1 << KVM_TRC_ACT(mask); + } + break; + } default: show_usage(argv[0]); } @@ -654,12 +699,17 @@ void parse_args(int argc, char **argv) if (optind < argc || output_name == NULL) show_usage(argv[0]); + + if (cat_mask_tmp != 0) + cat_mask = cat_mask_tmp; } int main(int argc, char *argv[]) { struct statfs st; + memset(act_bitmap, ~0u, sizeof(act_bitmap)); + parse_args(argc, argv); if (!debugfs_path) -- 1.5.1 --Eric (Liu, Feng) |
From: Liu, E. E <eri...@in...> - 2008-04-15 07:20:03
|
>From a1b062cfd4d1a91c447b680ac9a2250fe55119ec Mon Sep 17 00:00:00 2001 From: Feng (Eric) Liu <eri...@in...> Date: Wed, 16 Apr 2008 05:29:37 -0400 Subject: [PATCH] KVM: trace: Add event mask support. Allow user space application to specify one or more filter masks to limit the events being captured via it. Signed-off-by: Feng (Eric) Liu <eri...@in...> --- include/linux/kvm.h | 6 ++++++ virt/kvm/kvm_trace.c | 24 ++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 0 deletions(-) diff --git a/include/linux/kvm.h b/include/linux/kvm.h index c5675e8..12ec084 100644 --- a/include/linux/kvm.h +++ b/include/linux/kvm.h @@ -18,6 +18,8 @@ struct kvm_user_trace_setup { __u32 buf_size; /* sub_buffer size of each per-cpu */ __u32 buf_nr; /* the number of sub_buffers of each per-cpu */ + __u16 cat_mask; /* the tracing categories are enabled */ + __u64 act_bitmap[16]; /* the actions are enabled for each category */ }; /* for KVM_CREATE_MEMORY_REGION */ @@ -261,6 +263,7 @@ struct kvm_s390_interrupt { }; #define KVM_TRC_SHIFT 16 +#define KVM_TRC_CAT_NR_BITS 12 /* * kvm trace categories */ @@ -274,6 +277,9 @@ struct kvm_s390_interrupt { #define KVM_TRC_VMEXIT (KVM_TRC_ENTRYEXIT + 0x02) #define KVM_TRC_PAGE_FAULT (KVM_TRC_HANDLER + 0x01) +#define KVM_TRC_CAT(evt) (((evt) >> KVM_TRC_SHIFT) & 0x0fff) +#define KVM_TRC_ACT(evt) ((evt) & (~0u >> KVM_TRC_SHIFT)) + #define KVM_TRC_HEAD_SIZE 12 #define KVM_TRC_CYCLE_SIZE 8 #define KVM_TRC_EXTRA_MAX 7 diff --git a/virt/kvm/kvm_trace.c b/virt/kvm/kvm_trace.c index 5425440..dfa4162 100644 --- a/virt/kvm/kvm_trace.c +++ b/virt/kvm/kvm_trace.c @@ -26,6 +26,8 @@ struct kvm_trace { int trace_state; + u16 cat_mask; + u64 act_bitmap[16]; struct rchan *rchan; struct dentry *lost_file; atomic_t lost_records; @@ -39,6 +41,23 @@ struct kvm_trace_probe { marker_probe_func *probe_func; }; +static inline int check_event_mask(struct kvm_trace *kt, u32 event) +{ + unsigned long category; + int i; + + category = KVM_TRC_CAT(event); + if (!(category & kt->cat_mask)) + return 1; + + i = find_first_bit(&category, KVM_TRC_CAT_NR_BITS); + + if (!test_bit(KVM_TRC_ACT(event), &kt->act_bitmap[i])) + return 1; + + return 0; +} + static inline int calc_rec_size(int cycle, int extra) { int rec_size = KVM_TRC_HEAD_SIZE; @@ -60,6 +79,9 @@ static void kvm_add_trace(void *probe_private, void *call_data, return; rec.event = va_arg(*args, u32); + if (check_event_mask(kt, rec.event)) + return; + vcpu = va_arg(*args, struct kvm_vcpu *); rec.pid = current->tgid; rec.vcpu_id = vcpu->vcpu_id; @@ -169,6 +191,8 @@ static int do_kvm_trace_enable(struct kvm_user_trace_setup *kuts) if (!kt->rchan) goto err; + kt->cat_mask = kuts->cat_mask; + memcpy(kt->act_bitmap, kuts->act_bitmap, sizeof(kuts->act_bitmap)); kvm_trace = kt; for (i = 0; i < ARRAY_SIZE(kvm_trace_probes); i++) { --Eric (Liu, Feng) |
From: Liu, E. E <eri...@in...> - 2008-04-15 07:19:45
|
Hi, The following two patches add event mask support in kvmtrace and the corresponding kernel code, so that we can specify filter masks to limit the events being captured. --Eric (Liu, Feng) |
From: Jun K. <jun...@gm...> - 2008-04-15 06:57:39
|
On Tue, Apr 15, 2008 at 3:41 PM, Felix Leimbach <fel...@gm...> wrote: > On 14.04.2008 Alberto Treviño wrote: > > If anyone can attest to this procedures and report, it would be > greatly appreciated. > > Hello Alberto, > > I can confirm that this method works on Windows 2003 Server. Looks like a problem, however. In his instruction, part 3: >3. Shut down the VM. This time, don't include the new temporary image > from step 1 and define your disk(s) as SCSI disks: > > qemu-system-x86_64 -m 256 \ > -drive file=hda.img,if=scsi,bus=0,index=0,media=disk,boot=off ... I think above should have "boot=on", rather than "boot=off". Otherwise, you cannot boot from scsi disk, right? I tried the above instructions with WinXP, but WinXP cannot boot successfully: it stops somewhere in the middle, and hang there. Regards, Jun |
From: Felix L. <fel...@gm...> - 2008-04-15 06:41:24
|
On 14.04.2008 Alberto Treviño wrote: > If anyone can attest to this procedures and report, it would be greatly appreciated. Hello Alberto, I can confirm that this method works on Windows 2003 Server. > Along those lines, if anyone knows how to grab an existing Windows VM that > was set up in VMware and make it run in Qemu (KVM), I would really, really > appreciate it. Everytime I try I get blue screens. :-( Have done that before, here is how: http://www.mail-archive.com/kvm...@li.../msg14818.html regards, Felix |
From: <wes...@si...> - 2008-04-15 05:48:39
|
Öйú²ÆË°ÅàÑµÍø ×É Ñ¯ µç »°£º0755-26075265 81069646 ´« Õæ£º0755- 61351396 |
From: Carsten O. <co...@de...> - 2008-04-15 05:44:11
|
Avi Kivity wrote: > Anthony Liguori wrote: >> BTW, when we set O_ASYNC on the tap fd, we're eliminating O_NONBLOCK. >> This means that we have to poll loop select() when readv()'ing packets >> instead of just reading until hitting AGAIN. This means at least an >> extra syscall per packet. > > I didn't know that O_ASYNC and O_NONBLOCK were mutually exclusive. Can > you point me at the relevant documentation? They should'nt be mutual exclusive. If they are, the tap driver requires fixing afaics. The relevant documentation is the man page open(2), and it doesn't state they are exclusive. |
From: Avi K. <av...@qu...> - 2008-04-15 05:40:57
|
Marcelo Tosatti wrote: > On Mon, Apr 14, 2008 at 07:24:06PM +0300, Avi Kivity wrote: > >>> Issue is that the dumb console timer "wakes up" the vcpu to do IO >>> processing in main_loop_wait(). >>> >>> So while you're right that vga_hw_update() is a no-op for the -nographic >>> case, the indirect effect of the timer triggering main_loop_wait() is >>> needed for reading input from stdio in a way that feels interactive for >>> the user. >>> >>> >>> >> Why not enable SIGIO on stdio input, like the rest of the fd handling in >> qemu? >> > > Thats a possibility, but I think we've now agreed that doing select() with a > timeout is cleaner and possibly half a cent faster. > > Yes, just wanted to make sure I don't miss something. -- Do not meddle in the internals of kernels, for they are subtle and quick to panic. |
From: Avi K. <av...@qu...> - 2008-04-15 05:39:24
|
Anthony Liguori wrote: > > BTW, when we set O_ASYNC on the tap fd, we're eliminating O_NONBLOCK. > This means that we have to poll loop select() when readv()'ing packets > instead of just reading until hitting AGAIN. This means at least an > extra syscall per packet. I didn't know that O_ASYNC and O_NONBLOCK were mutually exclusive. Can you point me at the relevant documentation? -- Do not meddle in the internals of kernels, for they are subtle and quick to panic. |
From: MR. B. L. <mr....@na...> - 2008-04-15 04:42:12
|
>From Mr. Barry Leonard. PO Box 10720 217 Strand London WC2R 1AP My Request. I Have a very important request that make me to contact you; I am Mr. Barry Leonard, I found Your profile very interesting and decided to reach you directly to solicit your assistance and Guidelines in making a business investment and transfer of £12.500000,000 (Twelve Million Five Hundred thousand pounds Sterling) to your country within the Next few days. I presently work as a senior Accounts Director, Offshore Mortgage & Services with Natwest Bank Plc, London. But at this moment, I am constrained to issue more details about this profitable Business investment until I get your response by mail. This transaction is totally free of risk and troubles as the fund is legitimate and does not originate from drug, money laundry, terrorism or any other illegal act, funds will be released to you after necessary processes have been followed. Please take out a moment of your very busy Schedule today to respond back if you are interested; please send your direct telephone numbers through email for an initial confidential communication. I wish for utmost confidentiality in handling this transaction. Awaiting your reply, Mr. Barry Leonard Snr.Accounts Director |
From: Nguyen A. Q. <aq...@gm...> - 2008-04-15 03:54:32
|
On 4/15/08, Nguyen Anh Quynh <aq...@gm...> wrote: > > You should be able to get very far along the Windows boot process with > > extboot. If you just install the LSI driver in Win2k, you can boot up > > completely. Someone just posted instructions for doing scsi boot with > > Windows XP assuming you installed the VM from IDE. > > > > > I searched around for those scsi boot instructions, but dont see any. > Any pointer? Is that the post from Alberto Treviño? Will try it soon. Thanks, Q |
From: Nguyen A. Q. <aq...@gm...> - 2008-04-15 03:50:56
|
On 4/15/08, Anthony Liguori <ali...@us...> wrote: > Nguyen Anh Quynh wrote: > > > On 4/15/08, Anthony Liguori <ali...@us...> wrote: > > > > > > > Hi Nguyen, > > > > > > Nguyen Anh Quynh wrote: > > > > > > > > > > > > > Hi Anthony, > > > > > > > > I spot a bug and few dead code in the extboot option rom. Perhaps the > > > > reason they are there is because less people want to look at assembly > > > > code, and it looks indeed scary. > > > > > > > > So I decided to rewrite it in C, using .code16gcc directive. Some > > > > > > > > > > > advantages: > > > > > > > > > > - C code is easier to understand, find bugs, maintain and hack (so we > > > > can add more features in the future) > > > > - The binary image is same: 1.5K. The actual code size is also about > > > > the same size: around 1.2K. (gcc can optimize really well) > > > > > > > I think converting to code16gcc is a good direction to go in. I > actually > > > rewrote it myself using code16gcc but I ran into problems with segment > > > assumptions and Windows guests. I tried out your version with a Linux > guest > > > with good success but it fails with a win2k guest. > > > > > > Have you tested with a Windows guest? > > > > > > > > > > Not yet. Last time I tried, the Windows virtio drivers posted a while > > ago dont work with my WinXP. I will try again, though. > > > > > > I just test with scsi, not virtio. > > You should be able to get very far along the Windows boot process with > extboot. If you just install the LSI driver in Win2k, you can boot up > completely. Someone just posted instructions for doing scsi boot with > Windows XP assuming you installed the VM from IDE. > I searched around for those scsi boot instructions, but dont see any. Any pointer? Thanks, Q |
From: Исполнение с. а. <pe...@rc...> - 2008-04-15 03:36:42
|
Исполнительное производство: правовые механизмы взыскания долгов. Новое в законодательстве, Ф3 от 02.10.2007 N229-ФЗ В г.Санкт-Петербурге, с 28 по 29 апреля 2008г. Т Е Л Е Ф О Н ( 8 1 2 ) 9 8 3 2 9 0 7 Актуальность темы - Ознакомление с исполнительным производством с целью оптимизации деятельности по приведению в исполнение судебных актов; - Рассмотрение актуальных вопросов исполнительного производства с учетом изменений; - Изучение практических ситуаций, возникающих в процессе исполнения судебных актов; - Выработка оптимальной стратегии взыскания долга. В программе курса: Законодательство об исполнительном производстве и его изменение Органы принудительного исполнения Исполнительные документы Сроки в исполнительном производстве Динамика исполнительного производства Правовое положение участников исполнительного производства Защита прав взыскателя, должника и других лиц при совершении исполнительных действий Правовые основания для обращения взыскания на имущество должника Распределение взысканных денежных средств и очередность удовлетворения требований взыскателей Особенности исполнения судебных актов по законодательству о банкротстве Возможность использования мирового соглашения в качестве основания для прекращения обязательств на стадии исполнительного производства Особенности исполнительного производства в отношении таких должников как казна и государственные учреждения Обращение взыскания на дебиторскую задолженность и ценные бумаги Списание средств со счета в банке без распоряжения клиента Приведение в принудительное исполнение решений третейских судов ----------------------------------------------------------------------- Полная программа высылается по запросу |
From: Anthony L. <an...@co...> - 2008-04-15 03:36:42
|
Jerone Young wrote: > 1 file changed, 13 insertions(+), 5 deletions(-) > kernel/Makefile | 18 +++++++++++++----- > > > This patch add the ability for make sync in the kernel directory to work for mulitiple architectures and not just x86. > > Signed-off-by: Jerone Young <jy...@us...> > > diff --git a/kernel/Makefile b/kernel/Makefile > --- a/kernel/Makefile > +++ b/kernel/Makefile > @@ -1,5 +1,10 @@ include ../config.mak > include ../config.mak > > +ASM_DIR=$(ARCH) > +ifneq '$(filter $(ASM_DIR), x86_64 i386 ia64)' '' > + ASM_DIR=x86 > +endif > That doesn't look correct for ia64... Regards, Anthony Liguori > KVERREL = $(patsubst /lib/modules/%/build,%,$(KERNELDIR)) > > DESTDIR= > @@ -34,15 +39,16 @@ sync: > sync: > rm -rf tmp include > rsync --exclude='*.mod.c' -R \ > - "$(LINUX)"/arch/x86/kvm/./*.[ch] \ > + "$(LINUX)"/arch/$(ASM_DIR)/kvm/./*.[ch] \ > "$(LINUX)"/virt/kvm/./*.[ch] \ > "$(LINUX)"/./include/linux/kvm*.h \ > - "$(LINUX)"/./include/asm-x86/kvm*.h \ > + "$(LINUX)"/./include/asm-$(ASM_DIR)/kvm*.h \ > tmp/ > - mkdir -p include/linux include/asm-x86 > - ln -s asm-x86 include/asm > - ln -sf asm-x86 include-compat/asm > + mkdir -p include/linux include/asm-$(ASM_DIR) > + ln -s asm-$(ASM_DIR) include/asm > + ln -sf asm-$(ASM_DIR) include-compat/asm > > +ifneq '$(filter $(ASM_DIR), x86_64 i386 ia64)' '' > $(call unifdef, include/linux/kvm.h) > $(call unifdef, include/linux/kvm_para.h) > $(call unifdef, include/asm-x86/kvm.h) > @@ -54,6 +60,8 @@ sync: > $(call hack, svm.c) > $(call hack, x86.c) > $(call hack, irq.h) > +endif > + > for i in $$(find tmp -type f -printf '%P '); \ > do cmp -s $$i tmp/$$i || cp tmp/$$i $$i; done > rm -rf tmp > > ------------------------------------------------------------------------- > This SF.net email is sponsored by the 2008 JavaOne(SM) Conference > Don't miss this year's exciting event. There's still time to save $100. > Use priority code J8TL2D2. > http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone > _______________________________________________ > kvm-devel mailing list > kvm...@li... > https://lists.sourceforge.net/lists/listinfo/kvm-devel > |
From: Anthony L. <ali...@us...> - 2008-04-15 03:34:35
|
Nguyen Anh Quynh wrote: > On 4/15/08, Anthony Liguori <ali...@us...> wrote: > >> Hi Nguyen, >> >> Nguyen Anh Quynh wrote: >> >> >>> Hi Anthony, >>> >>> I spot a bug and few dead code in the extboot option rom. Perhaps the >>> reason they are there is because less people want to look at assembly >>> code, and it looks indeed scary. >>> >>> So I decided to rewrite it in C, using .code16gcc directive. Some >>> >> advantages: >> >>> - C code is easier to understand, find bugs, maintain and hack (so we >>> can add more features in the future) >>> - The binary image is same: 1.5K. The actual code size is also about >>> the same size: around 1.2K. (gcc can optimize really well) >>> >>> >>> >> I think converting to code16gcc is a good direction to go in. I actually >> rewrote it myself using code16gcc but I ran into problems with segment >> assumptions and Windows guests. I tried out your version with a Linux guest >> with good success but it fails with a win2k guest. >> >> Have you tested with a Windows guest? >> > > Not yet. Last time I tried, the Windows virtio drivers posted a while > ago dont work with my WinXP. I will try again, though. > I just test with scsi, not virtio. You should be able to get very far along the Windows boot process with extboot. If you just install the LSI driver in Win2k, you can boot up completely. Someone just posted instructions for doing scsi boot with Windows XP assuming you installed the VM from IDE. >> If we can work through the Windows >> issues, this is definitely the right way to go. >> > > So the assembly option rom works with your Win2k?? If so, definitely > we can fix the C code. > Yes it does. I'd greatly prefer a C version so I'm all for it if we can get it working. Regards, Anthony Liguori > Thanks, > Quynh > |