trivial patches for 2014-04-28

-----BEGIN PGP SIGNATURE-----
 Version: GnuPG v1.4.12 (GNU/Linux)
 
 iQEcBAABAgAGBQJTXd9hAAoJEL7lnXSkw9fb9XUIAKRVB/RAIuaQExVDOxq1C6ml
 o9gpFbCm1rE/fDB3fxUdppMxeOy4nLaX+H/RspYCtzEF8QBWA+OXiB5sH19I2Yd5
 1eiseNXimTMIWIJNwqgXCEabxOE2ae/9kQWry7pI3F7u2cA8EZZlgUIDzO5ogREj
 bi+Fy6KDlrMCLUBxtmoAkOnDPbTdnkVxu3Uv/oBFcrNCgklpGitIM+dMcayCUJ2q
 Mp2M/jRrGsCVB+cTpEbzqPoC/l2Xv6VYAvnjQWvJM9RpitzghufVAJ9IJa1xJM83
 2F05MEIr6h+ymLB7qh8x2lrJHN14O3t50uFaXL//om9JPlPei9lHQhfpVrg0UmQ=
 =2Bsm
 -----END PGP SIGNATURE-----

Merge remote-tracking branch 'remotes/mjt/tags/trivial-patches-2014-04-28' into staging

trivial patches for 2014-04-28

# gpg: Signature made Mon 28 Apr 2014 05:56:01 BST using RSA key ID A4C3D7DB
# gpg: Good signature from "Michael Tokarev <mjt@tls.msk.ru>"
# gpg:                 aka "Michael Tokarev <mjt@corpit.ru>"
# gpg:                 aka "Michael Tokarev <mjt@debian.org>"
# gpg: WARNING: This key is not certified with a trusted signature!
# gpg:          There is no indication that the signature belongs to the owner.
# Primary key fingerprint: 6EE1 95D1 886E 8FFB 810D  4324 457C E0A0 8044 65C5
#      Subkey fingerprint: 6F67 E18E 7C91 C5B1 5514  66A7 BEE5 9D74 A4C3 D7DB

* remotes/mjt/tags/trivial-patches-2014-04-28:
  slirp/smb: Move ncalrpc directory to tmp
  po: add proper Language: tags to .po files
  po/Makefile: fix $SRC_PATH reference
  init_paths: fix minor memory leak
  virtfs-proxy-helper: fix call to accept
  net/net.c: remove unnecessary semicolon
  Add QEMU logo (SVG file)
  vl: avoid closing stdout with 'writeconfig'
  xilinx: Fix typo in comment (Marvel -> Marvell)
  vl: Eliminate a superfluous local variable
  vl: Remove useless 'continue'
  gitignore: cleanups #2
  tests/.gitignore: Ignore test-rfifolock
  move test-* from .gitignore to tests/.gitignore
  configure: Improve help behavior
  vl: convert -m to QemuOpts
  qemu-option: introduce qemu_find_opts_singleton
  misc: Use cpu_physical_memory_read and cpu_physical_memory_write

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
Peter Maydell 2014-04-28 13:43:16 +01:00
commit 93156cef1c
22 changed files with 1155 additions and 92 deletions

18
.gitignore vendored
View File

