Hello community, here is the log from the commit of package kvm for openSUSE:Factory checked in at Fri Aug 26 09:40:22 CEST 2011.
-------- --- kvm/kvm.changes 2011-08-05 15:17:20.000000000 +0200 +++ /mounts/work_src_done/STABLE/kvm/kvm.changes 2011-08-26 00:25:05.000000000 +0200 @@ -1,0 +2,15 @@ +Thu Aug 25 22:12:00 UTC 2011 - [email protected] + +- update to v0.15.0 + for details, see: http://wiki.qemu.org/ChangeLog/0.15 +- update to latest seabios (ahci is enabled there now) +- fix failures migrating or saving large memory vms when remaining + host memory is insuffienct (bnc#705095) +- fix for creating 1MB vm + +------------------------------------------------------------------- +Thu Aug 25 20:57:01 UTC 2011 - [email protected] + +- fix build: don't use deprecated functions + +------------------------------------------------------------------- calling whatdependson for head-i586 Old: ---- kvm-seabios-enable-ahci.patch qemu-kvm-0.15.rc1.tar.bz2 seabios-git-e0f87ce.tar.bz2 New: ---- kvm-qemu-fix-1mb-memory-assert.patch kvm-qemu-madvise-DONTFORK-for-tight-memory-migration.patch kvm-qemu-preXX-ui-avoid-deprecated-gnutls_-_set_priority-functions.patch qemu-kvm-0.15.0.tar.bz2 seabios-git-8e30147.tar.bz2 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ kvm.spec ++++++ --- /var/tmp/diff_new_pack.WFAvFp/_old 2011-08-26 09:35:51.000000000 +0200 +++ /var/tmp/diff_new_pack.WFAvFp/_new 2011-08-26 09:35:51.000000000 +0200 @@ -20,9 +20,9 @@ %bcond_with spice -%define package_true_version 0.15.rc1 +%define package_true_version 0.15.0 %define package_base_version 0.15.0 -%define bios_id seabios-git-e0f87ce +%define bios_id seabios-git-8e30147 %define pxe_rom_id ipxe-git-149b502 %define vgabios_id vgabios-0.6c @@ -73,6 +73,8 @@ %endif %endif %endif +BuildRequires: pwdutils +Requires: pwdutils Requires: virt-utils Requires: python-curses %if 0%{?suse_version} < 1110 @@ -101,14 +103,16 @@ Patch04: qemu-datadir.diff Patch05: kvm-qemu-default-memsize.patch Patch06: kvm-qemu-user-space-tool-name.patch -Patch07: kvm-seabios-enable-ahci.patch -Patch08: kvm-qemu-fix-unused-but-set.patch +Patch07: kvm-qemu-fix-unused-but-set.patch +Patch08: kvm-qemu-madvise-DONTFORK-for-tight-memory-migration.patch +Patch09: kvm-qemu-fix-1mb-memory-assert.patch # Post-release upstream patches Patch100: kvm-qemu-preXX-dictzip1.patch Patch101: kvm-qemu-preXX-dictzip2.patch Patch102: kvm-qemu-preXX-report-default-mac-used.patch Patch103: kvm-qemu-preXX-console.patch +Patch104: kvm-qemu-preXX-ui-avoid-deprecated-gnutls_-_set_priority-functions.patch Patch155: qemu-kvm-common-code-fixes-for-s390-build.patch @@ -190,11 +194,13 @@ %patch06 -p1 %patch07 -p1 %patch08 -p1 +%patch09 -p1 # Post-release patches %patch100 -p1 %patch101 -p1 %patch102 -p1 %patch103 -p1 +%patch104 -p1 %patch155 -p1 @@ -225,7 +231,7 @@ echo "kvm-%{version}-%{release}" > KVM_VERSION ./configure \ --prefix=%{_prefix} \ - --sysconfdir=/etc \ + --sysconfdir=%{_sysconfdir} \ --extra-cflags="%{optflags}" \ --disable-debug-tcg \ --disable-sparse \ @@ -285,7 +291,8 @@ sed -i 's/CFLAGS =/CFLAGS +=/' roms/vgabios/Makefile # userspace: -make %{?jobs:-j%jobs} +make +#make %{?jobs:-j%jobs} # Firmware %ifarch %ix86 x86_64 @@ -370,7 +377,7 @@ %attr(755,root,kvm) %{_bindir}/qemu-ga %attr(755,root,kvm) %{_bindir}/kvm_stat %{_datadir}/qemu-kvm -%dir %attr(0700, root, kvm) %{_sysconfdir}/qemu-kvm/ +%dir %attr(0755, root, kvm) %{_sysconfdir}/qemu-kvm/ %config %attr(644,root,kvm) %{_sysconfdir}/qemu-kvm/target-x86_64.conf %config %{_sysconfdir}/udev/rules.d/60-kvm.rules %_mandir/man1/qemu-kvm.1.gz ++++++ kvm-qemu-fix-1mb-memory-assert.patch ++++++ diff --git a/hw/pc.c b/hw/pc.c index c0a88e1..3412bfa 100644 --- a/hw/pc.c +++ b/hw/pc.c @@ -978,9 +978,10 @@ void pc_memory_init(const char *kernel_filename, ram_addr = qemu_ram_alloc(NULL, "pc.ram", below_4g_mem_size + above_4g_mem_size); cpu_register_physical_memory(0, 0xa0000, ram_addr); - cpu_register_physical_memory(0x100000, - below_4g_mem_size - 0x100000, - ram_addr + 0x100000); + if (below_4g_mem_size > 0x100000) { + cpu_register_physical_memory(0x100000, below_4g_mem_size - 0x100000, + ram_addr + 0x100000); + } if (above_4g_mem_size > 0) { cpu_register_physical_memory(0x100000000ULL, above_4g_mem_size, ram_addr + below_4g_mem_size); ++++++ kvm-qemu-madvise-DONTFORK-for-tight-memory-migration.patch ++++++ Index: qemu-kvm-0.15.0/exec.c =================================================================== --- qemu-kvm-0.15.0.orig/exec.c +++ qemu-kvm-0.15.0/exec.c @@ -2941,6 +2941,7 @@ ram_addr_t qemu_ram_alloc_from_ptr(Devic if (!new_block->host) { new_block->host = qemu_vmalloc(size); qemu_madvise(new_block->host, size, QEMU_MADV_MERGEABLE); + qemu_madvise(new_block->host, size, QEMU_MADV_DONTFORK); } #else fprintf(stderr, "-mem-path option unsupported\n"); @@ -2968,6 +2969,7 @@ ram_addr_t qemu_ram_alloc_from_ptr(Devic } #endif qemu_madvise(new_block->host, size, QEMU_MADV_MERGEABLE); + qemu_madvise(new_block->host, size, QEMU_MADV_DONTFORK); } } new_block->length = size; ++++++ kvm-qemu-preXX-ui-avoid-deprecated-gnutls_-_set_priority-functions.patch ++++++ From: Raghavendra D Prabhu <[email protected]> The gnutls_*_set_priority family of functions has been marked deprecated in 2.12.x. These functions have been superceded by gnutls_priority_set_direct(). Signed-off-by: Raghavendra D Prabhu <[email protected]> Signed-off-by: Daniel P. Berrange <[email protected]> Signed-off-by: Stefan Hajnoczi <[email protected]> --- Re-sending as a top-level patch because the other patches in the series have other issues/discussions. Let's get this independent patch in. ui/vnc-tls.c | 20 +------------------- 1 files changed, 1 insertions(+), 19 deletions(-) diff --git a/ui/vnc-tls.c b/ui/vnc-tls.c index 2e2456e..48c818a 100644 --- a/ui/vnc-tls.c +++ b/ui/vnc-tls.c @@ -286,10 +286,6 @@ int vnc_tls_validate_certificate(struct VncState *vs) int vnc_tls_client_setup(struct VncState *vs, int needX509Creds) { - static const int cert_type_priority[] = { GNUTLS_CRT_X509, 0 }; - static const int protocol_priority[]= { GNUTLS_TLS1_1, GNUTLS_TLS1_0, GNUTLS_SSL3, 0 }; - static const int kx_anon[] = {GNUTLS_KX_ANON_DH, 0}; - static const int kx_x509[] = {GNUTLS_KX_DHE_DSS, GNUTLS_KX_RSA, GNUTLS_KX_DHE_RSA, GNUTLS_KX_SRP, 0}; VNC_DEBUG("Do TLS setup\n"); if (vnc_tls_initialize() < 0) { @@ -310,21 +306,7 @@ int vnc_tls_client_setup(struct VncState *vs, return -1; } - if (gnutls_kx_set_priority(vs->tls.session, needX509Creds ? kx_x509 : kx_anon) < 0) { - gnutls_deinit(vs->tls.session); - vs->tls.session = NULL; - vnc_client_error(vs); - return -1; - } - - if (gnutls_certificate_type_set_priority(vs->tls.session, cert_type_priority) < 0) { - gnutls_deinit(vs->tls.session); - vs->tls.session = NULL; - vnc_client_error(vs); - return -1; - } - - if (gnutls_protocol_set_priority(vs->tls.session, protocol_priority) < 0) { + if (gnutls_priority_set_direct(vs->tls.session, needX509Creds ? "NORMAL" : "NORMAL:+ANON-DH", NULL) < 0) { gnutls_deinit(vs->tls.session); vs->tls.session = NULL; vnc_client_error(vs); -- 1.7.5.4 ++++++ qemu-datadir.diff ++++++ --- /var/tmp/diff_new_pack.WFAvFp/_old 2011-08-26 09:35:51.000000000 +0200 +++ /var/tmp/diff_new_pack.WFAvFp/_new 2011-08-26 09:35:51.000000000 +0200 @@ -1,8 +1,8 @@ -Index: qemu-kvm-0.15.rc0/configure +Index: qemu-kvm-0.15.0/configure =================================================================== ---- qemu-kvm-0.15.rc0.orig/configure -+++ qemu-kvm-0.15.rc0/configure -@@ -152,7 +152,7 @@ mingw32="no" +--- qemu-kvm-0.15.0.orig/configure ++++ qemu-kvm-0.15.0/configure +@@ -152,12 +152,12 @@ mingw32="no" EXESUF="" prefix="/usr/local" mandir="\${prefix}/share/man" @@ -11,10 +11,16 @@ docdir="\${prefix}/share/doc/qemu" bindir="\${prefix}/bin" libdir="\${prefix}/lib" -Index: qemu-kvm-0.15.rc0/os-posix.c + sysconfdir="\${prefix}/etc" +-confsuffix="/qemu" ++confsuffix="/qemu-kvm" + slirp="yes" + fmod_lib="" + fmod_inc="" +Index: qemu-kvm-0.15.0/os-posix.c =================================================================== ---- qemu-kvm-0.15.rc0.orig/os-posix.c -+++ qemu-kvm-0.15.rc0/os-posix.c +--- qemu-kvm-0.15.0.orig/os-posix.c ++++ qemu-kvm-0.15.0/os-posix.c @@ -83,7 +83,7 @@ void os_setup_signal_handling(void) /* Find a likely location for support files using the location of the binary. For installed binaries this will be "$bindir/../share/qemu". When @@ -24,11 +30,11 @@ #define BUILD_SUFFIX "/pc-bios" char *os_find_datadir(const char *argv0) { -Index: qemu-kvm-0.15.rc0/Makefile +Index: qemu-kvm-0.15.0/Makefile =================================================================== ---- qemu-kvm-0.15.rc0.orig/Makefile -+++ qemu-kvm-0.15.rc0/Makefile -@@ -261,8 +261,8 @@ ifdef CONFIG_POSIX +--- qemu-kvm-0.15.0.orig/Makefile ++++ qemu-kvm-0.15.0/Makefile +@@ -263,8 +263,8 @@ ifdef CONFIG_POSIX endif install-sysconfig: ++++++ qemu-kvm-0.15.rc1.tar.bz2 -> qemu-kvm-0.15.0.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qemu-kvm-0.15.rc1/Makefile new/qemu-kvm-0.15.0/Makefile --- old/qemu-kvm-0.15.rc1/Makefile 2011-07-31 11:01:56.000000000 +0200 +++ new/qemu-kvm-0.15.0/Makefile 2011-08-09 14:40:29.000000000 +0200 @@ -192,8 +192,10 @@ test-qmp-commands: test-qmp-commands.o qfloat.o qint.o qdict.o qstring.o qlist.o qbool.o $(qapi-obj-y) error.o osdep.o qemu-malloc.o $(oslib-obj-y) qjson.o json-streamer.o json-lexer.o json-parser.o qerror.o qemu-error.o qemu-tool.o $(qapi-dir)/test-qapi-visit.o $(qapi-dir)/test-qapi-types.o $(qapi-dir)/test-qmp-marshal.o module.o QGALIB=qga/guest-agent-command-state.o qga/guest-agent-commands.o +QGALIB_GEN=$(addprefix $(qapi-dir)/, qga-qapi-types.c qga-qapi-types.h qga-qapi-visit.c qga-qmp-marshal.c) -qemu-ga.o: $(addprefix $(qapi-dir)/, qga-qapi-types.c qga-qapi-types.h qga-qapi-visit.c qga-qmp-marshal.c) $(qapi-obj-y) +$(QGALIB_GEN): $(GENERATED_HEADERS) +$(QGALIB) qemu-ga.o: $(QGALIB_GEN) $(qapi-obj-y) qemu-ga$(EXESUF): qemu-ga.o $(QGALIB) qemu-tool.o qemu-error.o error.o $(oslib-obj-y) $(trace-obj-y) $(block-obj-y) $(qobject-obj-y) $(version-obj-y) $(qapi-obj-y) qemu-timer-common.o qemu-sockets.o module.o qapi/qmp-dispatch.o qapi/qmp-registry.o $(qapi-dir)/qga-qapi-visit.o $(qapi-dir)/qga-qapi-types.o $(qapi-dir)/qga-qmp-marshal.o QEMULIBS=libhw32 libhw64 libuser libdis libdis-user diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qemu-kvm-0.15.rc1/VERSION new/qemu-kvm-0.15.0/VERSION --- old/qemu-kvm-0.15.rc1/VERSION 2011-07-31 11:01:56.000000000 +0200 +++ new/qemu-kvm-0.15.0/VERSION 2011-08-09 14:40:29.000000000 +0200 @@ -1 +1 @@ -0.14.91 +0.15.0 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qemu-kvm-0.15.rc1/block/qcow2-snapshot.c new/qemu-kvm-0.15.0/block/qcow2-snapshot.c --- old/qemu-kvm-0.15.rc1/block/qcow2-snapshot.c 2011-07-31 11:01:56.000000000 +0200 +++ new/qemu-kvm-0.15.0/block/qcow2-snapshot.c 2011-08-09 14:40:29.000000000 +0200 @@ -317,7 +317,8 @@ { BDRVQcowState *s = bs->opaque; QCowSnapshot *sn; - int i, snapshot_index, l1_size2; + int i, snapshot_index; + int cur_l1_bytes, sn_l1_bytes; snapshot_index = find_snapshot_by_id_or_name(bs, snapshot_id); if (snapshot_index < 0) @@ -330,14 +331,19 @@ if (qcow2_grow_l1_table(bs, sn->l1_size, true) < 0) goto fail; - s->l1_size = sn->l1_size; - l1_size2 = s->l1_size * sizeof(uint64_t); + cur_l1_bytes = s->l1_size * sizeof(uint64_t); + sn_l1_bytes = sn->l1_size * sizeof(uint64_t); + + if (cur_l1_bytes > sn_l1_bytes) { + memset(s->l1_table + sn->l1_size, 0, cur_l1_bytes - sn_l1_bytes); + } + /* copy the snapshot l1 table to the current l1 table */ if (bdrv_pread(bs->file, sn->l1_table_offset, - s->l1_table, l1_size2) != l1_size2) + s->l1_table, sn_l1_bytes) < 0) goto fail; if (bdrv_pwrite_sync(bs->file, s->l1_table_offset, - s->l1_table, l1_size2) < 0) + s->l1_table, cur_l1_bytes) < 0) goto fail; for(i = 0;i < s->l1_size; i++) { be64_to_cpus(&s->l1_table[i]); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qemu-kvm-0.15.rc1/bsd-user/main.c new/qemu-kvm-0.15.0/bsd-user/main.c --- old/qemu-kvm-0.15.rc1/bsd-user/main.c 2011-07-31 11:01:56.000000000 +0200 +++ new/qemu-kvm-0.15.0/bsd-user/main.c 2011-08-09 14:40:29.000000000 +0200 @@ -856,9 +856,6 @@ usage(); } } - if (optind >= argc) - usage(); - filename = argv[optind]; /* init debug */ cpu_set_log_filename(log_file); @@ -877,6 +874,11 @@ cpu_set_log(mask); } + if (optind >= argc) { + usage(); + } + filename = argv[optind]; + /* Zero out regs */ memset(regs, 0, sizeof(struct target_pt_regs)); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qemu-kvm-0.15.rc1/configure new/qemu-kvm-0.15.0/configure --- old/qemu-kvm-0.15.rc1/configure 2011-07-31 11:01:56.000000000 +0200 +++ new/qemu-kvm-0.15.0/configure 2011-08-09 14:40:29.000000000 +0200 @@ -192,6 +192,7 @@ smartcard_nss="" usb_redir="" opengl="" +guest_agent="yes" # parse CC options first for opt do @@ -781,6 +782,10 @@ ;; --enable-usb-redir) usb_redir="yes" ;; + --enable-guest-agent) guest_agent="yes" + ;; + --disable-guest-agent) guest_agent="no" + ;; *) echo "ERROR: unknown option $opt"; show_help="yes" ;; esac @@ -870,7 +875,6 @@ default_target_list="\ i386-softmmu \ x86_64-softmmu \ -alpha-softmmu \ arm-softmmu \ cris-softmmu \ lm32-softmmu \ @@ -1064,6 +1068,8 @@ echo " --enable-smartcard-nss enable smartcard nss support" echo " --disable-usb-redir disable usb network redirection support" echo " --enable-usb-redir enable usb network redirection support" +echo " --disable-guest-agent disable building of the QEMU Guest Agent" +echo " --enable-guest-agent enable building of the QEMU Guest Agent" echo "" echo "NOTE: The object files are built at the place where configure is launched" exit 1 @@ -1123,11 +1129,13 @@ fi fi -if has $python; then - : -else - echo "Python not found. Use --python=/path/to/python" - exit 1 +if test "$guest_agent" != "no" ; then + if has $python; then + : + else + echo "Python not found. Use --python=/path/to/python" + exit 1 + fi fi if test -z "$target_list" ; then @@ -1857,14 +1865,16 @@ ########################################## # glib support probe -if $pkg_config --modversion glib-2.0 > /dev/null 2>&1 ; then - glib_cflags=`$pkg_config --cflags glib-2.0 2>/dev/null` - glib_libs=`$pkg_config --libs glib-2.0 2>/dev/null` - libs_softmmu="$glib_libs $libs_softmmu" - libs_tools="$glib_libs $libs_tools" -else - echo "glib-2.0 required to compile QEMU" - exit 1 +if test "$guest_agent" != "no" ; then + if $pkg_config --modversion glib-2.0 > /dev/null 2>&1 ; then + glib_cflags=`$pkg_config --cflags glib-2.0 2>/dev/null` + glib_libs=`$pkg_config --libs glib-2.0 2>/dev/null` + libs_softmmu="$glib_libs $libs_softmmu" + libs_tools="$glib_libs $libs_tools" + else + echo "glib-2.0 required to compile QEMU" + exit 1 + fi fi ########################################## @@ -2566,6 +2576,29 @@ fi ########################################## +# __sync_fetch_and_and requires at least -march=i486. Many toolchains +# use i686 as default anyway, but for those that don't, an explicit +# specification is necessary +if test $vhost_net = "yes" && test $cpu = "i386"; then + cat > $TMPC << EOF +int sfaa(unsigned *ptr) +{ + return __sync_fetch_and_and(ptr, 0); +} + +int main(int argc, char **argv) +{ + int val = 42; + sfaa(&val); + return val; +} +EOF + if ! compile_prog "" "" ; then + CFLAGS+="-march=i486" + fi +fi + +########################################## # End of CC checks # After here, no more $cc or $ld runs @@ -2622,7 +2655,9 @@ tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) $tools" if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then tools="qemu-nbd\$(EXESUF) $tools" + if [ "$guest_agent" = "yes" ]; then tools="qemu-ga\$(EXESUF) $tools" + fi if [ "$check_utests" = "yes" ]; then tools="check-qint check-qstring check-qdict check-qlist $tools" tools="check-qfloat check-qjson $tools" @@ -2726,6 +2761,7 @@ echo "nss used $smartcard_nss" echo "usb net redir $usb_redir" echo "OpenGL support $opengl" +echo "build guest agent $guest_agent" if test $sdl_too_old = "yes"; then echo "-> Your SDL version is too old - please upgrade to have SDL support" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qemu-kvm-0.15.rc1/darwin-user/main.c new/qemu-kvm-0.15.0/darwin-user/main.c --- old/qemu-kvm-0.15.rc1/darwin-user/main.c 2011-07-31 11:01:56.000000000 +0200 +++ new/qemu-kvm-0.15.0/darwin-user/main.c 2011-08-09 14:40:29.000000000 +0200 @@ -809,9 +809,6 @@ usage(); } } - if (optind >= argc) - usage(); - filename = argv[optind]; /* init debug */ cpu_set_log_filename(log_file); @@ -830,6 +827,11 @@ cpu_set_log(mask); } + if (optind >= argc) { + usage(); + } + filename = argv[optind]; + /* Zero out regs */ memset(regs, 0, sizeof(struct target_pt_regs)); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qemu-kvm-0.15.rc1/hw/fdc.c new/qemu-kvm-0.15.0/hw/fdc.c --- old/qemu-kvm-0.15.rc1/hw/fdc.c 2011-07-31 11:01:56.000000000 +0200 +++ new/qemu-kvm-0.15.0/hw/fdc.c 2011-08-09 14:40:29.000000000 +0200 @@ -36,7 +36,6 @@ #include "qdev-addr.h" #include "blockdev.h" #include "sysemu.h" -#include "block_int.h" /********************************************************/ /* debug Floppy devices */ @@ -83,7 +82,6 @@ uint8_t max_track; /* Nb of tracks */ uint16_t bps; /* Bytes per sector */ uint8_t ro; /* Is read-only */ - uint8_t media_changed; /* Is media changed */ } FDrive; static void fd_init(FDrive *drv) @@ -535,63 +533,16 @@ NULL, }; -static void fdrive_media_changed_pre_save(void *opaque) -{ - FDrive *drive = opaque; - - drive->media_changed = drive->bs->media_changed; -} - -static int fdrive_media_changed_post_load(void *opaque, int version_id) -{ - FDrive *drive = opaque; - - if (drive->bs != NULL) { - drive->bs->media_changed = drive->media_changed; - } - - /* User ejected the floppy when drive->bs == NULL */ - return 0; -} - -static bool fdrive_media_changed_needed(void *opaque) -{ - FDrive *drive = opaque; - - return (drive->bs != NULL && drive->bs->media_changed != 1); -} - -static const VMStateDescription vmstate_fdrive_media_changed = { - .name = "fdrive/media_changed", - .version_id = 1, - .minimum_version_id = 1, - .minimum_version_id_old = 1, - .pre_save = fdrive_media_changed_pre_save, - .post_load = fdrive_media_changed_post_load, - .fields = (VMStateField[]) { - VMSTATE_UINT8(media_changed, FDrive), - VMSTATE_END_OF_LIST() - } -}; - static const VMStateDescription vmstate_fdrive = { .name = "fdrive", .version_id = 1, .minimum_version_id = 1, .minimum_version_id_old = 1, - .fields = (VMStateField[]) { + .fields = (VMStateField []) { VMSTATE_UINT8(head, FDrive), VMSTATE_UINT8(track, FDrive), VMSTATE_UINT8(sect, FDrive), VMSTATE_END_OF_LIST() - }, - .subsections = (VMStateSubsection[]) { - { - .vmsd = &vmstate_fdrive_media_changed, - .needed = &fdrive_media_changed_needed, - } , { - /* empty */ - } } }; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qemu-kvm-0.15.rc1/hw/milkymist-softusb.c new/qemu-kvm-0.15.0/hw/milkymist-softusb.c --- old/qemu-kvm-0.15.rc1/hw/milkymist-softusb.c 2011-07-31 11:01:56.000000000 +0200 +++ new/qemu-kvm-0.15.0/hw/milkymist-softusb.c 2011-08-09 14:40:29.000000000 +0200 @@ -310,10 +310,12 @@ usb_bus_new(&s->usbbus, &softusb_bus_ops, NULL); /* our two ports */ + /* FIXME: claim to support full speed devices. qemu mouse and keyboard + * report themselves as full speed devices. */ usb_register_port(&s->usbbus, &s->usbport[0], NULL, 0, &softusb_ops, - USB_SPEED_MASK_LOW); + USB_SPEED_MASK_LOW | USB_SPEED_MASK_FULL); usb_register_port(&s->usbbus, &s->usbport[1], NULL, 1, &softusb_ops, - USB_SPEED_MASK_LOW); + USB_SPEED_MASK_LOW | USB_SPEED_MASK_FULL); /* and finally create an usb keyboard */ s->usbdev = usb_create_simple(&s->usbbus, "usb-kbd"); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qemu-kvm-0.15.rc1/linux-user/main.c new/qemu-kvm-0.15.0/linux-user/main.c --- old/qemu-kvm-0.15.rc1/linux-user/main.c 2011-07-31 11:01:56.000000000 +0200 +++ new/qemu-kvm-0.15.0/linux-user/main.c 2011-08-09 14:40:29.000000000 +0200 @@ -3048,11 +3048,6 @@ usage(); } } - if (optind >= argc) - usage(); - filename = argv[optind]; - exec_path = argv[optind]; - /* init debug */ cpu_set_log_filename(log_file); if (log_mask) { @@ -3070,6 +3065,12 @@ cpu_set_log(mask); } + if (optind >= argc) { + usage(); + } + filename = argv[optind]; + exec_path = argv[optind]; + /* Zero out regs */ memset(regs, 0, sizeof(struct target_pt_regs)); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qemu-kvm-0.15.rc1/vl.c new/qemu-kvm-0.15.0/vl.c --- old/qemu-kvm-0.15.rc1/vl.c 2011-07-31 11:01:56.000000000 +0200 +++ new/qemu-kvm-0.15.0/vl.c 2011-08-09 14:40:29.000000000 +0200 @@ -1953,8 +1953,13 @@ } if (p == NULL) { +#ifdef CONFIG_KVM /* Use the default "accelerator", kvm */ p = "kvm"; +#else + /* Use the default "accelerator", tcg */ + p = "tcg"; +#endif } while (!accel_initalised && *p != '\0') { ++++++ seabios-git-e0f87ce.tar.bz2 -> seabios-git-8e30147.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/roms/seabios/src/Kconfig new/roms/seabios/src/Kconfig --- old/roms/seabios/src/Kconfig 2011-07-30 01:21:07.000000000 +0200 +++ new/roms/seabios/src/Kconfig 2011-08-10 04:54:35.000000000 +0200 @@ -104,7 +104,7 @@ config AHCI depends on DRIVES bool "AHCI controllers" - default n + default y help Support for AHCI disk code. config VIRTIO_BLK diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/roms/seabios/src/ahci.c new/roms/seabios/src/ahci.c --- old/roms/seabios/src/ahci.c 2011-07-30 01:21:07.000000000 +0200 +++ new/roms/seabios/src/ahci.c 2011-08-10 04:54:35.000000000 +0200 @@ -24,7 +24,6 @@ /**************************************************************** * these bits must run in both 16bit and 32bit modes ****************************************************************/ -u8 *ahci_buf_fl VAR16VISIBLE; // prepare sata command fis static void sata_prep_simple(struct sata_cmd_fis *fis, u8 command) @@ -269,7 +268,7 @@ // Use a word aligned buffer for AHCI I/O int rc; struct disk_op_s localop = *op; - u8 *alignedbuf_fl = GET_GLOBAL(ahci_buf_fl); + u8 *alignedbuf_fl = GET_GLOBAL(bounce_buf_fl); u8 *position = op->buf_fl; localop.buf_fl = alignedbuf_fl; @@ -384,7 +383,7 @@ static struct ahci_port_s* ahci_port_alloc(struct ahci_ctrl_s *ctrl, u32 pnr) { - struct ahci_port_s *port = malloc_fseg(sizeof(*port)); + struct ahci_port_s *port = malloc_tmp(sizeof(*port)); if (!port) { warn_noalloc(); @@ -408,10 +407,16 @@ return port; } -static void ahci_port_realloc(struct ahci_port_s *port) +static struct ahci_port_s* ahci_port_realloc(struct ahci_port_s *port) { + struct ahci_port_s *tmp; u32 cmd; + tmp = malloc_fseg(sizeof(*port)); + *tmp = *port; + free(port); + port = tmp; + ahci_port_reset(port->ctrl, port->pnr); free(port->list); @@ -427,6 +432,8 @@ cmd = ahci_port_readl(port->ctrl, port->pnr, PORT_CMD); cmd |= (PORT_CMD_FIS_RX|PORT_CMD_START); ahci_port_writel(port->ctrl, port->pnr, PORT_CMD, cmd); + + return port; } static void ahci_port_release(struct ahci_port_s *port) @@ -532,62 +539,54 @@ adjsize >>= 10; adjprefix = 'G'; } - char *desc = znprintf(MAXDESCSIZE + port->desc = znprintf(MAXDESCSIZE , "AHCI/%d: %s ATA-%d Hard-Disk (%u %ciBytes)" , port->pnr , ata_extract_model(model, MAXMODEL, buffer) , ata_extract_version(buffer) , (u32)adjsize, adjprefix); - dprintf(1, "%s\n", desc); - - // Register with bcv system. - int prio = bootprio_find_ata_device(ctrl->pci_tmp, pnr, 0); - boot_add_hd(&port->drive, desc, prio); + port->prio = bootprio_find_ata_device(ctrl->pci_tmp, pnr, 0); } else { // found cdrom (atapi) port->drive.blksize = CDROM_SECTOR_SIZE; port->drive.sectors = (u64)-1; u8 iscd = ((buffer[0] >> 8) & 0x1f) == 0x05; - char *desc = znprintf(MAXDESCSIZE - , "DVD/CD [AHCI/%d: %s ATAPI-%d %s]" + if (!iscd) { + dprintf(1, "AHCI/%d: atapi device is'nt a cdrom\n", port->pnr); + return -1; + } + port->desc = znprintf(MAXDESCSIZE + , "DVD/CD [AHCI/%d: %s ATAPI-%d DVD/CD]" , port->pnr , ata_extract_model(model, MAXMODEL, buffer) - , ata_extract_version(buffer) - , (iscd ? "DVD/CD" : "Device")); - dprintf(1, "%s\n", desc); - - // fill cdidmap - if (iscd) { - int prio = bootprio_find_ata_device(ctrl->pci_tmp, pnr, 0); - boot_add_cd(&port->drive, desc, prio); - } + , ata_extract_version(buffer)); + port->prio = bootprio_find_ata_device(ctrl->pci_tmp, pnr, 0); } return 0; } // Detect any drives attached to a given controller. static void -ahci_detect(void *data) +ahci_port_detect(void *data) { - struct ahci_ctrl_s *ctrl = data; - struct ahci_port_s *port; - u32 pnr, max; + struct ahci_port_s *port = data; int rc; - max = ctrl->caps & 0x1f; - for (pnr = 0; pnr <= max; pnr++) { - if (!(ctrl->ports & (1 << pnr))) - continue; - dprintf(2, "AHCI/%d: probing\n", pnr); - ahci_port_reset(ctrl, pnr); - port = ahci_port_alloc(ctrl, pnr); - if (port == NULL) - continue; - rc = ahci_port_init(port); - if (rc < 0) - ahci_port_release(port); - else - ahci_port_realloc(port); + dprintf(2, "AHCI/%d: probing\n", port->pnr); + ahci_port_reset(port->ctrl, port->pnr); + rc = ahci_port_init(port); + if (rc < 0) + ahci_port_release(port); + else { + port = ahci_port_realloc(port); + dprintf(1, "AHCI/%d: registering: \"%s\"\n", port->pnr, port->desc); + if (!port->atapi) { + // Register with bcv system. + boot_add_hd(&port->drive, port->desc, port->prio); + } else { + // fill cdidmap + boot_add_cd(&port->drive, port->desc, port->prio); + } } } @@ -596,17 +595,18 @@ ahci_init_controller(struct pci_device *pci) { struct ahci_ctrl_s *ctrl = malloc_fseg(sizeof(*ctrl)); + struct ahci_port_s *port; u16 bdf = pci->bdf; - u32 val; + u32 val, pnr, max; if (!ctrl) { warn_noalloc(); return; } - ahci_buf_fl = malloc_low(DISK_SECTOR_SIZE); - if (!ahci_buf_fl) { + if (bounce_buf_init() < 0) { warn_noalloc(); + free(ctrl); return; } @@ -628,7 +628,15 @@ dprintf(2, "AHCI: cap 0x%x, ports_impl 0x%x\n", ctrl->caps, ctrl->ports); - run_thread(ahci_detect, ctrl); + max = ctrl->caps & 0x1f; + for (pnr = 0; pnr <= max; pnr++) { + if (!(ctrl->ports & (1 << pnr))) + continue; + port = ahci_port_alloc(ctrl, pnr); + if (port == NULL) + continue; + run_thread(ahci_port_detect, port); + } } // Locate and init ahci controllers. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/roms/seabios/src/ahci.h new/roms/seabios/src/ahci.h --- old/roms/seabios/src/ahci.h 2011-07-30 01:21:07.000000000 +0200 +++ new/roms/seabios/src/ahci.h 2011-08-10 04:54:35.000000000 +0200 @@ -75,6 +75,8 @@ struct ahci_cmd_s *cmd; u32 pnr; u32 atapi; + char *desc; + int prio; }; void ahci_setup(void); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/roms/seabios/src/block.c new/roms/seabios/src/block.c --- old/roms/seabios/src/block.c 2011-07-30 01:21:07.000000000 +0200 +++ new/roms/seabios/src/block.c 2011-08-10 04:54:35.000000000 +0200 @@ -17,6 +17,7 @@ u8 FloppyCount VAR16VISIBLE; u8 CDCount; struct drive_s *IDMap[3][CONFIG_MAX_EXTDRIVE] VAR16VISIBLE; +u8 *bounce_buf_fl VAR16VISIBLE; struct drive_s * getDrive(u8 exttype, u8 extdriveoffset) @@ -38,6 +39,19 @@ return -1; } +int bounce_buf_init(void) +{ + if (bounce_buf_fl) + return 0; + + u8 *buf = malloc_low(CDROM_SECTOR_SIZE); + if (!buf) { + warn_noalloc(); + return -1; + } + bounce_buf_fl = buf; + return 0; +} /**************************************************************** * Disk geometry translation diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/roms/seabios/src/cdrom.c new/roms/seabios/src/cdrom.c --- old/roms/seabios/src/cdrom.c 2011-07-30 01:21:07.000000000 +0200 +++ new/roms/seabios/src/cdrom.c 2011-08-10 04:54:35.000000000 +0200 @@ -18,7 +18,6 @@ ****************************************************************/ struct drive_s *cdemu_drive_gf VAR16VISIBLE; -u8 *cdemu_buf_fl VAR16VISIBLE; static int cdemu_read(struct disk_op_s *op) @@ -33,7 +32,7 @@ int count = op->count; op->count = 0; - u8 *cdbuf_fl = GET_GLOBAL(cdemu_buf_fl); + u8 *cdbuf_fl = GET_GLOBAL(bounce_buf_fl); if (op->lba & 3) { // Partial read of first block. @@ -111,17 +110,16 @@ return; if (!CDCount) return; + if (bounce_buf_init() < 0) + return; struct drive_s *drive_g = malloc_fseg(sizeof(*drive_g)); - u8 *buf = malloc_low(CDROM_SECTOR_SIZE); - if (!drive_g || !buf) { + if (!drive_g) { warn_noalloc(); free(drive_g); - free(buf); return; } cdemu_drive_gf = drive_g; - cdemu_buf_fl = buf; memset(drive_g, 0, sizeof(*drive_g)); drive_g->type = DTYPE_CDEMU; drive_g->blksize = DISK_SECTOR_SIZE; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/roms/seabios/src/config.h new/roms/seabios/src/config.h --- old/roms/seabios/src/config.h 2011-07-30 01:21:07.000000000 +0200 +++ new/roms/seabios/src/config.h 2011-08-10 04:54:35.000000000 +0200 @@ -51,6 +51,8 @@ #define BUILD_SMM_ADDR 0xa8000 #define BUILD_SMM_SIZE 0x8000 +#define BUILD_MAX_SMBIOS_FSEG 600 + // Important real-mode segments #define SEG_IVT 0x0000 #define SEG_BDA 0x0040 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/roms/seabios/src/disk.h new/roms/seabios/src/disk.h --- old/roms/seabios/src/disk.h 2011-07-30 01:21:07.000000000 +0200 +++ new/roms/seabios/src/disk.h 2011-08-10 04:54:35.000000000 +0200 @@ -229,6 +229,7 @@ // block.c extern u8 FloppyCount, CDCount; +extern u8 *bounce_buf_fl; struct drive_s *getDrive(u8 exttype, u8 extdriveoffset); int getDriveId(u8 exttype, struct drive_s *drive_g); void map_floppy_drive(struct drive_s *drive_g); @@ -236,6 +237,7 @@ void map_cd_drive(struct drive_s *drive_g); int process_op(struct disk_op_s *op); int send_disk_op(struct disk_op_s *op); +int bounce_buf_init(void); // floppy.c extern struct floppy_ext_dbt_s diskette_param_table2; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/roms/seabios/src/optionroms.c new/roms/seabios/src/optionroms.c --- old/roms/seabios/src/optionroms.c 2011-07-30 01:21:07.000000000 +0200 +++ new/roms/seabios/src/optionroms.c 2011-08-10 04:54:35.000000000 +0200 @@ -483,7 +483,7 @@ init_optionrom((void*)BUILD_ROM_START, 0, 1); } else { // Clear option rom memory - memset((void*)RomEnd, 0, _max_rom() - RomEnd); + memset((void*)RomEnd, 0, max_rom() - RomEnd); // Find and deploy PCI VGA rom. struct pci_device *pci; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/roms/seabios/src/pciinit.c new/roms/seabios/src/pciinit.c --- old/roms/seabios/src/pciinit.c 2011-07-30 01:21:07.000000000 +0200 +++ new/roms/seabios/src/pciinit.c 2011-08-10 04:54:35.000000000 +0200 @@ -607,6 +607,11 @@ pci_bios_init_device_in_bus(0 /* host bus */); + struct pci_device *pci; + foreachpci(pci) { + pci_init_device(pci_isa_bridge_tbl, pci, NULL); + } + free(busses); busses_count = 0; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/roms/seabios/src/pmm.c new/roms/seabios/src/pmm.c --- old/roms/seabios/src/pmm.c 2011-07-30 01:21:07.000000000 +0200 +++ new/roms/seabios/src/pmm.c 2011-08-10 04:54:35.000000000 +0200 @@ -216,6 +216,13 @@ struct zone_s *zone = Zones[i]; zone->info->pprev = &zone->info; } + + // Add space free'd during relocation in f-segment to ZoneFSeg + extern u8 code32init_end[]; + if ((u32)code32init_end > BUILD_BIOS_ADDR) { + memset((void*)BUILD_BIOS_ADDR, 0, (u32)code32init_end - BUILD_BIOS_ADDR); + addSpace(&ZoneFSeg, (void*)BUILD_BIOS_ADDR, code32init_end); + } } void diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/roms/seabios/src/smbios.c new/roms/seabios/src/smbios.c --- old/roms/seabios/src/smbios.c 2011-07-30 01:21:07.000000000 +0200 +++ new/roms/seabios/src/smbios.c 2011-08-10 04:54:35.000000000 +0200 @@ -17,7 +17,13 @@ u16 number_of_structures) { struct smbios_entry_point *ep = malloc_fseg(sizeof(*ep)); - void *finaltable = malloc_high(structure_table_length); + void *finaltable; + if (structure_table_length <= BUILD_MAX_SMBIOS_FSEG) + // Table is small enough for f-seg - allocate there. This + // works around a bug in JunOS (at least for small SMBIOS tables). + finaltable = malloc_fseg(structure_table_length); + else + finaltable = malloc_high(structure_table_length); if (!ep || !finaltable) { warn_noalloc(); free(ep); @@ -44,7 +50,8 @@ ep->intermediate_checksum -= checksum((void*)ep + 0x10, ep->length - 0x10); - dprintf(1, "SMBIOS ptr=%p table=%p\n", ep, finaltable); + dprintf(1, "SMBIOS ptr=%p table=%p size=%d\n" + , ep, finaltable, structure_table_length); } #define load_str_field_with_default(type, field, def) \ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Remember to have fun... -- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
