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=-7.1 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_PASS 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 5DA48C04AB4 for ; Tue, 14 May 2019 16:09:10 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 0021620862 for ; Tue, 14 May 2019 16:09:09 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=amazon.de header.i=@amazon.de header.b="ZBiTgtcS" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726290AbfENQJI (ORCPT ); Tue, 14 May 2019 12:09:08 -0400 Received: from smtp-fw-6002.amazon.com ([52.95.49.90]:52846 "EHLO smtp-fw-6002.amazon.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725901AbfENQJI (ORCPT ); Tue, 14 May 2019 12:09:08 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amazon.de; i=@amazon.de; q=dns/txt; s=amazon201209; t=1557850146; x=1589386146; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-id:mime-version: content-transfer-encoding; bh=plFXiYh0xL6L4GZRf8G+HDY7MbdFYndRHWvRX7zth/w=; b=ZBiTgtcSutWm4WZq0zTbkOwSaN4geL/hEhvYq6dspPnOV3Xc/OtTP8Oj pFGvBuO2BJ6SPY4u4cIWAKOr+ydJuZfbuFBx3bUhEVWdRunzA8bXLvCiX 3GwbkHQEC2Qh+K4cmXU4H9fKZ0P0INV+8/jl+cODcWyAq0HgK89v2VDU4 s=; X-IronPort-AV: E=Sophos;i="5.60,469,1549929600"; d="scan'208";a="402102493" Received: from iad6-co-svc-p1-lb1-vlan3.amazon.com (HELO email-inbound-relay-2a-1c1b5cdd.us-west-2.amazon.com) ([10.124.125.6]) by smtp-border-fw-out-6002.iad6.amazon.com with ESMTP/TLS/DHE-RSA-AES256-SHA; 14 May 2019 16:09:04 +0000 Received: from EX13MTAUEA001.ant.amazon.com (pdx1-ws-svc-p6-lb9-vlan3.pdx.amazon.com [10.236.137.198]) by email-inbound-relay-2a-1c1b5cdd.us-west-2.amazon.com (8.14.7/8.14.7) with ESMTP id x4EG8wr5099411 (version=TLSv1/SSLv3 cipher=AES256-SHA bits=256 verify=FAIL); Tue, 14 May 2019 16:09:03 GMT Received: from EX13D02EUC004.ant.amazon.com (10.43.164.117) by EX13MTAUEA001.ant.amazon.com (10.43.61.82) with Microsoft SMTP Server (TLS) id 15.0.1367.3; Tue, 14 May 2019 16:09:03 +0000 Received: from EX13D02EUC001.ant.amazon.com (10.43.164.92) by EX13D02EUC004.ant.amazon.com (10.43.164.117) with Microsoft SMTP Server (TLS) id 15.0.1367.3; Tue, 14 May 2019 16:09:02 +0000 Received: from EX13D02EUC001.ant.amazon.com ([10.43.164.92]) by EX13D02EUC001.ant.amazon.com ([10.43.164.92]) with mapi id 15.00.1367.000; Tue, 14 May 2019 16:09:02 +0000 From: "Sironi, Filippo" To: Christian Borntraeger CC: LKML , KVM list , "boris.ostrovsky@oracle.com" , "cohuck@redhat.com" , "konrad.wilk@oracle.com" , "xen-devel@lists.xenproject.org" , "vasu.srinivasan@oracle.com" Subject: Re: [PATCH v2 1/2] KVM: Start populating /sys/hypervisor with KVM entries Thread-Topic: [PATCH v2 1/2] KVM: Start populating /sys/hypervisor with KVM entries Thread-Index: AQHVCmguTMwTmVyYP0+tMrT8Z/dQMaZqvgUAgAAL5IA= Date: Tue, 14 May 2019 16:09:01 +0000 Message-ID: <56DAB9BD-2543-49DA-9886-C9C8F2B814F9@amazon.de> References: <1539078879-4372-1-git-send-email-sironi@amazon.de> <1557847002-23519-1-git-send-email-sironi@amazon.de> <1557847002-23519-2-git-send-email-sironi@amazon.de> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-exchange-messagesentrepresentingtype: 1 x-ms-exchange-transport-fromentityheader: Hosted x-originating-ip: [10.43.164.163] Content-Type: text/plain; charset="us-ascii" Content-ID: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org > On 14. May 2019, at 17:26, Christian Borntraeger = wrote: > = > = > = > On 14.05.19 17:16, Filippo Sironi wrote: >> Start populating /sys/hypervisor with KVM entries when we're running on >> KVM. This is to replicate functionality that's available when we're >> running on Xen. >> = >> Start with /sys/hypervisor/uuid, which users prefer over >> /sys/devices/virtual/dmi/id/product_uuid as a way to recognize a virtual >> machine, since it's also available when running on Xen HVM and on Xen PV >> and, on top of that doesn't require root privileges by default. >> Let's create arch-specific hooks so that different architectures can >> provide different implementations. >> = >> Signed-off-by: Filippo Sironi >> --- >> v2: >> * move the retrieval of the VM UUID out of uuid_show and into >> kvm_para_get_uuid, which is a weak function that can be overwritten >> = >> drivers/Kconfig | 2 ++ >> drivers/Makefile | 2 ++ >> drivers/kvm/Kconfig | 14 ++++++++++++++ >> drivers/kvm/Makefile | 1 + >> drivers/kvm/sys-hypervisor.c | 30 ++++++++++++++++++++++++++++++ >> 5 files changed, 49 insertions(+) >> create mode 100644 drivers/kvm/Kconfig >> create mode 100644 drivers/kvm/Makefile >> create mode 100644 drivers/kvm/sys-hypervisor.c >> = >> diff --git a/drivers/Kconfig b/drivers/Kconfig >> index 45f9decb9848..90eb835fe951 100644 >> --- a/drivers/Kconfig >> +++ b/drivers/Kconfig >> @@ -146,6 +146,8 @@ source "drivers/hv/Kconfig" >> = >> source "drivers/xen/Kconfig" >> = >> +source "drivers/kvm/Kconfig" >> + >> source "drivers/staging/Kconfig" >> = >> source "drivers/platform/Kconfig" >> diff --git a/drivers/Makefile b/drivers/Makefile >> index c61cde554340..79cc92a3f6bf 100644 >> --- a/drivers/Makefile >> +++ b/drivers/Makefile >> @@ -44,6 +44,8 @@ obj-y +=3D soc/ >> obj-$(CONFIG_VIRTIO) +=3D virtio/ >> obj-$(CONFIG_XEN) +=3D xen/ >> = >> +obj-$(CONFIG_KVM_GUEST) +=3D kvm/ >> + >> # regulators early, since some subsystems rely on them to initialize >> obj-$(CONFIG_REGULATOR) +=3D regulator/ >> = >> diff --git a/drivers/kvm/Kconfig b/drivers/kvm/Kconfig >> new file mode 100644 >> index 000000000000..3fc041df7c11 >> --- /dev/null >> +++ b/drivers/kvm/Kconfig >> @@ -0,0 +1,14 @@ >> +menu "KVM driver support" >> + depends on KVM_GUEST >> + >> +config KVM_SYS_HYPERVISOR >> + bool "Create KVM entries under /sys/hypervisor" >> + depends on SYSFS >> + select SYS_HYPERVISOR >> + default y >> + help >> + Create KVM entries under /sys/hypervisor (e.g., uuid). When r= unning >> + native or on another hypervisor, /sys/hypervisor may still be >> + present, but it will have no KVM entries. >> + >> +endmenu >> diff --git a/drivers/kvm/Makefile b/drivers/kvm/Makefile >> new file mode 100644 >> index 000000000000..73a43fc994b9 >> --- /dev/null >> +++ b/drivers/kvm/Makefile >> @@ -0,0 +1 @@ >> +obj-$(CONFIG_KVM_SYS_HYPERVISOR) +=3D sys-hypervisor.o >> diff --git a/drivers/kvm/sys-hypervisor.c b/drivers/kvm/sys-hypervisor.c >> new file mode 100644 >> index 000000000000..43b1d1a09807 >> --- /dev/null >> +++ b/drivers/kvm/sys-hypervisor.c >> @@ -0,0 +1,30 @@ >> +/* SPDX-License-Identifier: GPL-2.0 */ >> + >> +#include >> + >> +#include >> +#include >> + >> +__weak const char *kvm_para_get_uuid(void) >> +{ >> + return NULL; >> +} >> + >> +static ssize_t uuid_show(struct kobject *obj, >> + struct kobj_attribute *attr, >> + char *buf) >> +{ >> + const char *uuid =3D kvm_para_get_uuid(); > = > I would prefer to have kvm_para_get_uuid return a uuid_t > but char * will probably work out as well. Let me give this a quick spin. >> + return sprintf(buf, "%s\n", uuid); >> +} >> + >> +static struct kobj_attribute uuid =3D __ATTR_RO(uuid); >> + >> +static int __init uuid_init(void) >> +{ >> + if (!kvm_para_available()) > = > Isnt kvm_para_available a function that is defined in the context of the = HOST > and not of the guest? No, kvm_para_available is defined in the guest context. On x86, it checks for the presence of the KVM CPUID leafs. >> + return 0; >> + return sysfs_create_file(hypervisor_kobj, &uuid.attr); >> +} >> + >> +device_initcall(uuid_init); Amazon Development Center Germany GmbH Krausenstr. 38 10117 Berlin Geschaeftsfuehrer: Christian Schlaeger, Ralf Herbrich Ust-ID: DE 289 237 879 Eingetragen am Amtsgericht Charlottenburg HRB 149173 B 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=-5.7 required=3.0 tests=DKIM_ADSP_ALL,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED 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 BF1E1C04AB4 for ; Tue, 14 May 2019 16:09:26 +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 8B29A20863 for ; Tue, 14 May 2019 16:09:26 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=amazon.de header.i=@amazon.de header.b="ZBiTgtcS" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 8B29A20863 Authentication-Results: mail.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=amazon.de 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 1hQZzL-0000nx-1S; Tue, 14 May 2019 16:09:11 +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 1hQZzJ-0000ns-EP for xen-devel@lists.xenproject.org; Tue, 14 May 2019 16:09:09 +0000 X-Inumbo-ID: 995f0b88-7662-11e9-821a-d760ff980d15 Received: from smtp-fw-6002.amazon.com (unknown [52.95.49.90]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS id 995f0b88-7662-11e9-821a-d760ff980d15; Tue, 14 May 2019 16:09:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amazon.de; i=@amazon.de; q=dns/txt; s=amazon201209; t=1557850146; x=1589386146; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-id:mime-version: content-transfer-encoding; bh=plFXiYh0xL6L4GZRf8G+HDY7MbdFYndRHWvRX7zth/w=; b=ZBiTgtcSutWm4WZq0zTbkOwSaN4geL/hEhvYq6dspPnOV3Xc/OtTP8Oj pFGvBuO2BJ6SPY4u4cIWAKOr+ydJuZfbuFBx3bUhEVWdRunzA8bXLvCiX 3GwbkHQEC2Qh+K4cmXU4H9fKZ0P0INV+8/jl+cODcWyAq0HgK89v2VDU4 s=; X-IronPort-AV: E=Sophos;i="5.60,469,1549929600"; d="scan'208";a="402102493" Received: from iad6-co-svc-p1-lb1-vlan3.amazon.com (HELO email-inbound-relay-2a-1c1b5cdd.us-west-2.amazon.com) ([10.124.125.6]) by smtp-border-fw-out-6002.iad6.amazon.com with ESMTP/TLS/DHE-RSA-AES256-SHA; 14 May 2019 16:09:04 +0000 Received: from EX13MTAUEA001.ant.amazon.com (pdx1-ws-svc-p6-lb9-vlan3.pdx.amazon.com [10.236.137.198]) by email-inbound-relay-2a-1c1b5cdd.us-west-2.amazon.com (8.14.7/8.14.7) with ESMTP id x4EG8wr5099411 (version=TLSv1/SSLv3 cipher=AES256-SHA bits=256 verify=FAIL); Tue, 14 May 2019 16:09:03 GMT Received: from EX13D02EUC004.ant.amazon.com (10.43.164.117) by EX13MTAUEA001.ant.amazon.com (10.43.61.82) with Microsoft SMTP Server (TLS) id 15.0.1367.3; Tue, 14 May 2019 16:09:03 +0000 Received: from EX13D02EUC001.ant.amazon.com (10.43.164.92) by EX13D02EUC004.ant.amazon.com (10.43.164.117) with Microsoft SMTP Server (TLS) id 15.0.1367.3; Tue, 14 May 2019 16:09:02 +0000 Received: from EX13D02EUC001.ant.amazon.com ([10.43.164.92]) by EX13D02EUC001.ant.amazon.com ([10.43.164.92]) with mapi id 15.00.1367.000; Tue, 14 May 2019 16:09:02 +0000 From: "Sironi, Filippo" To: Christian Borntraeger Thread-Topic: [PATCH v2 1/2] KVM: Start populating /sys/hypervisor with KVM entries Thread-Index: AQHVCmguTMwTmVyYP0+tMrT8Z/dQMaZqvgUAgAAL5IA= Date: Tue, 14 May 2019 16:09:01 +0000 Message-ID: <56DAB9BD-2543-49DA-9886-C9C8F2B814F9@amazon.de> References: <1539078879-4372-1-git-send-email-sironi@amazon.de> <1557847002-23519-1-git-send-email-sironi@amazon.de> <1557847002-23519-2-git-send-email-sironi@amazon.de> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-exchange-messagesentrepresentingtype: 1 x-ms-exchange-transport-fromentityheader: Hosted x-originating-ip: [10.43.164.163] Content-ID: MIME-Version: 1.0 Precedence: Bulk Subject: Re: [Xen-devel] [PATCH v2 1/2] KVM: Start populating /sys/hypervisor with KVM entries X-BeenThere: xen-devel@lists.xenproject.org X-Mailman-Version: 2.1.23 List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Cc: KVM list , "konrad.wilk@oracle.com" , "cohuck@redhat.com" , LKML , "xen-devel@lists.xenproject.org" , "boris.ostrovsky@oracle.com" , "vasu.srinivasan@oracle.com" Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" Cgo+IE9uIDE0LiBNYXkgMjAxOSwgYXQgMTc6MjYsIENocmlzdGlhbiBCb3JudHJhZWdlciA8Ym9y bnRyYWVnZXJAZGUuaWJtLmNvbT4gd3JvdGU6Cj4gCj4gCj4gCj4gT24gMTQuMDUuMTkgMTc6MTYs IEZpbGlwcG8gU2lyb25pIHdyb3RlOgo+PiBTdGFydCBwb3B1bGF0aW5nIC9zeXMvaHlwZXJ2aXNv ciB3aXRoIEtWTSBlbnRyaWVzIHdoZW4gd2UncmUgcnVubmluZyBvbgo+PiBLVk0uIFRoaXMgaXMg dG8gcmVwbGljYXRlIGZ1bmN0aW9uYWxpdHkgdGhhdCdzIGF2YWlsYWJsZSB3aGVuIHdlJ3JlCj4+ IHJ1bm5pbmcgb24gWGVuLgo+PiAKPj4gU3RhcnQgd2l0aCAvc3lzL2h5cGVydmlzb3IvdXVpZCwg d2hpY2ggdXNlcnMgcHJlZmVyIG92ZXIKPj4gL3N5cy9kZXZpY2VzL3ZpcnR1YWwvZG1pL2lkL3By b2R1Y3RfdXVpZCBhcyBhIHdheSB0byByZWNvZ25pemUgYSB2aXJ0dWFsCj4+IG1hY2hpbmUsIHNp bmNlIGl0J3MgYWxzbyBhdmFpbGFibGUgd2hlbiBydW5uaW5nIG9uIFhlbiBIVk0gYW5kIG9uIFhl biBQVgo+PiBhbmQsIG9uIHRvcCBvZiB0aGF0IGRvZXNuJ3QgcmVxdWlyZSByb290IHByaXZpbGVn ZXMgYnkgZGVmYXVsdC4KPj4gTGV0J3MgY3JlYXRlIGFyY2gtc3BlY2lmaWMgaG9va3Mgc28gdGhh dCBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJlcyBjYW4KPj4gcHJvdmlkZSBkaWZmZXJlbnQgaW1wbGVt ZW50YXRpb25zLgo+PiAKPj4gU2lnbmVkLW9mZi1ieTogRmlsaXBwbyBTaXJvbmkgPHNpcm9uaUBh bWF6b24uZGU+Cj4+IC0tLQo+PiB2MjoKPj4gKiBtb3ZlIHRoZSByZXRyaWV2YWwgb2YgdGhlIFZN IFVVSUQgb3V0IG9mIHV1aWRfc2hvdyBhbmQgaW50bwo+PiAga3ZtX3BhcmFfZ2V0X3V1aWQsIHdo aWNoIGlzIGEgd2VhayBmdW5jdGlvbiB0aGF0IGNhbiBiZSBvdmVyd3JpdHRlbgo+PiAKPj4gZHJp dmVycy9LY29uZmlnICAgICAgICAgICAgICB8ICAyICsrCj4+IGRyaXZlcnMvTWFrZWZpbGUgICAg ICAgICAgICAgfCAgMiArKwo+PiBkcml2ZXJzL2t2bS9LY29uZmlnICAgICAgICAgIHwgMTQgKysr KysrKysrKysrKysKPj4gZHJpdmVycy9rdm0vTWFrZWZpbGUgICAgICAgICB8ICAxICsKPj4gZHJp dmVycy9rdm0vc3lzLWh5cGVydmlzb3IuYyB8IDMwICsrKysrKysrKysrKysrKysrKysrKysrKysr KysrKwo+PiA1IGZpbGVzIGNoYW5nZWQsIDQ5IGluc2VydGlvbnMoKykKPj4gY3JlYXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMva3ZtL0tjb25maWcKPj4gY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv a3ZtL01ha2VmaWxlCj4+IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2t2bS9zeXMtaHlwZXJ2 aXNvci5jCj4+IAo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9LY29uZmlnIGIvZHJpdmVycy9LY29u ZmlnCj4+IGluZGV4IDQ1ZjlkZWNiOTg0OC4uOTBlYjgzNWZlOTUxIDEwMDY0NAo+PiAtLS0gYS9k cml2ZXJzL0tjb25maWcKPj4gKysrIGIvZHJpdmVycy9LY29uZmlnCj4+IEBAIC0xNDYsNiArMTQ2 LDggQEAgc291cmNlICJkcml2ZXJzL2h2L0tjb25maWciCj4+IAo+PiBzb3VyY2UgImRyaXZlcnMv eGVuL0tjb25maWciCj4+IAo+PiArc291cmNlICJkcml2ZXJzL2t2bS9LY29uZmlnIgo+PiArCj4+ IHNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL0tjb25maWciCj4+IAo+PiBzb3VyY2UgImRyaXZlcnMv cGxhdGZvcm0vS2NvbmZpZyIKPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvTWFrZWZpbGUgYi9kcml2 ZXJzL01ha2VmaWxlCj4+IGluZGV4IGM2MWNkZTU1NDM0MC4uNzljYzkyYTNmNmJmIDEwMDY0NAo+ PiAtLS0gYS9kcml2ZXJzL01ha2VmaWxlCj4+ICsrKyBiL2RyaXZlcnMvTWFrZWZpbGUKPj4gQEAg LTQ0LDYgKzQ0LDggQEAgb2JqLXkJCQkJKz0gc29jLwo+PiBvYmotJChDT05GSUdfVklSVElPKQkJ Kz0gdmlydGlvLwo+PiBvYmotJChDT05GSUdfWEVOKQkJKz0geGVuLwo+PiAKPj4gK29iai0kKENP TkZJR19LVk1fR1VFU1QpCQkrPSBrdm0vCj4+ICsKPj4gIyByZWd1bGF0b3JzIGVhcmx5LCBzaW5j ZSBzb21lIHN1YnN5c3RlbXMgcmVseSBvbiB0aGVtIHRvIGluaXRpYWxpemUKPj4gb2JqLSQoQ09O RklHX1JFR1VMQVRPUikJCSs9IHJlZ3VsYXRvci8KPj4gCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2t2bS9LY29uZmlnIGIvZHJpdmVycy9rdm0vS2NvbmZpZwo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0 NAo+PiBpbmRleCAwMDAwMDAwMDAwMDAuLjNmYzA0MWRmN2MxMQo+PiAtLS0gL2Rldi9udWxsCj4+ ICsrKyBiL2RyaXZlcnMva3ZtL0tjb25maWcKPj4gQEAgLTAsMCArMSwxNCBAQAo+PiArbWVudSAi S1ZNIGRyaXZlciBzdXBwb3J0Igo+PiArICAgICAgICBkZXBlbmRzIG9uIEtWTV9HVUVTVAo+PiAr Cj4+ICtjb25maWcgS1ZNX1NZU19IWVBFUlZJU09SCj4+ICsgICAgICAgIGJvb2wgIkNyZWF0ZSBL Vk0gZW50cmllcyB1bmRlciAvc3lzL2h5cGVydmlzb3IiCj4+ICsgICAgICAgIGRlcGVuZHMgb24g U1lTRlMKPj4gKyAgICAgICAgc2VsZWN0IFNZU19IWVBFUlZJU09SCj4+ICsgICAgICAgIGRlZmF1 bHQgeQo+PiArICAgICAgICBoZWxwCj4+ICsgICAgICAgICAgQ3JlYXRlIEtWTSBlbnRyaWVzIHVu ZGVyIC9zeXMvaHlwZXJ2aXNvciAoZS5nLiwgdXVpZCkuIFdoZW4gcnVubmluZwo+PiArICAgICAg ICAgIG5hdGl2ZSBvciBvbiBhbm90aGVyIGh5cGVydmlzb3IsIC9zeXMvaHlwZXJ2aXNvciBtYXkg c3RpbGwgYmUKPj4gKyAgICAgICAgICBwcmVzZW50LCBidXQgaXQgd2lsbCBoYXZlIG5vIEtWTSBl bnRyaWVzLgo+PiArCj4+ICtlbmRtZW51Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2t2bS9NYWtl ZmlsZSBiL2RyaXZlcnMva3ZtL01ha2VmaWxlCj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+IGlu ZGV4IDAwMDAwMDAwMDAwMC4uNzNhNDNmYzk5NGI5Cj4+IC0tLSAvZGV2L251bGwKPj4gKysrIGIv ZHJpdmVycy9rdm0vTWFrZWZpbGUKPj4gQEAgLTAsMCArMSBAQAo+PiArb2JqLSQoQ09ORklHX0tW TV9TWVNfSFlQRVJWSVNPUikgKz0gc3lzLWh5cGVydmlzb3Iubwo+PiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9rdm0vc3lzLWh5cGVydmlzb3IuYyBiL2RyaXZlcnMva3ZtL3N5cy1oeXBlcnZpc29yLmMK Pj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPj4gaW5kZXggMDAwMDAwMDAwMDAwLi40M2IxZDFhMDk4 MDcKPj4gLS0tIC9kZXYvbnVsbAo+PiArKysgYi9kcml2ZXJzL2t2bS9zeXMtaHlwZXJ2aXNvci5j Cj4+IEBAIC0wLDAgKzEsMzAgQEAKPj4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwt Mi4wICovCj4+ICsKPj4gKyNpbmNsdWRlIDxhc20va3ZtX3BhcmEuaD4KPj4gKwo+PiArI2luY2x1 ZGUgPGxpbnV4L2tvYmplY3QuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgo+PiArCj4+ ICtfX3dlYWsgY29uc3QgY2hhciAqa3ZtX3BhcmFfZ2V0X3V1aWQodm9pZCkKPj4gK3sKPj4gKwly ZXR1cm4gTlVMTDsKPj4gK30KPj4gKwo+PiArc3RhdGljIHNzaXplX3QgdXVpZF9zaG93KHN0cnVj dCBrb2JqZWN0ICpvYmosCj4+ICsJCQkgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLAo+PiAr CQkJIGNoYXIgKmJ1ZikKPj4gK3sKPj4gKwljb25zdCBjaGFyICp1dWlkID0ga3ZtX3BhcmFfZ2V0 X3V1aWQoKTsKPiAKPiBJIHdvdWxkIHByZWZlciB0byBoYXZlIGt2bV9wYXJhX2dldF91dWlkIHJl dHVybiBhIHV1aWRfdAo+IGJ1dCBjaGFyICogd2lsbCBwcm9iYWJseSB3b3JrIG91dCBhcyB3ZWxs LgoKTGV0IG1lIGdpdmUgdGhpcyBhIHF1aWNrIHNwaW4uCgo+PiArCXJldHVybiBzcHJpbnRmKGJ1 ZiwgIiVzXG4iLCB1dWlkKTsKPj4gK30KPj4gKwo+PiArc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJp YnV0ZSB1dWlkID0gX19BVFRSX1JPKHV1aWQpOwo+PiArCj4+ICtzdGF0aWMgaW50IF9faW5pdCB1 dWlkX2luaXQodm9pZCkKPj4gK3sKPj4gKwlpZiAoIWt2bV9wYXJhX2F2YWlsYWJsZSgpKQo+IAo+ IElzbnQga3ZtX3BhcmFfYXZhaWxhYmxlIGEgZnVuY3Rpb24gdGhhdCBpcyBkZWZpbmVkIGluIHRo ZSBjb250ZXh0IG9mIHRoZSBIT1NUCj4gYW5kIG5vdCBvZiB0aGUgZ3Vlc3Q/CgpObywga3ZtX3Bh cmFfYXZhaWxhYmxlIGlzIGRlZmluZWQgaW4gdGhlIGd1ZXN0IGNvbnRleHQuCk9uIHg4NiwgaXQg Y2hlY2tzIGZvciB0aGUgcHJlc2VuY2Ugb2YgdGhlIEtWTSBDUFVJRCBsZWFmcy4KCj4+ICsJCXJl dHVybiAwOwo+PiArCXJldHVybiBzeXNmc19jcmVhdGVfZmlsZShoeXBlcnZpc29yX2tvYmosICZ1 dWlkLmF0dHIpOwo+PiArfQo+PiArCj4+ICtkZXZpY2VfaW5pdGNhbGwodXVpZF9pbml0KTsKCgoK CkFtYXpvbiBEZXZlbG9wbWVudCBDZW50ZXIgR2VybWFueSBHbWJICktyYXVzZW5zdHIuIDM4CjEw MTE3IEJlcmxpbgpHZXNjaGFlZnRzZnVlaHJlcjogQ2hyaXN0aWFuIFNjaGxhZWdlciwgUmFsZiBI ZXJicmljaApVc3QtSUQ6IERFIDI4OSAyMzcgODc5CkVpbmdldHJhZ2VuIGFtIEFtdHNnZXJpY2h0 IENoYXJsb3R0ZW5idXJnIEhSQiAxNDkxNzMgQgoKCgpfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBs aXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4v bGlzdGluZm8veGVuLWRldmVs