@ -18,8 +18,8 @@
/*-darwin-user /*-darwin-user
/*-linux-user /*-linux-user
/*-bsd-user /*-bsd-user
libdis* /libdis*
libuser /libuser
/linux-headers/asm /linux-headers/asm
/qga/qapi-generated /qga/qapi-generated
/qapi-generated /qapi-generated
@ -49,19 +49,9 @@ libuser
/qemu-monitor.texi /qemu-monitor.texi
/qmp-commands.txt /qmp-commands.txt
/vscclient /vscclient
/test-bitops
/test-coroutine
/test-int128
/test-opts-visitor
/test-qmp-input-visitor
/test-qmp-output-visitor
/test-string-input-visitor
/test-string-output-visitor
/test-visitor-serialization
/fsdev/virtfs-proxy-helper /fsdev/virtfs-proxy-helper
/fsdev/virtfs-proxy-helper.1 /fsdev/virtfs-proxy-helper.1
/fsdev/virtfs-proxy-helper.pod /fsdev/virtfs-proxy-helper.pod
/.gdbinit
*.a *.a
*.aux *.aux
*.cp *.cp
@ -90,12 +80,8 @@ libuser
*.pc *.pc
.libs .libs
.sdk .sdk
*.swp
*.orig
.pc
*.gcda *.gcda
*.gcno *.gcno
patches
/pc-bios/bios-pq/status /pc-bios/bios-pq/status
/pc-bios/vgabios-pq/status /pc-bios/vgabios-pq/status
/pc-bios/optionrom/linuxboot.asm /pc-bios/optionrom/linuxboot.asm

7
configure vendored
View File

@ -1087,7 +1087,10 @@ for opt do
;; ;;
--enable-quorum) quorum="yes" --enable-quorum) quorum="yes"
;; ;;
*) echo "ERROR: unknown option $opt"; show_help="yes" *)
echo "ERROR: unknown option $opt"
echo "Try '$0 --help' for more information"
exit 1
;; ;;
esac esac
done done
@ -1353,7 +1356,7 @@ Advanced options (experts only):
NOTE: The object files are built at the place where configure is launched NOTE: The object files are built at the place where configure is launched
EOF EOF
exit 1 exit 0
fi fi
# Now we have handled --enable-tcg-interpreter and know we're not just # Now we have handled --enable-tcg-interpreter and know we're not just

2
cpus.c
View File

@ -1454,7 +1454,7 @@ void qmp_pmemsave(int64_t addr, int64_t size, const char *filename,
l = sizeof(buf); l = sizeof(buf);
if (l > size) if (l > size)
l = size; l = size;
cpu_physical_memory_rw(addr, buf, l, 0); cpu_physical_memory_read(addr, buf, l);
if (fwrite(buf, 1, l, f) != l) { if (fwrite(buf, 1, l, f) != l) {
error_set(errp, QERR_IO_ERROR); error_set(errp, QERR_IO_ERROR);
goto exit; goto exit;

View File

@ -760,6 +760,7 @@ static int proxy_socket(const char *path, uid_t uid, gid_t gid)
return -1; return -1;
} }
size = sizeof(qemu);
client = accept(sock, (struct sockaddr *)&qemu, &size); client = accept(sock, (struct sockaddr *)&qemu, &size);
if (client < 0) { if (client < 0) {
do_perror("accept"); do_perror("accept");

View File

@ -124,14 +124,14 @@ static const TPRInstruction tpr_instr[] = {
static void read_guest_rom_state(VAPICROMState *s) static void read_guest_rom_state(VAPICROMState *s)
{ {
cpu_physical_memory_rw(s->rom_state_paddr, (void *)&s->rom_state, cpu_physical_memory_read(s->rom_state_paddr, &s->rom_state,
sizeof(GuestROMState), 0); sizeof(GuestROMState));
} }
static void write_guest_rom_state(VAPICROMState *s) static void write_guest_rom_state(VAPICROMState *s)
{ {
cpu_physical_memory_rw(s->rom_state_paddr, (void *)&s->rom_state, cpu_physical_memory_write(s->rom_state_paddr, &s->rom_state,
sizeof(GuestROMState), 1); sizeof(GuestROMState));
} }
static void update_guest_rom_state(VAPICROMState *s) static void update_guest_rom_state(VAPICROMState *s)
@ -311,16 +311,14 @@ static int update_rom_mapping(VAPICROMState *s, CPUX86State *env, target_ulong i
for (pos = le32_to_cpu(s->rom_state.fixup_start); for (pos = le32_to_cpu(s->rom_state.fixup_start);
pos < le32_to_cpu(s->rom_state.fixup_end); pos < le32_to_cpu(s->rom_state.fixup_end);
pos += 4) { pos += 4) {
cpu_physical_memory_rw(paddr + pos - s->rom_state.vaddr, cpu_physical_memory_read(paddr + pos - s->rom_state.vaddr,
(void *)&offset, sizeof(offset), 0); &offset, sizeof(offset));
offset = le32_to_cpu(offset); offset = le32_to_cpu(offset);
cpu_physical_memory_rw(paddr + offset, (void *)&patch, cpu_physical_memory_read(paddr + offset, &patch, sizeof(patch));
sizeof(patch), 0);
patch = le32_to_cpu(patch); patch = le32_to_cpu(patch);
patch += rom_state_vaddr - le32_to_cpu(s->rom_state.vaddr); patch += rom_state_vaddr - le32_to_cpu(s->rom_state.vaddr);
patch = cpu_to_le32(patch); patch = cpu_to_le32(patch);
cpu_physical_memory_rw(paddr + offset, (void *)&patch, cpu_physical_memory_write(paddr + offset, &patch, sizeof(patch));
sizeof(patch), 1);
} }
read_guest_rom_state(s); read_guest_rom_state(s);
s->vapic_paddr = paddr + le32_to_cpu(s->rom_state.vapic_vaddr) - s->vapic_paddr = paddr + le32_to_cpu(s->rom_state.vapic_vaddr) -
@ -364,8 +362,8 @@ static int vapic_enable(VAPICROMState *s, X86CPU *cpu)
} }
vapic_paddr = s->vapic_paddr + vapic_paddr = s->vapic_paddr +
(((hwaddr)cpu_number) << VAPIC_CPU_SHIFT); (((hwaddr)cpu_number) << VAPIC_CPU_SHIFT);
cpu_physical_memory_rw(vapic_paddr + offsetof(VAPICState, enabled), cpu_physical_memory_write(vapic_paddr + offsetof(VAPICState, enabled),
(void *)&enabled, sizeof(enabled), 1); &enabled, sizeof(enabled));
apic_enable_vapic(cpu->apic_state, vapic_paddr); apic_enable_vapic(cpu->apic_state, vapic_paddr);
s->state = VAPIC_ACTIVE; s->state = VAPIC_ACTIVE;
@ -535,7 +533,7 @@ static int patch_hypercalls(VAPICROMState *s)
uint8_t *rom; uint8_t *rom;
rom = g_malloc(s->rom_size); rom = g_malloc(s->rom_size);
cpu_physical_memory_rw(rom_paddr, rom, s->rom_size, 0); cpu_physical_memory_read(rom_paddr, rom, s->rom_size);
for (pos = 0; pos < s->rom_size - sizeof(vmcall_pattern); pos++) { for (pos = 0; pos < s->rom_size - sizeof(vmcall_pattern); pos++) {
if (kvm_irqchip_in_kernel()) { if (kvm_irqchip_in_kernel()) {
@ -551,8 +549,7 @@ static int patch_hypercalls(VAPICROMState *s)
} }
if (memcmp(rom + pos, pattern, 7) == 0 && if (memcmp(rom + pos, pattern, 7) == 0 &&
(rom[pos + 7] == alternates[0] || rom[pos + 7] == alternates[1])) { (rom[pos + 7] == alternates[0] || rom[pos + 7] == alternates[1])) {
cpu_physical_memory_rw(rom_paddr + pos + 5, (uint8_t *)patch, cpu_physical_memory_write(rom_paddr + pos + 5, patch, 3);
3, 1);
/* /*
* Don't flush the tb here. Under ordinary conditions, the patched * Don't flush the tb here. Under ordinary conditions, the patched
* calls are miles away from the current IP. Under malicious * calls are miles away from the current IP. Under malicious
@ -760,8 +757,8 @@ static int vapic_post_load(void *opaque, int version_id)
run_on_cpu(first_cpu, do_vapic_enable, s); run_on_cpu(first_cpu, do_vapic_enable, s);
} else { } else {
zero = g_malloc0(s->rom_state.vapic_size); zero = g_malloc0(s->rom_state.vapic_size);
cpu_physical_memory_rw(s->vapic_paddr, zero, cpu_physical_memory_write(s->vapic_paddr, zero,
s->rom_state.vapic_size, 1); s->rom_state.vapic_size);
g_free(zero); g_free(zero);
} }
} }

View File

@ -98,8 +98,8 @@ static void apic_sync_vapic(APICCommonState *s, int sync_type)
return; return;
} }
if (sync_type & SYNC_FROM_VAPIC) { if (sync_type & SYNC_FROM_VAPIC) {
cpu_physical_memory_rw(s->vapic_paddr, (void *)&vapic_state, cpu_physical_memory_read(s->vapic_paddr, &vapic_state,
sizeof(vapic_state), 0); sizeof(vapic_state));
s->tpr = vapic_state.tpr; s->tpr = vapic_state.tpr;
} }
if (sync_type & (SYNC_TO_VAPIC | SYNC_ISR_IRR_TO_VAPIC)) { if (sync_type & (SYNC_TO_VAPIC | SYNC_ISR_IRR_TO_VAPIC)) {

View File

@ -98,7 +98,7 @@ static unsigned int tdk_read(struct PHY *phy, unsigned int req)
r |= 1; r |= 1;
break; break;
case 17: case 17:
/* Marvel PHY on many xilinx boards. */ /* Marvell PHY on many xilinx boards. */
r = 0x8000; /* 1000Mb */ r = 0x8000; /* 1000Mb */
break; break;
case 18: case 18:

