From: Eduardo Habkost <ehabkost@redhat.com>
To: Igor Mammedov <imammedo@redhat.com>
Cc: peter.maydell@linaro.org, mst@redhat.com, somlo@cmu.edu,
Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>,
qemu-devel@nongnu.org, rjones@redhat.com, pbonzini@redhat.com,
lersek@redhat.com
Subject: Re: [Qemu-devel] [PATCHv7 5/6] fw_cfg: move qdev_init_nofail() from fw_cfg_init1() to callers
Date: Mon, 10 Jul 2017 11:51:15 -0300 [thread overview]
Message-ID: <20170710145115.GI12152@localhost.localdomain> (raw)
In-Reply-To: <20170710094938.5d525300@nial.brq.redhat.com>
On Mon, Jul 10, 2017 at 09:49:38AM +0200, Igor Mammedov wrote:
> On Fri, 7 Jul 2017 12:07:07 -0300
> "Eduardo Habkost" <ehabkost@redhat.com> wrote:
>
> > On Fri, Jul 07, 2017 at 04:44:53PM +0200, Igor Mammedov wrote:
> > [...]
> > > > > taking in account that fwcfg in not user creatable device how about:
> > > > >
> > > > > diff --git a/hw/nvram/fw_cfg.c b/hw/nvram/fw_cfg.c
> > > > > index 316fca9..8f6eef8 100644
> > > > > --- a/hw/nvram/fw_cfg.c
> > > > > +++ b/hw/nvram/fw_cfg.c
> > > > > @@ -1014,7 +1014,10 @@ FWCfgState *fw_cfg_init_mem(hwaddr ctl_addr, hwaddr data_addr)
> > > > >
> > > > > FWCfgState *fw_cfg_find(void)
> > > > > {
> > > > > - return FW_CFG(object_resolve_path(FW_CFG_PATH, NULL));
> > > > > + bool ambig = false;
> > > > > + FWCfgState *f = FW_CFG(object_resolve_path_type("", TYPE_FW_CFG, &ambig));
> > > > > + assert(!ambig);
> > > > > + return f;
> > > > > }
> > > > >
> > > > > or if we must to print user friendly error and fail realize gracefully
> > > > > (not sure why) just add errp argument to function so it could report
> > > > > error back to caller, then places that do not care much about graceful
> > > > > exit would use error_abort as argument and realize would use
> > > > > its local_error/errp argument.
> > > >
> > > > My understanding from the thread was that we should only use assert()s
> > > > where there is no other choice so that any failures can be handled in a
> > > > more friendly manner.
> > > the rule I use to decide assert vs nice error handling:
> > > 1: try to avoid crash on hotplug path
> > > 2: if error could be induced by end user on startup, try to print nice error
> > > before dying
> > > 3: when error should not happen just assert or use error_abort
> > > which would print nice error message before dying.
> >
> > I would add this to the list:
> >
> > If returning error instead of aborting is easy, return an error
> > and let the caller decide if it should use &error_abort or not.
> agreed, there aren't that many callers of fw_cfg_find()
> so I'd just add error argument to it and handle error at call sites.
I was talking about realizefn, which already has a errp
parameter. IMO a errp parameter to fw_cfg_find() would be
overkill.
(And an assert(!ambiguous) would make fw_cfg_find() less useful
because then it won't be usable by realizefn).
--
Eduardo
next prev parent reply other threads:[~2017-07-10 14:51 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-06-29 14:07 [Qemu-devel] [PATCHv7 0/6] fw_cfg: qdev-related tidy-ups Mark Cave-Ayland
2017-06-29 14:07 ` [Qemu-devel] [PATCHv7 1/6] fw_cfg: don't map the fw_cfg IO ports in fw_cfg_io_realize() Mark Cave-Ayland
2017-06-29 14:07 ` [Qemu-devel] [PATCHv7 2/6] fw_cfg: move setting of FW_CFG_VERSION_DMA bit to fw_cfg_init1() Mark Cave-Ayland
2017-06-29 14:07 ` [Qemu-devel] [PATCHv7 3/6] fw_cfg: switch fw_cfg_find() to locate the fw_cfg device by type rather than path Mark Cave-Ayland
2017-07-03 9:42 ` Igor Mammedov
2017-07-04 18:14 ` Mark Cave-Ayland
2017-06-29 14:07 ` [Qemu-devel] [PATCHv7 4/6] fw_cfg: add assert() to ensure the fw_cfg device has been added as a child property Mark Cave-Ayland
2017-06-29 14:07 ` [Qemu-devel] [PATCHv7 5/6] fw_cfg: move qdev_init_nofail() from fw_cfg_init1() to callers Mark Cave-Ayland
2017-07-03 9:39 ` Igor Mammedov
2017-07-04 18:08 ` Mark Cave-Ayland
2017-07-07 11:33 ` Igor Mammedov
2017-07-07 13:12 ` Mark Cave-Ayland
2017-07-07 13:26 ` Eduardo Habkost
2017-07-07 13:54 ` Mark Cave-Ayland
2017-07-07 14:48 ` Eduardo Habkost
2017-07-07 16:16 ` Mark Cave-Ayland
2017-07-07 14:44 ` Igor Mammedov
2017-07-07 14:50 ` Eduardo Habkost
2017-07-07 15:07 ` Eduardo Habkost
2017-07-07 16:20 ` Mark Cave-Ayland
2017-07-10 8:01 ` Igor Mammedov
2017-07-10 14:53 ` Eduardo Habkost
2017-07-10 15:23 ` Igor Mammedov
2017-07-10 17:38 ` Eduardo Habkost
2017-07-11 18:05 ` Mark Cave-Ayland
2017-07-10 7:49 ` Igor Mammedov
2017-07-10 14:51 ` Eduardo Habkost [this message]
2017-07-07 13:13 ` Eduardo Habkost
2017-07-07 14:58 ` Igor Mammedov
2017-07-07 15:09 ` Eduardo Habkost
2017-07-07 18:18 ` Igor Mammedov
2017-07-07 19:30 ` Eduardo Habkost
2017-07-07 19:54 ` Eduardo Habkost
2017-07-07 20:03 ` Laszlo Ersek
2017-07-07 16:13 ` Mark Cave-Ayland
2017-06-29 14:07 ` [Qemu-devel] [PATCHv7 6/6] fw_cfg: move QOM type defines and fw_cfg types into fw_cfg.h Mark Cave-Ayland
2017-06-29 15:32 ` [Qemu-devel] [PATCHv7 0/6] fw_cfg: qdev-related tidy-ups Gabriel L. Somlo
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=20170710145115.GI12152@localhost.localdomain \
--to=ehabkost@redhat.com \
--cc=imammedo@redhat.com \
--cc=lersek@redhat.com \
--cc=mark.cave-ayland@ilande.co.uk \
--cc=mst@redhat.com \
--cc=pbonzini@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
--cc=rjones@redhat.com \
--cc=somlo@cmu.edu \
/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 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.