From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.8 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6BA1AC10DCE for ; Thu, 12 Mar 2020 09:00:35 +0000 (UTC) Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 3424320691 for ; Thu, 12 Mar 2020 09:00:35 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 3424320691 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=virtuozzo.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=xen-devel-bounces@lists.xenproject.org Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1jCJhT-0000WY-Cw; Thu, 12 Mar 2020 09:00:19 +0000 Received: from all-amaz-eas1.inumbo.com ([34.197.232.57] helo=us1-amaz-eas2.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1jCJhS-0000WC-5C for xen-devel@lists.xenproject.org; Thu, 12 Mar 2020 09:00:18 +0000 X-Inumbo-ID: e3c2293c-643f-11ea-b12e-12813bfff9fa Received: from relay.sw.ru (unknown [185.231.240.75]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS id e3c2293c-643f-11ea-b12e-12813bfff9fa; Thu, 12 Mar 2020 09:00:16 +0000 (UTC) Received: from vovaso.qa.sw.ru ([10.94.3.0] helo=kvm.qa.sw.ru) by relay.sw.ru with esmtp (Exim 4.92.3) (envelope-from ) id 1jCJgx-0004Ve-3V; Thu, 12 Mar 2020 11:59:47 +0300 From: Vladimir Sementsov-Ogievskiy To: qemu-devel@nongnu.org Date: Thu, 12 Mar 2020 11:59:36 +0300 Message-Id: <20200312085936.9552-11-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20200312085936.9552-1-vsementsov@virtuozzo.com> References: <20200312085936.9552-1-vsementsov@virtuozzo.com> MIME-Version: 1.0 Subject: [Xen-devel] [PATCH v9 10/10] 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 , Stefano Stabellini , qemu-block@nongnu.org, Paul Durrant , armbru@redhat.com, Greg Kurz , vsementsov@virtuozzo.com, Stefan Hajnoczi , Anthony Perard , xen-devel@lists.xenproject.org, Max Reitz Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" SWYgd2Ugd2FudCB0byBhZGQgc29tZSBpbmZvIHRvIGVycnAgKGJ5IGVycm9yX3ByZXBlbmQoKSBv cgplcnJvcl9hcHBlbmRfaGludCgpKSwgd2UgbXVzdCB1c2UgdGhlIEVSUlBfQVVUT19QUk9QQUdB VEUgbWFjcm8uCk90aGVyd2lzZSwgdGhpcyBpbmZvIHdpbGwgbm90IGJlIGFkZGVkIHdoZW4gZXJy cCA9PSAmZXJyb3JfZmF0YWwKKHRoZSBwcm9ncmFtIHdpbGwgZXhpdCBwcmlvciB0byB0aGUgZXJy b3JfYXBwZW5kX2hpbnQoKSBvcgplcnJvcl9wcmVwZW5kKCkgY2FsbCkuICBGaXggc3VjaCBjYXNl cy4KCklmIHdlIHdhbnQgdG8gY2hlY2sgZXJyb3IgYWZ0ZXIgZXJycC1mdW5jdGlvbiBjYWxsLCB3 ZSBuZWVkIHRvCmludHJvZHVjZSBsb2NhbF9lcnIgYW5kIHRoZW4gcHJvcGFnYXRlIGl0IHRvIGVy cnAuIEluc3RlYWQsIHVzZQpFUlJQX0FVVE9fUFJPUEFHQVRFIG1hY3JvLCBiZW5lZml0cyBhcmU6 CjEuIE5vIG5lZWQgb2YgZXhwbGljaXQgZXJyb3JfcHJvcGFnYXRlIGNhbGwKMi4gTm8gbmVlZCBv ZiBleHBsaWNpdCBsb2NhbF9lcnIgdmFyaWFibGU6IHVzZSBlcnJwIGRpcmVjdGx5CjMuIEVSUlBf QVVUT19QUk9QQUdBVEUgbGVhdmVzIGVycnAgYXMgaXMgaWYgaXQncyBub3QgTlVMTCBvcgogICAm ZXJyb3JfZmF0YWwsIHRoaXMgbWVhbnMgdGhhdCB3ZSBkb24ndCBicmVhayBlcnJvcl9hYm9ydAog ICAod2UnbGwgYWJvcnQgb24gZXJyb3Jfc2V0LCBub3Qgb24gZXJyb3JfcHJvcGFnYXRlKQoKVGhp cyBjb21taXQgaXMgZ2VuZXJhdGVkIGJ5IGNvbW1hbmQKCiAgICBzZWQgLW4gJy9eWDg2IFhlbiBD UFVzJC8sL14kL3tzL15GOiAvL3B9JyBNQUlOVEFJTkVSUyB8IFwKICAgIHhhcmdzIGdpdCBscy1m aWxlcyB8IGdyZXAgJ1wuW2hjXSQnIHwgXAogICAgeGFyZ3Mgc3BhdGNoIFwKICAgICAgICAtLXNw LWZpbGUgc2NyaXB0cy9jb2NjaW5lbGxlL2F1dG8tcHJvcGFnYXRlZC1lcnJwLmNvY2NpIFwKICAg ICAgICAtLW1hY3JvLWZpbGUgc2NyaXB0cy9jb2NjaS1tYWNyby1maWxlLmggXAogICAgICAgIC0t aW4tcGxhY2UgLS1uby1zaG93LWRpZmYgLS1tYXgtd2lkdGggODAKClJlcG9ydGVkLWJ5OiBLZXZp biBXb2xmIDxrd29sZkByZWRoYXQuY29tPgpSZXBvcnRlZC1ieTogR3JlZyBLdXJ6IDxncm91Z0Br YW9kLm9yZz4KU2lnbmVkLW9mZi1ieTogVmxhZGltaXIgU2VtZW50c292LU9naWV2c2tpeSA8dnNl bWVudHNvdkB2aXJ0dW96em8uY29tPgpSZXZpZXdlZC1ieTogUGF1bCBEdXJyYW50IDxwYXVsQHhl bi5vcmc+Ci0tLQogaHcvYmxvY2svZGF0YXBsYW5lL3hlbi1ibG9jay5jIHwgIDE3ICsrLS0tCiBo dy9ibG9jay94ZW4tYmxvY2suYyAgICAgICAgICAgfCAxMjUgKysrKysrKysrKysrKystLS0tLS0t LS0tLS0tLS0tLS0tCiBody9wY2ktaG9zdC94ZW5faWdkX3B0LmMgICAgICAgfCAgIDcgKy0KIGh3 L3hlbi94ZW4tYmFja2VuZC5jICAgICAgICAgICB8ICAgNyArLQogaHcveGVuL3hlbi1idXMuYyAg ICAgICAgICAgICAgIHwgIDkyICsrKysrKysrKystLS0tLS0tLS0tLS0tLQogaHcveGVuL3hlbi1o b3N0LXBjaS1kZXZpY2UuYyAgIHwgIDI3ICsrKystLS0KIGh3L3hlbi94ZW5fcHQuYyAgICAgICAg ICAgICAgICB8ICAyNSArKystLS0tCiBody94ZW4veGVuX3B0X2NvbmZpZ19pbml0LmMgICAgfCAg MjAgKysrLS0tCiA4IGZpbGVzIGNoYW5nZWQsIDEzOCBpbnNlcnRpb25zKCspLCAxODIgZGVsZXRp b25zKC0pCgpkaWZmIC0tZ2l0IGEvaHcvYmxvY2svZGF0YXBsYW5lL3hlbi1ibG9jay5jIGIvaHcv YmxvY2svZGF0YXBsYW5lL3hlbi1ibG9jay5jCmluZGV4IDI4OGE4N2E4MTQuLjNhODQ2OWZlODcg MTAwNjQ0Ci0tLSBhL2h3L2Jsb2NrL2RhdGFwbGFuZS94ZW4tYmxvY2suYworKysgYi9ody9ibG9j ay9kYXRhcGxhbmUveGVuLWJsb2NrLmMKQEAgLTczOSw4ICs3MzksOCBAQCB2b2lkIHhlbl9ibG9j a19kYXRhcGxhbmVfc3RhcnQoWGVuQmxvY2tEYXRhUGxhbmUgKmRhdGFwbGFuZSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcHJvdG9jb2wsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgRXJyb3IgKiplcnJwKQogeworICAgIEVSUlBfQVVUT19QUk9Q QUdBVEUoKTsKICAgICBYZW5EZXZpY2UgKnhlbmRldiA9IGRhdGFwbGFuZS0+eGVuZGV2OwotICAg IEVycm9yICpsb2NhbF9lcnIgPSBOVUxMOwogICAgIHVuc2lnbmVkIGludCByaW5nX3NpemU7CiAg ICAgdW5zaWduZWQgaW50IGk7CiAKQEAgLTc3Niw5ICs3NzYsOCBAQCB2b2lkIHhlbl9ibG9ja19k YXRhcGxhbmVfc3RhcnQoWGVuQmxvY2tEYXRhUGxhbmUgKmRhdGFwbGFuZSwKICAgICB9CiAKICAg ICB4ZW5fZGV2aWNlX3NldF9tYXhfZ3JhbnRfcmVmcyh4ZW5kZXYsIGRhdGFwbGFuZS0+bnJfcmlu Z19yZWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmxvY2FsX2Vycik7Ci0g ICAgaWYgKGxvY2FsX2VycikgewotICAgICAgICBlcnJvcl9wcm9wYWdhdGUoZXJycCwgbG9jYWxf ZXJyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJwKTsKKyAgICBpZiAo KmVycnApIHsKICAgICAgICAgZ290byBzdG9wOwogICAgIH0KIApAQCAtNzg2LDkgKzc4NSw4IEBA IHZvaWQgeGVuX2Jsb2NrX2RhdGFwbGFuZV9zdGFydChYZW5CbG9ja0RhdGFQbGFuZSAqZGF0YXBs YW5lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFw bGFuZS0+cmluZ19yZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZGF0YXBsYW5lLT5ucl9yaW5nX3JlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZsb2NhbF9lcnIpOwotICAgIGlmIChs b2NhbF9lcnIpIHsKLSAgICAgICAgZXJyb3JfcHJvcGFnYXRlKGVycnAsIGxvY2FsX2Vycik7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJycCk7CisgICAg aWYgKCplcnJwKSB7CiAgICAgICAgIGdvdG8gc3RvcDsKICAgICB9CiAKQEAgLTgyMSw5ICs4MTks OCBAQCB2b2lkIHhlbl9ibG9ja19kYXRhcGxhbmVfc3RhcnQoWGVuQmxvY2tEYXRhUGxhbmUgKmRh dGFwbGFuZSwKICAgICBkYXRhcGxhbmUtPmV2ZW50X2NoYW5uZWwgPQogICAgICAgICB4ZW5fZGV2 aWNlX2JpbmRfZXZlbnRfY2hhbm5lbCh4ZW5kZXYsIGV2ZW50X2NoYW5uZWwsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhlbl9ibG9ja19kYXRhcGxhbmVfZXZlbnQsIGRh dGFwbGFuZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmxvY2FsX2Vy cik7Ci0gICAgaWYgKGxvY2FsX2VycikgewotICAgICAgICBlcnJvcl9wcm9wYWdhdGUoZXJycCwg bG9jYWxfZXJyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJycCk7 CisgICAgaWYgKCplcnJwKSB7CiAgICAgICAgIGdvdG8gc3RvcDsKICAgICB9CiAKZGlmZiAtLWdp dCBhL2h3L2Jsb2NrL3hlbi1ibG9jay5jIGIvaHcvYmxvY2sveGVuLWJsb2NrLmMKaW5kZXggMzg4 NTQ2NDUxMy4uNWQ0Yzk0MTgxYyAxMDA2NDQKLS0tIGEvaHcvYmxvY2sveGVuLWJsb2NrLmMKKysr IGIvaHcvYmxvY2sveGVuLWJsb2NrLmMKQEAgLTE5NSw2ICsxOTUsNyBAQCBzdGF0aWMgY29uc3Qg QmxvY2tEZXZPcHMgeGVuX2Jsb2NrX2Rldl9vcHMgPSB7CiAKIHN0YXRpYyB2b2lkIHhlbl9ibG9j a19yZWFsaXplKFhlbkRldmljZSAqeGVuZGV2LCBFcnJvciAqKmVycnApCiB7CisgICAgRVJSUF9B VVRPX1BST1BBR0FURSgpOwogICAgIFhlbkJsb2NrRGV2aWNlICpibG9ja2RldiA9IFhFTl9CTE9D S19ERVZJQ0UoeGVuZGV2KTsKICAgICBYZW5CbG9ja0RldmljZUNsYXNzICpibG9ja2Rldl9jbGFz cyA9CiAgICAgICAgIFhFTl9CTE9DS19ERVZJQ0VfR0VUX0NMQVNTKHhlbmRldik7CkBAIC0yMDIs NyArMjAzLDYgQEAgc3RhdGljIHZvaWQgeGVuX2Jsb2NrX3JlYWxpemUoWGVuRGV2aWNlICp4ZW5k ZXYsIEVycm9yICoqZXJycCkKICAgICBYZW5CbG9ja1ZkZXYgKnZkZXYgPSAmYmxvY2tkZXYtPnBy b3BzLnZkZXY7CiAgICAgQmxvY2tDb25mICpjb25mID0gJmJsb2NrZGV2LT5wcm9wcy5jb25mOwog ICAgIEJsb2NrQmFja2VuZCAqYmxrID0gY29uZi0+YmxrOwotICAgIEVycm9yICpsb2NhbF9lcnIg PSBOVUxMOwogCiAgICAgaWYgKHZkZXYtPnR5cGUgPT0gWEVOX0JMT0NLX1ZERVZfVFlQRV9JTlZB TElEKSB7CiAgICAgICAgIGVycm9yX3NldGcoZXJycCwgInZkZXYgcHJvcGVydHkgbm90IHNldCIp OwpAQCAtMjEyLDkgKzIxMiw4IEBAIHN0YXRpYyB2b2lkIHhlbl9ibG9ja19yZWFsaXplKFhlbkRl dmljZSAqeGVuZGV2LCBFcnJvciAqKmVycnApCiAgICAgdHJhY2VfeGVuX2Jsb2NrX3JlYWxpemUo dHlwZSwgdmRldi0+ZGlzaywgdmRldi0+cGFydGl0aW9uKTsKIAogICAgIGlmIChibG9ja2Rldl9j bGFzcy0+cmVhbGl6ZSkgewotICAgICAgICBibG9ja2Rldl9jbGFzcy0+cmVhbGl6ZShibG9ja2Rl diwgJmxvY2FsX2Vycik7Ci0gICAgICAgIGlmIChsb2NhbF9lcnIpIHsKLSAgICAgICAgICAgIGVy cm9yX3Byb3BhZ2F0ZShlcnJwLCBsb2NhbF9lcnIpOworICAgICAgICBibG9ja2Rldl9jbGFzcy0+ cmVhbGl6ZShibG9ja2RldiwgZXJycCk7CisgICAgICAgIGlmICgqZXJycCkgewogICAgICAgICAg ICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQpAQCAtMjg0LDggKzI4Myw4IEBAIHN0YXRpYyB2 b2lkIHhlbl9ibG9ja19mcm9udGVuZF9jaGFuZ2VkKFhlbkRldmljZSAqeGVuZGV2LAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSB4ZW5idXNfc3RhdGUgZnJvbnRl bmRfc3RhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFcnJvciAq KmVycnApCiB7CisgICAgRVJSUF9BVVRPX1BST1BBR0FURSgpOwogICAgIGVudW0geGVuYnVzX3N0 YXRlIGJhY2tlbmRfc3RhdGUgPSB4ZW5fZGV2aWNlX2JhY2tlbmRfZ2V0X3N0YXRlKHhlbmRldik7 Ci0gICAgRXJyb3IgKmxvY2FsX2VyciA9IE5VTEw7CiAKICAgICBzd2l0Y2ggKGZyb250ZW5kX3N0 YXRlKSB7CiAgICAgY2FzZSBYZW5idXNTdGF0ZUluaXRpYWxpc2VkOgpAQCAtMjk0LDE1ICsyOTMs MTMgQEAgc3RhdGljIHZvaWQgeGVuX2Jsb2NrX2Zyb250ZW5kX2NoYW5nZWQoWGVuRGV2aWNlICp4 ZW5kZXYsCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAgIHhlbl9ibG9j a19kaXNjb25uZWN0KHhlbmRldiwgJmxvY2FsX2Vycik7Ci0gICAgICAgIGlmIChsb2NhbF9lcnIp IHsKLSAgICAgICAgICAgIGVycm9yX3Byb3BhZ2F0ZShlcnJwLCBsb2NhbF9lcnIpOworICAgICAg ICB4ZW5fYmxvY2tfZGlzY29ubmVjdCh4ZW5kZXYsIGVycnApOworICAgICAgICBpZiAoKmVycnAp IHsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgeGVuX2Jsb2NrX2Nv bm5lY3QoeGVuZGV2LCAmbG9jYWxfZXJyKTsKLSAgICAgICAgaWYgKGxvY2FsX2VycikgewotICAg ICAgICAgICAgZXJyb3JfcHJvcGFnYXRlKGVycnAsIGxvY2FsX2Vycik7CisgICAgICAgIHhlbl9i bG9ja19jb25uZWN0KHhlbmRldiwgZXJycCk7CisgICAgICAgIGlmICgqZXJycCkgewogICAgICAg ICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApAQCAtMzE1LDkgKzMxMiw4IEBAIHN0YXRpYyB2b2lk IHhlbl9ibG9ja19mcm9udGVuZF9jaGFuZ2VkKFhlbkRldmljZSAqeGVuZGV2LAogCiAgICAgY2Fz ZSBYZW5idXNTdGF0ZUNsb3NlZDoKICAgICBjYXNlIFhlbmJ1c1N0YXRlVW5rbm93bjoKLSAgICAg ICAgeGVuX2Jsb2NrX2Rpc2Nvbm5lY3QoeGVuZGV2LCAmbG9jYWxfZXJyKTsKLSAgICAgICAgaWYg KGxvY2FsX2VycikgewotICAgICAgICAgICAgZXJyb3JfcHJvcGFnYXRlKGVycnAsIGxvY2FsX2Vy cik7CisgICAgICAgIHhlbl9ibG9ja19kaXNjb25uZWN0KHhlbmRldiwgZXJycCk7CisgICAgICAg IGlmICgqZXJycCkgewogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApAQCAtNDA0LDEw ICs0MDAsMTAgQEAgc3RhdGljIGludCB2YmRfbmFtZV90b19kaXNrKGNvbnN0IGNoYXIgKm5hbWUs IGNvbnN0IGNoYXIgKiplbmRwLAogc3RhdGljIHZvaWQgeGVuX2Jsb2NrX3NldF92ZGV2KE9iamVj dCAqb2JqLCBWaXNpdG9yICp2LCBjb25zdCBjaGFyICpuYW1lLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHZvaWQgKm9wYXF1ZSwgRXJyb3IgKiplcnJwKQogeworICAgIEVSUlBfQVVU T19QUk9QQUdBVEUoKTsKICAgICBEZXZpY2VTdGF0ZSAqZGV2ID0gREVWSUNFKG9iaik7CiAgICAg UHJvcGVydHkgKnByb3AgPSBvcGFxdWU7CiAgICAgWGVuQmxvY2tWZGV2ICp2ZGV2ID0gcWRldl9n ZXRfcHJvcF9wdHIoZGV2LCBwcm9wKTsKLSAgICBFcnJvciAqbG9jYWxfZXJyID0gTlVMTDsKICAg ICBjaGFyICpzdHIsICpwOwogICAgIGNvbnN0IGNoYXIgKmVuZDsKIApAQCAtNDE2LDkgKzQxMiw4 IEBAIHN0YXRpYyB2b2lkIHhlbl9ibG9ja19zZXRfdmRldihPYmplY3QgKm9iaiwgVmlzaXRvciAq diwgY29uc3QgY2hhciAqbmFtZSwKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHZpc2l0 X3R5cGVfc3RyKHYsIG5hbWUsICZzdHIsICZsb2NhbF9lcnIpOwotICAgIGlmIChsb2NhbF9lcnIp IHsKLSAgICAgICAgZXJyb3JfcHJvcGFnYXRlKGVycnAsIGxvY2FsX2Vycik7CisgICAgdmlzaXRf dHlwZV9zdHIodiwgbmFtZSwgJnN0ciwgZXJycCk7CisgICAgaWYgKCplcnJwKSB7CiAgICAgICAg IHJldHVybjsKICAgICB9CiAKQEAgLTY3Miw5ICs2NjcsOSBAQCBzdGF0aWMgdm9pZCB4ZW5fYmxv Y2tfYmxvY2tkZXZfZGVsKGNvbnN0IGNoYXIgKm5vZGVfbmFtZSwgRXJyb3IgKiplcnJwKQogc3Rh dGljIGNoYXIgKnhlbl9ibG9ja19ibG9ja2Rldl9hZGQoY29uc3QgY2hhciAqaWQsIFFEaWN0ICpx ZGljdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVycm9yICoqZXJycCkK IHsKKyAgICBFUlJQX0FVVE9fUFJPUEFHQVRFKCk7CiAgICAgY29uc3QgY2hhciAqZHJpdmVyID0g cWRpY3RfZ2V0X3RyeV9zdHIocWRpY3QsICJkcml2ZXIiKTsKICAgICBCbG9ja2Rldk9wdGlvbnMg Km9wdGlvbnMgPSBOVUxMOwotICAgIEVycm9yICpsb2NhbF9lcnIgPSBOVUxMOwogICAgIGNoYXIg Km5vZGVfbmFtZTsKICAgICBWaXNpdG9yICp2OwogCkBAIC02ODksMTggKzY4NCwxNiBAQCBzdGF0 aWMgY2hhciAqeGVuX2Jsb2NrX2Jsb2NrZGV2X2FkZChjb25zdCBjaGFyICppZCwgUURpY3QgKnFk aWN0LAogICAgIHRyYWNlX3hlbl9ibG9ja19ibG9ja2Rldl9hZGQobm9kZV9uYW1lKTsKIAogICAg IHYgPSBxb2JqZWN0X2lucHV0X3Zpc2l0b3JfbmV3KFFPQkpFQ1QocWRpY3QpKTsKLSAgICB2aXNp dF90eXBlX0Jsb2NrZGV2T3B0aW9ucyh2LCBOVUxMLCAmb3B0aW9ucywgJmxvY2FsX2Vycik7Cisg ICAgdmlzaXRfdHlwZV9CbG9ja2Rldk9wdGlvbnModiwgTlVMTCwgJm9wdGlvbnMsIGVycnApOwog ICAgIHZpc2l0X2ZyZWUodik7CiAKLSAgICBpZiAobG9jYWxfZXJyKSB7Ci0gICAgICAgIGVycm9y X3Byb3BhZ2F0ZShlcnJwLCBsb2NhbF9lcnIpOworICAgIGlmICgqZXJycCkgewogICAgICAgICBn b3RvIGZhaWw7CiAgICAgfQogCi0gICAgcW1wX2Jsb2NrZGV2X2FkZChvcHRpb25zLCAmbG9jYWxf ZXJyKTsKKyAgICBxbXBfYmxvY2tkZXZfYWRkKG9wdGlvbnMsIGVycnApOwogCi0gICAgaWYgKGxv Y2FsX2VycikgewotICAgICAgICBlcnJvcl9wcm9wYWdhdGUoZXJycCwgbG9jYWxfZXJyKTsKKyAg ICBpZiAoKmVycnApIHsKICAgICAgICAgZ290byBmYWlsOwogICAgIH0KIApAQCAtNzE5LDE0ICs3 MTIsMTIgQEAgZmFpbDoKIAogc3RhdGljIHZvaWQgeGVuX2Jsb2NrX2RyaXZlX2Rlc3Ryb3koWGVu QmxvY2tEcml2ZSAqZHJpdmUsIEVycm9yICoqZXJycCkKIHsKKyAgICBFUlJQX0FVVE9fUFJPUEFH QVRFKCk7CiAgICAgY2hhciAqbm9kZV9uYW1lID0gZHJpdmUtPm5vZGVfbmFtZTsKIAogICAgIGlm IChub2RlX25hbWUpIHsKLSAgICAgICAgRXJyb3IgKmxvY2FsX2VyciA9IE5VTEw7Ci0KLSAgICAg ICAgeGVuX2Jsb2NrX2Jsb2NrZGV2X2RlbChub2RlX25hbWUsICZsb2NhbF9lcnIpOwotICAgICAg ICBpZiAobG9jYWxfZXJyKSB7Ci0gICAgICAgICAgICBlcnJvcl9wcm9wYWdhdGUoZXJycCwgbG9j YWxfZXJyKTsKKyAgICAgICAgeGVuX2Jsb2NrX2Jsb2NrZGV2X2RlbChub2RlX25hbWUsIGVycnAp OworICAgICAgICBpZiAoKmVycnApIHsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog ICAgICAgICBnX2ZyZWUobm9kZV9uYW1lKTsKQEAgLTc0MCw2ICs3MzEsNyBAQCBzdGF0aWMgWGVu QmxvY2tEcml2ZSAqeGVuX2Jsb2NrX2RyaXZlX2NyZWF0ZShjb25zdCBjaGFyICppZCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmRldmlj ZV90eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUURp Y3QgKm9wdHMsIEVycm9yICoqZXJycCkKIHsKKyAgICBFUlJQX0FVVE9fUFJPUEFHQVRFKCk7CiAg ICAgY29uc3QgY2hhciAqcGFyYW1zID0gcWRpY3RfZ2V0X3RyeV9zdHIob3B0cywgInBhcmFtcyIp OwogICAgIGNvbnN0IGNoYXIgKm1vZGUgPSBxZGljdF9nZXRfdHJ5X3N0cihvcHRzLCAibW9kZSIp OwogICAgIGNvbnN0IGNoYXIgKmRpcmVjdF9pb19zYWZlID0gcWRpY3RfZ2V0X3RyeV9zdHIob3B0 cywgImRpcmVjdC1pby1zYWZlIik7CkBAIC03NDcsNyArNzM5LDYgQEAgc3RhdGljIFhlbkJsb2Nr RHJpdmUgKnhlbl9ibG9ja19kcml2ZV9jcmVhdGUoY29uc3QgY2hhciAqaWQsCiAgICAgY2hhciAq ZHJpdmVyID0gTlVMTDsKICAgICBjaGFyICpmaWxlbmFtZSA9IE5VTEw7CiAgICAgWGVuQmxvY2tE cml2ZSAqZHJpdmUgPSBOVUxMOwotICAgIEVycm9yICpsb2NhbF9lcnIgPSBOVUxMOwogICAgIFFE aWN0ICpmaWxlX2xheWVyOwogICAgIFFEaWN0ICpkcml2ZXJfbGF5ZXI7CiAKQEAgLTgyNiwxMyAr ODE3LDEyIEBAIHN0YXRpYyBYZW5CbG9ja0RyaXZlICp4ZW5fYmxvY2tfZHJpdmVfY3JlYXRlKGNv bnN0IGNoYXIgKmlkLAogCiAgICAgZ19hc3NlcnQoIWRyaXZlLT5ub2RlX25hbWUpOwogICAgIGRy aXZlLT5ub2RlX25hbWUgPSB4ZW5fYmxvY2tfYmxvY2tkZXZfYWRkKGRyaXZlLT5pZCwgZHJpdmVy X2xheWVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZs b2NhbF9lcnIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGVycnApOwogCiAgICAgcW9iamVjdF91bnJlZihkcml2ZXJfbGF5ZXIpOwogCiBkb25lOgotICAg IGlmIChsb2NhbF9lcnIpIHsKLSAgICAgICAgZXJyb3JfcHJvcGFnYXRlKGVycnAsIGxvY2FsX2Vy cik7CisgICAgaWYgKCplcnJwKSB7CiAgICAgICAgIHhlbl9ibG9ja19kcml2ZV9kZXN0cm95KGRy aXZlLCBOVUxMKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQpAQCAtODU3LDggKzg0Nyw4 IEBAIHN0YXRpYyB2b2lkIHhlbl9ibG9ja19pb3RocmVhZF9kZXN0cm95KFhlbkJsb2NrSU9UaHJl YWQgKmlvdGhyZWFkLAogc3RhdGljIFhlbkJsb2NrSU9UaHJlYWQgKnhlbl9ibG9ja19pb3RocmVh ZF9jcmVhdGUoY29uc3QgY2hhciAqaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBFcnJvciAqKmVycnApCiB7CisgICAgRVJSUF9BVVRPX1BST1BB R0FURSgpOwogICAgIFhlbkJsb2NrSU9UaHJlYWQgKmlvdGhyZWFkID0gZ19uZXcoWGVuQmxvY2tJ T1RocmVhZCwgMSk7Ci0gICAgRXJyb3IgKmxvY2FsX2VyciA9IE5VTEw7CiAgICAgUURpY3QgKm9w dHM7CiAgICAgUU9iamVjdCAqcmV0X2RhdGE7CiAKQEAgLTg2NywxMyArODU3LDExIEBAIHN0YXRp YyBYZW5CbG9ja0lPVGhyZWFkICp4ZW5fYmxvY2tfaW90aHJlYWRfY3JlYXRlKGNvbnN0IGNoYXIg KmlkLAogICAgIG9wdHMgPSBxZGljdF9uZXcoKTsKICAgICBxZGljdF9wdXRfc3RyKG9wdHMsICJx b20tdHlwZSIsIFRZUEVfSU9USFJFQUQpOwogICAgIHFkaWN0X3B1dF9zdHIob3B0cywgImlkIiwg aWQpOwotICAgIHFtcF9vYmplY3RfYWRkKG9wdHMsICZyZXRfZGF0YSwgJmxvY2FsX2Vycik7Cisg ICAgcW1wX29iamVjdF9hZGQob3B0cywgJnJldF9kYXRhLCBlcnJwKTsKICAgICBxb2JqZWN0X3Vu cmVmKG9wdHMpOwogICAgIHFvYmplY3RfdW5yZWYocmV0X2RhdGEpOwogCi0gICAgaWYgKGxvY2Fs X2VycikgewotICAgICAgICBlcnJvcl9wcm9wYWdhdGUoZXJycCwgbG9jYWxfZXJyKTsKLQorICAg IGlmICgqZXJycCkgewogICAgICAgICBnX2ZyZWUoaW90aHJlYWQtPmlkKTsKICAgICAgICAgZ19m cmVlKGlvdGhyZWFkKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC04ODUsNiArODczLDcgQEAg c3RhdGljIFhlbkJsb2NrSU9UaHJlYWQgKnhlbl9ibG9ja19pb3RocmVhZF9jcmVhdGUoY29uc3Qg Y2hhciAqaWQsCiBzdGF0aWMgdm9pZCB4ZW5fYmxvY2tfZGV2aWNlX2NyZWF0ZShYZW5CYWNrZW5k SW5zdGFuY2UgKmJhY2tlbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBR RGljdCAqb3B0cywgRXJyb3IgKiplcnJwKQogeworICAgIEVSUlBfQVVUT19QUk9QQUdBVEUoKTsK ICAgICBYZW5CdXMgKnhlbmJ1cyA9IHhlbl9iYWNrZW5kX2dldF9idXMoYmFja2VuZCk7CiAgICAg Y29uc3QgY2hhciAqbmFtZSA9IHhlbl9iYWNrZW5kX2dldF9uYW1lKGJhY2tlbmQpOwogICAgIHVu c2lnbmVkIGxvbmcgbnVtYmVyOwpAQCAtODkyLDcgKzg4MSw2IEBAIHN0YXRpYyB2b2lkIHhlbl9i bG9ja19kZXZpY2VfY3JlYXRlKFhlbkJhY2tlbmRJbnN0YW5jZSAqYmFja2VuZCwKICAgICBYZW5C bG9ja0RyaXZlICpkcml2ZSA9IE5VTEw7CiAgICAgWGVuQmxvY2tJT1RocmVhZCAqaW90aHJlYWQg PSBOVUxMOwogICAgIFhlbkRldmljZSAqeGVuZGV2ID0gTlVMTDsKLSAgICBFcnJvciAqbG9jYWxf ZXJyID0gTlVMTDsKICAgICBjb25zdCBjaGFyICp0eXBlOwogICAgIFhlbkJsb2NrRGV2aWNlICpi bG9ja2RldjsKIApAQCAtOTI0LDUyICs5MTIsNDggQEAgc3RhdGljIHZvaWQgeGVuX2Jsb2NrX2Rl dmljZV9jcmVhdGUoWGVuQmFja2VuZEluc3RhbmNlICpiYWNrZW5kLAogICAgICAgICBnb3RvIGZh aWw7CiAgICAgfQogCi0gICAgZHJpdmUgPSB4ZW5fYmxvY2tfZHJpdmVfY3JlYXRlKHZkZXYsIGRl dmljZV90eXBlLCBvcHRzLCAmbG9jYWxfZXJyKTsKKyAgICBkcml2ZSA9IHhlbl9ibG9ja19kcml2 ZV9jcmVhdGUodmRldiwgZGV2aWNlX3R5cGUsIG9wdHMsIGVycnApOwogICAgIGlmICghZHJpdmUp IHsKLSAgICAgICAgZXJyb3JfcHJvcGFnYXRlX3ByZXBlbmQoZXJycCwgbG9jYWxfZXJyLCAiZmFp bGVkIHRvIGNyZWF0ZSBkcml2ZTogIik7CisgICAgICAgIGVycm9yX3ByZXBlbmQoZXJycCwgImZh aWxlZCB0byBjcmVhdGUgZHJpdmU6ICIpOwogICAgICAgICBnb3RvIGZhaWw7CiAgICAgfQogCi0g ICAgaW90aHJlYWQgPSB4ZW5fYmxvY2tfaW90aHJlYWRfY3JlYXRlKHZkZXYsICZsb2NhbF9lcnIp OwotICAgIGlmIChsb2NhbF9lcnIpIHsKLSAgICAgICAgZXJyb3JfcHJvcGFnYXRlX3ByZXBlbmQo ZXJycCwgbG9jYWxfZXJyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmFpbGVk IHRvIGNyZWF0ZSBpb3RocmVhZDogIik7CisgICAgaW90aHJlYWQgPSB4ZW5fYmxvY2tfaW90aHJl YWRfY3JlYXRlKHZkZXYsIGVycnApOworICAgIGlmICgqZXJycCkgeworICAgICAgICBlcnJvcl9w cmVwZW5kKGVycnAsICJmYWlsZWQgdG8gY3JlYXRlIGlvdGhyZWFkOiAiKTsKICAgICAgICAgZ290 byBmYWlsOwogICAgIH0KIAogICAgIHhlbmRldiA9IFhFTl9ERVZJQ0UocWRldl9jcmVhdGUoQlVT KHhlbmJ1cyksIHR5cGUpKTsKICAgICBibG9ja2RldiA9IFhFTl9CTE9DS19ERVZJQ0UoeGVuZGV2 KTsKIAotICAgIG9iamVjdF9wcm9wZXJ0eV9zZXRfc3RyKE9CSkVDVCh4ZW5kZXYpLCB2ZGV2LCAi dmRldiIsICZsb2NhbF9lcnIpOwotICAgIGlmIChsb2NhbF9lcnIpIHsKLSAgICAgICAgZXJyb3Jf cHJvcGFnYXRlX3ByZXBlbmQoZXJycCwgbG9jYWxfZXJyLCAiZmFpbGVkIHRvIHNldCAndmRldic6 ICIpOworICAgIG9iamVjdF9wcm9wZXJ0eV9zZXRfc3RyKE9CSkVDVCh4ZW5kZXYpLCB2ZGV2LCAi dmRldiIsIGVycnApOworICAgIGlmICgqZXJycCkgeworICAgICAgICBlcnJvcl9wcmVwZW5kKGVy cnAsICJmYWlsZWQgdG8gc2V0ICd2ZGV2JzogIik7CiAgICAgICAgIGdvdG8gZmFpbDsKICAgICB9 CiAKICAgICBvYmplY3RfcHJvcGVydHlfc2V0X3N0cihPQkpFQ1QoeGVuZGV2KSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB4ZW5fYmxvY2tfZHJpdmVfZ2V0X25vZGVfbmFtZShkcml2ZSks ICJkcml2ZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJmxvY2FsX2Vycik7Ci0gICAg aWYgKGxvY2FsX2VycikgewotICAgICAgICBlcnJvcl9wcm9wYWdhdGVfcHJlcGVuZChlcnJwLCBs b2NhbF9lcnIsICJmYWlsZWQgdG8gc2V0ICdkcml2ZSc6ICIpOworICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGVycnApOworICAgIGlmICgqZXJycCkgeworICAgICAgICBlcnJvcl9wcmVwZW5k KGVycnAsICJmYWlsZWQgdG8gc2V0ICdkcml2ZSc6ICIpOwogICAgICAgICBnb3RvIGZhaWw7CiAg ICAgfQogCiAgICAgb2JqZWN0X3Byb3BlcnR5X3NldF9zdHIoT0JKRUNUKHhlbmRldiksIGlvdGhy ZWFkLT5pZCwgImlvdGhyZWFkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbG9jYWxf ZXJyKTsKLSAgICBpZiAobG9jYWxfZXJyKSB7Ci0gICAgICAgIGVycm9yX3Byb3BhZ2F0ZV9wcmVw ZW5kKGVycnAsIGxvY2FsX2VyciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZh aWxlZCB0byBzZXQgJ2lvdGhyZWFkJzogIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZXJycCk7CisgICAgaWYgKCplcnJwKSB7CisgICAgICAgIGVycm9yX3ByZXBlbmQoZXJycCwgImZh aWxlZCB0byBzZXQgJ2lvdGhyZWFkJzogIik7CiAgICAgICAgIGdvdG8gZmFpbDsKICAgICB9CiAK ICAgICBibG9ja2Rldi0+aW90aHJlYWQgPSBpb3RocmVhZDsKICAgICBibG9ja2Rldi0+ZHJpdmUg PSBkcml2ZTsKIAotICAgIG9iamVjdF9wcm9wZXJ0eV9zZXRfYm9vbChPQkpFQ1QoeGVuZGV2KSwg dHJ1ZSwgInJlYWxpemVkIiwgJmxvY2FsX2Vycik7Ci0gICAgaWYgKGxvY2FsX2VycikgewotICAg ICAgICBlcnJvcl9wcm9wYWdhdGVfcHJlcGVuZChlcnJwLCBsb2NhbF9lcnIsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICJyZWFsaXphdGlvbiBvZiBkZXZpY2UgJXMgZmFpbGVkOiAi LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlKTsKKyAgICBvYmplY3RfcHJv cGVydHlfc2V0X2Jvb2woT0JKRUNUKHhlbmRldiksIHRydWUsICJyZWFsaXplZCIsIGVycnApOwor ICAgIGlmICgqZXJycCkgeworICAgICAgICBlcnJvcl9wcmVwZW5kKGVycnAsICJyZWFsaXphdGlv biBvZiBkZXZpY2UgJXMgZmFpbGVkOiAiLCB0eXBlKTsKICAgICAgICAgZ290byBmYWlsOwogICAg IH0KIApAQCAtOTkzLDYgKzk3Nyw3IEBAIGZhaWw6CiBzdGF0aWMgdm9pZCB4ZW5fYmxvY2tfZGV2 aWNlX2Rlc3Ryb3koWGVuQmFja2VuZEluc3RhbmNlICpiYWNrZW5kLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEVycm9yICoqZXJycCkKIHsKKyAgICBFUlJQX0FVVE9fUFJP UEFHQVRFKCk7CiAgICAgWGVuRGV2aWNlICp4ZW5kZXYgPSB4ZW5fYmFja2VuZF9nZXRfZGV2aWNl KGJhY2tlbmQpOwogICAgIFhlbkJsb2NrRGV2aWNlICpibG9ja2RldiA9IFhFTl9CTE9DS19ERVZJ Q0UoeGVuZGV2KTsKICAgICBYZW5CbG9ja1ZkZXYgKnZkZXYgPSAmYmxvY2tkZXYtPnByb3BzLnZk ZXY7CkBAIC0xMDA0LDIzICs5ODksMTcgQEAgc3RhdGljIHZvaWQgeGVuX2Jsb2NrX2RldmljZV9k ZXN0cm95KFhlbkJhY2tlbmRJbnN0YW5jZSAqYmFja2VuZCwKICAgICBvYmplY3RfdW5wYXJlbnQo T0JKRUNUKHhlbmRldikpOwogCiAgICAgaWYgKGlvdGhyZWFkKSB7Ci0gICAgICAgIEVycm9yICps b2NhbF9lcnIgPSBOVUxMOwotCi0gICAgICAgIHhlbl9ibG9ja19pb3RocmVhZF9kZXN0cm95KGlv dGhyZWFkLCAmbG9jYWxfZXJyKTsKLSAgICAgICAgaWYgKGxvY2FsX2VycikgewotICAgICAgICAg ICAgZXJyb3JfcHJvcGFnYXRlX3ByZXBlbmQoZXJycCwgbG9jYWxfZXJyLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAiZmFpbGVkIHRvIGRlc3Ryb3kgaW90aHJlYWQ6ICIpOworICAg ICAgICB4ZW5fYmxvY2tfaW90aHJlYWRfZGVzdHJveShpb3RocmVhZCwgZXJycCk7CisgICAgICAg IGlmICgqZXJycCkgeworICAgICAgICAgICAgZXJyb3JfcHJlcGVuZChlcnJwLCAiZmFpbGVkIHRv IGRlc3Ryb3kgaW90aHJlYWQ6ICIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAg ICAgfQogCiAgICAgaWYgKGRyaXZlKSB7Ci0gICAgICAgIEVycm9yICpsb2NhbF9lcnIgPSBOVUxM OwotCi0gICAgICAgIHhlbl9ibG9ja19kcml2ZV9kZXN0cm95KGRyaXZlLCAmbG9jYWxfZXJyKTsK LSAgICAgICAgaWYgKGxvY2FsX2VycikgewotICAgICAgICAgICAgZXJyb3JfcHJvcGFnYXRlX3By ZXBlbmQoZXJycCwgbG9jYWxfZXJyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi ZmFpbGVkIHRvIGRlc3Ryb3kgZHJpdmU6ICIpOworICAgICAgICB4ZW5fYmxvY2tfZHJpdmVfZGVz dHJveShkcml2ZSwgZXJycCk7CisgICAgICAgIGlmICgqZXJycCkgeworICAgICAgICAgICAgZXJy b3JfcHJlcGVuZChlcnJwLCAiZmFpbGVkIHRvIGRlc3Ryb3kgZHJpdmU6ICIpOwogICAgICAgICB9 CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvaHcvcGNpLWhvc3QveGVuX2lnZF9wdC5jIGIvaHcvcGNp LWhvc3QveGVuX2lnZF9wdC5jCmluZGV4IGVmY2M5MzQ3ZmYuLjI5YWRlOWNhMjUgMTAwNjQ0Ci0t LSBhL2h3L3BjaS1ob3N0L3hlbl9pZ2RfcHQuYworKysgYi9ody9wY2ktaG9zdC94ZW5faWdkX3B0 LmMKQEAgLTc5LDE3ICs3OSwxNiBAQCBzdGF0aWMgdm9pZCBob3N0X3BjaV9jb25maWdfcmVhZChp bnQgcG9zLCBpbnQgbGVuLCB1aW50MzJfdCAqdmFsLCBFcnJvciAqKmVycnApCiAKIHN0YXRpYyB2 b2lkIGlnZF9wdF9pNDQwZnhfcmVhbGl6ZShQQ0lEZXZpY2UgKnBjaV9kZXYsIEVycm9yICoqZXJy cCkKIHsKKyAgICBFUlJQX0FVVE9fUFJPUEFHQVRFKCk7CiAgICAgdWludDMyX3QgdmFsID0gMDsK ICAgICBzaXplX3QgaTsKICAgICBpbnQgcG9zLCBsZW47Ci0gICAgRXJyb3IgKmxvY2FsX2VyciA9 IE5VTEw7CiAKICAgICBmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpZ2RfaG9zdF9icmlkZ2Vf aW5mb3MpOyBpKyspIHsKICAgICAgICAgcG9zID0gaWdkX2hvc3RfYnJpZGdlX2luZm9zW2ldLm9m ZnNldDsKICAgICAgICAgbGVuID0gaWdkX2hvc3RfYnJpZGdlX2luZm9zW2ldLmxlbjsKLSAgICAg ICAgaG9zdF9wY2lfY29uZmlnX3JlYWQocG9zLCBsZW4sICZ2YWwsICZsb2NhbF9lcnIpOwotICAg ICAgICBpZiAobG9jYWxfZXJyKSB7Ci0gICAgICAgICAgICBlcnJvcl9wcm9wYWdhdGUoZXJycCwg bG9jYWxfZXJyKTsKKyAgICAgICAgaG9zdF9wY2lfY29uZmlnX3JlYWQocG9zLCBsZW4sICZ2YWws IGVycnApOworICAgICAgICBpZiAoKmVycnApIHsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg ICAgfQogICAgICAgICBwY2lfZGVmYXVsdF93cml0ZV9jb25maWcocGNpX2RldiwgcG9zLCB2YWws IGxlbik7CmRpZmYgLS1naXQgYS9ody94ZW4veGVuLWJhY2tlbmQuYyBiL2h3L3hlbi94ZW4tYmFj a2VuZC5jCmluZGV4IGRhMDY1ZjgxYjcuLjFjYzA2OTQwNTMgMTAwNjQ0Ci0tLSBhL2h3L3hlbi94 ZW4tYmFja2VuZC5jCisrKyBiL2h3L3hlbi94ZW4tYmFja2VuZC5jCkBAIC05OCw5ICs5OCw5IEBA IHN0YXRpYyB2b2lkIHhlbl9iYWNrZW5kX2xpc3RfcmVtb3ZlKFhlbkJhY2tlbmRJbnN0YW5jZSAq YmFja2VuZCkKIHZvaWQgeGVuX2JhY2tlbmRfZGV2aWNlX2NyZWF0ZShYZW5CdXMgKnhlbmJ1cywg Y29uc3QgY2hhciAqdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj aGFyICpuYW1lLCBRRGljdCAqb3B0cywgRXJyb3IgKiplcnJwKQogeworICAgIEVSUlBfQVVUT19Q Uk9QQUdBVEUoKTsKICAgICBjb25zdCBYZW5CYWNrZW5kSW1wbCAqaW1wbCA9IHhlbl9iYWNrZW5k X3RhYmxlX2xvb2t1cCh0eXBlKTsKICAgICBYZW5CYWNrZW5kSW5zdGFuY2UgKmJhY2tlbmQ7Ci0g ICAgRXJyb3IgKmxvY2FsX2Vycm9yID0gTlVMTDsKIAogICAgIGlmICghaW1wbCkgewogICAgICAg ICByZXR1cm47CkBAIC0xMTAsOSArMTEwLDggQEAgdm9pZCB4ZW5fYmFja2VuZF9kZXZpY2VfY3Jl YXRlKFhlbkJ1cyAqeGVuYnVzLCBjb25zdCBjaGFyICp0eXBlLAogICAgIGJhY2tlbmQtPnhlbmJ1 cyA9IHhlbmJ1czsKICAgICBiYWNrZW5kLT5uYW1lID0gZ19zdHJkdXAobmFtZSk7CiAKLSAgICBp bXBsLT5jcmVhdGUoYmFja2VuZCwgb3B0cywgJmxvY2FsX2Vycm9yKTsKLSAgICBpZiAobG9jYWxf ZXJyb3IpIHsKLSAgICAgICAgZXJyb3JfcHJvcGFnYXRlKGVycnAsIGxvY2FsX2Vycm9yKTsKKyAg ICBpbXBsLT5jcmVhdGUoYmFja2VuZCwgb3B0cywgZXJycCk7CisgICAgaWYgKCplcnJwKSB7CiAg ICAgICAgIGdfZnJlZShiYWNrZW5kLT5uYW1lKTsKICAgICAgICAgZ19mcmVlKGJhY2tlbmQpOwog ICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9ody94ZW4veGVuLWJ1cy5jIGIvaHcveGVuL3hl bi1idXMuYwppbmRleCAxODIzN2IzNGVhLi45NzI1OWM5NjRiIDEwMDY0NAotLS0gYS9ody94ZW4v eGVuLWJ1cy5jCisrKyBiL2h3L3hlbi94ZW4tYnVzLmMKQEAgLTUzLDkgKzUzLDkgQEAgc3RhdGlj IGNoYXIgKnhlbl9kZXZpY2VfZ2V0X2Zyb250ZW5kX3BhdGgoWGVuRGV2aWNlICp4ZW5kZXYpCiAK IHN0YXRpYyB2b2lkIHhlbl9kZXZpY2VfdW5wbHVnKFhlbkRldmljZSAqeGVuZGV2LCBFcnJvciAq KmVycnApCiB7CisgICAgRVJSUF9BVVRPX1BST1BBR0FURSgpOwogICAgIFhlbkJ1cyAqeGVuYnVz ID0gWEVOX0JVUyhxZGV2X2dldF9wYXJlbnRfYnVzKERFVklDRSh4ZW5kZXYpKSk7CiAgICAgY29u c3QgY2hhciAqdHlwZSA9IG9iamVjdF9nZXRfdHlwZW5hbWUoT0JKRUNUKHhlbmRldikpOwotICAg IEVycm9yICpsb2NhbF9lcnIgPSBOVUxMOwogICAgIHhzX3RyYW5zYWN0aW9uX3QgdGlkOwogCiAg ICAgdHJhY2VfeGVuX2RldmljZV91bnBsdWcodHlwZSwgeGVuZGV2LT5uYW1lKTsKQEAgLTY5LDE0 ICs2OSwxNCBAQCBhZ2FpbjoKICAgICB9CiAKICAgICB4c19ub2RlX3ByaW50Zih4ZW5idXMtPnhz aCwgdGlkLCB4ZW5kZXYtPmJhY2tlbmRfcGF0aCwgIm9ubGluZSIsCi0gICAgICAgICAgICAgICAg ICAgJmxvY2FsX2VyciwgIiV1IiwgMCk7Ci0gICAgaWYgKGxvY2FsX2VycikgeworICAgICAgICAg ICAgICAgICAgIGVycnAsICIldSIsIDApOworICAgIGlmICgqZXJycCkgewogICAgICAgICBnb3Rv IGFib3J0OwogICAgIH0KIAogICAgIHhzX25vZGVfcHJpbnRmKHhlbmJ1cy0+eHNoLCB0aWQsIHhl bmRldi0+YmFja2VuZF9wYXRoLCAic3RhdGUiLAotICAgICAgICAgICAgICAgICAgICZsb2NhbF9l cnIsICIldSIsIFhlbmJ1c1N0YXRlQ2xvc2luZyk7Ci0gICAgaWYgKGxvY2FsX2VycikgeworICAg ICAgICAgICAgICAgICAgIGVycnAsICIldSIsIFhlbmJ1c1N0YXRlQ2xvc2luZyk7CisgICAgaWYg KCplcnJwKSB7CiAgICAgICAgIGdvdG8gYWJvcnQ7CiAgICAgfQogCkBAIC05Niw3ICs5Niw2IEBA IGFib3J0OgogICAgICAqIGZyb20gZW5kaW5nIHRoZSB0cmFuc2FjdGlvbi4KICAgICAgKi8KICAg ICB4c190cmFuc2FjdGlvbl9lbmQoeGVuYnVzLT54c2gsIHRpZCwgdHJ1ZSk7Ci0gICAgZXJyb3Jf cHJvcGFnYXRlKGVycnAsIGxvY2FsX2Vycik7CiB9CiAKIHN0YXRpYyB2b2lkIHhlbl9idXNfcHJp bnRfZGV2KE1vbml0b3IgKm1vbiwgRGV2aWNlU3RhdGUgKmRldiwgaW50IGluZGVudCkKQEAgLTIw NSwxNSArMjA0LDEzIEBAIHN0YXRpYyBYZW5XYXRjaCAqd2F0Y2hfbGlzdF9hZGQoWGVuV2F0Y2hM aXN0ICp3YXRjaF9saXN0LCBjb25zdCBjaGFyICpub2RlLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBjaGFyICprZXksIFhlbldhdGNoSGFuZGxlciBoYW5kbGVyLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpvcGFxdWUsIEVycm9yICoqZXJycCkK IHsKKyAgICBFUlJQX0FVVE9fUFJPUEFHQVRFKCk7CiAgICAgWGVuV2F0Y2ggKndhdGNoID0gbmV3 X3dhdGNoKG5vZGUsIGtleSwgaGFuZGxlciwgb3BhcXVlKTsKLSAgICBFcnJvciAqbG9jYWxfZXJy ID0gTlVMTDsKIAogICAgIG5vdGlmaWVyX2xpc3RfYWRkKCZ3YXRjaF9saXN0LT5ub3RpZmllcnMs ICZ3YXRjaC0+bm90aWZpZXIpOwogCi0gICAgeHNfbm9kZV93YXRjaCh3YXRjaF9saXN0LT54c2gs IG5vZGUsIGtleSwgd2F0Y2gtPnRva2VuLCAmbG9jYWxfZXJyKTsKLSAgICBpZiAobG9jYWxfZXJy KSB7Ci0gICAgICAgIGVycm9yX3Byb3BhZ2F0ZShlcnJwLCBsb2NhbF9lcnIpOwotCisgICAgeHNf bm9kZV93YXRjaCh3YXRjaF9saXN0LT54c2gsIG5vZGUsIGtleSwgd2F0Y2gtPnRva2VuLCBlcnJw KTsKKyAgICBpZiAoKmVycnApIHsKICAgICAgICAgbm90aWZpZXJfcmVtb3ZlKCZ3YXRjaC0+bm90 aWZpZXIpOwogICAgICAgICBmcmVlX3dhdGNoKHdhdGNoKTsKIApAQCAtMjU1LDExICsyNTIsMTEg QEAgc3RhdGljIHZvaWQgeGVuX2J1c19iYWNrZW5kX2NyZWF0ZShYZW5CdXMgKnhlbmJ1cywgY29u c3QgY2hhciAqdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg Y2hhciAqbmFtZSwgY2hhciAqcGF0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgRXJyb3IgKiplcnJwKQogeworICAgIEVSUlBfQVVUT19QUk9QQUdBVEUoKTsKICAgICB4c190 cmFuc2FjdGlvbl90IHRpZDsKICAgICBjaGFyICoqa2V5OwogICAgIFFEaWN0ICpvcHRzOwogICAg IHVuc2lnbmVkIGludCBpLCBuOwotICAgIEVycm9yICpsb2NhbF9lcnIgPSBOVUxMOwogCiAgICAg dHJhY2VfeGVuX2J1c19iYWNrZW5kX2NyZWF0ZSh0eXBlLCBwYXRoKTsKIApAQCAtMzE0LDEzICsz MTEsMTEgQEAgYWdhaW46CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICB4ZW5fYmFja2Vu ZF9kZXZpY2VfY3JlYXRlKHhlbmJ1cywgdHlwZSwgbmFtZSwgb3B0cywgJmxvY2FsX2Vycik7Cisg ICAgeGVuX2JhY2tlbmRfZGV2aWNlX2NyZWF0ZSh4ZW5idXMsIHR5cGUsIG5hbWUsIG9wdHMsIGVy cnApOwogICAgIHFvYmplY3RfdW5yZWYob3B0cyk7CiAKLSAgICBpZiAobG9jYWxfZXJyKSB7Ci0g ICAgICAgIGVycm9yX3Byb3BhZ2F0ZV9wcmVwZW5kKGVycnAsIGxvY2FsX2VyciwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgImZhaWxlZCB0byBjcmVhdGUgJyVzJyBkZXZpY2UgJyVz JzogIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSwgbmFtZSk7CisgICAg aWYgKCplcnJwKSB7CisgICAgICAgIGVycm9yX3ByZXBlbmQoZXJycCwgImZhaWxlZCB0byBjcmVh dGUgJyVzJyBkZXZpY2UgJyVzJzogIiwgdHlwZSwgbmFtZSk7CiAgICAgfQogfQogCkBAIC02OTIs OSArNjg3LDkgQEAgc3RhdGljIHZvaWQgeGVuX2RldmljZV9yZW1vdmVfd2F0Y2goWGVuRGV2aWNl ICp4ZW5kZXYsIFhlbldhdGNoICp3YXRjaCwKIAogc3RhdGljIHZvaWQgeGVuX2RldmljZV9iYWNr ZW5kX2NyZWF0ZShYZW5EZXZpY2UgKnhlbmRldiwgRXJyb3IgKiplcnJwKQogeworICAgIEVSUlBf QVVUT19QUk9QQUdBVEUoKTsKICAgICBYZW5CdXMgKnhlbmJ1cyA9IFhFTl9CVVMocWRldl9nZXRf cGFyZW50X2J1cyhERVZJQ0UoeGVuZGV2KSkpOwogICAgIHN0cnVjdCB4c19wZXJtaXNzaW9ucyBw ZXJtc1syXTsKLSAgICBFcnJvciAqbG9jYWxfZXJyID0gTlVMTDsKIAogICAgIHhlbmRldi0+YmFj a2VuZF9wYXRoID0geGVuX2RldmljZV9nZXRfYmFja2VuZF9wYXRoKHhlbmRldik7CiAKQEAgLTcw NiwzMCArNzAxLDI3IEBAIHN0YXRpYyB2b2lkIHhlbl9kZXZpY2VfYmFja2VuZF9jcmVhdGUoWGVu RGV2aWNlICp4ZW5kZXYsIEVycm9yICoqZXJycCkKICAgICBnX2Fzc2VydCh4ZW5idXMtPnhzaCk7 CiAKICAgICB4c19ub2RlX2NyZWF0ZSh4ZW5idXMtPnhzaCwgWEJUX05VTEwsIHhlbmRldi0+YmFj a2VuZF9wYXRoLCBwZXJtcywKLSAgICAgICAgICAgICAgICAgICBBUlJBWV9TSVpFKHBlcm1zKSwg JmxvY2FsX2Vycik7Ci0gICAgaWYgKGxvY2FsX2VycikgewotICAgICAgICBlcnJvcl9wcm9wYWdh dGVfcHJlcGVuZChlcnJwLCBsb2NhbF9lcnIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICJmYWlsZWQgdG8gY3JlYXRlIGJhY2tlbmQ6ICIpOworICAgICAgICAgICAgICAgICAgIEFS UkFZX1NJWkUocGVybXMpLCBlcnJwKTsKKyAgICBpZiAoKmVycnApIHsKKyAgICAgICAgZXJyb3Jf cHJlcGVuZChlcnJwLCAiZmFpbGVkIHRvIGNyZWF0ZSBiYWNrZW5kOiAiKTsKICAgICAgICAgcmV0 dXJuOwogICAgIH0KIAogICAgIHhlbmRldi0+YmFja2VuZF9zdGF0ZV93YXRjaCA9CiAgICAgICAg IHhlbl9kZXZpY2VfYWRkX3dhdGNoKHhlbmRldiwgeGVuZGV2LT5iYWNrZW5kX3BhdGgsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICJzdGF0ZSIsIHhlbl9kZXZpY2VfYmFja2VuZF9jaGFu Z2VkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbG9jYWxfZXJyKTsKLSAgICBpZiAo bG9jYWxfZXJyKSB7Ci0gICAgICAgIGVycm9yX3Byb3BhZ2F0ZV9wcmVwZW5kKGVycnAsIGxvY2Fs X2VyciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZhaWxlZCB0byB3YXRjaCBi YWNrZW5kIHN0YXRlOiAiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJycCk7Cisg ICAgaWYgKCplcnJwKSB7CisgICAgICAgIGVycm9yX3ByZXBlbmQoZXJycCwgImZhaWxlZCB0byB3 YXRjaCBiYWNrZW5kIHN0YXRlOiAiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIHhl bmRldi0+YmFja2VuZF9vbmxpbmVfd2F0Y2ggPQogICAgICAgICB4ZW5fZGV2aWNlX2FkZF93YXRj aCh4ZW5kZXYsIHhlbmRldi0+YmFja2VuZF9wYXRoLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAib25saW5lIiwgeGVuX2RldmljZV9iYWNrZW5kX2NoYW5nZWQsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICZsb2NhbF9lcnIpOwotICAgIGlmIChsb2NhbF9lcnIpIHsKLSAgICAg ICAgZXJyb3JfcHJvcGFnYXRlX3ByZXBlbmQoZXJycCwgbG9jYWxfZXJyLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAiZmFpbGVkIHRvIHdhdGNoIGJhY2tlbmQgb25saW5lOiAiKTsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJycCk7CisgICAgaWYgKCplcnJwKSB7Cisg ICAgICAgIGVycm9yX3ByZXBlbmQoZXJycCwgImZhaWxlZCB0byB3YXRjaCBiYWNrZW5kIG9ubGlu ZTogIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiB9CkBAIC04NjYsOSArODU4LDkgQEAgc3Rh dGljIGJvb2wgeGVuX2RldmljZV9mcm9udGVuZF9leGlzdHMoWGVuRGV2aWNlICp4ZW5kZXYpCiAK IHN0YXRpYyB2b2lkIHhlbl9kZXZpY2VfZnJvbnRlbmRfY3JlYXRlKFhlbkRldmljZSAqeGVuZGV2 LCBFcnJvciAqKmVycnApCiB7CisgICAgRVJSUF9BVVRPX1BST1BBR0FURSgpOwogICAgIFhlbkJ1 cyAqeGVuYnVzID0gWEVOX0JVUyhxZGV2X2dldF9wYXJlbnRfYnVzKERFVklDRSh4ZW5kZXYpKSk7 CiAgICAgc3RydWN0IHhzX3Blcm1pc3Npb25zIHBlcm1zWzJdOwotICAgIEVycm9yICpsb2NhbF9l cnIgPSBOVUxMOwogCiAgICAgeGVuZGV2LT5mcm9udGVuZF9wYXRoID0geGVuX2RldmljZV9nZXRf ZnJvbnRlbmRfcGF0aCh4ZW5kZXYpOwogCkBAIC04ODUsMjAgKzg3NywxOCBAQCBzdGF0aWMgdm9p ZCB4ZW5fZGV2aWNlX2Zyb250ZW5kX2NyZWF0ZShYZW5EZXZpY2UgKnhlbmRldiwgRXJyb3IgKipl cnJwKQogICAgICAgICBnX2Fzc2VydCh4ZW5idXMtPnhzaCk7CiAKICAgICAgICAgeHNfbm9kZV9j cmVhdGUoeGVuYnVzLT54c2gsIFhCVF9OVUxMLCB4ZW5kZXYtPmZyb250ZW5kX3BhdGgsIHBlcm1z LAotICAgICAgICAgICAgICAgICAgICAgICBBUlJBWV9TSVpFKHBlcm1zKSwgJmxvY2FsX2Vycik7 Ci0gICAgICAgIGlmIChsb2NhbF9lcnIpIHsKLSAgICAgICAgICAgIGVycm9yX3Byb3BhZ2F0ZV9w cmVwZW5kKGVycnAsIGxvY2FsX2VyciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICJmYWlsZWQgdG8gY3JlYXRlIGZyb250ZW5kOiAiKTsKKyAgICAgICAgICAgICAgICAgICAg ICAgQVJSQVlfU0laRShwZXJtcyksIGVycnApOworICAgICAgICBpZiAoKmVycnApIHsKKyAgICAg ICAgICAgIGVycm9yX3ByZXBlbmQoZXJycCwgImZhaWxlZCB0byBjcmVhdGUgZnJvbnRlbmQ6ICIp OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQogCiAgICAgeGVuZGV2LT5m cm9udGVuZF9zdGF0ZV93YXRjaCA9CiAgICAgICAgIHhlbl9kZXZpY2VfYWRkX3dhdGNoKHhlbmRl diwgeGVuZGV2LT5mcm9udGVuZF9wYXRoLCAic3RhdGUiLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB4ZW5fZGV2aWNlX2Zyb250ZW5kX2NoYW5nZWQsICZsb2NhbF9lcnIpOwotICAgIGlm IChsb2NhbF9lcnIpIHsKLSAgICAgICAgZXJyb3JfcHJvcGFnYXRlX3ByZXBlbmQoZXJycCwgbG9j YWxfZXJyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmFpbGVkIHRvIHdhdGNo IGZyb250ZW5kIHN0YXRlOiAiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGVuX2Rl dmljZV9mcm9udGVuZF9jaGFuZ2VkLCBlcnJwKTsKKyAgICBpZiAoKmVycnApIHsKKyAgICAgICAg ZXJyb3JfcHJlcGVuZChlcnJwLCAiZmFpbGVkIHRvIHdhdGNoIGZyb250ZW5kIHN0YXRlOiAiKTsK ICAgICB9CiB9CiAKQEAgLTEyNDcsMTEgKzEyMzcsMTEgQEAgc3RhdGljIHZvaWQgeGVuX2Rldmlj ZV9leGl0KE5vdGlmaWVyICpuLCB2b2lkICpkYXRhKQogCiBzdGF0aWMgdm9pZCB4ZW5fZGV2aWNl X3JlYWxpemUoRGV2aWNlU3RhdGUgKmRldiwgRXJyb3IgKiplcnJwKQogeworICAgIEVSUlBfQVVU T19QUk9QQUdBVEUoKTsKICAgICBYZW5EZXZpY2UgKnhlbmRldiA9IFhFTl9ERVZJQ0UoZGV2KTsK ICAgICBYZW5EZXZpY2VDbGFzcyAqeGVuZGV2X2NsYXNzID0gWEVOX0RFVklDRV9HRVRfQ0xBU1Mo eGVuZGV2KTsKICAgICBYZW5CdXMgKnhlbmJ1cyA9IFhFTl9CVVMocWRldl9nZXRfcGFyZW50X2J1 cyhERVZJQ0UoeGVuZGV2KSkpOwogICAgIGNvbnN0IGNoYXIgKnR5cGUgPSBvYmplY3RfZ2V0X3R5 cGVuYW1lKE9CSkVDVCh4ZW5kZXYpKTsKLSAgICBFcnJvciAqbG9jYWxfZXJyID0gTlVMTDsKIAog ICAgIGlmICh4ZW5kZXYtPmZyb250ZW5kX2lkID09IERPTUlEX0lOVkFMSUQpIHsKICAgICAgICAg eGVuZGV2LT5mcm9udGVuZF9pZCA9IHhlbl9kb21pZDsKQEAgLTEyNjcsMTAgKzEyNTcsOSBAQCBz dGF0aWMgdm9pZCB4ZW5fZGV2aWNlX3JlYWxpemUoRGV2aWNlU3RhdGUgKmRldiwgRXJyb3IgKipl cnJwKQogICAgICAgICBnb3RvIHVucmVhbGl6ZTsKICAgICB9CiAKLSAgICB4ZW5kZXYtPm5hbWUg PSB4ZW5kZXZfY2xhc3MtPmdldF9uYW1lKHhlbmRldiwgJmxvY2FsX2Vycik7Ci0gICAgaWYgKGxv Y2FsX2VycikgewotICAgICAgICBlcnJvcl9wcm9wYWdhdGVfcHJlcGVuZChlcnJwLCBsb2NhbF9l cnIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmYWlsZWQgdG8gZ2V0IGRldmlj ZSBuYW1lOiAiKTsKKyAgICB4ZW5kZXYtPm5hbWUgPSB4ZW5kZXZfY2xhc3MtPmdldF9uYW1lKHhl bmRldiwgZXJycCk7CisgICAgaWYgKCplcnJwKSB7CisgICAgICAgIGVycm9yX3ByZXBlbmQoZXJy cCwgImZhaWxlZCB0byBnZXQgZGV2aWNlIG5hbWU6ICIpOwogICAgICAgICBnb3RvIHVucmVhbGl6 ZTsKICAgICB9CiAKQEAgLTEyOTMsMjIgKzEyODIsMTkgQEAgc3RhdGljIHZvaWQgeGVuX2Rldmlj ZV9yZWFsaXplKERldmljZVN0YXRlICpkZXYsIEVycm9yICoqZXJycCkKICAgICB4ZW5kZXYtPmZl YXR1cmVfZ3JhbnRfY29weSA9CiAgICAgICAgICh4ZW5nbnR0YWJfZ3JhbnRfY29weSh4ZW5kZXYt PnhndGgsIDAsIE5VTEwpID09IDApOwogCi0gICAgeGVuX2RldmljZV9iYWNrZW5kX2NyZWF0ZSh4 ZW5kZXYsICZsb2NhbF9lcnIpOwotICAgIGlmIChsb2NhbF9lcnIpIHsKLSAgICAgICAgZXJyb3Jf cHJvcGFnYXRlKGVycnAsIGxvY2FsX2Vycik7CisgICAgeGVuX2RldmljZV9iYWNrZW5kX2NyZWF0 ZSh4ZW5kZXYsIGVycnApOworICAgIGlmICgqZXJycCkgewogICAgICAgICBnb3RvIHVucmVhbGl6 ZTsKICAgICB9CiAKLSAgICB4ZW5fZGV2aWNlX2Zyb250ZW5kX2NyZWF0ZSh4ZW5kZXYsICZsb2Nh bF9lcnIpOwotICAgIGlmIChsb2NhbF9lcnIpIHsKLSAgICAgICAgZXJyb3JfcHJvcGFnYXRlKGVy cnAsIGxvY2FsX2Vycik7CisgICAgeGVuX2RldmljZV9mcm9udGVuZF9jcmVhdGUoeGVuZGV2LCBl cnJwKTsKKyAgICBpZiAoKmVycnApIHsKICAgICAgICAgZ290byB1bnJlYWxpemU7CiAgICAgfQog CiAgICAgaWYgKHhlbmRldl9jbGFzcy0+cmVhbGl6ZSkgewotICAgICAgICB4ZW5kZXZfY2xhc3Mt PnJlYWxpemUoeGVuZGV2LCAmbG9jYWxfZXJyKTsKLSAgICAgICAgaWYgKGxvY2FsX2Vycikgewot ICAgICAgICAgICAgZXJyb3JfcHJvcGFnYXRlKGVycnAsIGxvY2FsX2Vycik7CisgICAgICAgIHhl bmRldl9jbGFzcy0+cmVhbGl6ZSh4ZW5kZXYsIGVycnApOworICAgICAgICBpZiAoKmVycnApIHsK ICAgICAgICAgICAgIGdvdG8gdW5yZWFsaXplOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0 IGEvaHcveGVuL3hlbi1ob3N0LXBjaS1kZXZpY2UuYyBiL2h3L3hlbi94ZW4taG9zdC1wY2ktZGV2 aWNlLmMKaW5kZXggMWI0NGRjYWZhZi4uMDIzNzljMzQxYyAxMDA2NDQKLS0tIGEvaHcveGVuL3hl bi1ob3N0LXBjaS1kZXZpY2UuYworKysgYi9ody94ZW4veGVuLWhvc3QtcGNpLWRldmljZS5jCkBA IC0zMzMsOCArMzMzLDggQEAgdm9pZCB4ZW5faG9zdF9wY2lfZGV2aWNlX2dldChYZW5Ib3N0UENJ RGV2aWNlICpkLCB1aW50MTZfdCBkb21haW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHVpbnQ4X3QgYnVzLCB1aW50OF90IGRldiwgdWludDhfdCBmdW5jLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBFcnJvciAqKmVycnApCiB7CisgICAgRVJSUF9BVVRPX1BST1BBR0FURSgp OwogICAgIHVuc2lnbmVkIGludCB2OwotICAgIEVycm9yICplcnIgPSBOVUxMOwogCiAgICAgZC0+ Y29uZmlnX2ZkID0gLTE7CiAgICAgZC0+ZG9tYWluID0gZG9tYWluOwpAQCAtMzQyLDM2ICszNDIs MzYgQEAgdm9pZCB4ZW5faG9zdF9wY2lfZGV2aWNlX2dldChYZW5Ib3N0UENJRGV2aWNlICpkLCB1 aW50MTZfdCBkb21haW4sCiAgICAgZC0+ZGV2ID0gZGV2OwogICAgIGQtPmZ1bmMgPSBmdW5jOwog Ci0gICAgeGVuX2hvc3RfcGNpX2NvbmZpZ19vcGVuKGQsICZlcnIpOwotICAgIGlmIChlcnIpIHsK KyAgICB4ZW5faG9zdF9wY2lfY29uZmlnX29wZW4oZCwgZXJycCk7CisgICAgaWYgKCplcnJwKSB7 CiAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQogCi0gICAgeGVuX2hvc3RfcGNpX2dldF9yZXNv dXJjZShkLCAmZXJyKTsKLSAgICBpZiAoZXJyKSB7CisgICAgeGVuX2hvc3RfcGNpX2dldF9yZXNv dXJjZShkLCBlcnJwKTsKKyAgICBpZiAoKmVycnApIHsKICAgICAgICAgZ290byBlcnJvcjsKICAg ICB9CiAKLSAgICB4ZW5faG9zdF9wY2lfZ2V0X2hleF92YWx1ZShkLCAidmVuZG9yIiwgJnYsICZl cnIpOwotICAgIGlmIChlcnIpIHsKKyAgICB4ZW5faG9zdF9wY2lfZ2V0X2hleF92YWx1ZShkLCAi dmVuZG9yIiwgJnYsIGVycnApOworICAgIGlmICgqZXJycCkgewogICAgICAgICBnb3RvIGVycm9y OwogICAgIH0KICAgICBkLT52ZW5kb3JfaWQgPSB2OwogCi0gICAgeGVuX2hvc3RfcGNpX2dldF9o ZXhfdmFsdWUoZCwgImRldmljZSIsICZ2LCAmZXJyKTsKLSAgICBpZiAoZXJyKSB7CisgICAgeGVu X2hvc3RfcGNpX2dldF9oZXhfdmFsdWUoZCwgImRldmljZSIsICZ2LCBlcnJwKTsKKyAgICBpZiAo KmVycnApIHsKICAgICAgICAgZ290byBlcnJvcjsKICAgICB9CiAgICAgZC0+ZGV2aWNlX2lkID0g djsKIAotICAgIHhlbl9ob3N0X3BjaV9nZXRfZGVjX3ZhbHVlKGQsICJpcnEiLCAmdiwgJmVycik7 Ci0gICAgaWYgKGVycikgeworICAgIHhlbl9ob3N0X3BjaV9nZXRfZGVjX3ZhbHVlKGQsICJpcnEi LCAmdiwgZXJycCk7CisgICAgaWYgKCplcnJwKSB7CiAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAg fQogICAgIGQtPmlycSA9IHY7CiAKLSAgICB4ZW5faG9zdF9wY2lfZ2V0X2hleF92YWx1ZShkLCAi Y2xhc3MiLCAmdiwgJmVycik7Ci0gICAgaWYgKGVycikgeworICAgIHhlbl9ob3N0X3BjaV9nZXRf aGV4X3ZhbHVlKGQsICJjbGFzcyIsICZ2LCBlcnJwKTsKKyAgICBpZiAoKmVycnApIHsKICAgICAg ICAgZ290byBlcnJvcjsKICAgICB9CiAgICAgZC0+Y2xhc3NfY29kZSA9IHY7CkBAIC0zODEsNyAr MzgxLDYgQEAgdm9pZCB4ZW5faG9zdF9wY2lfZGV2aWNlX2dldChYZW5Ib3N0UENJRGV2aWNlICpk LCB1aW50MTZfdCBkb21haW4sCiAgICAgcmV0dXJuOwogCiBlcnJvcjoKLSAgICBlcnJvcl9wcm9w YWdhdGUoZXJycCwgZXJyKTsKIAogICAgIGlmIChkLT5jb25maWdfZmQgPj0gMCkgewogICAgICAg ICBjbG9zZShkLT5jb25maWdfZmQpOwpkaWZmIC0tZ2l0IGEvaHcveGVuL3hlbl9wdC5jIGIvaHcv eGVuL3hlbl9wdC5jCmluZGV4IGI5MTA4MmNiOGIuLmY1N2I4MTU4OGUgMTAwNjQ0Ci0tLSBhL2h3 L3hlbi94ZW5fcHQuYworKysgYi9ody94ZW4veGVuX3B0LmMKQEAgLTc2NywxMiArNzY3LDEyIEBA IHN0YXRpYyB2b2lkIHhlbl9wdF9kZXN0cm95KFBDSURldmljZSAqZCkgewogCiBzdGF0aWMgdm9p ZCB4ZW5fcHRfcmVhbGl6ZShQQ0lEZXZpY2UgKmQsIEVycm9yICoqZXJycCkKIHsKKyAgICBFUlJQ X0FVVE9fUFJPUEFHQVRFKCk7CiAgICAgWGVuUENJUGFzc3Rocm91Z2hTdGF0ZSAqcyA9IFhFTl9Q VF9ERVZJQ0UoZCk7CiAgICAgaW50IGksIHJjID0gMDsKICAgICB1aW50OF90IG1hY2hpbmVfaXJx ID0gMCwgc2NyYXRjaDsKICAgICB1aW50MTZfdCBjbWQgPSAwOwogICAgIGludCBwaXJxID0gWEVO X1BUX1VOQVNTSUdORURfUElSUTsKLSAgICBFcnJvciAqZXJyID0gTlVMTDsKIAogICAgIC8qIHJl Z2lzdGVyIHJlYWwgZGV2aWNlICovCiAgICAgWEVOX1BUX0xPRyhkLCAiQXNzaWduaW5nIHJlYWwg cGh5c2ljYWwgZGV2aWNlICUwMng6JTAyeC4lZCIKQEAgLTc4MywxMCArNzgzLDkgQEAgc3RhdGlj IHZvaWQgeGVuX3B0X3JlYWxpemUoUENJRGV2aWNlICpkLCBFcnJvciAqKmVycnApCiAgICAgeGVu X2hvc3RfcGNpX2RldmljZV9nZXQoJnMtPnJlYWxfZGV2aWNlLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHMtPmhvc3RhZGRyLmRvbWFpbiwgcy0+aG9zdGFkZHIuYnVzLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHMtPmhvc3RhZGRyLnNsb3QsIHMtPmhvc3RhZGRyLmZ1bmN0aW9u LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlcnIpOwotICAgIGlmIChlcnIpIHsKLSAg ICAgICAgZXJyb3JfYXBwZW5kX2hpbnQoJmVyciwgIkZhaWxlZCB0byBcIm9wZW5cIiB0aGUgcmVh bCBwY2kgZGV2aWNlIik7Ci0gICAgICAgIGVycm9yX3Byb3BhZ2F0ZShlcnJwLCBlcnIpOworICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGVycnApOworICAgIGlmICgqZXJycCkgeworICAgICAg ICBlcnJvcl9hcHBlbmRfaGludChlcnJwLCAiRmFpbGVkIHRvIFwib3BlblwiIHRoZSByZWFsIHBj aSBkZXZpY2UiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtODEzLDExICs4MTIsMTAg QEAgc3RhdGljIHZvaWQgeGVuX3B0X3JlYWxpemUoUENJRGV2aWNlICpkLCBFcnJvciAqKmVycnAp CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICB4ZW5fcHRfc2V0dXBf dmdhKHMsICZzLT5yZWFsX2RldmljZSwgJmVycik7Ci0gICAgICAgIGlmIChlcnIpIHsKLSAgICAg ICAgICAgIGVycm9yX2FwcGVuZF9oaW50KCZlcnIsICJTZXR1cCBWR0EgQklPUyBvZiBwYXNzdGhy b3VnaCIKLSAgICAgICAgICAgICAgICAgICAgIiBHRlggZmFpbGVkIik7Ci0gICAgICAgICAgICBl cnJvcl9wcm9wYWdhdGUoZXJycCwgZXJyKTsKKyAgICAgICAgeGVuX3B0X3NldHVwX3ZnYShzLCAm cy0+cmVhbF9kZXZpY2UsIGVycnApOworICAgICAgICBpZiAoKmVycnApIHsKKyAgICAgICAgICAg IGVycm9yX2FwcGVuZF9oaW50KGVycnAsICJTZXR1cCBWR0EgQklPUyBvZiBwYXNzdGhyb3VnaCIK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgR0ZYIGZhaWxlZCIpOwogICAgICAgICAg ICAgeGVuX2hvc3RfcGNpX2RldmljZV9wdXQoJnMtPnJlYWxfZGV2aWNlKTsKICAgICAgICAgICAg IHJldHVybjsKICAgICAgICAgfQpAQCAtODMwLDEwICs4MjgsOSBAQCBzdGF0aWMgdm9pZCB4ZW5f cHRfcmVhbGl6ZShQQ0lEZXZpY2UgKmQsIEVycm9yICoqZXJycCkKICAgICB4ZW5fcHRfcmVnaXN0 ZXJfcmVnaW9ucyhzLCAmY21kKTsKIAogICAgIC8qIHJlaW5pdGlhbGl6ZSBlYWNoIGNvbmZpZyBy ZWdpc3RlciB0byBiZSBlbXVsYXRlZCAqLwotICAgIHhlbl9wdF9jb25maWdfaW5pdChzLCAmZXJy KTsKLSAgICBpZiAoZXJyKSB7Ci0gICAgICAgIGVycm9yX2FwcGVuZF9oaW50KCZlcnIsICJQQ0kg Q29uZmlnIHNwYWNlIGluaXRpYWxpc2F0aW9uIGZhaWxlZCIpOwotICAgICAgICBlcnJvcl9wcm9w YWdhdGUoZXJycCwgZXJyKTsKKyAgICB4ZW5fcHRfY29uZmlnX2luaXQocywgZXJycCk7CisgICAg aWYgKCplcnJwKSB7CisgICAgICAgIGVycm9yX2FwcGVuZF9oaW50KGVycnAsICJQQ0kgQ29uZmln IHNwYWNlIGluaXRpYWxpc2F0aW9uIGZhaWxlZCIpOwogICAgICAgICByYyA9IC0xOwogICAgICAg ICBnb3RvIGVycl9vdXQ7CiAgICAgfQpkaWZmIC0tZ2l0IGEvaHcveGVuL3hlbl9wdF9jb25maWdf aW5pdC5jIGIvaHcveGVuL3hlbl9wdF9jb25maWdfaW5pdC5jCmluZGV4IDMxZWM1YWRkMWQuLmFm M2ZiZDFiZmIgMTAwNjQ0Ci0tLSBhL2h3L3hlbi94ZW5fcHRfY29uZmlnX2luaXQuYworKysgYi9o dy94ZW4veGVuX3B0X2NvbmZpZ19pbml0LmMKQEAgLTIwMDgsOCArMjAwOCw4IEBAIHN0YXRpYyB2 b2lkIHhlbl9wdF9jb25maWdfcmVnX2luaXQoWGVuUENJUGFzc3Rocm91Z2hTdGF0ZSAqcywKIAog dm9pZCB4ZW5fcHRfY29uZmlnX2luaXQoWGVuUENJUGFzc3Rocm91Z2hTdGF0ZSAqcywgRXJyb3Ig KiplcnJwKQogeworICAgIEVSUlBfQVVUT19QUk9QQUdBVEUoKTsKICAgICBpbnQgaSwgcmM7Ci0g ICAgRXJyb3IgKmVyciA9IE5VTEw7CiAKICAgICBRTElTVF9JTklUKCZzLT5yZWdfZ3Jwcyk7CiAK QEAgLTIwNTIsMTAgKzIwNTIsOSBAQCB2b2lkIHhlbl9wdF9jb25maWdfaW5pdChYZW5QQ0lQYXNz dGhyb3VnaFN0YXRlICpzLCBFcnJvciAqKmVycnApCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19ncnBfb2Zmc2V0LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcmVnX2dycF9lbnRyeS0+c2l6ZSk7 CiAgICAgICAgICAgICBpZiAocmMgPCAwKSB7Ci0gICAgICAgICAgICAgICAgZXJyb3Jfc2V0Zygm ZXJyLCAiRmFpbGVkIHRvIGluaXRpYWxpemUgJWQvJXp1LCB0eXBlID0gMHgleCwiCisgICAgICAg ICAgICAgICAgZXJyb3Jfc2V0ZyhlcnJwLCAiRmFpbGVkIHRvIGluaXRpYWxpemUgJWQvJXp1LCB0 eXBlID0gMHgleCwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIHJjOiAlZCIsIGksIEFS UkFZX1NJWkUoeGVuX3B0X2VtdV9yZWdfZ3JwcyksCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICB4ZW5fcHRfZW11X3JlZ19ncnBzW2ldLmdycF90eXBlLCByYyk7Ci0gICAgICAgICAgICAgICAg ZXJyb3JfcHJvcGFnYXRlKGVycnAsIGVycik7CiAgICAgICAgICAgICAgICAgeGVuX3B0X2NvbmZp Z19kZWxldGUocyk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQpAQCAt MjA2OCwxMyArMjA2NywxNCBAQCB2b2lkIHhlbl9wdF9jb25maWdfaW5pdChYZW5QQ0lQYXNzdGhy b3VnaFN0YXRlICpzLCBFcnJvciAqKmVycnApCiAKICAgICAgICAgICAgICAgICAvKiBpbml0aWFs aXplIGNhcGFiaWxpdHkgcmVnaXN0ZXIgKi8KICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBy ZWdzLT5zaXplICE9IDA7IGorKywgcmVncysrKSB7Ci0gICAgICAgICAgICAgICAgICAgIHhlbl9w dF9jb25maWdfcmVnX2luaXQocywgcmVnX2dycF9lbnRyeSwgcmVncywgJmVycik7Ci0gICAgICAg ICAgICAgICAgICAgIGlmIChlcnIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2Fw cGVuZF9oaW50KCZlcnIsICJGYWlsZWQgdG8gaW5pdCByZWdpc3RlciAlZCIKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIiBvZmZzZXRzIDB4JXggaW4gZ3JwX3R5cGUgPSAweCV4ICgl ZC8lenUpIiwgaiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVncy0+b2Zmc2V0 LCB4ZW5fcHRfZW11X3JlZ19ncnBzW2ldLmdycF90eXBlLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpLCBBUlJBWV9TSVpFKHhlbl9wdF9lbXVfcmVnX2dycHMpKTsKLSAgICAgICAg ICAgICAgICAgICAgICAgIGVycm9yX3Byb3BhZ2F0ZShlcnJwLCBlcnIpOworICAgICAgICAgICAg ICAgICAgICB4ZW5fcHRfY29uZmlnX3JlZ19pbml0KHMsIHJlZ19ncnBfZW50cnksIHJlZ3MsIGVy cnApOworICAgICAgICAgICAgICAgICAgICBpZiAoKmVycnApIHsKKyAgICAgICAgICAgICAgICAg ICAgICAgIGVycm9yX2FwcGVuZF9oaW50KGVycnAsICJGYWlsZWQgdG8gaW5pdCByZWdpc3RlciAl ZCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgb2Zmc2V0cyAw eCV4IGluIGdycF90eXBlID0gMHgleCAoJWQvJXp1KSIsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcmVncy0+b2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgeGVuX3B0X2VtdV9yZWdfZ3Jwc1tpXS5ncnBfdHlwZSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGksIEFSUkFZX1NJWkUoeGVuX3B0X2VtdV9yZWdf Z3JwcykpOwogICAgICAgICAgICAgICAgICAgICAgICAgeGVuX3B0X2NvbmZpZ19kZWxldGUocyk7 CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgIH0K LS0gCjIuMjEuMAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3Jn Cmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby94ZW4tZGV2ZWw= From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.8 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 667BBC10DCE for ; Thu, 12 Mar 2020 09:04:58 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 304A5206F1 for ; Thu, 12 Mar 2020 09:04:58 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 304A5206F1 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=virtuozzo.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:37996 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jCJlx-0007nb-6E for qemu-devel@archiver.kernel.org; Thu, 12 Mar 2020 05:04:57 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:51613) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jCJhG-00071s-Hf for qemu-devel@nongnu.org; Thu, 12 Mar 2020 05:00:10 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1jCJhB-0004sR-U1 for qemu-devel@nongnu.org; Thu, 12 Mar 2020 05:00:06 -0400 Received: from relay.sw.ru ([185.231.240.75]:48450) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1jCJhB-0004qh-Ga for qemu-devel@nongnu.org; Thu, 12 Mar 2020 05:00:01 -0400 Received: from vovaso.qa.sw.ru ([10.94.3.0] helo=kvm.qa.sw.ru) by relay.sw.ru with esmtp (Exim 4.92.3) (envelope-from ) id 1jCJgx-0004Ve-3V; Thu, 12 Mar 2020 11:59:47 +0300 From: Vladimir Sementsov-Ogievskiy To: qemu-devel@nongnu.org Subject: [PATCH v9 10/10] xen: introduce ERRP_AUTO_PROPAGATE Date: Thu, 12 Mar 2020 11:59:36 +0300 Message-Id: <20200312085936.9552-11-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20200312085936.9552-1-vsementsov@virtuozzo.com> References: <20200312085936.9552-1-vsementsov@virtuozzo.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 185.231.240.75 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 , Stefano Stabellini , qemu-block@nongnu.org, Paul Durrant , armbru@redhat.com, Greg Kurz , vsementsov@virtuozzo.com, Stefan Hajnoczi , Anthony Perard , xen-devel@lists.xenproject.org, Max Reitz Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" 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 == &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 | 125 ++++++++++++++------------------- 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(+), 182 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 *dataplane, unsigned int protocol, Error **errp) { + ERRP_AUTO_PROPAGATE(); XenDevice *xendev = dataplane->xendev; - Error *local_err = NULL; unsigned int ring_size; unsigned int i; @@ -776,9 +776,8 @@ void xen_block_dataplane_start(XenBlockDataPlane *dataplane, } 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; } @@ -786,9 +785,8 @@ void xen_block_dataplane_start(XenBlockDataPlane *dataplane, 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; } @@ -821,9 +819,8 @@ void xen_block_dataplane_start(XenBlockDataPlane *dataplane, dataplane->event_channel = 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; } diff --git a/hw/block/xen-block.c b/hw/block/xen-block.c index 3885464513..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 = { static void xen_block_realize(XenDevice *xendev, Error **errp) { + ERRP_AUTO_PROPAGATE(); XenBlockDevice *blockdev = XEN_BLOCK_DEVICE(xendev); XenBlockDeviceClass *blockdev_class = XEN_BLOCK_DEVICE_GET_CLASS(xendev); @@ -202,7 +203,6 @@ static void xen_block_realize(XenDevice *xendev, Error **errp) XenBlockVdev *vdev = &blockdev->props.vdev; BlockConf *conf = &blockdev->props.conf; BlockBackend *blk = conf->blk; - Error *local_err = NULL; if (vdev->type == 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); 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 *xendev, enum xenbus_state frontend_state, Error **errp) { + ERRP_AUTO_PROPAGATE(); enum xenbus_state backend_state = xen_device_backend_get_state(xendev); - Error *local_err = NULL; switch (frontend_state) { case XenbusStateInitialised: @@ -294,15 +293,13 @@ static void xen_block_frontend_changed(XenDevice *xendev, break; } - xen_block_disconnect(xendev, &local_err); - if (local_err) { - error_propagate(errp, local_err); + xen_block_disconnect(xendev, errp); + if (*errp) { break; } - xen_block_connect(xendev, &local_err); - if (local_err) { - error_propagate(errp, local_err); + xen_block_connect(xendev, errp); + if (*errp) { break; } @@ -315,9 +312,8 @@ static void xen_block_frontend_changed(XenDevice *xendev, 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; } @@ -404,10 +400,10 @@ static int vbd_name_to_disk(const char *name, const char **endp, static void xen_block_set_vdev(Object *obj, Visitor *v, const char *name, void *opaque, Error **errp) { + ERRP_AUTO_PROPAGATE(); DeviceState *dev = DEVICE(obj); Property *prop = opaque; XenBlockVdev *vdev = qdev_get_prop_ptr(dev, prop); - Error *local_err = NULL; char *str, *p; const char *end; @@ -416,9 +412,8 @@ static void xen_block_set_vdev(Object *obj, Visitor *v, const char *name, return; } - 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; } @@ -672,9 +667,9 @@ static void xen_block_blockdev_del(const char *node_name, Error **errp) static char *xen_block_blockdev_add(const char *id, QDict *qdict, Error **errp) { + ERRP_AUTO_PROPAGATE(); const char *driver = qdict_get_try_str(qdict, "driver"); BlockdevOptions *options = NULL; - Error *local_err = NULL; char *node_name; Visitor *v; @@ -689,18 +684,16 @@ static char *xen_block_blockdev_add(const char *id, QDict *qdict, trace_xen_block_blockdev_add(node_name); v = qobject_input_visitor_new(QOBJECT(qdict)); - visit_type_BlockdevOptions(v, NULL, &options, &local_err); + visit_type_BlockdevOptions(v, NULL, &options, errp); visit_free(v); - if (local_err) { - error_propagate(errp, local_err); + if (*errp) { goto fail; } - qmp_blockdev_add(options, &local_err); + qmp_blockdev_add(options, errp); - if (local_err) { - error_propagate(errp, local_err); + if (*errp) { goto fail; } @@ -719,14 +712,12 @@ fail: static void xen_block_drive_destroy(XenBlockDrive *drive, Error **errp) { + ERRP_AUTO_PROPAGATE(); char *node_name = drive->node_name; if (node_name) { - Error *local_err = 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 = qdict_get_try_str(opts, "params"); const char *mode = qdict_get_try_str(opts, "mode"); const char *direct_io_safe = qdict_get_try_str(opts, "direct-io-safe"); @@ -747,7 +739,6 @@ static XenBlockDrive *xen_block_drive_create(const char *id, char *driver = NULL; char *filename = NULL; XenBlockDrive *drive = NULL; - Error *local_err = NULL; QDict *file_layer; QDict *driver_layer; @@ -826,13 +817,12 @@ static XenBlockDrive *xen_block_drive_create(const char *id, g_assert(!drive->node_name); drive->node_name = xen_block_blockdev_add(drive->id, driver_layer, - &local_err); + errp); qobject_unref(driver_layer); 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 = g_new(XenBlockIOThread, 1); - Error *local_err = NULL; QDict *opts; QObject *ret_data; @@ -867,13 +857,11 @@ static XenBlockIOThread *xen_block_iothread_create(const char *id, opts = 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); - 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(const char *id, static void xen_block_device_create(XenBackendInstance *backend, QDict *opts, Error **errp) { + ERRP_AUTO_PROPAGATE(); XenBus *xenbus = xen_backend_get_bus(backend); const char *name = xen_backend_get_name(backend); unsigned long number; @@ -892,7 +881,6 @@ static void xen_block_device_create(XenBackendInstance *backend, XenBlockDrive *drive = NULL; XenBlockIOThread *iothread = NULL; XenDevice *xendev = NULL; - Error *local_err = NULL; const char *type; XenBlockDevice *blockdev; @@ -924,52 +912,48 @@ static void xen_block_device_create(XenBackendInstance *backend, goto fail; } - drive = xen_block_drive_create(vdev, device_type, opts, &local_err); + drive = 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; } - iothread = xen_block_iothread_create(vdev, &local_err); - if (local_err) { - error_propagate_prepend(errp, local_err, - "failed to create iothread: "); + iothread = xen_block_iothread_create(vdev, errp); + if (*errp) { + error_prepend(errp, "failed to create iothread: "); goto fail; } xendev = XEN_DEVICE(qdev_create(BUS(xenbus), type)); blockdev = XEN_BLOCK_DEVICE(xendev); - 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; } 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; } 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; } blockdev->iothread = iothread; blockdev->drive = drive; - 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; } @@ -993,6 +977,7 @@ fail: static void xen_block_device_destroy(XenBackendInstance *backend, Error **errp) { + ERRP_AUTO_PROPAGATE(); XenDevice *xendev = xen_backend_get_device(backend); XenBlockDevice *blockdev = XEN_BLOCK_DEVICE(xendev); XenBlockVdev *vdev = &blockdev->props.vdev; @@ -1004,23 +989,17 @@ static void xen_block_device_destroy(XenBackendInstance *backend, object_unparent(OBJECT(xendev)); if (iothread) { - Error *local_err = NULL; - - 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; } } if (drive) { - Error *local_err = NULL; - - 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, uint32_t *val, Error **errp) static void igd_pt_i440fx_realize(PCIDevice *pci_dev, Error **errp) { + ERRP_AUTO_PROPAGATE(); uint32_t val = 0; size_t i; int pos, len; - Error *local_err = NULL; for (i = 0; i < ARRAY_SIZE(igd_host_bridge_infos); i++) { pos = igd_host_bridge_infos[i].offset; len = 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 *backend) void xen_backend_device_create(XenBus *xenbus, const char *type, const char *name, QDict *opts, Error **errp) { + ERRP_AUTO_PROPAGATE(); const XenBackendImpl *impl = xen_backend_table_lookup(type); XenBackendInstance *backend; - Error *local_error = NULL; if (!impl) { return; @@ -110,9 +110,8 @@ void xen_backend_device_create(XenBus *xenbus, const char *type, backend->xenbus = xenbus; backend->name = g_strdup(name); - 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 *xendev) static void xen_device_unplug(XenDevice *xendev, Error **errp) { + ERRP_AUTO_PROPAGATE(); XenBus *xenbus = XEN_BUS(qdev_get_parent_bus(DEVICE(xendev))); const char *type = object_get_typename(OBJECT(xendev)); - Error *local_err = NULL; xs_transaction_t tid; trace_xen_device_unplug(type, xendev->name); @@ -69,14 +69,14 @@ again: } xs_node_printf(xenbus->xsh, tid, xendev->backend_path, "online", - &local_err, "%u", 0); - if (local_err) { + errp, "%u", 0); + if (*errp) { goto abort; } xs_node_printf(xenbus->xsh, tid, xendev->backend_path, "state", - &local_err, "%u", XenbusStateClosing); - if (local_err) { + errp, "%u", XenbusStateClosing); + if (*errp) { goto abort; } @@ -96,7 +96,6 @@ abort: * from ending the transaction. */ xs_transaction_end(xenbus->xsh, tid, true); - error_propagate(errp, local_err); } static void xen_bus_print_dev(Monitor *mon, DeviceState *dev, int indent) @@ -205,15 +204,13 @@ static XenWatch *watch_list_add(XenWatchList *watch_list, const char *node, const char *key, XenWatchHandler handler, void *opaque, Error **errp) { + ERRP_AUTO_PROPAGATE(); XenWatch *watch = new_watch(node, key, handler, opaque); - Error *local_err = NULL; notifier_list_add(&watch_list->notifiers, &watch->notifier); - 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); @@ -255,11 +252,11 @@ static void xen_bus_backend_create(XenBus *xenbus, const 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 = NULL; trace_xen_bus_backend_create(type, path); @@ -314,13 +311,11 @@ again: return; } - xen_backend_device_create(xenbus, type, name, opts, &local_err); + xen_backend_device_create(xenbus, type, name, opts, errp); qobject_unref(opts); - 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, name); } } @@ -692,9 +687,9 @@ static void xen_device_remove_watch(XenDevice *xendev, XenWatch *watch, static void xen_device_backend_create(XenDevice *xendev, Error **errp) { + ERRP_AUTO_PROPAGATE(); XenBus *xenbus = XEN_BUS(qdev_get_parent_bus(DEVICE(xendev))); struct xs_permissions perms[2]; - Error *local_err = NULL; xendev->backend_path = xen_device_get_backend_path(xendev); @@ -706,30 +701,27 @@ static void xen_device_backend_create(XenDevice *xendev, Error **errp) g_assert(xenbus->xsh); 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; } xendev->backend_state_watch = 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; } xendev->backend_online_watch = 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 *xendev) static void xen_device_frontend_create(XenDevice *xendev, Error **errp) { + ERRP_AUTO_PROPAGATE(); XenBus *xenbus = XEN_BUS(qdev_get_parent_bus(DEVICE(xendev))); struct xs_permissions perms[2]; - Error *local_err = NULL; xendev->frontend_path = xen_device_get_frontend_path(xendev); @@ -885,20 +877,18 @@ static void xen_device_frontend_create(XenDevice *xendev, Error **errp) g_assert(xenbus->xsh); 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; } } xendev->frontend_state_watch = 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: "); } } @@ -1247,11 +1237,11 @@ static void xen_device_exit(Notifier *n, void *data) static void xen_device_realize(DeviceState *dev, Error **errp) { + ERRP_AUTO_PROPAGATE(); XenDevice *xendev = XEN_DEVICE(dev); XenDeviceClass *xendev_class = XEN_DEVICE_GET_CLASS(xendev); XenBus *xenbus = XEN_BUS(qdev_get_parent_bus(DEVICE(xendev))); const char *type = object_get_typename(OBJECT(xendev)); - Error *local_err = NULL; if (xendev->frontend_id == DOMID_INVALID) { xendev->frontend_id = xen_domid; @@ -1267,10 +1257,9 @@ static void xen_device_realize(DeviceState *dev, Error **errp) goto unrealize; } - xendev->name = xendev_class->get_name(xendev, &local_err); - if (local_err) { - error_propagate_prepend(errp, local_err, - "failed to get device name: "); + xendev->name = xendev_class->get_name(xendev, errp); + if (*errp) { + error_prepend(errp, "failed to get device name: "); goto unrealize; } @@ -1293,22 +1282,19 @@ static void xen_device_realize(DeviceState *dev, Error **errp) xendev->feature_grant_copy = (xengnttab_grant_copy(xendev->xgth, 0, NULL) == 0); - 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; } - 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; } 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, uint16_t domain, uint8_t bus, uint8_t dev, uint8_t func, Error **errp) { + ERRP_AUTO_PROPAGATE(); unsigned int v; - Error *err = NULL; d->config_fd = -1; d->domain = domain; @@ -342,36 +342,36 @@ void xen_host_pci_device_get(XenHostPCIDevice *d, uint16_t domain, d->dev = dev; d->func = func; - xen_host_pci_config_open(d, &err); - if (err) { + xen_host_pci_config_open(d, errp); + if (*errp) { goto error; } - xen_host_pci_get_resource(d, &err); - if (err) { + xen_host_pci_get_resource(d, errp); + if (*errp) { goto error; } - 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 = v; - 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 = v; - 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 = v; - 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 = v; @@ -381,7 +381,6 @@ void xen_host_pci_device_get(XenHostPCIDevice *d, uint16_t domain, return; error: - error_propagate(errp, err); if (d->config_fd >= 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) { static void xen_pt_realize(PCIDevice *d, Error **errp) { + ERRP_AUTO_PROPAGATE(); XenPCIPassthroughState *s = XEN_PT_DEVICE(d); int i, rc = 0; uint8_t machine_irq = 0, scratch; uint16_t cmd = 0; int pirq = XEN_PT_UNASSIGNED_PIRQ; - Error *err = NULL; /* 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; } @@ -813,11 +812,10 @@ static void xen_pt_realize(PCIDevice *d, Error **errp) return; } - 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); /* 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 = -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(XenPCIPassthroughState *s, void xen_pt_config_init(XenPCIPassthroughState *s, Error **errp) { + ERRP_AUTO_PROPAGATE(); int i, rc; - Error *err = NULL; QLIST_INIT(&s->reg_grps); @@ -2052,10 +2052,9 @@ void xen_pt_config_init(XenPCIPassthroughState *s, Error **errp) reg_grp_offset, ®_grp_entry->size); if (rc < 0) { - error_setg(&err, "Failed to initialize %d/%zu, type = 0x%x," + error_setg(errp, "Failed to initialize %d/%zu, type = 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) /* initialize capability register */ for (j = 0; regs->size != 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 = 0x%x (%d/%zu)", j, - regs->offset, xen_pt_emu_reg_grps[i].grp_type, - 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 = 0x%x (%d/%zu)", + j, + regs->offset, + xen_pt_emu_reg_grps[i].grp_type, + i, ARRAY_SIZE(xen_pt_emu_reg_grps)); xen_pt_config_delete(s); return; } -- 2.21.0