View File

@ -8,6 +8,8 @@
QemuOptsList *qemu_find_opts(const char *group); QemuOptsList *qemu_find_opts(const char *group);
QemuOptsList *qemu_find_opts_err(const char *group, Error **errp); QemuOptsList *qemu_find_opts_err(const char *group, Error **errp);
QemuOpts *qemu_find_opts_singleton(const char *group);
void qemu_add_opts(QemuOptsList *list); void qemu_add_opts(QemuOptsList *list);
void qemu_add_drive_opts(QemuOptsList *list); void qemu_add_drive_opts(QemuOptsList *list);
int qemu_set_option(const char *str); int qemu_set_option(const char *str);

View File

@ -527,6 +527,7 @@ static int slirp_smb(SlirpState* s, const char *exported_dir,
"pid directory=%s\n" "pid directory=%s\n"
"lock directory=%s\n" "lock directory=%s\n"
"state directory=%s\n" "state directory=%s\n"
"ncalrpc dir=%s/ncalrpc\n"
"log file=%s/log.smbd\n" "log file=%s/log.smbd\n"
"smb passwd file=%s/smbpasswd\n" "smb passwd file=%s/smbpasswd\n"
"security = user\n" "security = user\n"
@ -542,6 +543,7 @@ static int slirp_smb(SlirpState* s, const char *exported_dir,
s->smb_dir, s->smb_dir,
s->smb_dir, s->smb_dir,
s->smb_dir, s->smb_dir,
s->smb_dir,
exported_dir, exported_dir,
passwd->pw_name passwd->pw_name
); );

