From nobody Sat Apr 27 20:24:15 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=fail (BodyHash is different from the expected one); dmarc=fail(p=none dis=none) header.from=virtuozzo.com Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 15844582687761009.8185129133806; Tue, 17 Mar 2020 08:17:48 -0700 (PDT) Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1jEDxo-0001gK-58; Tue, 17 Mar 2020 15:17:04 +0000 Received: from us1-rack-iad1.inumbo.com ([172.99.69.81]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1jEDxm-0001gE-Vn for xen-devel@lists.xenproject.org; Tue, 17 Mar 2020 15:17:03 +0000 Received: from EUR02-AM5-obe.outbound.protection.outlook.com (unknown [2a01:111:f400:fe07::71c]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS id 57f23326-6862-11ea-bec1-bc764e2007e4; Tue, 17 Mar 2020 15:16:58 +0000 (UTC) Received: from HE1PR0802MB2507.eurprd08.prod.outlook.com (10.175.35.136) by HE1PR0802MB2620.eurprd08.prod.outlook.com (10.175.36.20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2814.21; Tue, 17 Mar 2020 15:16:54 +0000 Received: from HE1PR0802MB2507.eurprd08.prod.outlook.com ([fe80::4d32:e4e1:5b9f:240f]) by HE1PR0802MB2507.eurprd08.prod.outlook.com ([fe80::4d32:e4e1:5b9f:240f%12]) with mapi id 15.20.2814.021; Tue, 17 Mar 2020 15:16:54 +0000 Received: from localhost.localdomain (185.215.60.248) by AM0PR10CA0005.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:208:17c::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2835.15 via Frontend Transport; Tue, 17 Mar 2020 15:16:52 +0000 X-Inumbo-ID: 57f23326-6862-11ea-bec1-bc764e2007e4 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=XyMBz/z+lRqNJ9btlpLsD2wOb8995wDG3lE7W81l8g2r+NJsn4dXR1bueGUWwDoAea1nIC6elrQpRP6dEuQiZSI0TLZtCpF4mdknNr6dqCmAuHLFhyBPesHxlxNIuka/5yAoCOleFmBhLop8Qup8gNlipG68qoEe8tSz8uaUh5h1RYUq7U3mMVLuCInU/WnYeuguujHyQYgUgLQXLIiLiwBg9xq3n+rgtdQxzXIwWvU7fkX7lO8N4s2mXJvTjejCqLiP2zg7WgPMPe721VyE4LNK6XUaIcDQGjGqTyIQGf1zMX409lUPL7tI6tS39QY29OO5P81m3q9Rui+8c//apw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=geidpRKznJ30A50ug7yvS4fUAC8Dpy0mf3kSy7C5GVs=; b=hxMSNjCK1wGDGdanCCh0VNB764ETs1Cwenq8PysP6FIPTQ5xq2GreWLAcAuFjORnyt9gom5jGWTbBJt163WRg0k46rBEehjdgf/yBRmMIR+jTmnbFrss0iGmKR9gCOakxOUVJCd9jtdNwr1wBI5cM3ViPbDCEtMdZd/58E6l5y37EzlXdUwJkfaG2nOiv1DgDh/oYy6k2h6tHuRItO8dwuG307NIgQQnBWDvj7IvQ+XLhC8ePfjM1bomPrkmBxfHIsALvVy+sdL7vMLvYa0gqsP1NxMRY+nYwKAhVh1Z9Od/4ljKe+2VsBzw5tRT2xpCIUhWmi4cxfw0qy+RsxkIBA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=geidpRKznJ30A50ug7yvS4fUAC8Dpy0mf3kSy7C5GVs=; b=Iy0n92SfLDaQUVzGY2hOwh65ImidroKCBeCkP+6T3lojQiyOv94NX8yxFuLerLzWPdu6gBUUdA795Nabx+v4Tf5P2GkmDWmb2lFzVdDXEck04Ci3V+vu02UN3EFktvktIQKN3QHGFB6jwrQaqXnvVl6YWQbJg8YA4aTjRPbcRfQ= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=vsementsov@virtuozzo.com; From: Vladimir Sementsov-Ogievskiy To: qemu-devel@nongnu.org Date: Tue, 17 Mar 2020 18:16:17 +0300 Message-Id: <20200317151625.20797-2-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20200317151625.20797-1-vsementsov@virtuozzo.com> References: <20200317151625.20797-1-vsementsov@virtuozzo.com> X-ClientProxiedBy: AM0PR10CA0005.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:208:17c::15) To HE1PR0802MB2507.eurprd08.prod.outlook.com (2603:10a6:3:e1::8) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-Mailer: git-send-email 2.21.0 X-Originating-IP: [185.215.60.248] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 539ae3f3-a216-4b90-693d-08d7ca8639e9 X-MS-TrafficTypeDiagnostic: HE1PR0802MB2620: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:10000; X-Forefront-PRVS: 0345CFD558 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(4636009)(39850400004)(376002)(136003)(346002)(366004)(396003)(199004)(66946007)(6666004)(30864003)(1076003)(66556008)(54906003)(66476007)(86362001)(6486002)(16526019)(5660300002)(6916009)(186003)(6506007)(52116002)(4326008)(81166006)(6512007)(81156014)(8676002)(8936002)(316002)(7416002)(2906002)(26005)(478600001)(956004)(36756003)(2616005); DIR:OUT; SFP:1102; SCL:1; SRVR:HE1PR0802MB2620; H:HE1PR0802MB2507.eurprd08.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Received-SPF: None (protection.outlook.com: virtuozzo.com does not designate permitted sender hosts) X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: zi4EwamTi7mTr4MNREbSTJwyhTXFoK86BJstsgcPhCOz/WWrQBXEvNHDoAISIsF0M5ZhBjYFDs/A++NTI/Pc98H5j4TjrfcvO8ax888RqEKYtEHB64TBJ6+48keudRlVz/n1VWeTv3CALAzg26/FEHpFeF9jWoImSNeW/dGCs+B+jUnNwhUamnoQmOQt00C4mG2C9eOxVtv/S2/StDQTWGG5UJlkyzDpKxGzfdmljLrgEvXA3vpBiON2lAlTGuOiZx/P1UoQ0sUGmwG2PA3HbEHCI+0q7n10NPx6mW5Dv9uLfz3i96/ryhDJnUdjd+QJ1b5aVZ53VFY1xcS5/j0S4GabyDLfvQd/Td6jAxriomTOiZdiuEB7H/yYzuJyo3H5ZIgejpIER5ATaMM2qDRdRNNEKRE2ZE2UJpmQedbykWWb9iIK2D5CmonLatI5OxgM X-MS-Exchange-AntiSpam-MessageData: 5ntmn/kSFPsbLUL6ZhtmUbU2ysCHbCv415PB6w5/YOnFXbtWAoGt2l9BRRTUlNXHZRAP9Fsg7WtT20WbL5W8D6y/1ZIJmTm7H+kgYBvFln3LG1Hb7n0icpKDfdT343g9MQ+MkooO3obpEKB8idFaDA== X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 539ae3f3-a216-4b90-693d-08d7ca8639e9 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Mar 2020 15:16:54.5349 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: aZ50MhjOFu7oxN8ZM8fyztsbUtWxxi9Sg1SOb+k8GduYFai9QtXBc7FUFE8gBRUVs83RrBkkerKu6kmRyPSjQ+tK1azepHoDhaM+CdcFmdA= X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR0802MB2620 Subject: [Xen-devel] [PATCH v10 1/9] error: auto propagated local_err X-BeenThere: xen-devel@lists.xenproject.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Cc: Kevin Wolf , vsementsov@virtuozzo.com, Laszlo Ersek , qemu-block@nongnu.org, Paul Durrant , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Christian Schoenebeck , Greg Kurz , armbru@redhat.com, Stefano Stabellini , Gerd Hoffmann , Stefan Hajnoczi , Anthony Perard , xen-devel@lists.xenproject.org, Max Reitz , Eric Blake , Michael Roth , Stefan Berger Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Introduce a new ERRP_AUTO_PROPAGATE macro, to be used at start of functions with an errp OUT parameter. It has three goals: 1. Fix issue with error_fatal and error_prepend/error_append_hint: user can't see this additional information, because exit() happens in error_setg earlier than information is added. [Reported by Greg Kurz] 2. Fix issue with error_abort and error_propagate: when we wrap error_abort by local_err+error_propagate, the resulting coredump will refer to error_propagate and not to the place where error happened. (the macro itself doesn't fix the issue, but it allows us to [3.] drop the local_err+error_propagate pattern, which will definitely fix the issue) [Reported by Kevin Wolf] 3. Drop local_err+error_propagate pattern, which is used to workaround void functions with errp parameter, when caller wants to know resulting status. (Note: actually these functions could be merely updated to return int error code). To achieve these goals, later patches will add invocations of this macro at the start of functions with either use error_prepend/error_append_hint (solving 1) or which use local_err+error_propagate to check errors, switching those functions to use *errp instead (solving 2 and 3). Signed-off-by: Vladimir Sementsov-Ogievskiy Reviewed-by: Paul Durrant Reviewed-by: Greg Kurz Reviewed-by: Eric Blake --- Cc: Eric Blake Cc: Kevin Wolf Cc: Max Reitz Cc: Greg Kurz Cc: Christian Schoenebeck Cc: Stefan Hajnoczi Cc: Stefano Stabellini Cc: Anthony Perard Cc: Paul Durrant Cc: "Philippe Mathieu-Daud=C3=A9" Cc: Laszlo Ersek Cc: Gerd Hoffmann Cc: Stefan Berger Cc: Markus Armbruster Cc: Michael Roth Cc: qemu-devel@nongnu.org Cc: qemu-block@nongnu.org Cc: xen-devel@lists.xenproject.org include/qapi/error.h | 205 ++++++++++++++++++++++++++++++++++++------- 1 file changed, 173 insertions(+), 32 deletions(-) diff --git a/include/qapi/error.h b/include/qapi/error.h index ad5b6e896d..30140d9bfe 100644 --- a/include/qapi/error.h +++ b/include/qapi/error.h @@ -15,6 +15,8 @@ /* * Error reporting system loosely patterned after Glib's GError. * + * =3D Deal with Error object =3D + * * Create an error: * error_setg(&err, "situation normal, all fouled up"); * @@ -47,28 +49,91 @@ * reporting it (primarily useful in testsuites): * error_free_or_abort(&err); * - * Pass an existing error to the caller: - * error_propagate(errp, err); - * where Error **errp is a parameter, by convention the last one. + * =3D Deal with Error ** function parameter =3D * - * Pass an existing error to the caller with the message modified: - * error_propagate_prepend(errp, err); + * A function may use the error system to return errors. In this case, the + * function defines an Error **errp parameter, by convention the last one = (with + * exceptions for functions using ... or va_list). * - * Avoid - * error_propagate(errp, err); - * error_prepend(errp, "Could not frobnicate '%s': ", name); - * because this fails to prepend when @errp is &error_fatal. + * The caller may then pass in the following errp values: * - * Create a new error and pass it to the caller: + * 1. &error_abort + * Any error will result in abort(). + * 2. &error_fatal + * Any error will result in exit() with a non-zero status. + * 3. NULL + * No error reporting through errp parameter. + * 4. The address of a NULL-initialized Error *err + * Any error will populate errp with an error object. + * + * The following rules then implement the correct semantics desired by the + * caller. + * + * Create a new error to pass to the caller: * error_setg(errp, "situation normal, all fouled up"); * - * Call a function and receive an error from it: + * Calling another errp-based function: + * f(..., errp); + * + * =3D=3D Checking success of subcall =3D=3D + * + * If a function returns a value indicating an error in addition to setting + * errp (which is recommended), then you don't need any additional code, j= ust + * do: + * + * int ret =3D f(..., errp); + * if (ret < 0) { + * ... handle error ... + * return ret; + * } + * + * If a function returns nothing (not recommended for new code), the only = way + * to check success is by consulting errp; doing this safely requires the = use + * of the ERRP_AUTO_PROPAGATE macro, like this: + * + * int our_func(..., Error **errp) { + * ERRP_AUTO_PROPAGATE(); + * ... + * subcall(..., errp); + * if (*errp) { + * ... + * return -EINVAL; + * } + * ... + * } + * + * ERRP_AUTO_PROPAGATE takes care of wrapping the original errp as needed,= so + * that the rest of the function can directly use errp (including + * dereferencing), where any errors will then be propagated on to the orig= inal + * errp when leaving the function. + * + * In some cases, we need to check result of subcall, but do not want to + * propagate the Error object to our caller. In such cases we don't need + * ERRP_AUTO_PROPAGATE, but just a local Error object: + * + * Receive an error and not pass it: * Error *err =3D NULL; - * foo(arg, &err); + * subcall(arg, &err); * if (err) { * handle the error... + * error_free(err); * } * + * Note that older code that did not use ERRP_AUTO_PROPAGATE would instead= need + * a local Error * variable and the use of error_propagate() to properly h= andle + * all possible caller values of errp. Now this is DEPRECATED* (see below). + * + * Note that any function that wants to modify an error object, such as by + * calling error_append_hint or error_prepend, must use ERRP_AUTO_PROPAGAT= E, in + * order for a caller's use of &error_fatal to see the additional informat= ion. + * + * In rare cases, we need to pass existing Error object to the caller by h= and: + * error_propagate(errp, err); + * + * Pass an existing error to the caller with the message modified: + * error_propagate_prepend(errp, err); + * + * * Call a function ignoring errors: * foo(arg, NULL); * @@ -78,26 +143,6 @@ * Call a function treating errors as fatal: * foo(arg, &error_fatal); * - * Receive an error and pass it on to the caller: - * Error *err =3D NULL; - * foo(arg, &err); - * if (err) { - * handle the error... - * error_propagate(errp, err); - * } - * where Error **errp is a parameter, by convention the last one. - * - * Do *not* "optimize" this to - * foo(arg, errp); - * if (*errp) { // WRONG! - * handle the error... - * } - * because errp may be NULL! - * - * But when all you do with the error is pass it on, please use - * foo(arg, errp); - * for readability. - * * Receive and accumulate multiple errors (first one wins): * Error *err =3D NULL, *local_err =3D NULL; * foo(arg, &err); @@ -114,6 +159,61 @@ * handle the error... * } * because this may pass a non-null err to bar(). + * + * DEPRECATED* + * + * The following pattern of receiving, checking, and then forwarding an er= ror + * to the caller by hand is now deprecated: + * + * Error *err =3D NULL; + * foo(arg, &err); + * if (err) { + * handle the error... + * error_propagate(errp, err); + * } + * + * Instead, use ERRP_AUTO_PROPAGATE macro. + * + * The old pattern is deprecated because of two things: + * + * 1. Issue with error_abort and error_propagate: when we wrap error_abort= by + * local_err+error_propagate, the resulting coredump will refer to + * error_propagate and not to the place where error happened. + * + * 2. A lot of extra code of the same pattern + * + * How to update old code to use ERRP_AUTO_PROPAGATE? + * + * All you need is to add ERRP_AUTO_PROPAGATE() invocation at function sta= rt, + * than you may safely dereference errp to check errors and do not need any + * additional local Error variables or calls to error_propagate(). + * + * Example: + * + * old code + * + * void fn(..., Error **errp) { + * Error *err =3D NULL; + * foo(arg, &err); + * if (err) { + * handle the error... + * error_propagate(errp, err); + * return; + * } + * ... + * } + * + * updated code + * + * void fn(..., Error **errp) { + * ERRP_AUTO_PROPAGATE(); + * foo(arg, errp); + * if (*errp) { + * handle the error... + * return; + * } + * ... + * } */ =20 #ifndef ERROR_H @@ -322,6 +422,47 @@ void error_set_internal(Error **errp, ErrorClass err_class, const char *fmt, ...) GCC_FMT_ATTR(6, 7); =20 +typedef struct ErrorPropagator { + Error *local_err; + Error **errp; +} ErrorPropagator; + +static inline void error_propagator_cleanup(ErrorPropagator *prop) +{ + error_propagate(prop->errp, prop->local_err); +} + +G_DEFINE_AUTO_CLEANUP_CLEAR_FUNC(ErrorPropagator, error_propagator_cleanup= ); + +/* + * ERRP_AUTO_PROPAGATE + * + * This macro exists to assist with proper error handling in a function wh= ich + * uses an Error **errp parameter. It must be used as the first line of a + * function which modifies an error (with error_prepend, error_append_hint= , or + * similar) or which wants to dereference *errp. It is still safe (but + * useless) to use in other functions. + * + * If errp is NULL or points to error_fatal, it is rewritten to point to a + * local Error object, which will be automatically propagated to the origi= nal + * errp on function exit (see error_propagator_cleanup). + * + * After invocation of this macro it is always safe to dereference errp + * (as it's not NULL anymore) and to add information by error_prepend or + * error_append_hint (as, if it was error_fatal, we swapped it with a + * local_error to be propagated on cleanup). + * + * Note: we don't wrap the error_abort case, as we want resulting coredump + * to point to the place where the error happened, not to error_propagate. + */ +#define ERRP_AUTO_PROPAGATE() \ + g_auto(ErrorPropagator) _auto_errp_prop =3D {.errp =3D errp}; \ + do { \ + if (!errp || errp =3D=3D &error_fatal) { \ + errp =3D &_auto_errp_prop.local_err; \ + } \ + } while (0) + /* * Special error destination to abort on error. * See error_setg() and error_propagate() for details. --=20 2.21.0 _______________________________________________ Xen-devel mailing list Xen-devel@lists.xenproject.org https://lists.xenproject.org/mailman/listinfo/xen-devel From nobody Sat Apr 27 20:24:15 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=fail (BodyHash is different from the expected one); dmarc=fail(p=none dis=none) header.from=virtuozzo.com Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 15844582759589.187729903474974; Tue, 17 Mar 2020 08:17:55 -0700 (PDT) Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1jEDxt-0001hq-HY; Tue, 17 Mar 2020 15:17:09 +0000 Received: from us1-rack-iad1.inumbo.com ([172.99.69.81]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1jEDxs-0001hS-0r for xen-devel@lists.xenproject.org; Tue, 17 Mar 2020 15:17:08 +0000 Received: from EUR02-AM5-obe.outbound.protection.outlook.com (unknown [2a01:111:f400:fe07::71c]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS id 591d47cc-6862-11ea-bec1-bc764e2007e4; Tue, 17 Mar 2020 15:17:00 +0000 (UTC) Received: from HE1PR0802MB2507.eurprd08.prod.outlook.com (10.175.35.136) by HE1PR0802MB2620.eurprd08.prod.outlook.com (10.175.36.20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2814.21; Tue, 17 Mar 2020 15:16:56 +0000 Received: from HE1PR0802MB2507.eurprd08.prod.outlook.com ([fe80::4d32:e4e1:5b9f:240f]) by HE1PR0802MB2507.eurprd08.prod.outlook.com ([fe80::4d32:e4e1:5b9f:240f%12]) with mapi id 15.20.2814.021; Tue, 17 Mar 2020 15:16:56 +0000 Received: from localhost.localdomain (185.215.60.248) by AM0PR10CA0005.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:208:17c::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2835.15 via Frontend Transport; Tue, 17 Mar 2020 15:16:54 +0000 X-Inumbo-ID: 591d47cc-6862-11ea-bec1-bc764e2007e4 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=KoRVe5yWsI0JoBibvswHouKPw9+JZg56hc50pBJs0oPdjCKr/z9xTR/0VKHThcULbvm4BTQ8DTQkFfoZUEPsUyOV7Oq0h28Cua8U0pNOoY9M7y3ei/aIhr5n5lglyQWW98ZsAZ3D2J5PISqmTvFun9vi+o7+AVpa/4YLmlDQ0aRgR/kPmmpXoeOi4Iwn8e8ajTC29lhFUQPIW9SwnqMUyNs3e9PWOgGdXTDUXm7Z/sLLTmn199+ax9EY8sxvSIilndj7j4X6cnNH0rkVcGM5pLIYdK3hbFbQCgF6xN2lHkDfJTCYdKwLnQe8qCVokEH7tNhBfDlbLX4/4ze5fAUVuw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=HBpOUg1L6a4tJiQ+PypsUzQGtaFTSszE5WC1/prYbRo=; b=l71byK/fe4+tk5L+JgCuuymELynrT8/ivRX1rB2fvvu5AHjeWrxakA2Bdve53/J5fypGZQR1wjnX9+nhH6QhHiyWAErDXWYzrFO82ajgtQQhWneqYRsYW67h5K/QOBmngYS/KVPaOFwOe+c0qB3CA6uyi7CvrTwqfKZ0YgPvJKP0CHrNX+s+ce2i98824k8x1Bh0SYEEszXhNXxeArI7K4yeWVKqKXTXtT6JYtSVkFr8v+Id+IRO4/EecISGxB7n5Og3yXVB7HXvZ1uGJq1+g3G1J3GbA3HrPtbDnYoyDUjCXSa5y99joQ8vWIJYOHrXj7M6Lr8bN6kVaywh1IufUQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=HBpOUg1L6a4tJiQ+PypsUzQGtaFTSszE5WC1/prYbRo=; b=peeFCkgAmf9BePJY96MBHERs9XRRdAymVAw3jBuXY3mm24DOBOg/kv0G/VZMjPiXa/uDuyKDTnFCAbcpM+CMG5Mpliu2gglDVN8DyMISxDBHRJD7ai8oPEOWyOOEE6Cq7oclbgAVpnlFKUizgChxfPGtlB6n4G/ofFho0sleQzs= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=vsementsov@virtuozzo.com; From: Vladimir Sementsov-Ogievskiy To: qemu-devel@nongnu.org Date: Tue, 17 Mar 2020 18:16:18 +0300 Message-Id: <20200317151625.20797-3-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20200317151625.20797-1-vsementsov@virtuozzo.com> References: <20200317151625.20797-1-vsementsov@virtuozzo.com> X-ClientProxiedBy: AM0PR10CA0005.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:208:17c::15) To HE1PR0802MB2507.eurprd08.prod.outlook.com (2603:10a6:3:e1::8) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-Mailer: git-send-email 2.21.0 X-Originating-IP: [185.215.60.248] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 6006fcf3-fcee-4671-53e9-08d7ca863b28 X-MS-TrafficTypeDiagnostic: HE1PR0802MB2620: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:10000; X-Forefront-PRVS: 0345CFD558 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(4636009)(39850400004)(376002)(136003)(346002)(366004)(396003)(199004)(66946007)(6666004)(30864003)(66574012)(1076003)(66556008)(54906003)(66476007)(86362001)(6486002)(16526019)(5660300002)(6916009)(186003)(6506007)(52116002)(4326008)(81166006)(6512007)(81156014)(8676002)(8936002)(316002)(7416002)(2906002)(26005)(478600001)(956004)(36756003)(2616005)(2004002); DIR:OUT; SFP:1102; SCL:1; SRVR:HE1PR0802MB2620; H:HE1PR0802MB2507.eurprd08.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Received-SPF: None (protection.outlook.com: virtuozzo.com does not designate permitted sender hosts) X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 1KU3SJpugKWWWNIU4lR3eEpZ2RJOwk1nshcUCpF2WqDooZPyf5pavG8s3fkZl1wUFBQ4AMfGXAYwR182DAfpUR0KbT6MM7WO5N1Ay4Zy4xShrgiBR2S4MC/gXjop2fOu6ctUPjdpdEgxKaBNpHDUZeLWy2sex1gTDdVcLF8ikAfXSDWeKT3DiTXifGvGYIc+GgcDZueP2pqLPr7N81FQCD+4oLkq7Yh/7Tuf5bgjpgvIWpojhBOopmNgo/T82LyB6O/sQ294YIexDyVjYVyZAKJEpdylw+PpQt29Jfv4Wo9y1HzTmfaRM9KJo8p207oW8wcutDpT/emtruScRvEt1W/7dcnLDI/o8lf/rjXUI2A5pn14X+BMRbpQT/un7bKCVavReyZZNvNp3ydqO42Wy0bzhF4RY74jhzDpxReXZ0Vomeg5T/WNySnTlFs2BNp13PBBMyP6AE+5Hg6j97cIJBh24EKygrg5COYF9dyu3roMzWnfqrNSijh4l2JUgw4MNFq+BzHMxjnMc8r1sSdJ01C5hZFx/AGc6w5FGLhQLpj2KZphpam87NIcAQBuS+GP X-MS-Exchange-AntiSpam-MessageData: qoIDpXuMxC1AAbH86jVLti36QzchSH0J4phAZUUp6zELIjCxyg1xdiVwftoifvI++wo6bSHlVFhEVV8eRTXk/kqBg7gS4gn61l6sOEI2ATv+tLzmlAhf6zSgzlS9DOiP2iajUalStxnLHkx/LyOhcQ== X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6006fcf3-fcee-4671-53e9-08d7ca863b28 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Mar 2020 15:16:56.6690 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: lJAyrkSGokSYeGh7NWdGJn3susPfP/PUI1IXxCxam9neK+zEIqbSIX1hbiKWqxDdDxczhVv9B7imPA6ci+w61M1+YLXS6J+VNm3GN9MQd60= X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR0802MB2620 Subject: [Xen-devel] [PATCH v10 2/9] scripts: Coccinelle script to use ERRP_AUTO_PROPAGATE() X-BeenThere: xen-devel@lists.xenproject.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Cc: Kevin Wolf , vsementsov@virtuozzo.com, Laszlo Ersek , qemu-block@nongnu.org, Paul Durrant , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Christian Schoenebeck , Greg Kurz , armbru@redhat.com, Stefano Stabellini , Gerd Hoffmann , Stefan Hajnoczi , Anthony Perard , xen-devel@lists.xenproject.org, Max Reitz , Eric Blake , Michael Roth , Stefan Berger Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) 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 Reviewed-by: Markus Armbruster --- Cc: Eric Blake Cc: Kevin Wolf Cc: Max Reitz Cc: Greg Kurz Cc: Christian Schoenebeck Cc: Stefan Hajnoczi Cc: Stefano Stabellini Cc: Anthony Perard Cc: Paul Durrant Cc: "Philippe Mathieu-Daud=C3=A9" Cc: Laszlo Ersek Cc: Gerd Hoffmann Cc: Stefan Berger Cc: Markus Armbruster Cc: Michael Roth Cc: qemu-devel@nongnu.org Cc: qemu-block@nongnu.org Cc: xen-devel@lists.xenproject.org scripts/coccinelle/auto-propagated-errp.cocci | 336 ++++++++++++++++++ include/qapi/error.h | 3 + MAINTAINERS | 1 + 3 files changed, 340 insertions(+) create mode 100644 scripts/coccinelle/auto-propagated-errp.cocci diff --git a/scripts/coccinelle/auto-propagated-errp.cocci b/scripts/coccin= elle/auto-propagated-errp.cocci new file mode 100644 index 0000000000..5188b07006 --- /dev/null +++ b/scripts/coccinelle/auto-propagated-errp.cocci @@ -0,0 +1,336 @@ +// Use ERRP_AUTO_PROPAGATE (see include/qapi/error.h) +// +// Copyright (c) 2020 Virtuozzo International GmbH. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see +// . +// +// 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... +// +// Note: --max-width 80 is needed because coccinelle default is less +// than 80, and without this parameter coccinelle may reindent some +// lines which fit into 80 characters but not to coccinelle default, +// which in turn produces extra patch hunks for no reason. + +// Switch unusual Error ** parameter names to errp +// (this is necessary to use ERRP_AUTO_PROPAGATE). +// +// Disable optional_qualifier to skip functions with +// "Error *const *errp" parameter. +// +// Skip functions with "assert(_errp && *_errp)" statement, because +// that signals unusual semantics, and the parameter name may well +// serve a purpose. (like nbd_iter_channel_error()). +// +// Skip util/error.c to not touch, for example, error_propagate() and +// error_propagate_prepend(). +@ depends on !(file in "util/error.c") disable optional_qualifier@ +identifier fn; +identifier _errp !=3D errp; +@@ + + fn(..., +- Error **_errp ++ Error **errp + ,...) + { +( + ... when !=3D assert(_errp && *_errp) +& + <... +- _errp ++ errp + ...> +) + } + +// Add invocation of ERRP_AUTO_PROPAGATE to errp-functions where +// necessary +// +// Note, that without "when any" the final "..." does not mach +// something matched by previous pattern, i.e. the rule will not match +// double error_prepend in control flow like in +// vfio_set_irq_signaling(). +// +// Note, "exists" says that we want apply rule even if it does not +// match on all possible control flows (otherwise, it will not match +// standard pattern when error_propagate() call is in if branch). +@ disable optional_qualifier exists@ +identifier fn, local_err; +symbol errp; +@@ + + fn(..., Error **errp, ...) + { ++ ERRP_AUTO_PROPAGATE(); + ... when !=3D ERRP_AUTO_PROPAGATE(); +( +( + error_append_hint(errp, ...); +| + error_prepend(errp, ...); +| + error_vprepend(errp, ...); +) + ... when any +| + Error *local_err =3D NULL; + ... +( + error_propagate_prepend(errp, local_err, ...); +| + error_propagate(errp, local_err); +) + ... +) + } + +// Warn when several Error * definitions are in the control flow. +// This rule is not chained to rule1 and less restrictive, to cover more +// functions to warn (even those we are not going to convert). +// +// Note, that even with one (or zero) Error * definition in the each +// control flow we may have several (in total) Error * definitions in +// the function. This case deserves attention too, but I don't see +// simple way to match with help of coccinelle. +@check1 disable optional_qualifier exists@ +identifier fn, _errp, local_err, local_err2; +position p1, p2; +@@ + + fn(..., Error **_errp, ...) + { + ... + Error *local_err =3D NULL;@p1 + ... when any + Error *local_err2 =3D NULL;@p2 + ... when any + } + +@ script:python @ +fn << check1.fn; +p1 << check1.p1; +p2 << check1.p2; +@@ + +print('Warning: function {} has several definitions of ' + 'Error * local variable: at {}:{} and then at {}:{}'.format( + fn, p1[0].file, p1[0].line, p2[0].file, p2[0].line)) + +// Warn when several propagations are in the control flow. +@check2 disable optional_qualifier exists@ +identifier fn, _errp; +position p1, p2; +@@ + + fn(..., Error **_errp, ...) + { + ... +( + error_propagate_prepend(_errp, ...);@p1 +| + error_propagate(_errp, ...);@p1 +) + ... +( + error_propagate_prepend(_errp, ...);@p2 +| + error_propagate(_errp, ...);@p2 +) + ... when any + } + +@ script:python @ +fn << check2.fn; +p1 << check2.p1; +p2 << check2.p2; +@@ + +print('Warning: function {} propagates to errp several times in ' + 'one control flow: at {}:{} and then at {}:{}'.format( + fn, p1[0].file, p1[0].line, p2[0].file, p2[0].line)) + +// Match functions with propagation of local error to errp. +// We want to refer these functions in several following rules, but I +// don't know a proper way to inherit a function, not just its name +// (to not match another functions with same name in following rules). +// Not-proper way is as follows: rename errp parameter in functions +// header and match it in following rules. Rename it back after all +// transformations. +// +// The common case is a single definition of local_err with at most one +// error_propagate_prepend() or error_propagate() on each control-flow +// path. Functions with multiple definitions or propagates we want to +// examine manually. Later rules emit warnings to guide us to them. +// +// Note that we match not only this "common case", but any function, +// which has the "common cose" on at least one control-flow path. +@rule1 disable optional_qualifier exists@ +identifier fn, local_err; +symbol errp; +@@ + + fn(..., Error ** +- errp ++ ____ + , ...) + { + ... + Error *local_err =3D NULL; + ... +( + error_propagate_prepend(errp, local_err, ...); +| + error_propagate(errp, local_err); +) + ... + } + +// 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: }". +@ 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 =3D NULL; +// } +@ disable optional_qualifier exists@ +identifier rule1.fn, rule1.local_err; +expression list args; +symbol errp; +@@ + + fn(..., Error ** ____, ...) + { + <... +( +- Error *local_err =3D NULL; +| + +// Convert error clearing functions +( +- error_free(local_err); ++ error_free_errp(errp); +| +- error_report_err(local_err); ++ error_report_errp(errp); +| +- error_reportf_err(local_err, args); ++ error_reportf_errp(errp, args); +| +- warn_report_err(local_err); ++ warn_report_errp(errp); +| +- warn_reportf_err(local_err, args); ++ warn_reportf_errp(errp, args); +) +?- local_err =3D NULL; + +| +- error_propagate_prepend(errp, local_err, args); ++ error_prepend(errp, args); +| +- error_propagate(errp, local_err); +| +- &local_err ++ errp +) + ...> + } + +// Convert remaining local_err usage. For example, different kinds of +// error checking in if conditionals. We can't merge this into +// previous hunk, as this conflicts with other substitutions in it (at +// least with "- local_err =3D NULL"). +@ disable optional_qualifier@ +identifier rule1.fn, rule1.local_err; +symbol errp; +@@ + + fn(..., Error ** ____, ...) + { + <... +- local_err ++ *errp + ...> + } + +// Always use the same pattern for checking error +@ disable optional_qualifier@ +identifier rule1.fn; +symbol errp; +@@ + + fn(..., Error ** ____, ...) + { + <... +- *errp !=3D NULL ++ *errp + ...> + } + +// Revert temporary ___ identifier. +@ disable optional_qualifier@ +identifier rule1.fn; +@@ + + fn(..., Error ** +- ____ ++ errp + , ...) + { + ... + } diff --git a/include/qapi/error.h b/include/qapi/error.h index 30140d9bfe..56c133520d 100644 --- a/include/qapi/error.h +++ b/include/qapi/error.h @@ -214,6 +214,9 @@ * } * ... * } + * + * For mass-conversion use script + * scripts/coccinelle/auto-propagated-errp.cocci */ =20 #ifndef ERROR_H diff --git a/MAINTAINERS b/MAINTAINERS index 32867bc636..8b77127c35 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -2016,6 +2016,7 @@ F: include/qemu/error-report.h F: qapi/error.json F: util/error.c F: util/qemu-error.c +F: scripts/coccinelle/*err*.cocci =20 GDB stub M: Alex Benn=C3=A9e --=20 2.21.0 _______________________________________________ Xen-devel mailing list Xen-devel@lists.xenproject.org https://lists.xenproject.org/mailman/listinfo/xen-devel From nobody Sat Apr 27 20:24:15 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=fail (BodyHash is different from the expected one); dmarc=fail(p=none dis=none) header.from=virtuozzo.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1584458962840630.0217438922809; Tue, 17 Mar 2020 08:29:22 -0700 (PDT) Received: from localhost ([::1]:34770 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jEE9h-0004l5-EV for importer@patchew.org; Tue, 17 Mar 2020 11:29:21 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:33204) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jEDxl-0002pE-8v for qemu-devel@nongnu.org; Tue, 17 Mar 2020 11:17:02 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1jEDxj-0001aM-Hk for qemu-devel@nongnu.org; Tue, 17 Mar 2020 11:17:01 -0400 Received: from mail-he1eur04on0718.outbound.protection.outlook.com ([2a01:111:f400:fe0d::718]:38692 helo=EUR04-HE1-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1jEDxj-0001CE-8o for qemu-devel@nongnu.org; Tue, 17 Mar 2020 11:16:59 -0400 Received: from HE1PR0802MB2507.eurprd08.prod.outlook.com (10.175.35.136) by HE1PR0802MB2620.eurprd08.prod.outlook.com (10.175.36.20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2814.21; Tue, 17 Mar 2020 15:16:58 +0000 Received: from HE1PR0802MB2507.eurprd08.prod.outlook.com ([fe80::4d32:e4e1:5b9f:240f]) by HE1PR0802MB2507.eurprd08.prod.outlook.com ([fe80::4d32:e4e1:5b9f:240f%12]) with mapi id 15.20.2814.021; Tue, 17 Mar 2020 15:16:58 +0000 Received: from localhost.localdomain (185.215.60.248) by AM0PR10CA0005.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:208:17c::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2835.15 via Frontend Transport; Tue, 17 Mar 2020 15:16:56 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=GUzaMurbVJCHONIutn6FVg1CKOst52OOCOhQ4RBmKUv5bEU7sLWTzJu2z033eliUNEc388RZPBN5zJ0rhEJMsLPoINqu8PCv4G7PI3CkcE5vLaoG5Ge6JmSQ0VWfRE/9DlmRT3FNBkh4UqoSQkg2t2Jclb5Liere2jDLmIAQf3Kp8Exoj3hXVM2hrYRTbBFmzcUGy7E+Xxj3ktAj1KmuR07mVQd1yPqSWDqZv5qeibfZRQiGdnLZbEEGhkYrAa+u+ejTFfnpBE7u/2WgKetngPaUbkNwBfb6/0yfIv40c7c5FWIU/I8nMOpqnycDlW0fY7b+eov4DMYInHAT+Si9sQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=3j106k9EKlyYw31jk7ZgZGTNbLs/5KHn4gp9c3MACwY=; b=EZbzPJoWONsMgRl7KeReAzjlx79eRnGrWJI09WyWNKOTC2IRnhBbcge2/Q4pBy7FCiJ31d7Bp8GAYebIi3sEAjv5/pPtLw1zagiqJ7hlX95qcxxhwV7sYyrwjrmedY0Obdizl6uwkZ+XX8zF5Cw9xXSzho5i+Mwbfxevd/bF99DKQPRFOyupu46qoAicvt3yCMQbBkpUI8TvSFFCE1VOT8T1zHZMJRUwRxfFkwLms5paSuFhGDSMer3bkID2bgva7VpoXSKcNYu58moX/mbypNJB5zPnSISispCqXnNuJqcktIv1W93fK4tgKtctPvxjnLM9ePEqOiLsmdJbMq0SHA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=3j106k9EKlyYw31jk7ZgZGTNbLs/5KHn4gp9c3MACwY=; b=EnZH2f3cF4gLBA8RKYluF2zLrHo/DzeS/mJjdOC7foqoKMEYbR7QBNX/MFFDkUkvdHRhfTV5qDdukw502DyeLWWyZdMl2lnjKXJPP0sPE47J0eWqN4WcPwHHTGsSLr6hAZRG7JJtLd6dr/qV9npmHOla77MLMZ0GT7epdpesM3w= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=vsementsov@virtuozzo.com; From: Vladimir Sementsov-Ogievskiy To: qemu-devel@nongnu.org Subject: [PATCH v10 3/9] SD (Secure Card): introduce ERRP_AUTO_PROPAGATE Date: Tue, 17 Mar 2020 18:16:19 +0300 Message-ID: <20200317151625.20797-4-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20200317151625.20797-1-vsementsov@virtuozzo.com> References: <20200317151625.20797-1-vsementsov@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM0PR10CA0005.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:208:17c::15) To HE1PR0802MB2507.eurprd08.prod.outlook.com (2603:10a6:3:e1::8) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-Mailer: git-send-email 2.21.0 X-Originating-IP: [185.215.60.248] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: fc883ae0-82fd-445c-5132-08d7ca863bda X-MS-TrafficTypeDiagnostic: HE1PR0802MB2620: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:156; X-Forefront-PRVS: 0345CFD558 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(4636009)(39850400004)(376002)(136003)(346002)(366004)(396003)(199004)(66946007)(6666004)(1076003)(66556008)(54906003)(66476007)(86362001)(6486002)(16526019)(5660300002)(6916009)(186003)(69590400007)(6506007)(52116002)(4326008)(81166006)(6512007)(81156014)(8676002)(8936002)(316002)(2906002)(26005)(478600001)(956004)(36756003)(2616005); DIR:OUT; SFP:1102; SCL:1; SRVR:HE1PR0802MB2620; H:HE1PR0802MB2507.eurprd08.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: None (protection.outlook.com: virtuozzo.com does not designate permitted sender hosts) X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: KA8yngjKwceDqyFpD91l9l/hO/vsHs057NFVsaVfJils0j8yQQdom0irq+JH8AvILGIiTw2XgHNJLak0ilqiJyiMeZbYJl2S8896GBK5MF+Sbg786XM6NlonK7WDIa7hjS+4LnhocoA7tcoDWAYLo+cSTD1aXOorq0xAx/BgWckY+40FEOyOtVVpJcTaxUcd7YxAn+LuBUGCk+INwrlar8V6ja9U2LfS8G52NEcjja69QycO0F8hac7bDZpddxx7cVjjjtXclf+otgA9IDJ0Er3Upbvum+LBPOiYv1A20fGm8CH3sLq/hA4s+tfEA8GvyukAur/Aow1xSGWEHI9yI0/M5pmHDIJ73OdT8naCrl4xtXwm5cC78+XaJMKWvuI8xcgCoFncYVJp5SeqQ6rl2KFdJwDEojDKy+r9xag1Qi6e0vl+lxjsiGPLEogcZ3Uag3m5wcb6Yq8uIztDLDQaswQNtiHvO3ANpS/91B5gE4ZiTdh9qhz038+ottAG8ej8 X-MS-Exchange-AntiSpam-MessageData: dHX5WTbpw0Za30vKnIfuOuu5IdERtRnmQcvPigXuw+xl7pCHYpbyMtGwI4C6S10343dHNZUycmjW/yuX88w9EB5BHBW6HwXqCir6J0dgdhr4nkm/fzzZ3onQHmtloimRTmQq7ptgqx5cHK+3TuShNg== X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: fc883ae0-82fd-445c-5132-08d7ca863bda X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Mar 2020 15:16:57.8934 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: HBnXhpuUNYA9BMHhNXOodC/vXvExKMhZn0X+Nw795chCVpQ5KbBo1i/q8Cw1npeIXlywy9RxSWK67kjtxsjDA7iiWe1Ob5M0ntPw+gQTMNw= X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR0802MB2620 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 2a01:111:f400:fe0d::718 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Kevin Wolf , vsementsov@virtuozzo.com, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , armbru@redhat.com, Greg Kurz Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Computed bodyhash is different from the expected one) Content-Type: text/plain; charset="utf-8" If we want to add some info to errp (by error_prepend() or error_append_hint()), we must use the ERRP_AUTO_PROPAGATE macro. Otherwise, this info will not be added when errp =3D=3D &error_fatal (the program will exit prior to the error_append_hint() or error_prepend() call). Fix such cases. If we want to check error after errp-function call, we need to introduce local_err and then propagate it to errp. Instead, use ERRP_AUTO_PROPAGATE macro, benefits are: 1. No need of explicit error_propagate call 2. No need of explicit local_err variable: use errp directly 3. ERRP_AUTO_PROPAGATE leaves errp as is if it's not NULL or &error_fatal, this means that we don't break error_abort (we'll abort on error_set, not on error_propagate) This commit is generated by command sed -n '/^SD (Secure Card)$/,/^$/{s/^F: //p}' \ MAINTAINERS | \ xargs git ls-files | grep '\.[hc]$' | \ xargs spatch \ --sp-file scripts/coccinelle/auto-propagated-errp.cocci \ --macro-file scripts/cocci-macro-file.h \ --in-place --no-show-diff --max-width 80 Reported-by: Kevin Wolf Reported-by: Greg Kurz Signed-off-by: Vladimir Sementsov-Ogievskiy --- hw/sd/sdhci-pci.c | 7 +++---- hw/sd/sdhci.c | 21 +++++++++------------ hw/sd/ssi-sd.c | 16 ++++++++-------- 3 files changed, 20 insertions(+), 24 deletions(-) diff --git a/hw/sd/sdhci-pci.c b/hw/sd/sdhci-pci.c index 19fa8bd8ed..ceaf3ea35b 100644 --- a/hw/sd/sdhci-pci.c +++ b/hw/sd/sdhci-pci.c @@ -29,13 +29,12 @@ static Property sdhci_pci_properties[] =3D { =20 static void sdhci_pci_realize(PCIDevice *dev, Error **errp) { + ERRP_AUTO_PROPAGATE(); SDHCIState *s =3D PCI_SDHCI(dev); - Error *local_err =3D NULL; =20 sdhci_initfn(s); - sdhci_common_realize(s, &local_err); - if (local_err) { - error_propagate(errp, local_err); + sdhci_common_realize(s, errp); + if (*errp) { return; } =20 diff --git a/hw/sd/sdhci.c b/hw/sd/sdhci.c index de63ffb037..c25ac3c099 100644 --- a/hw/sd/sdhci.c +++ b/hw/sd/sdhci.c @@ -1288,7 +1288,7 @@ static const MemoryRegionOps sdhci_mmio_ops =3D { =20 static void sdhci_init_readonly_registers(SDHCIState *s, Error **errp) { - Error *local_err =3D NULL; + ERRP_AUTO_PROPAGATE(); =20 switch (s->sd_spec_version) { case 2 ... 3: @@ -1299,9 +1299,8 @@ static void sdhci_init_readonly_registers(SDHCIState = *s, Error **errp) } s->version =3D (SDHC_HCVER_VENDOR << 8) | (s->sd_spec_version - 1); =20 - sdhci_check_capareg(s, &local_err); - if (local_err) { - error_propagate(errp, local_err); + sdhci_check_capareg(s, errp); + if (*errp) { return; } } @@ -1332,11 +1331,10 @@ void sdhci_uninitfn(SDHCIState *s) =20 void sdhci_common_realize(SDHCIState *s, Error **errp) { - Error *local_err =3D NULL; + ERRP_AUTO_PROPAGATE(); =20 - sdhci_init_readonly_registers(s, &local_err); - if (local_err) { - error_propagate(errp, local_err); + sdhci_init_readonly_registers(s, errp); + if (*errp) { return; } s->buf_maxsz =3D sdhci_get_fifolen(s); @@ -1456,13 +1454,12 @@ static void sdhci_sysbus_finalize(Object *obj) =20 static void sdhci_sysbus_realize(DeviceState *dev, Error **errp) { + ERRP_AUTO_PROPAGATE(); SDHCIState *s =3D SYSBUS_SDHCI(dev); SysBusDevice *sbd =3D SYS_BUS_DEVICE(dev); - Error *local_err =3D NULL; =20 - sdhci_common_realize(s, &local_err); - if (local_err) { - error_propagate(errp, local_err); + sdhci_common_realize(s, errp); + if (*errp) { return; } =20 diff --git a/hw/sd/ssi-sd.c b/hw/sd/ssi-sd.c index 829797b597..bc44e1a0f5 100644 --- a/hw/sd/ssi-sd.c +++ b/hw/sd/ssi-sd.c @@ -241,10 +241,10 @@ static const VMStateDescription vmstate_ssi_sd =3D { =20 static void ssi_sd_realize(SSISlave *d, Error **errp) { + ERRP_AUTO_PROPAGATE(); ssi_sd_state *s =3D FROM_SSI_SLAVE(ssi_sd_state, d); DeviceState *carddev; DriveInfo *dinfo; - Error *err =3D NULL; =20 qbus_create_inplace(&s->sdbus, sizeof(s->sdbus), TYPE_SD_BUS, DEVICE(d), "sd-bus"); @@ -254,26 +254,26 @@ static void ssi_sd_realize(SSISlave *d, Error **errp) dinfo =3D drive_get_next(IF_SD); carddev =3D qdev_create(BUS(&s->sdbus), TYPE_SD_CARD); if (dinfo) { - qdev_prop_set_drive(carddev, "drive", blk_by_legacy_dinfo(dinfo), = &err); - if (err) { + qdev_prop_set_drive(carddev, "drive", blk_by_legacy_dinfo(dinfo), = errp); + if (*errp) { goto fail; } } =20 - object_property_set_bool(OBJECT(carddev), true, "spi", &err); - if (err) { + object_property_set_bool(OBJECT(carddev), true, "spi", errp); + if (*errp) { goto fail; } =20 - object_property_set_bool(OBJECT(carddev), true, "realized", &err); - if (err) { + object_property_set_bool(OBJECT(carddev), true, "realized", errp); + if (*errp) { goto fail; } =20 return; =20 fail: - error_propagate_prepend(errp, err, "failed to init SD card: "); + error_prepend(errp, "failed to init SD card: "); } =20 static void ssi_sd_reset(DeviceState *dev) --=20 2.21.0 From nobody Sat Apr 27 20:24:15 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=fail (BodyHash is different from the expected one); dmarc=fail(p=none dis=none) header.from=virtuozzo.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1584458818191619.8322170478057; Tue, 17 Mar 2020 08:26:58 -0700 (PDT) Received: from localhost ([::1]:34702 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jEE7M-0008WM-QJ for importer@patchew.org; Tue, 17 Mar 2020 11:26:56 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:33234) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jEDxm-0002re-Jd for qemu-devel@nongnu.org; Tue, 17 Mar 2020 11:17:04 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1jEDxl-0001kH-7J for qemu-devel@nongnu.org; Tue, 17 Mar 2020 11:17:02 -0400 Received: from mail-he1eur04on071f.outbound.protection.outlook.com ([2a01:111:f400:fe0d::71f]:1794 helo=EUR04-HE1-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1jEDxk-0001d5-VG; Tue, 17 Mar 2020 11:17:01 -0400 Received: from HE1PR0802MB2507.eurprd08.prod.outlook.com (10.175.35.136) by HE1PR0802MB2620.eurprd08.prod.outlook.com (10.175.36.20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2814.21; Tue, 17 Mar 2020 15:16:59 +0000 Received: from HE1PR0802MB2507.eurprd08.prod.outlook.com ([fe80::4d32:e4e1:5b9f:240f]) by HE1PR0802MB2507.eurprd08.prod.outlook.com ([fe80::4d32:e4e1:5b9f:240f%12]) with mapi id 15.20.2814.021; Tue, 17 Mar 2020 15:16:59 +0000 Received: from localhost.localdomain (185.215.60.248) by AM0PR10CA0005.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:208:17c::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2835.15 via Frontend Transport; Tue, 17 Mar 2020 15:16:58 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=j1JMRf8NFSt7038EyJXk5e5oYRrsQwn+XdpnYD/VUcePoqSJsgLpPDYvhh5p06NPGFaCRp6TH8Lvxby0B4UGlfqHHe8iNNSX0XgYUdrXEbs4tQJ3ZLJZIOzFEcQHeK8rGo9neNjDE0ygagx/OrgfRHBC9PnGO6lshzsqRffk7QO2i8mlvfluQvgWp9Muh1nJKooFxD40p8p2mGL0UqGfF3JznRAdcfDThmBWJeUL4ZJncTkZ2rXfhnlW0ezv/ExahiOK3OxU4yt5cQKCmCuRz68d50bn3z4d8ALO6QOzcgGmMcNfziTGJr+07MtazJiCgPIasV/J+FI28FXGJyNHUg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=/7w+twQDNLE1kCUVOa9jGf4f3ophG/9OvFgfLmC2doU=; b=U90v9vAlDWH14JB5ryOMonfuiaWTl3UKHnp78DbQgwbsioUMt8X/pZQyluwtokh8jTGJqQ2QD7yhIYda7nC39o9Aw+SxGTtE1fDWdaeit483ygYavGXkWIKgAbzp50ICm1xg6wAMM1NlUOqP9OAsOqZdUNcHmrmLsGVyE0/3tf9toKgb1Kt/UdvkVTvRbrj3pNjO4er6OJxWGUrzn44kpxa2tEKiKUx7R+VLxNefh+Z4DU217jFTTI9y8qvTPFO/yBnP+iasP7uW+FaxDvR52oGYgXYus/sKyAQbMZSSi2knZBTzlMuBvmGsNbmS83xIE12UpHIqjd5mD6TXft5qSg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=/7w+twQDNLE1kCUVOa9jGf4f3ophG/9OvFgfLmC2doU=; b=wp4wxLYwEzEirBSghWwMOrxhtTGRYhNaqno1O9VRfaMkHAwhl0lmYwwUTTG5eAp5PGKfP7AYvfAaah0I8gfskxziXoGutqxZ4MHMwR3wWJ1LpoNY8uDD2UoAq9WugmW+AeofE6tfwliBDzvfG1M7TDm9wh9GgGtzJHmN0qommwQ= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=vsementsov@virtuozzo.com; From: Vladimir Sementsov-Ogievskiy To: qemu-devel@nongnu.org Subject: [PATCH v10 4/9] pflash: introduce ERRP_AUTO_PROPAGATE Date: Tue, 17 Mar 2020 18:16:20 +0300 Message-ID: <20200317151625.20797-5-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20200317151625.20797-1-vsementsov@virtuozzo.com> References: <20200317151625.20797-1-vsementsov@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM0PR10CA0005.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:208:17c::15) To HE1PR0802MB2507.eurprd08.prod.outlook.com (2603:10a6:3:e1::8) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-Mailer: git-send-email 2.21.0 X-Originating-IP: [185.215.60.248] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 43f7b024-b8cb-4a32-edff-08d7ca863ca5 X-MS-TrafficTypeDiagnostic: HE1PR0802MB2620: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:1060; X-Forefront-PRVS: 0345CFD558 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(4636009)(39850400004)(376002)(136003)(346002)(366004)(396003)(199004)(66946007)(6666004)(1076003)(66556008)(54906003)(66476007)(86362001)(6486002)(16526019)(5660300002)(6916009)(186003)(6506007)(52116002)(4326008)(81166006)(6512007)(81156014)(8676002)(8936002)(316002)(2906002)(26005)(478600001)(956004)(36756003)(2616005); DIR:OUT; SFP:1102; SCL:1; SRVR:HE1PR0802MB2620; H:HE1PR0802MB2507.eurprd08.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: None (protection.outlook.com: virtuozzo.com does not designate permitted sender hosts) X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: nzA1i5VcnBCWQhgWSupf6GPew9O/SZB36dp+pk0r3QIwVgQTu72Cp2J6ENVKQTjc3d8LclQUBd8wF7Zi8pToJC+Kyavq69CYrK8bfJ7ehlLqfqdJ+V1qmlzZbXFXz5nBkBTOFNb4nupc+49mfsAr6wHIiXsVaZiiVm7bTQvFAeEnAQWxlkmE77mZ7ORa05CJkqGH5+fX8h0S7+SfbfNHcRCoOHLpULQWmQLjBaAvbmYPJg6i8oIi7AvRIY7eTKlDIrGXtFmdm+EjAVLwXqKn+mp6x7Qs87Ac2v8Vc7hyXzeS56yfjWjzP4feXQXes0dkr3oY2XbE5kZ11yy5lD11mzBjImjpOww8s1HlkK0XUZn5LPKkGJfiWQHU6ksO8NgC6Z6bDZGlY5ooT7VIFjZSU+MiyWmE3oIge3PD4yD0IMmJHay9WAQUmiTcXspc+Otj X-MS-Exchange-AntiSpam-MessageData: WhOdvjgKABR9MasFU29xcpppQkO3lloO8QETDbqxwnpnU4EkYo+x7InSWlBiF/EiuyiutPtTb5vxVO6+W/w31qMD2yJkFhP8hc17Kmp1oD5nYYDx/llEFup0bob45Qof8PN4l/6C1NB6ETX9sQIP9Q== X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 43f7b024-b8cb-4a32-edff-08d7ca863ca5 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Mar 2020 15:16:59.0988 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 7bc7zw5l6oPlngZ0ir0v5lgQ+5/yFDW4yEGBa0Dt3Yxl1YKPJqBFBsiuIZ3bgdOTAk3zlohHGT0sWcqqdmzmQoXnwMiIaIN78n790egS/8c= X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR0802MB2620 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 2a01:111:f400:fe0d::71f X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Kevin Wolf , vsementsov@virtuozzo.com, qemu-block@nongnu.org, armbru@redhat.com, Max Reitz , Greg Kurz , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Computed bodyhash is different from the expected one) Content-Type: text/plain; charset="utf-8" If we want to add some info to errp (by error_prepend() or error_append_hint()), we must use the ERRP_AUTO_PROPAGATE macro. Otherwise, this info will not be added when errp =3D=3D &error_fatal (the program will exit prior to the error_append_hint() or error_prepend() call). Fix such cases. If we want to check error after errp-function call, we need to introduce local_err and then propagate it to errp. Instead, use ERRP_AUTO_PROPAGATE macro, benefits are: 1. No need of explicit error_propagate call 2. No need of explicit local_err variable: use errp directly 3. ERRP_AUTO_PROPAGATE leaves errp as is if it's not NULL or &error_fatal, this means that we don't break error_abort (we'll abort on error_set, not on error_propagate) This commit is generated by command sed -n '/^Parallel NOR Flash devices$/,/^$/{s/^F: //p}' \ MAINTAINERS | \ xargs git ls-files | grep '\.[hc]$' | \ xargs spatch \ --sp-file scripts/coccinelle/auto-propagated-errp.cocci \ --macro-file scripts/cocci-macro-file.h \ --in-place --no-show-diff --max-width 80 Reported-by: Kevin Wolf Reported-by: Greg Kurz Signed-off-by: Vladimir Sementsov-Ogievskiy Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- hw/block/pflash_cfi01.c | 7 +++---- hw/block/pflash_cfi02.c | 7 +++---- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/hw/block/pflash_cfi01.c b/hw/block/pflash_cfi01.c index 24f3bce7ef..a5755e6119 100644 --- a/hw/block/pflash_cfi01.c +++ b/hw/block/pflash_cfi01.c @@ -700,12 +700,12 @@ static const MemoryRegionOps pflash_cfi01_ops =3D { =20 static void pflash_cfi01_realize(DeviceState *dev, Error **errp) { + ERRP_AUTO_PROPAGATE(); PFlashCFI01 *pfl =3D PFLASH_CFI01(dev); uint64_t total_len; int ret; uint64_t blocks_per_device, sector_len_per_device, device_len; int num_devices; - Error *local_err =3D NULL; =20 if (pfl->sector_len =3D=3D 0) { error_setg(errp, "attribute \"sector-length\" not specified or zer= o."); @@ -739,9 +739,8 @@ static void pflash_cfi01_realize(DeviceState *dev, Erro= r **errp) &pfl->mem, OBJECT(dev), &pflash_cfi01_ops, pfl, - pfl->name, total_len, &local_err); - if (local_err) { - error_propagate(errp, local_err); + pfl->name, total_len, errp); + if (*errp) { return; } =20 diff --git a/hw/block/pflash_cfi02.c b/hw/block/pflash_cfi02.c index 12f18d401a..3da9f56391 100644 --- a/hw/block/pflash_cfi02.c +++ b/hw/block/pflash_cfi02.c @@ -718,9 +718,9 @@ static const MemoryRegionOps pflash_cfi02_ops =3D { =20 static void pflash_cfi02_realize(DeviceState *dev, Error **errp) { + ERRP_AUTO_PROPAGATE(); PFlashCFI02 *pfl =3D PFLASH_CFI02(dev); int ret; - Error *local_err =3D NULL; =20 if (pfl->uniform_sector_len =3D=3D 0 && pfl->sector_len[0] =3D=3D 0) { error_setg(errp, "attribute \"sector-length\" not specified or zer= o."); @@ -786,9 +786,8 @@ static void pflash_cfi02_realize(DeviceState *dev, Erro= r **errp) =20 memory_region_init_rom_device(&pfl->orig_mem, OBJECT(pfl), &pflash_cfi02_ops, pfl, pfl->name, - pfl->chip_len, &local_err); - if (local_err) { - error_propagate(errp, local_err); + pfl->chip_len, errp); + if (*errp) { return; } =20 --=20 2.21.0 From nobody Sat Apr 27 20:24:15 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=fail (BodyHash is different from the expected one); dmarc=fail(p=none dis=none) header.from=virtuozzo.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1584459028630292.26059955836763; Tue, 17 Mar 2020 08:30:28 -0700 (PDT) Received: from localhost ([::1]:34774 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jEEAl-0005hq-7t for importer@patchew.org; Tue, 17 Mar 2020 11:30:27 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:33281) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jEDxo-0002uk-8p for qemu-devel@nongnu.org; Tue, 17 Mar 2020 11:17:05 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1jEDxm-0001s2-N4 for qemu-devel@nongnu.org; Tue, 17 Mar 2020 11:17:04 -0400 Received: from mail-he1eur04on071f.outbound.protection.outlook.com ([2a01:111:f400:fe0d::71f]:1794 helo=EUR04-HE1-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1jEDxl-0001d5-Dr for qemu-devel@nongnu.org; Tue, 17 Mar 2020 11:17:02 -0400 Received: from HE1PR0802MB2507.eurprd08.prod.outlook.com (10.175.35.136) by HE1PR0802MB2620.eurprd08.prod.outlook.com (10.175.36.20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2814.21; Tue, 17 Mar 2020 15:17:00 +0000 Received: from HE1PR0802MB2507.eurprd08.prod.outlook.com ([fe80::4d32:e4e1:5b9f:240f]) by HE1PR0802MB2507.eurprd08.prod.outlook.com ([fe80::4d32:e4e1:5b9f:240f%12]) with mapi id 15.20.2814.021; Tue, 17 Mar 2020 15:17:00 +0000 Received: from localhost.localdomain (185.215.60.248) by AM0PR10CA0005.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:208:17c::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2835.15 via Frontend Transport; Tue, 17 Mar 2020 15:16:59 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=K/sgbF2csToL4EQ/QRD4IpegW9WXHLqxouTsidGXmFOXWdOzk2Y3Y0HwxfOF1GZ6pxMwYJnLjMc2htjbY7aZBdP3/rAVoo//tPYhCzSguMS7jgBwtbvGO8Xu7DQIVOr5dUROxC2mBVwZVbCi5T62LzuZrQDc/gT90zor0c8kOPPlLKKT92XupGS2mfP8v4Dg9JjfXBzXUEXmz5iHY7WDxinhKfZ7g+ahU2kNzCXrRxW3pr8TiAKJ2/AJgQNItQLChyZi128aYwzWQpAuF6ULkCtz+ifXehvTzqPTfwr5Uj9n8kvxm8Z2UpCh5VtYfIOGiGq9Rbchy+vwPXp26L8PBw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=iZ5KSBMMchwQplb7Nasj1nIDPDK99nh5LVhMiQmxtcU=; b=BpFk3VrC6azPDKtgqe1EOVnz0IZUHyBs82fD5JLO1vTTouF2q1yf4owgQ21Pr+vMmelrvrA3NfpsiJaWCy3ASXjXMXTo1EXWMGEHpot8lPNmbZ6jaKsWXP71CoPUkqJjKWvHkBek96beU+QhNKU7tKIRnuGMjSOon2ft7/5lWoZ6Uz9mwYnOvdYrb0q5l6e6948rLgAEEE6WM2P18y6sX03vKFUzBgncz/2JFJI26GuRoml1Qtm5ZgGjTTcJ6k+7xJMw/vg6+JfQ3TdfRYXUQAIReKN6GM1T5sjaDz2hLHEc71MNA4cZXCcZ6Dj+PUsYFZwvJaSBR5eZ3gF2yHkTtQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=iZ5KSBMMchwQplb7Nasj1nIDPDK99nh5LVhMiQmxtcU=; b=CdhqX/r7iH0J0AjmGpnPkEh1xrjHYRDcLQQe3/j9E/WId3YCgT0iWUCgPcE8cijWUXbjLbzm5S+moWQ2/PX0PUtZ7pLcWKyR3OqLxxNzh0iwTjZnAxHMjiuyuW0j38w0NP8pWKSG6PbHOl+kvkezN8MehYzUYdHOkmuF/XrOcvE= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=vsementsov@virtuozzo.com; From: Vladimir Sementsov-Ogievskiy To: qemu-devel@nongnu.org Subject: [PATCH v10 5/9] fw_cfg: introduce ERRP_AUTO_PROPAGATE Date: Tue, 17 Mar 2020 18:16:21 +0300 Message-ID: <20200317151625.20797-6-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20200317151625.20797-1-vsementsov@virtuozzo.com> References: <20200317151625.20797-1-vsementsov@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM0PR10CA0005.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:208:17c::15) To HE1PR0802MB2507.eurprd08.prod.outlook.com (2603:10a6:3:e1::8) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-Mailer: git-send-email 2.21.0 X-Originating-IP: [185.215.60.248] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: b402085f-ac58-4a18-5fb7-08d7ca863d6a X-MS-TrafficTypeDiagnostic: HE1PR0802MB2620: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:156; X-Forefront-PRVS: 0345CFD558 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(4636009)(39850400004)(376002)(136003)(346002)(366004)(396003)(199004)(66946007)(6666004)(1076003)(66556008)(54906003)(66476007)(86362001)(6486002)(16526019)(5660300002)(6916009)(186003)(6506007)(52116002)(4326008)(81166006)(6512007)(81156014)(8676002)(8936002)(316002)(2906002)(26005)(478600001)(956004)(36756003)(2616005); DIR:OUT; SFP:1102; SCL:1; SRVR:HE1PR0802MB2620; H:HE1PR0802MB2507.eurprd08.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: None (protection.outlook.com: virtuozzo.com does not designate permitted sender hosts) X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: uZ0171N2+WSzo0vQJ6058PXCLl2WCUSbQmz2Gz3HBZEYy1KIRQXZq5cWyHpmHXhb164vlhiidZGSCQmYHVKvAhXFanxZLt70KZIjDD5qri0x75iDronxla7ogCyeOjUM5+CA1IRULhGtnVbOL8MSaZVr7bjBThdZItM87MhvV19dgMdsZvG/KBjfrXxOddnPZ+vbuKZ0m6Pdo2XhCuCJQBYPd+9qKPqSSrML1WsJ8zatWNDMrhh/W4rMOX9T2bB5jDvtqfhytP3+XgE838JX5MpUZ086f9UmhgT4imnIHjfPMQBPTgOgQHGSmRoozItG1Je1pk3Z7IHZoTbToTl9cXv4BM81+eHbrtp45UOQwRDWz9/UG+yPrNqv6mOfwQatwdzvwtuwFprKxn48B/aipCEzTeJtsJ19olQFGUZVvB1qTRcMirOXHpBp+7MZz5b7 X-MS-Exchange-AntiSpam-MessageData: QzSOlQUZX1n2S8dbgMu+lV4/IUDTBP+5SQIRHrVAt5Ma3PZqVJhefcqxDeFYmYOWvZ7YIiq7ohDWL7XV9LEdT0A9KnfNcHAl1jj5CmFkfqCxUu2QzCoOENECtMOtMuxQFHDBQfya+43QICCVLhssDQ== X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: b402085f-ac58-4a18-5fb7-08d7ca863d6a X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Mar 2020 15:17:00.4003 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: r/+IOxlnGqtOPUwg28pVN6mLYkF7B5eYOTFUBtFAA29EHFqFxZrvuNdLDUv5cbUkrD3X+aMO2OQzgBpOB9VqynlEIb2SgxU56S/lzxwn2PM= X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR0802MB2620 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 2a01:111:f400:fe0d::71f X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Kevin Wolf , vsementsov@virtuozzo.com, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , armbru@redhat.com, Greg Kurz , Gerd Hoffmann , Laszlo Ersek Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Computed bodyhash is different from the expected one) Content-Type: text/plain; charset="utf-8" If we want to add some info to errp (by error_prepend() or error_append_hint()), we must use the ERRP_AUTO_PROPAGATE macro. Otherwise, this info will not be added when errp =3D=3D &error_fatal (the program will exit prior to the error_append_hint() or error_prepend() call). Fix such cases. If we want to check error after errp-function call, we need to introduce local_err and then propagate it to errp. Instead, use ERRP_AUTO_PROPAGATE macro, benefits are: 1. No need of explicit error_propagate call 2. No need of explicit local_err variable: use errp directly 3. ERRP_AUTO_PROPAGATE leaves errp as is if it's not NULL or &error_fatal, this means that we don't break error_abort (we'll abort on error_set, not on error_propagate) This commit is generated by command sed -n '/^Firmware configuration (fw_cfg)$/,/^$/{s/^F: //p}' \ MAINTAINERS | \ xargs git ls-files | grep '\.[hc]$' | \ xargs spatch \ --sp-file scripts/coccinelle/auto-propagated-errp.cocci \ --macro-file scripts/cocci-macro-file.h \ --in-place --no-show-diff --max-width 80 Reported-by: Kevin Wolf Reported-by: Greg Kurz Signed-off-by: Vladimir Sementsov-Ogievskiy Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- hw/nvram/fw_cfg.c | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/hw/nvram/fw_cfg.c b/hw/nvram/fw_cfg.c index 179b302f01..22ff2be0c0 100644 --- a/hw/nvram/fw_cfg.c +++ b/hw/nvram/fw_cfg.c @@ -1142,12 +1142,11 @@ static Property fw_cfg_io_properties[] =3D { =20 static void fw_cfg_io_realize(DeviceState *dev, Error **errp) { + ERRP_AUTO_PROPAGATE(); FWCfgIoState *s =3D FW_CFG_IO(dev); - Error *local_err =3D NULL; =20 - fw_cfg_file_slots_allocate(FW_CFG(s), &local_err); - if (local_err) { - error_propagate(errp, local_err); + fw_cfg_file_slots_allocate(FW_CFG(s), errp); + if (*errp) { return; } =20 @@ -1193,14 +1192,13 @@ static Property fw_cfg_mem_properties[] =3D { =20 static void fw_cfg_mem_realize(DeviceState *dev, Error **errp) { + ERRP_AUTO_PROPAGATE(); FWCfgMemState *s =3D FW_CFG_MEM(dev); SysBusDevice *sbd =3D SYS_BUS_DEVICE(dev); const MemoryRegionOps *data_ops =3D &fw_cfg_data_mem_ops; - Error *local_err =3D NULL; =20 - fw_cfg_file_slots_allocate(FW_CFG(s), &local_err); - if (local_err) { - error_propagate(errp, local_err); + fw_cfg_file_slots_allocate(FW_CFG(s), errp); + if (*errp) { return; } =20 --=20 2.21.0 From nobody Sat Apr 27 20:24:15 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=fail (BodyHash is different from the expected one); dmarc=fail(p=none dis=none) header.from=virtuozzo.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1584459229633261.5392772172453; Tue, 17 Mar 2020 08:33:49 -0700 (PDT) Received: from localhost ([::1]:34862 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jEEE0-0001V4-Gy for importer@patchew.org; Tue, 17 Mar 2020 11:33:48 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:33335) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jEDxp-0002xi-TO for qemu-devel@nongnu.org; Tue, 17 Mar 2020 11:17:07 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1jEDxo-000201-8P for qemu-devel@nongnu.org; Tue, 17 Mar 2020 11:17:05 -0400 Received: from mail-he1eur04on071f.outbound.protection.outlook.com ([2a01:111:f400:fe0d::71f]:1794 helo=EUR04-HE1-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1jEDxn-0001d5-Tf for qemu-devel@nongnu.org; Tue, 17 Mar 2020 11:17:04 -0400 Received: from HE1PR0802MB2507.eurprd08.prod.outlook.com (10.175.35.136) by HE1PR0802MB2620.eurprd08.prod.outlook.com (10.175.36.20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2814.21; Tue, 17 Mar 2020 15:17:01 +0000 Received: from HE1PR0802MB2507.eurprd08.prod.outlook.com ([fe80::4d32:e4e1:5b9f:240f]) by HE1PR0802MB2507.eurprd08.prod.outlook.com ([fe80::4d32:e4e1:5b9f:240f%12]) with mapi id 15.20.2814.021; Tue, 17 Mar 2020 15:17:01 +0000 Received: from localhost.localdomain (185.215.60.248) by AM0PR10CA0005.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:208:17c::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2835.15 via Frontend Transport; Tue, 17 Mar 2020 15:17:00 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ds7VH+MOrsU463V5zMQBbo6UFgFCYHBr82LFeqCDrfDOcxEHH3LJqLbwDQ8ULaPpfDr89ojjRv9zqSaC2tZnKa4MdcAJ1+oxDrEWCSfG80D4q45luY/bZgH4fiCqt/prhqjSnp+8V920L2Yvl0fxIcEdfGaQLo0okJ4SEnbqu8eGB5UdpLHMXddCGfV+JhyaG24UmpSp4oYrLZ3pYjeRgwV4MAi5H2jcHklERLnKSLO2u+IDosJ965aiyfabeAbxSCuVBiR3XKF6HWNK5NlPipohFrkGemei/uKY3LqG7bOi61BzR5fwi3VNUXcMB9kyzwoS5hBlJft6HLoBtR74Mw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=tmefC/lvr09AIhgGCB50fZJW6BwAZK3vMfeQYk4zbJc=; b=LtL79ac02SCk2iU3sSbiznEN2C2mtn3NPsPJsE71o000nQP0JDrTHsnLd/OU5gH2xYIX+ElbzTl8N+jl3Usc+r72pXZ+nNCfJzh9D6PgL2Kghhf2+ypw9UNHZRU8AeX3Jtp7Ldx2mrGgFW+gsUDQOc1FvUK35hpP6QlW5Nh5PsmDKqhd9qRsjW3LuH9TqKRSWs2J/OPy608LqsbMN1BSiG07uGMl18oh5MD97qUhrzJAhNT9CWL6Q8nXC3sp4yZ2Nmg4WDFmqE0cuvokACriw8wBPNFfoVpTdypIMUXHtuKP2FrtAXGzYcrNI9BvnsDRDvd/GJzIw0k9aIk2vhaX1Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=tmefC/lvr09AIhgGCB50fZJW6BwAZK3vMfeQYk4zbJc=; b=FqkKUubRW1G910v9h8NtANUZ7cnWoNgcoYkNB3Dm4NABbTk8YdAPEW13DKu2LSaiq7lSIDpe/T7G8KqlJTRuC5s+wIV1GRLl6nKAp6iHyf1JfSHegYTO6KYREBuiZUJXI8Qcfi0HZGD/dpi/RahxvvZ0b++W3SmTBe8sJ83gAT0= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=vsementsov@virtuozzo.com; From: Vladimir Sementsov-Ogievskiy To: qemu-devel@nongnu.org Subject: [PATCH v10 6/9] virtio-9p: introduce ERRP_AUTO_PROPAGATE Date: Tue, 17 Mar 2020 18:16:22 +0300 Message-ID: <20200317151625.20797-7-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20200317151625.20797-1-vsementsov@virtuozzo.com> References: <20200317151625.20797-1-vsementsov@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM0PR10CA0005.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:208:17c::15) To HE1PR0802MB2507.eurprd08.prod.outlook.com (2603:10a6:3:e1::8) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-Mailer: git-send-email 2.21.0 X-Originating-IP: [185.215.60.248] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: aa60b06c-fc19-4d2d-c943-08d7ca863e20 X-MS-TrafficTypeDiagnostic: HE1PR0802MB2620: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:121; X-Forefront-PRVS: 0345CFD558 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(4636009)(39850400004)(376002)(136003)(346002)(366004)(396003)(199004)(66946007)(6666004)(1076003)(66556008)(54906003)(66476007)(86362001)(6486002)(16526019)(5660300002)(6916009)(186003)(69590400007)(6506007)(52116002)(4326008)(81166006)(6512007)(81156014)(8676002)(8936002)(316002)(2906002)(26005)(478600001)(956004)(36756003)(2616005); DIR:OUT; SFP:1102; SCL:1; SRVR:HE1PR0802MB2620; H:HE1PR0802MB2507.eurprd08.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: None (protection.outlook.com: virtuozzo.com does not designate permitted sender hosts) X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: S9LwLetGlPcyMaNizIT9eVN3qXuY6W99efhOm41AXtS9lnMwsMi32ffQrqtoWXEsHHx567SVYvp2ootvEOfTjQ6XU8ZDPrRqby/SK4/gwNebBffRzo+3AVAosJV0aJ5vuGw2rMAeGA0fPMCgyVEREeOGHIVF1x72dVUZUKaNpG63mr3cHPR5gPQOeXHSnMSK+3V+jxf/fg4M1oGLnmtCK2XBCeyakQSwnrLMu9ldkeU4dHLIWQ/UnAth54okwf9kGlMDXboZ9qC19C6EmIhm6GJ681BCQYeQ63mbcKzdnsDo3AxGC4QeqDXmQ3fxOIMHw8CG8hstcF5rRuXFk3wKsiNAfvxubboqZXfFKkxrTEE2GI1lKquLub0WniAtCOwE3PaEyzfbnho5RE+kK3BaP8Rv/5bzdzHPJXAq50Io6a0adDOkwah+BSHgF1xDs2lrdV6CJvrwadrDQqxEgtObY7GLaocfpqxYkKHLsvBF7mcPra57j25Q5LgTuppcIcpM X-MS-Exchange-AntiSpam-MessageData: Q6TBNhod/sajA+blf8/vJBU9fpTsJvEArtkZVQCTympaIrcGAhW6g+aJQ5JPnZZk/iplUP3fC7bYRBU9cyxiSmazACSyiu5TGmLE655F3dLck5k/NCpnGSl14riZoOL+g4lQTU7kCaUg4rN/BYO5Jw== X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: aa60b06c-fc19-4d2d-c943-08d7ca863e20 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Mar 2020 15:17:01.5497 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: OfajoGfi113be1Xhe8lZWSNk2ru5VKhBMuihfHztMfCFu9WxLaTDUZG3G4CklzESGLR1tC/jOc4K+ZtgpAmlrr9cgr8QR5Lr4nxwsIYvATc= X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR0802MB2620 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 2a01:111:f400:fe0d::71f X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Kevin Wolf , vsementsov@virtuozzo.com, Christian Schoenebeck , armbru@redhat.com, Greg Kurz Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Computed bodyhash is different from the expected one) Content-Type: text/plain; charset="utf-8" If we want to add some info to errp (by error_prepend() or error_append_hint()), we must use the ERRP_AUTO_PROPAGATE macro. Otherwise, this info will not be added when errp =3D=3D &error_fatal (the program will exit prior to the error_append_hint() or error_prepend() call). Fix such cases. If we want to check error after errp-function call, we need to introduce local_err and then propagate it to errp. Instead, use ERRP_AUTO_PROPAGATE macro, benefits are: 1. No need of explicit error_propagate call 2. No need of explicit local_err variable: use errp directly 3. ERRP_AUTO_PROPAGATE leaves errp as is if it's not NULL or &error_fatal, this means that we don't break error_abort (we'll abort on error_set, not on error_propagate) This commit is generated by command sed -n '/^virtio-9p$/,/^$/{s/^F: //p}' MAINTAINERS | \ xargs git ls-files | grep '\.[hc]$' | \ xargs spatch \ --sp-file scripts/coccinelle/auto-propagated-errp.cocci \ --macro-file scripts/cocci-macro-file.h \ --in-place --no-show-diff --max-width 80 Reported-by: Kevin Wolf Reported-by: Greg Kurz Signed-off-by: Vladimir Sementsov-Ogievskiy Acked-by: Greg Kurz Reviewed-by: Christian Schoenebeck --- hw/9pfs/9p-local.c | 12 +++++------- hw/9pfs/9p.c | 1 + 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/hw/9pfs/9p-local.c b/hw/9pfs/9p-local.c index 54e012e5b4..0361e0c0b4 100644 --- a/hw/9pfs/9p-local.c +++ b/hw/9pfs/9p-local.c @@ -1479,10 +1479,10 @@ static void error_append_security_model_hint(Error = *const *errp) =20 static int local_parse_opts(QemuOpts *opts, FsDriverEntry *fse, Error **er= rp) { + ERRP_AUTO_PROPAGATE(); const char *sec_model =3D qemu_opt_get(opts, "security_model"); const char *path =3D qemu_opt_get(opts, "path"); const char *multidevs =3D qemu_opt_get(opts, "multidevs"); - Error *local_err =3D NULL; =20 if (!sec_model) { error_setg(errp, "security_model property not set"); @@ -1516,11 +1516,10 @@ static int local_parse_opts(QemuOpts *opts, FsDrive= rEntry *fse, Error **errp) fse->export_flags &=3D ~V9FS_FORBID_MULTIDEVS; fse->export_flags &=3D ~V9FS_REMAP_INODES; } else { - error_setg(&local_err, "invalid multidevs property '%s'", + error_setg(errp, "invalid multidevs property '%s'", multidevs); - error_append_hint(&local_err, "Valid options are: multidevs=3D" + error_append_hint(errp, "Valid options are: multidevs=3D" "[remap|forbid|warn]\n"); - error_propagate(errp, local_err); return -1; } } @@ -1530,9 +1529,8 @@ static int local_parse_opts(QemuOpts *opts, FsDriverE= ntry *fse, Error **errp) return -1; } =20 - if (fsdev_throttle_parse_opts(opts, &fse->fst, &local_err)) { - error_propagate_prepend(errp, local_err, - "invalid throttle configuration: "); + if (fsdev_throttle_parse_opts(opts, &fse->fst, errp)) { + error_prepend(errp, "invalid throttle configuration: "); return -1; } =20 diff --git a/hw/9pfs/9p.c b/hw/9pfs/9p.c index 9e046f7acb..3aa6a57f3a 100644 --- a/hw/9pfs/9p.c +++ b/hw/9pfs/9p.c @@ -4023,6 +4023,7 @@ void pdu_submit(V9fsPDU *pdu, P9MsgHeader *hdr) int v9fs_device_realize_common(V9fsState *s, const V9fsTransport *t, Error **errp) { + ERRP_AUTO_PROPAGATE(); int i, len; struct stat stat; FsDriverEntry *fse; --=20 2.21.0 From nobody Sat Apr 27 20:24:15 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=fail (BodyHash is different from the expected one); dmarc=fail(p=none dis=none) header.from=virtuozzo.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1584459407610351.55030032637615; Tue, 17 Mar 2020 08:36:47 -0700 (PDT) Received: from localhost ([::1]:34904 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jEEGs-0005rx-HN for importer@patchew.org; Tue, 17 Mar 2020 11:36:46 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:33439) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jEDxu-00038A-9v for qemu-devel@nongnu.org; Tue, 17 Mar 2020 11:17:11 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1jEDxo-00023R-Oy for qemu-devel@nongnu.org; Tue, 17 Mar 2020 11:17:10 -0400 Received: from mail-he1eur04on071f.outbound.protection.outlook.com ([2a01:111:f400:fe0d::71f]:1794 helo=EUR04-HE1-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1jEDxo-0001d5-Dq for qemu-devel@nongnu.org; Tue, 17 Mar 2020 11:17:04 -0400 Received: from HE1PR0802MB2507.eurprd08.prod.outlook.com (10.175.35.136) by HE1PR0802MB2620.eurprd08.prod.outlook.com (10.175.36.20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2814.21; Tue, 17 Mar 2020 15:17:02 +0000 Received: from HE1PR0802MB2507.eurprd08.prod.outlook.com ([fe80::4d32:e4e1:5b9f:240f]) by HE1PR0802MB2507.eurprd08.prod.outlook.com ([fe80::4d32:e4e1:5b9f:240f%12]) with mapi id 15.20.2814.021; Tue, 17 Mar 2020 15:17:02 +0000 Received: from localhost.localdomain (185.215.60.248) by AM0PR10CA0005.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:208:17c::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2835.15 via Frontend Transport; Tue, 17 Mar 2020 15:17:01 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=CD0TP3T5jqc1ITfaNiKNTAF+pyYxYIlu+j5OQAq8FAFiAVOboLtu6FDQgRh+xelxF9TAn93xkFIHzTAVstytheSCP2QMW7UziMO2FDjm6atPpbnFFPdxJMb6wouYjm0SS7nbxJm2y1qi9QQoAzpPkcDsHys8XEZbPHieLaJYC8IEk/qjfig/Dm0p5rj8QZhI/PTKQECvT6gKnLQ5rwhM2J0UAGRV7CVGC0Dies6DJHXwQpagGDTTsD8Hq5TLt55ssrXjQt/Tt6JzX5VhpgwYBFK561GRXmMVrnH/Cz4Bs85arVU8i/uPS6dM6MyCBfVR2LA8vkF4vEMsTLKIJ+5NxA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=si6nQkmUdczLedju7B7iVXPgkItV2yXZa7yvcN13kXM=; b=Seajqej1WOCVJtmMRHtLcqNLqGREqUOmxuTtvM+tK3dWZbJvtPfpQ5EYrr/Ygzv38pVDG5hVg7/43+TYqTICCJOt9k9tpcvg8sfd3TZgTeMv67vBMObwYpuLh/YJ8z4HJblV8s9qUx7uFGdyv3jaMnPmZb61UOAJLB4rpnyGYIkaAqkRUj4UbfTWf8t4W7XdlbGnrR6cM1gdcC7HAWdaH0AzOnAJPAycGxTD2hoa2+IvL4Luf6qLtpO2sbt5so/K66OkbLH9F7JNDX2AexJHxBdKlN+OSW7hj77KgBe1L3on9GDFxjNy/in0tsXfue7rfAgVN6xNtXVUhHDz/1Cw2w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=si6nQkmUdczLedju7B7iVXPgkItV2yXZa7yvcN13kXM=; b=rKfTsqqjCBpJ8+ZWpV//hMHs1oh4cZ9kagPM0CB/hrvVvG2lHGAwz0wE8xCwQbhYYF9NSRJ9jZs4CCm2EnkvsjTdFc9JHSHkz5Wv+1vRp52UN8mkuU498EvK6elHXYTS2Zywto+gef9SA7zyiW2AZWIxR1thvOEutgsfuEtlPYE= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=vsementsov@virtuozzo.com; From: Vladimir Sementsov-Ogievskiy To: qemu-devel@nongnu.org Subject: [PATCH v10 7/9] TPM: introduce ERRP_AUTO_PROPAGATE Date: Tue, 17 Mar 2020 18:16:23 +0300 Message-ID: <20200317151625.20797-8-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20200317151625.20797-1-vsementsov@virtuozzo.com> References: <20200317151625.20797-1-vsementsov@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM0PR10CA0005.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:208:17c::15) To HE1PR0802MB2507.eurprd08.prod.outlook.com (2603:10a6:3:e1::8) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-Mailer: git-send-email 2.21.0 X-Originating-IP: [185.215.60.248] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: c46bcee2-6943-4da8-32d5-08d7ca863ed7 X-MS-TrafficTypeDiagnostic: HE1PR0802MB2620: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:121; X-Forefront-PRVS: 0345CFD558 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(4636009)(39850400004)(376002)(136003)(346002)(366004)(396003)(199004)(66946007)(6666004)(1076003)(66556008)(54906003)(66476007)(86362001)(6486002)(16526019)(5660300002)(6916009)(186003)(69590400007)(6506007)(52116002)(4326008)(81166006)(6512007)(81156014)(8676002)(8936002)(316002)(2906002)(26005)(478600001)(956004)(36756003)(2616005); DIR:OUT; SFP:1102; SCL:1; SRVR:HE1PR0802MB2620; H:HE1PR0802MB2507.eurprd08.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: None (protection.outlook.com: virtuozzo.com does not designate permitted sender hosts) X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: WJSdgNHKWnv37npGzJJYr/u+Wbt2l67R8OiXRbPHFiIQlLEZdEfNpqJtU8JdMJalvYh+IAJzxNP1JjGcIi1zaCYMqYSC7uoMmYssidmdRO+QGxfB4A04KQQ2MQ/ulG9me0+9yKsCog2cw3IaATyse4EE9ji3QPmz57iXzRKXH2rUtkLrSESPgxLDYvrnv7jGTscZ+PsLA+3RaVSezJRk+T2c9OGaAh00SN5vpsd9TfCqzlbKRzcqFONj71r1W76+FEDaDvtIULPUmd5/Fum+1N/ZltNfJhNAs06mZ80f/7/GOdEvNPLCR8mUowEPfFTeZZL6H/CREcGOThM+GWPIyW8+2Uisi1UmLeaUvJWaSBxrLFNi3urJgHmGVGYL9Wq4GsGx0Ih9vI6h1khUCxqkzDXK+FQDj+6kz1RqUOz64Y6MXrtLdSmjghJG82RlhFRh/a/PCVV4UekIKgSQuwSLDOCE8UiuzJ0qa4m4gc71it+3A4zj2Nc63OpkKjDM99tK X-MS-Exchange-AntiSpam-MessageData: AG88XCCbiRGTphLGaH8GqK+0EMmL0hLgm1p036gSd5ZgNQABqsgZiw+hO8gsMGap3UH20R0gD4hAnG6Ka+bXk+uaQ92IN+QhqwYEVgtZ61+2Ll4O0cBhrZC7YzdN0tm+cnaSMJczlLIl5Qqzgo2lbA== X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: c46bcee2-6943-4da8-32d5-08d7ca863ed7 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Mar 2020 15:17:02.7402 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: NxpZSBKNp4ZnoxtYSlPKNLYekI0EX6AS1VWk3m7AwWXAWOP7No/TtBS+9bt/15lxTFQIap11pX/RAPmGZ1j3wWXNEBTTdtO163mktniJF0M= X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR0802MB2620 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 2a01:111:f400:fe0d::71f X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Kevin Wolf , Stefan Berger , vsementsov@virtuozzo.com, armbru@redhat.com, Greg Kurz Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Computed bodyhash is different from the expected one) Content-Type: text/plain; charset="utf-8" If we want to add some info to errp (by error_prepend() or error_append_hint()), we must use the ERRP_AUTO_PROPAGATE macro. Otherwise, this info will not be added when errp =3D=3D &error_fatal (the program will exit prior to the error_append_hint() or error_prepend() call). Fix such cases. If we want to check error after errp-function call, we need to introduce local_err and then propagate it to errp. Instead, use ERRP_AUTO_PROPAGATE macro, benefits are: 1. No need of explicit error_propagate call 2. No need of explicit local_err variable: use errp directly 3. ERRP_AUTO_PROPAGATE leaves errp as is if it's not NULL or &error_fatal, this means that we don't break error_abort (we'll abort on error_set, not on error_propagate) This commit is generated by command sed -n '/^TPM$/,/^$/{s/^F: //p}' MAINTAINERS | \ xargs git ls-files | grep '\.[hc]$' | \ xargs spatch \ --sp-file scripts/coccinelle/auto-propagated-errp.cocci \ --macro-file scripts/cocci-macro-file.h \ --in-place --no-show-diff --max-width 80 Reported-by: Kevin Wolf Reported-by: Greg Kurz Signed-off-by: Vladimir Sementsov-Ogievskiy Reviewed-by: Stefan Berger --- hw/tpm/tpm_util.c | 7 +++---- tpm.c | 7 +++---- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/hw/tpm/tpm_util.c b/hw/tpm/tpm_util.c index c0a0f3d71f..66e0e0c7f3 100644 --- a/hw/tpm/tpm_util.c +++ b/hw/tpm/tpm_util.c @@ -47,8 +47,8 @@ static void get_tpm(Object *obj, Visitor *v, const char *= name, void *opaque, static void set_tpm(Object *obj, Visitor *v, const char *name, void *opaqu= e, Error **errp) { + ERRP_AUTO_PROPAGATE(); DeviceState *dev =3D DEVICE(obj); - Error *local_err =3D NULL; Property *prop =3D opaque; TPMBackend *s, **be =3D qdev_get_prop_ptr(dev, prop); char *str; @@ -58,9 +58,8 @@ static void set_tpm(Object *obj, Visitor *v, const char *= name, void *opaque, return; } =20 - visit_type_str(v, name, &str, &local_err); - if (local_err) { - error_propagate(errp, local_err); + visit_type_str(v, name, &str, errp); + if (*errp) { return; } =20 diff --git a/tpm.c b/tpm.c index 9c9e20bbb7..359ebb7f68 100644 --- a/tpm.c +++ b/tpm.c @@ -81,11 +81,11 @@ TPMBackend *qemu_find_tpm_be(const char *id) =20 static int tpm_init_tpmdev(void *dummy, QemuOpts *opts, Error **errp) { + ERRP_AUTO_PROPAGATE(); const char *value; const char *id; const TPMBackendClass *be; TPMBackend *drv; - Error *local_err =3D NULL; int i; =20 if (!QLIST_EMPTY(&tpm_backends)) { @@ -116,9 +116,8 @@ static int tpm_init_tpmdev(void *dummy, QemuOpts *opts,= Error **errp) } =20 /* validate backend specific opts */ - qemu_opts_validate(opts, be->opts, &local_err); - if (local_err) { - error_propagate(errp, local_err); + qemu_opts_validate(opts, be->opts, errp); + if (*errp) { return 1; } =20 --=20 2.21.0 From nobody Sat Apr 27 20:24:15 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=fail (BodyHash is different from the expected one); dmarc=fail(p=none dis=none) header.from=virtuozzo.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1584459374800518.554812569211; Tue, 17 Mar 2020 08:36:14 -0700 (PDT) Received: from localhost ([::1]:34894 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jEEGL-0004lQ-HV for importer@patchew.org; Tue, 17 Mar 2020 11:36:13 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:33385) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jEDxr-00031M-IR for qemu-devel@nongnu.org; Tue, 17 Mar 2020 11:17:09 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1jEDxp-00026b-9w for qemu-devel@nongnu.org; Tue, 17 Mar 2020 11:17:07 -0400 Received: from mail-he1eur04on071f.outbound.protection.outlook.com ([2a01:111:f400:fe0d::71f]:1794 helo=EUR04-HE1-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1jEDxo-0001d5-W2; Tue, 17 Mar 2020 11:17:05 -0400 Received: from HE1PR0802MB2507.eurprd08.prod.outlook.com (10.175.35.136) by HE1PR0802MB2620.eurprd08.prod.outlook.com (10.175.36.20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2814.21; Tue, 17 Mar 2020 15:17:04 +0000 Received: from HE1PR0802MB2507.eurprd08.prod.outlook.com ([fe80::4d32:e4e1:5b9f:240f]) by HE1PR0802MB2507.eurprd08.prod.outlook.com ([fe80::4d32:e4e1:5b9f:240f%12]) with mapi id 15.20.2814.021; Tue, 17 Mar 2020 15:17:04 +0000 Received: from localhost.localdomain (185.215.60.248) by AM0PR10CA0005.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:208:17c::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2835.15 via Frontend Transport; Tue, 17 Mar 2020 15:17:03 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=P0ZcAaXrXGmMovhF7rw/HK/NbPgSFaajvYMlK+ZepegGmLa67yIFzyKnig6eU5HVjIvZySkjYeKdGRrJQmcxWJJM6mmfvEWvcwwPpd/qZe3kjfr0HAeMVJ+qkAu872beqcBDFvb2W33lgj8VgNhxGEbZDQUEcbiQWLkJz53UySW1lKRUCliipdRm5WC9yhAqwpNAJgwN3BxIDuvDnGcfwrrXYQL80tdahwfjA7wdVwQovJwS3Y47/PHQlEkyLeeHVJFJGAIEjUr95BMET8deFaynss+vlGnC/3TxHmPNJFD1J8ec13CUZI9GKg92svFpXJg9SYCQaVenYFjTGtWOmw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=e7uKuyhOaN/R2LP3MIYa/l3K/LuWZKfyTBTfXvt6ofs=; b=n8yqpw0U07opdHNmo44eWEiURhtKw84l84FcD10lnnn7okoOCnZSF/Me+wfM51RqQoLeh++S3BxcC6DbGl7yWXpbpWQVGl9iO6FheSYEUnnTQgGHgW3MLDuv9RY9SOYfrh+GHfIhQNNjVe0OBi3b4kSQBMNkOITNgMJjVBP6BzXALYGtU8uKDVTlYGgYwNC67LUpHkKZ2oG+iz4sHNDdaObxNax1QmxO0cBWjjnqO79Drcm5Pv0hci5NiRrxmGQMs6ikWDgSJUUGvFp8h17/nK33ihCFo9Sda/iZFHVhgej0hZM4D8Wrx9/0qXEKzP2R+78W91Vc6ZwxnyHjwZfu3Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=e7uKuyhOaN/R2LP3MIYa/l3K/LuWZKfyTBTfXvt6ofs=; b=HhOwkesuPK9bGgy02+t69wII3NRZRT6vjYCXZrSVUNj0jcGb8Hd7C4ougpakTknyQfeZUT+y4hIkkAKEHLvoqG1WqGWGQvwnBia8bcsSfEHtEV/LROki9NNg7XwzpcWzK/jNEQr7teSaCgmyMX+I+V3LCaCXUMrlpMUdKoEJzRQ= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=vsementsov@virtuozzo.com; From: Vladimir Sementsov-Ogievskiy To: qemu-devel@nongnu.org Subject: [PATCH v10 8/9] nbd: introduce ERRP_AUTO_PROPAGATE Date: Tue, 17 Mar 2020 18:16:24 +0300 Message-ID: <20200317151625.20797-9-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20200317151625.20797-1-vsementsov@virtuozzo.com> References: <20200317151625.20797-1-vsementsov@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM0PR10CA0005.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:208:17c::15) To HE1PR0802MB2507.eurprd08.prod.outlook.com (2603:10a6:3:e1::8) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-Mailer: git-send-email 2.21.0 X-Originating-IP: [185.215.60.248] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 9e130296-abd6-4113-74fc-08d7ca863f96 X-MS-TrafficTypeDiagnostic: HE1PR0802MB2620: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:162; X-Forefront-PRVS: 0345CFD558 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(4636009)(39850400004)(376002)(136003)(346002)(366004)(396003)(199004)(66946007)(6666004)(1076003)(66556008)(54906003)(66476007)(86362001)(6486002)(16526019)(5660300002)(6916009)(186003)(69590400007)(6506007)(52116002)(4326008)(81166006)(6512007)(81156014)(8676002)(8936002)(316002)(2906002)(26005)(478600001)(956004)(36756003)(2616005); DIR:OUT; SFP:1102; SCL:1; SRVR:HE1PR0802MB2620; H:HE1PR0802MB2507.eurprd08.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: None (protection.outlook.com: virtuozzo.com does not designate permitted sender hosts) X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: YOp3IvYIPeBC3VXovrATsOylD6EL3sBr19SKIuTis5mV2AP+nB8p64SUc2oJPTRlbF+rZDCR0WOaItKgfPFahQ2KZfllxRJDzD7UwweRkeLj8sjXja1MsetLMVsKSdHoF0WAYteM992a08CjIHlFggo6B/aI5c9nYYx49P0wtTSciCQiwKnCHgQGykA64OPzhgq2VzSea2bqh6L/wXBIgzhnhJJDJxMQRvilyyal7uCoPDCRDHqOykDPP2/+e8Zv08X8JWo+CEW871Uaw5zMGDrMT+s3DI/nLBasm6gWCYXdHPTjZd4wWTSGo4vL4Z/lPWd5qvoED41qRtQE36U8JCoNVesKvV70FxHv9w/+mM5JhuUglnMgiqdhMNuO4/gRzJ/ASuM2QvYlMvKMSrsbJApm59oyK621gF+bM7VYDtGL9tNlgf1Nl5yVeM7igfcWu3B4UGIHBEGs6IhW/usp+p25plOYAqEPRVonJJMStCTaLOzVS+YH6DwrRZLOV8D0 X-MS-Exchange-AntiSpam-MessageData: t0KoMwRoljyQVQ771eSFaCxggFM8dM2zlXz87xzpioT4G3mQphIFFvVO1GZn8Dv1rWQmnoww+bQaJk+sR4Ydp8TIrYBBCYTj6fId2aSrlQCzjDGGeEJMqcor8nRjiwpa4pqm2CfhkhIBGDQ+79ZDEA== X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9e130296-abd6-4113-74fc-08d7ca863f96 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Mar 2020 15:17:03.9906 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: IHP6MddRN9gQfXGnZFcMAEQ7uHYY1PsJFJHgczelq6EIqf/6mqWWVjWKCsQaJ7sIVkjP9DkrzKmup9dsuFQzV/64CKFEbmqTriSe/R/00VA= X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR0802MB2620 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 2a01:111:f400:fe0d::71f X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Kevin Wolf , vsementsov@virtuozzo.com, qemu-block@nongnu.org, armbru@redhat.com, Max Reitz , Greg Kurz Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Computed bodyhash is different from the expected one) Content-Type: text/plain; charset="utf-8" If we want to add some info to errp (by error_prepend() or error_append_hint()), we must use the ERRP_AUTO_PROPAGATE macro. Otherwise, this info will not be added when errp =3D=3D &error_fatal (the program will exit prior to the error_append_hint() or error_prepend() call). Fix such cases. If we want to check error after errp-function call, we need to introduce local_err and then propagate it to errp. Instead, use ERRP_AUTO_PROPAGATE macro, benefits are: 1. No need of explicit error_propagate call 2. No need of explicit local_err variable: use errp directly 3. ERRP_AUTO_PROPAGATE leaves errp as is if it's not NULL or &error_fatal, this means that we don't break error_abort (we'll abort on error_set, not on error_propagate) This commit is generated by command sed -n '/^Network Block Device (NBD)$/,/^$/{s/^F: //p}' \ MAINTAINERS | \ xargs git ls-files | grep '\.[hc]$' | \ xargs spatch \ --sp-file scripts/coccinelle/auto-propagated-errp.cocci \ --macro-file scripts/cocci-macro-file.h \ --in-place --no-show-diff --max-width 80 Reported-by: Kevin Wolf Reported-by: Greg Kurz Signed-off-by: Vladimir Sementsov-Ogievskiy Reviewed-by: Eric Blake --- include/block/nbd.h | 1 + block/nbd.c | 21 +++++++++------------ nbd/client.c | 5 +++++ nbd/server.c | 5 +++++ 4 files changed, 20 insertions(+), 12 deletions(-) diff --git a/include/block/nbd.h b/include/block/nbd.h index 20363280ae..f7d87636d3 100644 --- a/include/block/nbd.h +++ b/include/block/nbd.h @@ -361,6 +361,7 @@ void nbd_server_start_options(NbdServerOptions *arg, Er= ror **errp); static inline int nbd_read(QIOChannel *ioc, void *buffer, size_t size, const char *desc, Error **errp) { + ERRP_AUTO_PROPAGATE(); int ret =3D qio_channel_read_all(ioc, buffer, size, errp) < 0 ? -EIO := 0; =20 if (ret < 0) { diff --git a/block/nbd.c b/block/nbd.c index 976be76647..70274c31de 100644 --- a/block/nbd.c +++ b/block/nbd.c @@ -1410,16 +1410,15 @@ static void nbd_client_close(BlockDriverState *bs) static QIOChannelSocket *nbd_establish_connection(SocketAddress *saddr, Error **errp) { + ERRP_AUTO_PROPAGATE(); QIOChannelSocket *sioc; - Error *local_err =3D NULL; =20 sioc =3D qio_channel_socket_new(); qio_channel_set_name(QIO_CHANNEL(sioc), "nbd-client"); =20 - qio_channel_socket_connect_sync(sioc, saddr, &local_err); - if (local_err) { + qio_channel_socket_connect_sync(sioc, saddr, errp); + if (*errp) { object_unref(OBJECT(sioc)); - error_propagate(errp, local_err); return NULL; } =20 @@ -1725,10 +1724,10 @@ static bool nbd_process_legacy_socket_options(QDict= *output_options, static SocketAddress *nbd_config(BDRVNBDState *s, QDict *options, Error **errp) { + ERRP_AUTO_PROPAGATE(); SocketAddress *saddr =3D NULL; QDict *addr =3D NULL; Visitor *iv =3D NULL; - Error *local_err =3D NULL; =20 qdict_extract_subqdict(options, &addr, "server."); if (!qdict_size(addr)) { @@ -1741,9 +1740,8 @@ static SocketAddress *nbd_config(BDRVNBDState *s, QDi= ct *options, goto done; } =20 - visit_type_SocketAddress(iv, NULL, &saddr, &local_err); - if (local_err) { - error_propagate(errp, local_err); + visit_type_SocketAddress(iv, NULL, &saddr, errp); + if (*errp) { goto done; } =20 @@ -1836,15 +1834,14 @@ static QemuOptsList nbd_runtime_opts =3D { static int nbd_process_options(BlockDriverState *bs, QDict *options, Error **errp) { + ERRP_AUTO_PROPAGATE(); BDRVNBDState *s =3D bs->opaque; QemuOpts *opts; - Error *local_err =3D NULL; int ret =3D -EINVAL; =20 opts =3D qemu_opts_create(&nbd_runtime_opts, NULL, 0, &error_abort); - qemu_opts_absorb_qdict(opts, options, &local_err); - if (local_err) { - error_propagate(errp, local_err); + qemu_opts_absorb_qdict(opts, options, errp); + if (*errp) { goto error; } =20 diff --git a/nbd/client.c b/nbd/client.c index ba173108ba..e258ef3f7e 100644 --- a/nbd/client.c +++ b/nbd/client.c @@ -68,6 +68,7 @@ static int nbd_send_option_request(QIOChannel *ioc, uint3= 2_t opt, uint32_t len, const char *data, Error **errp) { + ERRP_AUTO_PROPAGATE(); NBDOption req; QEMU_BUILD_BUG_ON(sizeof(req) !=3D 16); =20 @@ -153,6 +154,7 @@ static int nbd_receive_option_reply(QIOChannel *ioc, ui= nt32_t opt, static int nbd_handle_reply_err(QIOChannel *ioc, NBDOptionReply *reply, bool strict, Error **errp) { + ERRP_AUTO_PROPAGATE(); g_autofree char *msg =3D NULL; =20 if (!(reply->type & (1 << 31))) { @@ -337,6 +339,7 @@ static int nbd_receive_list(QIOChannel *ioc, char **nam= e, char **description, static int nbd_opt_info_or_go(QIOChannel *ioc, uint32_t opt, NBDExportInfo *info, Error **errp) { + ERRP_AUTO_PROPAGATE(); NBDOptionReply reply; uint32_t len =3D strlen(info->name); uint16_t type; @@ -882,6 +885,7 @@ static int nbd_start_negotiate(AioContext *aio_context,= QIOChannel *ioc, bool structured_reply, bool *zeroes, Error **errp) { + ERRP_AUTO_PROPAGATE(); uint64_t magic; =20 trace_nbd_start_negotiate(tlscreds, hostname ? hostname : ""); @@ -1017,6 +1021,7 @@ int nbd_receive_negotiate(AioContext *aio_context, QI= OChannel *ioc, const char *hostname, QIOChannel **outioc, NBDExportInfo *info, Error **errp) { + ERRP_AUTO_PROPAGATE(); int result; bool zeroes; bool base_allocation =3D info->base_allocation; diff --git a/nbd/server.c b/nbd/server.c index 11a31094ff..ffc0cc69a7 100644 --- a/nbd/server.c +++ b/nbd/server.c @@ -211,6 +211,7 @@ static int GCC_FMT_ATTR(4, 0) nbd_negotiate_send_rep_verr(NBDClient *client, uint32_t type, Error **errp, const char *fmt, va_list va) { + ERRP_AUTO_PROPAGATE(); g_autofree char *msg =3D NULL; int ret; size_t len; @@ -369,6 +370,7 @@ static int nbd_opt_read_name(NBDClient *client, char **= name, uint32_t *length, static int nbd_negotiate_send_rep_list(NBDClient *client, NBDExport *exp, Error **errp) { + ERRP_AUTO_PROPAGATE(); size_t name_len, desc_len; uint32_t len; const char *name =3D exp->name ? exp->name : ""; @@ -432,6 +434,7 @@ static void nbd_check_meta_export(NBDClient *client) static int nbd_negotiate_handle_export_name(NBDClient *client, bool no_zer= oes, Error **errp) { + ERRP_AUTO_PROPAGATE(); g_autofree char *name =3D NULL; char buf[NBD_REPLY_EXPORT_NAME_SIZE] =3D ""; size_t len; @@ -1272,6 +1275,7 @@ static int nbd_negotiate_options(NBDClient *client, E= rror **errp) */ static coroutine_fn int nbd_negotiate(NBDClient *client, Error **errp) { + ERRP_AUTO_PROPAGATE(); char buf[NBD_OLDSTYLE_NEGOTIATE_SIZE] =3D ""; int ret; =20 @@ -1646,6 +1650,7 @@ void nbd_export_close(NBDExport *exp) =20 void nbd_export_remove(NBDExport *exp, NbdServerRemoveMode mode, Error **e= rrp) { + ERRP_AUTO_PROPAGATE(); if (mode =3D=3D NBD_SERVER_REMOVE_MODE_HARD || QTAILQ_EMPTY(&exp->clie= nts)) { nbd_export_close(exp); return; --=20 2.21.0 From nobody Sat Apr 27 20:24:15 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=fail (BodyHash is different from the expected one); dmarc=fail(p=none dis=none) header.from=virtuozzo.com Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1584458276276710.4721556107496; Tue, 17 Mar 2020 08:17:56 -0700 (PDT) Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1jEDxy-0001jF-RF; Tue, 17 Mar 2020 15:17:14 +0000 Received: from us1-rack-iad1.inumbo.com ([172.99.69.81]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1jEDxx-0001ir-0U for xen-devel@lists.xenproject.org; Tue, 17 Mar 2020 15:17:13 +0000 Received: from EUR04-VI1-obe.outbound.protection.outlook.com (unknown [40.107.8.139]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS id 5d9d8b36-6862-11ea-bec1-bc764e2007e4; Tue, 17 Mar 2020 15:17:08 +0000 (UTC) Received: from HE1PR0802MB2507.eurprd08.prod.outlook.com (10.175.35.136) by HE1PR0802MB2299.eurprd08.prod.outlook.com (10.172.125.13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2814.22; Tue, 17 Mar 2020 15:17:05 +0000 Received: from HE1PR0802MB2507.eurprd08.prod.outlook.com ([fe80::4d32:e4e1:5b9f:240f]) by HE1PR0802MB2507.eurprd08.prod.outlook.com ([fe80::4d32:e4e1:5b9f:240f%12]) with mapi id 15.20.2814.021; Tue, 17 Mar 2020 15:17:05 +0000 Received: from localhost.localdomain (185.215.60.248) by AM0PR10CA0005.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:208:17c::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2835.15 via Frontend Transport; Tue, 17 Mar 2020 15:17:04 +0000 X-Inumbo-ID: 5d9d8b36-6862-11ea-bec1-bc764e2007e4 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=CcbGzDvgmo4stBOG4bu8vBrLOBsHHyb1orhnCjgKg1wYFc0eKKlWXzkHM+aEtvZV9orOHXfSIcA+lHXOBt+4hvVWd4BA73bFBC7hXTv/GpYXi8R16vYItqlwWpUdu4QSvN9bmwhpmHBSXxzym6br5LMgSjBTW1d9zkwc1+POuOlqa6acHE2mWbHsdPRVNf353YbLHVSOZBOHwoRau9iNodXcUiImSwpRQFLZvoag1xARbQ+r57oOZxf1TAnUelxQEk2egJ0Zgl+w2DE2h8IarzUN/iUseM0g8W9R7SPNjNi2jMcd+ByriW5+M/PGRgflwfacNBu62N1hwNtlb41bpg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=XwTQjo26AZ7w0MXa3LZcBy1dibOpY9v7cdvOb/3d730=; b=mY6tbZaPJChnIgYPz9z2UhwqjHhPDVoDAk+iv++mOigHovD7FOF1Pqob+W80upMrhpBWcPe2Zz9CxZa34xXqe4h4PpgZ4WbkgjWP8yL/87OO+84Nwy9lUeCjle+r8sKniSI24S7h587KaG7EX9DlUKjKH71BYv/TY/kjZ+rrQZT5/CjoNeBGexUXVPAufqR5vggW0xInN3gwn7fY2rB6QYwWk/CDUg9NcgawSewG8MQ2+p1ndJNo2PicAmgEu/lizggtDS66H57OqI1ey5Yg2VRonx2DIdeVTTzDEGQx/1bHxYCnzUyskbAqw9G3VELNf+4LnpsThW5+etFlLa6Qjw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=XwTQjo26AZ7w0MXa3LZcBy1dibOpY9v7cdvOb/3d730=; b=lvrpAZDYBZ167kiV8jcQwrtjWROXyZZ9ivTnZVNADUjiKT2hX1jd0cTfKfppBI6I2Tv0ymcQD0XNob0s1lvM7lRzmVyaAp0/eBRt3zRgfsBbdD/lBxE/RaoplIs+zovAPBblRFueqZP7k5Vb/Q3emMvYKN7c4VDDj5VwCYJiSfw= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=vsementsov@virtuozzo.com; From: Vladimir Sementsov-Ogievskiy To: qemu-devel@nongnu.org Date: Tue, 17 Mar 2020 18:16:25 +0300 Message-Id: <20200317151625.20797-10-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20200317151625.20797-1-vsementsov@virtuozzo.com> References: <20200317151625.20797-1-vsementsov@virtuozzo.com> X-ClientProxiedBy: AM0PR10CA0005.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:208:17c::15) To HE1PR0802MB2507.eurprd08.prod.outlook.com (2603:10a6:3:e1::8) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-Mailer: git-send-email 2.21.0 X-Originating-IP: [185.215.60.248] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: a4de4470-1e7f-4b80-89eb-08d7ca864084 X-MS-TrafficTypeDiagnostic: HE1PR0802MB2299: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:111; X-Forefront-PRVS: 0345CFD558 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(4636009)(346002)(366004)(39850400004)(376002)(396003)(136003)(199004)(26005)(52116002)(16526019)(86362001)(8676002)(186003)(6916009)(66476007)(7416002)(66556008)(66946007)(8936002)(6666004)(81156014)(6512007)(478600001)(69590400007)(6506007)(36756003)(81166006)(54906003)(6486002)(2906002)(30864003)(316002)(2616005)(4326008)(1076003)(956004)(5660300002); DIR:OUT; SFP:1102; SCL:1; SRVR:HE1PR0802MB2299; H:HE1PR0802MB2507.eurprd08.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Received-SPF: None (protection.outlook.com: virtuozzo.com does not designate permitted sender hosts) X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: alCQNG+fBTQZPOOWGCgJ18uOgdw+aLj8/rID+FyBePMuqqWTShhzKXGXsZn0yyVJIPOe7rrhg/uiVhW5DbckipS0oNgUKRt7nvXIfAPCI/bSCnK2d2A59TVPOFSk9S3wYp1tl3D08AulTocmBGQdkEgviP0Q7lh+Sf49ijIn0rljGFXvFC7mpuMK7Tu+h8u5Ha5sNsLIPJzWp4zjwyAxU/Q3Y/vbsdJKJ3LhMz7Hh3JwpHhKd+TYLM1DqfOhF/DrHU0NS1Q2lZ8KI5ukaiwK4P6QfnW1B1TeDuZwttxsuD+YveCjX/sL+PopRrUv/WB9gZs8K9oo4PA6fAB5S0Ny/K1qBvLuYyj7VcueaYveyd8iTTg3SLZC/OVLfFbbj2p9EKKEv4JvQGkY+SKUhW03jUCjTVms6YRpOZ5KvivP0ZZF6KisKPv98uBrxGoQn1ShZoRLc3VoJDRMZul3sb/qdUroyGCHUljymqGMdeKp8OQo8Dhv/3ok37m40ZbihMRS X-MS-Exchange-AntiSpam-MessageData: PtT3V71taMn8mpJsqKU/KLjBWm8Bm8735QN190FFdtlYaPf/jQta2Bo46SH1hJLRjCxDPHoiBUe3uHXVIhLipmcsE8F0x94cOA/kuTW9NzyszuyDIRRJtLGWnDvXm7SZldJ74R7Orx0AFsqaAsfQ+g== X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: a4de4470-1e7f-4b80-89eb-08d7ca864084 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Mar 2020 15:17:05.6259 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 7EMKphGNm8R9ervG41b3mqdED0J9ff4UHsZwsHOI8FoqXGIHWjuWEx/Sd8EKmCvROOIGfXENjR0hTP9Rt7ma6DIfW8o0oGD3ntOqTKk7KpI= X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR0802MB2299 Subject: [Xen-devel] [PATCH v10 9/9] xen: introduce ERRP_AUTO_PROPAGATE X-BeenThere: xen-devel@lists.xenproject.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Cc: Kevin Wolf , vsementsov@virtuozzo.com, qemu-block@nongnu.org, Paul Durrant , armbru@redhat.com, Greg Kurz , Stefano Stabellini , Stefan Hajnoczi , Anthony Perard , xen-devel@lists.xenproject.org, Max Reitz Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) If we want to add some info to errp (by error_prepend() or error_append_hint()), we must use the ERRP_AUTO_PROPAGATE macro. Otherwise, this info will not be added when errp =3D=3D &error_fatal (the program will exit prior to the error_append_hint() or error_prepend() call). Fix such cases. If we want to check error after errp-function call, we need to introduce local_err and then propagate it to errp. Instead, use ERRP_AUTO_PROPAGATE macro, benefits are: 1. No need of explicit error_propagate call 2. No need of explicit local_err variable: use errp directly 3. ERRP_AUTO_PROPAGATE leaves errp as is if it's not NULL or &error_fatal, this means that we don't break error_abort (we'll abort on error_set, not on error_propagate) This commit is generated by command sed -n '/^X86 Xen CPUs$/,/^$/{s/^F: //p}' MAINTAINERS | \ xargs git ls-files | grep '\.[hc]$' | \ xargs spatch \ --sp-file scripts/coccinelle/auto-propagated-errp.cocci \ --macro-file scripts/cocci-macro-file.h \ --in-place --no-show-diff --max-width 80 Reported-by: Kevin Wolf Reported-by: Greg Kurz Signed-off-by: Vladimir Sementsov-Ogievskiy Reviewed-by: Paul Durrant --- hw/block/dataplane/xen-block.c | 17 ++--- hw/block/xen-block.c | 122 ++++++++++++++------------------- hw/pci-host/xen_igd_pt.c | 7 +- hw/xen/xen-backend.c | 7 +- hw/xen/xen-bus.c | 92 +++++++++++-------------- hw/xen/xen-host-pci-device.c | 27 ++++---- hw/xen/xen_pt.c | 25 +++---- hw/xen/xen_pt_config_init.c | 20 +++--- 8 files changed, 138 insertions(+), 179 deletions(-) diff --git a/hw/block/dataplane/xen-block.c b/hw/block/dataplane/xen-block.c index 288a87a814..3a8469fe87 100644 --- a/hw/block/dataplane/xen-block.c +++ b/hw/block/dataplane/xen-block.c @@ -739,8 +739,8 @@ void xen_block_dataplane_start(XenBlockDataPlane *datap= lane, unsigned int protocol, Error **errp) { + ERRP_AUTO_PROPAGATE(); XenDevice *xendev =3D dataplane->xendev; - Error *local_err =3D NULL; unsigned int ring_size; unsigned int i; =20 @@ -776,9 +776,8 @@ void xen_block_dataplane_start(XenBlockDataPlane *datap= lane, } =20 xen_device_set_max_grant_refs(xendev, dataplane->nr_ring_ref, - &local_err); - if (local_err) { - error_propagate(errp, local_err); + errp); + if (*errp) { goto stop; } =20 @@ -786,9 +785,8 @@ void xen_block_dataplane_start(XenBlockDataPlane *datap= lane, dataplane->ring_ref, dataplane->nr_ring_ref, PROT_READ | PROT_WRITE, - &local_err); - if (local_err) { - error_propagate(errp, local_err); + errp); + if (*errp) { goto stop; } =20 @@ -821,9 +819,8 @@ void xen_block_dataplane_start(XenBlockDataPlane *datap= lane, dataplane->event_channel =3D xen_device_bind_event_channel(xendev, event_channel, xen_block_dataplane_event, dataplane, - &local_err); - if (local_err) { - error_propagate(errp, local_err); + errp); + if (*errp) { goto stop; } =20 diff --git a/hw/block/xen-block.c b/hw/block/xen-block.c index 7b3b6dee97..5d4c94181c 100644 --- a/hw/block/xen-block.c +++ b/hw/block/xen-block.c @@ -195,6 +195,7 @@ static const BlockDevOps xen_block_dev_ops =3D { =20 static void xen_block_realize(XenDevice *xendev, Error **errp) { + ERRP_AUTO_PROPAGATE(); XenBlockDevice *blockdev =3D XEN_BLOCK_DEVICE(xendev); XenBlockDeviceClass *blockdev_class =3D XEN_BLOCK_DEVICE_GET_CLASS(xendev); @@ -202,7 +203,6 @@ static void xen_block_realize(XenDevice *xendev, Error = **errp) XenBlockVdev *vdev =3D &blockdev->props.vdev; BlockConf *conf =3D &blockdev->props.conf; BlockBackend *blk =3D conf->blk; - Error *local_err =3D NULL; =20 if (vdev->type =3D=3D XEN_BLOCK_VDEV_TYPE_INVALID) { error_setg(errp, "vdev property not set"); @@ -212,9 +212,8 @@ static void xen_block_realize(XenDevice *xendev, Error = **errp) trace_xen_block_realize(type, vdev->disk, vdev->partition); =20 if (blockdev_class->realize) { - blockdev_class->realize(blockdev, &local_err); - if (local_err) { - error_propagate(errp, local_err); + blockdev_class->realize(blockdev, errp); + if (*errp) { return; } } @@ -284,8 +283,8 @@ static void xen_block_frontend_changed(XenDevice *xende= v, enum xenbus_state frontend_state, Error **errp) { + ERRP_AUTO_PROPAGATE(); enum xenbus_state backend_state =3D xen_device_backend_get_state(xende= v); - Error *local_err =3D NULL; =20 switch (frontend_state) { case XenbusStateInitialised: @@ -294,15 +293,13 @@ static void xen_block_frontend_changed(XenDevice *xen= dev, break; } =20 - xen_block_disconnect(xendev, &local_err); - if (local_err) { - error_propagate(errp, local_err); + xen_block_disconnect(xendev, errp); + if (*errp) { break; } =20 - xen_block_connect(xendev, &local_err); - if (local_err) { - error_propagate(errp, local_err); + xen_block_connect(xendev, errp); + if (*errp) { break; } =20 @@ -315,9 +312,8 @@ static void xen_block_frontend_changed(XenDevice *xende= v, =20 case XenbusStateClosed: case XenbusStateUnknown: - xen_block_disconnect(xendev, &local_err); - if (local_err) { - error_propagate(errp, local_err); + xen_block_disconnect(xendev, errp); + if (*errp) { break; } =20 @@ -404,10 +400,10 @@ static int vbd_name_to_disk(const char *name, const c= har **endp, static void xen_block_set_vdev(Object *obj, Visitor *v, const char *name, void *opaque, Error **errp) { + ERRP_AUTO_PROPAGATE(); DeviceState *dev =3D DEVICE(obj); Property *prop =3D opaque; XenBlockVdev *vdev =3D qdev_get_prop_ptr(dev, prop); - Error *local_err =3D NULL; char *str, *p; const char *end; =20 @@ -416,9 +412,8 @@ static void xen_block_set_vdev(Object *obj, Visitor *v,= const char *name, return; } =20 - visit_type_str(v, name, &str, &local_err); - if (local_err) { - error_propagate(errp, local_err); + visit_type_str(v, name, &str, errp); + if (*errp) { return; } =20 @@ -672,9 +667,9 @@ static void xen_block_blockdev_del(const char *node_nam= e, Error **errp) static char *xen_block_blockdev_add(const char *id, QDict *qdict, Error **errp) { + ERRP_AUTO_PROPAGATE(); const char *driver =3D qdict_get_try_str(qdict, "driver"); BlockdevOptions *options =3D NULL; - Error *local_err =3D NULL; char *node_name; Visitor *v; =20 @@ -689,18 +684,16 @@ static char *xen_block_blockdev_add(const char *id, Q= Dict *qdict, trace_xen_block_blockdev_add(node_name); =20 v =3D qobject_input_visitor_new(QOBJECT(qdict)); - visit_type_BlockdevOptions(v, NULL, &options, &local_err); + visit_type_BlockdevOptions(v, NULL, &options, errp); visit_free(v); =20 - if (local_err) { - error_propagate(errp, local_err); + if (*errp) { goto fail; } =20 - qmp_blockdev_add(options, &local_err); + qmp_blockdev_add(options, errp); =20 - if (local_err) { - error_propagate(errp, local_err); + if (*errp) { goto fail; } =20 @@ -719,14 +712,12 @@ fail: =20 static void xen_block_drive_destroy(XenBlockDrive *drive, Error **errp) { + ERRP_AUTO_PROPAGATE(); char *node_name =3D drive->node_name; =20 if (node_name) { - Error *local_err =3D NULL; - - xen_block_blockdev_del(node_name, &local_err); - if (local_err) { - error_propagate(errp, local_err); + xen_block_blockdev_del(node_name, errp); + if (*errp) { return; } g_free(node_name); @@ -740,6 +731,7 @@ static XenBlockDrive *xen_block_drive_create(const char= *id, const char *device_type, QDict *opts, Error **errp) { + ERRP_AUTO_PROPAGATE(); const char *params =3D qdict_get_try_str(opts, "params"); const char *mode =3D qdict_get_try_str(opts, "mode"); const char *direct_io_safe =3D qdict_get_try_str(opts, "direct-io-safe= "); @@ -747,7 +739,6 @@ static XenBlockDrive *xen_block_drive_create(const char= *id, char *driver =3D NULL; char *filename =3D NULL; XenBlockDrive *drive =3D NULL; - Error *local_err =3D NULL; QDict *file_layer; QDict *driver_layer; =20 @@ -826,13 +817,12 @@ static XenBlockDrive *xen_block_drive_create(const ch= ar *id, =20 g_assert(!drive->node_name); drive->node_name =3D xen_block_blockdev_add(drive->id, driver_layer, - &local_err); + errp); =20 qobject_unref(driver_layer); =20 done: - if (local_err) { - error_propagate(errp, local_err); + if (*errp) { xen_block_drive_destroy(drive, NULL); return NULL; } @@ -857,8 +847,8 @@ static void xen_block_iothread_destroy(XenBlockIOThread= *iothread, static XenBlockIOThread *xen_block_iothread_create(const char *id, Error **errp) { + ERRP_AUTO_PROPAGATE(); XenBlockIOThread *iothread =3D g_new(XenBlockIOThread, 1); - Error *local_err =3D NULL; QDict *opts; QObject *ret_data; =20 @@ -867,13 +857,11 @@ static XenBlockIOThread *xen_block_iothread_create(co= nst char *id, opts =3D qdict_new(); qdict_put_str(opts, "qom-type", TYPE_IOTHREAD); qdict_put_str(opts, "id", id); - qmp_object_add(opts, &ret_data, &local_err); + qmp_object_add(opts, &ret_data, errp); qobject_unref(opts); qobject_unref(ret_data); =20 - if (local_err) { - error_propagate(errp, local_err); - + if (*errp) { g_free(iothread->id); g_free(iothread); return NULL; @@ -885,6 +873,7 @@ static XenBlockIOThread *xen_block_iothread_create(cons= t char *id, static void xen_block_device_create(XenBackendInstance *backend, QDict *opts, Error **errp) { + ERRP_AUTO_PROPAGATE(); XenBus *xenbus =3D xen_backend_get_bus(backend); const char *name =3D xen_backend_get_name(backend); unsigned long number; @@ -892,7 +881,6 @@ static void xen_block_device_create(XenBackendInstance = *backend, XenBlockDrive *drive =3D NULL; XenBlockIOThread *iothread =3D NULL; XenDevice *xendev =3D NULL; - Error *local_err =3D NULL; const char *type; XenBlockDevice *blockdev; =20 @@ -924,52 +912,48 @@ static void xen_block_device_create(XenBackendInstanc= e *backend, goto fail; } =20 - drive =3D xen_block_drive_create(vdev, device_type, opts, &local_err); + drive =3D xen_block_drive_create(vdev, device_type, opts, errp); if (!drive) { - error_propagate_prepend(errp, local_err, "failed to create drive: = "); + error_prepend(errp, "failed to create drive: "); goto fail; } =20 - iothread =3D xen_block_iothread_create(vdev, &local_err); - if (local_err) { - error_propagate_prepend(errp, local_err, - "failed to create iothread: "); + iothread =3D xen_block_iothread_create(vdev, errp); + if (*errp) { + error_prepend(errp, "failed to create iothread: "); goto fail; } =20 xendev =3D XEN_DEVICE(qdev_create(BUS(xenbus), type)); blockdev =3D XEN_BLOCK_DEVICE(xendev); =20 - object_property_set_str(OBJECT(xendev), vdev, "vdev", &local_err); - if (local_err) { - error_propagate_prepend(errp, local_err, "failed to set 'vdev': "); + object_property_set_str(OBJECT(xendev), vdev, "vdev", errp); + if (*errp) { + error_prepend(errp, "failed to set 'vdev': "); goto fail; } =20 object_property_set_str(OBJECT(xendev), xen_block_drive_get_node_name(drive), "drive", - &local_err); - if (local_err) { - error_propagate_prepend(errp, local_err, "failed to set 'drive': "= ); + errp); + if (*errp) { + error_prepend(errp, "failed to set 'drive': "); goto fail; } =20 object_property_set_str(OBJECT(xendev), iothread->id, "iothread", - &local_err); - if (local_err) { - error_propagate_prepend(errp, local_err, - "failed to set 'iothread': "); + errp); + if (*errp) { + error_prepend(errp, "failed to set 'iothread': "); goto fail; } =20 blockdev->iothread =3D iothread; blockdev->drive =3D drive; =20 - object_property_set_bool(OBJECT(xendev), true, "realized", &local_err); - if (local_err) { - error_propagate_prepend(errp, local_err, - "realization of device %s failed: ", - type); + object_property_set_bool(OBJECT(xendev), true, "realized", errp); + if (*errp) { + error_prepend(errp, "realization of device %s failed: ", type); goto fail; } =20 @@ -993,31 +977,29 @@ fail: static void xen_block_device_destroy(XenBackendInstance *backend, Error **errp) { + ERRP_AUTO_PROPAGATE(); XenDevice *xendev =3D xen_backend_get_device(backend); XenBlockDevice *blockdev =3D XEN_BLOCK_DEVICE(xendev); XenBlockVdev *vdev =3D &blockdev->props.vdev; XenBlockDrive *drive =3D blockdev->drive; XenBlockIOThread *iothread =3D blockdev->iothread; - Error *local_err =3D NULL; =20 trace_xen_block_device_destroy(vdev->number); =20 object_unparent(OBJECT(xendev)); =20 if (iothread) { - xen_block_iothread_destroy(iothread, &local_err); - if (local_err) { - error_propagate_prepend(errp, local_err, - "failed to destroy iothread: "); + xen_block_iothread_destroy(iothread, errp); + if (*errp) { + error_prepend(errp, "failed to destroy iothread: "); return; } } =20 if (drive) { - xen_block_drive_destroy(drive, &local_err); - if (local_err) { - error_propagate_prepend(errp, local_err, - "failed to destroy drive: "); + xen_block_drive_destroy(drive, errp); + if (*errp) { + error_prepend(errp, "failed to destroy drive: "); } } } diff --git a/hw/pci-host/xen_igd_pt.c b/hw/pci-host/xen_igd_pt.c index efcc9347ff..29ade9ca25 100644 --- a/hw/pci-host/xen_igd_pt.c +++ b/hw/pci-host/xen_igd_pt.c @@ -79,17 +79,16 @@ static void host_pci_config_read(int pos, int len, uint= 32_t *val, Error **errp) =20 static void igd_pt_i440fx_realize(PCIDevice *pci_dev, Error **errp) { + ERRP_AUTO_PROPAGATE(); uint32_t val =3D 0; size_t i; int pos, len; - Error *local_err =3D NULL; =20 for (i =3D 0; i < ARRAY_SIZE(igd_host_bridge_infos); i++) { pos =3D igd_host_bridge_infos[i].offset; len =3D igd_host_bridge_infos[i].len; - host_pci_config_read(pos, len, &val, &local_err); - if (local_err) { - error_propagate(errp, local_err); + host_pci_config_read(pos, len, &val, errp); + if (*errp) { return; } pci_default_write_config(pci_dev, pos, val, len); diff --git a/hw/xen/xen-backend.c b/hw/xen/xen-backend.c index da065f81b7..1cc0694053 100644 --- a/hw/xen/xen-backend.c +++ b/hw/xen/xen-backend.c @@ -98,9 +98,9 @@ static void xen_backend_list_remove(XenBackendInstance *b= ackend) void xen_backend_device_create(XenBus *xenbus, const char *type, const char *name, QDict *opts, Error **errp) { + ERRP_AUTO_PROPAGATE(); const XenBackendImpl *impl =3D xen_backend_table_lookup(type); XenBackendInstance *backend; - Error *local_error =3D NULL; =20 if (!impl) { return; @@ -110,9 +110,8 @@ void xen_backend_device_create(XenBus *xenbus, const ch= ar *type, backend->xenbus =3D xenbus; backend->name =3D g_strdup(name); =20 - impl->create(backend, opts, &local_error); - if (local_error) { - error_propagate(errp, local_error); + impl->create(backend, opts, errp); + if (*errp) { g_free(backend->name); g_free(backend); return; diff --git a/hw/xen/xen-bus.c b/hw/xen/xen-bus.c index 18237b34ea..97259c964b 100644 --- a/hw/xen/xen-bus.c +++ b/hw/xen/xen-bus.c @@ -53,9 +53,9 @@ static char *xen_device_get_frontend_path(XenDevice *xend= ev) =20 static void xen_device_unplug(XenDevice *xendev, Error **errp) { + ERRP_AUTO_PROPAGATE(); XenBus *xenbus =3D XEN_BUS(qdev_get_parent_bus(DEVICE(xendev))); const char *type =3D object_get_typename(OBJECT(xendev)); - Error *local_err =3D NULL; xs_transaction_t tid; =20 trace_xen_device_unplug(type, xendev->name); @@ -69,14 +69,14 @@ again: } =20 xs_node_printf(xenbus->xsh, tid, xendev->backend_path, "online", - &local_err, "%u", 0); - if (local_err) { + errp, "%u", 0); + if (*errp) { goto abort; } =20 xs_node_printf(xenbus->xsh, tid, xendev->backend_path, "state", - &local_err, "%u", XenbusStateClosing); - if (local_err) { + errp, "%u", XenbusStateClosing); + if (*errp) { goto abort; } =20 @@ -96,7 +96,6 @@ abort: * from ending the transaction. */ xs_transaction_end(xenbus->xsh, tid, true); - error_propagate(errp, local_err); } =20 static void xen_bus_print_dev(Monitor *mon, DeviceState *dev, int indent) @@ -205,15 +204,13 @@ static XenWatch *watch_list_add(XenWatchList *watch_l= ist, const char *node, const char *key, XenWatchHandler handler, void *opaque, Error **errp) { + ERRP_AUTO_PROPAGATE(); XenWatch *watch =3D new_watch(node, key, handler, opaque); - Error *local_err =3D NULL; =20 notifier_list_add(&watch_list->notifiers, &watch->notifier); =20 - xs_node_watch(watch_list->xsh, node, key, watch->token, &local_err); - if (local_err) { - error_propagate(errp, local_err); - + xs_node_watch(watch_list->xsh, node, key, watch->token, errp); + if (*errp) { notifier_remove(&watch->notifier); free_watch(watch); =20 @@ -255,11 +252,11 @@ static void xen_bus_backend_create(XenBus *xenbus, co= nst char *type, const char *name, char *path, Error **errp) { + ERRP_AUTO_PROPAGATE(); xs_transaction_t tid; char **key; QDict *opts; unsigned int i, n; - Error *local_err =3D NULL; =20 trace_xen_bus_backend_create(type, path); =20 @@ -314,13 +311,11 @@ again: return; } =20 - xen_backend_device_create(xenbus, type, name, opts, &local_err); + xen_backend_device_create(xenbus, type, name, opts, errp); qobject_unref(opts); =20 - if (local_err) { - error_propagate_prepend(errp, local_err, - "failed to create '%s' device '%s': ", - type, name); + if (*errp) { + error_prepend(errp, "failed to create '%s' device '%s': ", type, n= ame); } } =20 @@ -692,9 +687,9 @@ static void xen_device_remove_watch(XenDevice *xendev, = XenWatch *watch, =20 static void xen_device_backend_create(XenDevice *xendev, Error **errp) { + ERRP_AUTO_PROPAGATE(); XenBus *xenbus =3D XEN_BUS(qdev_get_parent_bus(DEVICE(xendev))); struct xs_permissions perms[2]; - Error *local_err =3D NULL; =20 xendev->backend_path =3D xen_device_get_backend_path(xendev); =20 @@ -706,30 +701,27 @@ static void xen_device_backend_create(XenDevice *xend= ev, Error **errp) g_assert(xenbus->xsh); =20 xs_node_create(xenbus->xsh, XBT_NULL, xendev->backend_path, perms, - ARRAY_SIZE(perms), &local_err); - if (local_err) { - error_propagate_prepend(errp, local_err, - "failed to create backend: "); + ARRAY_SIZE(perms), errp); + if (*errp) { + error_prepend(errp, "failed to create backend: "); return; } =20 xendev->backend_state_watch =3D xen_device_add_watch(xendev, xendev->backend_path, "state", xen_device_backend_changed, - &local_err); - if (local_err) { - error_propagate_prepend(errp, local_err, - "failed to watch backend state: "); + errp); + if (*errp) { + error_prepend(errp, "failed to watch backend state: "); return; } =20 xendev->backend_online_watch =3D xen_device_add_watch(xendev, xendev->backend_path, "online", xen_device_backend_changed, - &local_err); - if (local_err) { - error_propagate_prepend(errp, local_err, - "failed to watch backend online: "); + errp); + if (*errp) { + error_prepend(errp, "failed to watch backend online: "); return; } } @@ -866,9 +858,9 @@ static bool xen_device_frontend_exists(XenDevice *xende= v) =20 static void xen_device_frontend_create(XenDevice *xendev, Error **errp) { + ERRP_AUTO_PROPAGATE(); XenBus *xenbus =3D XEN_BUS(qdev_get_parent_bus(DEVICE(xendev))); struct xs_permissions perms[2]; - Error *local_err =3D NULL; =20 xendev->frontend_path =3D xen_device_get_frontend_path(xendev); =20 @@ -885,20 +877,18 @@ static void xen_device_frontend_create(XenDevice *xen= dev, Error **errp) g_assert(xenbus->xsh); =20 xs_node_create(xenbus->xsh, XBT_NULL, xendev->frontend_path, perms, - ARRAY_SIZE(perms), &local_err); - if (local_err) { - error_propagate_prepend(errp, local_err, - "failed to create frontend: "); + ARRAY_SIZE(perms), errp); + if (*errp) { + error_prepend(errp, "failed to create frontend: "); return; } } =20 xendev->frontend_state_watch =3D xen_device_add_watch(xendev, xendev->frontend_path, "state", - xen_device_frontend_changed, &local_err); - if (local_err) { - error_propagate_prepend(errp, local_err, - "failed to watch frontend state: "); + xen_device_frontend_changed, errp); + if (*errp) { + error_prepend(errp, "failed to watch frontend state: "); } } =20 @@ -1247,11 +1237,11 @@ static void xen_device_exit(Notifier *n, void *data) =20 static void xen_device_realize(DeviceState *dev, Error **errp) { + ERRP_AUTO_PROPAGATE(); XenDevice *xendev =3D XEN_DEVICE(dev); XenDeviceClass *xendev_class =3D XEN_DEVICE_GET_CLASS(xendev); XenBus *xenbus =3D XEN_BUS(qdev_get_parent_bus(DEVICE(xendev))); const char *type =3D object_get_typename(OBJECT(xendev)); - Error *local_err =3D NULL; =20 if (xendev->frontend_id =3D=3D DOMID_INVALID) { xendev->frontend_id =3D xen_domid; @@ -1267,10 +1257,9 @@ static void xen_device_realize(DeviceState *dev, Err= or **errp) goto unrealize; } =20 - xendev->name =3D xendev_class->get_name(xendev, &local_err); - if (local_err) { - error_propagate_prepend(errp, local_err, - "failed to get device name: "); + xendev->name =3D xendev_class->get_name(xendev, errp); + if (*errp) { + error_prepend(errp, "failed to get device name: "); goto unrealize; } =20 @@ -1293,22 +1282,19 @@ static void xen_device_realize(DeviceState *dev, Er= ror **errp) xendev->feature_grant_copy =3D (xengnttab_grant_copy(xendev->xgth, 0, NULL) =3D=3D 0); =20 - xen_device_backend_create(xendev, &local_err); - if (local_err) { - error_propagate(errp, local_err); + xen_device_backend_create(xendev, errp); + if (*errp) { goto unrealize; } =20 - xen_device_frontend_create(xendev, &local_err); - if (local_err) { - error_propagate(errp, local_err); + xen_device_frontend_create(xendev, errp); + if (*errp) { goto unrealize; } =20 if (xendev_class->realize) { - xendev_class->realize(xendev, &local_err); - if (local_err) { - error_propagate(errp, local_err); + xendev_class->realize(xendev, errp); + if (*errp) { goto unrealize; } } diff --git a/hw/xen/xen-host-pci-device.c b/hw/xen/xen-host-pci-device.c index 1b44dcafaf..02379c341c 100644 --- a/hw/xen/xen-host-pci-device.c +++ b/hw/xen/xen-host-pci-device.c @@ -333,8 +333,8 @@ void xen_host_pci_device_get(XenHostPCIDevice *d, uint1= 6_t domain, uint8_t bus, uint8_t dev, uint8_t func, Error **errp) { + ERRP_AUTO_PROPAGATE(); unsigned int v; - Error *err =3D NULL; =20 d->config_fd =3D -1; d->domain =3D domain; @@ -342,36 +342,36 @@ void xen_host_pci_device_get(XenHostPCIDevice *d, uin= t16_t domain, d->dev =3D dev; d->func =3D func; =20 - xen_host_pci_config_open(d, &err); - if (err) { + xen_host_pci_config_open(d, errp); + if (*errp) { goto error; } =20 - xen_host_pci_get_resource(d, &err); - if (err) { + xen_host_pci_get_resource(d, errp); + if (*errp) { goto error; } =20 - xen_host_pci_get_hex_value(d, "vendor", &v, &err); - if (err) { + xen_host_pci_get_hex_value(d, "vendor", &v, errp); + if (*errp) { goto error; } d->vendor_id =3D v; =20 - xen_host_pci_get_hex_value(d, "device", &v, &err); - if (err) { + xen_host_pci_get_hex_value(d, "device", &v, errp); + if (*errp) { goto error; } d->device_id =3D v; =20 - xen_host_pci_get_dec_value(d, "irq", &v, &err); - if (err) { + xen_host_pci_get_dec_value(d, "irq", &v, errp); + if (*errp) { goto error; } d->irq =3D v; =20 - xen_host_pci_get_hex_value(d, "class", &v, &err); - if (err) { + xen_host_pci_get_hex_value(d, "class", &v, errp); + if (*errp) { goto error; } d->class_code =3D v; @@ -381,7 +381,6 @@ void xen_host_pci_device_get(XenHostPCIDevice *d, uint1= 6_t domain, return; =20 error: - error_propagate(errp, err); =20 if (d->config_fd >=3D 0) { close(d->config_fd); diff --git a/hw/xen/xen_pt.c b/hw/xen/xen_pt.c index b91082cb8b..f57b81588e 100644 --- a/hw/xen/xen_pt.c +++ b/hw/xen/xen_pt.c @@ -767,12 +767,12 @@ static void xen_pt_destroy(PCIDevice *d) { =20 static void xen_pt_realize(PCIDevice *d, Error **errp) { + ERRP_AUTO_PROPAGATE(); XenPCIPassthroughState *s =3D XEN_PT_DEVICE(d); int i, rc =3D 0; uint8_t machine_irq =3D 0, scratch; uint16_t cmd =3D 0; int pirq =3D XEN_PT_UNASSIGNED_PIRQ; - Error *err =3D NULL; =20 /* register real device */ XEN_PT_LOG(d, "Assigning real physical device %02x:%02x.%d" @@ -783,10 +783,9 @@ static void xen_pt_realize(PCIDevice *d, Error **errp) xen_host_pci_device_get(&s->real_device, s->hostaddr.domain, s->hostaddr.bus, s->hostaddr.slot, s->hostaddr.function, - &err); - if (err) { - error_append_hint(&err, "Failed to \"open\" the real pci device"); - error_propagate(errp, err); + errp); + if (*errp) { + error_append_hint(errp, "Failed to \"open\" the real pci device"); return; } =20 @@ -813,11 +812,10 @@ static void xen_pt_realize(PCIDevice *d, Error **errp) return; } =20 - xen_pt_setup_vga(s, &s->real_device, &err); - if (err) { - error_append_hint(&err, "Setup VGA BIOS of passthrough" - " GFX failed"); - error_propagate(errp, err); + xen_pt_setup_vga(s, &s->real_device, errp); + if (*errp) { + error_append_hint(errp, "Setup VGA BIOS of passthrough" + " GFX failed"); xen_host_pci_device_put(&s->real_device); return; } @@ -830,10 +828,9 @@ static void xen_pt_realize(PCIDevice *d, Error **errp) xen_pt_register_regions(s, &cmd); =20 /* reinitialize each config register to be emulated */ - xen_pt_config_init(s, &err); - if (err) { - error_append_hint(&err, "PCI Config space initialisation failed"); - error_propagate(errp, err); + xen_pt_config_init(s, errp); + if (*errp) { + error_append_hint(errp, "PCI Config space initialisation failed"); rc =3D -1; goto err_out; } diff --git a/hw/xen/xen_pt_config_init.c b/hw/xen/xen_pt_config_init.c index 31ec5add1d..af3fbd1bfb 100644 --- a/hw/xen/xen_pt_config_init.c +++ b/hw/xen/xen_pt_config_init.c @@ -2008,8 +2008,8 @@ static void xen_pt_config_reg_init(XenPCIPassthroughS= tate *s, =20 void xen_pt_config_init(XenPCIPassthroughState *s, Error **errp) { + ERRP_AUTO_PROPAGATE(); int i, rc; - Error *err =3D NULL; =20 QLIST_INIT(&s->reg_grps); =20 @@ -2052,10 +2052,9 @@ void xen_pt_config_init(XenPCIPassthroughState *s, E= rror **errp) reg_grp_offset, ®_grp_entry->size); if (rc < 0) { - error_setg(&err, "Failed to initialize %d/%zu, type =3D 0x= %x," + error_setg(errp, "Failed to initialize %d/%zu, type =3D 0x= %x," " rc: %d", i, ARRAY_SIZE(xen_pt_emu_reg_grps), xen_pt_emu_reg_grps[i].grp_type, rc); - error_propagate(errp, err); xen_pt_config_delete(s); return; } @@ -2068,13 +2067,14 @@ void xen_pt_config_init(XenPCIPassthroughState *s, = Error **errp) =20 /* initialize capability register */ for (j =3D 0; regs->size !=3D 0; j++, regs++) { - xen_pt_config_reg_init(s, reg_grp_entry, regs, &err); - if (err) { - error_append_hint(&err, "Failed to init register %= d" - " offsets 0x%x in grp_type =3D 0x%x (%d/%z= u)", j, - regs->offset, xen_pt_emu_reg_grps[i].grp_t= ype, - i, ARRAY_SIZE(xen_pt_emu_reg_grps)); - error_propagate(errp, err); + xen_pt_config_reg_init(s, reg_grp_entry, regs, errp); + if (*errp) { + error_append_hint(errp, "Failed to init register %= d" + " offsets 0x%x in grp_type =3D 0= x%x (%d/%zu)", + j, + regs->offset, + xen_pt_emu_reg_grps[i].grp_type, + i, ARRAY_SIZE(xen_pt_emu_reg_grp= s)); xen_pt_config_delete(s); return; } --=20 2.21.0 _______________________________________________ Xen-devel mailing list Xen-devel@lists.xenproject.org https://lists.xenproject.org/mailman/listinfo/xen-devel