From: Eric Blake <eblake@redhat.com>
To: Markus Armbruster <armbru@redhat.com>, qemu-devel@nongnu.org
Cc: "Kevin Wolf" <kwolf@redhat.com>,
vsementsov@virtuozzo.com, qemu-block@nongnu.org,
"Paul Durrant" <paul@xen.org>,
"Philippe Mathieu-Daudé" <philmd@redhat.com>,
"Christian Schoenebeck" <qemu_oss@crudebyte.com>,
"Michael Roth" <mdroth@linux.vnet.ibm.com>,
groug@kaod.org, "Stefano Stabellini" <sstabellini@kernel.org>,
"Gerd Hoffmann" <kraxel@redhat.com>,
"Stefan Hajnoczi" <stefanha@redhat.com>,
"Anthony Perard" <anthony.perard@citrix.com>,
xen-devel@lists.xenproject.org, "Max Reitz" <mreitz@redhat.com>,
"Laszlo Ersek" <lersek@redhat.com>
Subject: Re: [PATCH v12 2/8] scripts: Coccinelle script to use ERRP_AUTO_PROPAGATE()
Date: Tue, 7 Jul 2020 14:36:02 -0500 [thread overview]
Message-ID: <764387d7-0d42-a291-d720-60df303c15e4@redhat.com> (raw)
In-Reply-To: <20200707165037.1026246-3-armbru@redhat.com>
On 7/7/20 11:50 AM, Markus Armbruster wrote:
> From: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
>
> Script adds ERRP_AUTO_PROPAGATE macro invocation where appropriate and
> does corresponding changes in code (look for details in
> include/qapi/error.h)
>
> Usage example:
> spatch --sp-file scripts/coccinelle/auto-propagated-errp.cocci \
> --macro-file scripts/cocci-macro-file.h --in-place --no-show-diff \
> --max-width 80 FILES...
>
> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
> Reviewed-by: Markus Armbruster <armbru@redhat.com>
> Signed-off-by: Markus Armbruster <armbru@redhat.com>
> ---
> scripts/coccinelle/auto-propagated-errp.cocci | 337 ++++++++++++++++++
> include/qapi/error.h | 3 +
> MAINTAINERS | 1 +
> 3 files changed, 341 insertions(+)
> create mode 100644 scripts/coccinelle/auto-propagated-errp.cocci
Needs a tweak if we go with ERRP_GUARD. But that's easy.
> +
> +// Convert special case with goto separately.
> +// I tried merging this into the following rule the obvious way, but
> +// it made Coccinelle hang on block.c
> +//
> +// Note interesting thing: if we don't do it here, and try to fixup
> +// "out: }" things later after all transformations (the rule will be
> +// the same, just without error_propagate() call), coccinelle fails to
> +// match this "out: }".
"out: }" is not valid C; would referring to "out: ; }" fare any better?
> +@ disable optional_qualifier@
> +identifier rule1.fn, rule1.local_err, out;
> +symbol errp;
> +@@
> +
> + fn(..., Error ** ____, ...)
> + {
> + <...
> +- goto out;
> ++ return;
> + ...>
> +- out:
> +- error_propagate(errp, local_err);
> + }
> +
> +// Convert most of local_err related stuff.
> +//
> +// Note, that we inherit rule1.fn and rule1.local_err names, not
> +// objects themselves. We may match something not related to the
> +// pattern matched by rule1. For example, local_err may be defined with
> +// the same name in different blocks inside one function, and in one
> +// block follow the propagation pattern and in other block doesn't.
> +//
> +// Note also that errp-cleaning functions
> +// error_free_errp
> +// error_report_errp
> +// error_reportf_errp
> +// warn_report_errp
> +// warn_reportf_errp
> +// are not yet implemented. They must call corresponding Error* -
> +// freeing function and then set *errp to NULL, to avoid further
> +// propagation to original errp (consider ERRP_AUTO_PROPAGATE in use).
> +// For example, error_free_errp may look like this:
> +//
> +// void error_free_errp(Error **errp)
> +// {
> +// error_free(*errp);
> +// *errp = NULL;
> +// }
I guess we can still decide later if we want these additional functions,
or if they will even help after the number of places we have already
improved after applying this script as-is and with Markus' cleanups in
place.
While I won't call myself a Coccinelle expert, it at least looks sane
enough that I'm comfortable if you add:
Reviewed-by: Eric Blake <eblake@redhat.com>
--
Eric Blake, Principal Software Engineer
Red Hat, Inc. +1-919-301-3226
Virtualization: qemu.org | libvirt.org
next prev parent reply other threads:[~2020-07-07 19:37 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-07-07 16:50 [PATCH v12 0/8] error: auto propagated local_err part I Markus Armbruster
2020-07-07 16:50 ` [PATCH v12 1/8] error: New macro ERRP_AUTO_PROPAGATE() Markus Armbruster
2020-07-07 19:02 ` Eric Blake
2020-07-07 20:01 ` Markus Armbruster
2020-07-07 20:08 ` Vladimir Sementsov-Ogievskiy
2020-07-07 20:43 ` Markus Armbruster
2020-07-07 16:50 ` [PATCH v12 2/8] scripts: Coccinelle script to use ERRP_AUTO_PROPAGATE() Markus Armbruster
2020-07-07 19:36 ` Eric Blake [this message]
2020-07-07 20:11 ` Markus Armbruster
2020-07-07 16:50 ` [PATCH v12 3/8] sd: Use ERRP_AUTO_PROPAGATE() Markus Armbruster
2020-07-07 16:50 ` [PATCH v12 4/8] pflash: " Markus Armbruster
2020-07-07 16:50 ` [PATCH v12 5/8] fw_cfg: " Markus Armbruster
2020-07-07 16:50 ` [PATCH v12 6/8] virtio-9p: " Markus Armbruster
2020-07-07 16:50 ` [PATCH v12 7/8] nbd: " Markus Armbruster
2020-07-07 19:43 ` Eric Blake
2020-07-07 16:50 ` [PATCH v12 8/8] xen: " Markus Armbruster
2020-07-07 18:47 ` [PATCH v12 0/8] error: auto propagated local_err part I Vladimir Sementsov-Ogievskiy
2020-07-07 18:52 ` Eric Blake
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=764387d7-0d42-a291-d720-60df303c15e4@redhat.com \
--to=eblake@redhat.com \
--cc=anthony.perard@citrix.com \
--cc=armbru@redhat.com \
--cc=groug@kaod.org \
--cc=kraxel@redhat.com \
--cc=kwolf@redhat.com \
--cc=lersek@redhat.com \
--cc=mdroth@linux.vnet.ibm.com \
--cc=mreitz@redhat.com \
--cc=paul@xen.org \
--cc=philmd@redhat.com \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=qemu_oss@crudebyte.com \
--cc=sstabellini@kernel.org \
--cc=stefanha@redhat.com \
--cc=vsementsov@virtuozzo.com \
--cc=xen-devel@lists.xenproject.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).