mirror of
https://github.com/Motorhead1991/qemu.git
synced 2026-01-06 06:27:41 -07:00
Four changes here. Polling for reconnection of character devices,
the QOMification of accelerators, a fix for -kernel support on x86, and one for a recently-introduced virtio-scsi optimization. -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.22 (GNU/Linux) iQEcBAABAgAGBQJUNo9yAAoJEBRUblpOawnXQDkH/1M5DxmVwUv+SZtHEdpsT7Eq UGjRzfYXsYP/WkEqxVzYJmN0HJn9z8uJZin/dqwDPQLjCy8gf/xuaNCfoZqMuxHw iNaTgKpi9Uy0G0VWxjlZpRu8f5JjqHbJEP6aTT0hooBHaqQoBSm1fQh/pnCUvnpB qDQeHcOjrzIMkQJ3Ji8z2s+CapHaiIa63hJqRJztS5vbonPjngjj87dA54eIqDtQ RwXy58y+C8YMKqfpOG6lA+RxogESyyCfDBVUA1wwRDad1mOFKUMtEd4jAL39HUgR qINSKybG12V2bx8E+vNbaKB+68+NLdxcyR39JR2aun+a8yw+yDcF5BBiMXlqV0U= =4bqy -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/bonzini/tags/for-upstream' into staging Four changes here. Polling for reconnection of character devices, the QOMification of accelerators, a fix for -kernel support on x86, and one for a recently-introduced virtio-scsi optimization. # gpg: Signature made Thu 09 Oct 2014 14:36:50 BST using RSA key ID 4E6B09D7 # gpg: Good signature from "Paolo Bonzini <pbonzini@redhat.com>" # gpg: aka "Paolo Bonzini <bonzini@gnu.org>" * remotes/bonzini/tags/for-upstream: (28 commits) qemu-char: Fix reconnect socket error reporting qemu-sockets: Add error to non-blocking connect handler qemu-error: Add error_vreport() virtio-scsi: fix use-after-free of VirtIOSCSIReq linuxboot: compute initrd loading address kvm: Make KVMState be the TYPE_KVM_ACCEL instance struct accel: Create accel object when initializing machine accel: Pass MachineState object to accel init functions accel: Rename 'init' method to 'init_machine' accel: Move accel init/allowed code to separate function accel: Remove tcg_available() function accel: Move qtest accel registration to qtest.c accel: Move Xen registration code to xen-common.c accel: Move KVM accel registration to kvm-all.c accel: Report unknown accelerator as "not found" instead of "does not exist" accel: Make AccelClass.available() optional accel: Use QOM classes for accel types accel: Move accel name lookup to separate function accel: Simplify configure_accelerator() using AccelType *acc variable accel: Create AccelType typedef ... Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
fcb2cd928f
29 changed files with 711 additions and 235 deletions
83
vl.c
83
vl.c
|
|
@ -61,6 +61,7 @@ int main(int argc, char **argv)
|
|||
#include "qemu/sockets.h"
|
||||
#include "hw/hw.h"
|
||||
#include "hw/boards.h"
|
||||
#include "sysemu/accel.h"
|
||||
#include "hw/usb.h"
|
||||
#include "hw/pcmcia.h"
|
||||
#include "hw/i386/pc.h"
|
||||
|
|
@ -213,11 +214,9 @@ static NotifierList exit_notifiers =
|
|||
static NotifierList machine_init_done_notifiers =
|
||||
NOTIFIER_LIST_INITIALIZER(machine_init_done_notifiers);
|
||||
|
||||
static bool tcg_allowed = true;
|
||||
bool xen_allowed;
|
||||
uint32_t xen_domid;
|
||||
enum xen_mode xen_mode = XEN_EMULATE;
|
||||
static int tcg_tb_size;
|
||||
|
||||
static int has_defaults = 1;
|
||||
static int default_serial = 1;
|
||||
|
|
@ -2681,84 +2680,6 @@ static MachineClass *machine_parse(const char *name)
|
|||
exit(!name || !is_help_option(name));
|
||||
}
|
||||
|
||||
static int tcg_init(MachineClass *mc)
|
||||
{
|
||||
tcg_exec_init(tcg_tb_size * 1024 * 1024);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct {
|
||||
const char *opt_name;
|
||||
const char *name;
|
||||
int (*available)(void);
|
||||
int (*init)(MachineClass *mc);
|
||||
bool *allowed;
|
||||
} accel_list[] = {
|
||||
{ "tcg", "tcg", tcg_available, tcg_init, &tcg_allowed },
|
||||
{ "xen", "Xen", xen_available, xen_init, &xen_allowed },
|
||||
{ "kvm", "KVM", kvm_available, kvm_init, &kvm_allowed },
|
||||
{ "qtest", "QTest", qtest_available, qtest_init_accel, &qtest_allowed },
|
||||
};
|
||||
|
||||
static int configure_accelerator(MachineClass *mc)
|
||||
{
|
||||
const char *p;
|
||||
char buf[10];
|
||||
int i, ret;
|
||||
bool accel_initialised = false;
|
||||
bool init_failed = false;
|
||||
|
||||
p = qemu_opt_get(qemu_get_machine_opts(), "accel");
|
||||
if (p == NULL) {
|
||||
/* Use the default "accelerator", tcg */
|
||||
p = "tcg";
|
||||
}
|
||||
|
||||
while (!accel_initialised && *p != '\0') {
|
||||
if (*p == ':') {
|
||||
p++;
|
||||
}
|
||||
p = get_opt_name(buf, sizeof (buf), p, ':');
|
||||
for (i = 0; i < ARRAY_SIZE(accel_list); i++) {
|
||||
if (strcmp(accel_list[i].opt_name, buf) == 0) {
|
||||
if (!accel_list[i].available()) {
|
||||
printf("%s not supported for this target\n",
|
||||
accel_list[i].name);
|
||||
break;
|
||||
}
|
||||
*(accel_list[i].allowed) = true;
|
||||
ret = accel_list[i].init(mc);
|
||||
if (ret < 0) {
|
||||
init_failed = true;
|
||||
fprintf(stderr, "failed to initialize %s: %s\n",
|
||||
accel_list[i].name,
|
||||
strerror(-ret));
|
||||
*(accel_list[i].allowed) = false;
|
||||
} else {
|
||||
accel_initialised = true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (i == ARRAY_SIZE(accel_list)) {
|
||||
fprintf(stderr, "\"%s\" accelerator does not exist.\n", buf);
|
||||
}
|
||||
}
|
||||
|
||||
if (!accel_initialised) {
|
||||
if (!init_failed) {
|
||||
fprintf(stderr, "No accelerator found!\n");
|
||||
}
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (init_failed) {
|
||||
fprintf(stderr, "Back to %s accelerator.\n", accel_list[i].name);
|
||||
}
|
||||
|
||||
return !accel_initialised;
|
||||
}
|
||||
|
||||
void qemu_add_exit_notifier(Notifier *notify)
|
||||
{
|
||||
notifier_list_add(&exit_notifiers, notify);
|
||||
|
|
@ -4264,7 +4185,7 @@ int main(int argc, char **argv, char **envp)
|
|||
exit(1);
|
||||
}
|
||||
|
||||
configure_accelerator(machine_class);
|
||||
configure_accelerator(current_machine);
|
||||
|
||||
if (qtest_chrdev) {
|
||||
Error *local_err = NULL;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue