* [PATCH 0/9] user-mode: Prune build dependencies (part 3)
@ 2020-03-13 18:45 Philippe Mathieu-Daudé
2020-03-13 18:45 ` [PATCH 1/9] hw/core/qdev-properties: Use qemu_strtol() in set_mac() handler Philippe Mathieu-Daudé
` (10 more replies)
0 siblings, 11 replies; 25+ messages in thread
From: Philippe Mathieu-Daudé @ 2020-03-13 18:45 UTC (permalink / raw)
To: qemu-devel
Cc: Daniel P. Berrangé,
Eduardo Habkost, Markus Armbruster, Laurent Vivier, Michael Roth,
Paolo Bonzini, Philippe Mathieu-Daudé
This is the second part of a series reducing user-mode
dependencies. By stripping out unused code, the build
and testing time is reduced (as is space used by objects).
Part 3:
- Extract code not related to user-mode from hw/core/qdev-properties.c
- Reduce user-mode QAPI generated files
Based-on: <20200313184153.11275-1-philmd@redhat.com>
Philippe Mathieu-Daudé (9):
hw/core/qdev-properties: Use qemu_strtol() in set_mac() handler
hw/core/qdev-properties: Use qemu_strtoul() in set_pci_host_devaddr()
hw/core/qdev-properties: Fix code style
hw/core/qdev-properties: Export enum-related functions
hw/core/qdev-properties: Export qdev_prop_enum
hw/core/qdev-properties: Export some integer-related functions
hw/core/qdev-properties: Extract system-mode specific properties
hw/core: Add qdev stub for user-mode
qapi: Restrict code generated for user-mode
hw/core/qdev-prop-internal.h | 28 ++
include/hw/qdev-properties.h | 1 +
hw/core/qdev-properties-system.c | 602 ++++++++++++++++++++++++++++-
hw/core/qdev-properties.c | 643 ++-----------------------------
hw/core/qdev-stubs.c | 20 +
hw/core/Makefile.objs | 1 +
qapi/Makefile.objs | 37 +-
7 files changed, 712 insertions(+), 620 deletions(-)
create mode 100644 hw/core/qdev-prop-internal.h
create mode 100644 hw/core/qdev-stubs.c
--
2.21.1
^ permalink raw reply [flat|nested] 25+ messages in thread
* [PATCH 1/9] hw/core/qdev-properties: Use qemu_strtol() in set_mac() handler
2020-03-13 18:45 [PATCH 0/9] user-mode: Prune build dependencies (part 3) Philippe Mathieu-Daudé
@ 2020-03-13 18:45 ` Philippe Mathieu-Daudé
2020-03-15 21:25 ` Richard Henderson
2020-03-13 18:46 ` [PATCH 2/9] hw/core/qdev-properties: Use qemu_strtoul() in set_pci_host_devaddr() Philippe Mathieu-Daudé
` (9 subsequent siblings)
10 siblings, 1 reply; 25+ messages in thread
From: Philippe Mathieu-Daudé @ 2020-03-13 18:45 UTC (permalink / raw)
To: qemu-devel
Cc: Daniel P. Berrangé,
Eduardo Habkost, Markus Armbruster, Laurent Vivier, Michael Roth,
Paolo Bonzini, Philippe Mathieu-Daudé
Replace strtol() by qemu_strtol() so checkpatch.pl won't complain
if we move this code later.
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
---
hw/core/qdev-properties.c | 11 +++++++++--
1 file changed, 9 insertions(+), 2 deletions(-)
diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c
index 59380ed761..48e4c98cf0 100644
--- a/hw/core/qdev-properties.c
+++ b/hw/core/qdev-properties.c
@@ -1,4 +1,5 @@
#include "qemu/osdep.h"
+#include "qemu/cutils.h"
#include "net/net.h"
#include "hw/qdev-properties.h"
#include "qapi/error.h"
@@ -532,7 +533,8 @@ static void set_mac(Object *obj, Visitor *v, const char *name, void *opaque,
MACAddr *mac = qdev_get_prop_ptr(dev, prop);
Error *local_err = NULL;
int i, pos;
- char *str, *p;
+ char *str;
+ const char *p;
if (dev->realized) {
qdev_prop_set_after_realize(dev, name, errp);
@@ -546,6 +548,8 @@ static void set_mac(Object *obj, Visitor *v, const char *name, void *opaque,
}
for (i = 0, pos = 0; i < 6; i++, pos += 3) {
+ long val;
+
if (!qemu_isxdigit(str[pos])) {
goto inval;
}
@@ -561,7 +565,10 @@ static void set_mac(Object *obj, Visitor *v, const char *name, void *opaque,
goto inval;
}
}
- mac->a[i] = strtol(str+pos, &p, 16);
+ if (qemu_strtol(str + pos, &p, 16, &val) < 0 || val > 0xff) {
+ goto inval;
+ }
+ mac->a[i] = val;
}
g_free(str);
return;
--
2.21.1
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH 2/9] hw/core/qdev-properties: Use qemu_strtoul() in set_pci_host_devaddr()
2020-03-13 18:45 [PATCH 0/9] user-mode: Prune build dependencies (part 3) Philippe Mathieu-Daudé
2020-03-13 18:45 ` [PATCH 1/9] hw/core/qdev-properties: Use qemu_strtol() in set_mac() handler Philippe Mathieu-Daudé
@ 2020-03-13 18:46 ` Philippe Mathieu-Daudé
2020-03-15 21:43 ` Richard Henderson
2020-03-13 18:46 ` [PATCH 3/9] hw/core/qdev-properties: Fix code style Philippe Mathieu-Daudé
` (8 subsequent siblings)
10 siblings, 1 reply; 25+ messages in thread
From: Philippe Mathieu-Daudé @ 2020-03-13 18:46 UTC (permalink / raw)
To: qemu-devel
Cc: Daniel P. Berrangé,
Eduardo Habkost, Markus Armbruster, Laurent Vivier, Michael Roth,
Paolo Bonzini, Philippe Mathieu-Daudé
Replace strtoul() by qemu_strtoul() so checkpatch.pl won't complain
if we move this code later.
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
---
hw/core/qdev-properties.c | 25 ++++++++++++-------------
1 file changed, 12 insertions(+), 13 deletions(-)
diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c
index 48e4c98cf0..e1cefcaa61 100644
--- a/hw/core/qdev-properties.c
+++ b/hw/core/qdev-properties.c
@@ -820,7 +820,7 @@ static void set_pci_host_devaddr(Object *obj, Visitor *v, const char *name,
PCIHostDeviceAddress *addr = qdev_get_prop_ptr(dev, prop);
Error *local_err = NULL;
char *str, *p;
- char *e;
+ const char *e;
unsigned long val;
unsigned long dom = 0, bus = 0;
unsigned int slot = 0, func = 0;
@@ -837,23 +837,23 @@ static void set_pci_host_devaddr(Object *obj, Visitor *v, const char *name,
}
p = str;
- val = strtoul(p, &e, 16);
- if (e == p || *e != ':') {
+ if (qemu_strtoul(p, &e, 16, &val) < 0 || val > 0xffff || e == p) {
+ goto inval;
+ }
+ if (*e != ':') {
goto inval;
}
bus = val;
- p = e + 1;
- val = strtoul(p, &e, 16);
- if (e == p) {
+ p = (char *)e + 1;
+ if (qemu_strtoul(p, &e, 16, &val) < 0 || val > 0x1f || e == p) {
goto inval;
}
if (*e == ':') {
dom = bus;
bus = val;
- p = e + 1;
- val = strtoul(p, &e, 16);
- if (e == p) {
+ p = (char *)e + 1;
+ if (qemu_strtoul(p, &e, 16, &val) < 0 || val > 0x1f || e == p) {
goto inval;
}
}
@@ -862,14 +862,13 @@ static void set_pci_host_devaddr(Object *obj, Visitor *v, const char *name,
if (*e != '.') {
goto inval;
}
- p = e + 1;
- val = strtoul(p, &e, 10);
- if (e == p) {
+ p = (char *)e + 1;
+ if (qemu_strtoul(p, &e, 10, &val) < 0 || val > 7 || e == p) {
goto inval;
}
func = val;
- if (dom > 0xffff || bus > 0xff || slot > 0x1f || func > 7) {
+ if (bus > 0xff) {
goto inval;
}
--
2.21.1
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH 3/9] hw/core/qdev-properties: Fix code style
2020-03-13 18:45 [PATCH 0/9] user-mode: Prune build dependencies (part 3) Philippe Mathieu-Daudé
2020-03-13 18:45 ` [PATCH 1/9] hw/core/qdev-properties: Use qemu_strtol() in set_mac() handler Philippe Mathieu-Daudé
2020-03-13 18:46 ` [PATCH 2/9] hw/core/qdev-properties: Use qemu_strtoul() in set_pci_host_devaddr() Philippe Mathieu-Daudé
@ 2020-03-13 18:46 ` Philippe Mathieu-Daudé
2020-03-15 22:24 ` Richard Henderson
2020-03-13 18:46 ` [PATCH 4/9] hw/core/qdev-properties: Export enum-related functions Philippe Mathieu-Daudé
` (7 subsequent siblings)
10 siblings, 1 reply; 25+ messages in thread
From: Philippe Mathieu-Daudé @ 2020-03-13 18:46 UTC (permalink / raw)
To: qemu-devel
Cc: Daniel P. Berrangé,
Eduardo Habkost, Markus Armbruster, Laurent Vivier, Michael Roth,
Paolo Bonzini, Philippe Mathieu-Daudé
We will soon move this code, fix its style to avoid checkpatch.pl
to complain.
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
---
hw/core/qdev-properties.c | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c
index e1cefcaa61..ea5b59d5c5 100644
--- a/hw/core/qdev-properties.c
+++ b/hw/core/qdev-properties.c
@@ -553,15 +553,15 @@ static void set_mac(Object *obj, Visitor *v, const char *name, void *opaque,
if (!qemu_isxdigit(str[pos])) {
goto inval;
}
- if (!qemu_isxdigit(str[pos+1])) {
+ if (!qemu_isxdigit(str[pos + 1])) {
goto inval;
}
if (i == 5) {
- if (str[pos+2] != '\0') {
+ if (str[pos + 2] != '\0') {
goto inval;
}
} else {
- if (str[pos+2] != ':' && str[pos+2] != '-') {
+ if (str[pos + 2] != ':' && str[pos + 2] != '-') {
goto inval;
}
}
@@ -767,8 +767,8 @@ static void set_blocksize(Object *obj, Visitor *v, const char *name,
/* We rely on power-of-2 blocksizes for bitmasks */
if ((value & (value - 1)) != 0) {
error_setg(errp,
- "Property %s.%s doesn't take value '%" PRId64 "', it's not a power of 2",
- dev->id ?: "", name, (int64_t)value);
+ "Property %s.%s doesn't take value '%" PRId64 "', "
+ "it's not a power of 2", dev->id ?: "", name, (int64_t)value);
return;
}
--
2.21.1
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH 4/9] hw/core/qdev-properties: Export enum-related functions
2020-03-13 18:45 [PATCH 0/9] user-mode: Prune build dependencies (part 3) Philippe Mathieu-Daudé
` (2 preceding siblings ...)
2020-03-13 18:46 ` [PATCH 3/9] hw/core/qdev-properties: Fix code style Philippe Mathieu-Daudé
@ 2020-03-13 18:46 ` Philippe Mathieu-Daudé
2020-03-15 22:26 ` Richard Henderson
2020-03-13 18:46 ` [PATCH 5/9] hw/core/qdev-properties: Export qdev_prop_enum Philippe Mathieu-Daudé
` (6 subsequent siblings)
10 siblings, 1 reply; 25+ messages in thread
From: Philippe Mathieu-Daudé @ 2020-03-13 18:46 UTC (permalink / raw)
To: qemu-devel
Cc: Daniel P. Berrangé,
Eduardo Habkost, Markus Armbruster, Laurent Vivier, Michael Roth,
Paolo Bonzini, Philippe Mathieu-Daudé
We are going to split this file and reuse these static functions.
Add the local "qdev-prop-internal.h" header declaring them.
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
---
hw/core/qdev-prop-internal.h | 19 ++++++++++++
hw/core/qdev-properties.c | 58 +++++++++++++++++++-----------------
2 files changed, 49 insertions(+), 28 deletions(-)
create mode 100644 hw/core/qdev-prop-internal.h
diff --git a/hw/core/qdev-prop-internal.h b/hw/core/qdev-prop-internal.h
new file mode 100644
index 0000000000..2a8c9a306a
--- /dev/null
+++ b/hw/core/qdev-prop-internal.h
@@ -0,0 +1,19 @@
+/*
+ * qdev property parsing
+ *
+ * This work is licensed under the terms of the GNU GPL, version 2 or later.
+ * See the COPYING file in the top-level directory.
+ */
+
+#ifndef HW_CORE_QDEV_PROP_INTERNAL_H
+#define HW_CORE_QDEV_PROP_INTERNAL_H
+
+void qdev_propinfo_get_enum(Object *obj, Visitor *v, const char *name,
+ void *opaque, Error **errp);
+void qdev_propinfo_set_enum(Object *obj, Visitor *v, const char *name,
+ void *opaque, Error **errp);
+
+void qdev_propinfo_set_default_value_enum(ObjectProperty *op,
+ const Property *prop);
+
+#endif
diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c
index ea5b59d5c5..9c383ffa44 100644
--- a/hw/core/qdev-properties.c
+++ b/hw/core/qdev-properties.c
@@ -16,6 +16,7 @@
#include "qapi/visitor.h"
#include "chardev/char.h"
#include "qemu/uuid.h"
+#include "qdev-prop-internal.h"
void qdev_prop_set_after_realize(DeviceState *dev, const char *name,
Error **errp)
@@ -51,8 +52,8 @@ void *qdev_get_prop_ptr(DeviceState *dev, Property *prop)
return ptr;
}
-static void get_enum(Object *obj, Visitor *v, const char *name, void *opaque,
- Error **errp)
+void qdev_propinfo_get_enum(Object *obj, Visitor *v, const char *name,
+ void *opaque, Error **errp)
{
DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
@@ -61,8 +62,8 @@ static void get_enum(Object *obj, Visitor *v, const char *name, void *opaque,
visit_type_enum(v, prop->name, ptr, prop->info->enum_table, errp);
}
-static void set_enum(Object *obj, Visitor *v, const char *name, void *opaque,
- Error **errp)
+void qdev_propinfo_set_enum(Object *obj, Visitor *v, const char *name,
+ void *opaque, Error **errp)
{
DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
@@ -76,7 +77,8 @@ static void set_enum(Object *obj, Visitor *v, const char *name, void *opaque,
visit_type_enum(v, prop->name, ptr, prop->info->enum_table, errp);
}
-static void set_default_value_enum(ObjectProperty *op, const Property *prop)
+void qdev_propinfo_set_default_value_enum(ObjectProperty *op,
+ const Property *prop)
{
object_property_set_default_str(op,
qapi_enum_lookup(prop->info->enum_table, prop->defval.i));
@@ -591,9 +593,9 @@ const PropertyInfo qdev_prop_on_off_auto = {
.name = "OnOffAuto",
.description = "on/off/auto",
.enum_table = &OnOffAuto_lookup,
- .get = get_enum,
- .set = set_enum,
- .set_default_value = set_default_value_enum,
+ .get = qdev_propinfo_get_enum,
+ .set = qdev_propinfo_set_enum,
+ .set_default_value = qdev_propinfo_set_default_value_enum,
};
/* --- lost tick policy --- */
@@ -603,9 +605,9 @@ QEMU_BUILD_BUG_ON(sizeof(LostTickPolicy) != sizeof(int));
const PropertyInfo qdev_prop_losttickpolicy = {
.name = "LostTickPolicy",
.enum_table = &LostTickPolicy_lookup,
- .get = get_enum,
- .set = set_enum,
- .set_default_value = set_default_value_enum,
+ .get = qdev_propinfo_get_enum,
+ .set = qdev_propinfo_set_enum,
+ .set_default_value = qdev_propinfo_set_default_value_enum,
};
/* --- Block device error handling policy --- */
@@ -617,9 +619,9 @@ const PropertyInfo qdev_prop_blockdev_on_error = {
.description = "Error handling policy, "
"report/ignore/enospc/stop/auto",
.enum_table = &BlockdevOnError_lookup,
- .get = get_enum,
- .set = set_enum,
- .set_default_value = set_default_value_enum,
+ .get = qdev_propinfo_get_enum,
+ .set = qdev_propinfo_set_enum,
+ .set_default_value = qdev_propinfo_set_default_value_enum,
};
/* --- BIOS CHS translation */
@@ -631,9 +633,9 @@ const PropertyInfo qdev_prop_bios_chs_trans = {
.description = "Logical CHS translation algorithm, "
"auto/none/lba/large/rechs",
.enum_table = &BiosAtaTranslation_lookup,
- .get = get_enum,
- .set = set_enum,
- .set_default_value = set_default_value_enum,
+ .get = qdev_propinfo_get_enum,
+ .set = qdev_propinfo_set_enum,
+ .set_default_value = qdev_propinfo_set_default_value_enum,
};
/* --- FDC default drive types */
@@ -643,9 +645,9 @@ const PropertyInfo qdev_prop_fdc_drive_type = {
.description = "FDC drive type, "
"144/288/120/none/auto",
.enum_table = &FloppyDriveType_lookup,
- .get = get_enum,
- .set = set_enum,
- .set_default_value = set_default_value_enum,
+ .get = qdev_propinfo_get_enum,
+ .set = qdev_propinfo_set_enum,
+ .set_default_value = qdev_propinfo_set_default_value_enum,
};
/* --- MultiFDCompression --- */
@@ -655,9 +657,9 @@ const PropertyInfo qdev_prop_multifd_compression = {
.description = "multifd_compression values, "
"none/zlib/zstd",
.enum_table = &MultiFDCompression_lookup,
- .get = get_enum,
- .set = set_enum,
- .set_default_value = set_default_value_enum,
+ .get = qdev_propinfo_get_enum,
+ .set = qdev_propinfo_set_enum,
+ .set_default_value = qdev_propinfo_set_default_value_enum,
};
/* --- pci address --- */
@@ -1281,9 +1283,9 @@ const PropertyInfo qdev_prop_off_auto_pcibar = {
.name = "OffAutoPCIBAR",
.description = "off/auto/bar0/bar1/bar2/bar3/bar4/bar5",
.enum_table = &OffAutoPCIBAR_lookup,
- .get = get_enum,
- .set = set_enum,
- .set_default_value = set_default_value_enum,
+ .get = qdev_propinfo_get_enum,
+ .set = qdev_propinfo_set_enum,
+ .set_default_value = qdev_propinfo_set_default_value_enum,
};
/* --- PCIELinkSpeed 2_5/5/8/16 -- */
@@ -1362,7 +1364,7 @@ const PropertyInfo qdev_prop_pcie_link_speed = {
.enum_table = &PCIELinkSpeed_lookup,
.get = get_prop_pcielinkspeed,
.set = set_prop_pcielinkspeed,
- .set_default_value = set_default_value_enum,
+ .set_default_value = qdev_propinfo_set_default_value_enum,
};
/* --- PCIELinkWidth 1/2/4/8/12/16/32 -- */
@@ -1459,5 +1461,5 @@ const PropertyInfo qdev_prop_pcie_link_width = {
.enum_table = &PCIELinkWidth_lookup,
.get = get_prop_pcielinkwidth,
.set = set_prop_pcielinkwidth,
- .set_default_value = set_default_value_enum,
+ .set_default_value = qdev_propinfo_set_default_value_enum,
};
--
2.21.1
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH 5/9] hw/core/qdev-properties: Export qdev_prop_enum
2020-03-13 18:45 [PATCH 0/9] user-mode: Prune build dependencies (part 3) Philippe Mathieu-Daudé
` (3 preceding siblings ...)
2020-03-13 18:46 ` [PATCH 4/9] hw/core/qdev-properties: Export enum-related functions Philippe Mathieu-Daudé
@ 2020-03-13 18:46 ` Philippe Mathieu-Daudé
2020-03-15 22:26 ` Richard Henderson
2020-03-13 18:46 ` [PATCH 6/9] hw/core/qdev-properties: Export some integer-related functions Philippe Mathieu-Daudé
` (5 subsequent siblings)
10 siblings, 1 reply; 25+ messages in thread
From: Philippe Mathieu-Daudé @ 2020-03-13 18:46 UTC (permalink / raw)
To: qemu-devel
Cc: Daniel P. Berrangé,
Eduardo Habkost, Markus Armbruster, Laurent Vivier, Michael Roth,
Paolo Bonzini, Philippe Mathieu-Daudé
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
---
include/hw/qdev-properties.h | 1 +
hw/core/qdev-properties.c | 7 +++++++
2 files changed, 8 insertions(+)
diff --git a/include/hw/qdev-properties.h b/include/hw/qdev-properties.h
index f161604fb6..134753d595 100644
--- a/include/hw/qdev-properties.h
+++ b/include/hw/qdev-properties.h
@@ -8,6 +8,7 @@
extern const PropertyInfo qdev_prop_bit;
extern const PropertyInfo qdev_prop_bit64;
extern const PropertyInfo qdev_prop_bool;
+extern const PropertyInfo qdev_prop_enum;
extern const PropertyInfo qdev_prop_uint8;
extern const PropertyInfo qdev_prop_uint16;
extern const PropertyInfo qdev_prop_uint32;
diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c
index 9c383ffa44..5912c394d4 100644
--- a/hw/core/qdev-properties.c
+++ b/hw/core/qdev-properties.c
@@ -84,6 +84,13 @@ void qdev_propinfo_set_default_value_enum(ObjectProperty *op,
qapi_enum_lookup(prop->info->enum_table, prop->defval.i));
}
+const PropertyInfo qdev_prop_enum = {
+ .name = "enum",
+ .get = qdev_propinfo_get_enum,
+ .set = qdev_propinfo_set_enum,
+ .set_default_value = qdev_propinfo_set_default_value_enum,
+};
+
/* Bit */
static uint32_t qdev_get_prop_mask(Property *prop)
--
2.21.1
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH 6/9] hw/core/qdev-properties: Export some integer-related functions
2020-03-13 18:45 [PATCH 0/9] user-mode: Prune build dependencies (part 3) Philippe Mathieu-Daudé
` (4 preceding siblings ...)
2020-03-13 18:46 ` [PATCH 5/9] hw/core/qdev-properties: Export qdev_prop_enum Philippe Mathieu-Daudé
@ 2020-03-13 18:46 ` Philippe Mathieu-Daudé
2020-03-15 22:27 ` Richard Henderson
2020-03-13 18:46 ` [PATCH 7/9] hw/core/qdev-properties: Extract system-mode specific properties Philippe Mathieu-Daudé
` (4 subsequent siblings)
10 siblings, 1 reply; 25+ messages in thread
From: Philippe Mathieu-Daudé @ 2020-03-13 18:46 UTC (permalink / raw)
To: qemu-devel
Cc: Daniel P. Berrangé,
Eduardo Habkost, Markus Armbruster, Laurent Vivier, Michael Roth,
Paolo Bonzini, Philippe Mathieu-Daudé
We are going to split this file and reuse these static functions.
Declare them in the local "qdev-prop-internal.h" header.
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
---
hw/core/qdev-prop-internal.h | 9 ++++++++
hw/core/qdev-properties.c | 42 +++++++++++++++++++-----------------
2 files changed, 31 insertions(+), 20 deletions(-)
diff --git a/hw/core/qdev-prop-internal.h b/hw/core/qdev-prop-internal.h
index 2a8c9a306a..dd2f215f1c 100644
--- a/hw/core/qdev-prop-internal.h
+++ b/hw/core/qdev-prop-internal.h
@@ -15,5 +15,14 @@ void qdev_propinfo_set_enum(Object *obj, Visitor *v, const char *name,
void qdev_propinfo_set_default_value_enum(ObjectProperty *op,
const Property *prop);
+void qdev_propinfo_set_default_value_int(ObjectProperty *op,
+ const Property *prop);
+void qdev_propinfo_set_default_value_uint(ObjectProperty *op,
+ const Property *prop);
+
+void qdev_propinfo_get_uint16(Object *obj, Visitor *v, const char *name,
+ void *opaque, Error **errp);
+void qdev_propinfo_get_int32(Object *obj, Visitor *v, const char *name,
+ void *opaque, Error **errp);
#endif
diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c
index 5912c394d4..534fc674db 100644
--- a/hw/core/qdev-properties.c
+++ b/hw/core/qdev-properties.c
@@ -275,12 +275,14 @@ static void set_uint8(Object *obj, Visitor *v, const char *name, void *opaque,
visit_type_uint8(v, name, ptr, errp);
}
-static void set_default_value_int(ObjectProperty *op, const Property *prop)
+void qdev_propinfo_set_default_value_int(ObjectProperty *op,
+ const Property *prop)
{
object_property_set_default_int(op, prop->defval.i);
}
-static void set_default_value_uint(ObjectProperty *op, const Property *prop)
+void qdev_propinfo_set_default_value_uint(ObjectProperty *op,
+ const Property *prop)
{
object_property_set_default_uint(op, prop->defval.u);
}
@@ -289,13 +291,13 @@ const PropertyInfo qdev_prop_uint8 = {
.name = "uint8",
.get = get_uint8,
.set = set_uint8,
- .set_default_value = set_default_value_uint,
+ .set_default_value = qdev_propinfo_set_default_value_uint,
};
/* --- 16bit integer --- */
-static void get_uint16(Object *obj, Visitor *v, const char *name,
- void *opaque, Error **errp)
+void qdev_propinfo_get_uint16(Object *obj, Visitor *v, const char *name,
+ void *opaque, Error **errp)
{
DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
@@ -321,9 +323,9 @@ static void set_uint16(Object *obj, Visitor *v, const char *name,
const PropertyInfo qdev_prop_uint16 = {
.name = "uint16",
- .get = get_uint16,
+ .get = qdev_propinfo_get_uint16,
.set = set_uint16,
- .set_default_value = set_default_value_uint,
+ .set_default_value = qdev_propinfo_set_default_value_uint,
};
/* --- 32bit integer --- */
@@ -353,8 +355,8 @@ static void set_uint32(Object *obj, Visitor *v, const char *name,
visit_type_uint32(v, name, ptr, errp);
}
-static void get_int32(Object *obj, Visitor *v, const char *name, void *opaque,
- Error **errp)
+void qdev_propinfo_get_int32(Object *obj, Visitor *v, const char *name,
+ void *opaque, Error **errp)
{
DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
@@ -382,14 +384,14 @@ const PropertyInfo qdev_prop_uint32 = {
.name = "uint32",
.get = get_uint32,
.set = set_uint32,
- .set_default_value = set_default_value_uint,
+ .set_default_value = qdev_propinfo_set_default_value_uint,
};
const PropertyInfo qdev_prop_int32 = {
.name = "int32",
- .get = get_int32,
+ .get = qdev_propinfo_get_int32,
.set = set_int32,
- .set_default_value = set_default_value_int,
+ .set_default_value = qdev_propinfo_set_default_value_int,
};
/* --- 64bit integer --- */
@@ -448,14 +450,14 @@ const PropertyInfo qdev_prop_uint64 = {
.name = "uint64",
.get = get_uint64,
.set = set_uint64,
- .set_default_value = set_default_value_uint,
+ .set_default_value = qdev_propinfo_set_default_value_uint,
};
const PropertyInfo qdev_prop_int64 = {
.name = "int64",
.get = get_int64,
.set = set_int64,
- .set_default_value = set_default_value_int,
+ .set_default_value = qdev_propinfo_set_default_value_int,
};
/* --- string --- */
@@ -739,9 +741,9 @@ const PropertyInfo qdev_prop_pci_devfn = {
.name = "int32",
.description = "Slot and optional function number, example: 06.0 or 06",
.print = print_pci_devfn,
- .get = get_int32,
+ .get = qdev_propinfo_get_int32,
.set = set_pci_devfn,
- .set_default_value = set_default_value_int,
+ .set_default_value = qdev_propinfo_set_default_value_uint,
};
/* --- blocksize --- */
@@ -787,9 +789,9 @@ static void set_blocksize(Object *obj, Visitor *v, const char *name,
const PropertyInfo qdev_prop_blocksize = {
.name = "uint16",
.description = "A power of two between 512 and 32768",
- .get = get_uint16,
+ .get = qdev_propinfo_get_uint16,
.set = set_blocksize,
- .set_default_value = set_default_value_uint,
+ .set_default_value = qdev_propinfo_set_default_value_uint,
};
/* --- pci host address --- */
@@ -1071,7 +1073,7 @@ const PropertyInfo qdev_prop_arraylen = {
.name = "uint32",
.get = get_uint32,
.set = set_prop_arraylen,
- .set_default_value = set_default_value_uint,
+ .set_default_value = qdev_propinfo_set_default_value_uint,
};
/* --- public helpers --- */
@@ -1265,7 +1267,7 @@ const PropertyInfo qdev_prop_size = {
.name = "size",
.get = get_size,
.set = set_size,
- .set_default_value = set_default_value_uint,
+ .set_default_value = qdev_propinfo_set_default_value_uint,
};
/* --- object link property --- */
--
2.21.1
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH 7/9] hw/core/qdev-properties: Extract system-mode specific properties
2020-03-13 18:45 [PATCH 0/9] user-mode: Prune build dependencies (part 3) Philippe Mathieu-Daudé
` (5 preceding siblings ...)
2020-03-13 18:46 ` [PATCH 6/9] hw/core/qdev-properties: Export some integer-related functions Philippe Mathieu-Daudé
@ 2020-03-13 18:46 ` Philippe Mathieu-Daudé
2020-03-15 22:30 ` Richard Henderson
2020-03-13 18:46 ` [PATCH 8/9] hw/core: Add qdev stub for user-mode Philippe Mathieu-Daudé
` (3 subsequent siblings)
10 siblings, 1 reply; 25+ messages in thread
From: Philippe Mathieu-Daudé @ 2020-03-13 18:46 UTC (permalink / raw)
To: qemu-devel
Cc: Daniel P. Berrangé,
Eduardo Habkost, Markus Armbruster, Laurent Vivier, Michael Roth,
Paolo Bonzini, Philippe Mathieu-Daudé
Move properties specific to machines into a separate file.
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
---
hw/core/qdev-properties-system.c | 602 ++++++++++++++++++++++++++++++-
hw/core/qdev-properties.c | 590 ------------------------------
2 files changed, 594 insertions(+), 598 deletions(-)
diff --git a/hw/core/qdev-properties-system.c b/hw/core/qdev-properties-system.c
index 70bfd4809b..4fbb008544 100644
--- a/hw/core/qdev-properties-system.c
+++ b/hw/core/qdev-properties-system.c
@@ -11,19 +11,24 @@
*/
#include "qemu/osdep.h"
-#include "audio/audio.h"
-#include "net/net.h"
#include "hw/qdev-properties.h"
#include "qapi/error.h"
+#include "qapi/visitor.h"
+#include "qapi/qapi-types-block.h"
+#include "qapi/qapi-types-machine.h"
+#include "qapi/qapi-types-migration.h"
#include "qapi/qmp/qerror.h"
+#include "qemu/ctype.h"
+#include "qemu/cutils.h"
+#include "qemu/error-report.h"
+#include "qdev-prop-internal.h"
+
+#include "audio/audio.h"
+#include "chardev/char-fe.h"
#include "sysemu/block-backend.h"
#include "sysemu/blockdev.h"
-#include "hw/block/block.h"
-#include "net/hub.h"
-#include "qapi/visitor.h"
-#include "chardev/char-fe.h"
-#include "sysemu/iothread.h"
-#include "sysemu/tpm_backend.h"
+#include "net/net.h"
+#include "hw/pci/pci.h"
static void get_pointer(Object *obj, Visitor *v, Property *prop,
char *(*print)(void *ptr),
@@ -273,6 +278,99 @@ const PropertyInfo qdev_prop_chr = {
.release = release_chr,
};
+/* --- mac address --- */
+
+/*
+ * accepted syntax versions:
+ * 01:02:03:04:05:06
+ * 01-02-03-04-05-06
+ */
+static void get_mac(Object *obj, Visitor *v, const char *name, void *opaque,
+ Error **errp)
+{
+ DeviceState *dev = DEVICE(obj);
+ Property *prop = opaque;
+ MACAddr *mac = qdev_get_prop_ptr(dev, prop);
+ char buffer[2 * 6 + 5 + 1];
+ char *p = buffer;
+
+ snprintf(buffer, sizeof(buffer), "%02x:%02x:%02x:%02x:%02x:%02x",
+ mac->a[0], mac->a[1], mac->a[2],
+ mac->a[3], mac->a[4], mac->a[5]);
+
+ visit_type_str(v, name, &p, errp);
+}
+
+static void set_mac(Object *obj, Visitor *v, const char *name, void *opaque,
+ Error **errp)
+{
+ DeviceState *dev = DEVICE(obj);
+ Property *prop = opaque;
+ MACAddr *mac = qdev_get_prop_ptr(dev, prop);
+ Error *local_err = NULL;
+ int i, pos;
+ char *str;
+ const char *p;
+
+ if (dev->realized) {
+ qdev_prop_set_after_realize(dev, name, errp);
+ return;
+ }
+
+ visit_type_str(v, name, &str, &local_err);
+ if (local_err) {
+ error_propagate(errp, local_err);
+ return;
+ }
+
+ for (i = 0, pos = 0; i < 6; i++, pos += 3) {
+ long val;
+
+ if (!qemu_isxdigit(str[pos])) {
+ goto inval;
+ }
+ if (!qemu_isxdigit(str[pos + 1])) {
+ goto inval;
+ }
+ if (i == 5) {
+ if (str[pos + 2] != '\0') {
+ goto inval;
+ }
+ } else {
+ if (str[pos + 2] != ':' && str[pos + 2] != '-') {
+ goto inval;
+ }
+ }
+ if (qemu_strtol(str + pos, &p, 16, &val) < 0 || val > 0xff) {
+ goto inval;
+ }
+ mac->a[i] = val;
+ }
+ g_free(str);
+ return;
+
+inval:
+ error_set_from_qdev_prop_error(errp, EINVAL, dev, prop, str);
+ g_free(str);
+}
+
+const PropertyInfo qdev_prop_macaddr = {
+ .name = "str",
+ .description = "Ethernet 6-byte MAC Address, example: 52:54:00:12:34:56",
+ .get = get_mac,
+ .set = set_mac,
+};
+
+void qdev_prop_set_macaddr(DeviceState *dev, const char *name,
+ const uint8_t *value)
+{
+ char str[2 * 6 + 5 + 1];
+ snprintf(str, sizeof(str), "%02x:%02x:%02x:%02x:%02x:%02x",
+ value[0], value[1], value[2], value[3], value[4], value[5]);
+
+ object_property_set_str(OBJECT(dev), str, name, &error_abort);
+}
+
/* --- netdev device --- */
static void get_netdev(Object *obj, Visitor *v, const char *name,
void *opaque, Error **errp)
@@ -456,3 +554,491 @@ void qdev_set_nic_properties(DeviceState *dev, NICInfo *nd)
}
nd->instantiated = 1;
}
+
+/* --- lost tick policy --- */
+
+QEMU_BUILD_BUG_ON(sizeof(LostTickPolicy) != sizeof(int));
+
+const PropertyInfo qdev_prop_losttickpolicy = {
+ .name = "LostTickPolicy",
+ .enum_table = &LostTickPolicy_lookup,
+ .get = qdev_propinfo_get_enum,
+ .set = qdev_propinfo_set_enum,
+ .set_default_value = qdev_propinfo_set_default_value_enum,
+};
+
+/* --- Block device error handling policy --- */
+
+QEMU_BUILD_BUG_ON(sizeof(BlockdevOnError) != sizeof(int));
+
+const PropertyInfo qdev_prop_blockdev_on_error = {
+ .name = "BlockdevOnError",
+ .description = "Error handling policy, "
+ "report/ignore/enospc/stop/auto",
+ .enum_table = &BlockdevOnError_lookup,
+ .get = qdev_propinfo_get_enum,
+ .set = qdev_propinfo_set_enum,
+ .set_default_value = qdev_propinfo_set_default_value_enum,
+};
+
+/* --- BIOS CHS translation */
+
+QEMU_BUILD_BUG_ON(sizeof(BiosAtaTranslation) != sizeof(int));
+
+const PropertyInfo qdev_prop_bios_chs_trans = {
+ .name = "BiosAtaTranslation",
+ .description = "Logical CHS translation algorithm, "
+ "auto/none/lba/large/rechs",
+ .enum_table = &BiosAtaTranslation_lookup,
+ .get = qdev_propinfo_get_enum,
+ .set = qdev_propinfo_set_enum,
+ .set_default_value = qdev_propinfo_set_default_value_enum,
+};
+
+/* --- FDC default drive types */
+
+const PropertyInfo qdev_prop_fdc_drive_type = {
+ .name = "FdcDriveType",
+ .description = "FDC drive type, "
+ "144/288/120/none/auto",
+ .enum_table = &FloppyDriveType_lookup,
+ .get = qdev_propinfo_get_enum,
+ .set = qdev_propinfo_set_enum,
+ .set_default_value = qdev_propinfo_set_default_value_enum,
+};
+
+/* --- blocksize --- */
+
+static void set_blocksize(Object *obj, Visitor *v, const char *name,
+ void *opaque, Error **errp)
+{
+ DeviceState *dev = DEVICE(obj);
+ Property *prop = opaque;
+ uint16_t value, *ptr = qdev_get_prop_ptr(dev, prop);
+ Error *local_err = NULL;
+ const int64_t min = 512;
+ const int64_t max = 32768;
+
+ if (dev->realized) {
+ qdev_prop_set_after_realize(dev, name, errp);
+ return;
+ }
+
+ visit_type_uint16(v, name, &value, &local_err);
+ if (local_err) {
+ error_propagate(errp, local_err);
+ return;
+ }
+ /* value of 0 means "unset" */
+ if (value && (value < min || value > max)) {
+ error_setg(errp, QERR_PROPERTY_VALUE_OUT_OF_RANGE,
+ dev->id ? : "", name, (int64_t)value, min, max);
+ return;
+ }
+
+ /* We rely on power-of-2 blocksizes for bitmasks */
+ if ((value & (value - 1)) != 0) {
+ error_setg(errp,
+ "Property %s.%s doesn't take value '%" PRId64 "', "
+ "it's not a power of 2", dev->id ?: "", name, (int64_t)value);
+ return;
+ }
+
+ *ptr = value;
+}
+
+const PropertyInfo qdev_prop_blocksize = {
+ .name = "uint16",
+ .description = "A power of two between 512 and 32768",
+ .get = qdev_propinfo_get_uint16,
+ .set = set_blocksize,
+ .set_default_value = qdev_propinfo_set_default_value_uint,
+};
+
+/* --- MultiFDCompression --- */
+
+const PropertyInfo qdev_prop_multifd_compression = {
+ .name = "MultiFDCompression",
+ .description = "multifd_compression values, "
+ "none/zlib/zstd",
+ .enum_table = &MultiFDCompression_lookup,
+ .get = qdev_propinfo_get_enum,
+ .set = qdev_propinfo_set_enum,
+ .set_default_value = qdev_propinfo_set_default_value_enum,
+};
+
+/* --- pci address --- */
+
+/*
+ * bus-local address, i.e. "$slot" or "$slot.$fn"
+ */
+static void set_pci_devfn(Object *obj, Visitor *v, const char *name,
+ void *opaque, Error **errp)
+{
+ DeviceState *dev = DEVICE(obj);
+ Property *prop = opaque;
+ int32_t value, *ptr = qdev_get_prop_ptr(dev, prop);
+ unsigned int slot, fn, n;
+ Error *local_err = NULL;
+ char *str;
+
+ if (dev->realized) {
+ qdev_prop_set_after_realize(dev, name, errp);
+ return;
+ }
+
+ visit_type_str(v, name, &str, &local_err);
+ if (local_err) {
+ error_free(local_err);
+ local_err = NULL;
+ visit_type_int32(v, name, &value, &local_err);
+ if (local_err) {
+ error_propagate(errp, local_err);
+ } else if (value < -1 || value > 255) {
+ error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
+ name ? name : "null", "pci_devfn");
+ } else {
+ *ptr = value;
+ }
+ return;
+ }
+
+ if (sscanf(str, "%x.%x%n", &slot, &fn, &n) != 2) {
+ fn = 0;
+ if (sscanf(str, "%x%n", &slot, &n) != 1) {
+ goto invalid;
+ }
+ }
+ if (str[n] != '\0' || fn > 7 || slot > 31) {
+ goto invalid;
+ }
+ *ptr = slot << 3 | fn;
+ g_free(str);
+ return;
+
+invalid:
+ error_set_from_qdev_prop_error(errp, EINVAL, dev, prop, str);
+ g_free(str);
+}
+
+static int print_pci_devfn(DeviceState *dev, Property *prop, char *dest,
+ size_t len)
+{
+ int32_t *ptr = qdev_get_prop_ptr(dev, prop);
+
+ if (*ptr == -1) {
+ return snprintf(dest, len, "<unset>");
+ } else {
+ return snprintf(dest, len, "%02x.%x", *ptr >> 3, *ptr & 7);
+ }
+}
+
+const PropertyInfo qdev_prop_pci_devfn = {
+ .name = "int32",
+ .description = "Slot and optional function number, example: 06.0 or 06",
+ .print = print_pci_devfn,
+ .get = qdev_propinfo_get_int32,
+ .set = set_pci_devfn,
+ .set_default_value = qdev_propinfo_set_default_value_int,
+};
+
+/* --- pci host address --- */
+
+static void get_pci_host_devaddr(Object *obj, Visitor *v, const char *name,
+ void *opaque, Error **errp)
+{
+ DeviceState *dev = DEVICE(obj);
+ Property *prop = opaque;
+ PCIHostDeviceAddress *addr = qdev_get_prop_ptr(dev, prop);
+ char buffer[] = "ffff:ff:ff.f";
+ char *p = buffer;
+ int rc = 0;
+
+ /*
+ * Catch "invalid" device reference from vfio-pci and allow the
+ * default buffer representing the non-existent device to be used.
+ */
+ if (~addr->domain || ~addr->bus || ~addr->slot || ~addr->function) {
+ rc = snprintf(buffer, sizeof(buffer), "%04x:%02x:%02x.%0d",
+ addr->domain, addr->bus, addr->slot, addr->function);
+ assert(rc == sizeof(buffer) - 1);
+ }
+
+ visit_type_str(v, name, &p, errp);
+}
+
+/*
+ * Parse [<domain>:]<bus>:<slot>.<func>
+ * if <domain> is not supplied, it's assumed to be 0.
+ */
+static void set_pci_host_devaddr(Object *obj, Visitor *v, const char *name,
+ void *opaque, Error **errp)
+{
+ DeviceState *dev = DEVICE(obj);
+ Property *prop = opaque;
+ PCIHostDeviceAddress *addr = qdev_get_prop_ptr(dev, prop);
+ Error *local_err = NULL;
+ char *str, *p;
+ const char *e;
+ unsigned long val;
+ unsigned long dom = 0, bus = 0;
+ unsigned int slot = 0, func = 0;
+
+ if (dev->realized) {
+ qdev_prop_set_after_realize(dev, name, errp);
+ return;
+ }
+
+ visit_type_str(v, name, &str, &local_err);
+ if (local_err) {
+ error_propagate(errp, local_err);
+ return;
+ }
+
+ p = str;
+ if (qemu_strtoul(p, &e, 16, &val) < 0 || val > 0xffff || e == p) {
+ goto inval;
+ }
+ if (*e != ':') {
+ goto inval;
+ }
+ bus = val;
+
+ p = (char *)e + 1;
+ if (qemu_strtoul(p, &e, 16, &val) < 0 || val > 0x1f || e == p) {
+ goto inval;
+ }
+ if (*e == ':') {
+ dom = bus;
+ bus = val;
+ p = (char *)e + 1;
+ if (qemu_strtoul(p, &e, 16, &val) < 0 || val > 0x1f || e == p) {
+ goto inval;
+ }
+ }
+ slot = val;
+
+ if (*e != '.') {
+ goto inval;
+ }
+ p = (char *)e + 1;
+ if (qemu_strtoul(p, &e, 10, &val) < 0 || val > 7 || e == p) {
+ goto inval;
+ }
+ func = val;
+
+ if (bus > 0xff) {
+ goto inval;
+ }
+
+ if (*e) {
+ goto inval;
+ }
+
+ addr->domain = dom;
+ addr->bus = bus;
+ addr->slot = slot;
+ addr->function = func;
+
+ g_free(str);
+ return;
+
+inval:
+ error_set_from_qdev_prop_error(errp, EINVAL, dev, prop, str);
+ g_free(str);
+}
+
+const PropertyInfo qdev_prop_pci_host_devaddr = {
+ .name = "str",
+ .description = "Address (bus/device/function) of "
+ "the host device, example: 04:10.0",
+ .get = get_pci_host_devaddr,
+ .set = set_pci_host_devaddr,
+};
+
+/* --- OffAutoPCIBAR off/auto/bar0/bar1/bar2/bar3/bar4/bar5 --- */
+
+const PropertyInfo qdev_prop_off_auto_pcibar = {
+ .name = "OffAutoPCIBAR",
+ .description = "off/auto/bar0/bar1/bar2/bar3/bar4/bar5",
+ .enum_table = &OffAutoPCIBAR_lookup,
+ .get = qdev_propinfo_get_enum,
+ .set = qdev_propinfo_set_enum,
+ .set_default_value = qdev_propinfo_set_default_value_enum,
+};
+
+/* --- PCIELinkSpeed 2_5/5/8/16 -- */
+
+static void get_prop_pcielinkspeed(Object *obj, Visitor *v, const char *name,
+ void *opaque, Error **errp)
+{
+ DeviceState *dev = DEVICE(obj);
+ Property *prop = opaque;
+ PCIExpLinkSpeed *p = qdev_get_prop_ptr(dev, prop);
+ int speed;
+
+ switch (*p) {
+ case QEMU_PCI_EXP_LNK_2_5GT:
+ speed = PCIE_LINK_SPEED_2_5;
+ break;
+ case QEMU_PCI_EXP_LNK_5GT:
+ speed = PCIE_LINK_SPEED_5;
+ break;
+ case QEMU_PCI_EXP_LNK_8GT:
+ speed = PCIE_LINK_SPEED_8;
+ break;
+ case QEMU_PCI_EXP_LNK_16GT:
+ speed = PCIE_LINK_SPEED_16;
+ break;
+ default:
+ /* Unreachable */
+ abort();
+ }
+
+ visit_type_enum(v, prop->name, &speed, prop->info->enum_table, errp);
+}
+
+static void set_prop_pcielinkspeed(Object *obj, Visitor *v, const char *name,
+ void *opaque, Error **errp)
+{
+ DeviceState *dev = DEVICE(obj);
+ Property *prop = opaque;
+ PCIExpLinkSpeed *p = qdev_get_prop_ptr(dev, prop);
+ int speed;
+ Error *local_err = NULL;
+
+ if (dev->realized) {
+ qdev_prop_set_after_realize(dev, name, errp);
+ return;
+ }
+
+ visit_type_enum(v, prop->name, &speed, prop->info->enum_table, &local_err);
+ if (local_err) {
+ error_propagate(errp, local_err);
+ return;
+ }
+
+ switch (speed) {
+ case PCIE_LINK_SPEED_2_5:
+ *p = QEMU_PCI_EXP_LNK_2_5GT;
+ break;
+ case PCIE_LINK_SPEED_5:
+ *p = QEMU_PCI_EXP_LNK_5GT;
+ break;
+ case PCIE_LINK_SPEED_8:
+ *p = QEMU_PCI_EXP_LNK_8GT;
+ break;
+ case PCIE_LINK_SPEED_16:
+ *p = QEMU_PCI_EXP_LNK_16GT;
+ break;
+ default:
+ /* Unreachable */
+ abort();
+ }
+}
+
+const PropertyInfo qdev_prop_pcie_link_speed = {
+ .name = "PCIELinkSpeed",
+ .description = "2_5/5/8/16",
+ .enum_table = &PCIELinkSpeed_lookup,
+ .get = get_prop_pcielinkspeed,
+ .set = set_prop_pcielinkspeed,
+ .set_default_value = qdev_propinfo_set_default_value_enum,
+};
+
+/* --- PCIELinkWidth 1/2/4/8/12/16/32 -- */
+
+static void get_prop_pcielinkwidth(Object *obj, Visitor *v, const char *name,
+ void *opaque, Error **errp)
+{
+ DeviceState *dev = DEVICE(obj);
+ Property *prop = opaque;
+ PCIExpLinkWidth *p = qdev_get_prop_ptr(dev, prop);
+ int width;
+
+ switch (*p) {
+ case QEMU_PCI_EXP_LNK_X1:
+ width = PCIE_LINK_WIDTH_1;
+ break;
+ case QEMU_PCI_EXP_LNK_X2:
+ width = PCIE_LINK_WIDTH_2;
+ break;
+ case QEMU_PCI_EXP_LNK_X4:
+ width = PCIE_LINK_WIDTH_4;
+ break;
+ case QEMU_PCI_EXP_LNK_X8:
+ width = PCIE_LINK_WIDTH_8;
+ break;
+ case QEMU_PCI_EXP_LNK_X12:
+ width = PCIE_LINK_WIDTH_12;
+ break;
+ case QEMU_PCI_EXP_LNK_X16:
+ width = PCIE_LINK_WIDTH_16;
+ break;
+ case QEMU_PCI_EXP_LNK_X32:
+ width = PCIE_LINK_WIDTH_32;
+ break;
+ default:
+ /* Unreachable */
+ abort();
+ }
+
+ visit_type_enum(v, prop->name, &width, prop->info->enum_table, errp);
+}
+
+static void set_prop_pcielinkwidth(Object *obj, Visitor *v, const char *name,
+ void *opaque, Error **errp)
+{
+ DeviceState *dev = DEVICE(obj);
+ Property *prop = opaque;
+ PCIExpLinkWidth *p = qdev_get_prop_ptr(dev, prop);
+ int width;
+ Error *local_err = NULL;
+
+ if (dev->realized) {
+ qdev_prop_set_after_realize(dev, name, errp);
+ return;
+ }
+
+ visit_type_enum(v, prop->name, &width, prop->info->enum_table, &local_err);
+ if (local_err) {
+ error_propagate(errp, local_err);
+ return;
+ }
+
+ switch (width) {
+ case PCIE_LINK_WIDTH_1:
+ *p = QEMU_PCI_EXP_LNK_X1;
+ break;
+ case PCIE_LINK_WIDTH_2:
+ *p = QEMU_PCI_EXP_LNK_X2;
+ break;
+ case PCIE_LINK_WIDTH_4:
+ *p = QEMU_PCI_EXP_LNK_X4;
+ break;
+ case PCIE_LINK_WIDTH_8:
+ *p = QEMU_PCI_EXP_LNK_X8;
+ break;
+ case PCIE_LINK_WIDTH_12:
+ *p = QEMU_PCI_EXP_LNK_X12;
+ break;
+ case PCIE_LINK_WIDTH_16:
+ *p = QEMU_PCI_EXP_LNK_X16;
+ break;
+ case PCIE_LINK_WIDTH_32:
+ *p = QEMU_PCI_EXP_LNK_X32;
+ break;
+ default:
+ /* Unreachable */
+ abort();
+ }
+}
+
+const PropertyInfo qdev_prop_pcie_link_width = {
+ .name = "PCIELinkWidth",
+ .description = "1/2/4/8/12/16/32",
+ .enum_table = &PCIELinkWidth_lookup,
+ .get = get_prop_pcielinkwidth,
+ .set = set_prop_pcielinkwidth,
+ .set_default_value = qdev_propinfo_set_default_value_enum,
+};
diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c
index 534fc674db..1fd256dd22 100644
--- a/hw/core/qdev-properties.c
+++ b/hw/core/qdev-properties.c
@@ -1,20 +1,11 @@
#include "qemu/osdep.h"
-#include "qemu/cutils.h"
-#include "net/net.h"
#include "hw/qdev-properties.h"
#include "qapi/error.h"
-#include "hw/pci/pci.h"
-#include "qapi/qapi-types-block.h"
-#include "qapi/qapi-types-machine.h"
#include "qapi/qapi-types-misc.h"
#include "qapi/qmp/qerror.h"
#include "qemu/ctype.h"
#include "qemu/error-report.h"
-#include "qapi/qapi-types-migration.h"
-#include "hw/block/block.h"
-#include "net/hub.h"
#include "qapi/visitor.h"
-#include "chardev/char.h"
#include "qemu/uuid.h"
#include "qdev-prop-internal.h"
@@ -513,89 +504,6 @@ const PropertyInfo qdev_prop_string = {
.set = set_string,
};
-/* --- mac address --- */
-
-/*
- * accepted syntax versions:
- * 01:02:03:04:05:06
- * 01-02-03-04-05-06
- */
-static void get_mac(Object *obj, Visitor *v, const char *name, void *opaque,
- Error **errp)
-{
- DeviceState *dev = DEVICE(obj);
- Property *prop = opaque;
- MACAddr *mac = qdev_get_prop_ptr(dev, prop);
- char buffer[2 * 6 + 5 + 1];
- char *p = buffer;
-
- snprintf(buffer, sizeof(buffer), "%02x:%02x:%02x:%02x:%02x:%02x",
- mac->a[0], mac->a[1], mac->a[2],
- mac->a[3], mac->a[4], mac->a[5]);
-
- visit_type_str(v, name, &p, errp);
-}
-
-static void set_mac(Object *obj, Visitor *v, const char *name, void *opaque,
- Error **errp)
-{
- DeviceState *dev = DEVICE(obj);
- Property *prop = opaque;
- MACAddr *mac = qdev_get_prop_ptr(dev, prop);
- Error *local_err = NULL;
- int i, pos;
- char *str;
- const char *p;
-
- if (dev->realized) {
- qdev_prop_set_after_realize(dev, name, errp);
- return;
- }
-
- visit_type_str(v, name, &str, &local_err);
- if (local_err) {
- error_propagate(errp, local_err);
- return;
- }
-
- for (i = 0, pos = 0; i < 6; i++, pos += 3) {
- long val;
-
- if (!qemu_isxdigit(str[pos])) {
- goto inval;
- }
- if (!qemu_isxdigit(str[pos + 1])) {
- goto inval;
- }
- if (i == 5) {
- if (str[pos + 2] != '\0') {
- goto inval;
- }
- } else {
- if (str[pos + 2] != ':' && str[pos + 2] != '-') {
- goto inval;
- }
- }
- if (qemu_strtol(str + pos, &p, 16, &val) < 0 || val > 0xff) {
- goto inval;
- }
- mac->a[i] = val;
- }
- g_free(str);
- return;
-
-inval:
- error_set_from_qdev_prop_error(errp, EINVAL, dev, prop, str);
- g_free(str);
-}
-
-const PropertyInfo qdev_prop_macaddr = {
- .name = "str",
- .description = "Ethernet 6-byte MAC Address, example: 52:54:00:12:34:56",
- .get = get_mac,
- .set = set_mac,
-};
-
/* --- on/off/auto --- */
const PropertyInfo qdev_prop_on_off_auto = {
@@ -607,307 +515,6 @@ const PropertyInfo qdev_prop_on_off_auto = {
.set_default_value = qdev_propinfo_set_default_value_enum,
};
-/* --- lost tick policy --- */
-
-QEMU_BUILD_BUG_ON(sizeof(LostTickPolicy) != sizeof(int));
-
-const PropertyInfo qdev_prop_losttickpolicy = {
- .name = "LostTickPolicy",
- .enum_table = &LostTickPolicy_lookup,
- .get = qdev_propinfo_get_enum,
- .set = qdev_propinfo_set_enum,
- .set_default_value = qdev_propinfo_set_default_value_enum,
-};
-
-/* --- Block device error handling policy --- */
-
-QEMU_BUILD_BUG_ON(sizeof(BlockdevOnError) != sizeof(int));
-
-const PropertyInfo qdev_prop_blockdev_on_error = {
- .name = "BlockdevOnError",
- .description = "Error handling policy, "
- "report/ignore/enospc/stop/auto",
- .enum_table = &BlockdevOnError_lookup,
- .get = qdev_propinfo_get_enum,
- .set = qdev_propinfo_set_enum,
- .set_default_value = qdev_propinfo_set_default_value_enum,
-};
-
-/* --- BIOS CHS translation */
-
-QEMU_BUILD_BUG_ON(sizeof(BiosAtaTranslation) != sizeof(int));
-
-const PropertyInfo qdev_prop_bios_chs_trans = {
- .name = "BiosAtaTranslation",
- .description = "Logical CHS translation algorithm, "
- "auto/none/lba/large/rechs",
- .enum_table = &BiosAtaTranslation_lookup,
- .get = qdev_propinfo_get_enum,
- .set = qdev_propinfo_set_enum,
- .set_default_value = qdev_propinfo_set_default_value_enum,
-};
-
-/* --- FDC default drive types */
-
-const PropertyInfo qdev_prop_fdc_drive_type = {
- .name = "FdcDriveType",
- .description = "FDC drive type, "
- "144/288/120/none/auto",
- .enum_table = &FloppyDriveType_lookup,
- .get = qdev_propinfo_get_enum,
- .set = qdev_propinfo_set_enum,
- .set_default_value = qdev_propinfo_set_default_value_enum,
-};
-
-/* --- MultiFDCompression --- */
-
-const PropertyInfo qdev_prop_multifd_compression = {
- .name = "MultiFDCompression",
- .description = "multifd_compression values, "
- "none/zlib/zstd",
- .enum_table = &MultiFDCompression_lookup,
- .get = qdev_propinfo_get_enum,
- .set = qdev_propinfo_set_enum,
- .set_default_value = qdev_propinfo_set_default_value_enum,
-};
-
-/* --- pci address --- */
-
-/*
- * bus-local address, i.e. "$slot" or "$slot.$fn"
- */
-static void set_pci_devfn(Object *obj, Visitor *v, const char *name,
- void *opaque, Error **errp)
-{
- DeviceState *dev = DEVICE(obj);
- Property *prop = opaque;
- int32_t value, *ptr = qdev_get_prop_ptr(dev, prop);
- unsigned int slot, fn, n;
- Error *local_err = NULL;
- char *str;
-
- if (dev->realized) {
- qdev_prop_set_after_realize(dev, name, errp);
- return;
- }
-
- visit_type_str(v, name, &str, &local_err);
- if (local_err) {
- error_free(local_err);
- local_err = NULL;
- visit_type_int32(v, name, &value, &local_err);
- if (local_err) {
- error_propagate(errp, local_err);
- } else if (value < -1 || value > 255) {
- error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
- name ? name : "null", "pci_devfn");
- } else {
- *ptr = value;
- }
- return;
- }
-
- if (sscanf(str, "%x.%x%n", &slot, &fn, &n) != 2) {
- fn = 0;
- if (sscanf(str, "%x%n", &slot, &n) != 1) {
- goto invalid;
- }
- }
- if (str[n] != '\0' || fn > 7 || slot > 31) {
- goto invalid;
- }
- *ptr = slot << 3 | fn;
- g_free(str);
- return;
-
-invalid:
- error_set_from_qdev_prop_error(errp, EINVAL, dev, prop, str);
- g_free(str);
-}
-
-static int print_pci_devfn(DeviceState *dev, Property *prop, char *dest,
- size_t len)
-{
- int32_t *ptr = qdev_get_prop_ptr(dev, prop);
-
- if (*ptr == -1) {
- return snprintf(dest, len, "<unset>");
- } else {
- return snprintf(dest, len, "%02x.%x", *ptr >> 3, *ptr & 7);
- }
-}
-
-const PropertyInfo qdev_prop_pci_devfn = {
- .name = "int32",
- .description = "Slot and optional function number, example: 06.0 or 06",
- .print = print_pci_devfn,
- .get = qdev_propinfo_get_int32,
- .set = set_pci_devfn,
- .set_default_value = qdev_propinfo_set_default_value_uint,
-};
-
-/* --- blocksize --- */
-
-static void set_blocksize(Object *obj, Visitor *v, const char *name,
- void *opaque, Error **errp)
-{
- DeviceState *dev = DEVICE(obj);
- Property *prop = opaque;
- uint16_t value, *ptr = qdev_get_prop_ptr(dev, prop);
- Error *local_err = NULL;
- const int64_t min = 512;
- const int64_t max = 32768;
-
- if (dev->realized) {
- qdev_prop_set_after_realize(dev, name, errp);
- return;
- }
-
- visit_type_uint16(v, name, &value, &local_err);
- if (local_err) {
- error_propagate(errp, local_err);
- return;
- }
- /* value of 0 means "unset" */
- if (value && (value < min || value > max)) {
- error_setg(errp, QERR_PROPERTY_VALUE_OUT_OF_RANGE,
- dev->id ? : "", name, (int64_t)value, min, max);
- return;
- }
-
- /* We rely on power-of-2 blocksizes for bitmasks */
- if ((value & (value - 1)) != 0) {
- error_setg(errp,
- "Property %s.%s doesn't take value '%" PRId64 "', "
- "it's not a power of 2", dev->id ?: "", name, (int64_t)value);
- return;
- }
-
- *ptr = value;
-}
-
-const PropertyInfo qdev_prop_blocksize = {
- .name = "uint16",
- .description = "A power of two between 512 and 32768",
- .get = qdev_propinfo_get_uint16,
- .set = set_blocksize,
- .set_default_value = qdev_propinfo_set_default_value_uint,
-};
-
-/* --- pci host address --- */
-
-static void get_pci_host_devaddr(Object *obj, Visitor *v, const char *name,
- void *opaque, Error **errp)
-{
- DeviceState *dev = DEVICE(obj);
- Property *prop = opaque;
- PCIHostDeviceAddress *addr = qdev_get_prop_ptr(dev, prop);
- char buffer[] = "ffff:ff:ff.f";
- char *p = buffer;
- int rc = 0;
-
- /*
- * Catch "invalid" device reference from vfio-pci and allow the
- * default buffer representing the non-existent device to be used.
- */
- if (~addr->domain || ~addr->bus || ~addr->slot || ~addr->function) {
- rc = snprintf(buffer, sizeof(buffer), "%04x:%02x:%02x.%0d",
- addr->domain, addr->bus, addr->slot, addr->function);
- assert(rc == sizeof(buffer) - 1);
- }
-
- visit_type_str(v, name, &p, errp);
-}
-
-/*
- * Parse [<domain>:]<bus>:<slot>.<func>
- * if <domain> is not supplied, it's assumed to be 0.
- */
-static void set_pci_host_devaddr(Object *obj, Visitor *v, const char *name,
- void *opaque, Error **errp)
-{
- DeviceState *dev = DEVICE(obj);
- Property *prop = opaque;
- PCIHostDeviceAddress *addr = qdev_get_prop_ptr(dev, prop);
- Error *local_err = NULL;
- char *str, *p;
- const char *e;
- unsigned long val;
- unsigned long dom = 0, bus = 0;
- unsigned int slot = 0, func = 0;
-
- if (dev->realized) {
- qdev_prop_set_after_realize(dev, name, errp);
- return;
- }
-
- visit_type_str(v, name, &str, &local_err);
- if (local_err) {
- error_propagate(errp, local_err);
- return;
- }
-
- p = str;
- if (qemu_strtoul(p, &e, 16, &val) < 0 || val > 0xffff || e == p) {
- goto inval;
- }
- if (*e != ':') {
- goto inval;
- }
- bus = val;
-
- p = (char *)e + 1;
- if (qemu_strtoul(p, &e, 16, &val) < 0 || val > 0x1f || e == p) {
- goto inval;
- }
- if (*e == ':') {
- dom = bus;
- bus = val;
- p = (char *)e + 1;
- if (qemu_strtoul(p, &e, 16, &val) < 0 || val > 0x1f || e == p) {
- goto inval;
- }
- }
- slot = val;
-
- if (*e != '.') {
- goto inval;
- }
- p = (char *)e + 1;
- if (qemu_strtoul(p, &e, 10, &val) < 0 || val > 7 || e == p) {
- goto inval;
- }
- func = val;
-
- if (bus > 0xff) {
- goto inval;
- }
-
- if (*e) {
- goto inval;
- }
-
- addr->domain = dom;
- addr->bus = bus;
- addr->slot = slot;
- addr->function = func;
-
- g_free(str);
- return;
-
-inval:
- error_set_from_qdev_prop_error(errp, EINVAL, dev, prop, str);
- g_free(str);
-}
-
-const PropertyInfo qdev_prop_pci_host_devaddr = {
- .name = "str",
- .description = "Address (bus/device/function) of "
- "the host device, example: 04:10.0",
- .get = get_pci_host_devaddr,
- .set = set_pci_host_devaddr,
-};
-
/* --- UUID --- */
static void get_uuid(Object *obj, Visitor *v, const char *name, void *opaque,
@@ -1167,16 +774,6 @@ void qdev_prop_set_string(DeviceState *dev, const char *name, const char *value)
object_property_set_str(OBJECT(dev), value, name, &error_abort);
}
-void qdev_prop_set_macaddr(DeviceState *dev, const char *name,
- const uint8_t *value)
-{
- char str[2 * 6 + 5 + 1];
- snprintf(str, sizeof(str), "%02x:%02x:%02x:%02x:%02x:%02x",
- value[0], value[1], value[2], value[3], value[4], value[5]);
-
- object_property_set_str(OBJECT(dev), str, name, &error_abort);
-}
-
void qdev_prop_set_enum(DeviceState *dev, const char *name, int value)
{
Property *prop;
@@ -1285,190 +882,3 @@ const PropertyInfo qdev_prop_link = {
.name = "link",
.create = create_link_property,
};
-
-/* --- OffAutoPCIBAR off/auto/bar0/bar1/bar2/bar3/bar4/bar5 --- */
-
-const PropertyInfo qdev_prop_off_auto_pcibar = {
- .name = "OffAutoPCIBAR",
- .description = "off/auto/bar0/bar1/bar2/bar3/bar4/bar5",
- .enum_table = &OffAutoPCIBAR_lookup,
- .get = qdev_propinfo_get_enum,
- .set = qdev_propinfo_set_enum,
- .set_default_value = qdev_propinfo_set_default_value_enum,
-};
-
-/* --- PCIELinkSpeed 2_5/5/8/16 -- */
-
-static void get_prop_pcielinkspeed(Object *obj, Visitor *v, const char *name,
- void *opaque, Error **errp)
-{
- DeviceState *dev = DEVICE(obj);
- Property *prop = opaque;
- PCIExpLinkSpeed *p = qdev_get_prop_ptr(dev, prop);
- int speed;
-
- switch (*p) {
- case QEMU_PCI_EXP_LNK_2_5GT:
- speed = PCIE_LINK_SPEED_2_5;
- break;
- case QEMU_PCI_EXP_LNK_5GT:
- speed = PCIE_LINK_SPEED_5;
- break;
- case QEMU_PCI_EXP_LNK_8GT:
- speed = PCIE_LINK_SPEED_8;
- break;
- case QEMU_PCI_EXP_LNK_16GT:
- speed = PCIE_LINK_SPEED_16;
- break;
- default:
- /* Unreachable */
- abort();
- }
-
- visit_type_enum(v, prop->name, &speed, prop->info->enum_table, errp);
-}
-
-static void set_prop_pcielinkspeed(Object *obj, Visitor *v, const char *name,
- void *opaque, Error **errp)
-{
- DeviceState *dev = DEVICE(obj);
- Property *prop = opaque;
- PCIExpLinkSpeed *p = qdev_get_prop_ptr(dev, prop);
- int speed;
- Error *local_err = NULL;
-
- if (dev->realized) {
- qdev_prop_set_after_realize(dev, name, errp);
- return;
- }
-
- visit_type_enum(v, prop->name, &speed, prop->info->enum_table, &local_err);
- if (local_err) {
- error_propagate(errp, local_err);
- return;
- }
-
- switch (speed) {
- case PCIE_LINK_SPEED_2_5:
- *p = QEMU_PCI_EXP_LNK_2_5GT;
- break;
- case PCIE_LINK_SPEED_5:
- *p = QEMU_PCI_EXP_LNK_5GT;
- break;
- case PCIE_LINK_SPEED_8:
- *p = QEMU_PCI_EXP_LNK_8GT;
- break;
- case PCIE_LINK_SPEED_16:
- *p = QEMU_PCI_EXP_LNK_16GT;
- break;
- default:
- /* Unreachable */
- abort();
- }
-}
-
-const PropertyInfo qdev_prop_pcie_link_speed = {
- .name = "PCIELinkSpeed",
- .description = "2_5/5/8/16",
- .enum_table = &PCIELinkSpeed_lookup,
- .get = get_prop_pcielinkspeed,
- .set = set_prop_pcielinkspeed,
- .set_default_value = qdev_propinfo_set_default_value_enum,
-};
-
-/* --- PCIELinkWidth 1/2/4/8/12/16/32 -- */
-
-static void get_prop_pcielinkwidth(Object *obj, Visitor *v, const char *name,
- void *opaque, Error **errp)
-{
- DeviceState *dev = DEVICE(obj);
- Property *prop = opaque;
- PCIExpLinkWidth *p = qdev_get_prop_ptr(dev, prop);
- int width;
-
- switch (*p) {
- case QEMU_PCI_EXP_LNK_X1:
- width = PCIE_LINK_WIDTH_1;
- break;
- case QEMU_PCI_EXP_LNK_X2:
- width = PCIE_LINK_WIDTH_2;
- break;
- case QEMU_PCI_EXP_LNK_X4:
- width = PCIE_LINK_WIDTH_4;
- break;
- case QEMU_PCI_EXP_LNK_X8:
- width = PCIE_LINK_WIDTH_8;
- break;
- case QEMU_PCI_EXP_LNK_X12:
- width = PCIE_LINK_WIDTH_12;
- break;
- case QEMU_PCI_EXP_LNK_X16:
- width = PCIE_LINK_WIDTH_16;
- break;
- case QEMU_PCI_EXP_LNK_X32:
- width = PCIE_LINK_WIDTH_32;
- break;
- default:
- /* Unreachable */
- abort();
- }
-
- visit_type_enum(v, prop->name, &width, prop->info->enum_table, errp);
-}
-
-static void set_prop_pcielinkwidth(Object *obj, Visitor *v, const char *name,
- void *opaque, Error **errp)
-{
- DeviceState *dev = DEVICE(obj);
- Property *prop = opaque;
- PCIExpLinkWidth *p = qdev_get_prop_ptr(dev, prop);
- int width;
- Error *local_err = NULL;
-
- if (dev->realized) {
- qdev_prop_set_after_realize(dev, name, errp);
- return;
- }
-
- visit_type_enum(v, prop->name, &width, prop->info->enum_table, &local_err);
- if (local_err) {
- error_propagate(errp, local_err);
- return;
- }
-
- switch (width) {
- case PCIE_LINK_WIDTH_1:
- *p = QEMU_PCI_EXP_LNK_X1;
- break;
- case PCIE_LINK_WIDTH_2:
- *p = QEMU_PCI_EXP_LNK_X2;
- break;
- case PCIE_LINK_WIDTH_4:
- *p = QEMU_PCI_EXP_LNK_X4;
- break;
- case PCIE_LINK_WIDTH_8:
- *p = QEMU_PCI_EXP_LNK_X8;
- break;
- case PCIE_LINK_WIDTH_12:
- *p = QEMU_PCI_EXP_LNK_X12;
- break;
- case PCIE_LINK_WIDTH_16:
- *p = QEMU_PCI_EXP_LNK_X16;
- break;
- case PCIE_LINK_WIDTH_32:
- *p = QEMU_PCI_EXP_LNK_X32;
- break;
- default:
- /* Unreachable */
- abort();
- }
-}
-
-const PropertyInfo qdev_prop_pcie_link_width = {
- .name = "PCIELinkWidth",
- .description = "1/2/4/8/12/16/32",
- .enum_table = &PCIELinkWidth_lookup,
- .get = get_prop_pcielinkwidth,
- .set = set_prop_pcielinkwidth,
- .set_default_value = qdev_propinfo_set_default_value_enum,
-};
--
2.21.1
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH 8/9] hw/core: Add qdev stub for user-mode
2020-03-13 18:45 [PATCH 0/9] user-mode: Prune build dependencies (part 3) Philippe Mathieu-Daudé
` (6 preceding siblings ...)
2020-03-13 18:46 ` [PATCH 7/9] hw/core/qdev-properties: Extract system-mode specific properties Philippe Mathieu-Daudé
@ 2020-03-13 18:46 ` Philippe Mathieu-Daudé
2020-03-14 9:46 ` Philippe Mathieu-Daudé
2020-03-13 18:46 ` [PATCH 9/9] qapi: Restrict code generated " Philippe Mathieu-Daudé
` (2 subsequent siblings)
10 siblings, 1 reply; 25+ messages in thread
From: Philippe Mathieu-Daudé @ 2020-03-13 18:46 UTC (permalink / raw)
To: qemu-devel
Cc: Daniel P. Berrangé,
Eduardo Habkost, Markus Armbruster, Laurent Vivier, Michael Roth,
Paolo Bonzini, Philippe Mathieu-Daudé
While user-mode does not use peripherals (devices), it uses a
CPU which is a device.
In the next commit we will reduce the QAPI generated code for
user-mode. Since qdev.c calls qapi_event_send_device_deleted(),
let's add a stub for it.
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
---
hw/core/qdev-stubs.c | 20 ++++++++++++++++++++
hw/core/Makefile.objs | 1 +
2 files changed, 21 insertions(+)
create mode 100644 hw/core/qdev-stubs.c
diff --git a/hw/core/qdev-stubs.c b/hw/core/qdev-stubs.c
new file mode 100644
index 0000000000..0819dcba12
--- /dev/null
+++ b/hw/core/qdev-stubs.c
@@ -0,0 +1,20 @@
+/*
+ * QAPI qdev stubs
+ *
+ * Copyright (c) 2020 Red Hat, Inc.
+ *
+ * Author:
+ * Philippe Mathieu-Daudé <philmd@redhat.com>
+ *
+ * This work is licensed under the terms of the GNU GPL, version 2 or later.
+ * See the COPYING file in the top-level directory.
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ */
+
+#include "qemu/osdep.h"
+#include "qapi/qapi-events-qdev.h"
+
+void qapi_event_send_device_deleted(bool has_device,
+ const char *device, const char *path)
+{
+}
diff --git a/hw/core/Makefile.objs b/hw/core/Makefile.objs
index 6215e7c208..89bf247173 100644
--- a/hw/core/Makefile.objs
+++ b/hw/core/Makefile.objs
@@ -8,6 +8,7 @@ common-obj-y += vmstate-if.o
# irq.o needed for qdev GPIO handling:
common-obj-y += irq.o
+common-obj-$(call lnot,$(CONFIG_SOFTMMU)) += qdev-stubs.o
common-obj-$(CONFIG_SOFTMMU) += reset.o
common-obj-$(CONFIG_SOFTMMU) += qdev-fw.o
common-obj-$(CONFIG_SOFTMMU) += fw-path-provider.o
--
2.21.1
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH 9/9] qapi: Restrict code generated for user-mode
2020-03-13 18:45 [PATCH 0/9] user-mode: Prune build dependencies (part 3) Philippe Mathieu-Daudé
` (7 preceding siblings ...)
2020-03-13 18:46 ` [PATCH 8/9] hw/core: Add qdev stub for user-mode Philippe Mathieu-Daudé
@ 2020-03-13 18:46 ` Philippe Mathieu-Daudé
2020-03-15 22:31 ` Richard Henderson
2020-03-15 21:38 ` [PATCH 0/9] user-mode: Prune build dependencies (part 3) no-reply
2020-03-15 21:42 ` no-reply
10 siblings, 1 reply; 25+ messages in thread
From: Philippe Mathieu-Daudé @ 2020-03-13 18:46 UTC (permalink / raw)
To: qemu-devel
Cc: Daniel P. Berrangé,
Eduardo Habkost, Markus Armbruster, Laurent Vivier, Michael Roth,
Paolo Bonzini, Philippe Mathieu-Daudé
A lot of QAPI generated code is never used by user-mode.
Rewrite the QAPI_COMMON_MODULES variable one entry per line,
and split it in 3 groups:
- always used
- use by system-mode or tools
- only used by system-mode
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
---
qapi/Makefile.objs | 37 +++++++++++++++++++++++++++++++++----
1 file changed, 33 insertions(+), 4 deletions(-)
diff --git a/qapi/Makefile.objs b/qapi/Makefile.objs
index 4673ab7490..18435db426 100644
--- a/qapi/Makefile.objs
+++ b/qapi/Makefile.objs
@@ -5,11 +5,40 @@ util-obj-y += opts-visitor.o qapi-clone-visitor.o
util-obj-y += qmp-event.o
util-obj-y += qapi-util.o
-QAPI_COMMON_MODULES = audio authz block-core block char common control crypto
-QAPI_COMMON_MODULES += dump error introspect job machine migration misc
-QAPI_COMMON_MODULES += net pragma qdev qom rdma rocker run-state sockets tpm
-QAPI_COMMON_MODULES += trace transaction ui
+QAPI_COMMON_MODULES = common
+QAPI_COMMON_MODULES += introspect
+QAPI_COMMON_MODULES += misc
+
+ifeq ($(CONFIG_SOFTMMU),y)
+QAPI_COMMON_MODULES += audio
+QAPI_COMMON_MODULES += dump
+QAPI_COMMON_MODULES += machine
+QAPI_COMMON_MODULES += migration
+QAPI_COMMON_MODULES += net rocker
+QAPI_COMMON_MODULES += qdev
+QAPI_COMMON_MODULES += rdma
+QAPI_COMMON_MODULES += tpm
+QAPI_COMMON_MODULES += trace
+QAPI_COMMON_MODULES += ui
QAPI_TARGET_MODULES = machine-target misc-target
+endif # CONFIG_SOFTMMU
+
+ifeq ($(call lor,$(CONFIG_SOFTMMU),$(CONFIG_TOOLS)),y)
+QAPI_COMMON_MODULES += authz
+QAPI_COMMON_MODULES += block
+QAPI_COMMON_MODULES += block-core
+QAPI_COMMON_MODULES += char
+QAPI_COMMON_MODULES += control
+QAPI_COMMON_MODULES += crypto
+QAPI_COMMON_MODULES += error
+QAPI_COMMON_MODULES += job
+QAPI_COMMON_MODULES += pragma
+QAPI_COMMON_MODULES += qom
+QAPI_COMMON_MODULES += run-state
+QAPI_COMMON_MODULES += sockets
+QAPI_COMMON_MODULES += transaction
+endif # CONFIG_SOFTMMU || CONFIG_TOOLS
+
QAPI_MODULES = $(QAPI_COMMON_MODULES) $(QAPI_TARGET_MODULES)
util-obj-y += qapi-builtin-types.o
--
2.21.1
^ permalink raw reply related [flat|nested] 25+ messages in thread
* Re: [PATCH 8/9] hw/core: Add qdev stub for user-mode
2020-03-13 18:46 ` [PATCH 8/9] hw/core: Add qdev stub for user-mode Philippe Mathieu-Daudé
@ 2020-03-14 9:46 ` Philippe Mathieu-Daudé
2020-03-14 10:49 ` Philippe Mathieu-Daudé
0 siblings, 1 reply; 25+ messages in thread
From: Philippe Mathieu-Daudé @ 2020-03-14 9:46 UTC (permalink / raw)
To: qemu-devel
Cc: Daniel P. Berrangé,
Eduardo Habkost, Markus Armbruster, Laurent Vivier, Michael Roth,
Paolo Bonzini
On 3/13/20 7:46 PM, Philippe Mathieu-Daudé wrote:
> While user-mode does not use peripherals (devices), it uses a
> CPU which is a device.
> In the next commit we will reduce the QAPI generated code for
> user-mode. Since qdev.c calls qapi_event_send_device_deleted(),
> let's add a stub for it.
>
> Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
> ---
> hw/core/qdev-stubs.c | 20 ++++++++++++++++++++
> hw/core/Makefile.objs | 1 +
> 2 files changed, 21 insertions(+)
> create mode 100644 hw/core/qdev-stubs.c
>
> diff --git a/hw/core/qdev-stubs.c b/hw/core/qdev-stubs.c
> new file mode 100644
> index 0000000000..0819dcba12
> --- /dev/null
> +++ b/hw/core/qdev-stubs.c
> @@ -0,0 +1,20 @@
> +/*
> + * QAPI qdev stubs
> + *
> + * Copyright (c) 2020 Red Hat, Inc.
> + *
> + * Author:
> + * Philippe Mathieu-Daudé <philmd@redhat.com>
> + *
> + * This work is licensed under the terms of the GNU GPL, version 2 or later.
> + * See the COPYING file in the top-level directory.
> + * SPDX-License-Identifier: GPL-2.0-or-later
> + */
> +
> +#include "qemu/osdep.h"
> +#include "qapi/qapi-events-qdev.h"
> +
> +void qapi_event_send_device_deleted(bool has_device,
> + const char *device, const char *path)
> +{
> +}
> diff --git a/hw/core/Makefile.objs b/hw/core/Makefile.objs
> index 6215e7c208..89bf247173 100644
> --- a/hw/core/Makefile.objs
> +++ b/hw/core/Makefile.objs
> @@ -8,6 +8,7 @@ common-obj-y += vmstate-if.o
> # irq.o needed for qdev GPIO handling:
> common-obj-y += irq.o
>
> +common-obj-$(call lnot,$(CONFIG_SOFTMMU)) += qdev-stubs.o
This should be:
obj-$(call lnot,$(CONFIG_SOFTMMU)) += qdev-stubs.o
(not common).
> common-obj-$(CONFIG_SOFTMMU) += reset.o
> common-obj-$(CONFIG_SOFTMMU) += qdev-fw.o
> common-obj-$(CONFIG_SOFTMMU) += fw-path-provider.o
>
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH 8/9] hw/core: Add qdev stub for user-mode
2020-03-14 9:46 ` Philippe Mathieu-Daudé
@ 2020-03-14 10:49 ` Philippe Mathieu-Daudé
2020-03-14 10:57 ` Paolo Bonzini
0 siblings, 1 reply; 25+ messages in thread
From: Philippe Mathieu-Daudé @ 2020-03-14 10:49 UTC (permalink / raw)
To: qemu-devel
Cc: Daniel P. Berrangé,
Eduardo Habkost, Markus Armbruster, Laurent Vivier, Michael Roth,
Paolo Bonzini
On 3/14/20 10:46 AM, Philippe Mathieu-Daudé wrote:
> On 3/13/20 7:46 PM, Philippe Mathieu-Daudé wrote:
>> While user-mode does not use peripherals (devices), it uses a
>> CPU which is a device.
>> In the next commit we will reduce the QAPI generated code for
>> user-mode. Since qdev.c calls qapi_event_send_device_deleted(),
>> let's add a stub for it.
>>
>> Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
>> ---
>> hw/core/qdev-stubs.c | 20 ++++++++++++++++++++
>> hw/core/Makefile.objs | 1 +
>> 2 files changed, 21 insertions(+)
>> create mode 100644 hw/core/qdev-stubs.c
>>
>> diff --git a/hw/core/qdev-stubs.c b/hw/core/qdev-stubs.c
>> new file mode 100644
>> index 0000000000..0819dcba12
>> --- /dev/null
>> +++ b/hw/core/qdev-stubs.c
>> @@ -0,0 +1,20 @@
>> +/*
>> + * QAPI qdev stubs
>> + *
>> + * Copyright (c) 2020 Red Hat, Inc.
>> + *
>> + * Author:
>> + * Philippe Mathieu-Daudé <philmd@redhat.com>
>> + *
>> + * This work is licensed under the terms of the GNU GPL, version 2 or
>> later.
>> + * See the COPYING file in the top-level directory.
>> + * SPDX-License-Identifier: GPL-2.0-or-later
>> + */
>> +
>> +#include "qemu/osdep.h"
>> +#include "qapi/qapi-events-qdev.h"
>> +
>> +void qapi_event_send_device_deleted(bool has_device,
>> + const char *device, const char
>> *path)
>> +{
>> +}
>> diff --git a/hw/core/Makefile.objs b/hw/core/Makefile.objs
>> index 6215e7c208..89bf247173 100644
>> --- a/hw/core/Makefile.objs
>> +++ b/hw/core/Makefile.objs
>> @@ -8,6 +8,7 @@ common-obj-y += vmstate-if.o
>> # irq.o needed for qdev GPIO handling:
>> common-obj-y += irq.o
>> +common-obj-$(call lnot,$(CONFIG_SOFTMMU)) += qdev-stubs.o
>
> This should be:
>
> obj-$(call lnot,$(CONFIG_SOFTMMU)) += qdev-stubs.o
Actually I moved it to stub-obj-y which makes things easier.
>
> (not common).
>
>> common-obj-$(CONFIG_SOFTMMU) += reset.o
>> common-obj-$(CONFIG_SOFTMMU) += qdev-fw.o
>> common-obj-$(CONFIG_SOFTMMU) += fw-path-provider.o
>>
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH 8/9] hw/core: Add qdev stub for user-mode
2020-03-14 10:49 ` Philippe Mathieu-Daudé
@ 2020-03-14 10:57 ` Paolo Bonzini
2020-03-15 23:29 ` Philippe Mathieu-Daudé
0 siblings, 1 reply; 25+ messages in thread
From: Paolo Bonzini @ 2020-03-14 10:57 UTC (permalink / raw)
To: Philippe Mathieu-Daudé, qemu-devel
Cc: Laurent Vivier, Daniel P. Berrangé,
Michael Roth, Eduardo Habkost, Markus Armbruster
On 14/03/20 11:49, Philippe Mathieu-Daudé wrote:
>>>
>>> diff --git a/hw/core/Makefile.objs b/hw/core/Makefile.objs
>>> index 6215e7c208..89bf247173 100644
>>> --- a/hw/core/Makefile.objs
>>> +++ b/hw/core/Makefile.objs
>>> @@ -8,6 +8,7 @@ common-obj-y += vmstate-if.o
>>> # irq.o needed for qdev GPIO handling:
>>> common-obj-y += irq.o
>>> +common-obj-$(call lnot,$(CONFIG_SOFTMMU)) += qdev-stubs.o
>>
>> This should be:
>>
>> obj-$(call lnot,$(CONFIG_SOFTMMU)) += qdev-stubs.o
>
> Actually I moved it to stub-obj-y which makes things easier.
No, common-obj- is the right thing, followed by
common-obj-$(CONFIG_ALL) += qdev-stubs.o
Paolo
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH 1/9] hw/core/qdev-properties: Use qemu_strtol() in set_mac() handler
2020-03-13 18:45 ` [PATCH 1/9] hw/core/qdev-properties: Use qemu_strtol() in set_mac() handler Philippe Mathieu-Daudé
@ 2020-03-15 21:25 ` Richard Henderson
2020-03-15 22:28 ` Philippe Mathieu-Daudé
0 siblings, 1 reply; 25+ messages in thread
From: Richard Henderson @ 2020-03-15 21:25 UTC (permalink / raw)
To: Philippe Mathieu-Daudé, qemu-devel
Cc: Daniel P. Berrangé,
Eduardo Habkost, Markus Armbruster, Michael Roth, Laurent Vivier,
Paolo Bonzini
On 3/13/20 11:45 AM, Philippe Mathieu-Daudé wrote:
> + if (qemu_strtol(str + pos, &p, 16, &val) < 0 || val > 0xff) {
> + goto inval;
> + }
This is doing more that *just* using qemu_strtol, it's also validating the
input. I don't think you need to adjust the patch, just improve the commit
message. With that,
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
r~
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH 0/9] user-mode: Prune build dependencies (part 3)
2020-03-13 18:45 [PATCH 0/9] user-mode: Prune build dependencies (part 3) Philippe Mathieu-Daudé
` (8 preceding siblings ...)
2020-03-13 18:46 ` [PATCH 9/9] qapi: Restrict code generated " Philippe Mathieu-Daudé
@ 2020-03-15 21:38 ` no-reply
2020-03-15 21:42 ` no-reply
10 siblings, 0 replies; 25+ messages in thread
From: no-reply @ 2020-03-15 21:38 UTC (permalink / raw)
To: philmd
Cc: berrange, ehabkost, qemu-devel, mdroth, armbru, pbonzini, philmd,
laurent
Patchew URL: https://patchew.org/QEMU/20200313184607.11792-1-philmd@redhat.com/
Hi,
This series failed the asan build test. Please find the testing commands and
their output below. If you have Docker installed, you can probably reproduce it
locally.
=== TEST SCRIPT BEGIN ===
#!/bin/bash
export ARCH=x86_64
make docker-image-fedora V=1 NETWORK=1
time make docker-test-debug@fedora TARGET_LIST=x86_64-softmmu J=14 NETWORK=1
=== TEST SCRIPT END ===
CC x86_64-softmmu/cpus.o
CC x86_64-softmmu/gdbstub.o
CC x86_64-softmmu/balloon.o
clang-8: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [/tmp/qemu-test/src/rules.mak:124: qemu-storage-daemon] Error 1
make: *** Waiting for unfinished jobs....
CC x86_64-softmmu/ioport.o
CC x86_64-softmmu/qtest.o
---
raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['sudo', '-n', 'docker', 'run', '--label', 'com.qemu.instance.uuid=2bffa2a3ae9f4c5abcac499a84152015', '-u', '1001', '--security-opt', 'seccomp=unconfined', '--rm', '-e', 'TARGET_LIST=x86_64-softmmu', '-e', 'EXTRA_CONFIGURE_OPTS=', '-e', 'V=', '-e', 'J=14', '-e', 'DEBUG=', '-e', 'SHOW_ENV=', '-e', 'CCACHE_DIR=/var/tmp/ccache', '-v', '/home/patchew/.cache/qemu-docker-ccache:/var/tmp/ccache:z', '-v', '/var/tmp/patchew-tester-tmp-daojw9be/src/docker-src.2020-03-15-17.34.20.18376:/var/tmp/qemu:z,ro', 'qemu:fedora', '/var/tmp/qemu/run', 'test-debug']' returned non-zero exit status 2.
filter=--filter=label=com.qemu.instance.uuid=2bffa2a3ae9f4c5abcac499a84152015
make[1]: *** [docker-run] Error 1
make[1]: Leaving directory `/var/tmp/patchew-tester-tmp-daojw9be/src'
make: *** [docker-run-test-debug@fedora] Error 2
real 4m34.359s
user 0m8.566s
The full log is available at
http://patchew.org/logs/20200313184607.11792-1-philmd@redhat.com/testing.asan/?type=message.
---
Email generated automatically by Patchew [https://patchew.org/].
Please send your feedback to patchew-devel@redhat.com
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH 0/9] user-mode: Prune build dependencies (part 3)
2020-03-13 18:45 [PATCH 0/9] user-mode: Prune build dependencies (part 3) Philippe Mathieu-Daudé
` (9 preceding siblings ...)
2020-03-15 21:38 ` [PATCH 0/9] user-mode: Prune build dependencies (part 3) no-reply
@ 2020-03-15 21:42 ` no-reply
10 siblings, 0 replies; 25+ messages in thread
From: no-reply @ 2020-03-15 21:42 UTC (permalink / raw)
To: philmd
Cc: berrange, ehabkost, qemu-devel, mdroth, armbru, pbonzini, philmd,
laurent
Patchew URL: https://patchew.org/QEMU/20200313184607.11792-1-philmd@redhat.com/
Hi,
This series failed the docker-quick@centos7 build test. Please find the testing commands and
their output below. If you have Docker installed, you can probably reproduce it
locally.
=== TEST SCRIPT BEGIN ===
#!/bin/bash
make docker-image-centos7 V=1 NETWORK=1
time make docker-test-quick@centos7 SHOW_ENV=1 J=14 NETWORK=1
=== TEST SCRIPT END ===
LINK vhost-user-input
qapi/qapi-commands-char.o: In function `qmp_marshal_add_client':
/tmp/qemu-test/build/qapi/qapi-commands-char.c:404: undefined reference to `qmp_add_client'
collect2: error: ld returned 1 exit status
make: *** [qemu-storage-daemon] Error 1
make: *** Waiting for unfinished jobs....
Traceback (most recent call last):
File "./tests/docker/docker.py", line 664, in <module>
---
raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['sudo', '-n', 'docker', 'run', '--label', 'com.qemu.instance.uuid=2e7a0a82c26e492cb2d6989558e27a23', '-u', '1001', '--security-opt', 'seccomp=unconfined', '--rm', '-e', 'TARGET_LIST=', '-e', 'EXTRA_CONFIGURE_OPTS=', '-e', 'V=', '-e', 'J=14', '-e', 'DEBUG=', '-e', 'SHOW_ENV=1', '-e', 'CCACHE_DIR=/var/tmp/ccache', '-v', '/home/patchew/.cache/qemu-docker-ccache:/var/tmp/ccache:z', '-v', '/var/tmp/patchew-tester-tmp-tu591xrl/src/docker-src.2020-03-15-17.40.03.25832:/var/tmp/qemu:z,ro', 'qemu:centos7', '/var/tmp/qemu/run', 'test-quick']' returned non-zero exit status 2.
filter=--filter=label=com.qemu.instance.uuid=2e7a0a82c26e492cb2d6989558e27a23
make[1]: *** [docker-run] Error 1
make[1]: Leaving directory `/var/tmp/patchew-tester-tmp-tu591xrl/src'
make: *** [docker-run-test-quick@centos7] Error 2
real 2m28.553s
user 0m8.571s
The full log is available at
http://patchew.org/logs/20200313184607.11792-1-philmd@redhat.com/testing.docker-quick@centos7/?type=message.
---
Email generated automatically by Patchew [https://patchew.org/].
Please send your feedback to patchew-devel@redhat.com
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH 2/9] hw/core/qdev-properties: Use qemu_strtoul() in set_pci_host_devaddr()
2020-03-13 18:46 ` [PATCH 2/9] hw/core/qdev-properties: Use qemu_strtoul() in set_pci_host_devaddr() Philippe Mathieu-Daudé
@ 2020-03-15 21:43 ` Richard Henderson
0 siblings, 0 replies; 25+ messages in thread
From: Richard Henderson @ 2020-03-15 21:43 UTC (permalink / raw)
To: Philippe Mathieu-Daudé, qemu-devel
Cc: Daniel P. Berrangé,
Eduardo Habkost, Markus Armbruster, Michael Roth, Laurent Vivier,
Paolo Bonzini
On 3/13/20 11:46 AM, Philippe Mathieu-Daudé wrote:
> Replace strtoul() by qemu_strtoul() so checkpatch.pl won't complain
> if we move this code later.
...
> p = str;
> - val = strtoul(p, &e, 16);
> - if (e == p || *e != ':') {
> + if (qemu_strtoul(p, &e, 16, &val) < 0 || val > 0xffff || e == p) {
> + goto inval;
> + }
> + if (*e != ':') {
You can drop the e == p test. That's done in check_strtox_error, called by
qemu_strtoul. Same for the other 2 instances.
The range check looks wrong, as we have not yet decided if this element is
"dom" or "bus".
> - if (dom > 0xffff || bus > 0xff || slot > 0x1f || func > 7) {
> + if (bus > 0xff) {
I think it makes sense to leave this line unchanged. Increase the slot and
func local variables increased to unsigned long so that the range check isn't
truncated.
r~
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH 3/9] hw/core/qdev-properties: Fix code style
2020-03-13 18:46 ` [PATCH 3/9] hw/core/qdev-properties: Fix code style Philippe Mathieu-Daudé
@ 2020-03-15 22:24 ` Richard Henderson
0 siblings, 0 replies; 25+ messages in thread
From: Richard Henderson @ 2020-03-15 22:24 UTC (permalink / raw)
To: Philippe Mathieu-Daudé, qemu-devel
Cc: Daniel P. Berrangé,
Eduardo Habkost, Markus Armbruster, Michael Roth, Laurent Vivier,
Paolo Bonzini
On 3/13/20 11:46 AM, Philippe Mathieu-Daudé wrote:
> We will soon move this code, fix its style to avoid checkpatch.pl
> to complain.
>
> Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
> ---
> hw/core/qdev-properties.c | 10 +++++-----
> 1 file changed, 5 insertions(+), 5 deletions(-)
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
r~
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH 4/9] hw/core/qdev-properties: Export enum-related functions
2020-03-13 18:46 ` [PATCH 4/9] hw/core/qdev-properties: Export enum-related functions Philippe Mathieu-Daudé
@ 2020-03-15 22:26 ` Richard Henderson
0 siblings, 0 replies; 25+ messages in thread
From: Richard Henderson @ 2020-03-15 22:26 UTC (permalink / raw)
To: Philippe Mathieu-Daudé, qemu-devel
Cc: Daniel P. Berrangé,
Eduardo Habkost, Markus Armbruster, Michael Roth, Laurent Vivier,
Paolo Bonzini
On 3/13/20 11:46 AM, Philippe Mathieu-Daudé wrote:
> We are going to split this file and reuse these static functions.
> Add the local "qdev-prop-internal.h" header declaring them.
>
> Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
> ---
> hw/core/qdev-prop-internal.h | 19 ++++++++++++
> hw/core/qdev-properties.c | 58 +++++++++++++++++++-----------------
> 2 files changed, 49 insertions(+), 28 deletions(-)
> create mode 100644 hw/core/qdev-prop-internal.h
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
r~
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH 5/9] hw/core/qdev-properties: Export qdev_prop_enum
2020-03-13 18:46 ` [PATCH 5/9] hw/core/qdev-properties: Export qdev_prop_enum Philippe Mathieu-Daudé
@ 2020-03-15 22:26 ` Richard Henderson
0 siblings, 0 replies; 25+ messages in thread
From: Richard Henderson @ 2020-03-15 22:26 UTC (permalink / raw)
To: Philippe Mathieu-Daudé, qemu-devel
Cc: Daniel P. Berrangé,
Eduardo Habkost, Markus Armbruster, Michael Roth, Laurent Vivier,
Paolo Bonzini
On 3/13/20 11:46 AM, Philippe Mathieu-Daudé wrote:
> Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
> ---
> include/hw/qdev-properties.h | 1 +
> hw/core/qdev-properties.c | 7 +++++++
> 2 files changed, 8 insertions(+)
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
r~
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH 6/9] hw/core/qdev-properties: Export some integer-related functions
2020-03-13 18:46 ` [PATCH 6/9] hw/core/qdev-properties: Export some integer-related functions Philippe Mathieu-Daudé
@ 2020-03-15 22:27 ` Richard Henderson
0 siblings, 0 replies; 25+ messages in thread
From: Richard Henderson @ 2020-03-15 22:27 UTC (permalink / raw)
To: Philippe Mathieu-Daudé, qemu-devel
Cc: Daniel P. Berrangé,
Eduardo Habkost, Markus Armbruster, Michael Roth, Laurent Vivier,
Paolo Bonzini
On 3/13/20 11:46 AM, Philippe Mathieu-Daudé wrote:
> We are going to split this file and reuse these static functions.
> Declare them in the local "qdev-prop-internal.h" header.
>
> Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
> ---
> hw/core/qdev-prop-internal.h | 9 ++++++++
> hw/core/qdev-properties.c | 42 +++++++++++++++++++-----------------
> 2 files changed, 31 insertions(+), 20 deletions(-)
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
r~
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH 1/9] hw/core/qdev-properties: Use qemu_strtol() in set_mac() handler
2020-03-15 21:25 ` Richard Henderson
@ 2020-03-15 22:28 ` Philippe Mathieu-Daudé
0 siblings, 0 replies; 25+ messages in thread
From: Philippe Mathieu-Daudé @ 2020-03-15 22:28 UTC (permalink / raw)
To: Richard Henderson, qemu-devel
Cc: Daniel P. Berrangé,
Eduardo Habkost, Markus Armbruster, Michael Roth, Laurent Vivier,
Paolo Bonzini
On 3/15/20 10:25 PM, Richard Henderson wrote:
> On 3/13/20 11:45 AM, Philippe Mathieu-Daudé wrote:
>> + if (qemu_strtol(str + pos, &p, 16, &val) < 0 || val > 0xff) {
>> + goto inval;
>> + }
>
> This is doing more that *just* using qemu_strtol, it's also validating the
> input. I don't think you need to adjust the patch, just improve the commit
> message. With that,
>
> Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Correct. I'll add a comment, as currently we ignore incorrect input due
to the implicit cast to uint8_t:
struct MACAddr {
uint8_t a[6];
};
mac->a[i] = strtol(str+pos, &p, 16);
Thanks!
>
> r~
>
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH 7/9] hw/core/qdev-properties: Extract system-mode specific properties
2020-03-13 18:46 ` [PATCH 7/9] hw/core/qdev-properties: Extract system-mode specific properties Philippe Mathieu-Daudé
@ 2020-03-15 22:30 ` Richard Henderson
0 siblings, 0 replies; 25+ messages in thread
From: Richard Henderson @ 2020-03-15 22:30 UTC (permalink / raw)
To: Philippe Mathieu-Daudé, qemu-devel
Cc: Daniel P. Berrangé,
Eduardo Habkost, Markus Armbruster, Michael Roth, Laurent Vivier,
Paolo Bonzini
On 3/13/20 11:46 AM, Philippe Mathieu-Daudé wrote:
> Move properties specific to machines into a separate file.
>
> Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
> ---
> hw/core/qdev-properties-system.c | 602 ++++++++++++++++++++++++++++++-
> hw/core/qdev-properties.c | 590 ------------------------------
> 2 files changed, 594 insertions(+), 598 deletions(-)
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
r~
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH 9/9] qapi: Restrict code generated for user-mode
2020-03-13 18:46 ` [PATCH 9/9] qapi: Restrict code generated " Philippe Mathieu-Daudé
@ 2020-03-15 22:31 ` Richard Henderson
0 siblings, 0 replies; 25+ messages in thread
From: Richard Henderson @ 2020-03-15 22:31 UTC (permalink / raw)
To: Philippe Mathieu-Daudé, qemu-devel
Cc: Daniel P. Berrangé,
Eduardo Habkost, Markus Armbruster, Michael Roth, Laurent Vivier,
Paolo Bonzini
On 3/13/20 11:46 AM, Philippe Mathieu-Daudé wrote:
> A lot of QAPI generated code is never used by user-mode.
>
> Rewrite the QAPI_COMMON_MODULES variable one entry per line,
> and split it in 3 groups:
> - always used
> - use by system-mode or tools
> - only used by system-mode
>
> Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
> ---
> qapi/Makefile.objs | 37 +++++++++++++++++++++++++++++++++----
> 1 file changed, 33 insertions(+), 4 deletions(-)
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
r~
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH 8/9] hw/core: Add qdev stub for user-mode
2020-03-14 10:57 ` Paolo Bonzini
@ 2020-03-15 23:29 ` Philippe Mathieu-Daudé
0 siblings, 0 replies; 25+ messages in thread
From: Philippe Mathieu-Daudé @ 2020-03-15 23:29 UTC (permalink / raw)
To: Paolo Bonzini, qemu-devel
Cc: Laurent Vivier, Daniel P. Berrangé,
Michael Roth, Eduardo Habkost, Markus Armbruster
On 3/14/20 11:57 AM, Paolo Bonzini wrote:
> On 14/03/20 11:49, Philippe Mathieu-Daudé wrote:
>>>>
>>>> diff --git a/hw/core/Makefile.objs b/hw/core/Makefile.objs
>>>> index 6215e7c208..89bf247173 100644
>>>> --- a/hw/core/Makefile.objs
>>>> +++ b/hw/core/Makefile.objs
>>>> @@ -8,6 +8,7 @@ common-obj-y += vmstate-if.o
>>>> # irq.o needed for qdev GPIO handling:
>>>> common-obj-y += irq.o
>>>> +common-obj-$(call lnot,$(CONFIG_SOFTMMU)) += qdev-stubs.o
>>>
>>> This should be:
>>>
>>> obj-$(call lnot,$(CONFIG_SOFTMMU)) += qdev-stubs.o
>>
>> Actually I moved it to stub-obj-y which makes things easier.
>
> No, common-obj- is the right thing, followed by
>
> common-obj-$(CONFIG_ALL) += qdev-stubs.o
I don't understand CONFIG_ALL magic, why is that different to common-obj-y?
Anyway your suggestion works, so I'll blindly use it, thanks.
>
> Paolo
>
^ permalink raw reply [flat|nested] 25+ messages in thread
end of thread, other threads:[~2020-03-15 23:42 UTC | newest]
Thread overview: 25+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-03-13 18:45 [PATCH 0/9] user-mode: Prune build dependencies (part 3) Philippe Mathieu-Daudé
2020-03-13 18:45 ` [PATCH 1/9] hw/core/qdev-properties: Use qemu_strtol() in set_mac() handler Philippe Mathieu-Daudé
2020-03-15 21:25 ` Richard Henderson
2020-03-15 22:28 ` Philippe Mathieu-Daudé
2020-03-13 18:46 ` [PATCH 2/9] hw/core/qdev-properties: Use qemu_strtoul() in set_pci_host_devaddr() Philippe Mathieu-Daudé
2020-03-15 21:43 ` Richard Henderson
2020-03-13 18:46 ` [PATCH 3/9] hw/core/qdev-properties: Fix code style Philippe Mathieu-Daudé
2020-03-15 22:24 ` Richard Henderson
2020-03-13 18:46 ` [PATCH 4/9] hw/core/qdev-properties: Export enum-related functions Philippe Mathieu-Daudé
2020-03-15 22:26 ` Richard Henderson
2020-03-13 18:46 ` [PATCH 5/9] hw/core/qdev-properties: Export qdev_prop_enum Philippe Mathieu-Daudé
2020-03-15 22:26 ` Richard Henderson
2020-03-13 18:46 ` [PATCH 6/9] hw/core/qdev-properties: Export some integer-related functions Philippe Mathieu-Daudé
2020-03-15 22:27 ` Richard Henderson
2020-03-13 18:46 ` [PATCH 7/9] hw/core/qdev-properties: Extract system-mode specific properties Philippe Mathieu-Daudé
2020-03-15 22:30 ` Richard Henderson
2020-03-13 18:46 ` [PATCH 8/9] hw/core: Add qdev stub for user-mode Philippe Mathieu-Daudé
2020-03-14 9:46 ` Philippe Mathieu-Daudé
2020-03-14 10:49 ` Philippe Mathieu-Daudé
2020-03-14 10:57 ` Paolo Bonzini
2020-03-15 23:29 ` Philippe Mathieu-Daudé
2020-03-13 18:46 ` [PATCH 9/9] qapi: Restrict code generated " Philippe Mathieu-Daudé
2020-03-15 22:31 ` Richard Henderson
2020-03-15 21:38 ` [PATCH 0/9] user-mode: Prune build dependencies (part 3) no-reply
2020-03-15 21:42 ` no-reply
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.