aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnthony Liguori <aliguori@us.ibm.com>2010-05-24 09:00:24 -0500
committerAnthony Liguori <aliguori@us.ibm.com>2010-05-24 09:00:24 -0500
commit3853528a913f0807170e2c78b6ea692f8515c859 (patch)
tree9592f6b3f07aabac6bbbaa0f593750e4d3205e9c
parent16f04416175844507b20072c422d08286ebbced6 (diff)
parent41836a9f7e4da3a265989d79f35c44f659f7b3cf (diff)
Merge remote branch 'qmp/for-anthony' into staging
-rw-r--r--QMP/qmp-spec.txt55
-rw-r--r--check-qdict.c3
-rw-r--r--check-qfloat.c5
-rw-r--r--check-qint.c3
-rw-r--r--check-qlist.c4
-rw-r--r--check-qstring.c3
-rw-r--r--hw/pci-hotplug.c51
-rw-r--r--monitor.c4
-rw-r--r--qbool.c8
-rw-r--r--qdict.c6
-rw-r--r--qdict.h12
-rw-r--r--qemu-monitor.hx6
-rw-r--r--qemu-objects.h5
-rw-r--r--qerror.c2
-rw-r--r--qerror.h2
-rw-r--r--qfloat.c8
-rw-r--r--qint.c7
-rw-r--r--qint.h12
-rw-r--r--qlist.c7
-rw-r--r--qlist.h7
-rw-r--r--qobject.h4
-rw-r--r--qstring.c7
-rw-r--r--qstring.h12
-rw-r--r--sysemu.h9
-rw-r--r--vl.c18
25 files changed, 143 insertions, 117 deletions
diff --git a/QMP/qmp-spec.txt b/QMP/qmp-spec.txt
index f3c0327703..9d30a8ce6e 100644
--- a/QMP/qmp-spec.txt
+++ b/QMP/qmp-spec.txt
@@ -215,3 +215,58 @@ Additionally, Clients must not assume any particular:
- Order of json-object members or json-array elements
- Amount of errors generated by a command, that is, new errors can be added
to any existing command in newer versions of the Server
+
+6. Downstream extension of QMP
+------------------------------
+
+We recommend that downstream consumers of QEMU do *not* modify QMP.
+Management tools should be able to support both upstream and downstream
+versions of QMP without special logic, and downstream extensions are
+inherently at odds with that.
+
+However, we recognize that it is sometimes impossible for downstreams to
+avoid modifying QMP. Both upstream and downstream need to take care to
+preserve long-term compatibility and interoperability.
+
+To help with that, QMP reserves JSON object member names beginning with
+'__' (double underscore) for downstream use ("downstream names"). This
+means upstream will never use any downstream names for its commands,
+arguments, errors, asynchronous events, and so forth.
+
+Any new names downstream wishes to add must begin with '__'. To
+ensure compatibility with other downstreams, it is strongly
+recommended that you prefix your downstram names with '__RFQDN_' where
+RFQDN is a valid, reverse fully qualified domain name which you
+control. For example, a qemu-kvm specific monitor command would be:
+
+ (qemu) __org.linux-kvm_enable_irqchip
+
+Downstream must not change the server greeting (section 2.2) other than
+to offer additional capabilities. But see below for why even that is
+discouraged.
+
+Section '5 Compatibility Considerations' applies to downstream as well
+as to upstream, obviously. It follows that downstream must behave
+exactly like upstream for any input not containing members with
+downstream names ("downstream members"), except it may add members
+with downstream names to its output.
+
+Thus, a client should not be able to distinguish downstream from
+upstream as long as it doesn't send input with downstream members, and
+properly ignores any downstream members in the output it receives.
+
+Advice on downstream modifications:
+
+1. Introducing new commands is okay. If you want to extend an existing
+ command, consider introducing a new one with the new behaviour
+ instead.
+
+2. Introducing new asynchronous messages is okay. If you want to extend
+ an existing message, consider adding a new one instead.
+
+3. Introducing new errors for use in new commands is okay. Adding new
+ errors to existing commands counts as extension, so 1. applies.
+
+4. New capabilities are strongly discouraged. Capabilities are for
+ evolving the basic protocol, and multiple diverging basic protocol
+ dialects are most undesirable.
diff --git a/check-qdict.c b/check-qdict.c
index f2b4826560..2c3089fa66 100644
--- a/check-qdict.c
+++ b/check-qdict.c
@@ -5,6 +5,9 @@
*
* Authors:
* Luiz Capitulino <lcapitulino@redhat.com>
+ *
+ * This work is licensed under the terms of the GNU LGPL, version 2.1 or later.
+ * See the COPYING.LIB file in the top-level directory.
*/
#include <check.h>
diff --git a/check-qfloat.c b/check-qfloat.c
index 3758700cb8..b71d9834f0 100644
--- a/check-qfloat.c
+++ b/check-qfloat.c
@@ -1,11 +1,6 @@
/*
* QFloat unit-tests.
*
- * Copyright (C) 2009 Red Hat Inc.
- *
- * Authors:
- * Luiz Capitulino <lcapitulino@redhat.com>
- *
* Copyright IBM, Corp. 2009
*
* Authors:
diff --git a/check-qint.c b/check-qint.c
index 49887bb7d9..f3b031698c 100644
--- a/check-qint.c
+++ b/check-qint.c
@@ -5,6 +5,9 @@
*
* Authors:
* Luiz Capitulino <lcapitulino@redhat.com>
+ *
+ * This work is licensed under the terms of the GNU LGPL, version 2.1 or later.
+ * See the COPYING.LIB file in the top-level directory.
*/
#include <check.h>
diff --git a/check-qlist.c b/check-qlist.c
index 0117ef32e8..58984cbfcc 100644
--- a/check-qlist.c
+++ b/check-qlist.c
@@ -6,8 +6,8 @@
* Authors:
* Luiz Capitulino <lcapitulino@redhat.com>
*
- * This work is licensed under the terms of the GNU GPL, version 2. See
- * the COPYING file in the top-level directory.
+ * This work is licensed under the terms of the GNU LGPL, version 2.1 or later.
+ * See the COPYING.LIB file in the top-level directory.
*/
#include <check.h>
diff --git a/check-qstring.c b/check-qstring.c
index c308a63eaf..c9bafc26b3 100644
--- a/check-qstring.c
+++ b/check-qstring.c
@@ -5,6 +5,9 @@
*
* Authors:
* Luiz Capitulino <lcapitulino@redhat.com>
+ *
+ * This work is licensed under the terms of the GNU LGPL, version 2.1 or later.
+ * See the COPYING.LIB file in the top-level directory.
*/
#include <check.h>
diff --git a/hw/pci-hotplug.c b/hw/pci-hotplug.c
index cc45c504ad..37ac015f7d 100644
--- a/hw/pci-hotplug.c
+++ b/hw/pci-hotplug.c
@@ -33,7 +33,6 @@
#include "scsi.h"
#include "virtio-blk.h"
#include "qemu-config.h"
-#include "qemu-objects.h"
#if defined(TARGET_I386)
static PCIDevice *qemu_pci_hot_add_nic(Monitor *mon,
@@ -224,36 +223,7 @@ static PCIDevice *qemu_pci_hot_add_storage(Monitor *mon,
return dev;
}
-void pci_device_hot_add_print(Monitor *mon, const QObject *data)
-{
- QDict *qdict;
-
- assert(qobject_type(data) == QTYPE_QDICT);
- qdict = qobject_to_qdict(data);
-
- monitor_printf(mon, "OK domain %d, bus %d, slot %d, function %d\n",
- (int) qdict_get_int(qdict, "domain"),
- (int) qdict_get_int(qdict, "bus"),
- (int) qdict_get_int(qdict, "slot"),
- (int) qdict_get_int(qdict, "function"));
-
-}
-
-/**
- * pci_device_hot_add(): Hot add a PCI device
- *
- * Return a QDict with the following device information:
- *
- * - "domain": domain number
- * - "bus": bus number
- * - "slot": slot number
- * - "function": function number
- *
- * Example:
- *
- * { "domain": 0, "bus": 0, "slot": 5, "function": 0 }
- */
-int pci_device_hot_add(Monitor *mon, const QDict *qdict, QObject **ret_data)
+void pci_device_hot_add(Monitor *mon, const QDict *qdict)
{
PCIDevice *dev = NULL;
const char *pci_addr = qdict_get_str(qdict, "pci_addr");
@@ -278,20 +248,14 @@ int pci_device_hot_add(Monitor *mon, const QDict *qdict, QObject **ret_data)
dev = qemu_pci_hot_add_storage(mon, pci_addr, opts);
} else {
monitor_printf(mon, "invalid type: %s\n", type);
- return -1;
}
if (dev) {
- *ret_data =
- qobject_from_jsonf("{ 'domain': 0, 'bus': %d, 'slot': %d, "
- "'function': %d }", pci_bus_num(dev->bus),
- PCI_SLOT(dev->devfn), PCI_FUNC(dev->devfn));
- } else {
+ monitor_printf(mon, "OK domain %d, bus %d, slot %d, function %d\n",
+ 0, pci_bus_num(dev->bus), PCI_SLOT(dev->devfn),
+ PCI_FUNC(dev->devfn));
+ } else
monitor_printf(mon, "failed to add %s\n", opts);
- return -1;
- }
-
- return 0;
}
#endif
@@ -313,8 +277,7 @@ int pci_device_hot_remove(Monitor *mon, const char *pci_addr)
return qdev_unplug(&d->qdev);
}
-int do_pci_device_hot_remove(Monitor *mon, const QDict *qdict,
- QObject **ret_data)
+void do_pci_device_hot_remove(Monitor *mon, const QDict *qdict)
{
- return pci_device_hot_remove(mon, qdict_get_str(qdict, "pci_addr"));
+ pci_device_hot_remove(mon, qdict_get_str(qdict, "pci_addr"));
}
diff --git a/monitor.c b/monitor.c
index a1ebc5d4d2..ad50f12edb 100644
--- a/monitor.c
+++ b/monitor.c
@@ -1021,7 +1021,9 @@ static void do_info_cpu_stats(Monitor *mon)
static int do_quit(Monitor *mon, const QDict *qdict, QObject **ret_data)
{
monitor_suspend(mon);
- qemu_system_exit_request();
+ no_shutdown = 0;
+ qemu_system_shutdown_request();
+
return 0;
}
diff --git a/qbool.c b/qbool.c
index 5ab734c2c7..ad4873f62c 100644
--- a/qbool.c
+++ b/qbool.c
@@ -1,14 +1,6 @@
/*
* QBool Module
*
- * Copyright (C) 2009 Red Hat Inc.
- *
- * Authors:
- * Luiz Capitulino <lcapitulino@redhat.com>
- *
- * This work is licensed under the terms of the GNU GPL, version 2. See
- * the COPYING file in the top-level directory.
- *
* Copyright IBM, Corp. 2009
*
* Authors:
diff --git a/qdict.c b/qdict.c
index aae57bf450..175bc178f0 100644
--- a/qdict.c
+++ b/qdict.c
@@ -1,13 +1,13 @@
/*
- * QDict data type.
+ * QDict Module
*
* Copyright (C) 2009 Red Hat Inc.
*
* Authors:
* Luiz Capitulino <lcapitulino@redhat.com>
*
- * This work is licensed under the terms of the GNU GPL, version 2. See
- * the COPYING file in the top-level directory.
+ * This work is licensed under the terms of the GNU LGPL, version 2.1 or later.
+ * See the COPYING.LIB file in the top-level directory.
*/
#include "qint.h"
diff --git a/qdict.h b/qdict.h
index 579dcddc74..5e5902caea 100644
--- a/qdict.h
+++ b/qdict.h
@@ -1,3 +1,15 @@
+/*
+ * QDict Module
+ *
+ * Copyright (C) 2009 Red Hat Inc.
+ *
+ * Authors:
+ * Luiz Capitulino <lcapitulino@redhat.com>
+ *
+ * This work is licensed under the terms of the GNU LGPL, version 2.1 or later.
+ * See the COPYING.LIB file in the top-level directory.
+ */
+
#ifndef QDICT_H
#define QDICT_H
diff --git a/qemu-monitor.hx b/qemu-monitor.hx
index a8f194c301..b6e3467c08 100644
--- a/qemu-monitor.hx
+++ b/qemu-monitor.hx
@@ -858,8 +858,7 @@ ETEXI
.args_type = "pci_addr:s,type:s,opts:s?",
.params = "auto|[[<domain>:]<bus>:]<slot> nic|storage [[vlan=n][,macaddr=addr][,model=type]] [file=file][,if=type][,bus=nr]...",
.help = "hot-add PCI device",
- .user_print = pci_device_hot_add_print,
- .mhandler.cmd_new = pci_device_hot_add,
+ .mhandler.cmd = pci_device_hot_add,
},
#endif
@@ -875,8 +874,7 @@ ETEXI
.args_type = "pci_addr:s",
.params = "[[<domain>:]<bus>:]<slot>",
.help = "hot remove PCI device",
- .user_print = monitor_user_noop,
- .mhandler.cmd_new = do_pci_device_hot_remove,
+ .mhandler.cmd = do_pci_device_hot_remove,
},
#endif
diff --git a/qemu-objects.h b/qemu-objects.h
index e1d1e0ca72..c53fbaa217 100644
--- a/qemu-objects.h
+++ b/qemu-objects.h
@@ -6,9 +6,10 @@
* Authors:
* Luiz Capitulino <lcapitulino@redhat.com>
*
- * This work is licensed under the terms of the GNU GPL, version 2. See
- * the COPYING file in the top-level directory.
+ * This work is licensed under the terms of the GNU LGPL, version 2.1 or later.
+ * See the COPYING.LIB file in the top-level directory.
*/
+
#ifndef QEMU_OBJECTS_H
#define QEMU_OBJECTS_H
diff --git a/qerror.c b/qerror.c
index 034c7deaad..44d0bf82b4 100644
--- a/qerror.c
+++ b/qerror.c
@@ -1,5 +1,5 @@
/*
- * QError: QEMU Error data-type.
+ * QError Module
*
* Copyright (C) 2009 Red Hat Inc.
*
diff --git a/qerror.h b/qerror.h
index c98c61ad11..77ae57464e 100644
--- a/qerror.h
+++ b/qerror.h
@@ -1,5 +1,5 @@
/*
- * QError header file.
+ * QError Module
*
* Copyright (C) 2009 Red Hat Inc.
*
diff --git a/qfloat.c b/qfloat.c
index 05215f5027..f8c8a2eb21 100644
--- a/qfloat.c
+++ b/qfloat.c
@@ -1,14 +1,6 @@
/*
* QFloat Module
*
- * Copyright (C) 2009 Red Hat Inc.
- *
- * Authors:
- * Luiz Capitulino <lcapitulino@redhat.com>
- *
- * This work is licensed under the terms of the GNU GPL, version 2. See
- * the COPYING file in the top-level directory.
- *
* Copyright IBM, Corp. 2009
*
* Authors:
diff --git a/qint.c b/qint.c
index 447e847af3..fb3823a7f4 100644
--- a/qint.c
+++ b/qint.c
@@ -1,14 +1,15 @@
/*
- * QInt data type.
+ * QInt Module
*
* Copyright (C) 2009 Red Hat Inc.
*
* Authors:
* Luiz Capitulino <lcapitulino@redhat.com>
*
- * This work is licensed under the terms of the GNU GPL, version 2. See
- * the COPYING file in the top-level directory.
+ * This work is licensed under the terms of the GNU LGPL, version 2.1 or later.
+ * See the COPYING.LIB file in the top-level directory.
*/
+
#include "qint.h"
#include "qobject.h"
#include "qemu-common.h"
diff --git a/qint.h b/qint.h
index 672b32196c..6b1a15c088 100644
--- a/qint.h
+++ b/qint.h
@@ -1,3 +1,15 @@
+/*
+ * QInt Module
+ *
+ * Copyright (C) 2009 Red Hat Inc.
+ *
+ * Authors:
+ * Luiz Capitulino <lcapitulino@redhat.com>
+ *
+ * This work is licensed under the terms of the GNU LGPL, version 2.1 or later.
+ * See the COPYING.LIB file in the top-level directory.
+ */
+
#ifndef QINT_H
#define QINT_H
diff --git a/qlist.c b/qlist.c
index 5fccb7d095..5730fb87f7 100644
--- a/qlist.c
+++ b/qlist.c
@@ -1,14 +1,15 @@
/*
- * QList data type.
+ * QList Module
*
* Copyright (C) 2009 Red Hat Inc.
*
* Authors:
* Luiz Capitulino <lcapitulino@redhat.com>
*
- * This work is licensed under the terms of the GNU GPL, version 2. See
- * the COPYING file in the top-level directory.
+ * This work is licensed under the terms of the GNU LGPL, version 2.1 or later.
+ * See the COPYING.LIB file in the top-level directory.
*/
+
#include "qlist.h"
#include "qobject.h"
#include "qemu-queue.h"
diff --git a/qlist.h b/qlist.h
index a3261e1781..dbe7b92db5 100644
--- a/qlist.h
+++ b/qlist.h
@@ -1,14 +1,15 @@
/*
- * QList data type header.
+ * QList Module
*
* Copyright (C) 2009 Red Hat Inc.
*
* Authors:
* Luiz Capitulino <lcapitulino@redhat.com>
*
- * This work is licensed under the terms of the GNU GPL, version 2. See
- * the COPYING file in the top-level directory.
+ * This work is licensed under the terms of the GNU LGPL, version 2.1 or later.
+ * See the COPYING.LIB file in the top-level directory.
*/
+
#ifndef QLIST_H
#define QLIST_H
diff --git a/qobject.h b/qobject.h
index 07de211ef0..d42386dde1 100644
--- a/qobject.h
+++ b/qobject.h
@@ -8,8 +8,8 @@
* Authors:
* Luiz Capitulino <lcapitulino@redhat.com>
*
- * This work is licensed under the terms of the GNU GPL, version 2. See
- * the COPYING file in the top-level directory.
+ * This work is licensed under the terms of the GNU LGPL, version 2.1 or later.
+ * See the COPYING.LIB file in the top-level directory.
*
* QObject Reference Counts Terminology
* ------------------------------------
diff --git a/qstring.c b/qstring.c
index 740a1067d2..4e2ba083b7 100644
--- a/qstring.c
+++ b/qstring.c
@@ -1,14 +1,15 @@
/*
- * QString data type.
+ * QString Module
*
* Copyright (C) 2009 Red Hat Inc.
*
* Authors:
* Luiz Capitulino <lcapitulino@redhat.com>
*
- * This work is licensed under the terms of the GNU GPL, version 2. See
- * the COPYING file in the top-level directory.
+ * This work is licensed under the terms of the GNU LGPL, version 2.1 or later.
+ * See the COPYING.LIB file in the top-level directory.
*/
+
#include "qobject.h"
#include "qstring.h"
#include "qemu-common.h"
diff --git a/qstring.h b/qstring.h
index 6aaa7d5c83..84ccd96d61 100644
--- a/qstring.h
+++ b/qstring.h
@@ -1,3 +1,15 @@
+/*
+ * QString Module
+ *
+ * Copyright (C) 2009 Red Hat Inc.
+ *
+ * Authors:
+ * Luiz Capitulino <lcapitulino@redhat.com>
+ *
+ * This work is licensed under the terms of the GNU LGPL, version 2.1 or later.
+ * See the COPYING.LIB file in the top-level directory.
+ */
+
#ifndef QSTRING_H
#define QSTRING_H
diff --git a/sysemu.h b/sysemu.h
index fa921df94a..879446ab9e 100644
--- a/sysemu.h
+++ b/sysemu.h
@@ -45,11 +45,9 @@ void cpu_disable_ticks(void);
void qemu_system_reset_request(void);
void qemu_system_shutdown_request(void);
void qemu_system_powerdown_request(void);
-void qemu_system_exit_request(void);
int qemu_shutdown_requested(void);
int qemu_reset_requested(void);
int qemu_powerdown_requested(void);
-int qemu_exit_requested(void);
extern qemu_irq qemu_system_powerdown;
void qemu_system_reset(void);
@@ -130,6 +128,7 @@ extern int max_cpus;
extern int cursor_hide;
extern int graphic_rotate;
extern int no_quit;
+extern int no_shutdown;
extern int semihosting_enabled;
extern int old_param;
extern int boot_menu;
@@ -201,12 +200,10 @@ extern DriveInfo *drive_init(QemuOpts *arg, void *machine, int *fatal_error);
DriveInfo *add_init_drive(const char *opts);
/* pci-hotplug */
-void pci_device_hot_add_print(Monitor *mon, const QObject *data);
-int pci_device_hot_add(Monitor *mon, const QDict *qdict, QObject **ret_data);
+void pci_device_hot_add(Monitor *mon, const QDict *qdict);
void drive_hot_add(Monitor *mon, const QDict *qdict);
int pci_device_hot_remove(Monitor *mon, const char *pci_addr);
-int do_pci_device_hot_remove(Monitor *mon, const QDict *qdict,
- QObject **ret_data);
+void do_pci_device_hot_remove(Monitor *mon, const QDict *qdict);
/* serial ports */
diff --git a/vl.c b/vl.c
index d77b47c6f7..8c818f0d24 100644
--- a/vl.c
+++ b/vl.c
@@ -1708,7 +1708,6 @@ static int shutdown_requested;
static int powerdown_requested;
int debug_requested;
int vmstop_requested;
-static int exit_requested;
int qemu_shutdown_requested(void)
{
@@ -1731,12 +1730,6 @@ int qemu_powerdown_requested(void)
return r;
}
-int qemu_exit_requested(void)
-{
- /* just return it, we'll exit() anyway */
- return exit_requested;
-}
-
static int qemu_debug_requested(void)
{
int r = debug_requested;
@@ -1807,12 +1800,6 @@ void qemu_system_powerdown_request(void)
qemu_notify_event();
}
-void qemu_system_exit_request(void)
-{
- exit_requested = 1;
- qemu_notify_event();
-}
-
#ifdef _WIN32
static void host_main_loop_wait(int *timeout)
{
@@ -1949,8 +1936,6 @@ static int vm_can_run(void)
return 0;
if (debug_requested)
return 0;
- if (exit_requested)
- return 0;
return 1;
}
@@ -2003,9 +1988,6 @@ static void main_loop(void)
if ((r = qemu_vmstop_requested())) {
vm_stop(r);
}
- if (qemu_exit_requested()) {
- exit(0);
- }
}
pause_all_vcpus();
}