[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v6 03/11] scripts: add coccinelle script to use auto propagat
From: |
Eric Blake |
Subject: |
Re: [PATCH v6 03/11] scripts: add coccinelle script to use auto propagated errp |
Date: |
Fri, 17 Jan 2020 08:24:55 -0600 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.3.1 |
On 1/10/20 1:41 PM, Vladimir Sementsov-Ogievskiy wrote:
Signed-off-by: Vladimir Sementsov-Ogievskiy <address@hidden>
---
Rather light on the commit message. If nothing else, a comment about
typical command-line usage would be helpful (yes, it's in the patch
body, but sometimes I just refer to git log).
diff --git a/include/qapi/error.h b/include/qapi/error.h
index 532b9afb9e..dcfb77e107 100644
--- a/include/qapi/error.h
+++ b/include/qapi/error.h
@@ -141,6 +141,9 @@
* ...
* }
*
+ * For mass conversion use script
+ * scripts/coccinelle/auto-propagated-errp.cocci
+ *
*
* Receive and accumulate multiple errors (first one wins):
* Error *err = NULL, *local_err = NULL;
diff --git a/scripts/coccinelle/auto-propagated-errp.cocci
b/scripts/coccinelle/auto-propagated-errp.cocci
new file mode 100644
index 0000000000..6c72a5049f
--- /dev/null
+++ b/scripts/coccinelle/auto-propagated-errp.cocci
@@ -0,0 +1,139 @@
+// Use ERRP_AUTO_PROPAGATE (see 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 \
+// blockdev-nbd.c qemu-nbd.c {block/nbd*,nbd/*,include/block/nbd*}.[hc]
+
+@@
+// Add invocation to errp-functions where necessary
+// We should skip functions with "Error *const *errp"
+// parameter, but how to do it with coccinelle?
+// I don't know, so, I skip them by function name regex.
+// It's safe: if we not skip some functions with
s/not/did not/
+// "Error *const *errp", ERRP_AUTO_PROPAGATE invocation
+// will fail to compile, because of const violation.
+identifier fn !~ "error_append_.*_hint";
+identifier local_err, errp;
+@@
+
+ fn(..., Error **errp, ...)
+ {
++ ERRP_AUTO_PROPAGATE();
+ <+...
+ when != ERRP_AUTO_PROPAGATE();
+(
+ error_append_hint(errp, ...);
+|
+ error_prepend(errp, ...);
+|
+ Error *local_err = NULL;
+)
+ ...+>
+ }
+
Looks like it should catch all functions that require adding the macro.
+@rule1@
+// We do not inherit from previous rule, as we want to match
+// also functions, which already had ERRP_AUTO_PROPAGATE
+// invocation.
Grammar suggestion:
// We want to patch error propagation in functions regardless of
// whether the function already uses ERRP_AUTO_PROPAGATE, hence
// this one does not inherit from the first rule.
Reviewed-by: Eric Blake <address@hidden>
--
Eric Blake, Principal Software Engineer
Red Hat, Inc. +1-919-301-3226
Virtualization: qemu.org | libvirt.org
- Re: [PATCH v6 08/11] virtio-9p: introduce ERRP_AUTO_PROPAGATE, (continued)
- [PATCH v6 10/11] nbd: introduce ERRP_AUTO_PROPAGATE, Vladimir Sementsov-Ogievskiy, 2020/01/10
- [PATCH v6 04/11] hw/sd/ssi-sd: fix error handling in ssi_sd_realize, Vladimir Sementsov-Ogievskiy, 2020/01/10
- [PATCH v6 05/11] SD (Secure Card): introduce ERRP_AUTO_PROPAGATE, Vladimir Sementsov-Ogievskiy, 2020/01/10
- [PATCH v6 09/11] TPM: introduce ERRP_AUTO_PROPAGATE, Vladimir Sementsov-Ogievskiy, 2020/01/10
- [PATCH v6 01/11] qapi/error: add (Error **errp) cleaning APIs, Vladimir Sementsov-Ogievskiy, 2020/01/10
- [PATCH v6 03/11] scripts: add coccinelle script to use auto propagated errp, Vladimir Sementsov-Ogievskiy, 2020/01/10
- [PATCH v6 02/11] error: auto propagated local_err, Vladimir Sementsov-Ogievskiy, 2020/01/10
- [PATCH v6 07/11] fw_cfg: introduce ERRP_AUTO_PROPAGATE, Vladimir Sementsov-Ogievskiy, 2020/01/10
- [PATCH v6 11/11] xen: introduce ERRP_AUTO_PROPAGATE, Vladimir Sementsov-Ogievskiy, 2020/01/10