mirror of
https://github.com/xemu-project/xemu.git
synced 2024-11-23 19:49:43 +00:00
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:
commit
93156cef1c
18
.gitignore
vendored
18
.gitignore
vendored
@ -18,8 +18,8 @@
|
||||
/*-darwin-user
|
||||
/*-linux-user
|
||||
/*-bsd-user
|
||||
libdis*
|
||||
libuser
|
||||
/libdis*
|
||||
/libuser
|
||||
/linux-headers/asm
|
||||
/qga/qapi-generated
|
||||
/qapi-generated
|
||||
@ -49,19 +49,9 @@ libuser
|
||||
/qemu-monitor.texi
|
||||
/qmp-commands.txt
|
||||
/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.1
|
||||
/fsdev/virtfs-proxy-helper.pod
|
||||
/.gdbinit
|
||||
*.a
|
||||
*.aux
|
||||
*.cp
|
||||
@ -90,12 +80,8 @@ libuser
|
||||
*.pc
|
||||
.libs
|
||||
.sdk
|
||||
*.swp
|
||||
*.orig
|
||||
.pc
|
||||
*.gcda
|
||||
*.gcno
|
||||
patches
|
||||
/pc-bios/bios-pq/status
|
||||
/pc-bios/vgabios-pq/status
|
||||
/pc-bios/optionrom/linuxboot.asm
|
||||
|
7
configure
vendored
7
configure
vendored
@ -1087,7 +1087,10 @@ for opt do
|
||||
;;
|
||||
--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
|
||||
done
|
||||
@ -1353,7 +1356,7 @@ Advanced options (experts only):
|
||||
|
||||
NOTE: The object files are built at the place where configure is launched
|
||||
EOF
|
||||
exit 1
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Now we have handled --enable-tcg-interpreter and know we're not just
|
||||
|
2
cpus.c
2
cpus.c
@ -1454,7 +1454,7 @@ void qmp_pmemsave(int64_t addr, int64_t size, const char *filename,
|
||||
l = sizeof(buf);
|
||||
if (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) {
|
||||
error_set(errp, QERR_IO_ERROR);
|
||||
goto exit;
|
||||
|
@ -760,6 +760,7 @@ static int proxy_socket(const char *path, uid_t uid, gid_t gid)
|
||||
return -1;
|
||||
}
|
||||
|
||||
size = sizeof(qemu);
|
||||
client = accept(sock, (struct sockaddr *)&qemu, &size);
|
||||
if (client < 0) {
|
||||
do_perror("accept");
|
||||
|
@ -124,14 +124,14 @@ static const TPRInstruction tpr_instr[] = {
|
||||
|
||||
static void read_guest_rom_state(VAPICROMState *s)
|
||||
{
|
||||
cpu_physical_memory_rw(s->rom_state_paddr, (void *)&s->rom_state,
|
||||
sizeof(GuestROMState), 0);
|
||||
cpu_physical_memory_read(s->rom_state_paddr, &s->rom_state,
|
||||
sizeof(GuestROMState));
|
||||
}
|
||||
|
||||
static void write_guest_rom_state(VAPICROMState *s)
|
||||
{
|
||||
cpu_physical_memory_rw(s->rom_state_paddr, (void *)&s->rom_state,
|
||||
sizeof(GuestROMState), 1);
|
||||
cpu_physical_memory_write(s->rom_state_paddr, &s->rom_state,
|
||||
sizeof(GuestROMState));
|
||||
}
|
||||
|
||||
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);
|
||||
pos < le32_to_cpu(s->rom_state.fixup_end);
|
||||
pos += 4) {
|
||||
cpu_physical_memory_rw(paddr + pos - s->rom_state.vaddr,
|
||||
(void *)&offset, sizeof(offset), 0);
|
||||
cpu_physical_memory_read(paddr + pos - s->rom_state.vaddr,
|
||||
&offset, sizeof(offset));
|
||||
offset = le32_to_cpu(offset);
|
||||
cpu_physical_memory_rw(paddr + offset, (void *)&patch,
|
||||
sizeof(patch), 0);
|
||||
cpu_physical_memory_read(paddr + offset, &patch, sizeof(patch));
|
||||
patch = le32_to_cpu(patch);
|
||||
patch += rom_state_vaddr - le32_to_cpu(s->rom_state.vaddr);
|
||||
patch = cpu_to_le32(patch);
|
||||
cpu_physical_memory_rw(paddr + offset, (void *)&patch,
|
||||
sizeof(patch), 1);
|
||||
cpu_physical_memory_write(paddr + offset, &patch, sizeof(patch));
|
||||
}
|
||||
read_guest_rom_state(s);
|
||||
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 +
|
||||
(((hwaddr)cpu_number) << VAPIC_CPU_SHIFT);
|
||||
cpu_physical_memory_rw(vapic_paddr + offsetof(VAPICState, enabled),
|
||||
(void *)&enabled, sizeof(enabled), 1);
|
||||
cpu_physical_memory_write(vapic_paddr + offsetof(VAPICState, enabled),
|
||||
&enabled, sizeof(enabled));
|
||||
apic_enable_vapic(cpu->apic_state, vapic_paddr);
|
||||
|
||||
s->state = VAPIC_ACTIVE;
|
||||
@ -535,7 +533,7 @@ static int patch_hypercalls(VAPICROMState *s)
|
||||
uint8_t *rom;
|
||||
|
||||
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++) {
|
||||
if (kvm_irqchip_in_kernel()) {
|
||||
@ -551,8 +549,7 @@ static int patch_hypercalls(VAPICROMState *s)
|
||||
}
|
||||
if (memcmp(rom + pos, pattern, 7) == 0 &&
|
||||
(rom[pos + 7] == alternates[0] || rom[pos + 7] == alternates[1])) {
|
||||
cpu_physical_memory_rw(rom_paddr + pos + 5, (uint8_t *)patch,
|
||||
3, 1);
|
||||
cpu_physical_memory_write(rom_paddr + pos + 5, patch, 3);
|
||||
/*
|
||||
* Don't flush the tb here. Under ordinary conditions, the patched
|
||||
* 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);
|
||||
} else {
|
||||
zero = g_malloc0(s->rom_state.vapic_size);
|
||||
cpu_physical_memory_rw(s->vapic_paddr, zero,
|
||||
s->rom_state.vapic_size, 1);
|
||||
cpu_physical_memory_write(s->vapic_paddr, zero,
|
||||
s->rom_state.vapic_size);
|
||||
g_free(zero);
|
||||
}
|
||||
}
|
||||
|
@ -98,8 +98,8 @@ static void apic_sync_vapic(APICCommonState *s, int sync_type)
|
||||
return;
|
||||
}
|
||||
if (sync_type & SYNC_FROM_VAPIC) {
|
||||
cpu_physical_memory_rw(s->vapic_paddr, (void *)&vapic_state,
|
||||
sizeof(vapic_state), 0);
|
||||
cpu_physical_memory_read(s->vapic_paddr, &vapic_state,
|
||||
sizeof(vapic_state));
|
||||
s->tpr = vapic_state.tpr;
|
||||
}
|
||||
if (sync_type & (SYNC_TO_VAPIC | SYNC_ISR_IRR_TO_VAPIC)) {
|
||||
|
@ -98,7 +98,7 @@ static unsigned int tdk_read(struct PHY *phy, unsigned int req)
|
||||
r |= 1;
|
||||
break;
|
||||
case 17:
|
||||
/* Marvel PHY on many xilinx boards. */
|
||||
/* Marvell PHY on many xilinx boards. */
|
||||
r = 0x8000; /* 1000Mb */
|
||||
break;
|
||||
case 18:
|
||||
|
@ -8,6 +8,8 @@
|
||||
|
||||
QemuOptsList *qemu_find_opts(const char *group);
|
||||
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_drive_opts(QemuOptsList *list);
|
||||
int qemu_set_option(const char *str);
|
||||
|
@ -527,6 +527,7 @@ static int slirp_smb(SlirpState* s, const char *exported_dir,
|
||||
"pid directory=%s\n"
|
||||
"lock directory=%s\n"
|
||||
"state directory=%s\n"
|
||||
"ncalrpc dir=%s/ncalrpc\n"
|
||||
"log file=%s/log.smbd\n"
|
||||
"smb passwd file=%s/smbpasswd\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,
|
||||
exported_dir,
|
||||
passwd->pw_name
|
||||
);
|
||||
|
1010
pc-bios/qemu_logo.svg
Normal file
1010
pc-bios/qemu_logo.svg
Normal file
File diff suppressed because it is too large
Load Diff
After Width: | Height: | Size: 32 KiB |
@ -37,8 +37,8 @@ install: $(OBJS)
|
||||
$(call quiet-command, msgfmt -o $@ $<, " GEN $@")
|
||||
|
||||
$(PO_PATH)/messages.po: $(SRC_PATH)/ui/gtk.c
|
||||
$(call quiet-command, cd $(SRC_PATH) && \
|
||||
(xgettext -o - --from-code=UTF-8 --foreign-user \
|
||||
$(call quiet-command, ( cd $(SRC_PATH) && \
|
||||
xgettext -o - --from-code=UTF-8 --foreign-user \
|
||||
--package-name=QEMU --package-version=$(VERSION) \
|
||||
--msgid-bugs-address=qemu-devel@nongnu.org -k_ -C ui/gtk.c | \
|
||||
sed -e s/CHARSET/UTF-8/) >$@, " GEN $@")
|
||||
|
@ -10,7 +10,7 @@ msgstr ""
|
||||
"PO-Revision-Date: 2012-02-28 16:00+0100\n"
|
||||
"Last-Translator: Kevin Wolf <kwolf@redhat.com>\n"
|
||||
"Language-Team: Deutsch <de@li.org>\n"
|
||||
"Language: \n"
|
||||
"Language: de\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
@ -10,7 +10,7 @@ msgstr ""
|
||||
"PO-Revision-Date: 2013-03-31 19:39+0200\n"
|
||||
"Last-Translator: Aurelien Jarno <aurelien@aurel32.net>\n"
|
||||
"Language-Team: French <FR@li.org>\n"
|
||||
"Language: \n"
|
||||
"Language: fr\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
2
po/hu.po
2
po/hu.po
@ -10,7 +10,7 @@ msgstr ""
|
||||
"PO-Revision-Date: 2013-05-06 20:42+0200\n"
|
||||
"Last-Translator: Ákos Kovács <akoskovacs@gmx.com>\n"
|
||||
"Language-Team: Hungarian <hu@li.org>\n"
|
||||
"Language: \n"
|
||||
"Language: hu\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
2
po/it.po
2
po/it.po
@ -10,7 +10,7 @@ msgstr ""
|
||||
"PO-Revision-Date: 2012-02-27 08:23+0100\n"
|
||||
"Last-Translator: Paolo Bonzini <pbonzini@redhat.com>\n"
|
||||
"Language-Team: Italian <it@li.org>\n"
|
||||
"Language: \n"
|
||||
"Language: it\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
2
po/tr.po
2
po/tr.po
@ -10,7 +10,7 @@ msgstr ""
|
||||
"PO-Revision-Date: 2013-04-22 18:35+0300\n"
|
||||
"Last-Translator: Ozan Çağlayan <ozancag@gmail.com>\n"
|
||||
"Language-Team: Türkçe <>\n"
|
||||
"Language: \n"
|
||||
"Language: tr\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
@ -210,10 +210,13 @@ use is discouraged as it may be removed from future versions.
|
||||
ETEXI
|
||||
|
||||
DEF("m", HAS_ARG, QEMU_OPTION_m,
|
||||
"-m megs set virtual RAM size to megs MB [default="
|
||||
stringify(DEFAULT_RAM_SIZE) "]\n", QEMU_ARCH_ALL)
|
||||
"-m [size=]megs\n"
|
||||
" configure guest RAM\n"
|
||||
" size: initial amount of guest memory (default: "
|
||||
stringify(DEFAULT_RAM_SIZE) "MiB)\n",
|
||||
QEMU_ARCH_ALL)
|
||||
STEXI
|
||||
@item -m @var{megs}
|
||||
@item -m [size=]@var{megs}
|
||||
@findex -m
|
||||
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
|
||||
|
@ -336,7 +336,7 @@ uint32_t HELPER(stsi)(CPUS390XState *env, uint64_t a0,
|
||||
ebcdic_put(sysib.model, "QEMU ", 16);
|
||||
ebcdic_put(sysib.sequence, "QEMU ", 16);
|
||||
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)) {
|
||||
/* Basic Machine CPU */
|
||||
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.plant, "QEMU", 4);
|
||||
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)) {
|
||||
/* Basic Machine CPUs */
|
||||
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.standby_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 {
|
||||
cc = 3;
|
||||
}
|
||||
@ -375,7 +375,7 @@ uint32_t HELPER(stsi)(CPUS390XState *env, uint64_t a0,
|
||||
ebcdic_put(sysib.plant, "QEMU", 4);
|
||||
stw_p(&sysib.cpu_addr, env->cpu_num);
|
||||
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)) {
|
||||
/* LPAR CPUs */
|
||||
struct sysib_222 sysib;
|
||||
@ -392,7 +392,7 @@ uint32_t HELPER(stsi)(CPUS390XState *env, uint64_t a0,
|
||||
stl_p(&sysib.caf, 1000);
|
||||
stw_p(&sysib.dedicated_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 {
|
||||
cc = 3;
|
||||
}
|
||||
@ -414,7 +414,7 @@ uint32_t HELPER(stsi)(CPUS390XState *env, uint64_t a0,
|
||||
ebcdic_put(sysib.vm[0].name, "KVMguest", 8);
|
||||
stl_p(&sysib.vm[0].caf, 1000);
|
||||
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 {
|
||||
cc = 3;
|
||||
}
|
||||
|
12
tests/.gitignore
vendored
12
tests/.gitignore
vendored
@ -7,20 +7,28 @@ check-qstring
|
||||
check-qom-interface
|
||||
test-aio
|
||||
test-bitops
|
||||
test-throttle
|
||||
test-coroutine
|
||||
test-cutils
|
||||
test-hbitmap
|
||||
test-int128
|
||||
test-iov
|
||||
test-mul64
|
||||
test-opts-visitor
|
||||
test-qapi-types.[ch]
|
||||
test-qapi-visit.[ch]
|
||||
test-qdev-global-props
|
||||
test-qmp-commands.h
|
||||
test-qmp-commands
|
||||
test-qmp-commands.h
|
||||
test-qmp-input-strict
|
||||
test-qmp-input-visitor
|
||||
test-qmp-marshal.c
|
||||
test-qmp-output-visitor
|
||||
test-rfifolock
|
||||
test-string-input-visitor
|
||||
test-string-output-visitor
|
||||
test-thread-pool
|
||||
test-throttle
|
||||
test-visitor-serialization
|
||||
test-vmstate
|
||||
test-x86-cpuid
|
||||
test-xbzrle
|
||||
|
@ -160,7 +160,9 @@ void init_paths(const char *prefix)
|
||||
base = new_entry("", NULL, pref_buf);
|
||||
base = add_dir_maybe(base);
|
||||
if (base->num_entries == 0) {
|
||||
free (base);
|
||||
g_free(base->pathname);
|
||||
free(base->name);
|
||||
free(base);
|
||||
base = NULL;
|
||||
} else {
|
||||
set_parents(base, base);
|
||||
|
@ -39,6 +39,20 @@ QemuOptsList *qemu_find_opts(const char *group)
|
||||
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)
|
||||
{
|
||||
CommandLineParameterInfoList *param_list = NULL, *entry;
|
||||
|
103
vl.c
103
vl.c
@ -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
|
||||
*
|
||||
@ -517,16 +531,7 @@ static QemuOptsList qemu_name_opts = {
|
||||
*/
|
||||
QemuOpts *qemu_get_machine_opts(void)
|
||||
{
|
||||
QemuOptsList *list;
|
||||
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;
|
||||
return qemu_find_opts_singleton("machine");
|
||||
}
|
||||
|
||||
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_file = NULL;
|
||||
const ram_addr_t default_ram_size = (ram_addr_t)DEFAULT_RAM_SIZE *
|
||||
1024 * 1024;
|
||||
|
||||
atexit(qemu_run_exit_notifiers);
|
||||
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_option_rom_opts);
|
||||
qemu_add_opts(&qemu_machine_opts);
|
||||
qemu_add_opts(&qemu_mem_opts);
|
||||
qemu_add_opts(&qemu_smp_opts);
|
||||
qemu_add_opts(&qemu_boot_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);
|
||||
machine_class = find_default_machine();
|
||||
cpu_model = NULL;
|
||||
ram_size = 0;
|
||||
ram_size = default_ram_size;
|
||||
snapshot = 0;
|
||||
cyls = heads = secs = 0;
|
||||
translation = BIOS_ATA_TRANSLATION_AUTO;
|
||||
@ -3034,7 +3042,6 @@ int main(int argc, char **argv, char **envp)
|
||||
if (argv[optind][0] != '-') {
|
||||
/* disk image */
|
||||
optind++;
|
||||
continue;
|
||||
} else {
|
||||
const QEMUOption *popt;
|
||||
|
||||
@ -3298,20 +3305,48 @@ int main(int argc, char **argv, char **envp)
|
||||
exit(0);
|
||||
break;
|
||||
case QEMU_OPTION_m: {
|
||||
int64_t value;
|
||||
uint64_t sz;
|
||||
char *end;
|
||||
const char *mem_str;
|
||||
|
||||
value = strtosz(optarg, &end);
|
||||
if (value < 0 || *end) {
|
||||
fprintf(stderr, "qemu: invalid ram size: %s\n", optarg);
|
||||
exit(1);
|
||||
opts = qemu_opts_parse(qemu_find_opts("memory"),
|
||||
optarg, 1);
|
||||
if (!opts) {
|
||||
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;
|
||||
if (ram_size != sz) {
|
||||
fprintf(stderr, "qemu: ram size too large\n");
|
||||
exit(1);
|
||||
error_report("ram size too large");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
break;
|
||||
}
|
||||
@ -3855,7 +3890,9 @@ int main(int argc, char **argv, char **envp)
|
||||
}
|
||||
}
|
||||
qemu_config_write(fp);
|
||||
fclose(fp);
|
||||
if (fp != stdout) {
|
||||
fclose(fp);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case QEMU_OPTION_qtest:
|
||||
@ -4154,10 +4191,8 @@ int main(int argc, char **argv, char **envp)
|
||||
exit(1);
|
||||
}
|
||||
|
||||
/* init the memory */
|
||||
if (ram_size == 0) {
|
||||
ram_size = DEFAULT_RAM_SIZE * 1024 * 1024;
|
||||
}
|
||||
/* store value for the future use */
|
||||
qemu_opt_set_number(qemu_find_opts_singleton("memory"), "size", ram_size);
|
||||
|
||||
if (qemu_opts_foreach(qemu_find_opts("device"), device_help_func, NULL, 0)
|
||||
!= 0) {
|
||||
@ -4371,15 +4406,15 @@ int main(int argc, char **argv, char **envp)
|
||||
|
||||
qdev_machine_init();
|
||||
|
||||
QEMUMachineInitArgs args = { .machine = machine,
|
||||
.ram_size = ram_size,
|
||||
.boot_order = boot_order,
|
||||
.kernel_filename = kernel_filename,
|
||||
.kernel_cmdline = kernel_cmdline,
|
||||
.initrd_filename = initrd_filename,
|
||||
.cpu_model = cpu_model };
|
||||
current_machine->init_args = (QEMUMachineInitArgs) {
|
||||
.machine = machine,
|
||||
.ram_size = ram_size,
|
||||
.boot_order = boot_order,
|
||||
.kernel_filename = kernel_filename,
|
||||
.kernel_cmdline = kernel_cmdline,
|
||||
.initrd_filename = initrd_filename,
|
||||
.cpu_model = cpu_model };
|
||||
|
||||
current_machine->init_args = args;
|
||||
machine->init(¤t_machine->init_args);
|
||||
|
||||
audio_init();
|
||||
|
Loading…
Reference in New Issue
Block a user