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 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id BE31FC433EF for ; Wed, 13 Oct 2021 04:31:50 +0000 (UTC) Received: from smtp4.osuosl.org (smtp4.osuosl.org [140.211.166.137]) (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 680D460E0B for ; Wed, 13 Oct 2021 04:31:50 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 680D460E0B Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=lists.linux-foundation.org Received: from localhost (localhost [127.0.0.1]) by smtp4.osuosl.org (Postfix) with ESMTP id 20405407CE; Wed, 13 Oct 2021 04:31:50 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp4.osuosl.org ([127.0.0.1]) by localhost (smtp4.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id lMa_Y0rVcxTi; Wed, 13 Oct 2021 04:31:48 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by smtp4.osuosl.org (Postfix) with ESMTPS id 338644073D; Wed, 13 Oct 2021 04:31:48 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 18534C000F; Wed, 13 Oct 2021 04:31:48 +0000 (UTC) Received: from smtp4.osuosl.org (smtp4.osuosl.org [140.211.166.137]) by lists.linuxfoundation.org (Postfix) with ESMTP id 71A35C000D for ; Wed, 13 Oct 2021 04:31:46 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp4.osuosl.org (Postfix) with ESMTP id 5D2D6407CC for ; Wed, 13 Oct 2021 04:31:46 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp4.osuosl.org ([127.0.0.1]) by localhost (smtp4.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id lNqmtmj5uFC3 for ; Wed, 13 Oct 2021 04:31:45 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.8.0 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by smtp4.osuosl.org (Postfix) with ESMTPS id D17324073D for ; Wed, 13 Oct 2021 04:31:44 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1634099503; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=3xKHz2JdD8K6JiosUuEZHOU50tselCBgZiK5ddsVqi0=; b=VXUpnqUdgIRKXvxAAxwgahti9QaVv0CbPjE37cgbP2TjY9i1mUGwFHD5LB0NK/N6e2uKj0 2HF16Osz9GYqqaWQuFMD/htjhj8uBhzvTgwTV91PDGU27i/+wyZFDaAkvuzbjSVAHQ1xSe IqvR52EMMjZ0YQtpVzKFGnV60nhDXdA= Received: from mail-pf1-f198.google.com (mail-pf1-f198.google.com [209.85.210.198]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-202-0gGR5BJyPWS3rSwLhQVbFQ-1; Wed, 13 Oct 2021 00:31:41 -0400 X-MC-Unique: 0gGR5BJyPWS3rSwLhQVbFQ-1 Received: by mail-pf1-f198.google.com with SMTP id d10-20020a621d0a000000b0044ca56b97f5so863938pfd.2 for ; Tue, 12 Oct 2021 21:31:41 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-transfer-encoding :content-language; bh=3xKHz2JdD8K6JiosUuEZHOU50tselCBgZiK5ddsVqi0=; b=isQfidc6VUBy3ZUHlOYwQtaa4H6Q8fswSNvar+xL0+Z3/MpLQ/nCFbnJirStAeIg/j nYPX2xi8WHk7wAt+SPwKtN9Y4un0Kg1fJI5wJYPke19EBgb5BsDYhLfZJnreunsJKz7b nIB5m2uBrAfRYgmcGrk+xtLJPl+L6hSjGin0pd+hgJw714txSGouwSYwf1CBZfHmy1XP ExVrurkdSVrq1FImEdUpmETmLvm15QQ0oR2qS7HGUT6X/+ppBcAMSxp3RmTCbO6qYPFE 2f1OwoZHlWQu9FaDJAIMbo/zcwwN4mJRgdB4wiVgT97l+unSqZ3n+E+ttw6cz6yYDL/W AJBg== X-Gm-Message-State: AOAM532ErQY3ETbMa65SxgWKf/gubdHIE35CXq+RE4TYd5yzU7aJkYnm U/VIe5slAzDGr1m+nXjl2CSqWOhdu60kXT+3/3w9MNSzmAecxiOXlnero1qQudpOdpiUyn9we27 VbnqF5vel6QDm3xi2l+DpdQKlRh31f8g3CNdmj5wUtg== X-Received: by 2002:a62:6543:0:b0:44c:61a0:555a with SMTP id z64-20020a626543000000b0044c61a0555amr34937217pfb.14.1634099500273; Tue, 12 Oct 2021 21:31:40 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzBrjt65dtZFwMi+p55sZgAXQ+BwZ5elBTAaGK6M69a/chE+h2NBWJ7poSj+DVKQnBq8Y0D4w== X-Received: by 2002:a62:6543:0:b0:44c:61a0:555a with SMTP id z64-20020a626543000000b0044c61a0555amr34937177pfb.14.1634099499640; Tue, 12 Oct 2021 21:31:39 -0700 (PDT) Received: from wangxiaodeMacBook-Air.local ([209.132.188.80]) by smtp.gmail.com with ESMTPSA id y24sm12384333pfo.69.2021.10.12.21.31.29 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 12 Oct 2021 21:31:39 -0700 (PDT) Subject: Re: [RFC PATCH v4 15/20] vhost: Shadow virtqueue buffers forwarding To: =?UTF-8?Q?Eugenio_P=c3=a9rez?= , qemu-devel@nongnu.org References: <20211001070603.307037-1-eperezma@redhat.com> <20211001070603.307037-16-eperezma@redhat.com> From: Jason Wang Message-ID: Date: Wed, 13 Oct 2021 12:31:26 +0800 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0) Gecko/20100101 Thunderbird/78.14.0 MIME-Version: 1.0 In-Reply-To: <20211001070603.307037-16-eperezma@redhat.com> Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=jasowang@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Language: en-US Cc: Parav Pandit , "Michael S. Tsirkin" , Markus Armbruster , virtualization@lists.linux-foundation.org, Harpreet Singh Anand , Xiao W Wang , Stefan Hajnoczi , Eli Cohen , Eric Blake , Michael Lilja X-BeenThere: virtualization@lists.linux-foundation.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: Linux virtualization List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: virtualization-bounces@lists.linux-foundation.org Sender: "Virtualization" CuWcqCAyMDIxLzEwLzEg5LiL5Y2IMzowNSwgRXVnZW5pbyBQw6lyZXog5YaZ6YGTOgo+IEluaXRp YWwgdmVyc2lvbiBvZiBzaGFkb3cgdmlydHF1ZXVlIHRoYXQgYWN0dWFsbHkgZm9yd2FyZCBidWZm ZXJzLiBUaGVyZQo+IGFyZSBubyBpb21tdSBzdXBwb3J0IGF0IHRoZSBtb21lbnQsIGFuZCB0aGF0 IHdpbGwgYmUgYWRkcmVzc2VkIGluIGZ1dHVyZQo+IHBhdGNoZXMgb2YgdGhpcyBzZXJpZXMuIFNp bmNlIGFsbCB2aG9zdC12ZHBhIGRldmljZXMgdXNlcyBmb3JjZWQgSU9NTVUsCj4gdGhpcyBtZWFu cyB0aGF0IFNWUSBpcyBub3QgdXNhYmxlIGF0IHRoaXMgcG9pbnQgb2YgdGhlIHNlcmllcyBvbiBh bnkKPiBkZXZpY2UuCj4KPiBGb3Igc2ltcGxpY2l0eSBpdCBvbmx5IHN1cHBvcnRzIG1vZGVybiBk ZXZpY2VzLCB0aGF0IGV4cGVjdHMgdnJpbmcKPiBpbiBsaXR0bGUgZW5kaWFuLCB3aXRoIHNwbGl0 IHJpbmcgYW5kIG5vIGV2ZW50IGlkeCBvciBpbmRpcmVjdAo+IGRlc2NyaXB0b3JzLiBTdXBwb3J0 IGZvciB0aGVtIHdpbGwgbm90IGJlIGFkZGVkIGluIHRoaXMgc2VyaWVzLgo+Cj4gSXQgcmV1c2Vz IHRoZSBWaXJ0UXVldWUgY29kZSBmb3IgdGhlIGRldmljZSBwYXJ0LiBUaGUgZHJpdmVyIHBhcnQg aXMKPiBiYXNlZCBvbiBMaW51eCdzIHZpcnRpb19yaW5nIGRyaXZlciwgYnV0IHdpdGggc3RyaXBw ZWQgZnVuY3Rpb25hbGl0eQo+IGFuZCBvcHRpbWl6YXRpb25zIHNvIGl0J3MgZWFzaWVyIHRvIHJl dmlldy4gTGF0ZXIgY29tbWl0cyBhZGQgc2ltcGxlcgo+IG9uZXMuCj4KPiBTVlEgdXNlcyBWSVJU SU9fQ09ORklHX1NfREVWSUNFX1NUT1BQRUQgdG8gcGF1c2UgdGhlIGRldmljZSBhbmQKPiByZXRy aWV2ZSBpdHMgc3RhdHVzIChuZXh0IGF2YWlsYWJsZSBpZHggdGhlIGRldmljZSB3YXMgZ29pbmcg dG8KPiBjb25zdW1lKSByYWNlLWZyZWUuIEl0IGNhbiBsYXRlciByZXNldCB0aGUgZGV2aWNlIHRv IHJlcGxhY2UgdnJpbmcKPiBhZGRyZXNzZXMgZXRjLiBXaGVuIFNWUSBzdGFydHMgcWVtdSBjYW4g cmVzdW1lIGNvbnN1bWluZyB0aGUgZ3Vlc3Qncwo+IGRyaXZlciByaW5nIGZyb20gdGhhdCBzdGF0 ZSwgd2l0aG91dCBub3RpY2UgZnJvbSB0aGUgbGF0dGVyLgo+Cj4gVGhpcyBzdGF0dXMgYml0IFZJ UlRJT19DT05GSUdfU19ERVZJQ0VfU1RPUFBFRCBpcyBjdXJyZW50bHkgZGlzY3Vzc2VkCj4gaW4g VmlydElPLCBhbmQgaXMgaW1wbGVtZW50ZWQgaW4gcWVtdSBWaXJ0SU8tbmV0IGRldmljZXMgaW4g cHJldmlvdXMKPiBjb21taXRzLgo+Cj4gUmVtb3ZhbCBvZiBfU19ERVZJQ0VfU1RPUFBFRCBiaXQg KGluIG90aGVyIHdvcmRzLCByZXN1bWluZyB0aGUgZGV2aWNlKQo+IGNhbiBiZSBkb25lIGluIHRo ZSBmdXR1cmUgaWYgYW4gdXNlIGNhc2UgYXJpc2VzLiBBdCB0aGlzIG1vbWVudCB3ZSBjYW4KPiBq dXN0IHJlbHkgb24gcmVzZXRpbmcgdGhlIGZ1bGwgZGV2aWNlLgo+Cj4gU2lnbmVkLW9mZi1ieTog RXVnZW5pbyBQw6lyZXogPGVwZXJlem1hQHJlZGhhdC5jb20+Cj4gLS0tCj4gICBxYXBpL25ldC5q c29uICAgICAgICAgICAgICAgICAgICAgIHwgICAyICstCj4gICBody92aXJ0aW8vdmhvc3Qtc2hh ZG93LXZpcnRxdWV1ZS5jIHwgMjM3ICsrKysrKysrKysrKysrKysrKysrKysrKysrKystCj4gICBo dy92aXJ0aW8vdmhvc3QtdmRwYS5jICAgICAgICAgICAgIHwgMTA5ICsrKysrKysrKysrKy0KPiAg IDMgZmlsZXMgY2hhbmdlZCwgMzM3IGluc2VydGlvbnMoKyksIDExIGRlbGV0aW9ucygtKQo+Cj4g ZGlmZiAtLWdpdCBhL3FhcGkvbmV0Lmpzb24gYi9xYXBpL25ldC5qc29uCj4gaW5kZXggZmU1NDZi MGU3Yy4uMWY0YTU1ZjJjNSAxMDA2NDQKPiAtLS0gYS9xYXBpL25ldC5qc29uCj4gKysrIGIvcWFw aS9uZXQuanNvbgo+IEBAIC04Niw3ICs4Niw3IEBACj4gICAjCj4gICAjIEBuYW1lOiB0aGUgZGV2 aWNlIG5hbWUgb2YgdGhlIFZpcnRJTyBkZXZpY2UKPiAgICMKPiAtIyBAZW5hYmxlOiB0cnVlIHRv IHVzZSB0aGUgYWx0ZXJuYXRlIHNoYWRvdyBWUSBub3RpZmljYXRpb25zCj4gKyMgQGVuYWJsZTog dHJ1ZSB0byB1c2UgdGhlIGFsdGVybmF0ZSBzaGFkb3cgVlEgYnVmZmVycyBmb3dhcmRpbmcgcGF0 aAo+ICAgIwo+ICAgIyBSZXR1cm5zOiBFcnJvciBpZiBmYWlsdXJlLCBvciAnbm8gZXJyb3InIGZv ciBzdWNjZXNzLgo+ICAgIwo+IGRpZmYgLS1naXQgYS9ody92aXJ0aW8vdmhvc3Qtc2hhZG93LXZp cnRxdWV1ZS5jIGIvaHcvdmlydGlvL3Zob3N0LXNoYWRvdy12aXJ0cXVldWUuYwo+IGluZGV4IDM0 ZTE1OWQ0ZmQuLmRmN2U2ZmEzZWMgMTAwNjQ0Cj4gLS0tIGEvaHcvdmlydGlvL3Zob3N0LXNoYWRv dy12aXJ0cXVldWUuYwo+ICsrKyBiL2h3L3ZpcnRpby92aG9zdC1zaGFkb3ctdmlydHF1ZXVlLmMK PiBAQCAtMTAsNiArMTAsNyBAQAo+ICAgI2luY2x1ZGUgInFlbXUvb3NkZXAuaCIKPiAgICNpbmNs dWRlICJody92aXJ0aW8vdmhvc3Qtc2hhZG93LXZpcnRxdWV1ZS5oIgo+ICAgI2luY2x1ZGUgImh3 L3ZpcnRpby92aG9zdC5oIgo+ICsjaW5jbHVkZSAiaHcvdmlydGlvL3ZpcnRpby1hY2Nlc3MuaCIK PiAgIAo+ICAgI2luY2x1ZGUgInN0YW5kYXJkLWhlYWRlcnMvbGludXgvdmhvc3RfdHlwZXMuaCIK PiAgIAo+IEBAIC00NCwxNSArNDUsMTM1IEBAIHR5cGVkZWYgc3RydWN0IFZob3N0U2hhZG93Vmly dHF1ZXVlIHsKPiAgIAo+ICAgICAgIC8qIFZpcnRpbyBkZXZpY2UgKi8KPiAgICAgICBWaXJ0SU9E ZXZpY2UgKnZkZXY7Cj4gKwo+ICsgICAgLyogTWFwIGZvciByZXR1cm5pbmcgZ3Vlc3QncyBkZXNj cmlwdG9ycyAqLwo+ICsgICAgVmlydFF1ZXVlRWxlbWVudCAqKnJpbmdfaWRfbWFwczsKPiArCj4g KyAgICAvKiBOZXh0IGhlYWQgdG8gZXhwb3NlIHRvIGRldmljZSAqLwo+ICsgICAgdWludDE2X3Qg YXZhaWxfaWR4X3NoYWRvdzsKPiArCj4gKyAgICAvKiBOZXh0IGZyZWUgZGVzY3JpcHRvciAqLwo+ ICsgICAgdWludDE2X3QgZnJlZV9oZWFkOwo+ICsKPiArICAgIC8qIExhc3Qgc2VlbiB1c2VkIGlk eCAqLwo+ICsgICAgdWludDE2X3Qgc2hhZG93X3VzZWRfaWR4Owo+ICsKPiArICAgIC8qIE5leHQg aGVhZCB0byBjb25zdW1lIGZyb20gZGV2aWNlICovCj4gKyAgICB1aW50MTZfdCB1c2VkX2lkeDsK CgpMZXQncyB1c2UgImxhc3RfdXNlZF9pZHgiIGFzIGtlcm5lbCBkcml2ZXIgZGlkLgoKCj4gICB9 IFZob3N0U2hhZG93VmlydHF1ZXVlOwo+ICAgCj4gICAvKiBJZiB0aGUgZGV2aWNlIGlzIHVzaW5n IHNvbWUgb2YgdGhlc2UsIFNWUSBjYW5ub3QgY29tbXVuaWNhdGUgKi8KPiAgIGJvb2wgdmhvc3Rf c3ZxX3ZhbGlkX2RldmljZV9mZWF0dXJlcyh1aW50NjRfdCAqZGV2X2ZlYXR1cmVzKQo+ICAgewo+ IC0gICAgcmV0dXJuIHRydWU7Cj4gKyAgICB1aW50NjRfdCBiOwo+ICsgICAgYm9vbCByID0gdHJ1 ZTsKPiArCj4gKyAgICBmb3IgKGIgPSBWSVJUSU9fVFJBTlNQT1JUX0ZfU1RBUlQ7IGIgPD0gVklS VElPX1RSQU5TUE9SVF9GX0VORDsgKytiKSB7Cj4gKyAgICAgICAgc3dpdGNoIChiKSB7Cj4gKyAg ICAgICAgY2FzZSBWSVJUSU9fRl9OT1RJRllfT05fRU1QVFk6Cj4gKyAgICAgICAgY2FzZSBWSVJU SU9fRl9BTllfTEFZT1VUOgo+ICsgICAgICAgICAgICAvKiBTVlEgaXMgZmluZSB3aXRoIHRoaXMg ZmVhdHVyZSAqLwo+ICsgICAgICAgICAgICBjb250aW51ZTsKPiArCj4gKyAgICAgICAgY2FzZSBW SVJUSU9fRl9BQ0NFU1NfUExBVEZPUk06Cj4gKyAgICAgICAgICAgIC8qIFNWUSBuZWVkcyB0aGlz IGZlYXR1cmUgZGlzYWJsZWQuIENhbid0IGNvbnRpbnVlICovCgoKU28gY29kZSBjYW4gZXhwbGFp biBpdHNlbGYsIG5lZWQgYSBjb21tZW50IHRvIGV4cGxhaW4gd2h5LgoKCj4gKyAgICAgICAgICAg IGlmICgqZGV2X2ZlYXR1cmVzICYgQklUX1VMTChiKSkgewo+ICsgICAgICAgICAgICAgICAgY2xl YXJfYml0KGIsIGRldl9mZWF0dXJlcyk7Cj4gKyAgICAgICAgICAgICAgICByID0gZmFsc2U7Cj4g KyAgICAgICAgICAgIH0KPiArICAgICAgICAgICAgYnJlYWs7Cj4gKwo+ICsgICAgICAgIGNhc2Ug VklSVElPX0ZfVkVSU0lPTl8xOgo+ICsgICAgICAgICAgICAvKiBTVlEgbmVlZHMgdGhpcyBmZWF0 dXJlLCBzbyBjYW4ndCBjb250aW51ZSAqLwoKCkEgY29tbWVudCB0byBleHBsYWluIHdoeSBTVlEg bmVlZHMgdGhpcyBmZWF0dXJlLgoKCj4gKyAgICAgICAgICAgIGlmICghKCpkZXZfZmVhdHVyZXMg JiBCSVRfVUxMKGIpKSkgewo+ICsgICAgICAgICAgICAgICAgc2V0X2JpdChiLCBkZXZfZmVhdHVy ZXMpOwo+ICsgICAgICAgICAgICAgICAgciA9IGZhbHNlOwo+ICsgICAgICAgICAgICB9Cj4gKyAg ICAgICAgICAgIGNvbnRpbnVlOwo+ICsKPiArICAgICAgICBkZWZhdWx0Ogo+ICsgICAgICAgICAg ICAvKgo+ICsgICAgICAgICAgICAgKiBTVlEgbXVzdCBkaXNhYmxlIHRoaXMgZmVhdHVyZSwgbGV0 J3MgaG9wZSB0aGUgZGV2aWNlIGlzIGZpbmUKPiArICAgICAgICAgICAgICogd2l0aG91dCBpdC4K PiArICAgICAgICAgICAgICovCj4gKyAgICAgICAgICAgIGlmICgqZGV2X2ZlYXR1cmVzICYgQklU X1VMTChiKSkgewo+ICsgICAgICAgICAgICAgICAgY2xlYXJfYml0KGIsIGRldl9mZWF0dXJlcyk7 Cj4gKyAgICAgICAgICAgIH0KPiArICAgICAgICB9Cj4gKyAgICB9Cj4gKwo+ICsgICAgcmV0dXJu IHI7Cj4gK30KCgpMZXQncyBtb3ZlIHRoaXMgdG8gcGF0Y2ggMTQuCgoKPiArCj4gK3N0YXRpYyB2 b2lkIHZob3N0X3ZyaW5nX3dyaXRlX2Rlc2NzKFZob3N0U2hhZG93VmlydHF1ZXVlICpzdnEsCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBpb3ZlYyAq aW92ZWMsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBudW0s IGJvb2wgbW9yZV9kZXNjcywgYm9vbCB3cml0ZSkKPiArewo+ICsgICAgdWludDE2X3QgaSA9IHN2 cS0+ZnJlZV9oZWFkLCBsYXN0ID0gc3ZxLT5mcmVlX2hlYWQ7Cj4gKyAgICB1bnNpZ25lZCBuOwo+ ICsgICAgdWludDE2X3QgZmxhZ3MgPSB3cml0ZSA/IGNwdV90b19sZTE2KFZSSU5HX0RFU0NfRl9X UklURSkgOiAwOwo+ICsgICAgdnJpbmdfZGVzY190ICpkZXNjcyA9IHN2cS0+dnJpbmcuZGVzYzsK PiArCj4gKyAgICBpZiAobnVtID09IDApIHsKPiArICAgICAgICByZXR1cm47Cj4gKyAgICB9Cj4g Kwo+ICsgICAgZm9yIChuID0gMDsgbiA8IG51bTsgbisrKSB7Cj4gKyAgICAgICAgaWYgKG1vcmVf ZGVzY3MgfHwgKG4gKyAxIDwgbnVtKSkgewo+ICsgICAgICAgICAgICBkZXNjc1tpXS5mbGFncyA9 IGZsYWdzIHwgY3B1X3RvX2xlMTYoVlJJTkdfREVTQ19GX05FWFQpOwo+ICsgICAgICAgIH0gZWxz ZSB7Cj4gKyAgICAgICAgICAgIGRlc2NzW2ldLmZsYWdzID0gZmxhZ3M7Cj4gKyAgICAgICAgfQo+ ICsgICAgICAgIGRlc2NzW2ldLmFkZHIgPSBjcHVfdG9fbGU2NCgoaHdhZGRyKWlvdmVjW25dLmlv dl9iYXNlKTsKPiArICAgICAgICBkZXNjc1tpXS5sZW4gPSBjcHVfdG9fbGUzMihpb3ZlY1tuXS5p b3ZfbGVuKTsKPiArCj4gKyAgICAgICAgbGFzdCA9IGk7Cj4gKyAgICAgICAgaSA9IGNwdV90b19s ZTE2KGRlc2NzW2ldLm5leHQpOwo+ICsgICAgfQo+ICsKPiArICAgIHN2cS0+ZnJlZV9oZWFkID0g bGUxNl90b19jcHUoZGVzY3NbbGFzdF0ubmV4dCk7Cj4gK30KPiArCj4gK3N0YXRpYyB1bnNpZ25l ZCB2aG9zdF9zdnFfYWRkX3NwbGl0KFZob3N0U2hhZG93VmlydHF1ZXVlICpzdnEsCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpcnRRdWV1ZUVsZW1lbnQgKmVsZW0pCj4g K3sKPiArICAgIGludCBoZWFkOwo+ICsgICAgdW5zaWduZWQgYXZhaWxfaWR4Owo+ICsgICAgdnJp bmdfYXZhaWxfdCAqYXZhaWwgPSBzdnEtPnZyaW5nLmF2YWlsOwo+ICsKPiArICAgIGhlYWQgPSBz dnEtPmZyZWVfaGVhZDsKPiArCj4gKyAgICAvKiBXZSBuZWVkIHNvbWUgZGVzY3JpcHRvcnMgaGVy ZSAqLwo+ICsgICAgYXNzZXJ0KGVsZW0tPm91dF9udW0gfHwgZWxlbS0+aW5fbnVtKTsKPiArCj4g KyAgICB2aG9zdF92cmluZ193cml0ZV9kZXNjcyhzdnEsIGVsZW0tPm91dF9zZywgZWxlbS0+b3V0 X251bSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0tPmluX251bSA+IDAsIGZh bHNlKTsKPiArICAgIHZob3N0X3ZyaW5nX3dyaXRlX2Rlc2NzKHN2cSwgZWxlbS0+aW5fc2csIGVs ZW0tPmluX251bSwgZmFsc2UsIHRydWUpOwo+ICsKPiArICAgIC8qCj4gKyAgICAgKiBQdXQgZW50 cnkgaW4gYXZhaWxhYmxlIGFycmF5IChidXQgZG9uJ3QgdXBkYXRlIGF2YWlsLT5pZHggdW50aWwg dGhleQo+ICsgICAgICogZG8gc3luYykuCj4gKyAgICAgKi8KPiArICAgIGF2YWlsX2lkeCA9IHN2 cS0+YXZhaWxfaWR4X3NoYWRvdyAmIChzdnEtPnZyaW5nLm51bSAtIDEpOwo+ICsgICAgYXZhaWwt PnJpbmdbYXZhaWxfaWR4XSA9IGNwdV90b19sZTE2KGhlYWQpOwo+ICsgICAgc3ZxLT5hdmFpbF9p ZHhfc2hhZG93Kys7Cj4gKwo+ICsgICAgLyogVXBkYXRlIGF2YWlsIGluZGV4IGFmdGVyIHRoZSBk ZXNjcmlwdG9yIGlzIHdyb3RlICovCj4gKyAgICBzbXBfd21iKCk7Cj4gKyAgICBhdmFpbC0+aWR4 ID0gY3B1X3RvX2xlMTYoc3ZxLT5hdmFpbF9pZHhfc2hhZG93KTsKPiArCj4gKyAgICByZXR1cm4g aGVhZDsKPiArCj4gICB9Cj4gICAKPiAtLyogRm9yd2FyZCBndWVzdCBub3RpZmljYXRpb25zICov Cj4gK3N0YXRpYyB2b2lkIHZob3N0X3N2cV9hZGQoVmhvc3RTaGFkb3dWaXJ0cXVldWUgKnN2cSwg VmlydFF1ZXVlRWxlbWVudCAqZWxlbSkKPiArewo+ICsgICAgdW5zaWduZWQgcWVtdV9oZWFkID0g dmhvc3Rfc3ZxX2FkZF9zcGxpdChzdnEsIGVsZW0pOwo+ICsKPiArICAgIHN2cS0+cmluZ19pZF9t YXBzW3FlbXVfaGVhZF0gPSBlbGVtOwo+ICt9Cj4gKwo+ICsvKiBIYW5kbGUgZ3Vlc3QtPmRldmlj ZSBub3RpZmljYXRpb25zICovCj4gICBzdGF0aWMgdm9pZCB2aG9zdF9oYW5kbGVfZ3Vlc3Rfa2lj ayhFdmVudE5vdGlmaWVyICpuKQo+ICAgewo+ICAgICAgIFZob3N0U2hhZG93VmlydHF1ZXVlICpz dnEgPSBjb250YWluZXJfb2YobiwgVmhvc3RTaGFkb3dWaXJ0cXVldWUsCj4gQEAgLTYyLDcgKzE4 Myw3NCBAQCBzdGF0aWMgdm9pZCB2aG9zdF9oYW5kbGVfZ3Vlc3Rfa2ljayhFdmVudE5vdGlmaWVy ICpuKQo+ICAgICAgICAgICByZXR1cm47Cj4gICAgICAgfQo+ICAgCj4gLSAgICBldmVudF9ub3Rp Zmllcl9zZXQoJnN2cS0+a2lja19ub3RpZmllcik7Cj4gKyAgICAvKiBNYWtlIGF2YWlsYWJsZSBh cyBtYW55IGJ1ZmZlcnMgYXMgcG9zc2libGUgKi8KPiArICAgIGRvIHsKPiArICAgICAgICBpZiAo dmlydGlvX3F1ZXVlX2dldF9ub3RpZmljYXRpb24oc3ZxLT52cSkpIHsKPiArICAgICAgICAgICAg LyogTm8gbW9yZSBub3RpZmljYXRpb25zIHVudGlsIHByb2Nlc3MgYWxsIGF2YWlsYWJsZSAqLwo+ ICsgICAgICAgICAgICB2aXJ0aW9fcXVldWVfc2V0X25vdGlmaWNhdGlvbihzdnEtPnZxLCBmYWxz ZSk7Cj4gKyAgICAgICAgfQoKClRoaXMgY2FuIGJlIGRvbmUgb3V0c2lkZSB0aGUgbG9vcC4KCgo+ ICsKPiArICAgICAgICB3aGlsZSAodHJ1ZSkgewo+ICsgICAgICAgICAgICBWaXJ0UXVldWVFbGVt ZW50ICplbGVtID0gdmlydHF1ZXVlX3BvcChzdnEtPnZxLCBzaXplb2YoKmVsZW0pKTsKPiArICAg ICAgICAgICAgaWYgKCFlbGVtKSB7Cj4gKyAgICAgICAgICAgICAgICBicmVhazsKPiArICAgICAg ICAgICAgfQo+ICsKPiArICAgICAgICAgICAgdmhvc3Rfc3ZxX2FkZChzdnEsIGVsZW0pOwo+ICsg ICAgICAgICAgICBldmVudF9ub3RpZmllcl9zZXQoJnN2cS0+a2lja19ub3RpZmllcik7Cj4gKyAg ICAgICAgfQo+ICsKPiArICAgICAgICB2aXJ0aW9fcXVldWVfc2V0X25vdGlmaWNhdGlvbihzdnEt PnZxLCB0cnVlKTsKCgpJIHRoaW5rIHRoaXMgY2FuIGJlIG1vdmVkIHRvIHRoZSBlbmQgb2YgdGhp cyBmdW5jdGlvbi4KCkJ0dywgd2UgcHJvYmFibHkgbmVlZCBhIHF1b3RhIHRvIG1ha2Ugc3VyZSB0 aGUgc3ZxIGlzIG5vdCBob2dnaW5nIHRoZSAKbWFpbiBldmVudCBsb29wLgoKU2ltaWxhciBpc3N1 ZSBjb3VsZCBiZSBmb3VuZCBpbiBib3RoIHZpcnRpby1uZXQgVFggKHVzaW5nIHRpbWVyIG9yIGJo KSAKYW5kIFRBUCAoYSBxdW90YSkuCgoKPiArICAgIH0gd2hpbGUgKCF2aXJ0aW9fcXVldWVfZW1w dHkoc3ZxLT52cSkpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgYm9vbCB2aG9zdF9zdnFfbW9yZV91c2Vk KFZob3N0U2hhZG93VmlydHF1ZXVlICpzdnEpCj4gK3sKPiArICAgIGlmIChzdnEtPnVzZWRfaWR4 ICE9IHN2cS0+c2hhZG93X3VzZWRfaWR4KSB7Cj4gKyAgICAgICAgcmV0dXJuIHRydWU7Cj4gKyAg ICB9Cj4gKwo+ICsgICAgLyogR2V0IHVzZWQgaWR4IG11c3Qgbm90IGJlIHJlb3JkZXJlZCAqLwo+ ICsgICAgc21wX3JtYigpOwoKCkludGVyZXN0aW5nLCB3ZSBkb24ndCBkbyB0aGlzIGZvciBrZXJu ZWwgZHJpdmVycy4gSXQgd291bGQgYmUgaGVscGZ1bCB0byAKZXhwbGFpbiBpdCBtb3JlIGNsZWFy IGJ5ICJYIG11c3QgYmUgZG9uZSBiZWZvcmUgWSIuCgoKPiArICAgIHN2cS0+c2hhZG93X3VzZWRf aWR4ID0gY3B1X3RvX2xlMTYoc3ZxLT52cmluZy51c2VkLT5pZHgpOwo+ICsKPiArICAgIHJldHVy biBzdnEtPnVzZWRfaWR4ICE9IHN2cS0+c2hhZG93X3VzZWRfaWR4Owo+ICt9Cj4gKwo+ICtzdGF0 aWMgVmlydFF1ZXVlRWxlbWVudCAqdmhvc3Rfc3ZxX2dldF9idWYoVmhvc3RTaGFkb3dWaXJ0cXVl dWUgKnN2cSkKPiArewo+ICsgICAgdnJpbmdfZGVzY190ICpkZXNjcyA9IHN2cS0+dnJpbmcuZGVz YzsKPiArICAgIGNvbnN0IHZyaW5nX3VzZWRfdCAqdXNlZCA9IHN2cS0+dnJpbmcudXNlZDsKPiAr ICAgIHZyaW5nX3VzZWRfZWxlbV90IHVzZWRfZWxlbTsKPiArICAgIHVpbnQxNl90IGxhc3RfdXNl ZDsKPiArCj4gKyAgICBpZiAoIXZob3N0X3N2cV9tb3JlX3VzZWQoc3ZxKSkgewo+ICsgICAgICAg IHJldHVybiBOVUxMOwo+ICsgICAgfQo+ICsKPiArICAgIGxhc3RfdXNlZCA9IHN2cS0+dXNlZF9p ZHggJiAoc3ZxLT52cmluZy5udW0gLSAxKTsKPiArICAgIHVzZWRfZWxlbS5pZCA9IGxlMzJfdG9f Y3B1KHVzZWQtPnJpbmdbbGFzdF91c2VkXS5pZCk7Cj4gKyAgICB1c2VkX2VsZW0ubGVuID0gbGUz Ml90b19jcHUodXNlZC0+cmluZ1tsYXN0X3VzZWRdLmxlbik7Cj4gKwo+ICsgICAgc3ZxLT51c2Vk X2lkeCsrOwo+ICsgICAgaWYgKHVubGlrZWx5KHVzZWRfZWxlbS5pZCA+PSBzdnEtPnZyaW5nLm51 bSkpIHsKPiArICAgICAgICBlcnJvcl9yZXBvcnQoIkRldmljZSAlcyBzYXlzIGluZGV4ICV1IGlz IHVzZWQiLCBzdnEtPnZkZXYtPm5hbWUsCj4gKyAgICAgICAgICAgICAgICAgICAgIHVzZWRfZWxl bS5pZCk7Cj4gKyAgICAgICAgcmV0dXJuIE5VTEw7Cj4gKyAgICB9Cj4gKwo+ICsgICAgaWYgKHVu bGlrZWx5KCFzdnEtPnJpbmdfaWRfbWFwc1t1c2VkX2VsZW0uaWRdKSkgewo+ICsgICAgICAgIGVy cm9yX3JlcG9ydCgKPiArICAgICAgICAgICAgIkRldmljZSAlcyBzYXlzIGluZGV4ICV1IGlzIHVz ZWQsIGJ1dCBpdCB3YXMgbm90IGF2YWlsYWJsZSIsCj4gKyAgICAgICAgICAgIHN2cS0+dmRldi0+ bmFtZSwgdXNlZF9lbGVtLmlkKTsKPiArICAgICAgICByZXR1cm4gTlVMTDsKPiArICAgIH0KPiAr Cj4gKyAgICBkZXNjc1t1c2VkX2VsZW0uaWRdLm5leHQgPSBzdnEtPmZyZWVfaGVhZDsKPiArICAg IHN2cS0+ZnJlZV9oZWFkID0gdXNlZF9lbGVtLmlkOwo+ICsKPiArICAgIHN2cS0+cmluZ19pZF9t YXBzW3VzZWRfZWxlbS5pZF0tPmxlbiA9IHVzZWRfZWxlbS5sZW47Cj4gKyAgICByZXR1cm4gZ19z dGVhbF9wb2ludGVyKCZzdnEtPnJpbmdfaWRfbWFwc1t1c2VkX2VsZW0uaWRdKTsKPiAgIH0KPiAg IAo+ICAgLyogRm9yd2FyZCB2aG9zdCBub3RpZmljYXRpb25zICovCj4gQEAgLTcwLDggKzI1OCwy NiBAQCBzdGF0aWMgdm9pZCB2aG9zdF9zdnFfaGFuZGxlX2NhbGxfbm9fdGVzdChFdmVudE5vdGlm aWVyICpuKQo+ICAgewo+ICAgICAgIFZob3N0U2hhZG93VmlydHF1ZXVlICpzdnEgPSBjb250YWlu ZXJfb2YobiwgVmhvc3RTaGFkb3dWaXJ0cXVldWUsCj4gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjYWxsX25vdGlmaWVyKTsKPiAtCj4gLSAgICBldmVudF9u b3RpZmllcl9zZXQoJnN2cS0+Z3Vlc3RfY2FsbF9ub3RpZmllcik7Cj4gKyAgICBWaXJ0UXVldWUg KnZxID0gc3ZxLT52cTsKPiArCj4gKyAgICAvKiBNYWtlIGFzIG1hbnkgYnVmZmVycyBhcyBwb3Nz aWJsZSB1c2VkLiAqLwo+ICsgICAgZG8gewo+ICsgICAgICAgIHVuc2lnbmVkIGkgPSAwOwo+ICsK PiArICAgICAgICAvKiBUT0RPOiBVc2UgVlJJTkdfQVZBSUxfRl9OT19JTlRFUlJVUFQgKi8KPiAr ICAgICAgICB3aGlsZSAodHJ1ZSkgewo+ICsgICAgICAgICAgICBnX2F1dG9mcmVlIFZpcnRRdWV1 ZUVsZW1lbnQgKmVsZW0gPSB2aG9zdF9zdnFfZ2V0X2J1ZihzdnEpOwo+ICsgICAgICAgICAgICBp ZiAoIWVsZW0pIHsKPiArICAgICAgICAgICAgICAgIGJyZWFrOwo+ICsgICAgICAgICAgICB9Cj4g Kwo+ICsgICAgICAgICAgICBhc3NlcnQoaSA8IHN2cS0+dnJpbmcubnVtKTsKCgpMZXQncyByZXR1 cm4gZXJyb3IgaW5zdGVhZCBvZiB1c2luZyB0aGUgYXNzZXJ0LgoKCj4gKyAgICAgICAgICAgIHZp cnRxdWV1ZV9maWxsKHZxLCBlbGVtLCBlbGVtLT5sZW4sIGkrKyk7Cj4gKyAgICAgICAgfQo+ICsK PiArICAgICAgICB2aXJ0cXVldWVfZmx1c2godnEsIGkpOwo+ICsgICAgICAgIGV2ZW50X25vdGlm aWVyX3NldCgmc3ZxLT5ndWVzdF9jYWxsX25vdGlmaWVyKTsKPiArICAgIH0gd2hpbGUgKHZob3N0 X3N2cV9tb3JlX3VzZWQoc3ZxKSk7Cj4gICB9Cj4gICAKPiAgIHN0YXRpYyB2b2lkIHZob3N0X3N2 cV9oYW5kbGVfY2FsbChFdmVudE5vdGlmaWVyICpuKQo+IEBAIC0yMDQsMTIgKzQxMCwyNSBAQCBl cnJfc2V0X3ZyaW5nX2tpY2s6Cj4gICB2b2lkIHZob3N0X3N2cV9zdG9wKHN0cnVjdCB2aG9zdF9k ZXYgKmRldiwgdW5zaWduZWQgaWR4LAo+ICAgICAgICAgICAgICAgICAgICAgICBWaG9zdFNoYWRv d1ZpcnRxdWV1ZSAqc3ZxKQo+ICAgewo+ICsgICAgaW50IGk7Cj4gICAgICAgaW50IHIgPSB2aG9z dF9zdnFfcmVzdG9yZV92ZGV2X2hvc3Rfbm90aWZpZXIoZGV2LCBpZHgsIHN2cSk7Cj4gKwo+ICAg ICAgIGlmICh1bmxpa2VseShyIDwgMCkpIHsKPiAgICAgICAgICAgZXJyb3JfcmVwb3J0KCJDb3Vs ZG4ndCByZXN0b3JlIHZxIGtpY2sgZmQ6ICVzIiwgc3RyZXJyb3IoLXIpKTsKPiAgICAgICB9Cj4g ICAKPiAgICAgICBldmVudF9ub3RpZmllcl9zZXRfaGFuZGxlcigmc3ZxLT5ob3N0X25vdGlmaWVy LCBOVUxMKTsKPiArCj4gKyAgICBmb3IgKGkgPSAwOyBpIDwgc3ZxLT52cmluZy5udW07ICsraSkg ewo+ICsgICAgICAgIGdfYXV0b2ZyZWUgVmlydFF1ZXVlRWxlbWVudCAqZWxlbSA9IHN2cS0+cmlu Z19pZF9tYXBzW2ldOwo+ICsgICAgICAgIC8qCj4gKyAgICAgICAgICogQWx0aG91Z2ggdGhlIGRv YyBzYXlzIHdlIG11c3QgdW5wb3AgaW4gb3JkZXIsIGl0J3Mgb2sgdG8gdW5wb3AKPiArICAgICAg ICAgKiBldmVyeXRoaW5nLgo+ICsgICAgICAgICAqLwo+ICsgICAgICAgIGlmIChlbGVtKSB7Cj4g KyAgICAgICAgICAgIHZpcnRxdWV1ZV91bnBvcChzdnEtPnZxLCBlbGVtLCBlbGVtLT5sZW4pOwo+ ICsgICAgICAgIH0KCgpXaWxsIHRoaXMgcmVzdWx0IHNvbWUgb2YgdGhlICJwZW5kaW5nIiBidWZm ZXJzIHRvIGJlIHN1Ym1pdHRlZCBtdWx0aXBsZSAKdGltZXM/IElmIHllcywgc2hvdWxkIHdlIHdh aXQgZm9yIGFsbCB0aGUgYnVmZmVycyB1c2VkIGluc3RlYWQgb2YgZG9pbmcgCnRoZSB1bnBvcCBo ZXJlPwoKCj4gKyAgICB9Cj4gICB9Cj4gICAKPiAgIC8qCj4gQEAgLTIyNCw3ICs0NDMsNyBAQCBW aG9zdFNoYWRvd1ZpcnRxdWV1ZSAqdmhvc3Rfc3ZxX25ldyhzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYs IGludCBpZHgpCj4gICAgICAgc2l6ZV90IGRyaXZlcl9zaXplOwo+ICAgICAgIHNpemVfdCBkZXZp Y2Vfc2l6ZTsKPiAgICAgICBnX2F1dG9mcmVlIFZob3N0U2hhZG93VmlydHF1ZXVlICpzdnEgPSBn X25ldzAoVmhvc3RTaGFkb3dWaXJ0cXVldWUsIDEpOwo+IC0gICAgaW50IHI7Cj4gKyAgICBpbnQg ciwgaTsKPiAgIAo+ICAgICAgIHIgPSBldmVudF9ub3RpZmllcl9pbml0KCZzdnEtPmtpY2tfbm90 aWZpZXIsIDApOwo+ICAgICAgIGlmIChyICE9IDApIHsKPiBAQCAtMjUwLDYgKzQ2OSwxMSBAQCBW aG9zdFNoYWRvd1ZpcnRxdWV1ZSAqdmhvc3Rfc3ZxX25ldyhzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYs IGludCBpZHgpCj4gICAgICAgbWVtc2V0KHN2cS0+dnJpbmcuZGVzYywgMCwgZHJpdmVyX3NpemUp Owo+ICAgICAgIHN2cS0+dnJpbmcudXNlZCA9IHFlbXVfbWVtYWxpZ24ocWVtdV9yZWFsX2hvc3Rf cGFnZV9zaXplLCBkZXZpY2Vfc2l6ZSk7Cj4gICAgICAgbWVtc2V0KHN2cS0+dnJpbmcudXNlZCwg MCwgZGV2aWNlX3NpemUpOwo+ICsgICAgZm9yIChpID0gMDsgaSA8IG51bSAtIDE7IGkrKykgewo+ ICsgICAgICAgIHN2cS0+dnJpbmcuZGVzY1tpXS5uZXh0ID0gY3B1X3RvX2xlMTYoaSArIDEpOwo+ ICsgICAgfQo+ICsKPiArICAgIHN2cS0+cmluZ19pZF9tYXBzID0gZ19uZXcwKFZpcnRRdWV1ZUVs ZW1lbnQgKiwgbnVtKTsKPiAgICAgICBldmVudF9ub3RpZmllcl9zZXRfaGFuZGxlcigmc3ZxLT5j YWxsX25vdGlmaWVyLAo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZob3N0X3N2 cV9oYW5kbGVfY2FsbCk7Cj4gICAgICAgcmV0dXJuIGdfc3RlYWxfcG9pbnRlcigmc3ZxKTsKPiBA QCAtMjY5LDYgKzQ5Myw3IEBAIHZvaWQgdmhvc3Rfc3ZxX2ZyZWUoVmhvc3RTaGFkb3dWaXJ0cXVl dWUgKnZxKQo+ICAgICAgIGV2ZW50X25vdGlmaWVyX2NsZWFudXAoJnZxLT5raWNrX25vdGlmaWVy KTsKPiAgICAgICBldmVudF9ub3RpZmllcl9zZXRfaGFuZGxlcigmdnEtPmNhbGxfbm90aWZpZXIs IE5VTEwpOwo+ICAgICAgIGV2ZW50X25vdGlmaWVyX2NsZWFudXAoJnZxLT5jYWxsX25vdGlmaWVy KTsKPiArICAgIGdfZnJlZSh2cS0+cmluZ19pZF9tYXBzKTsKPiAgICAgICBxZW11X3ZmcmVlKHZx LT52cmluZy5kZXNjKTsKPiAgICAgICBxZW11X3ZmcmVlKHZxLT52cmluZy51c2VkKTsKPiAgICAg ICBnX2ZyZWUodnEpOwo+IGRpZmYgLS1naXQgYS9ody92aXJ0aW8vdmhvc3QtdmRwYS5jIGIvaHcv dmlydGlvL3Zob3N0LXZkcGEuYwo+IGluZGV4IGEwNTdlODI3N2QuLmJiNzAxMGRkYjUgMTAwNjQ0 Cj4gLS0tIGEvaHcvdmlydGlvL3Zob3N0LXZkcGEuYwo+ICsrKyBiL2h3L3ZpcnRpby92aG9zdC12 ZHBhLmMKPiBAQCAtMTksNiArMTksNyBAQAo+ICAgI2luY2x1ZGUgImh3L3ZpcnRpby92aXJ0aW8t bmV0LmgiCj4gICAjaW5jbHVkZSAiaHcvdmlydGlvL3Zob3N0LXNoYWRvdy12aXJ0cXVldWUuaCIK PiAgICNpbmNsdWRlICJody92aXJ0aW8vdmhvc3QtdmRwYS5oIgo+ICsjaW5jbHVkZSAiaHcvdmly dGlvL3Zob3N0LXNoYWRvdy12aXJ0cXVldWUuaCIKPiAgICNpbmNsdWRlICJleGVjL2FkZHJlc3Mt c3BhY2VzLmgiCj4gICAjaW5jbHVkZSAicWVtdS9tYWluLWxvb3AuaCIKPiAgICNpbmNsdWRlICJj cHUuaCIKPiBAQCAtNDc1LDYgKzQ3NiwyOCBAQCBzdGF0aWMgaW50IHZob3N0X3ZkcGFfc2V0X2Zl YXR1cmVzKHN0cnVjdCB2aG9zdF9kZXYgKmRldiwKPiAgICAgICByZXR1cm4gdmhvc3RfdmRwYV9i YWNrZW5kX3NldF9mZWF0dXJlcyhkZXYsIGZlYXR1cmVzKTsKPiAgIH0KPiAgIAo+ICsvKioKPiAr ICogUmVzdG9yZSBndWVzdCBmZWF0dXJlcyB0byB2ZHBhIGRldmljZQo+ICsgKi8KPiArc3RhdGlj IGludCB2aG9zdF92ZHBhX3NldF9ndWVzdF9mZWF0dXJlcyhzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYp Cj4gK3sKPiArICAgIHN0cnVjdCB2aG9zdF92ZHBhICp2ID0gZGV2LT5vcGFxdWU7Cj4gKyAgICBy ZXR1cm4gdmhvc3RfdmRwYV9iYWNrZW5kX3NldF9mZWF0dXJlcyhkZXYsIHYtPmd1ZXN0X2ZlYXR1 cmVzKTsKPiArfQo+ICsKPiArLyoqCj4gKyAqIFNldCBzaGFkb3cgdmlydHF1ZXVlIHN1cHBvcnRl ZCBmZWF0dXJlcwo+ICsgKi8KPiArc3RhdGljIGludCB2aG9zdF92ZHBhX3NldF9zdnFfZmVhdHVy ZXMoc3RydWN0IHZob3N0X2RldiAqZGV2KQo+ICt7Cj4gKyAgICBzdHJ1Y3Qgdmhvc3RfdmRwYSAq diA9IGRldi0+b3BhcXVlOwo+ICsgICAgdWludDY0X3QgZmVhdHVyZXMgPSB2LT5ob3N0X2ZlYXR1 cmVzOwo+ICsgICAgYm9vbCBiID0gdmhvc3Rfc3ZxX3ZhbGlkX2RldmljZV9mZWF0dXJlcygmZmVh dHVyZXMpOwo+ICsgICAgYXNzZXJ0KGIpOwo+ICsKPiArICAgIHJldHVybiB2aG9zdF92ZHBhX2Jh Y2tlbmRfc2V0X2ZlYXR1cmVzKGRldiwgZmVhdHVyZXMpOwo+ICt9Cj4gKwo+ICAgc3RhdGljIGlu dCB2aG9zdF92ZHBhX3NldF9iYWNrZW5kX2NhcChzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYpCj4gICB7 Cj4gICAgICAgdWludDY0X3QgZmVhdHVyZXM7Cj4gQEAgLTczMCw2ICs3NTMsMTkgQEAgc3RhdGlj IGJvb2wgIHZob3N0X3ZkcGFfZm9yY2VfaW9tbXUoc3RydWN0IHZob3N0X2RldiAqZGV2KQo+ICAg ICAgIHJldHVybiB0cnVlOwo+ICAgfQo+ICAgCj4gK3N0YXRpYyBpbnQgdmhvc3RfdmRwYV92cmlu Z19wYXVzZShzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYpCj4gK3sKPiArICAgIGludCByOwo+ICsgICAg dWludDhfdCBzdGF0dXM7Cj4gKwo+ICsgICAgdmhvc3RfdmRwYV9hZGRfc3RhdHVzKGRldiwgVklS VElPX0NPTkZJR19TX0RFVklDRV9TVE9QUEVEKTsKPiArICAgIGRvIHsKPiArICAgICAgICByID0g dmhvc3RfdmRwYV9jYWxsKGRldiwgVkhPU1RfVkRQQV9HRVRfU1RBVFVTLCAmc3RhdHVzKTsKCgpJ IGd1ZXNzIHdlJ2QgYmV0dGVyIGFkZCBzb21lIHNsZWVwIGhlcmUuCgoKPiArICAgIH0gd2hpbGUg KHIgPT0gMCAmJiAhKHN0YXR1cyAmIFZJUlRJT19DT05GSUdfU19ERVZJQ0VfU1RPUFBFRCkpOwo+ ICsKPiArICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICAgLyoKPiAgICAqIFN0YXJ0IHNoYWRvdyB2 aXJ0cXVldWUuCj4gICAgKi8KPiBAQCAtNzQyLDkgKzc3OCwyOSBAQCBzdGF0aWMgYm9vbCB2aG9z dF92ZHBhX3N2cV9zdGFydF92cShzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsIHVuc2lnbmVkIGlkeCkK PiAgICAgICAgICAgLmluZGV4ID0gaWR4ICsgZGV2LT52cV9pbmRleCwKPiAgICAgICAgICAgLmZk ID0gZXZlbnRfbm90aWZpZXJfZ2V0X2ZkKHZob3N0X2NhbGxfbm90aWZpZXIpLAo+ICAgICAgIH07 Cj4gKyAgICBzdHJ1Y3Qgdmhvc3RfdnJpbmdfYWRkciBhZGRyID0gewo+ICsgICAgICAgIC5pbmRl eCA9IGlkeCArIGRldi0+dnFfaW5kZXgsCj4gKyAgICB9Owo+ICsgICAgc3RydWN0IHZob3N0X3Zy aW5nX3N0YXRlIG51bSA9IHsKPiArICAgICAgICAuaW5kZXggPSBpZHggKyBkZXYtPnZxX2luZGV4 LAo+ICsgICAgICAgIC5udW0gPSB2aXJ0aW9fcXVldWVfZ2V0X251bShkZXYtPnZkZXYsIGlkeCks Cj4gKyAgICB9Owo+ICAgICAgIGludCByOwo+ICAgICAgIGJvb2wgYjsKPiAgIAo+ICsgICAgdmhv c3Rfc3ZxX2dldF92cmluZ19hZGRyKHN2cSwgJmFkZHIpOwo+ICsgICAgciA9IHZob3N0X3ZkcGFf c2V0X3ZyaW5nX2FkZHIoZGV2LCAmYWRkcik7Cj4gKyAgICBpZiAodW5saWtlbHkocikpIHsKPiAr ICAgICAgICBlcnJvcl9yZXBvcnQoInZob3N0X3NldF92cmluZ19hZGRyIGZvciBzaGFkb3cgdnEg ZmFpbGVkIik7Cj4gKyAgICAgICAgcmV0dXJuIGZhbHNlOwo+ICsgICAgfQo+ICsKPiArICAgIHIg PSB2aG9zdF92ZHBhX3NldF92cmluZ19udW0oZGV2LCAmbnVtKTsKPiArICAgIGlmICh1bmxpa2Vs eShyKSkgewo+ICsgICAgICAgIGVycm9yX3JlcG9ydCgidmhvc3RfdmRwYV9zZXRfdnJpbmdfbnVt IGZvciBzaGFkb3cgdnEgZmFpbGVkIik7Cj4gKyAgICAgICAgcmV0dXJuIGZhbHNlOwo+ICsgICAg fQo+ICsKPiAgICAgICAvKiBTZXQgc2hhZG93IHZxIC0+IGd1ZXN0IG5vdGlmaWVyICovCj4gICAg ICAgYXNzZXJ0KHYtPmNhbGxfZmRbaWR4XSk7Cj4gICAgICAgdmhvc3Rfc3ZxX3NldF9ndWVzdF9j YWxsX25vdGlmaWVyKHN2cSwgdi0+Y2FsbF9mZFtpZHhdKTsKPiBAQCAtNzgxLDE1ICs4MzcsMzIg QEAgc3RhdGljIHVuc2lnbmVkIHZob3N0X3ZkcGFfZW5hYmxlX3N2cShzdHJ1Y3Qgdmhvc3RfdmRw YSAqdiwgYm9vbCBlbmFibGUpCj4gICAgICAgICAgIGFzc2VydCh2LT5zaGFkb3dfdnFzLT5sZW4g PT0gMCk7Cj4gICAgICAgICAgIGZvciAobiA9IDA7IG4gPCBoZGV2LT5udnFzOyArK24pIHsKPiAg ICAgICAgICAgICAgIFZob3N0U2hhZG93VmlydHF1ZXVlICpzdnEgPSB2aG9zdF9zdnFfbmV3KGhk ZXYsIG4pOwo+IC0gICAgICAgICAgICBib29sIG9rOwo+IC0KPiAgICAgICAgICAgICAgIGlmICh1 bmxpa2VseSghc3ZxKSkgewo+ICAgICAgICAgICAgICAgICAgIGdfcHRyX2FycmF5X3NldF9zaXpl KHYtPnNoYWRvd192cXMsIDApOwo+ICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwo+ICAgICAg ICAgICAgICAgfQo+ICAgICAgICAgICAgICAgZ19wdHJfYXJyYXlfYWRkKHYtPnNoYWRvd192cXMs IHN2cSk7Cj4gKyAgICAgICAgfQo+ICsgICAgfQo+ICAgCj4gLSAgICAgICAgICAgIG9rID0gdmhv c3RfdmRwYV9zdnFfc3RhcnRfdnEoaGRldiwgbik7Cj4gKyAgICByID0gdmhvc3RfdmRwYV92cmlu Z19wYXVzZShoZGV2KTsKPiArICAgIGFzc2VydChyID09IDApOwo+ICsKPiArICAgIGlmIChlbmFi bGUpIHsKPiArICAgICAgICBmb3IgKG4gPSAwOyBuIDwgdi0+c2hhZG93X3Zxcy0+bGVuOyArK24p IHsKPiArICAgICAgICAgICAgLyogT2J0YWluIFZpcnRxdWV1ZSBzdGF0ZSAqLwo+ICsgICAgICAg ICAgICB2aG9zdF92aXJ0cXVldWVfc3RvcChoZGV2LCBoZGV2LT52ZGV2LCAmaGRldi0+dnFzW25d LCBuKTsKPiArICAgICAgICB9Cj4gKyAgICB9Cj4gKwo+ICsgICAgLyogUmVzZXQgZGV2aWNlIHNv IGl0IGNhbiBiZSBjb25maWd1cmVkICovCj4gKyAgICByID0gdmhvc3RfdmRwYV9kZXZfc3RhcnQo aGRldiwgZmFsc2UpOwo+ICsgICAgYXNzZXJ0KHIgPT0gMCk7Cj4gKwo+ICsgICAgaWYgKGVuYWJs ZSkgewo+ICsgICAgICAgIGludCByOwo+ICsgICAgICAgIGZvciAobiA9IDA7IG4gPCB2LT5zaGFk b3dfdnFzLT5sZW47ICsrbikgewo+ICsgICAgICAgICAgICBib29sIG9rID0gdmhvc3RfdmRwYV9z dnFfc3RhcnRfdnEoaGRldiwgbik7Cj4gICAgICAgICAgICAgICBpZiAodW5saWtlbHkoIW9rKSkg ewo+ICAgICAgICAgICAgICAgICAgIC8qIEZyZWUgc3RpbGwgbm90IHN0YXJ0ZWQgc3ZxcyAqLwo+ ICAgICAgICAgICAgICAgICAgIGdfcHRyX2FycmF5X3NldF9zaXplKHYtPnNoYWRvd192cXMsIG4p Owo+IEBAIC03OTcsMTEgKzg3MCwxOSBAQCBzdGF0aWMgdW5zaWduZWQgdmhvc3RfdmRwYV9lbmFi bGVfc3ZxKHN0cnVjdCB2aG9zdF92ZHBhICp2LCBib29sIGVuYWJsZSkKPiAgICAgICAgICAgICAg ICAgICBicmVhazsKPiAgICAgICAgICAgICAgIH0KPiAgICAgICAgICAgfQo+ICsKPiArICAgICAg ICAvKiBOZWVkIHRvIGFjayBmZWF0dXJlcyB0byBzZXQgc3RhdGUgaW4gdnBfdmRwYSBkZXZpY2Vz ICovCgoKdmhvc3RfdmRwYSBhY3R1YWxseT8KCgo+ICsgICAgICAgIHIgPSB2aG9zdF92ZHBhX3Nl dF9zdnFfZmVhdHVyZXMoaGRldik7Cj4gKyAgICAgICAgaWYgKHVubGlrZWx5KHIpKSB7Cj4gKyAg ICAgICAgICAgIGVuYWJsZSA9IGZhbHNlOwo+ICsgICAgICAgIH0KPiAgICAgICB9Cj4gICAKPiAg ICAgICB2LT5zaGFkb3dfdnFzX2VuYWJsZWQgPSBlbmFibGU7Cj4gICAKPiAgICAgICBpZiAoIWVu YWJsZSkgewo+ICsgICAgICAgIHZob3N0X3ZkcGFfc2V0X2d1ZXN0X2ZlYXR1cmVzKGhkZXYpOwo+ ICsKPiAgICAgICAgICAgLyogRGlzYWJsZSBhbGwgcXVldWVzIG9yIGNsZWFuIHVwIGZhaWxlZCBz dGFydCAqLwo+ICAgICAgICAgICBmb3IgKG4gPSAwOyBuIDwgdi0+c2hhZG93X3Zxcy0+bGVuOyAr K24pIHsKPiAgICAgICAgICAgICAgIHN0cnVjdCB2aG9zdF92cmluZ19maWxlIGZpbGUgPSB7Cj4g QEAgLTgxOCw3ICs4OTksMTIgQEAgc3RhdGljIHVuc2lnbmVkIHZob3N0X3ZkcGFfZW5hYmxlX3N2 cShzdHJ1Y3Qgdmhvc3RfdmRwYSAqdiwgYm9vbCBlbmFibGUpCj4gICAgICAgICAgICAgICAvKiBU T0RPOiBUaGlzIGNhbiB1bm1hc2sgb3Igb3ZlcnJpZGUgY2FsbCBmZCEgKi8KPiAgICAgICAgICAg ICAgIHZob3N0X3ZpcnRxdWV1ZV9zdGFydChoZGV2LCBoZGV2LT52ZGV2LCAmaGRldi0+dnFzW25d LCB2cV9pZHgpOwo+ICAgICAgICAgICB9Cj4gKyAgICB9Cj4gICAKPiArICAgIHIgPSB2aG9zdF92 ZHBhX2Rldl9zdGFydChoZGV2LCB0cnVlKTsKPiArICAgIGFzc2VydChyID09IDApOwo+ICsKPiAr ICAgIGlmICghZW5hYmxlKSB7Cj4gICAgICAgICAgIC8qIFJlc291cmNlcyBjbGVhbnVwICovCj4g ICAgICAgICAgIGdfcHRyX2FycmF5X3NldF9zaXplKHYtPnNoYWRvd192cXMsIDApOwo+ICAgICAg IH0KPiBAQCAtODMxLDYgKzkxNyw3IEBAIHZvaWQgcW1wX3hfdmhvc3RfZW5hYmxlX3NoYWRvd192 cShjb25zdCBjaGFyICpuYW1lLCBib29sIGVuYWJsZSwgRXJyb3IgKiplcnJwKQo+ICAgICAgIHN0 cnVjdCB2aG9zdF92ZHBhICp2Owo+ICAgICAgIGNvbnN0IGNoYXIgKmVycl9jYXVzZSA9IE5VTEw7 Cj4gICAgICAgYm9vbCByOwo+ICsgICAgdWludDY0X3Qgc3ZxX2ZlYXR1cmVzOwo+ICAgCj4gICAg ICAgUUxJU1RfRk9SRUFDSCh2LCAmdmhvc3RfdmRwYV9kZXZpY2VzLCBlbnRyeSkgewo+ICAgICAg ICAgICBpZiAodi0+ZGV2LT52ZGV2ICYmIDAgPT0gc3RyY21wKHYtPmRldi0+dmRldi0+bmFtZSwg bmFtZSkpIHsKPiBAQCAtODQ2LDYgKzkzMywyMCBAQCB2b2lkIHFtcF94X3Zob3N0X2VuYWJsZV9z aGFkb3dfdnEoY29uc3QgY2hhciAqbmFtZSwgYm9vbCBlbmFibGUsIEVycm9yICoqZXJycCkKPiAg ICAgICAgICAgZ290byBlcnI7Cj4gICAgICAgfQo+ICAgCj4gKyAgICBzdnFfZmVhdHVyZXMgPSB2 LT5ob3N0X2ZlYXR1cmVzOwo+ICsgICAgaWYgKCF2aG9zdF9zdnFfdmFsaWRfZGV2aWNlX2ZlYXR1 cmVzKCZzdnFfZmVhdHVyZXMpKSB7Cj4gKyAgICAgICAgZXJyb3Jfc2V0ZyhlcnJwLAo+ICsgICAg ICAgICAgICAiQ2FuJ3QgZW5hYmxlIHNoYWRvdyB2cSBvbiAlczogVW5leHBlY3RlZCBmZWF0dXJl IGZsYWdzICglbHgtJWx4KSIsCj4gKyAgICAgICAgICAgIG5hbWUsIHYtPmhvc3RfZmVhdHVyZXMs IHN2cV9mZWF0dXJlcyk7Cj4gKyAgICAgICAgcmV0dXJuOwo+ICsgICAgfSBlbHNlIHsKPiArICAg ICAgICAvKiBUT0RPOiBDaGVjayBmb3IgdmlydGlvX3ZkcGEgKyBJT01NVSAmIG1vZGVybiBkZXZp Y2UgKi8KCgpJIGd1ZXNzIHlvdSBtZWFuICJ2aG9zdF92ZHBhIiBoZXJlLiBGb3IgSU9NTVUsIEkg Z3Vlc3MgeW91IG1lYW4gInZJT01NVSIgCmFjdHVhbGx5PwoKVGhhbmtzCgoKPiArICAgIH0KPiAr Cj4gKyAgICBpZiAoZXJyX2NhdXNlKSB7Cj4gKyAgICAgICAgZ290byBlcnI7Cj4gKyAgICB9Cj4g Kwo+ICAgICAgIHIgPSB2aG9zdF92ZHBhX2VuYWJsZV9zdnEodiwgZW5hYmxlKTsKPiAgICAgICBp ZiAodW5saWtlbHkoIXIpKSB7Cj4gICAgICAgICAgIGVycl9jYXVzZSA9ICJFcnJvciBlbmFibGlu ZyAoc2VlIG1vbml0b3IpIjsKPiBAQCAtODUzLDcgKzk1NCw3IEBAIHZvaWQgcW1wX3hfdmhvc3Rf ZW5hYmxlX3NoYWRvd192cShjb25zdCBjaGFyICpuYW1lLCBib29sIGVuYWJsZSwgRXJyb3IgKipl cnJwKQo+ICAgICAgIH0KPiAgIAo+ICAgZXJyOgo+IC0gICAgaWYgKGVycl9jYXVzZSkgewo+ICsg ICAgaWYgKGVycnAgPT0gTlVMTCAmJiBlcnJfY2F1c2UpIHsKPiAgICAgICAgICAgZXJyb3Jfc2V0 ZyhlcnJwLCAiQ2FuJ3QgZW5hYmxlIHNoYWRvdyB2cSBvbiAlczogJXMiLCBuYW1lLCBlcnJfY2F1 c2UpOwo+ICAgICAgIH0KPiAgIH0KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fClZpcnR1YWxpemF0aW9uIG1haWxpbmcgbGlzdApWaXJ0dWFsaXphdGlvbkBs aXN0cy5saW51eC1mb3VuZGF0aW9uLm9yZwpodHRwczovL2xpc3RzLmxpbnV4Zm91bmRhdGlvbi5v cmcvbWFpbG1hbi9saXN0aW5mby92aXJ0dWFsaXphdGlvbg==