[Qemu-devel] Re: qemu svn r5281 on FreeBSD - slow usb,
vmwarevga, screen updates... (now updated to r5313)
Juergen Lock
nox at jelal.kn-bremen.de
Fri Sep 26 22:07:20 UTC 2008
On Fri, Sep 26, 2008 at 10:04:28AM -0500, Anthony Liguori wrote:
> Matt wrote:
>>> Here is another experimental update that forces -lthr on 6.x, and
>>> also updates to qemu svn r5313:
>>> http://people.freebsd.org/~nox/qemu/qemu-devel-20080924.patch
>>>
>>
>> I just built this update and it seems to have fixed the issue. Host
>> CPU usage again tracks with guest CPU usage and all seems well. I'll
>> continue to use this build to see if anything else crops up.
>>
>> Please let me know if there is anything other information I can provide.
>>
>
> If ya'll have patches to make QEMU work on FreeBSD, please submit them.
> I'm about to commit a patch that's what it took for me to get SVN working
> on FreeBSD.
>
> The one thing that really tripped me up with the whole aio kld-module
> thing. Perhaps we should detect the presence of the module at run time and
> disable aio? I assume kldload can only be run as root?
Yes. Atm the ports print a warning when aio is not loaded:
Index: qemu/vl.c
@@ -8409,6 +8409,11 @@
tb_size = 0;
+#ifdef __FreeBSD__
+ if (modfind("aio") == -1)
+ fprintf(stderr, "warning: aio not (kld)loaded, may cause `Invalid system call' traps on disk IO\n");
+#endif
+
optind = 1;
for(;;) {
if (optind >= argc)
And here is another patch thats needed on amd64 hosts for tcg (which
I had posted before:)
Index: qemu/exec.c
@@ -405,6 +405,28 @@
exit(1);
}
}
+#elif defined(__FreeBSD__)
+ {
+ int flags;
+ void *addr = NULL;
+ flags = MAP_PRIVATE | MAP_ANONYMOUS;
+#if defined(__x86_64__)
+ /* FreeBSD doesn't have MAP_32BIT, use MAP_FIXED and assume
+ * 0x40000000 is free */
+ flags |= MAP_FIXED;
+ addr = (void *)0x40000000;
+ /* Cannot map more than that */
+ if (code_gen_buffer_size > (800 * 1024 * 1024))
+ code_gen_buffer_size = (800 * 1024 * 1024);
+#endif
+ code_gen_buffer = mmap(addr, code_gen_buffer_size,
+ PROT_WRITE | PROT_READ | PROT_EXEC,
+ flags, -1, 0);
+ if (code_gen_buffer == MAP_FAILED) {
+ fprintf(stderr, "Could not allocate dynamic translator buffer\n");
+ exit(1);
+ }
+ }
#else
code_gen_buffer = qemu_malloc(code_gen_buffer_size);
if (!code_gen_buffer) {
Signed-off-by: Juergen Lock <nox at jelal.kn-bremen.de>
I'll see if I can prepare another update over the weekend and then go
thru more of the patches that have accumulated in the port...
Thanx,
Juergen
More information about the freebsd-emulation
mailing list