1010
pc-bios/qemu_logo.svg Normal file

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 32 KiB

View File

@ -37,8 +37,8 @@ install: $(OBJS)
$(call quiet-command, msgfmt -o $@ $<, " GEN $@") $(call quiet-command, msgfmt -o $@ $<, " GEN $@")
$(PO_PATH)/messages.po: $(SRC_PATH)/ui/gtk.c $(PO_PATH)/messages.po: $(SRC_PATH)/ui/gtk.c
$(call quiet-command, cd $(SRC_PATH) && \ $(call quiet-command, ( cd $(SRC_PATH) && \
(xgettext -o - --from-code=UTF-8 --foreign-user \ xgettext -o - --from-code=UTF-8 --foreign-user \
--package-name=QEMU --package-version=$(VERSION) \ --package-name=QEMU --package-version=$(VERSION) \
--msgid-bugs-address=qemu-devel@nongnu.org -k_ -C ui/gtk.c | \ --msgid-bugs-address=qemu-devel@nongnu.org -k_ -C ui/gtk.c | \
sed -e s/CHARSET/UTF-8/) >$@, " GEN $@") sed -e s/CHARSET/UTF-8/) >$@, " GEN $@")

View File

@ -10,7 +10,7 @@ msgstr ""
"PO-Revision-Date: 2012-02-28 16:00+0100\n" "PO-Revision-Date: 2012-02-28 16:00+0100\n"
"Last-Translator: Kevin Wolf <kwolf@redhat.com>\n" "Last-Translator: Kevin Wolf <kwolf@redhat.com>\n"
"Language-Team: Deutsch <de@li.org>\n" "Language-Team: Deutsch <de@li.org>\n"
"Language: \n" "Language: de\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"

View File

@ -10,7 +10,7 @@ msgstr ""
"PO-Revision-Date: 2013-03-31 19:39+0200\n" "PO-Revision-Date: 2013-03-31 19:39+0200\n"
"Last-Translator: Aurelien Jarno <aurelien@aurel32.net>\n" "Last-Translator: Aurelien Jarno <aurelien@aurel32.net>\n"
"Language-Team: French <FR@li.org>\n" "Language-Team: French <FR@li.org>\n"
"Language: \n" "Language: fr\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"

