From: "Andreas Färber" <afaerber@suse.de>
To: Alexey Kardashevskiy <aik@ozlabs.ru>,
qemu-devel@nongnu.org, Paolo Bonzini <pbonzini@redhat.com>
Cc: qemu-ppc@nongnu.org, Alexander Graf <agraf@suse.de>
Subject: Re: [Qemu-devel] [PATCH v4 6/8] qdev: introduce FWPathProvider interface
Date: Thu, 20 Feb 2014 13:01:52 +0100 [thread overview]
Message-ID: <5305EEB0.8040605@suse.de> (raw)
In-Reply-To: <1386757341-12154-7-git-send-email-aik@ozlabs.ru>
Am 11.12.2013 11:22, schrieb Alexey Kardashevskiy:
> QEMU supports firmware names for all devices in the QEMU tree but
> some architectures expect some parts of firmware path names in different
> format.
>
> This introduces a firmware-pathname-change interface definition.
> If some machines needs to redefine the firmware path format, it has
> to add the TYPE_FW_PATH_PROVIDER interface to an object that is above
> the device on the QOM tree (typically /machine).
>
> Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> ---
> Changes:
> v4:
> * added fw-path-provider.o into tests/Makefile
> * fixed 80chars warning from checkpatch.pl
I am puzzled that the patch ends in Paolo's Sob but was sent by Alexey.
Was this picked up from another series or is it even in multiple
concurrent series? Were changes performed since Paolo signed it off? If
not, please provide a Patchwork link to the original for convenience. :)
> ---
> hw/core/Makefile.objs | 1 +
> hw/core/fw-path-provider.c | 36 ++++++++++++++++++++++++++++++++++++
> hw/core/qdev.c | 18 +++++++++++++++++-
> include/hw/fw-path-provider.h | 32 ++++++++++++++++++++++++++++++++
> tests/Makefile | 1 +
> 5 files changed, 87 insertions(+), 1 deletion(-)
> create mode 100644 hw/core/fw-path-provider.c
> create mode 100644 include/hw/fw-path-provider.h
>
> diff --git a/hw/core/Makefile.objs b/hw/core/Makefile.objs
> index 950146c..d829479 100644
> --- a/hw/core/Makefile.objs
> +++ b/hw/core/Makefile.objs
> @@ -1,5 +1,6 @@
> # core qdev-related obj files, also used by *-user:
> common-obj-y += qdev.o qdev-properties.o
> +common-obj-y += fw-path-provider.o
> # irq.o needed for qdev GPIO handling:
> common-obj-y += irq.o
>
> diff --git a/hw/core/fw-path-provider.c b/hw/core/fw-path-provider.c
> new file mode 100644
> index 0000000..0187568
> --- /dev/null
> +++ b/hw/core/fw-path-provider.c
> @@ -0,0 +1,36 @@
> +#include "hw/fw-path-provider.h"
This new file is lacking a license header. Same for the header file below.
> +
> +char *fw_path_provider_get_dev_path(FWPathProvider *p, BusState *bus,
> + DeviceState *dev)
> +{
> + FWPathProviderClass *k = FW_PATH_PROVIDER_GET_CLASS(p);
> +
> + return k->get_dev_path(p, bus, dev);
> +}
> +
> +char *fw_path_provider_try_get_dev_path(Object *o, BusState *bus,
> + DeviceState *dev)
> +{
> + FWPathProvider *p = (FWPathProvider *)
> + object_dynamic_cast(o, TYPE_FW_PATH_PROVIDER);
> +
> + if (p) {
> + return fw_path_provider_get_dev_path(p, bus, dev);
> + }
> +
> + return NULL;
> +}
> +
> +static const TypeInfo fw_path_provider_info = {
> + .name = TYPE_FW_PATH_PROVIDER,
> + .parent = TYPE_INTERFACE,
> + .class_size = sizeof(FWPathProviderClass),
Indentation looks inconsistent.
> +};
> +
Double white line seems unintentional.
> +
> +static void fw_path_provider_register_types(void)
> +{
> + type_register_static(&fw_path_provider_info);
> +}
> +
> +type_init(fw_path_provider_register_types)
> diff --git a/hw/core/qdev.c b/hw/core/qdev.c
> index 959130c..81a0e75 100644
> --- a/hw/core/qdev.c
> +++ b/hw/core/qdev.c
> @@ -26,6 +26,7 @@
> this API directly. */
>
> #include "hw/qdev.h"
> +#include "hw/fw-path-provider.h"
> #include "sysemu/sysemu.h"
> #include "qapi/error.h"
> #include "qapi/qmp/qerror.h"
> @@ -503,6 +504,18 @@ static char *bus_get_fw_dev_path(BusState *bus, DeviceState *dev)
> return NULL;
> }
>
> +static char *qdev_get_fw_dev_path_from_handler(BusState *bus, DeviceState *dev)
> +{
> + Object *obj = OBJECT(dev);
> + char *d = NULL;
> +
> + while (!d && obj->parent) {
> + obj = obj->parent;
> + d = fw_path_provider_try_get_dev_path(obj, bus, dev);
> + }
> + return d;
> +}
> +
> static int qdev_get_fw_dev_path_helper(DeviceState *dev, char *p, int size)
> {
> int l = 0;
> @@ -510,7 +523,10 @@ static int qdev_get_fw_dev_path_helper(DeviceState *dev, char *p, int size)
> if (dev && dev->parent_bus) {
> char *d;
> l = qdev_get_fw_dev_path_helper(dev->parent_bus->parent, p, size);
> - d = bus_get_fw_dev_path(dev->parent_bus, dev);
> + d = qdev_get_fw_dev_path_from_handler(dev->parent_bus, dev);
> + if (!d) {
> + d = bus_get_fw_dev_path(dev->parent_bus, dev);
> + }
> if (d) {
> l += snprintf(p + l, size - l, "%s", d);
> g_free(d);
> diff --git a/include/hw/fw-path-provider.h b/include/hw/fw-path-provider.h
> new file mode 100644
> index 0000000..765170b
> --- /dev/null
> +++ b/include/hw/fw-path-provider.h
> @@ -0,0 +1,32 @@
> +#ifndef FW_PATH_PROVIDER_H
> +#define FW_PATH_PROVIDER_H 1
> +
> +#include "qemu-common.h"
> +#include "qom/object.h"
> +
> +#define TYPE_FW_PATH_PROVIDER "fw-path-provider"
> +
> +#define FW_PATH_PROVIDER_CLASS(klass) \
> + OBJECT_CLASS_CHECK(FWPathProviderClass, (klass), TYPE_FW_PATH_PROVIDER)
> +#define FW_PATH_PROVIDER_GET_CLASS(obj) \
> + OBJECT_GET_CLASS(FWPathProviderClass, (obj), TYPE_FW_PATH_PROVIDER)
> +#define FW_PATH_PROVIDER(obj) \
> + INTERFACE_CHECK(FWPathProvider, (obj), TYPE_FW_PATH_PROVIDER)
> +
> +typedef struct FWPathProvider {
> + Object Parent;
parent_obj
> +} FWPathProvider;
> +
> +typedef void (*StreamCanPushNotifyFn)(void *opaque);
> +
> +typedef struct FWPathProviderClass {
> + InterfaceClass parent;
parent_class and white line after, please.
Patch looks independent of the other pieces, so we could extract some
non-ppc pieces if this is not just waiting for an ack.
The QOM patches should already be upstream by now.
Thanks,
Andreas
> + char *(*get_dev_path)(FWPathProvider *p, BusState *bus, DeviceState *dev);
> +} FWPathProviderClass;
> +
> +char *fw_path_provider_get_dev_path(FWPathProvider *p, BusState *bus,
> + DeviceState *dev);
> +char *fw_path_provider_try_get_dev_path(Object *o, BusState *bus,
> + DeviceState *dev);
> +
> +#endif /* FW_PATH_PROVIDER_H */
> diff --git a/tests/Makefile b/tests/Makefile
> index 379cdd9..09c42d0 100644
> --- a/tests/Makefile
> +++ b/tests/Makefile
> @@ -160,6 +160,7 @@ tests/test-qdev-global-props$(EXESUF): tests/test-qdev-global-props.o \
> hw/core/qdev.o hw/core/qdev-properties.o \
> hw/core/irq.o \
> qom/object.o qom/container.o qom/qom-qobject.o \
> + hw/core/fw-path-provider.o \
> $(test-qapi-obj-y) \
> libqemuutil.a libqemustub.a
>
>
--
SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany
GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer; HRB 16746 AG Nürnberg
next prev parent reply other threads:[~2014-02-20 12:02 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-12-11 10:22 [Qemu-devel] [PATCH v4 0/8] spapr: bootindex support Alexey Kardashevskiy
2013-12-11 10:22 ` [Qemu-devel] [PATCH v4 1/8] qom: do not register interface "types" in the type table Alexey Kardashevskiy
2013-12-11 10:22 ` [Qemu-devel] [PATCH v4 2/8] qom: detect bad reentrance during object_class_foreach Alexey Kardashevskiy
2013-12-11 10:22 ` [Qemu-devel] [PATCH v4 3/8] boot: extend get_boot_devices_list() to ignore suffixes Alexey Kardashevskiy
2013-12-11 10:22 ` [Qemu-devel] [PATCH v4 4/8] spapr-llan: add to boot device list Alexey Kardashevskiy
2013-12-11 10:22 ` [Qemu-devel] [PATCH v4 5/8] spapr-vio: fix firmware names Alexey Kardashevskiy
2013-12-11 10:22 ` [Qemu-devel] [PATCH v4 6/8] qdev: introduce FWPathProvider interface Alexey Kardashevskiy
2014-02-20 12:01 ` Andreas Färber [this message]
2013-12-11 10:22 ` [Qemu-devel] [PATCH v4 7/8] vl: allow customizing the class of /machine Alexey Kardashevskiy
2013-12-11 10:22 ` [Qemu-devel] [PATCH v4 8/8] spapr: define interface to fix device pathname Alexey Kardashevskiy
2013-12-11 10:36 ` [Qemu-devel] [PATCH v4 0/8] spapr: bootindex support Paolo Bonzini
2013-12-12 14:05 ` Michael S. Tsirkin
2013-12-13 3:19 ` Alexey Kardashevskiy
2014-01-22 4:19 ` Alexey Kardashevskiy
2014-01-22 10:16 ` Paolo Bonzini
2014-01-22 12:17 ` Alexey Kardashevskiy
2014-02-14 3:25 ` Alexey Kardashevskiy
2014-02-14 7:29 ` Paolo Bonzini
2014-02-14 8:26 ` Alexey Kardashevskiy
2014-02-20 8:37 ` Alexey Kardashevskiy
2014-02-20 11:09 ` Paolo Bonzini
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=5305EEB0.8040605@suse.de \
--to=afaerber@suse.de \
--cc=agraf@suse.de \
--cc=aik@ozlabs.ru \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=qemu-ppc@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).