From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail.intermedia.net (intermedia.net [206.40.48.150] (may be forged)) by kvack.org (8.8.7/8.8.7) with SMTP id PAA02553 for ; Mon, 8 Feb 1999 15:34:22 -0500 Received: from [193.159.21.157] by mail.colorfullife.com (NTMail 3.03.0017/1.abcr) with ESMTP id na315549 for ; Mon, 8 Feb 1999 12:32:03 -0800 Message-ID: <003201be53a2$43d766f0$c80c17ac@clmsdev> Reply-To: "Manfred Spraul" From: "Manfred Spraul" Subject: Re: Large memory system Date: Mon, 8 Feb 1999 21:33:09 +0100 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_NextPart_000_0029_01BE53AA.9F52C4E0" Sender: owner-linux-mm@kvack.org To: "Stephen C. Tweedie" , "Benjamin C.R. LaHaise" Cc: Daniel Blakeley , linux-mm@kvack.org List-ID: This is a multi-part message in MIME format. ------=_NextPart_000_0029_01BE53AA.9F52C4E0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Stephen C. Tweedie wrote: > > Hi, > > On Sat, 30 Jan 1999 12:00:53 -0500 (EST), "Benjamin C.R. LaHaise" > said: > > > Easily isn't a good way of putting it, unless you're talking about doing > > something like mmap on /dev/mem, in which case you could make the > > user/kernel virtual spilt weigh heavy on the user side and do memory > > allocation yourself. If you're talking about doing it transparently, > > you're best bet is to do something like davem's suggested high mem > > approach, and only use non-kernel mapped memory for user pages... if you > > want to be able to support the page cache in high memory, things get > > messy. > > No it doesn't! The only tricky thing is IO, but we need to have bounce > buffers to high memory anyway for swapping. The page cache uses "struct > page" addresses in preference to actual page data pointers almost > everywhere anyway, and whenever we are doing something like read(2) or > write(2) functions, we just need a single per-CPU virtual pte in the > vmalloc region to temporarily map the page into memory while we copy to > user space (and remember that we do this from the context of the user > process anyway, so we don't have to remap the user page even if it is in > high memory). > There is another possibility if you want to extend the page cache: Add a 'second level cache': if shrink_mmap wants to discard a page from the page cache, it is saved in the physical memory cache. if __find_page() can't find a page in the normal cache, it checks if it is in the physical memory cache. If so, the entry is copied into the normal cache. You only have to modify three or four lines in filemap.c & pagemap.h. I've attached a patch that extends the page cache, but it's incomplete: there is no way to configure the cache, and it's ugly. Manfred ------=_NextPart_000_0029_01BE53AA.9F52C4E0 Content-Type: application/octet-stream; name="patch2" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="patch2" ZGlmZiAtdSAtciAtUCAyLjIuMS9Eb2N1bWVudGF0aW9uL0NvbmZpZ3VyZS5oZWxwIGN1cnJlbnQv RG9jdW1lbnRhdGlvbi9Db25maWd1cmUuaGVscAotLS0gMi4yLjEvRG9jdW1lbnRhdGlvbi9Db25m aWd1cmUuaGVscAlXZWQgSmFuIDIwIDIwOjA1OjMyIDE5OTkKKysrIGN1cnJlbnQvRG9jdW1lbnRh dGlvbi9Db25maWd1cmUuaGVscAlTdW4gRmViICA3IDIwOjM3OjA1IDE5OTkKQEAgLTIyOSw2ICsy MjksMjIgQEAKIAogICBNb3N0IHVzZXJzIHdpbGwgYW5zd2VyIE4gaGVyZS4KIAorSHVnZXJhbSBS YW1kaXNrCitDT05GSUdfQkxLX0RFVl9IVUdFUkFNRAorICBTYXlpbmcgWSBoZXJlIG1ha2VzIGl0 IHBvc3NpYmxlIHRvIHVzZSB0aGUgbWVtb3J5IGFib3ZlIDEgZ2lnYWJ5dGUKKyAgYXMgYSByYW1k aXNrLiBUaGlzIG9ubHkgd29ya3MgaWYgeW91IGhhdmUgZW5hYmxlZCBDT05GSUdfSFVHRU1FTS4K KyAgCisgIFRoZSByYW1kaXNrIGNhbiBiZSBhY2Nlc3NlZCB0aHJvdWdoIGJsb2NrIHNwZWNpYWwg ZmlsZXMKKyAgL2Rldi9odWdlcmFtMCAuLi4gL2Rldi9odWdlcmFtNywgd2l0aCBtYWpvciBudW1i ZXIgMTI2IGFuZAorICBtaW5vciBudW1iZXJzIDAuLjcgKGRvICJtYW4gbWtub2QiIGZvciBoZWxw IGhvdyB0byBjcmVhdGUgdGhlbSkKKyAgCisgIElmIHlvdSB3YW50IHRvIGNvbXBpbGUgdGhpcyBk cml2ZXIgYXMgYSBtb2R1bGUgKCA9IGNvZGUgd2hpY2ggY2FuIGJlCisgIGluc2VydGVkIGluIGFu ZCByZW1vdmVkIGZyb20gdGhlIHJ1bm5pbmcga2VybmVsIHdoZW5ldmVyIHlvdSB3YW50KSwKKyAg c2F5IE0gaGVyZSBhbmQgcmVhZCBEb2N1bWVudGF0aW9uL21vZHVsZXMudHh0LiBUaGUgbW9kdWxl IHdpbGwgYmUKKyAgY2FsbGVkIGh1Z2VyYW1kLm8uCisgIAorICBNb3N0IHVzZXJzIHdpbGwgYW5z d2VyIE4gaGVyZS4KKwogTmV0d29yayBCbG9jayBEZXZpY2Ugc3VwcG9ydAogQ09ORklHX0JMS19E RVZfTkJECiAgIFNheWluZyBZIGhlcmUgd2lsbCBhbGxvdyB5b3VyIGNvbXB1dGVyIHRvIGJlIGEg Y2xpZW50IGZvciBuZXR3b3JrCkBAIC04MzY2LDYgKzgzODIsMjUgQEAKICAganVzdCBhZGQgYWJv dXQgM2sgdG8geW91ciBrZXJuZWwuCiAKICAgU2VlIERvY3VtZW50YXRpb24vbXRyci50eHQgZm9y IG1vcmUgaW5mb3JtYXRpb24uCisKK0h1Z2UgbWVtb3J5IHN1cHBvcnQKK0NPTkZJR19IVUdFTUVN CisgIEVuYWJsZXMga2VybmVsIHN1cHBvcnQgZm9yIHJlYWxseSBodWdlIGFtb3VudHMgb2YgUkFN IChiZXlvbmQgMSBHaWdhYnl0ZSkKKyAgCisgIExpbnV4IGN1cnJlbnRseSBzdXBwb3J0cyB1cCB0 byA5NjAgTUIgb2YgUkFNIG9uIEludGVsIGFuZCBjb21wYXRpYmxlCisgIGNvbXB1dGVycy4KKyAg SWYgeW91IGhhdmUgbW9yZSBtZW1vcnksIHRoZXJlIGFyZSB0d28gdGhpbmdzIHlvdSBjYW4gZG86 CisgIAorICAxOiBJbmNyZWFzZSBtYW51YWxseSB0aGUgbGltaXQgdG8gMTk4NE1CLgorICAgICBS ZWFkIHRoZSBub3RlIGluIGluY2x1ZGUvbGludXgvcGFnZS5oIHRvIGRvIHRoaXMuCisgIDI6IFVz ZSB0aGUgUkFNIGFib3ZlIHRoZSA5NjBNQiBsaW1pdCAob3IgYWJvdmUgMTk4NE1CIGlmIHlvdSBh cHBsaWVkIDE6KQorICAgICBmb3Igc3BlY2lhbCBkZXZpY2VzIHN1Y2ggYXMgYSBIdWdlUmFtRCBy YW1kaXNrLgorICAKKyAgU2F5aW5nIFkgaGVyZSBtYWtlcyBpdCBwb3NzaWJsZSB0byB1c2UgdGhl IHNvbHV0aW9uIDI6CisgIHVzZSB0aGUgUkFNIGFib3ZlIHRoZSBsaW1pdCBhcyBhIHJhbWRpc2su CisgIAorICBOb3RlIHRoYXQgdG8gYWN0dWFsbHkgZW5hYmxlIHRoaXMgcmFtZGlzaywgeW91IG11 c3QgYWxzbyBzYXkgWSB0byB0aGUKKyAgIkh1Z2UgUmFtZGlzayBzdXBwb3J0IiBiZWxvdy4KIAog TWFpbiBDUFUgZnJlcXVlbmN5LCBvbmx5IGZvciBERUMgYWxwaGEgbWFjaGluZQogQ09ORklHX0ZU X0FMUEhBX0NMT0NLCmRpZmYgLXUgLXIgLVAgMi4yLjEvYXJjaC9pMzg2L2NvbmZpZy5pbiBjdXJy ZW50L2FyY2gvaTM4Ni9jb25maWcuaW4KLS0tIDIuMi4xL2FyY2gvaTM4Ni9jb25maWcuaW4JV2Vk IEphbiAyMCAxOToxODo1MyAxOTk5CisrKyBjdXJyZW50L2FyY2gvaTM4Ni9jb25maWcuaW4JRnJp IEZlYiAgNSAxODozODoyOSAxOTk5CkBAIC0zNiw2ICszNiw3IEBACiBib29sICdNYXRoIGVtdWxh dGlvbicgQ09ORklHX01BVEhfRU1VTEFUSU9OCiBib29sICdNVFJSIChNZW1vcnkgVHlwZSBSYW5n ZSBSZWdpc3Rlcikgc3VwcG9ydCcgQ09ORklHX01UUlIKIGJvb2wgJ1N5bW1ldHJpYyBtdWx0aS1w cm9jZXNzaW5nIHN1cHBvcnQnIENPTkZJR19TTVAKK2Jvb2wgJ0h1Z2UgbWVtb3J5IHN1cHBvcnQn IENPTkZJR19IVUdFTUVNCiBlbmRtZW51CiAKIG1haW5tZW51X29wdGlvbiBuZXh0X2NvbW1lbnQK ZGlmZiAtdSAtciAtUCAyLjIuMS9hcmNoL2kzODYva2VybmVsL01ha2VmaWxlIGN1cnJlbnQvYXJj aC9pMzg2L2tlcm5lbC9NYWtlZmlsZQotLS0gMi4yLjEvYXJjaC9pMzg2L2tlcm5lbC9NYWtlZmls ZQlXZWQgSmFuIDIwIDE5OjE4OjUzIDE5OTkKKysrIGN1cnJlbnQvYXJjaC9pMzg2L2tlcm5lbC9N YWtlZmlsZQlTdW4gRmViICA3IDAwOjI3OjMwIDE5OTkKQEAgLTI2LDYgKzI2LDEwIEBACiBPX09C SlMgKz0gbWNhLm8KIGVuZGlmCiAKK2lmZGVmIENPTkZJR19IVUdFTUVNCitPX09CSlMgKz0gaHVn ZW1lbS5vCitlbmRpZgorCiBpZmVxICgkKENPTkZJR19NVFJSKSx5KQogT1hfT0JKUyArPSBtdHJy Lm8KIGVsc2UKZGlmZiAtdSAtciAtUCAyLjIuMS9hcmNoL2kzODYva2VybmVsL2h1Z2VtZW0uYyBj dXJyZW50L2FyY2gvaTM4Ni9rZXJuZWwvaHVnZW1lbS5jCi0tLSAyLjIuMS9hcmNoL2kzODYva2Vy bmVsL2h1Z2VtZW0uYwlUaHUgSmFuICAxIDAxOjAwOjAwIDE5NzAKKysrIGN1cnJlbnQvYXJjaC9p Mzg2L2tlcm5lbC9odWdlbWVtLmMJU3VuIEZlYiAgNyAyMjowNTowNiAxOTk5CkBAIC0wLDAgKzEs MTU4IEBACisvKgorICogbGludXgvYXJjaC9pMzg2L2tlcm5lbC9odWdlbWVtLmMKKyAqCisgKiAg IFdyaXR0ZW4gMTk5OSBieSBNYW5mcmVkIFNwcmF1bCA8bWFzcDAwMDhAc3R1ZC51bmktc2IuZGU+ CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21hbGxv Yy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+ CisjaW5jbHVkZSA8YXNtL2h1Z2VtZW0uaD4KKyNpbmNsdWRlIDxhc20vc3BpbmxvY2suaD4KKwor LyoKKwlnbG9iYWwgdmFyaWFibGVzOgorICovCisKK2ludCBodWdlbWVtX3N0YXJ0cGc7ICAgIC8q IG51bWJlciBvZiB0aGUgZmlyc3QgcGFnZSBtYW5hZ2VkIGJ5IGh1Z2VtZW0gKi8KK2ludCBodWdl bWVtX2xlbiA9IDA7Cit1bnNpZ25lZCBjaGFyKiBodWdlbWVtX2JpdG1hcCA9IE5VTEw7CisKK3Nw aW5sb2NrX3QgaHVnZW1lbV9sb2NrID0gU1BJTl9MT0NLX1VOTE9DS0VEOworCisvKgorCWludGVy bmFsIGZ1bmN0aW9uczoKKyAqLworCitpbnQgaG1faW5pdCh2b2lkKTsKKworLyoKKyAgVGhpcyBm dW5jdGlvbiBpcyBjYWxsZWQgdmVyeSBlYXJseSwgaXQgY2Fubm90IGNhbGwKKyAgYW55IG90aGVy IGtlcm5lbCBmdW5jdGlvbi4KKyAgRGVmZXIgdGhlIGFjdHVhbCBpbml0aWFsaXphdGlvbi4KKyAq LworIAordm9pZCBpbml0X2h1Z2VtZW0oaW50IG1lbXN0YXJ0LCBpbnQgbWVtZW5kKQoreworCW1l bXN0YXJ0ID0gKG1lbXN0YXJ0ICsgUEFHRV9TSVpFLTEpICYgUEFHRV9NQVNLOworCW1lbWVuZCA9 IG1lbWVuZCAmIFBBR0VfTUFTSzsKKworCWh1Z2VtZW1fc3RhcnRwZyA9IG1lbXN0YXJ0L1BBR0Vf U0laRTsKKwlodWdlbWVtX2xlbiA9IChtZW1lbmQtbWVtc3RhcnQpL1BBR0VfU0laRS9ITV9QQUdF U19QRVJfQklUOworfQorCitpbnQgYWxsb2NfaHVnZW1lbShpbnQgc2l6ZSkKK3sKKwlpbnQgcmVz dWx0OworCWludCBpLCBtaXNzaW5nOworCQorCWlmKGh1Z2VtZW1fbGVuID09IDApCisJCXJldHVy biAtMTsKKworCWlmKHNpemUgPT0gMCkKKwkJcmV0dXJuIC0xOworCQorCXNwaW5fbG9jaygmaHVn ZW1lbV9sb2NrKTsKKworCWlmKGh1Z2VtZW1fYml0bWFwID09IE5VTEwpIHsKKwkJaWYoIWhtX2lu aXQoKSkgeworCQkJc3Bpbl91bmxvY2soJmh1Z2VtZW1fbG9jayk7CisJCQlyZXR1cm4gLTE7CisJ CX0KKwl9CisJCisJc2l6ZSA9IChzaXplK0hNX1BBR0VTX1BFUl9CSVQtMSkvSE1fUEFHRVNfUEVS X0JJVDsKKwkKKwlyZXN1bHQgPSAtMTsKKwltaXNzaW5nID0gc2l6ZTsKKwlmb3IoaT0wO2k8aHVn ZW1lbV9sZW47aSsrKSB7CisJCWlmKCAoaHVnZW1lbV9iaXRtYXBbaS84XSAmICgweDgwPj4oaSYw eDA3KSkpID09IDApIHsKKwkJCWlmKHJlc3VsdD09LTEpIHsKKwkJCQltaXNzaW5nID0gc2l6ZTsK KwkJCQlyZXN1bHQgPSBpOworCQkJfQorCQkJbWlzc2luZy0tOworCQkJaWYobWlzc2luZyA9PSAw KQorCQkJCWJyZWFrOworCQl9IGVsc2UgeworCQkJcmVzdWx0ID0gLTE7CisJCX0KKwl9CisJaWYo bWlzc2luZyAhPSAwKQorCXsKKwkJc3Bpbl91bmxvY2soJmh1Z2VtZW1fbG9jayk7CisJCXJldHVy biAtMTsKKwl9CisJZm9yKGk9cmVzdWx0O2k8cmVzdWx0K3NpemU7aSsrKQorCQlodWdlbWVtX2Jp dG1hcFtpLzhdIHw9IDB4ODA+PihpJjB4MDcpOworCQorCXNwaW5fdW5sb2NrKCZodWdlbWVtX2xv Y2spOworCXJldHVybiByZXN1bHQqSE1fUEFHRVNfUEVSX0JJVCtodWdlbWVtX3N0YXJ0cGc7Cit9 CisKK3ZvaWQgZnJlZV9odWdlbWVtKGludCBzdGFydHBnLCBpbnQgc2l6ZSkKK3sKKwlzdGFydHBn IC09IGh1Z2VtZW1fc3RhcnRwZzsKKwlzaXplID0gKHNpemUrSE1fUEFHRVNfUEVSX0JJVC0xKS9I TV9QQUdFU19QRVJfQklUOworCisJaWYoKHNpemUgPiBodWdlbWVtX2xlbikgfHwgKHNpemU9PTAp IHx8IChzdGFydHBnJihITV9QQUdFU19QRVJfQklULTEpKSkgeworCQlwcmludGsoS0VSTl9ERUJV RyAiZnJlZV9odWdlbWVtOiBpbnZhbGlkIHBhcmFtZXRlci4iKTsKKwkJcmV0dXJuOworCX0KKwlp ZihodWdlbWVtX2JpdG1hcCA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlzcGluX2xvY2soJmh1Z2Vt ZW1fbG9jayk7CisJCisJc3RhcnRwZyAvPSBITV9QQUdFU19QRVJfQklUOworCXdoaWxlKHNpemUg IT0gMCkgeworCQlodWdlbWVtX2JpdG1hcFtzdGFydHBnLzhdICY9IH4oMHg4MD4+KHN0YXJ0cGcg JiAweDA3KSk7CisJCXN0YXJ0cGcrKzsKKwkJc2l6ZS0tOworCX0KKwlzcGluX3VubG9jaygmaHVn ZW1lbV9sb2NrKTsKKwlyZXR1cm47Cit9CisKKy8qIHBtYXggY2FuIGJlIE5VTEwsIHJldHVybnMg dGhlIHNpemUgb2YgdGhlIGxhcmdlc3QgZnJlZSBhcmVhLiAqLworaW50IGdldGZyZWVfaHVnZW1l bShpbnQqIHBtYXgpCit7CisJaW50IGksIGZvdW5kLCBtYXg7CisKKwlzcGluX2xvY2soJmh1Z2Vt ZW1fbG9jayk7CisKKwlpZihodWdlbWVtX2JpdG1hcCA9PSBOVUxMKSB7CisJCWlmKCFobV9pbml0 KCkpIHsKKwkJCXNwaW5fdW5sb2NrKCZodWdlbWVtX2xvY2spOworCQkJcmV0dXJuIC0xOworCQl9 CisJfQorCQkKKwlpZihwbWF4ICE9IE5VTEwpCisJCSpwbWF4ID0gaHVnZW1lbV9sZW4qSE1fUEFH RVNfUEVSX0JJVDsKKwlmb3VuZCA9IDA7CisJbWF4ID0gMDsKKwkKKwlmb3IoaT0wO2k8aHVnZW1l bV9sZW47aSsrKSB7CisJCWlmKCAoaHVnZW1lbV9iaXRtYXBbaS84XSAmICgweDgwPj4oaSYweDA3 KSkpID09IDApIHsKKwkJCWZvdW5kKys7CisJCQlpZihmb3VuZCA+IG1heCkKKwkJCQltYXggPSBm b3VuZDsKKwkJfSBlbHNlIHsKKwkJCWZvdW5kID0gMDs7CisJCX0KKwl9CisJc3Bpbl91bmxvY2so Jmh1Z2VtZW1fbG9jayk7CisJcmV0dXJuIG1heCpITV9QQUdFU19QRVJfQklUOworfQorCitpbnQg aG1faW5pdCh2b2lkKQoreworCWh1Z2VtZW1fYml0bWFwID0ga21hbGxvYygoaHVnZW1lbV9sZW4r NykvOCxHRlBfQVRPTUlDKTsKKwlpZihodWdlbWVtX2JpdG1hcCA9PSBOVUxMKQorCQlyZXR1cm4g MDsKKwltZW1zZXQoaHVnZW1lbV9iaXRtYXAsMCwoaHVnZW1lbV9sZW4rNykvOCk7CisJcmV0dXJu IDE7Cit9CisKZGlmZiAtdSAtciAtUCAyLjIuMS9hcmNoL2kzODYva2VybmVsL2kzODZfa3N5bXMu YyBjdXJyZW50L2FyY2gvaTM4Ni9rZXJuZWwvaTM4Nl9rc3ltcy5jCi0tLSAyLjIuMS9hcmNoL2kz ODYva2VybmVsL2kzODZfa3N5bXMuYwlUdWUgSmFuIDE5IDIwOjAyOjU5IDE5OTkKKysrIGN1cnJl bnQvYXJjaC9pMzg2L2tlcm5lbC9pMzg2X2tzeW1zLmMJRnJpIEZlYiAgNSAxODozODoyOSAxOTk5 CkBAIC0xNyw2ICsxNyw3IEBACiAjaW5jbHVkZSA8YXNtL2hhcmRpcnEuaD4KICNpbmNsdWRlIDxh c20vZGVsYXkuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL2h1Z2VtZW0u aD4KIAogZXh0ZXJuIHZvaWQgZHVtcF90aHJlYWQoc3RydWN0IHB0X3JlZ3MgKiwgc3RydWN0IHVz ZXIgKik7CiBleHRlcm4gaW50IGR1bXBfZnB1KGVsZl9mcHJlZ3NldF90ICopOwpAQCAtNDAsNiAr NDEsNyBAQAogRVhQT1JUX1NZTUJPTChlbmFibGVfaXJxKTsKIEVYUE9SVF9TWU1CT0woZGlzYWJs ZV9pcnEpOwogRVhQT1JUX1NZTUJPTChrZXJuZWxfdGhyZWFkKTsKK0VYUE9SVF9TWU1CT0woaW5p dF9tbSk7CiAKIEVYUE9SVF9TWU1CT0xfTk9WRVJTKF9fZG93bl9mYWlsZWQpOwogRVhQT1JUX1NZ TUJPTF9OT1ZFUlMoX19kb3duX2ZhaWxlZF9pbnRlcnJ1cHRpYmxlKTsKQEAgLTEwOSw0ICsxMTEs OSBAQAogCiAjaWZkZWYgQ09ORklHX1ZUCiBFWFBPUlRfU1lNQk9MKHNjcmVlbl9pbmZvKTsKKyNl bmRpZgorCisjaWZkZWYgQ09ORklHX0hVR0VNRU0KK0VYUE9SVF9TWU1CT0woYWxsb2NfaHVnZW1l bSk7CitFWFBPUlRfU1lNQk9MKGZyZWVfaHVnZW1lbSk7CiAjZW5kaWYKZGlmZiAtdSAtciAtUCAy LjIuMS9hcmNoL2kzODYva2VybmVsL3NldHVwLmMgY3VycmVudC9hcmNoL2kzODYva2VybmVsL3Nl dHVwLmMKLS0tIDIuMi4xL2FyY2gvaTM4Ni9rZXJuZWwvc2V0dXAuYwlUaHUgSmFuIDIxIDIwOjI4 OjQwIDE5OTkKKysrIGN1cnJlbnQvYXJjaC9pMzg2L2tlcm5lbC9zZXR1cC5jCU1vbiBGZWIgIDgg MjA6MTc6MDEgMTk5OQpAQCAtMzIsNiArMzIsOSBAQAogI2lmZGVmIENPTkZJR19CTEtfREVWX1JB TQogI2luY2x1ZGUgPGxpbnV4L2Jsay5oPgogI2VuZGlmCisjaWZkZWYgQ09ORklHX0hVR0VNRU0K KyNpbmNsdWRlIDxhc20vaHVnZW1lbS5oPgorI2VuZGlmCiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nv ci5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5o PgpAQCAtMzI3LDExICszMzAsMjAgQEAKIAkqdG8gPSAnXDAnOwogCSpjbWRsaW5lX3AgPSBjb21t YW5kX2xpbmU7CiAKKyNpZmRlZiBDT05GSUdfSFVHRU1FTQorI2RlZmluZSBWTUFMTE9DX1JFU0VS VkUJKDk2PDwyMCkJLyogbW9yZSBtZW1vcnkgZm9yIHZtYWxsb2MgKi8KKyNlbHNlCiAjZGVmaW5l IFZNQUxMT0NfUkVTRVJWRQkoNjQgPDwgMjApCS8qIDY0TUIgZm9yIHZtYWxsb2MgKi8KKyNlbmRp ZgogI2RlZmluZSBNQVhNRU0JKCh1bnNpZ25lZCBsb25nKSgtUEFHRV9PRkZTRVQtVk1BTExPQ19S RVNFUlZFKSkKLQorLyogRklYTUU6IGRlYnVnIGNvZGUuICovCisjdW5kZWYgTUFYTUVNCisjZGVm aW5lIE1BWE1FTSAoMzIgPDwgMjApCiAJaWYgKG1lbW9yeV9lbmQgPiBNQVhNRU0pCiAJeworI2lm ZGVmIENPTkZJR19IVUdFTUVNCisJCWluaXRfaHVnZW1lbShNQVhNRU0sbWVtb3J5X2VuZCk7Cisj ZW5kaWYKIAkJbWVtb3J5X2VuZCA9IE1BWE1FTTsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiV2Fy bmluZyBvbmx5ICVsZE1CIHdpbGwgYmUgdXNlZC5cbiIsCiAJCQlNQVhNRU0+PjIwKTsKZGlmZiAt dSAtciAtUCAyLjIuMS9hcmNoL2kzODYvbW0vTWFrZWZpbGUgY3VycmVudC9hcmNoL2kzODYvbW0v TWFrZWZpbGUKLS0tIDIuMi4xL2FyY2gvaTM4Ni9tbS9NYWtlZmlsZQlGcmkgTm92ICAxIDEwOjU2 OjQzIDE5OTYKKysrIGN1cnJlbnQvYXJjaC9pMzg2L21tL01ha2VmaWxlCUZyaSBGZWIgIDUgMTY6 MDY6NTUgMTk5OQpAQCAtMTAsNCArMTAsOCBAQAogT19UQVJHRVQgOj0gbW0ubwogT19PQkpTCSA6 PSBpbml0Lm8gZmF1bHQubyBpb3JlbWFwLm8gZXh0YWJsZS5vCiAKK2lmZGVmIENPTkZJR19IVUdF TUVNCitPX09CSlMgKz0gaG1jYWNoZS5vCitlbmRpZgorCiBpbmNsdWRlICQoVE9QRElSKS9SdWxl cy5tYWtlCmRpZmYgLXUgLXIgLVAgMi4yLjEvYXJjaC9pMzg2L21tL2htY2FjaGUuYyBjdXJyZW50 L2FyY2gvaTM4Ni9tbS9obWNhY2hlLmMKLS0tIDIuMi4xL2FyY2gvaTM4Ni9tbS9obWNhY2hlLmMJ VGh1IEphbiAgMSAwMTowMDowMCAxOTcwCisrKyBjdXJyZW50L2FyY2gvaTM4Ni9tbS9obWNhY2hl LmMJTW9uIEZlYiAgOCAyMDozMjoyNSAxOTk5CkBAIC0wLDAgKzEsMzc4IEBACisvKgorICogYXJj aC9pMzg2L21tL2htY2FjaGUubworICoKKyAqIHBoeXNpY2FsIG1lbW9yeSBjYWNoZToKKyAqIAor ICogKEMpIENvcHlyaWdodCAxOTk5IE1hbmZyZWQgU3ByYXVsIDxtYXNwMDAwOEBzdHVkLnVuaS1z Yi5kZT4KKyAqCisgKiBhc3N1bXB0aW9uczoKKyAqCS0gdGhlIG9mZnNldCBmaWVsZCB0byBfX2Zp bmRfcGFnZSBpcyBhIGJ5dGUgb2Zmc2V0LgorICovCisKKyNpbmNsdWRlIDxsaW51eC92bWFsbG9j Lmg+CisjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Cisj aW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKyNpbmNsdWRlIDxhc20vc3BpbmxvY2suaD4KKyNpbmNs dWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaHVnZW1lbS5oPgorI2luY2x1ZGUgPGFzbS9o bWNhY2hlLmg+CisKKy8qIHRoZSBzaXplIG9mIHRoaXMgc3RydWN0dXJlIG11c3QgYmUgMzIgYnl0 ZXMuICovCit0eXBlZGVmIHN0cnVjdCBobWNfcGFnZSBobWNfcGFnZV90Oworc3RydWN0IGhtY19w YWdlIHsKKwlzdHJ1Y3QgaW5vZGUqIGlub2RlOworCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OworCWht Y19wYWdlX3QgKmhhc2hfbmV4dDsKKwlobWNfcGFnZV90ICpscnVfbmV3ZXI7CisJLyogMHgxMDog Ki8KKwlobWNfcGFnZV90ICpoYXNoX3ByZXY7CisJaG1jX3BhZ2VfdCAqbHJ1X29sZGVyOworCWht Y19wYWdlX3QgKmloYXNoX25leHQ7CisJaG1jX3BhZ2VfdCAqaWhhc2hfcHJldjsKK307CisKKyNk ZWZpbmUgSE1DX0RFU0NfUEVSX1BBR0UJMTI4CisKK3Vuc2lnbmVkIGxvbmcgaG1jX2FsbG9jc3Rh cnQgPSAwOwordW5zaWduZWQgbG9uZyBobWNfYWxsb2NsZW4gPSAwOwordW5zaWduZWQgbG9uZyBo bWNfc3RhcnQ7Cit1bnNpZ25lZCBsb25nIGhtY19zaXplOworaG1jX3BhZ2VfdCAqaG1jX2Rlc2Mg PSBOVUxMOworCitobWNfcGFnZV90ICpobWNfZnJlZWxpc3QgPSBOVUxMOwkvKiBsaW5rZWQgd2l0 aCB0aGUgbHJ1LWZpZWxkICAqLworaG1jX3BhZ2VfdCAqaG1jX2xydW5ldyA9IE5VTEw7CitobWNf cGFnZV90ICpobWNfbHJ1b2xkID0gTlVMTDsKKworc3BpbmxvY2tfdCBobWNfbG9jayA9IFNQSU5f TE9DS19VTkxPQ0tFRDsKKworI2RlZmluZSBITV9QSEFTSF9CSVRTCQkxNAorI2RlZmluZSBITV9Q SEFTSF9TSVpFCQkoMSA8PCBITV9QSEFTSF9CSVRTKQorI2RlZmluZSBITV9QSEFTSF9BTExPQ09S REVSCTQKKworI2RlZmluZSBITV9JSEFTSF9CSVRTCQkxMAorI2RlZmluZSBITV9JSEFTSF9TSVpF CQkoMSA8PCBITV9JSEFTSF9CSVRTKQorI2RlZmluZSBITV9JSEFTSF9BTExPQ09SREVSCTAKKwor aG1jX3BhZ2VfdCAqKmhtY19oYXNoX3RhYmxlID0gTlVMTDsKK2htY19wYWdlX3QgKiogaG1jX2lo YXNoX3RhYmxlID0gTlVMTDsKK3ZvaWQqIGhtY19tYXB3bmQgPSBOVUxMOworCisKKy8qICNkZWZp bmUgSE1DX0RFQlVHICovCisjaWZkZWYgSE1DX0RFQlVHCisKK3N0YXRpYyBpbnQgRU5BQkxFX0hN QyA9IDA7CisKKyNkZWZpbmUgYXNzZXJ0KHgpCWlmKCAhKHgpICkgX19hc21fXyBfX3ZvbGF0aWxl X18gKCJpbnQzIik7CisKKyNlbHNlCisjZGVmaW5lIEVOQUJMRV9ITUMgMQorI2RlZmluZSBhc3Nl cnQoeCkJZG8geyAgfSB3aGlsZSAoMCkKKyNlbmRpZgorCisvKiBJIG5ldmVyIGZyZWUgdGhlIGhh c2ggdGFibGVzLCB0aGV5IHJlbWFpbiBhbGxvY2F0ZWQuICovCitzdGF0aWMgaW50IF9obWNfaW5p dCh2b2lkKQoreworCWludCBpOworCWlmKCFFTkFCTEVfSE1DKQorCQlyZXR1cm4gLUVOT01FTTsK KworCWFzc2VydChzaXplb2YoaG1jX3BhZ2VfdCkgPT0gMzIpOworCQorCWkgPSBnZXRmcmVlX2h1 Z2VtZW0oTlVMTCk7CisJaG1jX2FsbG9jc3RhcnQgPSBhbGxvY19odWdlbWVtKGkpOworCWlmKGht Y19hbGxvY3N0YXJ0ID09IDApCisJCXJldHVybiAwOworCWhtY19hbGxvY2xlbiA9IGk7CisJCisJ aWYoaG1jX2hhc2hfdGFibGUgPT0gTlVMTCkgeworCQlobWNfaGFzaF90YWJsZSA9ICh2b2lkKilf X2dldF9mcmVlX3BhZ2VzKF9fR0ZQX01FRCwKKwkJCQkJCUhNX1BIQVNIX0FMTE9DT1JERVIpOwor CQlpZihobWNfaGFzaF90YWJsZSA9PSBOVUxMKQorCQkJZ290byBvdXRfbWVtOworCQltZW1zZXQo aG1jX2hhc2hfdGFibGUsMCxITV9QSEFTSF9TSVpFKnNpemVvZih1bnNpZ25lZCBsb25nKSk7CisJ fQorCWlmKGhtY19paGFzaF90YWJsZSA9PSBOVUxMKSB7CisJCWhtY19paGFzaF90YWJsZSA9ICh2 b2lkKilfX2dldF9mcmVlX3BhZ2VzKF9fR0ZQX01FRCwKKwkJCQkJCUhNX0lIQVNIX0FMTE9DT1JE RVIpOworCQlpZihobWNfaWhhc2hfdGFibGUgPT0gTlVMTCkKKwkJCWdvdG8gb3V0X21lbTsKKwkJ bWVtc2V0KGhtY19paGFzaF90YWJsZSwwLEhNX0lIQVNIX1NJWkUqc2l6ZW9mKHVuc2lnbmVkIGxv bmcpKTsKKwl9CisJaG1jX3NpemUgPSAoaStITUNfREVTQ19QRVJfUEFHRSkvKEhNQ19ERVNDX1BF Ul9QQUdFKzEpOworCWhtY19zdGFydCA9IGhtY19hbGxvY3N0YXJ0ICsgaG1jX3NpemU7CisJYXNz ZXJ0KCAoaG1jX2FsbG9jbGVuIC0gaG1jX3NpemUpIDw9IGhtY19zaXplKkhNQ19ERVNDX1BFUl9Q QUdFKTsKKwlobWNfc2l6ZSA9IGhtY19hbGxvY2xlbiAtIGhtY19zaXplOworCQorCS8qIGFkZCBh IHdpbmRvdyBmb3IgdGhlIGNhY2hlIGRlc2NyaXB0b3JzOiB1cCB0byAyNCBNQiAqLworCS8qIEZJ WE1FOiBpb3JlbWFwIHNob3VsZCBzdXBwb3J0IDQgTUIgUFRFJ3MgKi8KKwlobWNfZGVzYyA9IGlv cmVtYXAoaG1jX2FsbG9jc3RhcnQqUEFHRV9TSVpFLGhtY19zaXplKnNpemVvZihobWNfcGFnZV90 KSk7CisJaWYoaG1jX2Rlc2MgPT0gTlVMTCkKKwkJZ290byBvdXRfbWVtOworCWlmKGhtY19tYXB3 bmQgPT0gTlVMTCkKKwkJaG1jX21hcHduZCA9IGlvcmVtYXAoaG1jX2FsbG9jc3RhcnQqUEFHRV9T SVpFLFBBR0VfU0laRSk7CisJCQorCW1lbXNldChobWNfZGVzYywwLGhtY19zaXplKnNpemVvZiho bWNfcGFnZV90KSk7CisJaG1jX2ZyZWVsaXN0ID0gJmhtY19kZXNjWzBdOworCWhtY19kZXNjWzBd LmxydV9vbGRlciA9IE5VTEw7CisJaG1jX2Rlc2NbMF0ubHJ1X25ld2VyID0gJmhtY19kZXNjWzFd OworCQorCWZvcihpPTE7aTxobWNfc2l6ZTtpKyspCisJeworCQlobWNfZGVzY1tpXS5scnVfb2xk ZXIgPSAmaG1jX2Rlc2NbaS0xXTsKKwkJaG1jX2Rlc2NbaV0ubHJ1X25ld2VyID0gJmhtY19kZXNj W2krMV07CisJfQorCWhtY19kZXNjW2htY19zaXplLTFdLmxydV9uZXdlciA9IE5VTEw7CisJcmV0 dXJuIDA7CitvdXRfbWVtOgorCWZyZWVfaHVnZW1lbShobWNfYWxsb2NzdGFydCwgaG1jX2FsbG9j bGVuKTsKKwlobWNfYWxsb2NzdGFydCA9IDA7CisJcmV0dXJuIC1FTk9NRU07Cit9CisKK3N0YXRp YyBpbmxpbmUgaW50IGhtY19pbml0KHZvaWQpCit7CisJaWYoaG1jX2FsbG9jc3RhcnQgPT0gMCkK KwkJcmV0dXJuIF9obWNfaW5pdCgpOworCXJldHVybiAwOworfQorLyoKKyAqIHJhY2UgcHJvdGVj dGlvbjoKKyAqIC0gZnVuY3Rpb25zIHRoYXQgb3duIGhtY19sb2NrKCkgbmV2ZXIgc2NoZWR1bGUu CisgKiAtIGEgcGFnZSBpcyBlaXRoZXIgcHJlc2VudCBpbiB0aGUgbm9ybWFsIG1tYXAgY2FjaGUs IG9yIGluIHRoZSBwaHlzaWNhbCBjYWNoZSwgYnV0IG5ldmVyIGluIGJvdGguCisgKi8KK3N0YXRp YyBpbmxpbmUgdW5zaWduZWQgbG9uZyBobWNfZ2V0aGFzaChzdHJ1Y3QgaW5vZGUqIGlub2RlLCB1 bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBoYXNoYml0cykKK3sKKyNkZWZpbmUg aSAoKCh1bnNpZ25lZCBsb25nKSBpbm9kZSkvKHNpemVvZihzdHJ1Y3QgaW5vZGUpICYgfiAoc2l6 ZW9mKHN0cnVjdCBpbm9kZSkgLSAxKSkpCisjZGVmaW5lIG8gKG9mZnNldCA+PiBQQUdFX1NISUZU KQorI2RlZmluZSBzKHgpICgoeCkrKCh4KT4+aGFzaGJpdHMpKQorCXJldHVybiBzKGkrbykgJiAo KDE8PGhhc2hiaXRzKS0xKTsKKyN1bmRlZiBpCisjdW5kZWYgbworI3VuZGVmIHMKK30KKwordm9p ZCBobWNfY29weXBnKGhtY19wYWdlX3QqIHBoeXMsIHN0cnVjdCBwYWdlKiBwZywgaW50IHRvcGh5 cykKK3sKKwl1bnNpZ25lZCBsb25nIGxpbmVhciA9ICh1bnNpZ25lZCBsb25nKWhtY19tYXB3bmQ7 CisJcHRlX3QqIHB0ZSA9IHB0ZV9vZmZzZXQocG1kX29mZnNldChwZ2Rfb2Zmc2V0X2sobGluZWFy KSxsaW5lYXIpLCBsaW5lYXIpOworCXVuc2lnbmVkIGxvbmcgcGh5c3BnOworCQorCXBoeXNwZyA9 IHBoeXMtJmhtY19kZXNjWzBdOworCXBoeXNwZyAqPSBQQUdFX1NJWkU7CisJcGh5c3BnICs9IFBB R0VfU0laRSpobWNfc3RhcnQ7CisJCisJc2V0X3B0ZShwdGUsIG1rX3B0ZV9waHlzKHBoeXNwZywg X19wZ3Byb3QoX1BBR0VfUFJFU0VOVHwgX1BBR0VfUlcgfAorCQkJCV9QQUdFX0RJUlRZIHwgX1BB R0VfQUNDRVNTRUQgKSkpOworCQkKKwkvKiB0aGlzIGNhbGwgb25seSBhZmZlY3RzIHRoZSBjdXJy ZW50IGNwdS4KKwkgICBUaGlzIGlzIG5vdCBhIHByb2JsZW0sIGJlY2F1c2Ugb25seSBvbmUgY3B1 IGlzIGFsbG93ZWQgdG8gZXhlY3V0ZQorCSAgIHRoZXNlIGxpbmVzLgorCSAqLworCV9fZmx1c2hf dGxiX29uZShsaW5lYXIpOworCisJaWYodG9waHlzKQorCQljb3B5X3BhZ2UoaG1jX21hcHduZCwg cGFnZV9hZGRyZXNzKHBnKSk7CisJIGVsc2UKKwkgCWNvcHlfcGFnZShwYWdlX2FkZHJlc3MocGcp LCBobWNfbWFwd25kKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGhtY19jaGVja3BnKGhtY19w YWdlX3QqIHApCit7CisJYXNzZXJ0KCAocC0+aGFzaF9wcmV2ID09IE5VTEwpIHx8IChwLT5oYXNo X3ByZXYtPmhhc2hfbmV4dCA9PSBwKSApOworCWFzc2VydCggKHAtPmhhc2hfbmV4dCA9PSBOVUxM KSB8fCAocC0+aGFzaF9uZXh0LT5oYXNoX3ByZXYgPT0gcCkgKTsKKwlhc3NlcnQoIChwLT5paGFz aF9uZXh0ID09IE5VTEwpIHx8IChwLT5paGFzaF9uZXh0LT5paGFzaF9wcmV2ID09IHApICk7CisJ YXNzZXJ0KCAocC0+aWhhc2hfcHJldiA9PSBOVUxMKSB8fCAocC0+aWhhc2hfcHJldi0+aWhhc2hf bmV4dCA9PSBwKSApOworCWFzc2VydCggKHAtPmxydV9uZXdlciA9PSBOVUxMKSB8fCAocC0+bHJ1 X25ld2VyLT5scnVfb2xkZXIgPT0gcCkgKTsKKwlhc3NlcnQoIChwLT5scnVfb2xkZXIgPT0gTlVM TCkgfHwgKHAtPmxydV9vbGRlci0+bHJ1X25ld2VyID09IHApICk7Cit9CisKKwordm9pZCBobWNf dW5saW5rcGcoaG1jX3BhZ2VfdCogcCkKK3sKKwlobWNfY2hlY2twZyhwKTsKKwkKKwlpZihwLT5o YXNoX25leHQgIT0gTlVMTCkKKwkJcC0+aGFzaF9uZXh0LT5oYXNoX3ByZXYgPSBwLT5oYXNoX3By ZXY7CisJaWYocC0+aGFzaF9wcmV2ID09IE5VTEwpCisJCWhtY19oYXNoX3RhYmxlW2htY19nZXRo YXNoKHAtPmlub2RlLCBwLT5vZmZzZXQsIEhNX1BIQVNIX0JJVFMpXSA9IHAtPmhhc2hfbmV4dDsK KwkgZWxzZQorCSAJcC0+aGFzaF9wcmV2LT5oYXNoX25leHQgPSBwLT5oYXNoX25leHQ7CisJCisJ aWYocC0+aWhhc2hfbmV4dCAhPSBOVUxMKQorCQlwLT5paGFzaF9uZXh0LT5paGFzaF9wcmV2ID0g cC0+aWhhc2hfcHJldjsKKwlpZihwLT5paGFzaF9wcmV2ID09IE5VTEwpCisJCWhtY19paGFzaF90 YWJsZVtobWNfZ2V0aGFzaChwLT5pbm9kZSwgMCwgSE1fSUhBU0hfQklUUyldID0gcC0+aWhhc2hf bmV4dDsKKwkgZWxzZQorCSAJcC0+aWhhc2hfcHJldi0+aWhhc2hfbmV4dCA9IHAtPmloYXNoX25l eHQ7CisJCisJaWYocC0+bHJ1X25ld2VyID09IE5VTEwpCisJCWhtY19scnVuZXcgPSBwLT5scnVf b2xkZXI7CisJIGVsc2UKKwkJcC0+bHJ1X25ld2VyLT5scnVfb2xkZXIgPSBwLT5scnVfb2xkZXI7 CisJaWYocC0+bHJ1X29sZGVyID09IE5VTEwpCisJCWhtY19scnVvbGQgPSBwLT5scnVfbmV3ZXI7 CisJIGVsc2UKKwkgCXAtPmxydV9vbGRlci0+bHJ1X25ld2VyID0gcC0+bHJ1X25ld2VyOworfQor CisvKiBmcm9tIG1tL2ZpbGVtYXAuYyAqLworLyogRklYTUU6IHJhY2U6IHdoaWNoIGxvY2tzIGFy ZSByZXF1aXJlZCBmb3IgY2hhbmdpbmcgdGhlc2UgbGlzdHM/ICovCitzdGF0aWMgaW5saW5lIHZv aWQgYWRkX3RvX3BhZ2VfY2FjaGUoc3RydWN0IHBhZ2UgKiBwYWdlLAorCXN0cnVjdCBpbm9kZSAq IGlub2RlLCB1bnNpZ25lZCBsb25nIG9mZnNldCwKKwlzdHJ1Y3QgcGFnZSAqKmhhc2gpCit7CisJ YXRvbWljX2luYygmcGFnZS0+Y291bnQpOworCXBhZ2UtPmZsYWdzID0gKHBhZ2UtPmZsYWdzICYg figoMSA8PCBQR191cHRvZGF0ZSkgfCAoMSA8PCBQR19lcnJvcikpKSB8ICgxIDw8IFBHX3JlZmVy ZW5jZWQpOworCXBhZ2UtPm9mZnNldCA9IG9mZnNldDsKKwlhZGRfcGFnZV90b19pbm9kZV9xdWV1 ZShpbm9kZSwgcGFnZSk7CisJX19hZGRfcGFnZV90b19oYXNoX3F1ZXVlKHBhZ2UsIGhhc2gpOwor fQorCitzdHJ1Y3QgcGFnZSogaG1jX2dldHBhZ2UoaG1jX3BhZ2VfdCogcGh5cykKK3sKKwlzdHJ1 Y3QgcGFnZSogcGcgPSBOVUxMOworCXVuc2lnbmVkIGxvbmcgcGdhZGRyOworCQorCWhtY19jaGVj a3BnKHBoeXMpOworCWlmKCAocGh5cy0+b2Zmc2V0ID49IHBoeXMtPmlub2RlLT5pX3NpemUpICYm CisJICAoIChwZ2FkZHIgPSBfX2dldF9mcmVlX3BhZ2UoX19HRlBfTUVEKSkgIT0gMCkgKQorCXsK KwkJc3RydWN0IHBhZ2UqKiBoYXNoOworCQorCQlwZyA9IG1lbV9tYXArIE1BUF9OUihwZ2FkZHIp OworCQkKKwkJaG1jX2NvcHlwZyhwaHlzLCBwZywgMCk7CisJCWhhc2ggPSBwYWdlX2hhc2gocGh5 cy0+aW5vZGUsIHBoeXMtPm9mZnNldCk7CisJCXBnLT5pbm9kZSA9IHBoeXMtPmlub2RlOworCQlw Zy0+b2Zmc2V0ID0gcGh5cy0+b2Zmc2V0OworCQlhZGRfdG9fcGFnZV9jYWNoZShwZywgcGh5cy0+ aW5vZGUsIHBoeXMtPm9mZnNldCwgaGFzaCk7CQorCQlfX2ZyZWVfcGFnZShwZyk7CisJfQorCWht Y191bmxpbmtwZyhwaHlzKTsKKwlwaHlzLT5scnVfb2xkZXIgPSBOVUxMOworCXBoeXMtPmxydV9u ZXdlciA9IGhtY19mcmVlbGlzdDsKKwlpZihobWNfZnJlZWxpc3QhPSBOVUxMKQorCQlobWNfZnJl ZWxpc3QtPmxydV9vbGRlciA9IHBoeXM7CisJaG1jX2ZyZWVsaXN0ID0gcGh5czsKKworCXJldHVy biBwZzsKK30KKworc3RydWN0IHBhZ2UqIGhtY19maW5kcGFnZShzdHJ1Y3QgaW5vZGUqIGlub2Rl LCB1bnNpZ25lZCBsb25nIG9mZnNldCkKK3sKKwlzdHJ1Y3QgcGFnZSogb3V0ID0gTlVMTDsKKwlo bWNfcGFnZV90KiBwOworCisJc3Bpbl9sb2NrKCZobWNfbG9jayk7CisJaWYoIWhtY19pbml0KCkp CisJeworCQkvKiBzY2FuIHRocm91Z2ggdGhlIGNhY2hlICovCisJCXAgPSBobWNfaGFzaF90YWJs ZVtobWNfZ2V0aGFzaChpbm9kZSwgb2Zmc2V0LCBITV9QSEFTSF9CSVRTKV07CQorCQl3aGlsZShw IT1OVUxMKQorCQl7CisJCQlobWNfY2hlY2twZyhwKTsKKwkJCWlmKCAocC0+aW5vZGUgPT0gaW5v ZGUpICYmCisJCQkJKHAtPm9mZnNldCA9PSBvZmZzZXQpKQorCQkJeworCQkJCW91dCA9IGhtY19n ZXRwYWdlKHApOworCQkJCWJyZWFrOworCQkJfQorCQkJcCA9IHAtPmhhc2hfbmV4dDsKKwkJfQor CX0KKwlzcGluX3VubG9jaygmaG1jX2xvY2spOworCXJldHVybiBvdXQ7Cit9CisKK3ZvaWQgaG1j X2ludmFsaWRhdGVfaW5vZGVfcGFnZXMoc3RydWN0IGlub2RlKiBpbm9kZSkKK3sKKwlobWNfdHJ1 bmNhdGVfaW5vZGVfcGFnZXMoaW5vZGUsIDApOworfQorCisvKiBjbGVhcmluZyBwYXJ0aWFsIHBh Z2VzIGlzIGNvbXBsaWNhdGVkLCBhbHdheXMgZGlzY2FyZCB0aGUgY29tcGxldGUgcGFnZS4gKi8K K3ZvaWQgaG1jX3RydW5jYXRlX2lub2RlX3BhZ2VzKHN0cnVjdCBpbm9kZSogaW5vZGUsIHVuc2ln bmVkIGxvbmcgc3RhcnQpCit7CisJc3Bpbl9sb2NrKCZobWNfbG9jayk7CisJaWYoIWhtY19pbml0 KCkpCisJeworCQlobWNfcGFnZV90ICpwLCAqbmV4dDsKKworYXNzZXJ0KDApOworCQlzdGFydCA9 IHN0YXJ0ICYgUEFHRV9NQVNLOworCQlwID0gaG1jX2loYXNoX3RhYmxlW2htY19nZXRoYXNoKGlu b2RlLCAwLCBITV9JSEFTSF9CSVRTKV07CQorCQl3aGlsZShwIT1OVUxMKQorCQl7CisJCQluZXh0 ID0gcC0+aWhhc2hfbmV4dDsKKwkJCWlmKChwLT5pbm9kZSA9PSBpbm9kZSkgJiYKKwkJCQkocC0+ b2Zmc2V0ID49IHN0YXJ0KSkKKwkJCXsKKwkJCQlobWNfdW5saW5rcGcocCk7CisJCQkJcC0+bHJ1 X25ld2VyID0gaG1jX2xydW9sZDsKKwkJCQlwLT5scnVfb2xkZXIgPSBOVUxMOworCQkJCWhtY19s cnVvbGQgPSBwOworCQkJfQorCQkJcCA9IG5leHQ7CisJCX0KKwl9CisJc3Bpbl91bmxvY2soJmht Y19sb2NrKTsKK30KKworLyogdGhlIGZ1bmN0aW9ucyBpcyBjYWxsZWQgYWZ0ZXIgdGhlIHBhZ2Ug d2FzIHJlbW92ZWQgZnJvbSB0aGUgbWFpbiBjYWNoZS4KK0ZJWE1FOiByYWNlOiBhIG5ldyBwYWdl IGlzIGNyZWF0ZWQgYmVmb3JlIHNwaW5fbG9jaygpIHJldHVybnMuICovCisKK2V4dGVybiBzdHJ1 Y3QgaW5vZGUgc3dhcHBlcl9pbm9kZTsKKwordm9pZCBobWNfYWRkX3BhZ2Uoc3RydWN0IHBhZ2Uq IHBhZ2UpCit7CisJaWYocGFnZS0+ZmxhZ3MgJiAoKDEgPDwgUEdfbG9ja2VkKXwoMTw8UEdfZXJy b3IpfCgxPDxQR19kaXJ0eSl8KDE8PFBHX3NraXApfCgxPDxQR19zd2FwX2NhY2hlKSkgKQorCQly ZXR1cm47CisJaWYocGFnZS0+aW5vZGUgPT0gJnN3YXBwZXJfaW5vZGUpCisJCXJldHVybjsJLy8g ZG8gbm90IGNhY2hlIHN3YXBwZXIgZW50cmllcy4KKwlzcGluX2xvY2soJmhtY19sb2NrKTsKKwlp ZighaG1jX2luaXQoKSkKKwl7CisJCWhtY19wYWdlX3QqIHA7CisJCWludCBoYXNoOworCQlpZiho bWNfZnJlZWxpc3QgPT0gTlVMTCkgeworCQkJcCA9IGhtY19scnVvbGQ7CisJCQlobWNfdW5saW5r cGcoaG1jX2xydW9sZCk7CisJCX0gZWxzZSB7CisJCSAJcCA9IGhtY19mcmVlbGlzdDsKKwkJCWlm KHAtPmxydV9uZXdlciAhPSBOVUxMKQorCQkJCXAtPmxydV9uZXdlci0+bHJ1X29sZGVyID0gTlVM TDsKKwkJCWhtY19mcmVlbGlzdCA9IHAtPmxydV9uZXdlcjsKKwkJfQorCisJCXAtPmlub2RlID0g cGFnZS0+aW5vZGU7CisJCXAtPm9mZnNldCA9IHBhZ2UtPm9mZnNldDsKKwkJCisJCWhhc2ggPSBo bWNfZ2V0aGFzaChwLT5pbm9kZSwgcC0+b2Zmc2V0LCBITV9QSEFTSF9CSVRTKTsKKwkJaWYoaG1j X2hhc2hfdGFibGVbaGFzaF0gIT0gTlVMTCkKKwkJCWhtY19oYXNoX3RhYmxlW2hhc2hdLT5oYXNo X3ByZXYgPSBwOworCQlwLT5oYXNoX25leHQgPSBobWNfaGFzaF90YWJsZVtoYXNoXTsKKwkJcC0+ aGFzaF9wcmV2ID0gTlVMTDsKKwkJaG1jX2hhc2hfdGFibGVbaGFzaF0gPSBwOworCQorCQloYXNo ID0gaG1jX2dldGhhc2gocC0+aW5vZGUsIDAsIEhNX0lIQVNIX0JJVFMpOworCQlpZihobWNfaWhh c2hfdGFibGVbaGFzaF0gIT0gTlVMTCkKKwkJCWhtY19paGFzaF90YWJsZVtoYXNoXS0+aWhhc2hf cHJldiA9IHA7CisJCXAtPmloYXNoX25leHQgPSBobWNfaWhhc2hfdGFibGVbaGFzaF07CisJCXAt PmloYXNoX3ByZXYgPSBOVUxMOworCQlobWNfaWhhc2hfdGFibGVbaGFzaF0gPSBwOworCisJCWlm KGhtY19scnVuZXcgIT0gTlVMTCkKKwkJCWhtY19scnVuZXctPmxydV9uZXdlciA9IHA7CisJCXAt PmxydV9uZXdlciA9IE5VTEw7CisJCXAtPmxydV9vbGRlciA9IGhtY19scnVuZXc7CisJCWhtY19s cnVuZXcgPSBwOworCQlpZihobWNfbHJ1b2xkID09IE5VTEwpCisJCQlobWNfbHJ1b2xkID0gcDsK KworCQlobWNfY29weXBnKHAsIHBhZ2UsIDEpOworCQlobWNfY2hlY2twZyhwKTsKKwl9CisJc3Bp bl91bmxvY2soJmhtY19sb2NrKTsKK30KKwpkaWZmIC11IC1yIC1QIDIuMi4xL2RyaXZlcnMvYmxv Y2svQ29uZmlnLmluIGN1cnJlbnQvZHJpdmVycy9ibG9jay9Db25maWcuaW4KLS0tIDIuMi4xL2Ry aXZlcnMvYmxvY2svQ29uZmlnLmluCVR1ZSBEZWMgMjkgMjA6MjE6NDkgMTk5OAorKysgY3VycmVu dC9kcml2ZXJzL2Jsb2NrL0NvbmZpZy5pbglTdW4gRmViICA3IDIwOjM3OjA1IDE5OTkKQEAgLTk0 LDYgKzk0LDkgQEAKIGNvbW1lbnQgJ0FkZGl0aW9uYWwgQmxvY2sgRGV2aWNlcycKIAogdHJpc3Rh dGUgJ0xvb3BiYWNrIGRldmljZSBzdXBwb3J0JyBDT05GSUdfQkxLX0RFVl9MT09QCitpZiBbICIk Q09ORklHX0VYUEVSSU1FTlRBTCIgPSAieSIgXTt0aGVuCisgIHRyaXN0YXRlICdIdWdlcmFtIFJh bWRpc2snIENPTkZJR19CTEtfREVWX0hVR0VSQU1ECitmaQogaWYgWyAiJENPTkZJR19ORVQiID0g InkiIF07IHRoZW4KICAgdHJpc3RhdGUgJ05ldHdvcmsgYmxvY2sgZGV2aWNlIHN1cHBvcnQnIENP TkZJR19CTEtfREVWX05CRAogZmkKZGlmZiAtdSAtciAtUCAyLjIuMS9kcml2ZXJzL2Jsb2NrL01h a2VmaWxlIGN1cnJlbnQvZHJpdmVycy9ibG9jay9NYWtlZmlsZQotLS0gMi4yLjEvZHJpdmVycy9i bG9jay9NYWtlZmlsZQlXZWQgU2VwIDE2IDIyOjI1OjU2IDE5OTgKKysrIGN1cnJlbnQvZHJpdmVy cy9ibG9jay9NYWtlZmlsZQlTdW4gRmViICA3IDIwOjM3OjA1IDE5OTkKQEAgLTk0LDYgKzk0LDE0 IEBACiAgIGVuZGlmCiBlbmRpZgogCitpZmVxICgkKENPTkZJR19CTEtfREVWX0hVR0VSQU1EKSx5 KQorTF9PQkpTICs9IGh1Z2VyYW1kLm8KK2Vsc2UKKyAgICAgICAgaWZlcSAoJChDT05GSUdfQkxL X0RFVl9IVUdFUkFNRCksbSkKKyAgICAgICAgTV9PQkpTICs9IGh1Z2VyYW1kLm8KKyAgICAgICAg ZW5kaWYKK2VuZGlmCisKIGlmZXEgKCQoQ09ORklHX0JMS19ERVZfSEQpLHkpCiBMX09CSlMgKz0g aGQubwogZW5kaWYKZGlmZiAtdSAtciAtUCAyLjIuMS9kcml2ZXJzL2Jsb2NrL2h1Z2VyYW1kLmMg Y3VycmVudC9kcml2ZXJzL2Jsb2NrL2h1Z2VyYW1kLmMKLS0tIDIuMi4xL2RyaXZlcnMvYmxvY2sv aHVnZXJhbWQuYwlUaHUgSmFuICAxIDAxOjAwOjAwIDE5NzAKKysrIGN1cnJlbnQvZHJpdmVycy9i bG9jay9odWdlcmFtZC5jCVN1biBGZWIgIDcgMjA6Mzc6MDUgMTk5OQpAQCAtMCwwICsxLDMzMSBA QAorLyoKKyAqICBsaW51eC9kcml2ZXJzL2Jsb2NrL2h1Z2VyYW1kLmMKKyAqCisgKiAgV3JpdHRl biBieSBNYW5mcmVkIFNwcmF1bAorICogCisgKiAgYmFzZWQgb24gdGhlIGxvb3AgZHJpdmVyIHdy aXR0ZW4gYnkgVGhlb2RvcmUgVHMnbworICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4K KworI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNs dWRlIDxsaW51eC9pb2N0bC5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS91 YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9tYWpv ci5oPgorI2luY2x1ZGUgPGxpbnV4L2h1Z2VyYW1kLmg+CisjaW5jbHVkZSA8YXNtL2h1Z2VtZW0u aD4KKworI2RlZmluZSBNQUpPUl9OUiAgICAgICAgSFVHRVJBTURfTUFKT1IKKyNkZWZpbmUgREVW SUNFX05BTUUgICAgICJIdWdlUmFtRCIKKyNkZWZpbmUgREVWSUNFX05SKGRldmljZSkgICAgICAg TUlOT1IoZGV2aWNlKQorI2RlZmluZSBERVZJQ0VfTk9fUkFORE9NCisjZGVmaW5lIERFVklDRV9P RkYoeCkgICAgICAgICAgIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgREVWSUNFX1JFUVVFU1Qg IGh1Z2VyYW1kX3JlcXVlc3QKKyNpbmNsdWRlIDxsaW51eC9ibGsuaD4KKworc3RydWN0IEhSRF9E RVZJQ0UgeworCXNwaW5sb2NrX3QgbG9jazsKKwl2b2lkKiByZW1hcF9hZGRyOworCWludCBzdGFy dDsgLyogaW4gcGFnZXMgKi8KKwlpbnQgc2l6ZTsKKwlpbnQgcmVmY291bnQ7Cit9IDsKKworCitz dHJ1Y3QgSFJEX0RFVklDRSBocmRfZGV2aWNlc1tNQVhfSFVHRVJBTURdOworCitpbnQgaHVnZXJh bWRfYnBzW01BWF9IVUdFUkFNRF0gPSB7IDB9OworaW50IGh1Z2VyYW1kX2Jsb2NrY291bnRbTUFY X0hVR0VSQU1EXSA9IHswfTsKKyNkZWZpbmUgRkFMU0UgMAorI2RlZmluZSBUUlVFICghRkFMU0Up CisKKy8qCisJaW50ZXJuYWwgcHJvdG90eXBlcworKi8KKworaW50IGhyZF9ydyhpbnQgZGV2LCB1 bnNpZ25lZCBsb25nIG9mZnNldCwgY2hhciogYnVmLCBpbnQgbGVuLCBpbnQgcmVhZCk7CisKK3N0 YXRpYyBpbnQgaHJkX2lvY3RsKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBzdHJ1Y3QgZmlsZSAqIGZp bGUsCisJdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IEhS RF9ERVZJQ0UqIGhyZDsKKwlpbnQgZGV2OworCWludCByZXM7CisKKwlpZiAoIWlub2RlKQorCQly ZXR1cm4gLUVJTlZBTDsKKwlpZiAoTUFKT1IoaW5vZGUtPmlfcmRldikgIT0gSFVHRVJBTURfTUFK T1IpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiaHJkX2lvY3RsOiBwc2V1ZG8tbWFqb3IgIT0g JWRcbiIsIEhVR0VSQU1EX01BSk9SKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCWRldiA9IE1J Tk9SKGlub2RlLT5pX3JkZXYpOworCWlmIChkZXYgPj0gTUFYX0hVR0VSQU1EKQorCQlyZXR1cm4g LUVOT0RFVjsKKyAgICAgICBocmQgPSAmaHJkX2RldmljZXNbZGV2XTsKKwlzcGluX2xvY2soJmhy ZC0+bG9jayk7CisJcmVzID0gMDsKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgQkxLR0VUU0laRTog ICAvKiBSZXR1cm4gZGV2aWNlIHNpemUgKi8KKwkJcmVzID0gIHB1dF91c2VyKGhyZC0+c2l6ZTw8 MywgKGxvbmcgKikgYXJnKTsKKwkJYnJlYWs7CisJY2FzZSBIUkRTRVRCUFM6CisJCWlmKCFjYXBh YmxlKENBUF9TWVNfQURNSU4pKSB7CisJCQlyZXMgPSAtRUFDQ0VTOworCQkJYnJlYWs7CisJCX0K KwkJaWYoIChhcmcgIT0gNTEyKSAmJgorCQkJKGFyZyAhPSAxMDI0KSAmJgorCQkJKGFyZyAhPSAy MDQ4KSAmJgorCQkJKGFyZyAhPSA0MDk2KSApIHsKKwkJCXJlcyA9IC1FSU5WQUw7CisJCQlicmVh azsKKwkJfQorCQlodWdlcmFtZF9icHNbZGV2XSA9IGFyZzsKKwkJaHVnZXJhbWRfYmxvY2tjb3Vu dFtkZXZdID0gaHJkLT5zaXplKihQQUdFX1NJWkUvaHVnZXJhbWRfYnBzW2Rldl0pOworCQlicmVh azsKKwljYXNlIEhSRFNFVFNJWkU6CisJCWlmKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKSB7CisJ CQlyZXMgPSAtRUFDQ0VTOworCQkJYnJlYWs7CisJCX0KKwkJaWYoaHJkLT5zaXplICE9IDApCisJ CXsKKwkJCWZyZWVfaHVnZW1lbShocmQtPnN0YXJ0LAorCQkJCQkJaHJkLT5zaXplKTsKKwkJCWhy ZC0+c2l6ZSA9IDA7CisJCX0KKwkJaWYoYXJnID09IDApCisJCQlicmVhazsKKwkJaHJkLT5zdGFy dCA9IGFsbG9jX2h1Z2VtZW0oYXJnKTsKKwkJaWYoaHJkLT5zdGFydCA9PSAtMSkgeworCQkJcmVz ID0gLUVOT01FTTsKKwkJCWJyZWFrOworCQl9CisJCWhyZC0+c2l6ZSA9IGFyZzsKKwkJCisJCWlm KGhyZC0+cmVtYXBfYWRkcj09TlVMTCkKKwkJCWhyZC0+cmVtYXBfYWRkciA9IGlvcmVtYXAoaHJk LT5zdGFydCpQQUdFX1NJWkUsIFBBR0VfU0laRSk7CisJCWlmKGhyZC0+cmVtYXBfYWRkciA9PSBO VUxMKSB7CisJCQlmcmVlX2h1Z2VtZW0oaHJkLT5zdGFydCwKKwkJCQkJCQlocmQtPnNpemUpOwor CQkJaHJkLT5zaXplID0gMDsKKwkJCXJlcyA9IC1FTk9NRU07CisJCQlicmVhazsKKwkJfQorCQlo dWdlcmFtZF9ibG9ja2NvdW50W2Rldl0gPSBocmQtPnNpemUqKFBBR0VfU0laRS9odWdlcmFtZF9i cHNbZGV2XSk7CisJCWJyZWFrOworCQkKKwkJLyogRklYTUU6IGFkZGl0aW9uYWwgaW9jdGwncyBy ZXF1aXJlZD8gKi8KKwlkZWZhdWx0OgorCQlyZXMgPSAgLUVJTlZBTDsKKwl9CisJc3Bpbl91bmxv Y2soJmhyZC0+bG9jayk7CisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGludCBocmRfb3Blbihz dHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgSFJEX0RF VklDRSAqaHJkOworCWludCAgICAgZGV2OworCisJaWYgKCFpbm9kZSkKKwkJcmV0dXJuIC1FSU5W QUw7CisJaWYgKE1BSk9SKGlub2RlLT5pX3JkZXYpICE9IEhVR0VSQU1EX01BSk9SKSB7CisJCXBy aW50ayhLRVJOX1dBUk5JTkcgImhyZF9vcGVuOiBwc2V1ZG8tbWFqb3IgIT0gJWRcbiIsIEhVR0VS QU1EX01BSk9SKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCWRldiA9IE1JTk9SKGlub2RlLT5p X3JkZXYpOworCWlmIChkZXYgPj0gTUFYX0hVR0VSQU1EKSB7CisJCXJldHVybiAtRU5PREVWOwor CX0KKwlocmQgPSAmaHJkX2RldmljZXNbZGV2XTsKKworCXNwaW5fbG9jaygmaHJkLT5sb2NrKTsK KwlocmQtPnJlZmNvdW50Kys7CisJc3Bpbl91bmxvY2soJmhyZC0+bG9jayk7CisJTU9EX0lOQ19V U0VfQ09VTlQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaHJkX3JlbGVhc2Uoc3RydWN0 IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IEhSRF9ERVZJQ0Uq IGhyZDsKKwlpbnQgICAgIGRldjsKKworCWlmICghaW5vZGUpCisJCXJldHVybiAwOworCWlmIChN QUpPUihpbm9kZS0+aV9yZGV2KSAhPSBIVUdFUkFNRF9NQUpPUikgeworCQlwcmludGsoS0VSTl9X QVJOSU5HICJocmRfcmVsZWFzZTogcHNldWRvLW1ham9yICE9ICVkXG4iLCBIVUdFUkFNRF9NQUpP Uik7CisJCXJldHVybiAwOworCX0KKwlkZXYgPSBNSU5PUihpbm9kZS0+aV9yZGV2KTsKKwlpZiAo ZGV2ID49IE1BWF9IVUdFUkFNRCkKKwkJcmV0dXJuIDA7CisJaHJkID0gJmhyZF9kZXZpY2VzW2Rl dl07CisJc3Bpbl9sb2NrKCZocmQtPmxvY2spOworCQorCWlmIChocmQtPnJlZmNvdW50IDw9IDAp CisJCXByaW50ayhLRVJOX0VSUiAiaHJkX3JlbGVhc2U6IHJlZmNvdW50KE1JTk9SPSVkKSA8PSAw XG4iLCBkZXYpOworCWVsc2UgIHsKKwkJaHJkLT5yZWZjb3VudC0tOworCQlpZihocmQtPnJlZmNv dW50ID09IDApCisJCU1PRF9ERUNfVVNFX0NPVU5UOworCX0KKwlzcGluX3VubG9jaygmaHJkLT5s b2NrKTsKKwlyZXR1cm4gMDsKK30KKworaW50IGhyZF9mc3luYyhzdHJ1Y3QgZmlsZSogdW51c2Vk LCBzdHJ1Y3QgZGVudHJ5KiB1bnVzZWQyKQoreworCS8qIHN5bmNpbmcgYSByYW1kaXNrPz8/ICov CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgaHVnZXJhbWRfcmVxdWVzdCh2b2lkKQoreworCWludCBk ZXY7CisJaW50IHJlczsKKwkKKwl3aGlsZSgxKSB7CisJCUlOSVRfUkVRVUVTVAorCQorCQkvKiBG SVhNRTogcmVsZWFzZSB0aGUgaW8gbG9jaz8gKi8KKwkJCisJCWRldiA9IERFVklDRV9OUihDVVJS RU5ULT5ycV9kZXYpOworCQlpZihkZXYgPiBNQVhfSFVHRVJBTUQpIHsKKwkJCXJlcyA9IDA7CisJ CX0gZWxzZQorCQl7CisJCQlzcGluX2xvY2soJmhyZF9kZXZpY2VzW2Rldl0ubG9jayk7CisJCQly ZXMgPSBocmRfcncoZGV2LCBDVVJSRU5ULT5zZWN0b3IsIENVUlJFTlQtPmJ1ZmZlciwgQ1VSUkVO VC0+Y3VycmVudF9ucl9zZWN0b3JzLCAoQ1VSUkVOVC0+Y21kICE9IFdSSVRFKSApOworCQkJc3Bp bl91bmxvY2soJmhyZF9kZXZpY2VzW2Rldl0ubG9jayk7CisJCX0KKwkJLyogRklYTUU6IHJlYWNx dWlyZSB0aGUgaW8gbG9jayA/ICovCisJCWVuZF9yZXF1ZXN0KHJlcyk7CisJfQorfQorCitzdGF0 aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBocmRfZm9wcyA9IHsKKwlOVUxMLCAgICAgICAgICAg ICAgICAgICAvKiBsc2VlayAtIGRlZmF1bHQgKi8KKwlibG9ja19yZWFkLCAgICAgICAgICAgICAv KiByZWFkICovIAorCWJsb2NrX3dyaXRlLCAgICAvKiB3cml0ZSAgKi8KKwlOVUxMLCAgICAgICAg ICAgICAgICAgICAvKiByZWFkZGlyIC0gYmFkICovCisJTlVMTCwgICAgICAgICAgICAgICAgICAg LyogcG9sbCAqLworCWhyZF9pb2N0bCwgICAgICAgICAgICAgIC8qIGlvY3RsICovCisJTlVMTCwg ICAgICAgICAgICAgICAgICAgLyogbW1hcCAqLworCWhyZF9vcGVuLCAgICAgICAgICAgICAgIC8q IG9wZW4gKi8KKwlOVUxMLCAgICAgICAgICAgICAgICAgICAvKiBmbHVzaCAqLworCWhyZF9yZWxl YXNlLCAgICAvKiByZWxlYXNlICovCisJYmxvY2tfZnN5bmMgICAgICAgICAgICAgLyogZnN5bmMg Ki8KK307CisKKy8qCisgKiBBbmQgbm93IHRoZSBtb2R1bGVzIGNvZGUgYW5kIGtlcm5lbCBpbnRl cmZhY2UuCisgKi8KKyNpZmRlZiBNT0RVTEUKKyNkZWZpbmUgaHVnZXJhbWRfaW5pdCBpbml0X21v ZHVsZQorI2VuZGlmCisKK2ludCBodWdlcmFtZF9pbml0KHZvaWQpIAoreworCWludCAgICAgaTsK KworCWlmIChyZWdpc3Rlcl9ibGtkZXYoSFVHRVJBTURfTUFKT1IsICJodWdlcmFtZCIsICZocmRf Zm9wcykpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiVW5hYmxlIHRvIGdldCBtYWpvciBudW1i ZXIgJWQgZm9yIGh1Z2VyYW1kIGRldmljZVxuIiwKKwkJICAgICAgIEhVR0VSQU1EX01BSk9SKTsK KwkJcmV0dXJuIC1FSU87CisJfQorI2lmbmRlZiBNT0RVTEUKKwlwcmludGsoS0VSTl9JTkZPICJo dWdlcmFtZDogcmVnaXN0ZXJlZCBkZXZpY2UgYXQgbWFqb3IgJWRcbiIsIEhVR0VSQU1EX01BSk9S KTsKKyNlbmRpZgorICAgIC8qIEZJWE1FOiB3aGljaCBnbG9iYWwgdmFyaWFibGVzIG11c3QgYmUg aW5pdGlhbGl6ZWQ/ICovCisKKwlibGtzaXplX3NpemVbSFVHRVJBTURfTUFKT1JdID0gaHVnZXJh bWRfYnBzOworCWJsa19zaXplW0hVR0VSQU1EX01BSk9SXSA9IGh1Z2VyYW1kX2Jsb2NrY291bnQ7 CisJcmVhZF9haGVhZFtIVUdFUkFNRF9NQUpPUl0gPSAwOyAvKiBubyByZWFkIGFoZWFkLCBzaW5j ZSB0aGUgc2VlayB0aW1lIGlzIDAgKi8KKwloYXJkc2VjdF9zaXplW0hVR0VSQU1EX01BSk9SXSA9 IE5VTEw7CisJYmxrX2RldltIVUdFUkFNRF9NQUpPUl0ucmVxdWVzdF9mbiA9IERFVklDRV9SRVFV RVNUOworCisJZm9yIChpPTA7IGkgPCBNQVhfSFVHRVJBTUQ7IGkrKykgeworCQltZW1zZXQoJmhy ZF9kZXZpY2VzW2ldLDAsc2l6ZW9mKGhyZF9kZXZpY2VzW2ldKSk7CisJCWhyZF9kZXZpY2VzW2ld LmxvY2sgPSBTUElOX0xPQ0tfVU5MT0NLRUQ7CisJCWh1Z2VyYW1kX2Jwc1tpXSA9IDEwMjQ7CisJ CWh1Z2VyYW1kX2Jsb2NrY291bnRbaV0gPSAwOworCX0KKwlyZXR1cm4gMDsKK30KKworI2lmZGVm IE1PRFVMRQordm9pZCBjbGVhbnVwX21vZHVsZSh2b2lkKSAKK3sKKwlpbnQgaTsKKwlmb3IoaT0w O2k8TUFYX0hVR0VSQU1EO2krKykgeworCQlpZihocmRfZGV2aWNlc1tpXS5zaXplICE9IDApIHsK KwkJCWZyZWVfaHVnZW1lbShocmRfZGV2aWNlc1tpXS5zdGFydCwKKwkJCQkJaHJkX2RldmljZXNb aV0uc2l6ZSk7CisJCQlocmRfZGV2aWNlc1tpXS5zaXplID0gMDsKKwkJfQorCQlpZihocmRfZGV2 aWNlc1tpXS5yZW1hcF9hZGRyICE9IE5VTEwpIHsKKwkJCS8qIEZJWE1FOiB0ZXN0IGZvciBtZW1v cnkgbGVhayAqLworCQkJaW91bm1hcChocmRfZGV2aWNlc1tpXS5yZW1hcF9hZGRyKTsKKwkJCWhy ZF9kZXZpY2VzW2ldLnJlbWFwX2FkZHIgPSBOVUxMOworCQl9CisJCQorCX0KKwlpZiAodW5yZWdp c3Rlcl9ibGtkZXYoSFVHRVJBTURfTUFKT1IsICJodWdlcmFtZCIpICE9IDApCisJCXByaW50ayhL RVJOX1dBUk5JTkcgImh1Z2VyYW1kOiBjYW5ub3QgdW5yZWdpc3RlciBibGtkZXZcbiIpOworfQor I2VuZGlmCisKK2ludCBocmRfcncoaW50IGRldiwgdW5zaWduZWQgbG9uZyBvZmZzZXQsIGNoYXIq IGJ1ZiwgaW50IGxlbiwgaW50IHJlYWQpCit7CisJc3RydWN0IEhSRF9ERVZJQ0UqIGhyZCA9ICZo cmRfZGV2aWNlc1tkZXZdOworCWxvZmZfdCBieXRlb2ZmID0gb2Zmc2V0KjUxMjsKKworCQorCWxl biAqPSA1MTI7CisJaWYoYnl0ZW9mZiA+ICgobG9mZl90KWhyZC0+c2l6ZSkqUEFHRV9TSVpFKQor CQlyZXR1cm4gMDsKKwlpZihieXRlb2ZmK2xlbiA+ICgobG9mZl90KWhyZC0+c2l6ZSkqUEFHRV9T SVpFKQorCQlsZW4gPSAoKGxvZmZfdClocmQtPnNpemUpKlBBR0VfU0laRS1ieXRlb2ZmOworCQor CXdoaWxlKGxlbiAhPSAwKSB7CisJCXVuc2lnbmVkIGxvbmcgbGluZWFyID0gKHVuc2lnbmVkIGxv bmcpaHJkLT5yZW1hcF9hZGRyOworCQlwdGVfdCogcHRlID0gcHRlX29mZnNldChwbWRfb2Zmc2V0 KHBnZF9vZmZzZXRfayhsaW5lYXIpLGxpbmVhciksIGxpbmVhcik7CisJCXVuc2lnbmVkIGxvbmcg cGh5c29mZnNldDsKKwkJaW50IGRhdGFsZW47CisJCWludCBvZmZzZXQ7CisJCisJCXBoeXNvZmZz ZXQgPSBocmQtPnN0YXJ0ICsgKGJ5dGVvZmY+PlBBR0VfU0hJRlQpOworCQlwaHlzb2Zmc2V0ICo9 IFBBR0VfU0laRTsKKwkJb2Zmc2V0ID0gYnl0ZW9mZiAmIChQQUdFX1NJWkUtMSk7CisJCQorCQlz ZXRfcHRlKHB0ZSwgbWtfcHRlX3BoeXMocGh5c29mZnNldCwgX19wZ3Byb3QoX1BBR0VfUFJFU0VO VHwgX1BBR0VfUlcgfAorCQkJCV9QQUdFX0RJUlRZIHwgX1BBR0VfQUNDRVNTRUQgKSkpOworCQkK KwkJLyogdGhpcyBjYWxsIG9ubHkgYWZmZWN0cyB0aGUgY3VycmVudCBjcHUuCisJCSAgIFRoaXMg aXMgbm90IGEgcHJvYmxlbSwgYmVjYXVzZSBvbmx5IG9uZSBjcHUgaXMgYWxsb3dlZCB0byBleGVj dXRlCisJCSAgIHRoZXNlIGxpbmVzLgorCQkgKi8KKwkJX19mbHVzaF90bGJfb25lKGxpbmVhcik7 CisKKwkJZGF0YWxlbiA9IFBBR0VfU0laRS1vZmZzZXQ7CisJCQorCQlpZihkYXRhbGVuID4gbGVu KQorCQkJZGF0YWxlbiA9IGxlbjsKKworCQlpZihyZWFkKQorCQkJbWVtY3B5KGJ1ZiwoY2hhciop bGluZWFyK29mZnNldCxkYXRhbGVuKTsKKwkJIGVsc2UKKwkJCW1lbWNweSgoY2hhciopbGluZWFy K29mZnNldCwgYnVmLCBkYXRhbGVuKTsKKworCQlidWYgKz0gZGF0YWxlbjsKKwkJbGVuIC09IGRh dGFsZW47CisJCWJ5dGVvZmYgKz0gZGF0YWxlbjsKKwl9CisJCisJcmV0dXJuIDE7Cit9CmRpZmYg LXUgLXIgLVAgMi4yLjEvZHJpdmVycy9ibG9jay9sbF9yd19ibGsuYyBjdXJyZW50L2RyaXZlcnMv YmxvY2svbGxfcndfYmxrLmMKLS0tIDIuMi4xL2RyaXZlcnMvYmxvY2svbGxfcndfYmxrLmMJTW9u IERlYyAyOCAyMDoxOToxOSAxOTk4CisrKyBjdXJyZW50L2RyaXZlcnMvYmxvY2svbGxfcndfYmxr LmMJU3VuIEZlYiAgNyAyMDozNzowNSAxOTk5CkBAIC03NDAsNiArNzQwLDkgQEAKICNpZmRlZiBD T05GSUdfQkxLX0RFVl9SQU0KIAlyZF9pbml0KCk7CiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfQkxL X0RFVl9IVUdFUkFNRAorCWh1Z2VyYW1kX2luaXQoKTsKKyNlbmRpZgogI2lmZGVmIENPTkZJR19C TEtfREVWX0xPT1AKIAlsb29wX2luaXQoKTsKICNlbmRpZgpkaWZmIC11IC1yIC1QIDIuMi4xL2lu Y2x1ZGUvYXNtLWkzODYvaG1jYWNoZS5oIGN1cnJlbnQvaW5jbHVkZS9hc20taTM4Ni9obWNhY2hl LmgKLS0tIDIuMi4xL2luY2x1ZGUvYXNtLWkzODYvaG1jYWNoZS5oCVRodSBKYW4gIDEgMDE6MDA6 MDAgMTk3MAorKysgY3VycmVudC9pbmNsdWRlL2FzbS1pMzg2L2htY2FjaGUuaAlNb24gRmViICA4 IDE5OjQ1OjQxIDE5OTkKQEAgLTAsMCArMSwxNiBAQAorLyoKKyAqCisgKiAoQykgTWFuZnJlZCBT cHJhdWwgPG1hc3AwMDA4QHN0dWQudW5pLXNiLmRlPgorICoKKyAqLworCisjaWZuZGVmIF9ITUNB Q0hFX0gKKyNkZWZpbmUgX0hNQ0FDSEVfSAorCitzdHJ1Y3QgcGFnZSogaG1jX2ZpbmRwYWdlKHN0 cnVjdCBpbm9kZSogaW5vZGUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKKwordm9pZCBobWNfaW52 YWxpZGF0ZV9pbm9kZV9wYWdlcyhzdHJ1Y3QgaW5vZGUqIGlub2RlKTsKK3ZvaWQgaG1jX3RydW5j YXRlX2lub2RlX3BhZ2VzKHN0cnVjdCBpbm9kZSogaW5vZGUsIHVuc2lnbmVkIGxvbmcgc3RhcnQp Owordm9pZCBobWNfYWRkX3BhZ2Uoc3RydWN0IHBhZ2UqIHBhZ2UpOworCisjZW5kaWYgLyogX0hN Q0FDSEVfSCAqLwpkaWZmIC11IC1yIC1QIDIuMi4xL2luY2x1ZGUvYXNtLWkzODYvaHVnZW1lbS5o IGN1cnJlbnQvaW5jbHVkZS9hc20taTM4Ni9odWdlbWVtLmgKLS0tIDIuMi4xL2luY2x1ZGUvYXNt LWkzODYvaHVnZW1lbS5oCVRodSBKYW4gIDEgMDE6MDA6MDAgMTk3MAorKysgY3VycmVudC9pbmNs dWRlL2FzbS1pMzg2L2h1Z2VtZW0uaAlTdW4gRmViICA3IDIxOjIxOjUyIDE5OTkKQEAgLTAsMCAr MSw0NSBAQAorLyoKKyAqIEh1Z2UgbWVtb3J5IHN1cHBvcnQKKyAqIAorICogICAgICAgICAgICAg IENvcHlyaWdodCAxOTk5IGJ5IE1hbmZyZWQgU3ByYXVsIDxtYXNwMDAwOEBzdHVkLnVuaS1zYi5k ZT4KKyAqCisgKiAgICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl ZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgICAg IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExp Y2Vuc2UsIG9yCisgKiAgICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg KgorICogICAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp dCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgICAgTUVSQ0hBTlRBQklMSVRZ IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICAgICBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgICAg WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UKKyAqICAgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUg dG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICAgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3Mg QXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICogCisgKi8KKyNpZm5kZWYgX0hV R0VNRU1fSAorI2RlZmluZSBfSFVHRU1FTV9ICisKK3ZvaWQgaW5pdF9odWdlbWVtKGludCBtZW1z dGFydCwgaW50IG1lbWVuZCk7CisKKy8qCisgICBBbGwgc2l6ZSBwYXJhbWV0ZXJzIGFyZSBwYWdl IGNvdW50cy4KKyAgIAorICAgaHVnZW1lbSBpbnRlcm5hbGx5IHJvdW5kcyBhbGwgYWxsb2NhdGlv bgorICAgdG8gdGhpcyBzaXplLiBVc2Uga21hbGxvYyBpZiB5b3UgbmVlZCBsZXNzCisgICBtZW1v cnkKKyAqLworCisjZGVmaW5lIEhNX1BBR0VTX1BFUl9CSVQgICAgICAgIDY0CisKKy8qIHJldHVy biB2YWx1ZTogc3RhcnQgb2YgdGhlIHBoeXNpY2FsIGFyZWEsIG9yIDAgb24gZXJyb3IuICovCitp bnQgYWxsb2NfaHVnZW1lbShpbnQgc2l6ZSk7CisKK3ZvaWQgZnJlZV9odWdlbWVtKGludCBzdGFy dHBnLCBpbnQgc2l6ZSk7CisKKy8qIHBtYXggY2FuIGJlIE5VTEwsIHJldHVybnMgdGhlIHNpemUg b2YgdGhlIGxhcmdlc3QgZnJlZSBhcmVhLiAqLworaW50IGdldGZyZWVfaHVnZW1lbShpbnQqIHBt YXgpOworCisjZW5kaWYgLyogX0hVR0VNRU1fSCAqLwpkaWZmIC11IC1yIC1QIDIuMi4xL2luY2x1 ZGUvbGludXgvaHVnZXJhbWQuaCBjdXJyZW50L2luY2x1ZGUvbGludXgvaHVnZXJhbWQuaAotLS0g Mi4yLjEvaW5jbHVkZS9saW51eC9odWdlcmFtZC5oCVRodSBKYW4gIDEgMDE6MDA6MDAgMTk3MAor KysgY3VycmVudC9pbmNsdWRlL2xpbnV4L2h1Z2VyYW1kLmgJU3VuIEZlYiAgNyAyMDozNzowNSAx OTk5CkBAIC0wLDAgKzEsMjYgQEAKKyNpZm5kZWYgX0hVR0VSQU1EX0gKKyNkZWZpbmUgX0hVR0VS QU1EX0gKKworLyoKKyAqIEh1Z2VyYW1kOiBzcGVjaWFsIHJhbWRpc2sgdGhhdCB1c2VzIG1lbW9y eSBmcm9tIHRoZSBodWdlcmFtIG1lbW9yeSBwb29sLgorICoKKyAqLworCisjaW5jbHVkZSA8bGlu dXgvaW9jdGwuaD4KKworI2lmbmRlZiBfX2kzODZfXworI2Vycm9yIEh1Z2VyYW1kIGlzIG9ubHkg YXZhaWxhYmxlIG9uIHRoZSBpMzg2IHBsYXRmb3JtLgorI2VuZGlmCisKKyNkZWZpbmUgSFVHRVJB TURfTUFKT1IgIDEyNiAgICAgICAgICAgICAvKiBGSVhNRTogbm9ybWFsIE1BSk9SIHJlcXVpcmVk LiAqLworCisjZGVmaW5lIE1BWF9IVUdFUkFNRCAgICAgICAgICAgIDggICAvKiBtYXhpbXVtIG51 bWJlciBvZiByYW1kaXNrcy4gKi8KKworLyogcGFyYW1ldGVyOiBuZXcgcGFnZSBjb3VudCovCisj ZGVmaW5lIEhSRFNFVFNJWkUgIF9JTyhIVUdFUkFNRF9NQUpPUiwxMDEpCisKKy8qIHBhcmFtZXRl cjogbmV3IGJsb2NrIHNpemUgKi8KKyNkZWZpbmUgSFJEU0VUQlBTICAgICAgIF9JTyhIVUdFUkFN RF9NQUpPUiwxMDIpCisKKworI2VuZGlmIC8qIF9IVUdFUkFNRF9IICovCmRpZmYgLXUgLXIgLVAg Mi4yLjEvaW5jbHVkZS9saW51eC9wYWdlbWFwLmggY3VycmVudC9pbmNsdWRlL2xpbnV4L3BhZ2Vt YXAuaAotLS0gMi4yLjEvaW5jbHVkZS9saW51eC9wYWdlbWFwLmgJVHVlIEphbiAyNiAwMTowNjoy MyAxOTk5CisrKyBjdXJyZW50L2luY2x1ZGUvbGludXgvcGFnZW1hcC5oCU1vbiBGZWIgIDggMjA6 MTA6MTUgMTk5OQpAQCAtNDQsNiArNDQsMTAgQEAKIAogI2RlZmluZSBwYWdlX2hhc2goaW5vZGUs b2Zmc2V0KSAocGFnZV9oYXNoX3RhYmxlK19wYWdlX2hhc2hmbihpbm9kZSxvZmZzZXQpKQogCisj aWZkZWYgQ09ORklHX0hVR0VNRU0KK2V4dGVybiBzdHJ1Y3QgcGFnZSogaG1jX2ZpbmRwYWdlKHN0 cnVjdCBpbm9kZSogaW5vZGUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKKyNlbmRpZgorCiBzdGF0 aWMgaW5saW5lIHN0cnVjdCBwYWdlICogX19maW5kX3BhZ2Uoc3RydWN0IGlub2RlICogaW5vZGUs IHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKIAlnb3RvIGluc2lk ZTsKQEAgLTYxLDYgKzY1LDEwIEBACiAJYXRvbWljX2luYygmcGFnZS0+Y291bnQpOwogCXNldF9i aXQoUEdfcmVmZXJlbmNlZCwgJnBhZ2UtPmZsYWdzKTsKIG5vdF9mb3VuZDoKKyNpZmRlZiBDT05G SUdfSFVHRU1FTQorCWlmIChwYWdlID09IE5VTEwpCisJCXBhZ2UgPSBobWNfZmluZHBhZ2UoaW5v ZGUsIG9mZnNldCk7CisjZW5kaWYKIAlyZXR1cm4gcGFnZTsKIH0KIApkaWZmIC11IC1yIC1QIDIu Mi4xL21tL2ZpbGVtYXAuYyBjdXJyZW50L21tL2ZpbGVtYXAuYwotLS0gMi4yLjEvbW0vZmlsZW1h cC5jCU1vbiBKYW4gMjUgMTk6NDc6MTEgMTk5OQorKysgY3VycmVudC9tbS9maWxlbWFwLmMJTW9u IEZlYiAgOCAyMDoxMzoyMSAxOTk5CkBAIC0yMiw3ICsyMiw5IEBACiAKICNpbmNsdWRlIDxhc20v cGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0KKyNpZmRlZiBfX2kzODZfXwor I2luY2x1ZGUgPGFzbS9obWNhY2hlLmg+CisjZW5kaWYKIC8qCiAgKiBTaGFyZWQgbWFwcGluZ3Mg aW1wbGVtZW50ZWQgMzAuMTEuMTk5NC4gSXQncyBub3QgZnVsbHkgd29ya2luZyB5ZXQsCiAgKiB0 aG91Z2guCkBAIC02NSw2ICs2Nyw5IEBACiAJCV9fZnJlZV9wYWdlKHBhZ2UpOwogCQljb250aW51 ZTsKIAl9CisjaWZkZWYgQlVJTERfSFVHRU1FTQorCWhtY19pbnZhbGlkYXRlX2lub2RlX3BhZ2Vz KGlub2RlKTsKKyNlbmRpZgogfQogCiAvKgpAQCAtMTA2LDYgKzExMSw5IEBACiAJCQlmbHVzaF9w YWdlX3RvX3JhbShhZGRyZXNzKTsKIAkJfQogCX0KKyNpZmRlZiBDT05GSUdfSFVHRU1FTQorCWht Y190cnVuY2F0ZV9pbm9kZV9wYWdlcyhpbm9kZSwgc3RhcnQpOworI2VuZGlmCiB9CiAKIC8qCkBA IC0xMTQsNiArMTIyLDkgQEAKIHZvaWQgcmVtb3ZlX2lub2RlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBh Z2UpCiB7CiAJcmVtb3ZlX3BhZ2VfZnJvbV9oYXNoX3F1ZXVlKHBhZ2UpOworI2lmZGVmIENPTkZJ R19IVUdFTUVNIAorCWhtY19hZGRfcGFnZShwYWdlKTsKKyNlbmRpZgogCXJlbW92ZV9wYWdlX2Zy b21faW5vZGVfcXVldWUocGFnZSk7CiAJX19mcmVlX3BhZ2UocGFnZSk7CiB9 ------=_NextPart_000_0029_01BE53AA.9F52C4E0-- -- To unsubscribe, send a message with 'unsubscribe linux-mm my@address' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://humbolt.geo.uu.nl/Linux-MM/