View File

@ -10,7 +10,7 @@ msgstr ""
"PO-Revision-Date: 2013-05-06 20:42+0200\n" "PO-Revision-Date: 2013-05-06 20:42+0200\n"
"Last-Translator: Ákos Kovács <akoskovacs@gmx.com>\n" "Last-Translator: Ákos Kovács <akoskovacs@gmx.com>\n"
"Language-Team: Hungarian <hu@li.org>\n" "Language-Team: Hungarian <hu@li.org>\n"
"Language: \n" "Language: hu\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"

View File

@ -10,7 +10,7 @@ msgstr ""
"PO-Revision-Date: 2012-02-27 08:23+0100\n" "PO-Revision-Date: 2012-02-27 08:23+0100\n"
"Last-Translator: Paolo Bonzini <pbonzini@redhat.com>\n" "Last-Translator: Paolo Bonzini <pbonzini@redhat.com>\n"
"Language-Team: Italian <it@li.org>\n" "Language-Team: Italian <it@li.org>\n"
"Language: \n" "Language: it\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"

View File

@ -10,7 +10,7 @@ msgstr ""
"PO-Revision-Date: 2013-04-22 18:35+0300\n" "PO-Revision-Date: 2013-04-22 18:35+0300\n"
"Last-Translator: Ozan Çağlayan <ozancag@gmail.com>\n" "Last-Translator: Ozan Çağlayan <ozancag@gmail.com>\n"
"Language-Team: Türkçe <>\n" "Language-Team: Türkçe <>\n"
"Language: \n" "Language: tr\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"

View File

@ -210,10 +210,13 @@ use is discouraged as it may be removed from future versions.
ETEXI ETEXI
DEF("m", HAS_ARG, QEMU_OPTION_m, DEF("m", HAS_ARG, QEMU_OPTION_m,
"-m megs set virtual RAM size to megs MB [default=" "-m [size=]megs\n"
stringify(DEFAULT_RAM_SIZE) "]\n", QEMU_ARCH_ALL) " configure guest RAM\n"
" size: initial amount of guest memory (default: "
stringify(DEFAULT_RAM_SIZE) "MiB)\n",
QEMU_ARCH_ALL)
STEXI STEXI
@item -m @var{megs} @item -m [size=]@var{megs}
@findex -m @findex -m
Set virtual RAM size to @var{megs} megabytes. Default is 128 MiB. Optionally, Set virtual RAM size to @var{megs} megabytes. Default is 128 MiB. Optionally,
a suffix of ``M'' or ``G'' can be used to signify a value in megabytes or a suffix of ``M'' or ``G'' can be used to signify a value in megabytes or

View File

