[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[qvm86-devel] [patch] More WinNT host fixes
From: |
Filip Navara |
Subject: |
[qvm86-devel] [patch] More WinNT host fixes |
Date: |
Tue, 19 Apr 2005 14:25:40 +0200 |
User-agent: |
Mozilla Thunderbird 0.9 (Windows/20041103) |
Hi,
this patch fixes a very stupid bug which was propably causing the host
crashes for Mike (as reported in other thread on the ML). Now I'm able
to boot ReactOS just fine with QVM86 on Windows XP SP2.
Regards,
Filip
2005-04-19 Filip Navara <address@hidden>
* patch.qvm86: Remove WinNT specific patches that were commited to
QEMU CVS.
* qvm86-win32.c (host_map_user): Return correct physical memory
address.
Index: patch.qvm86
===================================================================
RCS file: /cvsroot/qvm86/qvm86/patch.qvm86,v
retrieving revision 1.5
diff -u -p -r1.5 patch.qvm86
--- patch.qvm86 10 Apr 2005 23:41:14 -0000 1.5
+++ patch.qvm86 19 Apr 2005 12:20:45 -0000
@@ -4,7 +4,7 @@ RCS file: /cvsroot/qemu/qemu/Makefile,v
retrieving revision 1.82
diff -u -p -r1.82 Makefile
--- Makefile 10 Feb 2005 21:48:51 -0000 1.82
-+++ Makefile 10 Apr 2005 23:34:04 -0000
++++ Makefile 19 Apr 2005 12:09:31 -0000
@@ -20,6 +20,13 @@ all: dyngen$(EXESUF) $(TOOLS) $(DOCS)
ifdef CONFIG_KQEMU
$(MAKE) -C kqemu
@@ -19,17 +19,21 @@ diff -u -p -r1.82 Makefile
qemu-img$(EXESUF): qemu-img.c block.c block-cow.c block-qcow.c aes.c
block-vmdk.c block-cloop.c block-dmg.c
$(CC) -DQEMU_TOOL $(CFLAGS) $(LDFLAGS) $(DEFINES) -o $@ $^ -lz $(LIBS)
-@@ -38,6 +45,9 @@ clean:
+@@ -38,6 +45,13 @@ clean:
ifdef CONFIG_KQEMU
$(MAKE) -C kqemu clean
endif
+ifdef CONFIG_QVM86
++ifdef CONFIG_WIN32
++ $(MAKE) -C qvm86 -f Makefile.winnt clean
++else
+ $(MAKE) -C qvm86 clean
+endif
++endif
distclean: clean
rm -f config-host.mak config-host.h
-@@ -72,6 +82,9 @@ endif
+@@ -72,6 +86,9 @@ endif
ifdef CONFIG_KQEMU
cd kqemu ; ./install.sh
endif
@@ -45,7 +49,7 @@ RCS file: /cvsroot/qemu/qemu/configure,v
retrieving revision 1.61
diff -u -p -r1.61 configure
--- configure 13 Mar 2005 16:51:53 -0000 1.61
-+++ configure 10 Apr 2005 23:34:04 -0000
++++ configure 19 Apr 2005 12:09:31 -0000
@@ -82,6 +82,8 @@ fmod_lib=""
fmod_inc=""
linux="no"
@@ -210,223 +214,52 @@ diff -u -p -r1.61 configure
echo "#define USE_KQEMU 1" >> $config_h
fi
elif test "$target_cpu" = "arm" -o "$target_cpu" = "armeb" ; then
-Index: exec-all.h
-===================================================================
-RCS file: /cvsroot/qemu/qemu/exec-all.h,v
-retrieving revision 1.30
-diff -u -p -r1.30 exec-all.h
---- exec-all.h 7 Apr 2005 22:20:28 -0000 1.30
-+++ exec-all.h 10 Apr 2005 23:34:04 -0000
-@@ -601,7 +601,6 @@ static inline target_ulong get_phys_addr
-
-
- #ifdef USE_KQEMU
--extern int kqemu_fd;
- extern int kqemu_flushed;
-
- int kqemu_init(CPUState *env);
Index: kqemu.c
===================================================================
RCS file: /cvsroot/qemu/qemu/kqemu.c,v
-retrieving revision 1.1
-diff -u -p -r1.1 kqemu.c
---- kqemu.c 10 Feb 2005 22:02:59 -0000 1.1
-+++ kqemu.c 10 Apr 2005 23:34:05 -0000
-@@ -20,9 +20,11 @@
- #include "config.h"
- #ifdef _WIN32
- #include <windows.h>
-+#include <winioctl.h>
- #else
- #include <sys/types.h>
- #include <sys/mman.h>
-+#include <sys/ioctl.h>
- #endif
- #include <stdlib.h>
- #include <stdio.h>
-@@ -41,13 +43,24 @@
+retrieving revision 1.2
+diff -u -p -r1.2 kqemu.c
+--- kqemu.c 17 Apr 2005 18:33:47 -0000 1.2
++++ kqemu.c 19 Apr 2005 12:13:41 -0000
+@@ -43,12 +43,12 @@
#include <unistd.h>
#include <fcntl.h>
--#include <sys/ioctl.h>
-#include "kqemu/kqemu.h"
+#include "qvm86/kqemu.h"
--#define KQEMU_DEVICE "/dev/kqemu"
-+#ifdef _WIN32
+ #ifdef _WIN32
+-#define KQEMU_DEVICE "\\\\.\\kqemu"
+#define KQEMU_DEVICE "\\\\.\\qvm86"
-+#else
+ #else
+-#define KQEMU_DEVICE "/dev/kqemu"
+#define KQEMU_DEVICE "/dev/qvm86"
-+#endif
-
- int kqemu_allowed = 1;
--int kqemu_fd = -1;
-+#ifdef _WIN32
-+#define KQEMU_INVALID_FD INVALID_HANDLE_VALUE
-+HANDLE kqemu_fd = KQEMU_INVALID_FD;
-+#define kqemu_closefd(x) CloseHandle(x)
-+#else
-+#define KQEMU_INVALID_FD -1
-+int kqemu_fd = KQEMU_INVALID_FD;
-+#define kqemu_closefd(x) close(x)
-+#endif
- unsigned long *pages_to_flush;
- unsigned int nb_pages_to_flush;
- extern uint32_t **l1_phys_map;
-@@ -104,17 +117,32 @@ int kqemu_init(CPUState *env)
- {
- struct kqemu_init init;
- int ret, version;
-+#ifdef _WIN32
-+ DWORD temp;
-+#endif
-
- if (!kqemu_allowed)
- return -1;
-
-+#ifdef _WIN32
-+ kqemu_fd = CreateFile(KQEMU_DEVICE, GENERIC_WRITE | GENERIC_READ,
-+ FILE_SHARE_READ | FILE_SHARE_WRITE,
-+ NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,
-+ NULL);
-+#else
- kqemu_fd = open(KQEMU_DEVICE, O_RDWR);
-- if (kqemu_fd < 0) {
-+#endif
-+ if (kqemu_fd == KQEMU_INVALID_FD) {
- fprintf(stderr, "Could not open '%s' - QEMU acceleration layer not
activated\n", KQEMU_DEVICE);
- return -1;
- }
- version = 0;
-+#ifdef _WIN32
-+ DeviceIoControl(kqemu_fd, KQEMU_GET_VERSION, NULL, 0,
-+ &version, sizeof(version), &temp, NULL);
-+#else
- ioctl(kqemu_fd, KQEMU_GET_VERSION, &version);
-+#endif
- if (version != KQEMU_VERSION) {
- fprintf(stderr, "Version mismatch between kqemu module and qemu (%08x
%08x) - disabling kqemu use\n",
- version, KQEMU_VERSION);
-@@ -131,17 +159,23 @@ int kqemu_init(CPUState *env)
- init.ram_dirty = phys_ram_dirty;
- init.phys_to_ram_map = l1_phys_map;
- init.pages_to_flush = pages_to_flush;
-+#ifdef _WIN32
-+ ret = DeviceIoControl(kqemu_fd, KQEMU_INIT, &init, sizeof(init),
-+ NULL, 0, &temp, NULL) == TRUE ? 0 : -1;
-+#else
- ret = ioctl(kqemu_fd, KQEMU_INIT, &init);
-+#endif
- if (ret < 0) {
- fprintf(stderr, "Error %d while initializing QEMU acceleration layer
- disabling it for now\n", ret);
- fail:
-- close(kqemu_fd);
-- kqemu_fd = -1;
-+ kqemu_closefd(kqemu_fd);
-+ kqemu_fd = KQEMU_INVALID_FD;
- return -1;
- }
- kqemu_update_cpuid(env);
- env->kqemu_enabled = 1;
- nb_pages_to_flush = 0;
-+ printf ("QEMU acceleration layer enabled\n");
- return 0;
- }
-
-@@ -313,6 +347,9 @@ int kqemu_cpu_exec(CPUState *env)
- {
- struct kqemu_cpu_state kcpu_state, *kenv = &kcpu_state;
- int ret;
-+#ifdef _WIN32
-+ DWORD temp;
-+#endif
-
- #ifdef DEBUG
- if (loglevel & CPU_LOG_INT) {
-@@ -354,7 +391,15 @@ int kqemu_cpu_exec(CPUState *env)
- restore_native_fp_frstor(env);
- }
-
-+#ifdef _WIN32
-+ DeviceIoControl(kqemu_fd, KQEMU_EXEC,
-+ kenv, sizeof(struct kqemu_cpu_state),
-+ kenv, sizeof(struct kqemu_cpu_state),
-+ &temp, NULL);
-+ ret = kenv->retval;
-+#else
- ret = ioctl(kqemu_fd, KQEMU_EXEC, kenv);
-+#endif
+ #endif
- if (!(kenv->cr0 & CR0_TS_MASK)) {
- if (env->cpuid_features & CPUID_FXSR)
+ #ifdef _WIN32
Index: osdep.c
===================================================================
RCS file: /cvsroot/qemu/qemu/osdep.c,v
-retrieving revision 1.8
-diff -u -p -r1.8 osdep.c
---- osdep.c 21 Feb 2005 20:10:36 -0000 1.8
-+++ osdep.c 10 Apr 2005 23:34:05 -0000
-@@ -273,15 +273,13 @@ void *get_mmap_addr(unsigned long size)
-
- #else
-
--#ifdef _BSD
-+#ifdef _WIN32
-+#include <windows.h>
-+#elif defined(_BSD)
- #include <stdlib.h>
- #else
- #include <malloc.h>
- #endif
--#ifdef _WIN32
--/* XXX: find a solution to have page aligned data */
--#define memalign(align, size) malloc(size)
--#endif
-
- int qemu_write(int fd, const void *buf, size_t n)
- {
-@@ -308,7 +306,7 @@ void *qemu_malloc(size_t size)
- return malloc(size);
+retrieving revision 1.9
+diff -u -p -r1.9 osdep.c
+--- osdep.c 17 Apr 2005 18:33:47 -0000 1.9
++++ osdep.c 19 Apr 2005 12:10:21 -0000
+@@ -321,7 +321,7 @@ void qemu_vfree(void *ptr)
+ VirtualFree(ptr, 0, MEM_RELEASE);
}
--#if defined(USE_KQEMU)
-+#if 0 && defined(USE_KQEMU)
+-#elif defined(USE_KQEMU)
++#elif 0 && defined(USE_KQEMU)
#include <sys/mman.h>
#include <fcntl.h>
-@@ -373,7 +371,12 @@ void qemu_vfree(void *ptr)
- /* alloc shared memory pages */
- void *qemu_vmalloc(size_t size)
- {
--#ifdef _BSD
-+#ifdef _WIN32
-+ /* FIXME: this is not exactly optimal solution since VirtualAlloc
-+ has 64Kb granularity, but at least it guarantees us that the
-+ memory is page aligned. */
-+ return VirtualAlloc(NULL, size, MEM_COMMIT, PAGE_READWRITE);
-+#elif defined (_BSD)
- return valloc(size);
- #else
- return memalign(4096, size);
-@@ -382,7 +385,11 @@ void *qemu_vmalloc(size_t size)
-
- void qemu_vfree(void *ptr)
- {
-+#ifdef _WIN32
-+ VirtualFree(ptr, 0, MEM_RELEASE);
-+#else
- free(ptr);
-+#endif
- }
-
- #endif
Index: target-i386/helper2.c
===================================================================
RCS file: /cvsroot/qemu/qemu/target-i386/helper2.c,v
retrieving revision 1.32
diff -u -p -r1.32 helper2.c
--- target-i386/helper2.c 10 Feb 2005 22:06:29 -0000 1.32
-+++ target-i386/helper2.c 10 Apr 2005 23:34:05 -0000
++++ target-i386/helper2.c 19 Apr 2005 12:09:31 -0000
@@ -103,11 +103,11 @@ CPUX86State *cpu_x86_init(void)
#endif
#endif
Index: qvm86-win32.c
===================================================================
RCS file: /cvsroot/qvm86/qvm86/qvm86-win32.c,v
retrieving revision 1.2
diff -u -p -r1.2 qvm86-win32.c
--- qvm86-win32.c 10 Apr 2005 10:48:14 -0000 1.2
+++ qvm86-win32.c 19 Apr 2005 11:14:50 -0000
@@ -104,7 +104,7 @@ host_map_user(unsigned long useraddr, qv
return;
}
map->hostdata = mdl;
- map->phys = mdl_pages[0];
+ map->phys = mdl_pages[0] << PAGE_SHIFT;
map->refcount = 1;
}
- [qvm86-devel] [patch] More WinNT host fixes,
Filip Navara <=