ppc patch queue for 2.5 2015-12-04
This contains some last minute QOM behaviour fixes from Markus Armbruster. -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQIcBAABAgAGBQJWYTYqAAoJEGw4ysog2bOSJUAQAKFxBs0QMmW/1NWlFAhHqbFN yMaG996TiHScVORI0GF7HdxCywNuVz+sNgPiWIxQRd6Lpp0ENZfMyZOvfLjCrjUW GAIWwaBrY+ysGpiUdSuyIwuf+OVOILpnWlCX8m9D0qV9nfiVMCfgt/aG88g5q9Ow MGaJgBrSSiHITtaBoVJfHvwryLQMv605PZrU9s7xX4qFvMgvGoIKvTi1Ar+eaKw2 xURBu7SKW5Iu6GhZCuwt3tu4AilJsasPVKFbCNzcol+Rv8yBInrE6TbRvj92kgDt 8leqLQQAdNgXx/ZUx/eZ5SNo0Y1AjjjECsRwmf3pZbeErQ8Rd24tTplPDwEaRDbW maDAUEcymGa4FVYHSvBD51BwWzaPxiOZE6dd+id1QRjrINNJLt8NkvUobS6y5G0s o66F/0k83h8QnjS4UJOLPQ2moDm38cCpOHhDE86AyrIS6C6n39FYDaPDxOneR7fT CyXJ5VfsH+DvRZWHcaSxceu4Nnk6QBaQnrAS0xbGLmqD2NOlP7OwGEyhWpUzHTav ihom6ktASbt1BtSNvdcSnUnyN1a3vwrOalMapCqMnqVf2+/aVoeL4+RiVnDXsqqw AvvS+MM/qeaVvb8r0bd3YO5yPlMCgP5pGhOog9A63yPOOWdHY6e+zgmefdI10SHw rSsqkjAK6OuVOQFZqGrL =SaYM -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/dgibson/tags/ppc-for-2.5-20151204' into staging ppc patch queue for 2.5 2015-12-04 This contains some last minute QOM behaviour fixes from Markus Armbruster. # gpg: Signature made Fri 04 Dec 2015 06:43:54 GMT using RSA key ID 20D9B392 # gpg: Good signature from "David Gibson <david@gibson.dropbear.id.au>" # gpg: aka "David Gibson (Red Hat) <dgibson@redhat.com>" # gpg: aka "David Gibson (ozlabs.org) <dgibson@ozlabs.org>" # gpg: WARNING: This key is not certified with sufficiently trusted signatures! # gpg: It is not certain that the signature belongs to the owner. # Primary key fingerprint: 75F4 6586 AE61 A66C C44E 87DC 6C38 CACA 20D9 B392 * remotes/dgibson/tags/ppc-for-2.5-20151204: spapr_drc: Change value of property "fdt" from null back to {} spapr_drc: Make device "spapr-dr-connector" unavailable with -device spapr_drc: Handle visitor errors properly Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
f33d046d23
@ -254,10 +254,16 @@ static void prop_get_fdt(Object *obj, Visitor *v, void *opaque,
|
|||||||
const char *name, Error **errp)
|
const char *name, Error **errp)
|
||||||
{
|
{
|
||||||
sPAPRDRConnector *drc = SPAPR_DR_CONNECTOR(obj);
|
sPAPRDRConnector *drc = SPAPR_DR_CONNECTOR(obj);
|
||||||
|
Error *err = NULL;
|
||||||
int fdt_offset_next, fdt_offset, fdt_depth;
|
int fdt_offset_next, fdt_offset, fdt_depth;
|
||||||
void *fdt;
|
void *fdt;
|
||||||
|
|
||||||
if (!drc->fdt) {
|
if (!drc->fdt) {
|
||||||
|
visit_start_struct(v, NULL, NULL, name, 0, &err);
|
||||||
|
if (!err) {
|
||||||
|
visit_end_struct(v, &err);
|
||||||
|
}
|
||||||
|
error_propagate(errp, err);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -276,24 +282,43 @@ static void prop_get_fdt(Object *obj, Visitor *v, void *opaque,
|
|||||||
case FDT_BEGIN_NODE:
|
case FDT_BEGIN_NODE:
|
||||||
fdt_depth++;
|
fdt_depth++;
|
||||||
name = fdt_get_name(fdt, fdt_offset, &name_len);
|
name = fdt_get_name(fdt, fdt_offset, &name_len);
|
||||||
visit_start_struct(v, NULL, NULL, name, 0, NULL);
|
visit_start_struct(v, NULL, NULL, name, 0, &err);
|
||||||
|
if (err) {
|
||||||
|
error_propagate(errp, err);
|
||||||
|
return;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case FDT_END_NODE:
|
case FDT_END_NODE:
|
||||||
/* shouldn't ever see an FDT_END_NODE before FDT_BEGIN_NODE */
|
/* shouldn't ever see an FDT_END_NODE before FDT_BEGIN_NODE */
|
||||||
g_assert(fdt_depth > 0);
|
g_assert(fdt_depth > 0);
|
||||||
visit_end_struct(v, NULL);
|
visit_end_struct(v, &err);
|
||||||
|
if (err) {
|
||||||
|
error_propagate(errp, err);
|
||||||
|
return;
|
||||||
|
}
|
||||||
fdt_depth--;
|
fdt_depth--;
|
||||||
break;
|
break;
|
||||||
case FDT_PROP: {
|
case FDT_PROP: {
|
||||||
int i;
|
int i;
|
||||||
prop = fdt_get_property_by_offset(fdt, fdt_offset, &prop_len);
|
prop = fdt_get_property_by_offset(fdt, fdt_offset, &prop_len);
|
||||||
name = fdt_string(fdt, fdt32_to_cpu(prop->nameoff));
|
name = fdt_string(fdt, fdt32_to_cpu(prop->nameoff));
|
||||||
visit_start_list(v, name, NULL);
|
visit_start_list(v, name, &err);
|
||||||
for (i = 0; i < prop_len; i++) {
|
if (err) {
|
||||||
visit_type_uint8(v, (uint8_t *)&prop->data[i], NULL, NULL);
|
error_propagate(errp, err);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
for (i = 0; i < prop_len; i++) {
|
||||||
|
visit_type_uint8(v, (uint8_t *)&prop->data[i], NULL, &err);
|
||||||
|
if (err) {
|
||||||
|
error_propagate(errp, err);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
visit_end_list(v, &err);
|
||||||
|
if (err) {
|
||||||
|
error_propagate(errp, err);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
visit_end_list(v, NULL);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
@ -574,6 +599,10 @@ static void spapr_dr_connector_class_init(ObjectClass *k, void *data)
|
|||||||
drck->attach = attach;
|
drck->attach = attach;
|
||||||
drck->detach = detach;
|
drck->detach = detach;
|
||||||
drck->release_pending = release_pending;
|
drck->release_pending = release_pending;
|
||||||
|
/*
|
||||||
|
* Reason: it crashes FIXME find and document the real reason
|
||||||
|
*/
|
||||||
|
dk->cannot_instantiate_with_device_add_yet = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const TypeInfo spapr_dr_connector_info = {
|
static const TypeInfo spapr_dr_connector_info = {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user