@ -336,7 +336,7 @@ uint32_t HELPER(stsi)(CPUS390XState *env, uint64_t a0,
ebcdic_put(sysib.model, "QEMU ", 16); ebcdic_put(sysib.model, "QEMU ", 16);
ebcdic_put(sysib.sequence, "QEMU ", 16); ebcdic_put(sysib.sequence, "QEMU ", 16);
ebcdic_put(sysib.plant, "QEMU", 4); ebcdic_put(sysib.plant, "QEMU", 4);
cpu_physical_memory_rw(a0, (uint8_t *)&sysib, sizeof(sysib), 1); cpu_physical_memory_write(a0, &sysib, sizeof(sysib));
} else if ((sel1 == 2) && (sel2 == 1)) { } else if ((sel1 == 2) && (sel2 == 1)) {
/* Basic Machine CPU */ /* Basic Machine CPU */
struct sysib_121 sysib; struct sysib_121 sysib;
@ -346,7 +346,7 @@ uint32_t HELPER(stsi)(CPUS390XState *env, uint64_t a0,
ebcdic_put(sysib.sequence, "QEMUQEMUQEMUQEMU", 16); ebcdic_put(sysib.sequence, "QEMUQEMUQEMUQEMU", 16);
ebcdic_put(sysib.plant, "QEMU", 4); ebcdic_put(sysib.plant, "QEMU", 4);
stw_p(&sysib.cpu_addr, env->cpu_num); stw_p(&sysib.cpu_addr, env->cpu_num);
cpu_physical_memory_rw(a0, (uint8_t *)&sysib, sizeof(sysib), 1); cpu_physical_memory_write(a0, &sysib, sizeof(sysib));
} else if ((sel1 == 2) && (sel2 == 2)) { } else if ((sel1 == 2) && (sel2 == 2)) {
/* Basic Machine CPUs */ /* Basic Machine CPUs */
struct sysib_122 sysib; struct sysib_122 sysib;
@ -358,7 +358,7 @@ uint32_t HELPER(stsi)(CPUS390XState *env, uint64_t a0,
stw_p(&sysib.active_cpus, 1); stw_p(&sysib.active_cpus, 1);
stw_p(&sysib.standby_cpus, 0); stw_p(&sysib.standby_cpus, 0);
stw_p(&sysib.reserved_cpus, 0); stw_p(&sysib.reserved_cpus, 0);
cpu_physical_memory_rw(a0, (uint8_t *)&sysib, sizeof(sysib), 1); cpu_physical_memory_write(a0, &sysib, sizeof(sysib));
} else { } else {
cc = 3; cc = 3;
} }
@ -375,7 +375,7 @@ uint32_t HELPER(stsi)(CPUS390XState *env, uint64_t a0,
ebcdic_put(sysib.plant, "QEMU", 4); ebcdic_put(sysib.plant, "QEMU", 4);
stw_p(&sysib.cpu_addr, env->cpu_num); stw_p(&sysib.cpu_addr, env->cpu_num);
stw_p(&sysib.cpu_id, 0); stw_p(&sysib.cpu_id, 0);
cpu_physical_memory_rw(a0, (uint8_t *)&sysib, sizeof(sysib), 1); cpu_physical_memory_write(a0, &sysib, sizeof(sysib));
} else if ((sel1 == 2) && (sel2 == 2)) { } else if ((sel1 == 2) && (sel2 == 2)) {
/* LPAR CPUs */ /* LPAR CPUs */
struct sysib_222 sysib; struct sysib_222 sysib;
@ -392,7 +392,7 @@ uint32_t HELPER(stsi)(CPUS390XState *env, uint64_t a0,
stl_p(&sysib.caf, 1000); stl_p(&sysib.caf, 1000);
stw_p(&sysib.dedicated_cpus, 0); stw_p(&sysib.dedicated_cpus, 0);
stw_p(&sysib.shared_cpus, 0); stw_p(&sysib.shared_cpus, 0);
cpu_physical_memory_rw(a0, (uint8_t *)&sysib, sizeof(sysib), 1); cpu_physical_memory_write(a0, &sysib, sizeof(sysib));
} else { } else {
cc = 3; cc = 3;
} }
@ -414,7 +414,7 @@ uint32_t HELPER(stsi)(CPUS390XState *env, uint64_t a0,
ebcdic_put(sysib.vm[0].name, "KVMguest", 8); ebcdic_put(sysib.vm[0].name, "KVMguest", 8);
stl_p(&sysib.vm[0].caf, 1000); stl_p(&sysib.vm[0].caf, 1000);
ebcdic_put(sysib.vm[0].cpi, "KVM/Linux ", 16); ebcdic_put(sysib.vm[0].cpi, "KVM/Linux ", 16);
cpu_physical_memory_rw(a0, (uint8_t *)&sysib, sizeof(sysib), 1); cpu_physical_memory_write(a0, &sysib, sizeof(sysib));
} else { } else {
cc = 3; cc = 3;
} }

12
tests/.gitignore vendored
View File

@ -7,20 +7,28 @@ check-qstring
check-qom-interface check-qom-interface
test-aio test-aio
test-bitops test-bitops
test-throttle test-coroutine
test-cutils test-cutils
test-hbitmap test-hbitmap
test-int128 test-int128
test-iov test-iov
test-mul64 test-mul64
test-opts-visitor
test-qapi-types.[ch] test-qapi-types.[ch]
test-qapi-visit.[ch] test-qapi-visit.[ch]
test-qdev-global-props test-qdev-global-props
test-qmp-commands.h
test-qmp-commands test-qmp-commands
test-qmp-commands.h
test-qmp-input-strict test-qmp-input-strict
test-qmp-input-visitor
test-qmp-marshal.c test-qmp-marshal.c
test-qmp-output-visitor
test-rfifolock
test-string-input-visitor
test-string-output-visitor
test-thread-pool test-thread-pool
test-throttle
test-visitor-serialization
test-vmstate test-vmstate
test-x86-cpuid test-x86-cpuid
test-xbzrle test-xbzrle

