From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from m16.mail.163.com (m16.mail.163.com [117.135.210.4]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 14E3918C32B for ; Thu, 8 Aug 2024 12:08:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=117.135.210.4 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1723118922; cv=none; b=fyJjI4pFXZpV7YtM05F7NSbbrMk8mcV23U4KhyR3d8Al+OcyhkES76NHcgtyOIGIYPvynyuDCq0LkxIHSz9ZuG8R8MZMF6pp6ZqKMfEwyPTMP65XAScGwvNDPjkG5BafH/Q9wtVIQYlFuo6f6KQ2qc81hV5LV18OXXOXvS4JLQY= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1723118922; c=relaxed/simple; bh=ViLq3U0x78SVECDvrUHHPtktQeiuJBAfnfPSw0N8AyY=; h=Date:From:To:Cc:Subject:In-Reply-To:References:Content-Type: MIME-Version:Message-ID; b=JxLogvDEJKAcesRGsT+n88hRm0yrxH/RFPDiXKpioA1kJN8ZFr7Q1uaB4UKzhD4OhmPXG7XLqgy64Fe1RgAockPTczD2vG+C/h4jAKV1FNh4kGbn+tS68c2nIR6YA54aScWHky5lc8gC0YAUIxuZNSo5YC4NOQ3hpVD8ZZY6KI0= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=163.com; spf=pass smtp.mailfrom=163.com; dkim=fail (1024-bit key) header.d=163.com header.i=@163.com header.b=Q1k9+a3V reason="signature verification failed"; arc=none smtp.client-ip=117.135.210.4 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=163.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=163.com Authentication-Results: smtp.subspace.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=163.com header.i=@163.com header.b="Q1k9+a3V" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=163.com; s=s110527; h=Date:From:Subject:Content-Type:MIME-Version: Message-ID; bh=qwt6bIodT8xSEUGFqOEcflE2xndX1+a3bspbIg7J/cQ=; b=Q 1k9+a3VASeqzGnZFAqP/aazQr1TQR5GSGVwo5Wz/T0miKVOi1ChHTsWwsOPuY6gf 2mUgfIzQSe9hSAzmJpC7GM9bOr+n31bF7XvANveOdi+ebns+2w4y49CttkBPSWEW ksCdB6AMUbGU6R3OeX7wnJYq31gSl+BpK9GBCX4wzQ= Received: from xavier_qy$163.com ( [59.82.45.102] ) by ajax-webmail-wmsvr-40-128 (Coremail) ; Thu, 8 Aug 2024 19:22:23 +0800 (CST) Date: Thu, 8 Aug 2024 19:22:23 +0800 (CST) From: Xavier To: mingo@redhat.com, peterz@infradead.org, juri.lelli@redhat.com, vincent.guittot@linaro.org Cc: dietmar.eggemann@arm.com, rostedt@goodmis.org, bsegall@google.com, mgorman@suse.de, bristot@redhat.com, vschneid@redhat.com, linux-kernel@vger.kernel.org, oliver.sang@intel.com, tj@kernel.org, mkoutny@suse.com Subject: Re:Re:[PATCH-RT sched v4 1/2] RT SCHED: Optimize the enqueue and dequeue operations for rt_se X-Priority: 3 X-Mailer: Coremail Webmail Server Version XT5.0.14 build 20230109(dcb5de15) Copyright (c) 2002-2024 www.mailtech.cn 163com In-Reply-To: <16c12eba.51cb.190e88cdaba.Coremail.xavier_qy@163.com> References: <202407170411.vRtOCOzx-lkp@intel.com> <20240717030033.309205-1-xavier_qy@163.com> <20240717030033.309205-2-xavier_qy@163.com> <16c12eba.51cb.190e88cdaba.Coremail.xavier_qy@163.com> X-CM-CTRLMSGS: cGbBCXBsdXM9MTcyMzExNjE0NjU5OV9iNjUyODJlZTMyOGFlMTEwODkzODZkM jc4YmM5Nzk3Mg== X-NTES-SC: AL_Qu2ZAf2auUkv5SKYbOkfmk4aj+k+XsG0vfUj34FWOp9wjA7p/zsLVnZ6A2vM3/yJMCWpuyGuWR9J1cBYVpZ5foIU+F+ghceSEW2KKwxPgxIpUQ== Content-Transfer-Encoding: base64 Content-Type: text/plain; charset=GBK Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-ID: <68f44114.90cb.19131b9c26e.Coremail.xavier_qy@163.com> X-Coremail-Locale: zh_CN X-CM-TRANSID:_____wD3v5NvqrRmEmYSAA--.63918W X-CM-SenderInfo: 50dyxvpubt5qqrwthudrp/1tbiwgsyEGWXwCxBLwAGsd X-Coremail-Antispam: 1U5529EdanIXcx71UUUUU7vcSsGvfC2KfnxnUU== CgpKdXN0IGEgcmVtaW5kZXIsIGRvZXMgYW55b25lIGhhdmUgYW55IGNvbW1lbnRzIG9yIGZlZWRi YWNrIG9uIHRoZSBwYXRjaD8KCi0tCkJlc3QgUmVnYXJkcywKWGF2aWVyCgoKCgpBdCAyMDI0LTA3 LTI1IDE0OjIxOjAzLCAiWGF2aWVyIiA8eGF2aWVyX3F5QDE2My5jb20+IHdyb3RlOgo+Cj5IaSBh bGwsCj4KPkkgd291bGQgbGlrZSB0byBhc2sgZXZlcnlvbmUgZm9yIHlvdXIgb3BpbmlvbnMgb3Ig dGhvdWdodHMgb24gdGhlIFJUIGdyb3VwIHNjaGVkdWxpbmcKPm9wdGltaXphdGlvbi4gQXQgdGhp cyBzdGFnZSwgaXMgaXQgcmVhZHkgdG8gYmUgbWVyZ2VkIGludG8gdGhlIGNvcnJlc3BvbmRpbmcg YnJhbmNoPwo+VGhhbmtzLgo+Cj4tLQo+QmVzdCBSZWdhcmRzLAo+WGF2aWVyCj4KPgo+Cj4KPgo+ QXQgMjAyNC0wNy0xNyAxMTowMDozMiwgIlhhdmllciIgPHhhdmllcl9xeUAxNjMuY29tPiB3cm90 ZToKPj5UaGlzIHBhdGNoIG9wdGltaXplcyB0aGUgZW5xdWV1ZSBhbmQgZGVxdWV1ZSBvZiBydF9z ZSwgdGhlIHN0cmF0ZWd5IGVtcGxveXMKPj5hIGJvdHRvbS11cCByZW1vdmFsIGFwcHJvYWNoLiBT cGVjaWZpY2FsbHksIHdoZW4gcmVtb3ZpbmcgYW4gcnRfc2UgYXQgYQo+PmNlcnRhaW4gbGV2ZWws IGlmIGl0IGlzIGRldGVybWluZWQgdGhhdCB0aGUgaGlnaGVzdCBwcmlvcml0eSBvZiB0aGUgcnEK Pj5hc3NvY2lhdGVkIHdpdGggdGhhdCBydF9zZSBoYXMgbm90IGNoYW5nZWQsIHRoZXJlIGlzIG5v IG5lZWQgdG8gY29udGludWUKPj5yZW1vdmluZyBydF9zZSBhdCBoaWdoZXIgbGV2ZWxzLiBBdCB0 aGlzIHBvaW50LCBvbmx5IHRoZSB0b3RhbCBudW1iZXIKPj5vZiByZW1vdmVkIHJ0X3NlIG5lZWRz IHRvIGJlIHJlY29yZGVkLCBhbmQgdGhlIHJ0X25yX3J1bm5pbmcgY291bnQgb2YKPj5oaWdoZXIt bGV2ZWwgcnEgc2hvdWxkIGJlIHJlbW92ZWQgYWNjb3JkaW5nbHkuCj4+Cj4+U2lnbmVkLW9mZi1i eTogWGF2aWVyIDx4YXZpZXJfcXlAMTYzLmNvbT4KPj4tLS0KPj4ga2VybmVsL3NjaGVkL2RlYnVn LmMgfCAgNDggKysrKysrKysKPj4ga2VybmVsL3NjaGVkL3J0LmMgICAgfCAyODcgKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLQo+PiBrZXJuZWwvc2NoZWQvc2NoZWQu aCB8ICAgMSArCj4+IDMgZmlsZXMgY2hhbmdlZCwgMjk4IGluc2VydGlvbnMoKyksIDM4IGRlbGV0 aW9ucygtKQo+Pgo+PmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvZGVidWcuYyBiL2tlcm5lbC9z Y2hlZC9kZWJ1Zy5jCj4+aW5kZXggYzFlYjlhMWFmZDEzLi4zNTJlZTU1ZGEyNWUgMTAwNjQ0Cj4+ LS0tIGEva2VybmVsL3NjaGVkL2RlYnVnLmMKPj4rKysgYi9rZXJuZWwvc2NoZWQvZGVidWcuYwo+ PkBAIC03MTIsNiArNzEyLDU0IEBAIHZvaWQgcHJpbnRfY2ZzX3JxKHN0cnVjdCBzZXFfZmlsZSAq bSwgaW50IGNwdSwgc3RydWN0IGNmc19ycSAqY2ZzX3JxKQo+PiAjZW5kaWYKPj4gfQo+PiAKPj4r c3RhdGljIHZvaWQgcHJpbnRfcnRfc2Uoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3Qgc2NoZWRf cnRfZW50aXR5ICpydF9zZSkKPj4rewo+PisJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOwo+PisK Pj4rI2lmZGVmIENPTkZJR19SVF9HUk9VUF9TQ0hFRAo+PisJaWYgKHJ0X3NlLT5teV9xKSB7Cj4+ KwkJU0VRX3ByaW50Zl90YXNrX2dyb3VwX3BhdGgobSwgcnRfc2UtPm15X3EtPnRnLCAiJXNcbiIp Owo+PisJCXJldHVybjsKPj4rCX0KPj4rI2VuZGlmCj4+Kwl0YXNrID0gY29udGFpbmVyX29mKHJ0 X3NlLCBzdHJ1Y3QgdGFza19zdHJ1Y3QsIHJ0KTsKPj4rCVNFUV9wcmludGYobSwgIglwcmlvLSVk LCBwaWQtJWQsICVzXG4iLCB0YXNrLT5wcmlvLCB0YXNrLT5waWQsIHRhc2stPmNvbW0pOwo+Pit9 Cj4+Kwo+PisvKnNoYWxsIGJlIGNhbGxlZCBpbiBycSBsb2NrKi8KPj4rdm9pZCBwcmludF9ydF9y cV90YXNrKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IHJ0X3JxICpydF9ycSkKPj4rewo+PisJ c3RydWN0IHJ0X3ByaW9fYXJyYXkgKmFycmF5ID0gJnJ0X3JxLT5hY3RpdmU7Cj4+KwlzdHJ1Y3Qg c2NoZWRfcnRfZW50aXR5ICpydF9zZTsKPj4rCXN0cnVjdCBsaXN0X2hlYWQgKnF1ZXVlLCAqaGVh ZDsKPj4rCXVuc2lnbmVkIGxvbmcgYml0bWFwWzJdOwo+PisJaW50IGlkeDsKPj4rCWludCBjb3Vu dCA9IDA7Cj4+Kwo+PisJaWYgKCFydF9ycS0+cnRfbnJfcnVubmluZykKPj4rCQlyZXR1cm47Cj4+ Kwo+PisJbWVtY3B5KGJpdG1hcCwgYXJyYXktPmJpdG1hcCwgc2l6ZW9mKHVuc2lnbmVkIGxvbmcp ICogMik7Cj4+KwlpZHggPSBzY2hlZF9maW5kX2ZpcnN0X2JpdChiaXRtYXApOwo+PisJV0FSTl9P Tl9PTkNFKGlkeCA+PSBNQVhfUlRfUFJJTyk7Cj4+Kwo+PisJd2hpbGUgKDEpIHsKPj4rCQljbGVh cl9iaXQoaWR4LCBiaXRtYXApOwo+PisJCXF1ZXVlID0gYXJyYXktPnF1ZXVlICsgaWR4Owo+PisJ CWhlYWQgPSBxdWV1ZTsKPj4rCQlxdWV1ZSA9IHF1ZXVlLT5uZXh0Owo+PisJCWRvIHsKPj4rCQkJ cnRfc2UgPSBsaXN0X2VudHJ5KHF1ZXVlLCBzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5LCBydW5fbGlz dCk7Cj4+KwkJCXByaW50X3J0X3NlKG0sIHJ0X3NlKTsKPj4rCQkJcXVldWUgPSBxdWV1ZS0+bmV4 dDsKPj4rCQkJY291bnQrKzsKPj4rCQl9IHdoaWxlIChxdWV1ZSAhPSBoZWFkKTsKPj4rCQlpZHgg PSBzY2hlZF9maW5kX2ZpcnN0X2JpdChiaXRtYXApOwo+PisJCWlmIChpZHggPj0gTUFYX1JUX1BS SU8pCj4+KwkJCWJyZWFrOwo+PisJfQo+Pit9Cj4+Kwo+PiB2b2lkIHByaW50X3J0X3JxKHN0cnVj dCBzZXFfZmlsZSAqbSwgaW50IGNwdSwgc3RydWN0IHJ0X3JxICpydF9ycSkKPj4gewo+PiAjaWZk ZWYgQ09ORklHX1JUX0dST1VQX1NDSEVECj4+ZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9ydC5j IGIva2VybmVsL3NjaGVkL3J0LmMKPj5pbmRleCBhYTRjMWM4NzRmYTQuLmIxOGM0MjRhNTBkMiAx MDA2NDQKPj4tLS0gYS9rZXJuZWwvc2NoZWQvcnQuYwo+PisrKyBiL2tlcm5lbC9zY2hlZC9ydC5j Cj4+QEAgLTExMTMsNyArMTExMyw3IEBAIHZvaWQgZGVjX3J0X3ByaW9fc21wKHN0cnVjdCBydF9y cSAqcnRfcnEsIGludCBwcmlvLCBpbnQgcHJldl9wcmlvKSB7fQo+PiAjZW5kaWYgLyogQ09ORklH X1NNUCAqLwo+PiAKPj4gI2lmIGRlZmluZWQgQ09ORklHX1NNUCB8fCBkZWZpbmVkIENPTkZJR19S VF9HUk9VUF9TQ0hFRAo+Pi1zdGF0aWMgdm9pZAo+PitzdGF0aWMgaW50Cj4+IGluY19ydF9wcmlv KHN0cnVjdCBydF9ycSAqcnRfcnEsIGludCBwcmlvKQo+PiB7Cj4+IAlpbnQgcHJldl9wcmlvID0g cnRfcnEtPmhpZ2hlc3RfcHJpby5jdXJyOwo+PkBAIC0xMTIyLDkgKzExMjIsMTEgQEAgaW5jX3J0 X3ByaW8oc3RydWN0IHJ0X3JxICpydF9ycSwgaW50IHByaW8pCj4+IAkJcnRfcnEtPmhpZ2hlc3Rf cHJpby5jdXJyID0gcHJpbzsKPj4gCj4+IAlpbmNfcnRfcHJpb19zbXAocnRfcnEsIHByaW8sIHBy ZXZfcHJpbyk7Cj4+Kwo+PisJcmV0dXJuIHByZXZfcHJpbyA+IHByaW87Cj4+IH0KPj4gCj4+LXN0 YXRpYyB2b2lkCj4+K3N0YXRpYyBpbnQKPj4gZGVjX3J0X3ByaW8oc3RydWN0IHJ0X3JxICpydF9y cSwgaW50IHByaW8pCj4+IHsKPj4gCWludCBwcmV2X3ByaW8gPSBydF9ycS0+aGlnaGVzdF9wcmlv LmN1cnI7Cj4+QEAgLTExNDksMTIgKzExNTEsMjIgQEAgZGVjX3J0X3ByaW8oc3RydWN0IHJ0X3Jx ICpydF9ycSwgaW50IHByaW8pCj4+IAl9Cj4+IAo+PiAJZGVjX3J0X3ByaW9fc21wKHJ0X3JxLCBw cmlvLCBwcmV2X3ByaW8pOwo+PisJaWYgKHJ0X3JxLT5oaWdoZXN0X3ByaW8uY3VyciA+IHByaW8p Cj4+KwkJcmV0dXJuIHByaW87Cj4+KwllbHNlCj4+KwkJcmV0dXJuIE1BWF9SVF9QUklPOwo+PiB9 Cj4+IAo+PiAjZWxzZQo+PiAKPj4tc3RhdGljIGlubGluZSB2b2lkIGluY19ydF9wcmlvKHN0cnVj dCBydF9ycSAqcnRfcnEsIGludCBwcmlvKSB7fQo+Pi1zdGF0aWMgaW5saW5lIHZvaWQgZGVjX3J0 X3ByaW8oc3RydWN0IHJ0X3JxICpydF9ycSwgaW50IHByaW8pIHt9Cj4+K3N0YXRpYyBpbmxpbmUg aW50IGluY19ydF9wcmlvKHN0cnVjdCBydF9ycSAqcnRfcnEsIGludCBwcmlvKQo+Pit7Cj4+Kwly ZXR1cm4gMDsKPj4rfQo+PitzdGF0aWMgaW5saW5lIGludCBkZWNfcnRfcHJpbyhzdHJ1Y3QgcnRf cnEgKnJ0X3JxLCBpbnQgcHJpbykKPj4rewo+PisJcmV0dXJuIDA7Cj4+K30KPj4gCj4+ICNlbmRp ZiAvKiBDT05GSUdfU01QIHx8IENPTkZJR19SVF9HUk9VUF9TQ0hFRCAqLwo+PiAKPj5AQCAtMTIx OCwyOCArMTIzMCwzMSBAQCB1bnNpZ25lZCBpbnQgcnRfc2VfcnJfbnJfcnVubmluZyhzdHJ1Y3Qg c2NoZWRfcnRfZW50aXR5ICpydF9zZSkKPj4gfQo+PiAKPj4gc3RhdGljIGlubGluZQo+Pi12b2lk IGluY19ydF90YXNrcyhzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSwgc3RydWN0IHJ0X3Jx ICpydF9ycSkKPj4raW50IGluY19ydF90YXNrcyhzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9z ZSwgc3RydWN0IHJ0X3JxICpydF9ycSkKPj4gewo+PiAJaW50IHByaW8gPSBydF9zZV9wcmlvKHJ0 X3NlKTsKPj4rCWludCBwcmlvX2NoYW5nZTsKPj4gCj4+IAlXQVJOX09OKCFydF9wcmlvKHByaW8p KTsKPj4gCXJ0X3JxLT5ydF9ucl9ydW5uaW5nICs9IHJ0X3NlX25yX3J1bm5pbmcocnRfc2UpOwo+ PiAJcnRfcnEtPnJyX25yX3J1bm5pbmcgKz0gcnRfc2VfcnJfbnJfcnVubmluZyhydF9zZSk7Cj4+ IAo+Pi0JaW5jX3J0X3ByaW8ocnRfcnEsIHByaW8pOwo+PisJcHJpb19jaGFuZ2UgPSBpbmNfcnRf cHJpbyhydF9ycSwgcHJpbyk7Cj4+IAlpbmNfcnRfZ3JvdXAocnRfc2UsIHJ0X3JxKTsKPj4rCXJl dHVybiBwcmlvX2NoYW5nZTsKPj4gfQo+PiAKPj4gc3RhdGljIGlubGluZQo+Pi12b2lkIGRlY19y dF90YXNrcyhzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSwgc3RydWN0IHJ0X3JxICpydF9y cSkKPj4raW50IGRlY19ydF90YXNrcyhzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSwgc3Ry dWN0IHJ0X3JxICpydF9ycSwgaW50IHByaW8pCj4+IHsKPj4rCWludCBwcmlvX2NoYW5nZWQ7Cj4+ IAlXQVJOX09OKCFydF9wcmlvKHJ0X3NlX3ByaW8ocnRfc2UpKSk7Cj4+LQlXQVJOX09OKCFydF9y cS0+cnRfbnJfcnVubmluZyk7Cj4+IAlydF9ycS0+cnRfbnJfcnVubmluZyAtPSBydF9zZV9ucl9y dW5uaW5nKHJ0X3NlKTsKPj4gCXJ0X3JxLT5ycl9ucl9ydW5uaW5nIC09IHJ0X3NlX3JyX25yX3J1 bm5pbmcocnRfc2UpOwo+PiAKPj4tCWRlY19ydF9wcmlvKHJ0X3JxLCBydF9zZV9wcmlvKHJ0X3Nl KSk7Cj4+KwlwcmlvX2NoYW5nZWQgPSBkZWNfcnRfcHJpbyhydF9ycSwgcHJpbyk7Cj4+IAlkZWNf cnRfZ3JvdXAocnRfc2UsIHJ0X3JxKTsKPj4rCXJldHVybiBwcmlvX2NoYW5nZWQ7Cj4+IH0KPj4g Cj4+IC8qCj4+QEAgLTEyNTUsMTIgKzEyNzAsMTMgQEAgc3RhdGljIGlubGluZSBib29sIG1vdmVf ZW50aXR5KHVuc2lnbmVkIGludCBmbGFncykKPj4gCXJldHVybiB0cnVlOwo+PiB9Cj4+IAo+Pi1z dGF0aWMgdm9pZCBfX2RlbGlzdF9ydF9lbnRpdHkoc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRf c2UsIHN0cnVjdCBydF9wcmlvX2FycmF5ICphcnJheSkKPj4rc3RhdGljIHZvaWQgX19kZWxpc3Rf cnRfZW50aXR5KHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlLAo+PisJCQkJCQlzdHJ1Y3Qg cnRfcHJpb19hcnJheSAqYXJyYXksIGludCBsYXN0X3ByaW8pCj4+IHsKPj4gCWxpc3RfZGVsX2lu aXQoJnJ0X3NlLT5ydW5fbGlzdCk7Cj4+IAo+Pi0JaWYgKGxpc3RfZW1wdHkoYXJyYXktPnF1ZXVl ICsgcnRfc2VfcHJpbyhydF9zZSkpKQo+Pi0JCV9fY2xlYXJfYml0KHJ0X3NlX3ByaW8ocnRfc2Up LCBhcnJheS0+Yml0bWFwKTsKPj4rCWlmIChsaXN0X2VtcHR5KGFycmF5LT5xdWV1ZSArIGxhc3Rf cHJpbykpCj4+KwkJX19jbGVhcl9iaXQobGFzdF9wcmlvLCBhcnJheS0+Yml0bWFwKTsKPj4gCj4+ IAlydF9zZS0+b25fbGlzdCA9IDA7Cj4+IH0KPj5AQCAtMTM3MSw3ICsxMzg3LDEyIEBAIHVwZGF0 ZV9zdGF0c19kZXF1ZXVlX3J0KHN0cnVjdCBydF9ycSAqcnRfcnEsIHN0cnVjdCBzY2hlZF9ydF9l bnRpdHkgKnJ0X3NlLAo+PiAJfQo+PiB9Cj4+IAo+Pi1zdGF0aWMgdm9pZCBfX2VucXVldWVfcnRf ZW50aXR5KHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlLCB1bnNpZ25lZCBpbnQgZmxhZ3Mp Cj4+Ky8qCj4+KyAqIFJldHVybnM6IC0xIGluZGljYXRlcyB0aGF0IHJ0X3NlIHdhcyBub3QgZW5x dWV1ZWQsIDAgaW5kaWNhdGVzIHRoYXQgdGhlIGhpZ2hlc3QKPj4rICogcHJpb3JpdHkgb2YgdGhl IHJxIGRpZCBub3QgY2hhbmdlIGFmdGVyIGVucXVldWUsIGFuZCAxIGluZGljYXRlcyB0aGF0IHRo ZSBoaWdoZXN0Cj4+KyAqIHByaW9yaXR5IG9mIHRoZSBycSBjaGFuZ2VkIGFmdGVyIGVucXVldWUu Cj4+KyAqLwo+PitzdGF0aWMgaW50IF9fZW5xdWV1ZV9ydF9lbnRpdHkoc3RydWN0IHNjaGVkX3J0 X2VudGl0eSAqcnRfc2UsIHVuc2lnbmVkIGludCBmbGFncykKPj4gewo+PiAJc3RydWN0IHJ0X3Jx ICpydF9ycSA9IHJ0X3JxX29mX3NlKHJ0X3NlKTsKPj4gCXN0cnVjdCBydF9wcmlvX2FycmF5ICph cnJheSA9ICZydF9ycS0+YWN0aXZlOwo+PkBAIC0xMzg2LDggKzE0MDcsOCBAQCBzdGF0aWMgdm9p ZCBfX2VucXVldWVfcnRfZW50aXR5KHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlLCB1bnNp Z25lZCBpbnQgZmxhZwo+PiAJICovCj4+IAlpZiAoZ3JvdXBfcnEgJiYgKHJ0X3JxX3Rocm90dGxl ZChncm91cF9ycSkgfHwgIWdyb3VwX3JxLT5ydF9ucl9ydW5uaW5nKSkgewo+PiAJCWlmIChydF9z ZS0+b25fbGlzdCkKPj4tCQkJX19kZWxpc3RfcnRfZW50aXR5KHJ0X3NlLCBhcnJheSk7Cj4+LQkJ cmV0dXJuOwo+PisJCQlfX2RlbGlzdF9ydF9lbnRpdHkocnRfc2UsIGFycmF5LCBydF9zZV9wcmlv KHJ0X3NlKSk7Cj4+KwkJcmV0dXJuIC0xOwo+PiAJfQo+PiAKPj4gCWlmIChtb3ZlX2VudGl0eShm bGFncykpIHsKPj5AQCAtMTQwMiw3MyArMTQyMywyNjMgQEAgc3RhdGljIHZvaWQgX19lbnF1ZXVl X3J0X2VudGl0eShzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSwgdW5zaWduZWQgaW50IGZs YWcKPj4gCX0KPj4gCXJ0X3NlLT5vbl9ycSA9IDE7Cj4+IAo+Pi0JaW5jX3J0X3Rhc2tzKHJ0X3Nl LCBydF9ycSk7Cj4+KwlyZXR1cm4gaW5jX3J0X3Rhc2tzKHJ0X3NlLCBydF9ycSk7Cj4+IH0KPj4g Cj4+LXN0YXRpYyB2b2lkIF9fZGVxdWV1ZV9ydF9lbnRpdHkoc3RydWN0IHNjaGVkX3J0X2VudGl0 eSAqcnRfc2UsIHVuc2lnbmVkIGludCBmbGFncykKPj4rLyoqCj4+KyAqIGRlbGV0ZSBydF9zZSBm cm9tIHJ0X3JxCj4+KyAqCj4+KyAqIEBydF9zZQkJTm9kZXMgdG8gYmUgZGVsZXRlZAo+PisgKiBA bGFzdF9wcmlvCVRoZSBoaWdoZXN0IHByaW9yaXR5IG9mIHRoaXMgcnRfc2UgYmVmb3JlIHRoZSBw cmV2aW91cyByb3VuZAo+PisgKgkJCQlvZiBkZWxldGlvbgo+PisgKiBAZmxhZ3MJCW9wZXJhdGlv biBmbGFncwo+PisgKgo+PisgKiBSZXR1cm5zOiA9MCBpbmRpY2F0ZXMgdGhhdCB0aGUgaGlnaGVz dCBwcmlvcml0eSBvZiB0aGUgY3VycmVudCBycSBkaWQgbm90Cj4+KyAqIGNoYW5nZSBkdXJpbmcg dGhpcyBkZWxldGlvbi4gPjAgaW5kaWNhdGVzIGl0IGNoYW5nZWQsIGFuZCBpdCByZXR1cm5zIHRo ZQo+PisgKiBwcmV2aW91cyBoaWdoZXN0IHByaW9yaXR5IHRvIHVzZSBpbiB0aGUgbmV4dCByb3Vu ZCBvZiBkZWxldGlvbi4KPj4rICovCj4+K3N0YXRpYyBpbnQgX19kZXF1ZXVlX3J0X2VudGl0eShz dHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSwgaW50IGxhc3RfcHJpbywKPj4rCQkJCQkJCQkJ dW5zaWduZWQgaW50IGZsYWdzKQo+PiB7Cj4+IAlzdHJ1Y3QgcnRfcnEgKnJ0X3JxID0gcnRfcnFf b2Zfc2UocnRfc2UpOwo+PiAJc3RydWN0IHJ0X3ByaW9fYXJyYXkgKmFycmF5ID0gJnJ0X3JxLT5h Y3RpdmU7Cj4+IAo+PiAJaWYgKG1vdmVfZW50aXR5KGZsYWdzKSkgewo+PiAJCVdBUk5fT05fT05D RSghcnRfc2UtPm9uX2xpc3QpOwo+Pi0JCV9fZGVsaXN0X3J0X2VudGl0eShydF9zZSwgYXJyYXkp Owo+PisJCV9fZGVsaXN0X3J0X2VudGl0eShydF9zZSwgYXJyYXksIGxhc3RfcHJpbyk7Cj4+IAl9 Cj4+IAlydF9zZS0+b25fcnEgPSAwOwo+PiAKPj4tCWRlY19ydF90YXNrcyhydF9zZSwgcnRfcnEp Owo+PisJcmV0dXJuIGRlY19ydF90YXNrcyhydF9zZSwgcnRfcnEsIGxhc3RfcHJpbyk7Cj4+K30K Pj4rCj4+K3N0YXRpYyBpbmxpbmUgdm9pZCBkZWNfcnFfbnJfcnVubmluZyhzdHJ1Y3Qgc2NoZWRf cnRfZW50aXR5ICpydF9zZSwKPj4rCQkJCQkJdW5zaWduZWQgaW50IHJ0LCB1bnNpZ25lZCBpbnQg cnIpCj4+K3sKPj4rCXN0cnVjdCBydF9ycSAqcnRfcnEgPSBydF9ycV9vZl9zZShydF9zZSk7Cj4+ Kwo+PisJcnRfcnEtPnJ0X25yX3J1bm5pbmcgLT0gcnQ7Cj4+KwlydF9ycS0+cnJfbnJfcnVubmlu ZyAtPSBycjsKPj4rfQo+PisKPj4rc3RhdGljIGlubGluZSB2b2lkIGFkZF9ycV9ucl9ydW5uaW5n KHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlLAo+PisJCQkJCQl1bnNpZ25lZCBpbnQgcnQs IHVuc2lnbmVkIGludCBycikKPj4rewo+PisJc3RydWN0IHJ0X3JxICpydF9ycSA9IHJ0X3JxX29m X3NlKHJ0X3NlKTsKPj4rCj4+KwlydF9ycS0+cnRfbnJfcnVubmluZyArPSBydDsKPj4rCXJ0X3Jx LT5ycl9ucl9ydW5uaW5nICs9IHJyOwo+Pit9Cj4+Kwo+PitzdGF0aWMgaW5saW5lIGJvb2wgb25f dG9wX3J0X3JxKHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlKQo+Pit7Cj4+KyNpZmRlZiBD T05GSUdfUlRfR1JPVVBfU0NIRUQKPj4rCWlmIChydF9zZS0+cGFyZW50KQo+PisJCXJldHVybiBm YWxzZTsKPj4rI2VuZGlmCj4+KwlyZXR1cm4gdHJ1ZTsKPj4gfQo+PiAKPj4gLyoKPj4tICogQmVj YXVzZSB0aGUgcHJpbyBvZiBhbiB1cHBlciBlbnRyeSBkZXBlbmRzIG9uIHRoZSBsb3dlcgo+Pi0g KiBlbnRyaWVzLCB3ZSBtdXN0IHJlbW92ZSBlbnRyaWVzIHRvcCAtIGRvd24uCj4+KyAqIFRvIG9w dGltaXplIHRoZSBlbnF1ZXVlIGFuZCBkZXF1ZXVlIG9mIHJ0X3NlLCB0aGlzIHN0cmF0ZWd5IGVt cGxveXMgYQo+PisgKiBib3R0b20tdXAgcmVtb3ZhbCBhcHByb2FjaC4gU3BlY2lmaWNhbGx5LCB3 aGVuIHJlbW92aW5nIGFuIHJ0X3NlIGF0IGEKPj4rICogY2VydGFpbiBsZXZlbCwgaWYgaXQgaXMg ZGV0ZXJtaW5lZCB0aGF0IHRoZSBoaWdoZXN0IHByaW9yaXR5IG9mIHRoZSBycQo+PisgKiBhc3Nv Y2lhdGVkIHdpdGggdGhhdCBydF9zZSBoYXMgbm90IGNoYW5nZWQsIHRoZXJlIGlzIG5vIG5lZWQg dG8gY29udGludWUKPj4rICogcmVtb3ZpbmcgcnRfc2UgYXQgaGlnaGVyIGxldmVscy4gQXQgdGhp cyBwb2ludCwgb25seSB0aGUgdG90YWwgbnVtYmVyCj4+KyAqIG9mIHJlbW92ZWQgcnRfc2UgbmVl ZHMgdG8gYmUgcmVjb3JkZWQsIGFuZCB0aGUgcnRfbnJfcnVubmluZyBjb3VudCBvZgo+PisgKiBo aWdoZXItbGV2ZWwgcnEgc2hvdWxkIGJlIHJlbW92ZWQgYWNjb3JkaW5nbHkuCj4+KyAqCj4+KyAq IEZvciBlbnF1ZXVlIG9wZXJhdGlvbnMsIGlmIGFuIHJ0X3NlIGF0IGEgY2VydGFpbiBsZXZlbCBp cyBpbiB0aGUgcnEsCj4+KyAqIGl0IGlzIHN0aWxsIG5lY2Vzc2FyeSB0byBjaGVjayB0aGUgcHJp b3JpdHkgb2YgdGhlIGhpZ2hlci1sZXZlbCBycS4KPj4rICogSWYgdGhlIHByaW9yaXR5IG9mIHRo ZSBoaWdoZXItbGV2ZWwgcnEgaXMgZm91bmQgdG8gYmUgbG93ZXIgdGhhbiB0aGF0Cj4+KyAqIG9m IHRoZSBydF9zZSB0byBiZSBhZGRlZCwgaXQgc2hvdWxkIGJlIHJlbW92ZWQsIGFzIHVwZGF0aW5n IHRoZSBoaWdoZXN0Cj4+KyAqIHByaW9yaXR5IG9mIHRoZSBycSBkdXJpbmcgYWRkaXRpb24gd2ls bCBjYXVzZSB0aGUgcnEgdG8gYmUgcmVwb3NpdGlvbmVkCj4+KyAqIGluIHRoZSBwYXJlbnQgcnEu Cj4+KyAqCj4+KyAqIENvbnZlcnNlbHksIGZvciBkZXF1ZXVlIG9wZXJhdGlvbnMsIGlmIGFuIHJ0 X3NlIGF0IGEgY2VydGFpbiBsZXZlbCBpcwo+PisgKiBub3QgaW4gdGhlIHJxLCB0aGUgb3BlcmF0 aW9uIGNhbiBiZSBleGl0ZWQgaW1tZWRpYXRlbHkgdG8gcmVkdWNlCj4+KyAqIHVubmVjZXNzYXJ5 IGNoZWNrcyBhbmQgaGFuZGxpbmcuCj4+KyAqCj4+KyAqIFRoZSByZXR1cm4gdmFsdWUgcmVmZXJz IHRvIHRoZSBsYXN0IHJ0X3NlIHRoYXQgd2FzIHJlbW92ZWQgZm9yIGVucXVldWUKPj4rICogb3Bl cmF0aW9ucy4gQW5kIGZvciBkZXF1ZXVlIG9wZXJhdGlvbnMsIGl0IHJlZmVycyB0byB0aGUgbGFz dCBydF9zZQo+PisgKiB0aGF0IHdhcyBlaXRoZXIgcmVtb3ZlZCBvciBoYWQgaXRzIHJ0X25yX3J1 bm5pbmcgdXBkYXRlZC4KPj4gICovCj4+LXN0YXRpYyB2b2lkIGRlcXVldWVfcnRfc3RhY2soc3Ry dWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UsIHVuc2lnbmVkIGludCBmbGFncykKPj4rc3RhdGlj IHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKmRlcXVldWVfcnRfc3RhY2soc3RydWN0IHNjaGVkX3J0 X2VudGl0eSAqcnRfc2UsCj4+KwkJCQkJCXVuc2lnbmVkIGludCBmbGFncywgaW50IGZvcl9lbnF1 ZXVlKQo+PiB7Cj4+LQlzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpiYWNrID0gTlVMTDsKPj4tCXVu c2lnbmVkIGludCBydF9ucl9ydW5uaW5nOwo+PisJc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqbGFz dCA9IHJ0X3NlOwo+PisJc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqb3JpZ2luID0gcnRfc2U7Cj4+ Kwl1bnNpZ25lZCBpbnQgZGVsX3J0X25yID0gMDsKPj4rCXVuc2lnbmVkIGludCBkZWxfcnJfbnIg PSAwOwo+PisJaW50IHByaW9fY2hhbmdlZCA9IHJ0X3NlX3ByaW8ocnRfc2UpOwo+PisJaW50IHN1 Yl9vbl9ycSA9IDE7Cj4+IAo+PiAJZm9yX2VhY2hfc2NoZWRfcnRfZW50aXR5KHJ0X3NlKSB7Cj4+ LQkJcnRfc2UtPmJhY2sgPSBiYWNrOwo+Pi0JCWJhY2sgPSBydF9zZTsKPj4tCX0KPj4rCQlpZiAo b25fcnRfcnEocnRfc2UpKSB7Cj4+KwkJCWlmIChzdWJfb25fcnEpIHsKPj4rCQkJCS8qCj4+KwkJ CQkgKiBUaGUgbnVtYmVyIG9mIHRhc2tzIHJlbW92ZWQgZnJvbSB0aGUgc3ViLWxldmVsIHJ0X3Nl IGFsc28gbmVlZHMKPj4rCQkJCSAqIHRvIGJlIHN1YnRyYWN0ZWQgZnJvbSB0aGUgcnEgb2YgdGhl IGN1cnJlbnQgcnRfc2UsIGFzIHRoZSBjdXJyZW50Cj4+KwkJCQkgKiBydF9zZSdzIHJxIG5vIGxv bmdlciBpbmNsdWRlcyB0aGUgbnVtYmVyIG9mIHJlbW92ZWQgdGFza3MuCj4+KwkJCQkgKi8KPj4r CQkJCWRlY19ycV9ucl9ydW5uaW5nKHJ0X3NlLCBkZWxfcnRfbnIsIGRlbF9ycl9ucik7Cj4+KwkJ CQlpZiAoKHByaW9fY2hhbmdlZCAhPSBNQVhfUlRfUFJJTykgfHwKPj4rCQkJCQkocnRfc2VfcHJp byhydF9zZSkgPiBydF9zZV9wcmlvKG9yaWdpbikpKSB7Cj4+KwkJCQkJLyoKPj4rCQkJCQkgKiBJ ZiB0aGUgcmVtb3ZhbCBvZiB0aGUgbG93ZXItbGV2ZWwgcnRfc2UgY2F1c2VzIHRoZQo+PisJCQkJ CSAqIGhpZ2hlc3QgcHJpb3JpdHkgb2YgdGhlIGN1cnJlbnQgcnEgdG8gY2hhbmdlLCBvciBpZiB0 aGUKPj4rCQkJCQkgKiBwcmlvcml0eSBvZiBjdXJyZW50IHJxIGlzIGxvd2VyIHRoYW4gdGhlIHJ0 X3NlIHRvIGJlCj4+KwkJCQkJICogYWRkZWQsIHRoZW4gdGhlIGN1cnJlbnQgcnRfc2UgYWxzbyBu ZWVkcyB0byBiZSByZW1vdmVkCj4+KwkJCQkJICogZnJvbSBpdHMgcGFyZW50IHJxLCBhbmQgdGhl IG51bWJlciBvZiBkZWxldGVkIHRhc2tzCj4+KwkJCQkJICogc2hvdWxkIGJlIGFjY3VtdWxhdGVk Lgo+PisJCQkJCSAqLwo+PisJCQkJCWlmIChwcmlvX2NoYW5nZWQgPT0gTUFYX1JUX1BSSU8pCj4+ KwkJCQkJCXByaW9fY2hhbmdlZCA9IHJ0X3NlX3ByaW8ocnRfc2UpOwo+PisJCQkJCWRlbF9ydF9u ciArPSBydF9zZV9ucl9ydW5uaW5nKHJ0X3NlKTsKPj4rCQkJCQlkZWxfcnJfbnIgKz0gcnRfc2Vf cnJfbnJfcnVubmluZyhydF9zZSk7Cj4+KwkJCQkJcHJpb19jaGFuZ2VkID0gX19kZXF1ZXVlX3J0 X2VudGl0eShydF9zZSwKPj4rCQkJCQkJCQkJcHJpb19jaGFuZ2VkLCBmbGFncyk7Cj4+KwkJCQkJ bGFzdCA9IHJ0X3NlOwo+PisJCQkJfSBlbHNlIGlmICghZm9yX2VucXVldWUpIHsKPj4rCQkJCQkv KiBGb3IgZGVxdWV1ZSwgbGFzdCBtYXkgb25seSBydF9ucl9ydW5uaW5nIHdhcyBtb2RpZmllZC4q Lwo+PisJCQkJCWxhc3QgPSBydF9zZTsKPj4rCQkJCX0KPj4rCQkJfSBlbHNlIHsKPj4rCQkJCS8q Cj4+KwkJCQkgKiBFbnRlcmluZyB0aGlzIGJyYW5jaCBtdXN0IGJlIGZvciBlbnF1ZXVlLCBhcyBk ZXF1ZXVlIHdvdWxkIGJyZWFrCj4+KwkJCQkgKiBpZiBhbiBydF9zZSBpcyBub3Qgb25saW5lLgo+ PisJCQkJICogSWYgdGhlIHN1Yi1sZXZlbCBub2RlIGlzIG5vdCBvbmxpbmUsIGFuZCB0aGUgY3Vy cmVudCBydF9zZSdzCj4+KwkJCQkgKiBwcmlvcml0eSBpcyBsb3dlciB0aGFuIHRoZSBvbmUgYmVp bmcgYWRkZWQsIGN1cnJlbnQgcnRfc2UgbmVlZAo+PisJCQkJICogdG8gYmUgcmVtb3ZlZC4KPj4r CQkJCSAqLwo+PisJCQkJcHJpb19jaGFuZ2VkID0gcnRfc2VfcHJpbyhydF9zZSk7Cj4+KwkJCQlp ZiAocHJpb19jaGFuZ2VkID4gcnRfc2VfcHJpbyhvcmlnaW4pKSB7Cj4+KwkJCQkJZGVsX3J0X25y ICs9IHJ0X3NlX25yX3J1bm5pbmcocnRfc2UpOwo+PisJCQkJCWRlbF9ycl9uciArPSBydF9zZV9y cl9ucl9ydW5uaW5nKHJ0X3NlKTsKPj4rCQkJCQlwcmlvX2NoYW5nZWQgPSBfX2RlcXVldWVfcnRf ZW50aXR5KHJ0X3NlLAo+PisJCQkJCQkJCQlwcmlvX2NoYW5nZWQsIGZsYWdzKTsKPj4rCQkJCQls YXN0ID0gcnRfc2U7Cj4+KwkJCQl9IGVsc2Ugewo+PisJCQkJCXByaW9fY2hhbmdlZCA9IE1BWF9S VF9QUklPOwo+PisJCQkJfQo+PisJCQl9Cj4+IAo+Pi0JcnRfbnJfcnVubmluZyA9IHJ0X3JxX29m X3NlKGJhY2spLT5ydF9ucl9ydW5uaW5nOwo+PisJCQkvKgo+PisJCQkgKiBJZiB0aGUgY3VycmVu dCBydF9zZSBpcyBvbiB0aGUgdG9wIHJ0X3JxLCB0aGVuIHRoZSBhbHJlYWR5IGRlbGV0ZWQKPj4r CQkJICogbm9kZXMsIHBsdXMgdGhlIGNvdW50IG9mIHRoZSBydF9ycSB3aGVyZSBjdXJyZW50IHJ0 X3NlIGxvY2F0ZWQsCj4+KwkJCSAqIG5lZWQgdG8gYmUgcmVtb3ZlZCBmcm9tIHRoZSB0b3BfcnRf cnEuCj4+KwkJCSAqLwo+PisJCQlpZiAob25fdG9wX3J0X3JxKHJ0X3NlKSkgewo+PisJCQkJZGVx dWV1ZV90b3BfcnRfcnEocnRfcnFfb2Zfc2UocnRfc2UpLAo+PisJCQkJCQlkZWxfcnRfbnIgKyBy dF9ycV9vZl9zZShydF9zZSktPnJ0X25yX3J1bm5pbmcpOwo+PisJCQl9Cj4+KwkJCXN1Yl9vbl9y cSA9IDE7Cj4+KwkJfSBlbHNlIGlmIChmb3JfZW5xdWV1ZSkgewo+PisJCQlzdHJ1Y3QgcnRfcnEg Kmdyb3VwX3JxID0gZ3JvdXBfcnRfcnEocnRfc2UpOwo+PiAKPj4tCWZvciAocnRfc2UgPSBiYWNr OyBydF9zZTsgcnRfc2UgPSBydF9zZS0+YmFjaykgewo+Pi0JCWlmIChvbl9ydF9ycShydF9zZSkp Cj4+LQkJCV9fZGVxdWV1ZV9ydF9lbnRpdHkocnRfc2UsIGZsYWdzKTsKPj4rCQkJLyoKPj4rCQkJ ICogSW4gdGhlIGNhc2Ugb2YgYW4gZW5xdWV1ZSBvcGVyYXRpb24sIGlmIGEgY2VydGFpbiBsZXZl bCBpcyBmb3VuZCB0byBiZQo+PisJCQkgKiBub3Qgb25saW5lLCB0aGVuIHRoZSBwcmV2aW91cyBj b3VudHMgbmVlZCB0byBiZSByZXNldCB0byB6ZXJvLgo+PisJCQkgKi8KPj4rCQkJcHJpb19jaGFu Z2VkID0gTUFYX1JUX1BSSU87Cj4+KwkJCXN1Yl9vbl9ycSA9IDA7Cj4+KwkJCWRlbF9ydF9uciA9 IDA7Cj4+KwkJCWRlbF9ycl9uciA9IDA7Cj4+Kwo+PisJCQkvKgo+PisJCQkgKiBJZiB0aGUgY3Vy cmVudCBncm91cCBpcyBiZWluZyB0aHJvdHRsZWQsIHRoZW4gdGhlcmUgaXMgbm8gbmVlZCB0byBj aGVjawo+PisJCQkgKiBoaWdoZXIgbGV2ZWxzIHNpbmNlIGVucXVldWVpbmcgd2lsbCBub3QgYWZm ZWN0IGhpZ2hlci1sZXZlbCBub2Rlcy4KPj4rCQkJICovCj4+KwkJCWlmIChncm91cF9ycSAmJiBy dF9ycV90aHJvdHRsZWQoZ3JvdXBfcnEpKQo+PisJCQkJYnJlYWs7Cj4+Kwo+PisJCQlpZiAob25f dG9wX3J0X3JxKHJ0X3NlKSkKPj4rCQkJCWRlcXVldWVfdG9wX3J0X3JxKHJ0X3JxX29mX3NlKHJ0 X3NlKSwKPj4rCQkJCQkJcnRfcnFfb2Zfc2UocnRfc2UpLT5ydF9ucl9ydW5uaW5nKTsKPj4rCQl9 IGVsc2Ugewo+PisJCQlsYXN0ID0gcnRfc2U7Cj4+KwkJCWJyZWFrOwo+PisJCX0KPj4gCX0KPj4g Cj4+LQlkZXF1ZXVlX3RvcF9ydF9ycShydF9ycV9vZl9zZShiYWNrKSwgcnRfbnJfcnVubmluZyk7 Cj4+KwlyZXR1cm4gbGFzdDsKPj4gfQo+PiAKPj4gc3RhdGljIHZvaWQgZW5xdWV1ZV9ydF9lbnRp dHkoc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UsIHVuc2lnbmVkIGludCBmbGFncykKPj4g ewo+PiAJc3RydWN0IHJxICpycSA9IHJxX29mX3J0X3NlKHJ0X3NlKTsKPj4rCXN0cnVjdCBzY2hl ZF9ydF9lbnRpdHkgKmxhc3Q7Cj4+Kwl1bnNpZ25lZCBpbnQgYWRkX3J0X25yID0gMDsKPj4rCXVu c2lnbmVkIGludCBhZGRfcnJfbnIgPSAwOwo+PisJaW50IGVucXVldWUgPSAxOwo+PisJaW50IHBy aW9fY2hhbmdlID0gMTsKPj4gCj4+IAl1cGRhdGVfc3RhdHNfZW5xdWV1ZV9ydChydF9ycV9vZl9z ZShydF9zZSksIHJ0X3NlLCBmbGFncyk7Cj4+IAo+Pi0JZGVxdWV1ZV9ydF9zdGFjayhydF9zZSwg ZmxhZ3MpOwo+Pi0JZm9yX2VhY2hfc2NoZWRfcnRfZW50aXR5KHJ0X3NlKQo+Pi0JCV9fZW5xdWV1 ZV9ydF9lbnRpdHkocnRfc2UsIGZsYWdzKTsKPj4rCWxhc3QgPSBkZXF1ZXVlX3J0X3N0YWNrKHJ0 X3NlLCBmbGFncywgMSk7Cj4+Kwo+PisJZm9yX2VhY2hfc2NoZWRfcnRfZW50aXR5KHJ0X3NlKSB7 Cj4+KwkJaWYgKGVucXVldWUgfHwgIW9uX3J0X3JxKHJ0X3NlKSB8fCAocHJpb19jaGFuZ2UgPT0g MSkpIHsKPj4rCQkJcHJpb19jaGFuZ2UgPSBfX2VucXVldWVfcnRfZW50aXR5KHJ0X3NlLCBmbGFn cyk7Cj4+KwkJCWlmIChwcmlvX2NoYW5nZSA+PSAwKSB7Cj4+KwkJCQlhZGRfcnRfbnIgPSBydF9z ZV9ucl9ydW5uaW5nKHJ0X3NlKTsKPj4rCQkJCWFkZF9ycl9uciA9IHJ0X3NlX3JyX25yX3J1bm5p bmcocnRfc2UpOwo+PisJCQl9IGVsc2Ugewo+PisJCQkJYWRkX3J0X25yID0gYWRkX3JyX25yID0g MDsKPj4rCQkJfQo+PisJCX0gZWxzZSB7Cj4+KwkJCWFkZF9ycV9ucl9ydW5uaW5nKHJ0X3NlLCBh ZGRfcnRfbnIsIGFkZF9ycl9ucik7Cj4+KwkJfQo+PisKPj4rCQlpZiAocnRfc2UgPT0gbGFzdCkK Pj4rCQkJZW5xdWV1ZSA9IDA7Cj4+Kwl9Cj4+Kwo+PiAJZW5xdWV1ZV90b3BfcnRfcnEoJnJxLT5y dCk7Cj4+IH0KPj4gCj4+IHN0YXRpYyB2b2lkIGRlcXVldWVfcnRfZW50aXR5KHN0cnVjdCBzY2hl ZF9ydF9lbnRpdHkgKnJ0X3NlLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCj4+IHsKPj4gCXN0cnVjdCBy cSAqcnEgPSBycV9vZl9ydF9zZShydF9zZSk7Cj4+KwlzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICps YXN0Owo+PisJdW5zaWduZWQgaW50IGFkZF9ydF9uciA9IDA7Cj4+Kwl1bnNpZ25lZCBpbnQgYWRk X3JyX25yID0gMDsKPj4rCWludCBwcmlvX2NoYW5nZSA9IDE7Cj4+IAo+PiAJdXBkYXRlX3N0YXRz X2RlcXVldWVfcnQocnRfcnFfb2Zfc2UocnRfc2UpLCBydF9zZSwgZmxhZ3MpOwo+PiAKPj4tCWRl cXVldWVfcnRfc3RhY2socnRfc2UsIGZsYWdzKTsKPj4rCWxhc3QgPSBkZXF1ZXVlX3J0X3N0YWNr KHJ0X3NlLCBmbGFncywgMCk7Cj4+IAo+PiAJZm9yX2VhY2hfc2NoZWRfcnRfZW50aXR5KHJ0X3Nl KSB7Cj4+IAkJc3RydWN0IHJ0X3JxICpydF9ycSA9IGdyb3VwX3J0X3JxKHJ0X3NlKTsKPj4rCQlp ZiAocnRfcnEgJiYgcnRfcnEtPnJ0X25yX3J1bm5pbmcpIHsKPj4rCQkJaWYgKG9uX3J0X3JxKHJ0 X3NlKSkgewo+PisJCQkJYWRkX3JxX25yX3J1bm5pbmcocnRfc2UsIGFkZF9ydF9uciwgYWRkX3Jy X25yKTsKPj4rCQkJfSBlbHNlIHsKPj4rCQkJCXByaW9fY2hhbmdlID0gX19lbnF1ZXVlX3J0X2Vu dGl0eShydF9zZSwgZmxhZ3MpOwo+PisJCQkJaWYgKHByaW9fY2hhbmdlID09IDApIHsKPj4rCQkJ CQkvKgo+PisJCQkJCSAqIElmIGVucXVldWUgaXMgc3VjY2Vzc2Z1bCBhbmQgdGhlIHByaW9yaXR5 IG9mIHRoZSBycSBoYXMKPj4rCQkJCQkgKiBub3QgY2hhbmdlZCwgdGhlbiB0aGUgcGFyZW50IG5v ZGUgb25seSBuZWVkcyB0byBhZGQgdGhlCj4+KwkJCQkJICogY291bnQgb2YgdGhlIGN1cnJlbnQg cnRfc2UuIE90aGVyd2lzZSwgdGhlIHBhcmVudCBub2RlCj4+KwkJCQkJICogd2lsbCBhbHNvIG5l ZWQgdG8gZW5xdWV1ZS4KPj4rCQkJCQkgKi8KPj4rCQkJCQlhZGRfcnRfbnIgPSBydF9zZV9ucl9y dW5uaW5nKHJ0X3NlKTsKPj4rCQkJCQlhZGRfcnJfbnIgPSBydF9zZV9ycl9ucl9ydW5uaW5nKHJ0 X3NlKTsKPj4rCQkJCX0KPj4rCQkJfQo+PisJCX0gZWxzZSB7Cj4+KwkJCWFkZF9ydF9uciA9IGFk ZF9ycl9uciA9IDA7Cj4+KwkJfQo+PiAKPj4tCQlpZiAocnRfcnEgJiYgcnRfcnEtPnJ0X25yX3J1 bm5pbmcpCj4+LQkJCV9fZW5xdWV1ZV9ydF9lbnRpdHkocnRfc2UsIGZsYWdzKTsKPj4rCQkvKgo+ PisJCSAqIGxhc3QgaXMgdGhlIHJ0X3NlIG9mIHRoZSBsYXN0IGRlbGV0aW9uIG9yIG1vZGlmaWNh dGlvbiBvZiB0aGUKPj4rCQkgKiBjb3VudCwgc28gdGhlIHN1YnNlcXVlbnQgcnRfc2UgZG9lcyBu b3QgbmVlZCB0byBiZSB1cGRhdGVkLgo+PisJCSAqLwo+PisJCWlmIChydF9zZSA9PSBsYXN0KQo+ PisJCQlicmVhazsKPj4gCX0KPj4rCj4+IAllbnF1ZXVlX3RvcF9ydF9ycSgmcnEtPnJ0KTsKPj4g fQo+PiAKPj5kaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkL3NjaGVkLmggYi9rZXJuZWwvc2NoZWQv c2NoZWQuaAo+PmluZGV4IGVmMjBjNjEwMDRlYi4uODIxZDY1MTA2ZDEzIDEwMDY0NAo+Pi0tLSBh L2tlcm5lbC9zY2hlZC9zY2hlZC5oCj4+KysrIGIva2VybmVsL3NjaGVkL3NjaGVkLmgKPj5AQCAt Mjg3OSw2ICsyODc5LDcgQEAgZXh0ZXJuIHZvaWQgcHJpbnRfcnRfc3RhdHMoc3RydWN0IHNlcV9m aWxlICptLCBpbnQgY3B1KTsKPj4gZXh0ZXJuIHZvaWQgcHJpbnRfZGxfc3RhdHMoc3RydWN0IHNl cV9maWxlICptLCBpbnQgY3B1KTsKPj4gZXh0ZXJuIHZvaWQgcHJpbnRfY2ZzX3JxKHN0cnVjdCBz ZXFfZmlsZSAqbSwgaW50IGNwdSwgc3RydWN0IGNmc19ycSAqY2ZzX3JxKTsKPj4gZXh0ZXJuIHZv aWQgcHJpbnRfcnRfcnEoc3RydWN0IHNlcV9maWxlICptLCBpbnQgY3B1LCBzdHJ1Y3QgcnRfcnEg KnJ0X3JxKTsKPj4rZXh0ZXJuIHZvaWQgcHJpbnRfcnRfcnFfdGFzayhzdHJ1Y3Qgc2VxX2ZpbGUg Km0sIHN0cnVjdCBydF9ycSAqcnRfcnEpOwo+PiBleHRlcm4gdm9pZCBwcmludF9kbF9ycShzdHJ1 Y3Qgc2VxX2ZpbGUgKm0sIGludCBjcHUsIHN0cnVjdCBkbF9ycSAqZGxfcnEpOwo+PiAKPj4gZXh0 ZXJuIHZvaWQgcmVzY2hlZF9sYXRlbmN5X3dhcm4oaW50IGNwdSwgdTY0IGxhdGVuY3kpOwo+Pi0t IAo+PjIuNDUuMgo=