From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from [222.73.24.84] (helo=song.cn.fujitsu.com) by merlin.infradead.org with esmtp (Exim 4.80.1 #2 (Red Hat Linux)) id 1UQajo-0007x6-Ia for kexec@lists.infradead.org; Fri, 12 Apr 2013 09:57:47 +0000 Message-ID: <5167DA38.3050600@cn.fujitsu.com> Date: Fri, 12 Apr 2013 17:56:08 +0800 From: Zhang Yanfei MIME-Version: 1.0 Subject: Re: [PATCH 5/5] kexec: X86: Pass memory ranges via e820 table instead of memmap= boot parameter References: <1365683207-42425-1-git-send-email-trenn@suse.de> <1365683207-42425-6-git-send-email-trenn@suse.de> In-Reply-To: <1365683207-42425-6-git-send-email-trenn@suse.de> List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "kexec" Errors-To: kexec-bounces+dwmw2=twosheds.infradead.org@lists.infradead.org To: Thomas Renninger Cc: kexec@lists.infradead.org, horms@verge.net.au, "Eric W. Biederman" , "H. Peter Anvin" , yinghai@kernel.org, cpw@sgi.com, vgoyal@redhat.com 5LqOIDIwMTPlubQwNOaciDEx5pelIDIwOjI2LCBUaG9tYXMgUmVubmluZ2VyIOWGmemBkzoKPiBD dXJyZW50bHkgcmFuZ2VzIGFyZSBwYXNzZWQgdmlhIGtlcm5lbCBib290IHBhcmFtZXRlcnM6Cj4g bWVtbWFwPWV4YWN0bWFwIG1lbW1hcD1YI1kgbWVtbWFwPQo+IAo+IFBhc3MgdGhlbSB2aWEgZTgy MCB0YWJsZSBkaXJlY3RseSBpbnN0ZWFkLgo+IAo+IENDOiBTaW1vbiBIb3JtYW4gPGhvcm1zQHZl cmdlLm5ldC5hdT4KPiBDQzoga2V4ZWNAbGlzdHMuaW5mcmFkZWFkLm9yZwo+IENDOiBILiBQZXRl ciBBbnZpbiA8aHBhQHp5dG9yLmNvbT4KPiBDQzogRXJpYyBXLiBCaWVkZXJtYW4gPGViaWVkZXJt QHhtaXNzaW9uLmNvbT4KPiBDQzogdmdveWFsQHJlZGhhdC5jb20KPiBDQzogeWluZ2hhaUBrZXJu ZWwub3JnCj4gQ0M6IGNwd0BzZ2kuY29tCj4gCj4gU2lnbmVkLW9mZi1ieTogVGhvbWFzIFJlbm5p bmdlciA8dHJlbm5Ac3VzZS5kZT4KPiBTaWduZWQtb2ZmLWJ5OiBUaG9tYXMgUmVubmluZ2VyIDxU aG9tYXMgUmVubmluZ2VyIiB0cmVubkBzdXNlLmRlPgo+IC0tLQo+ICBrZXhlYy9hcmNoL2kzODYv Y3Jhc2hkdW1wLXg4Ni5jICAgfCAgMjIxICsrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0t LS0tLS0KPiAga2V4ZWMvYXJjaC9pMzg2L3g4Ni1saW51eC1zZXR1cC5jIHwgICAxMSArKy0KPiAg MiBmaWxlcyBjaGFuZ2VkLCAxMTYgaW5zZXJ0aW9ucygrKSwgMTE2IGRlbGV0aW9ucygtKQo+IAo+ IGRpZmYgLS1naXQgYS9rZXhlYy9hcmNoL2kzODYvY3Jhc2hkdW1wLXg4Ni5jIGIva2V4ZWMvYXJj aC9pMzg2L2NyYXNoZHVtcC14ODYuYwo+IGluZGV4IGY3ODIxYmMuLjgwMDllZmUgMTAwNjQ0Cj4g LS0tIGEva2V4ZWMvYXJjaC9pMzg2L2NyYXNoZHVtcC14ODYuYwo+ICsrKyBiL2tleGVjL2FyY2gv aTM4Ni9jcmFzaGR1bXAteDg2LmMKPiBAQCAtNjU5LDcwICs2NTksNiBAQCBzdGF0aWMgdm9pZCB1 bHRvYSh1bnNpZ25lZCBsb25nIGksIGNoYXIgKnN0cikKPiAgCX0KPiAgfQo+ICAKPiAtc3RhdGlj IHZvaWQgY21kbGluZV9hZGRfbWVtbWFwX2ludGVybmFsKGNoYXIgKmNtZGxpbmUsIHVuc2lnbmVk IGxvbmcgc3RhcnRrLAo+IC0JCQkJCXVuc2lnbmVkIGxvbmcgZW5kaywgaW50IHR5cGUpCj4gLXsK PiAtCWludCBjbWRsZW4sIGxlbjsKPiAtCWNoYXIgc3RyX21tYXBbMjU2XSwgc3RyX3RtcFsyMF07 Cj4gLQo+IC0Jc3RyY3B5IChzdHJfbW1hcCwgIiBtZW1tYXA9Iik7Cj4gLQl1bHRvYSgoZW5kay1z dGFydGspLCBzdHJfdG1wKTsKPiAtCXN0cmNhdCAoc3RyX21tYXAsIHN0cl90bXApOwo+IC0KPiAt CWlmICh0eXBlID09IFJBTkdFX1JBTSkKPiAtCQlzdHJjYXQgKHN0cl9tbWFwLCAiS0AiKTsKPiAt CWVsc2UgaWYgKHR5cGUgPT0gUkFOR0VfUkVTRVJWRUQpCj4gLQkJc3RyY2F0IChzdHJfbW1hcCwg IkskIik7Cj4gLQllbHNlIGlmICh0eXBlID09IFJBTkdFX0FDUEkgfHwgdHlwZSA9PSBSQU5HRV9B Q1BJX05WUykKPiAtCQlzdHJjYXQgKHN0cl9tbWFwLCAiSyMiKTsKPiAtCj4gLQl1bHRvYShzdGFy dGssIHN0cl90bXApOwo+IC0Jc3RyY2F0IChzdHJfbW1hcCwgc3RyX3RtcCk7Cj4gLQlzdHJjYXQg KHN0cl9tbWFwLCAiSyIpOwo+IC0JbGVuID0gc3RybGVuKHN0cl9tbWFwKTsKPiAtCWNtZGxlbiA9 IHN0cmxlbihjbWRsaW5lKSArIGxlbjsKPiAtCWlmIChjbWRsZW4gPiAoQ09NTUFORF9MSU5FX1NJ WkUgLSAxKSkKPiAtCQlkaWUoIkNvbW1hbmQgbGluZSBvdmVyZmxvd1xuIik7Cj4gLQlzdHJjYXQo Y21kbGluZSwgc3RyX21tYXApOwo+IC19Cj4gLQo+IC0vKiBBZGRzIHRoZSBhcHByb3ByaWF0ZSBt ZW1tYXA9IG9wdGlvbnMgdG8gY29tbWFuZCBsaW5lLCBpbmRpY2F0aW5nIHRoZQo+IC0gKiBtZW1v cnkgcmVnaW9ucyB0aGUgbmV3IGtlcm5lbCBjYW4gdXNlIHRvIGJvb3QgaW50by4gKi8KPiAtc3Rh dGljIGludCBjbWRsaW5lX2FkZF9tZW1tYXAoY2hhciAqY21kbGluZSwgc3RydWN0IG1lbW9yeV9y YW5nZSAqbWVtbWFwX3ApCj4gLXsKPiAtCWludCBpLCBjbWRsZW4sIGxlbjsKPiAtCXVuc2lnbmVk IGxvbmcgbWluX3NpemVrID0gMTAwOwo+IC0JY2hhciBzdHJfbW1hcFsyNTZdOwo+IC0KPiAtCS8q IEV4YWN0IG1hcCAqLwo+IC0Jc3RyY3B5KHN0cl9tbWFwLCAiIG1lbW1hcD1leGFjdG1hcCIpOwo+ IC0JbGVuID0gc3RybGVuKHN0cl9tbWFwKTsKPiAtCWNtZGxlbiA9IHN0cmxlbihjbWRsaW5lKSAr IGxlbjsKPiAtCWlmIChjbWRsZW4gPiAoQ09NTUFORF9MSU5FX1NJWkUgLSAxKSkKPiAtCQlkaWUo IkNvbW1hbmQgbGluZSBvdmVyZmxvd1xuIik7Cj4gLQlzdHJjYXQoY21kbGluZSwgc3RyX21tYXAp Owo+IC0KPiAtCWZvciAoaSA9IDA7IGkgPCBDUkFTSF9NQVhfTUVNTUFQX05SOyAgaSsrKSB7Cj4g LQkJdW5zaWduZWQgbG9uZyBzdGFydGssIGVuZGs7Cj4gLQkJc3RhcnRrID0gKG1lbW1hcF9wW2ld LnN0YXJ0LzEwMjQpOwo+IC0JCWVuZGsgPSAoKG1lbW1hcF9wW2ldLmVuZCArIDEpLzEwMjQpOwo+ IC0JCWlmICghc3RhcnRrICYmICFlbmRrKQo+IC0JCQkvKiBBbGwgcmVnaW9ucyB0cmF2ZXJzZWQu ICovCj4gLQkJCWJyZWFrOwo+IC0KPiAtCQkvKiBBIHJlZ2lvbiBpcyBub3Qgd29ydGggYWRkaW5n IGlmIHJlZ2lvbiBzaXplIDwgMTAwSy4gSXQgZWF0cwo+IC0JCSAqIHVwIHByZWNpb3VzIGNvbW1h bmQgbGluZSBsZW5ndGguICovCj4gLQkJaWYgKChlbmRrIC0gc3RhcnRrKSA8IG1pbl9zaXplaykK PiAtCQkJY29udGludWU7Cj4gLQkJY21kbGluZV9hZGRfbWVtbWFwX2ludGVybmFsKGNtZGxpbmUs IHN0YXJ0aywgZW5kaywgUkFOR0VfUkFNKTsKPiAtCX0KPiAtCj4gLQlkYmdwcmludGYoIkNvbW1h bmQgbGluZSBhZnRlciBhZGRpbmcgbWVtbWFwXG4iKTsKPiAtCWRiZ3ByaW50ZigiJXNcbiIsIGNt ZGxpbmUpOwo+IC0KPiAtCXJldHVybiAwOwo+IC19Cj4gLQo+ICAvKiBBZGRzIHRoZSBlbGZjb3Jl aGRyPSBjb21tYW5kIGxpbmUgcGFyYW1ldGVyIHRvIGNvbW1hbmQgbGluZS4gKi8KPiAgc3RhdGlj IGludCBjbWRsaW5lX2FkZF9lbGZjb3JlaGRyKGNoYXIgKmNtZGxpbmUsIHVuc2lnbmVkIGxvbmcg YWRkcikKPiAgewo+IEBAIC04MDMsMjYgKzczOSw2IEBAIHN0YXRpYyBlbnVtIGNvcmV0eXBlIGdl dF9jb3JlX3R5cGUoc3RydWN0IGNyYXNoX2VsZl9pbmZvICplbGZfaW5mbywKPiAgCX0KPiAgfQo+ ICAKPiAtLyogQXBwZW5kcyBtZW1tYXA9WCNZIGNvbW1hbmRsaW5lIGZvciBBQ1BJIHRvIGNvbW1h bmQgbGluZSovCj4gLXN0YXRpYyBpbnQgY21kbGluZV9hZGRfbWVtbWFwX2FjcGkoY2hhciAqY21k bGluZSwgdW5zaWduZWQgbG9uZyBzdGFydCwKPiAtCQkJCQl1bnNpZ25lZCBsb25nIGVuZCkKPiAt ewo+IC0JaW50IGFsaWduID0gMTAyNDsKPiAtCXVuc2lnbmVkIGxvbmcgc3RhcnRrLCBlbmRrOwo+ IC0KPiAtCWlmICghKGVuZCAtIHN0YXJ0KSkKPiAtCQlyZXR1cm4gMDsKPiAtCj4gLQlzdGFydGsg PSBzdGFydC8xMDI0Owo+IC0JZW5kayA9IChlbmQgKyBhbGlnbiAtIDEpLzEwMjQ7Cj4gLQljbWRs aW5lX2FkZF9tZW1tYXBfaW50ZXJuYWwoY21kbGluZSwgc3RhcnRrLCBlbmRrLCBSQU5HRV9BQ1BJ KTsKPiAtCj4gLQlkYmdwcmludGYoIkNvbW1hbmQgbGluZSBhZnRlciBhZGRpbmcgYWNwaSBtZW1t YXBcbiIpOwo+IC0JZGJncHJpbnRmKCIlc1xuIiwgY21kbGluZSk7Cj4gLQo+IC0JcmV0dXJuIDA7 Cj4gLX0KPiAtCj4gIC8qIEFwcGVuZHMgJ2FjcGlfcnNkcD0nIGNvbW1hbmRsaW5lIGZvciBlZmkg Ym9vdCBjcmFzaCBkdW1wICovCj4gIHN0YXRpYyB2b2lkIGNtZGxpbmVfYWRkX2VmaShjaGFyICpj bWRsaW5lKQo+ICB7Cj4gQEAgLTg4MSwyNCArNzk3LDEwMSBAQCBzdGF0aWMgdm9pZCBnZXRfYmFj a3VwX2FyZWEoc3RydWN0IGtleGVjX2luZm8gKmluZm8sCj4gIAlpbmZvLT5iYWNrdXBfc3JjX3Np emUgPSBCQUNLVVBfU1JDX0VORCAtIEJBQ0tVUF9TUkNfU1RBUlQgKyAxOwo+ICB9Cj4gIAo+IC0v KiBBcHBlbmRzIG1lbW1hcD1YJFkgY29tbWFuZGxpbmUgZm9yIHJlc2VydmVkIG1lbW9yeSB0byBj b21tYW5kIGxpbmUqLwo+IC1zdGF0aWMgaW50IGNtZGxpbmVfYWRkX21lbW1hcF9yZXNlcnZlZChj aGFyICpjbWRsaW5lLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAo+IC0JCQkJCXVuc2lnbmVkIGxvbmcg ZW5kKQo+ICsvKgo+ICsgKiBUaGlzIGZ1bmN0aW9uIHRha2VzIHJlc2VydmVkIChhbGwga2luZCBv ZikgbWVtb3J5IGZyb20gZ2xvYmFsCj4gKyAqIGNyYXNoX21lbW9yeV9yYW5nZVtdIG1lbW9yeSBy YW5nZXMgYW5kIHRha2VzIG1lbW9yeSB0aGUga2R1bXAvY3Jhc2gKPiArICoga2VybmVsIGlzIGFs bG93ZWQgdG8gdXNlIGZyb20gdGhlIHBhc3NlZCB1c2FibGVfbWVtIG1lbW9yeSByYW5nZXMuIAo+ ICsgKiBUaGUgcGFzc2VkIHVzYWJsZV9tZW0gcmFuZ2VzIGFyZSB6ZXJvICghc3RhcnQgJiYgIWVu ZCkgdGVybWluYXRlZC4KPiArICoKPiArICogVGhlIGZpbmFsIG1lbW9yeSBtYXAgaXMgYWdhaW4g d3JpdHRlbiBpbnRvIGNyYXNoX21lbW9yeV9yYW5nZVtdCj4gKyAqIGFuZCBpbnRlbmRlZCB0byBn ZXQgcGFzc2VkIGFzIGU4MjAgdGFibGUgdG8gdGhlIGNyYXNoIGtlcm5lbAo+ICsgKi8KPiArc3Rh dGljIGludCBjcmVhdGVfZmluYWxfY3Jhc2hfbWFwKHN0cnVjdCBtZW1vcnlfcmFuZ2UgKnVzYWJs ZV9tZW0pCj4gIHsKPiAtCWludCBhbGlnbiA9IDEwMjQ7Cj4gLQl1bnNpZ25lZCBsb25nIHN0YXJ0 aywgZW5kazsKPiArCWludCBpLCBtLCBjLCB0bXBfbWFwMV9yYW5nZXMsIHRtcF9tYXAyX3Jhbmdl czsKPiArCXVuc2lnbmVkIGxvbmcgbWluX3NpemVrID0gMTAwOwo+ICsJLyogY3Jhc2hfbWVtb3J5 X21hcCB3aXRoIHVzYWJsZSBtZW1vcnkgcmFuZ2VzIGN1dCBvdXQgKi8KPiArCXN0cnVjdCBtZW1v cnlfcmFuZ2UgdG1wX21hcDFbTUFYX01FTU9SWV9SQU5HRVNdOwo+ICsJLyogbWVyZ2VfbWFwLCBi dXQgc21hbGwgcmFuZ2VzIGN1dCBvdXQgKi8KPiArCXN0cnVjdCBtZW1vcnlfcmFuZ2UgdG1wX21h cDJbTUFYX01FTU9SWV9SQU5HRVNdOwo+ICAKPiAtCWlmICghKGVuZCAtIHN0YXJ0KSkKPiAtCQly ZXR1cm4gMDsKPiArCS8qCj4gKwkgKiBJZ25vcmUgdXNhYmxlIG1lbW9yeSByYW5nZXMgZm9yIGtk dW1wIGtlcm5lbCBzbWFsbGVyCj4gKwkgKiB0aGFuIDEwMGsgdG8gYXZvaWQgdG9vIG11Y2ggcmFu Z2VzIHBhc3NlZAo+ICsJICogU2F2ZSB0aGUgbmV3IHJhbmdlcyAoZXhsdWRpbmcgbG93ZXIgdGhh biAxMDBrIHJhbmdlcykgaW4gdG1wX21hcAo+ICsJICogYW5kIHN0b3JlIHRoZSBudW1iZXIgb2Yg ZWxlbWVudHMgaW4gdG1wX21hcF9yYW5nZXMKPiArCSAqLwo+ICsJZm9yIChtID0gMCwgaSA9IDA7 IGkgPCBDUkFTSF9NQVhfTUVNTUFQX05SOyBpKyspIHsKPiArCQl1bnNpZ25lZCBsb25nIHN0YXJ0 aywgZW5kazsKPiArCQlzdGFydGsgPSAodXNhYmxlX21lbVtpXS5zdGFydC8xMDI0KTsKPiArCQll bmRrID0gKCh1c2FibGVfbWVtW2ldLmVuZCArIDEpLzEwMjQpOwo+ICsJCWlmICghc3RhcnRrICYm ICFlbmRrKQo+ICsJCQkvKiBBbGwgcmVnaW9ucyB0cmF2ZXJzZWQuICovCj4gKwkJCWJyZWFrOwo+ ICsKPiArCQkvKiBBIHJlZ2lvbiBpcyBub3Qgd29ydGggYWRkaW5nIGlmIHJlZ2lvbiBzaXplIDwg MTAwSy4gSXQgZWF0cwo+ICsJCSAqIHVwIHByZWNpb3VzIGNvbW1hbmQgbGluZSBsZW5ndGguICov CgpOb3cgeW91IGFyZSBwYXNzaW5nIHRoZSBlODIwIHRhYmxlIGRpcmVjdGx5IGluc3RlYWQgb2Yg dGhlIGNvbW1hbmRsaW5lLCBzbyBkb2VzCnRoaXMgY29tbWVudCBtYWtlIHNlbnNlIG5vdz8KCj4g KwkJaWYgKChlbmRrIC0gc3RhcnRrKSA8IG1pbl9zaXplaykgewo+ICsJCQlkYmdwcmludGYoIlJl bW92aW5nOiAlbHVrIC0gJWx1a1xuIiwgc3RhcnRrLCBlbmRrKTsKPiArCQkJY29udGludWU7Cj4g KwkJfSBlbHNlIHsKPiArCQkJdG1wX21hcDFbbV0uc3RhcnQgPSB1c2FibGVfbWVtW2ldLnN0YXJ0 Owo+ICsJCQl0bXBfbWFwMVttXS5lbmQgICA9IHVzYWJsZV9tZW1baV0uZW5kOwo+ICsJCQl0bXBf bWFwMVttXS50eXBlID0gdXNhYmxlX21lbVtpXS50eXBlOwo+ICsJCQltKys7Cj4gKwkJfQo+ICsJ fQo+ICsJLyogTm8gbmVlZCB0byBjaGVjayBmb3IgIXN0YXJ0ICYmICFlbmQgYW55bW9yZSAqLwo+ ICsJdG1wX21hcDFfcmFuZ2VzID0gbTsKPiAgCj4gLQlzdGFydGsgPSBzdGFydC8xMDI0Owo+IC0J ZW5kayA9IChlbmQgKyBhbGlnbiAtIDEpLzEwMjQ7Cj4gLQljbWRsaW5lX2FkZF9tZW1tYXBfaW50 ZXJuYWwoY21kbGluZSwgc3RhcnRrLCBlbmRrLCBSQU5HRV9SRVNFUlZFRCk7Cj4gKwlmb3IoaSA9 IDA7IGkgPCB0bXBfbWFwMV9yYW5nZXM7ICsraSkKPiArCQlkYmdwcmludGYoIiUwMTZMeC0lMDE2 THggKCVkKVxuIiwgdG1wX21hcDFbaV0uc3RhcnQsCj4gKwkJCSAgdG1wX21hcDFbaV0uZW5kLCB0 bXBfbWFwMVtpXS50eXBlKTsKPiArCj4gKwkvKgo+ICsJICogQ3V0IG91dCBSQU5HRV9SQU0gcmVn aW9ucyBmcm9tIGNyYXNoX21lbW9yeV9yYW5nZXMgYW5kIHN0b3JlCj4gKwkgKiB0aGVtIGluIHRt cF9tYXAyX3Jhbmdlcwo+ICsJICovCj4gKwlmb3IgKGMgPSAwLCBpID0gMDsgaSA8IGNyYXNoX3Jh bmdlczsgaSsrKSB7Cj4gKwkJaWYgKGNyYXNoX21lbW9yeV9yYW5nZVtpXS50eXBlID09IFJBTkdF X1JBTSkKPiArCQkJY29udGludWU7Cj4gKwkJdG1wX21hcDJbY10uc3RhcnQgPSBjcmFzaF9tZW1v cnlfcmFuZ2VbaV0uc3RhcnQ7Cj4gKwkJdG1wX21hcDJbY10uZW5kID0gY3Jhc2hfbWVtb3J5X3Jh bmdlW2ldLmVuZDsKPiArCQl0bXBfbWFwMltjXS50eXBlID0gY3Jhc2hfbWVtb3J5X3JhbmdlW2ld LnR5cGU7Cj4gKwkJYysrOwo+ICsJfQo+ICsJdG1wX21hcDJfcmFuZ2VzID0gYzsKPiArCj4gKwkv Kgo+ICsJICogVEJEOiBDaGVjayB0aGF0IG5vIHJhbmdlcyBvdmVybGFwPwo+ICsJICogQ2FuIHRo aXMgaGFwcGVuIGF0IGFsbD8KPiArCSAqLwo+ICsJZm9yIChjID0gMCwgbSA9IDAsIGkgPSAwOyBp IDwgTUFYX01FTU9SWV9SQU5HRVM7IGkrKykgewo+ICsJCWlmIChtIDwgdG1wX21hcDFfcmFuZ2Vz ICYmCj4gKwkJICAgIChjID49IHRtcF9tYXAyX3JhbmdlcyB8fAo+ICsJCSAgICAgdG1wX21hcDJb Y10uc3RhcnQgPiB0bXBfbWFwMVttXS5zdGFydCkpIHsKPiArCQkJY3Jhc2hfbWVtb3J5X3Jhbmdl W2ldLnN0YXJ0ID0gdG1wX21hcDFbbV0uc3RhcnQ7Cj4gKwkJCWNyYXNoX21lbW9yeV9yYW5nZVtp XS5lbmQgICA9IHRtcF9tYXAxW21dLmVuZDsKPiArCQkJY3Jhc2hfbWVtb3J5X3JhbmdlW2ldLnR5 cGUgID0gUkFOR0VfUkFNOwo+ICsJCQltKys7Cj4gKwkJCWNvbnRpbnVlOwo+ICsJCX0gZWxzZSBp ZiAoYyA8IHRtcF9tYXAyX3Jhbmdlcykgewo+ICsJCQljcmFzaF9tZW1vcnlfcmFuZ2VbaV0gPSB0 bXBfbWFwMltjXTsKPiArCQkJYysrOwo+ICsJCQljb250aW51ZTsKPiArCQl9IGVsc2UKPiArCQkJ YnJlYWs7Cj4gKwl9Cj4gKwljcmFzaF9yYW5nZXMgPSBpOwo+ICsKPiArCS8qCj4gKwkgKiBFbmQg YWRkcmVzcyBoYXMgdG8gYmUgZXhsdXNpdmUgZm9yIGU4MjAgbWFwCj4gKwkgKiB4ICAgICAgICAt IDAwMDEwMDAwCj4gKwkgKiAwMDAxMDAwMCAtIHkKPiArCSAqLwo+ICsJZm9yKGkgPSAwOyBpIDwg Y3Jhc2hfcmFuZ2VzOyArK2kpCj4gKwkJY3Jhc2hfbWVtb3J5X3JhbmdlW2ldLmVuZCsrOwo+ICAK PiAtI2lmZGVmIERFQlVHCj4gLQkJcHJpbnRmKCJDb21tYW5kIGxpbmUgYWZ0ZXIgYWRkaW5nIHJl c2VydmVkIG1lbW1hcFxuIik7Cj4gLQkJcHJpbnRmKCIlc1xuIiwgY21kbGluZSk7Cj4gLSNlbmRp Zgo+ICAJcmV0dXJuIDA7Cj4gIH0KPiAgCj4gQEAgLTk0NCw2ICs5MzcsMTIgQEAgaW50IGxvYWRf Y3Jhc2hkdW1wX3NlZ21lbnRzKHN0cnVjdCBrZXhlY19pbmZvICppbmZvLCBjaGFyKiBtb2RfY21k bGluZSwKPiAgCQlyZXR1cm4gLTE7Cj4gIAl9Cj4gIAo+ICsJLyoKPiArCSAqIEZyb20gbm93IG9u IHRoZSBtZW1vcnkgcmVnaW9ucyBhcmUgc3RvcmVkIGluIGNyYXNoX21lbW9yeV9yYW5nZVtdCj4g KwkgKiBDdXJyZW50bHkgdGhlIGVuZCBhZGRyZXNzIGlzIGluY2x1c2l2ZSBhdCB0aGlzIHBvaW50 Ogo+ICsJICogeCAgICAgICAgLSAwMDAwZmZmZgo+ICsJICogMDAwMTAwMDAgLSB5Cj4gKwkgKi8K PiAgCWlmICh4ZW5fcHJlc2VudCgpKSB7Cj4gIAkJaWYgKGdldF9jcmFzaF9tZW1vcnlfcmFuZ2Vz X3hlbigmbWVtX3JhbmdlLCAmY3Jhc2hfcmFuZ2VzLAo+ICAJCQkJCQllbGZfaW5mby5sb3dtZW1f bGltaXQpIDwgMCkKPiBAQCAtOTcxLDcgKzk3MCw3IEBAIGludCBsb2FkX2NyYXNoZHVtcF9zZWdt ZW50cyhzdHJ1Y3Qga2V4ZWNfaW5mbyAqaW5mbywgY2hhciogbW9kX2NtZGxpbmUsCj4gIAo+ICAJ Z2V0X2JhY2t1cF9hcmVhKGluZm8sIG1lbV9yYW5nZSwgY3Jhc2hfcmFuZ2VzKTsKPiAgCj4gLQlk YmdwcmludGYoIkNSQVNIIE1FTU9SWSBSQU5HRVNcbiIpOwo+ICsJZGJncHJpbnRmKCJURU1QT1JB UlkgQ1JBU0ggTUVNT1JZIFJBTkdFU1xuIik7Cj4gIAo+ICAJZm9yKGkgPSAwOyBpIDwgY3Jhc2hf cmFuZ2VzOyArK2kpCj4gIAkJZGJncHJpbnRmKCIlMDE2THgtJTAxNkx4ICglZClcbiIsIG1lbV9y YW5nZVtpXS5zdGFydCwKPiBAQCAtMTA2MywyNCArMTA2MiwxOCBAQCBpbnQgbG9hZF9jcmFzaGR1 bXBfc2VnbWVudHMoc3RydWN0IGtleGVjX2luZm8gKmluZm8sIGNoYXIqIG1vZF9jbWRsaW5lLAo+ ICAJZGJncHJpbnRmKCJDcmVhdGVkIGVsZiBoZWFkZXIgc2VnbWVudCBhdCAweCVseFxuIiwgZWxm Y29yZWhkcik7Cj4gIAlpZiAoZGVsZXRlX21lbW1hcChtZW1tYXBfcCwgZWxmY29yZWhkciwgbWVt c3opIDwgMCkKPiAgCQlyZXR1cm4gLTE7Cj4gLQljbWRsaW5lX2FkZF9tZW1tYXAobW9kX2NtZGxp bmUsIG1lbW1hcF9wKTsKPiAgCWNtZGxpbmVfYWRkX2VmaShtb2RfY21kbGluZSk7Cj4gIAljbWRs aW5lX2FkZF9lbGZjb3JlaGRyKG1vZF9jbWRsaW5lLCBlbGZjb3JlaGRyKTsKPiAgCj4gLQkvKiBJ bmZvcm0gc2Vjb25kIGtlcm5lbCBhYm91dCB0aGUgcHJlc2VuY2Ugb2YgQUNQSSB0YWJsZXMuICov Cj4gLQlmb3IgKGkgPSAwOyBpIDwgTUFYX01FTU9SWV9SQU5HRVM7IGkrKykgewo+IC0JCXVuc2ln bmVkIGxvbmcgc3RhcnQsIGVuZDsKPiAtCQlpZiAoICEoIG1lbV9yYW5nZVtpXS50eXBlID09IFJB TkdFX0FDUEkKPiAtCQkJfHwgbWVtX3JhbmdlW2ldLnR5cGUgPT0gUkFOR0VfQUNQSV9OVlMKPiAt CQkJfHwgbWVtX3JhbmdlW2ldLnR5cGUgPT0gUkFOR0VfUkVTRVJWRUQpICkKPiAtCQkJY29udGlu dWU7Cj4gLQkJc3RhcnQgPSBtZW1fcmFuZ2VbaV0uc3RhcnQ7Cj4gLQkJZW5kID0gbWVtX3Jhbmdl W2ldLmVuZDsKPiAtCQlpZiAobWVtX3JhbmdlW2ldLnR5cGUgPT0gUkFOR0VfUkVTRVJWRUQpCj4g LQkJCWNtZGxpbmVfYWRkX21lbW1hcF9yZXNlcnZlZChtb2RfY21kbGluZSwgc3RhcnQsIGVuZCk7 Cj4gLQkJZWxzZQo+IC0JCQljbWRsaW5lX2FkZF9tZW1tYXBfYWNwaShtb2RfY21kbGluZSwgc3Rh cnQsIGVuZCk7Cj4gLQl9Cj4gKwkvKgo+ICsJICogUmVkbyBjcmFzaF9tZW1vcnlfcmFuZ2Ugc28g dGhhdCBpdCBjYW4gZ2V0IHBhc3NlZCBhcyBlODIwIGluZm8KPiArCSAqLwo+ICsJY3JlYXRlX2Zp bmFsX2NyYXNoX21hcChtZW1tYXBfcCk7Cj4gKwo+ICsJZGJncHJpbnRmKCJGSU5BTCBDUkFTSCBN RU1PUlkgUkFOR0VTXG4iKTsKPiArCWZvcihpID0gMDsgaSA8IGNyYXNoX3JhbmdlczsgKytpKQo+ ICsJCWRiZ3ByaW50ZigiJTAxNkx4LSUwMTZMeCAoJWQpXG4iLCBtZW1fcmFuZ2VbaV0uc3RhcnQs Cj4gKwkJCSAgbWVtX3JhbmdlW2ldLmVuZCwgbWVtX3JhbmdlW2ldLnR5cGUpOwo+ICAJcmV0dXJu IDA7Cj4gIH0KPiAgCj4gZGlmZiAtLWdpdCBhL2tleGVjL2FyY2gvaTM4Ni94ODYtbGludXgtc2V0 dXAuYyBiL2tleGVjL2FyY2gvaTM4Ni94ODYtbGludXgtc2V0dXAuYwo+IGluZGV4IGM1Mzg4OTcu LjgyYjRiYjkgMTAwNjQ0Cj4gLS0tIGEva2V4ZWMvYXJjaC9pMzg2L3g4Ni1saW51eC1zZXR1cC5j Cj4gKysrIGIva2V4ZWMvYXJjaC9pMzg2L3g4Ni1saW51eC1zZXR1cC5jCj4gQEAgLTUwNSw4ICs1 MDUsMTUgQEAgdm9pZCBzZXR1cF9saW51eF9zeXN0ZW1fcGFyYW1ldGVycyhzdHJ1Y3Qga2V4ZWNf aW5mbyAqaW5mbywKPiAgCS8qIGFub3RoZXIgc2FmZSBkZWZhdWx0ICovCj4gIAlyZWFsX21vZGUt PmF1eF9kZXZpY2VfaW5mbyA9IDA7Cj4gIAo+IC0JcmFuZ2UgPSBpbmZvLT5tZW1vcnlfcmFuZ2U7 Cj4gLQlyYW5nZXMgPSBpbmZvLT5tZW1vcnlfcmFuZ2VzOwo+ICsJaWYgKGluZm8tPmtleGVjX2Zs YWdzICYgS0VYRUNfT05fQ1JBU0ggfHwgCj4gKwkgICAgaW5mby0+a2V4ZWNfZmxhZ3MgJiBLRVhF Q19QUkVTRVJWRV9DT05URVhUKSB7Cj4gKwkJcmFuZ2UgPSBjcmFzaF9tZW1vcnlfcmFuZ2U7Cj4g KwkJcmFuZ2VzID0gY3Jhc2hfcmFuZ2VzOwo+ICsJfSBlbHNlIHsKPiArCQlyYW5nZSA9IGluZm8t Pm1lbW9yeV9yYW5nZTsKPiArCQlyYW5nZXMgPSBpbmZvLT5tZW1vcnlfcmFuZ2VzOwo+ICsJfQo+ ICsKPiAgCWlmIChyYW5nZXMgPiBFODIwTUFYKSB7Cj4gIAkJaWYgKCEoaW5mby0+a2V4ZWNfZmxh Z3MgJiBLRVhFQ19PTl9DUkFTSCkpCj4gIAkJCS8qCgoKX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18Ka2V4ZWMgbWFpbGluZyBsaXN0CmtleGVjQGxpc3RzLmlu ZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9r ZXhlYwo=