View File

@ -160,7 +160,9 @@ void init_paths(const char *prefix)
base = new_entry("", NULL, pref_buf); base = new_entry("", NULL, pref_buf);
base = add_dir_maybe(base); base = add_dir_maybe(base);
if (base->num_entries == 0) { if (base->num_entries == 0) {
free (base); g_free(base->pathname);
free(base->name);
free(base);
base = NULL; base = NULL;
} else { } else {
set_parents(base, base); set_parents(base, base);

View File

@ -39,6 +39,20 @@ QemuOptsList *qemu_find_opts(const char *group)
return ret; return ret;
} }
QemuOpts *qemu_find_opts_singleton(const char *group)
{
QemuOptsList *list;
QemuOpts *opts;
list = qemu_find_opts(group);
assert(list);
opts = qemu_opts_find(list, NULL);
if (!opts) {
opts = qemu_opts_create(list, NULL, 0, &error_abort);
}
return opts;
}
static CommandLineParameterInfoList *query_option_descs(const QemuOptDesc *desc) static CommandLineParameterInfoList *query_option_descs(const QemuOptDesc *desc)
{ {
CommandLineParameterInfoList *param_list = NULL, *entry; CommandLineParameterInfoList *param_list = NULL, *entry;

103
vl.c
View File

@ -510,6 +510,20 @@ static QemuOptsList qemu_name_opts = {
}, },
}; };
static QemuOptsList qemu_mem_opts = {
.name = "memory",
.implied_opt_name = "size",
.head = QTAILQ_HEAD_INITIALIZER(qemu_mem_opts.head),
.merge_lists = true,
.desc = {
{
.name = "size",
.type = QEMU_OPT_SIZE,
},
{ /* end of list */ }
},
};
/** /**
* Get machine options * Get machine options
* *
@ -517,16 +531,7 @@ static QemuOptsList qemu_name_opts = {
*/ */
QemuOpts *qemu_get_machine_opts(void) QemuOpts *qemu_get_machine_opts(void)
{ {
QemuOptsList *list; return qemu_find_opts_singleton("machine");
QemuOpts *opts;
list = qemu_find_opts("machine");
assert(list);
opts = qemu_opts_find(list, NULL);
if (!opts) {
opts = qemu_opts_create(list, NULL, 0, &error_abort);
}
return opts;
} }
const char *qemu_get_vm_name(void) const char *qemu_get_vm_name(void)
@ -2964,6 +2969,8 @@ int main(int argc, char **argv, char **envp)
}; };
const char *trace_events = NULL; const char *trace_events = NULL;
const char *trace_file = NULL; const char *trace_file = NULL;
const ram_addr_t default_ram_size = (ram_addr_t)DEFAULT_RAM_SIZE *
1024 * 1024;
atexit(qemu_run_exit_notifiers); atexit(qemu_run_exit_notifiers);
error_set_progname(argv[0]); error_set_progname(argv[0]);
@ -2987,6 +2994,7 @@ int main(int argc, char **argv, char **envp)
qemu_add_opts(&qemu_trace_opts); qemu_add_opts(&qemu_trace_opts);
qemu_add_opts(&qemu_option_rom_opts); qemu_add_opts(&qemu_option_rom_opts);
qemu_add_opts(&qemu_machine_opts); qemu_add_opts(&qemu_machine_opts);
qemu_add_opts(&qemu_mem_opts);
qemu_add_opts(&qemu_smp_opts); qemu_add_opts(&qemu_smp_opts);
qemu_add_opts(&qemu_boot_opts); qemu_add_opts(&qemu_boot_opts);
qemu_add_opts(&qemu_sandbox_opts); qemu_add_opts(&qemu_sandbox_opts);
@ -3011,7 +3019,7 @@ int main(int argc, char **argv, char **envp)
module_call_init(MODULE_INIT_MACHINE); module_call_init(MODULE_INIT_MACHINE);
machine_class = find_default_machine(); machine_class = find_default_machine();
cpu_model = NULL; cpu_model = NULL;
ram_size = 0; ram_size = default_ram_size;
snapshot = 0; snapshot = 0;
cyls = heads = secs = 0; cyls = heads = secs = 0;
translation = BIOS_ATA_TRANSLATION_AUTO; translation = BIOS_ATA_TRANSLATION_AUTO;
@ -3034,7 +3042,6 @@ int main(int argc, char **argv, char **envp)
if (argv[optind][0] != '-') { if (argv[optind][0] != '-') {
/* disk image */ /* disk image */
optind++; optind++;
continue;
} else { } else {
const QEMUOption *popt; const QEMUOption *popt;
@ -3298,20 +3305,48 @@ int main(int argc, char **argv, char **envp)
exit(0); exit(0);
break; break;
case QEMU_OPTION_m: { case QEMU_OPTION_m: {
int64_t value;
uint64_t sz; uint64_t sz;
char *end; const char *mem_str;
value = strtosz(optarg, &end); opts = qemu_opts_parse(qemu_find_opts("memory"),
if (value < 0 || *end) { optarg, 1);
fprintf(stderr, "qemu: invalid ram size: %s\n", optarg); if (!opts) {
exit(1); exit(EXIT_FAILURE);
} }
sz = QEMU_ALIGN_UP((uint64_t)value, 8192);
mem_str = qemu_opt_get(opts, "size");
if (!mem_str) {
error_report("invalid -m option, missing 'size' option");
exit(EXIT_FAILURE);
}
if (!*mem_str) {
error_report("missing 'size' option value");
exit(EXIT_FAILURE);
}
sz = qemu_opt_get_size(opts, "size", ram_size);
/* Fix up legacy suffix-less format */
if (g_ascii_isdigit(mem_str[strlen(mem_str) - 1])) {
uint64_t overflow_check = sz;
sz <<= 20;
if ((sz >> 20) != overflow_check) {
error_report("too large 'size' option value");
exit(EXIT_FAILURE);
}
}
/* backward compatibility behaviour for case "-m 0" */
if (sz == 0) {
sz = default_ram_size;
}
sz = QEMU_ALIGN_UP(sz, 8192);
ram_size = sz; ram_size = sz;
if (ram_size != sz) { if (ram_size != sz) {
fprintf(stderr, "qemu: ram size too large\n"); error_report("ram size too large");
exit(1); exit(EXIT_FAILURE);
} }
break; break;
} }
@ -3855,7 +3890,9 @@ int main(int argc, char **argv, char **envp)
} }
} }
qemu_config_write(fp); qemu_config_write(fp);
fclose(fp); if (fp != stdout) {
fclose(fp);
}
break; break;
} }
case QEMU_OPTION_qtest: case QEMU_OPTION_qtest:
@ -4154,10 +4191,8 @@ int main(int argc, char **argv, char **envp)
exit(1); exit(1);
} }
/* init the memory */ /* store value for the future use */
if (ram_size == 0) { qemu_opt_set_number(qemu_find_opts_singleton("memory"), "size", ram_size);
ram_size = DEFAULT_RAM_SIZE * 1024 * 1024;
}
if (qemu_opts_foreach(qemu_find_opts("device"), device_help_func, NULL, 0) if (qemu_opts_foreach(qemu_find_opts("device"), device_help_func, NULL, 0)
!= 0) { != 0) {
@ -4371,15 +4406,15 @@ int main(int argc, char **argv, char **envp)
qdev_machine_init(); qdev_machine_init();
QEMUMachineInitArgs args = { .machine = machine, current_machine->init_args = (QEMUMachineInitArgs) {
.ram_size = ram_size, .machine = machine,
.boot_order = boot_order, .ram_size = ram_size,
.kernel_filename = kernel_filename, .boot_order = boot_order,
.kernel_cmdline = kernel_cmdline, .kernel_filename = kernel_filename,
.initrd_filename = initrd_filename, .kernel_cmdline = kernel_cmdline,
.cpu_model = cpu_model }; .initrd_filename = initrd_filename,
.cpu_model = cpu_model };
current_machine->init_args = args;
machine->init(&current_machine->init_args); machine->init(&current_machine->init_args);
audio_init(); audio_init();