From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mike Rapoport Subject: [PATCH 10/21] memblock: refactor internal allocation functions Date: Wed, 16 Jan 2019 15:44:10 +0200 Message-ID: <1547646261-32535-11-git-send-email-rppt__25151.6220895157$1547646269$gmane$org@linux.ibm.com> References: <1547646261-32535-1-git-send-email-rppt@linux.ibm.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1gjlVp-0006jU-VG for xen-devel@lists.xenproject.org; Wed, 16 Jan 2019 13:45:46 +0000 Received: from pps.filterd (m0098399.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.22/8.16.0.22) with SMTP id x0GDeZ6l019445 for ; Wed, 16 Jan 2019 08:45:32 -0500 Received: from e06smtp01.uk.ibm.com (e06smtp01.uk.ibm.com [195.75.94.97]) by mx0a-001b2d01.pphosted.com with ESMTP id 2q23t1dpb7-1 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=NOT) for ; Wed, 16 Jan 2019 08:45:31 -0500 Received: from localhost by e06smtp01.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Wed, 16 Jan 2019 13:45:27 -0000 In-Reply-To: <1547646261-32535-1-git-send-email-rppt@linux.ibm.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: linux-mm@kvack.org Cc: Rich Felker , linux-ia64@vger.kernel.org, devicetree@vger.kernel.org, Catalin Marinas , Heiko Carstens , x86@kernel.org, linux-mips@vger.kernel.org, Max Filippov , Guo Ren , sparclinux@vger.kernel.org, Christoph Hellwig , linux-s390@vger.kernel.org, linux-c6x-dev@linux-c6x.org, Yoshinori Sato , Richard Weinberger , linux-sh@vger.kernel.org, Russell King , kasan-dev@googlegroups.com, Mike Rapoport , Geert Uytterhoeven , Mark Salter , Dennis Zhou , Matt Turner , linux-snps-arc@lists.infradead.org, uclinux-h8-devel@lists.sourceforge.jp, Petr Mladek , linux-xtensa@linux-xten List-Id: xen-devel@lists.xenproject.org Q3VycmVudGx5LCBtZW1ibG9jayBoYXMgc2V2ZXJhbCBpbnRlcm5hbCBmdW5jdGlvbnMgd2l0aCBv dmVybGFwcGluZwpmdW5jdGlvbmFsaXR5LiBUaGV5IGFsbCBjYWxsIG1lbWJsb2NrX2ZpbmRfaW5f cmFuZ2Vfbm9kZSgpIHRvIGZpbmQgZnJlZQptZW1vcnkgYW5kIHRoZW4gcmVzZXJ2ZSB0aGUgYWxs b2NhdGVkIHJhbmdlIGFuZCBtYXJrIGl0IHdpdGgga21lbWxlYWsuCkhvd2V2ZXIsIHRoZXJlIGlz IGRpZmZlcmVuY2UgaW4gdGhlIGFsbG9jYXRpb24gY29uc3RyYWludHMgYW5kIGluIGZhbGxiYWNr CnN0cmF0ZWdpZXMuCgpUaGUgYWxsb2NhdGlvbnMgcmV0dXJuaW5nIHBoeXNpY2FsIGFkZHJlc3Mg Zmlyc3QgYXR0ZW1wdCB0byBmaW5kIGZyZWUKbWVtb3J5IG9uIHRoZSBzcGVjaWZpZWQgbm9kZSB3 aXRoaW4gbWlycm9yZWQgbWVtb3J5IHJlZ2lvbnMsIHRoZW4gcmV0cnkgb24KdGhlIHNhbWUgbm9k ZSB3aXRob3V0IHRoZSByZXF1aXJlbWVudCBmb3IgbWVtb3J5IG1pcnJvcmluZyBhbmQgZmluYWxs eSBmYWxsCmJhY2sgdG8gYWxsIGF2YWlsYWJsZSBtZW1vcnkuCgpUaGUgYWxsb2NhdGlvbnMgcmV0 dXJuaW5nIHZpcnR1YWwgYWRkcmVzcyBzdGFydCB3aXRoIGNsYW1waW5nIHRoZSBhbGxvd2VkCnJh bmdlIHRvIG1lbWJsb2NrLmN1cnJlbnRfbGltaXQsIGF0dGVtcHQgdG8gYWxsb2NhdGUgZnJvbSB0 aGUgc3BlY2lmaWVkCm5vZGUgZnJvbSByZWdpb25zIHdpdGggbWlycm9yaW5nIGFuZCB3aXRoIHVz ZXIgZGVmaW5lZCBtaW5pbWFsIGFkZHJlc3MuIElmCnN1Y2ggYWxsb2NhdGlvbiBmYWlscywgbmV4 dCBhdHRlbXB0IGlzIGRvbmUgd2l0aCBub2RlIHJlc3RyaWN0aW9uIGxpZnRlZC4KTmV4dCwgdGhl IGFsbG9jYXRpb24gaXMgcmV0cmllZCB3aXRoIG1pbmltYWwgYWRkcmVzcyByZXNldCB0byB6ZXJv IGFuZCBhdApsYXN0IHdpdGhvdXQgdGhlIHJlcXVpcmVtZW50IGZvciBtaXJyb3JlZCByZWdpb25z LgoKTGV0J3MgY29uc29saWRhdGUgdmFyaW91cyBmYWxsYmFja3MgaGFuZGxpbmcgYW5kIG1ha2Ug dGhlbSBtb3JlIGNvbnNpc3RlbnQKZm9yIHBoeXNpY2FsIGFuZCB2aXJ0dWFsIHZhcmlhbnRzLiBN b3N0IG9mIHRoZSBmYWxsYmFjayBoYW5kbGluZyBpcyBtb3ZlZAp0byBtZW1ibG9ja19hbGxvY19y YW5nZV9uaWQoKSBhbmQgaXQgbm93IGhhbmRsZXMgbm9kZSBhbmQgbWlycm9yIGZhbGxiYWNrcy4K ClRoZSBtZW1ibG9ja19hbGxvY19pbnRlcm5hbCgpIHVzZXMgbWVtYmxvY2tfYWxsb2NfcmFuZ2Vf bmlkKCkgdG8gZ2V0IGEKcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgYWxsb2NhdGVkIHJhbmdlIGFu ZCBjb252ZXJ0cyBpdCB0byB2aXJ0dWFsIGFkZHJlc3MuCgpUaGUgZmFsbGJhY2sgZm9yIGFsbG9j YXRpb24gYmVsb3cgdGhlIHNwZWNpZmllZCBtaW5pbWFsIGFkZHJlc3MgcmVtYWlucyBpbgptZW1i bG9ja19hbGxvY19pbnRlcm5hbCgpIGJlY2F1c2UgbWVtYmxvY2tfYWxsb2NfcmFuZ2VfbmlkKCkg aXMgdXNlZCBieSBDTUEKd2l0aCBleGFjdCByZXF1aXJlbWVudCBmb3IgbG93ZXIgYm91bmRzLgoK VGhlIG1lbWJsb2NrX3BoeXNfYWxsb2NfbmlkKCkgZnVuY3Rpb24gaXMgY29tcGxldGVseSBkcm9w cGVkIGFzIGl0IGlzIG5vdAp1c2VkIGFueXdoZXJlIG91dHNpZGUgbWVtYmxvY2sgYW5kIGl0cyBv bmx5IHVzYWdlIGNhbiBiZSByZXBsYWNlZCBieSBhIGNhbGwKdG8gbWVtYmxvY2tfYWxsb2NfcmFu Z2VfbmlkKCkuCgpTaWduZWQtb2ZmLWJ5OiBNaWtlIFJhcG9wb3J0IDxycHB0QGxpbnV4LmlibS5j b20+Ci0tLQogaW5jbHVkZS9saW51eC9tZW1ibG9jay5oIHwgICAxIC0KIG1tL21lbWJsb2NrLmMg ICAgICAgICAgICB8IDE3MyArKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQogMiBmaWxlcyBjaGFuZ2VkLCA3OCBpbnNlcnRpb25zKCspLCA5NiBkZWxldGlvbnMo LSkKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmggYi9pbmNsdWRlL2xpbnV4 L21lbWJsb2NrLmgKaW5kZXggNjg3NGZkYy4uY2Y0Y2Q5YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9s aW51eC9tZW1ibG9jay5oCisrKyBiL2luY2x1ZGUvbGludXgvbWVtYmxvY2suaApAQCAtMzcxLDcg KzM3MSw2IEBAIHN0YXRpYyBpbmxpbmUgaW50IG1lbWJsb2NrX2dldF9yZWdpb25fbm9kZShjb25z dCBzdHJ1Y3QgbWVtYmxvY2tfcmVnaW9uICpyKQogCiBwaHlzX2FkZHJfdCBtZW1ibG9ja19waHlz X2FsbG9jX3JhbmdlKHBoeXNfYWRkcl90IHNpemUsIHBoeXNfYWRkcl90IGFsaWduLAogCQkJCSAg ICAgIHBoeXNfYWRkcl90IHN0YXJ0LCBwaHlzX2FkZHJfdCBlbmQpOwotcGh5c19hZGRyX3QgbWVt YmxvY2tfcGh5c19hbGxvY19uaWQocGh5c19hZGRyX3Qgc2l6ZSwgcGh5c19hZGRyX3QgYWxpZ24s IGludCBuaWQpOwogcGh5c19hZGRyX3QgbWVtYmxvY2tfcGh5c19hbGxvY190cnlfbmlkKHBoeXNf YWRkcl90IHNpemUsIHBoeXNfYWRkcl90IGFsaWduLCBpbnQgbmlkKTsKIAogc3RhdGljIGlubGlu ZSBwaHlzX2FkZHJfdCBtZW1ibG9ja19waHlzX2FsbG9jKHBoeXNfYWRkcl90IHNpemUsCmRpZmYg LS1naXQgYS9tbS9tZW1ibG9jay5jIGIvbW0vbWVtYmxvY2suYwppbmRleCA1MzFmYTc3Li43Mzlm NzY5IDEwMDY0NAotLS0gYS9tbS9tZW1ibG9jay5jCisrKyBiL21tL21lbWJsb2NrLmMKQEAgLTEz MTIsMzAgKzEzMTIsODQgQEAgX19uZXh0X21lbV9wZm5fcmFuZ2VfaW5fem9uZSh1NjQgKmlkeCwg c3RydWN0IHpvbmUgKnpvbmUsCiAKICNlbmRpZiAvKiBDT05GSUdfREVGRVJSRURfU1RSVUNUX1BB R0VfSU5JVCAqLwogCisvKioKKyAqIG1lbWJsb2NrX2FsbG9jX3JhbmdlX25pZCAtIGFsbG9jYXRl IGJvb3QgbWVtb3J5IGJsb2NrCisgKiBAc2l6ZTogc2l6ZSBvZiBtZW1vcnkgYmxvY2sgdG8gYmUg YWxsb2NhdGVkIGluIGJ5dGVzCisgKiBAYWxpZ246IGFsaWdubWVudCBvZiB0aGUgcmVnaW9uIGFu ZCBibG9jaydzIHNpemUKKyAqIEBzdGFydDogdGhlIGxvd2VyIGJvdW5kIG9mIHRoZSBtZW1vcnkg cmVnaW9uIHRvIGFsbG9jYXRlIChwaHlzIGFkZHJlc3MpCisgKiBAZW5kOiB0aGUgdXBwZXIgYm91 bmQgb2YgdGhlIG1lbW9yeSByZWdpb24gdG8gYWxsb2NhdGUgKHBoeXMgYWRkcmVzcykKKyAqIEBu aWQ6IG5pZCBvZiB0aGUgZnJlZSBhcmVhIHRvIGZpbmQsICVOVU1BX05PX05PREUgZm9yIGFueSBu b2RlCisgKgorICogVGhlIGFsbG9jYXRpb24gaXMgcGVyZm9ybWVkIGZyb20gbWVtb3J5IHJlZ2lv biBsaW1pdGVkIGJ5CisgKiBtZW1ibG9jay5jdXJyZW50X2xpbWl0IGlmIEBtYXhfYWRkciA9PSAl TUVNQkxPQ0tfQUxMT0NfQUNDRVNTSUJMRS4KKyAqCisgKiBJZiB0aGUgc3BlY2lmaWVkIG5vZGUg Y2FuIG5vdCBob2xkIHRoZSByZXF1ZXN0ZWQgbWVtb3J5IHRoZQorICogYWxsb2NhdGlvbiBmYWxs cyBiYWNrIHRvIGFueSBub2RlIGluIHRoZSBzeXN0ZW0KKyAqCisgKiBGb3Igc3lzdGVtcyB3aXRo IG1lbW9yeSBtaXJyb3JpbmcsIHRoZSBhbGxvY2F0aW9uIGlzIGF0dGVtcHRlZCBmaXJzdAorICog ZnJvbSB0aGUgcmVnaW9ucyB3aXRoIG1pcnJvcmluZyBlbmFibGVkIGFuZCB0aGVuIHJldHJpZWQg ZnJvbSBhbnkKKyAqIG1lbW9yeSByZWdpb24uCisgKgorICogSW4gYWRkaXRpb24sIGZ1bmN0aW9u IHNldHMgdGhlIG1pbl9jb3VudCB0byAwIHVzaW5nIGttZW1sZWFrX2FsbG9jX3BoeXMgZm9yCisg KiBhbGxvY2F0ZWQgYm9vdCBtZW1vcnkgYmxvY2ssIHNvIHRoYXQgaXQgaXMgbmV2ZXIgcmVwb3J0 ZWQgYXMgbGVha3MuCisgKgorICogUmV0dXJuOgorICogUGh5c2ljYWwgYWRkcmVzcyBvZiBhbGxv Y2F0ZWQgbWVtb3J5IGJsb2NrIG9uIHN1Y2Nlc3MsICUwIG9uIGZhaWx1cmUuCisgKi8KIHN0YXRp YyBwaHlzX2FkZHJfdCBfX2luaXQgbWVtYmxvY2tfYWxsb2NfcmFuZ2VfbmlkKHBoeXNfYWRkcl90 IHNpemUsCiAJCQkJCXBoeXNfYWRkcl90IGFsaWduLCBwaHlzX2FkZHJfdCBzdGFydCwKLQkJCQkJ cGh5c19hZGRyX3QgZW5kLCBpbnQgbmlkLAotCQkJCQllbnVtIG1lbWJsb2NrX2ZsYWdzIGZsYWdz KQorCQkJCQlwaHlzX2FkZHJfdCBlbmQsIGludCBuaWQpCiB7CisJZW51bSBtZW1ibG9ja19mbGFn cyBmbGFncyA9IGNob29zZV9tZW1ibG9ja19mbGFncygpOwogCXBoeXNfYWRkcl90IGZvdW5kOwog CisJaWYgKFdBUk5fT05DRShuaWQgPT0gTUFYX05VTU5PREVTLCAiVXNhZ2Ugb2YgTUFYX05VTU5P REVTIGlzIGRlcHJlY2F0ZWQuIFVzZSBOVU1BX05PX05PREUgaW5zdGVhZFxuIikpCisJCW5pZCA9 IE5VTUFfTk9fTk9ERTsKKwogCWlmICghYWxpZ24pIHsKIAkJLyogQ2FuJ3QgdXNlIFdBUk5zIHRo aXMgZWFybHkgaW4gYm9vdCBvbiBwb3dlcnBjICovCiAJCWR1bXBfc3RhY2soKTsKIAkJYWxpZ24g PSBTTVBfQ0FDSEVfQllURVM7CiAJfQogCisJaWYgKGVuZCA+IG1lbWJsb2NrLmN1cnJlbnRfbGlt aXQpCisJCWVuZCA9IG1lbWJsb2NrLmN1cnJlbnRfbGltaXQ7CisKK2FnYWluOgogCWZvdW5kID0g bWVtYmxvY2tfZmluZF9pbl9yYW5nZV9ub2RlKHNpemUsIGFsaWduLCBzdGFydCwgZW5kLCBuaWQs CiAJCQkJCSAgICBmbGFncyk7Ci0JaWYgKGZvdW5kICYmICFtZW1ibG9ja19yZXNlcnZlKGZvdW5k LCBzaXplKSkgeworCWlmIChmb3VuZCAmJiAhbWVtYmxvY2tfcmVzZXJ2ZShmb3VuZCwgc2l6ZSkp CisJCWdvdG8gZG9uZTsKKworCWlmIChuaWQgIT0gTlVNQV9OT19OT0RFKSB7CisJCWZvdW5kID0g bWVtYmxvY2tfZmluZF9pbl9yYW5nZV9ub2RlKHNpemUsIGFsaWduLCBzdGFydCwKKwkJCQkJCSAg ICBlbmQsIE5VTUFfTk9fTk9ERSwKKwkJCQkJCSAgICBmbGFncyk7CisJCWlmIChmb3VuZCAmJiAh bWVtYmxvY2tfcmVzZXJ2ZShmb3VuZCwgc2l6ZSkpCisJCQlnb3RvIGRvbmU7CisJfQorCisJaWYg KGZsYWdzICYgTUVNQkxPQ0tfTUlSUk9SKSB7CisJCWZsYWdzICY9IH5NRU1CTE9DS19NSVJST1I7 CisJCXByX3dhcm4oIkNvdWxkIG5vdCBhbGxvY2F0ZSAlcGFwIGJ5dGVzIG9mIG1pcnJvcmVkIG1l bW9yeVxuIiwKKwkJCSZzaXplKTsKKwkJZ290byBhZ2FpbjsKKwl9CisKKwlyZXR1cm4gMDsKKwor ZG9uZToKKwkvKiBTa2lwIGttZW1sZWFrIGZvciBrYXNhbl9pbml0KCkgZHVlIHRvIGhpZ2ggdm9s dW1lLiAqLworCWlmIChlbmQgIT0gTUVNQkxPQ0tfQUxMT0NfS0FTQU4pCiAJCS8qCi0JCSAqIFRo ZSBtaW5fY291bnQgaXMgc2V0IHRvIDAgc28gdGhhdCBtZW1ibG9jayBhbGxvY2F0aW9ucyBhcmUK LQkJICogbmV2ZXIgcmVwb3J0ZWQgYXMgbGVha3MuCisJCSAqIFRoZSBtaW5fY291bnQgaXMgc2V0 IHRvIDAgc28gdGhhdCBtZW1ibG9jayBhbGxvY2F0ZWQKKwkJICogYmxvY2tzIGFyZSBuZXZlciBy ZXBvcnRlZCBhcyBsZWFrcy4gVGhpcyBpcyBiZWNhdXNlIG1hbnkKKwkJICogb2YgdGhlc2UgYmxv Y2tzIGFyZSBvbmx5IHJlZmVycmVkIHZpYSB0aGUgcGh5c2ljYWwKKwkJICogYWRkcmVzcyB3aGlj aCBpcyBub3QgbG9va2VkIHVwIGJ5IGttZW1sZWFrLgogCQkgKi8KIAkJa21lbWxlYWtfYWxsb2Nf cGh5cyhmb3VuZCwgc2l6ZSwgMCwgMCk7Ci0JCXJldHVybiBmb3VuZDsKLQl9Ci0JcmV0dXJuIDA7 CisKKwlyZXR1cm4gZm91bmQ7CiB9CiAKIHBoeXNfYWRkcl90IF9faW5pdCBtZW1ibG9ja19waHlz X2FsbG9jX3JhbmdlKHBoeXNfYWRkcl90IHNpemUsCkBAIC0xMzQzLDM1ICsxMzk3LDEzIEBAIHBo eXNfYWRkcl90IF9faW5pdCBtZW1ibG9ja19waHlzX2FsbG9jX3JhbmdlKHBoeXNfYWRkcl90IHNp emUsCiAJCQkJCSAgICAgcGh5c19hZGRyX3Qgc3RhcnQsCiAJCQkJCSAgICAgcGh5c19hZGRyX3Qg ZW5kKQogewotCXJldHVybiBtZW1ibG9ja19hbGxvY19yYW5nZV9uaWQoc2l6ZSwgYWxpZ24sIHN0 YXJ0LCBlbmQsIE5VTUFfTk9fTk9ERSwKLQkJCQkJTUVNQkxPQ0tfTk9ORSk7Ci19Ci0KLXBoeXNf YWRkcl90IF9faW5pdCBtZW1ibG9ja19waHlzX2FsbG9jX25pZChwaHlzX2FkZHJfdCBzaXplLCBw aHlzX2FkZHJfdCBhbGlnbiwgaW50IG5pZCkKLXsKLQllbnVtIG1lbWJsb2NrX2ZsYWdzIGZsYWdz ID0gY2hvb3NlX21lbWJsb2NrX2ZsYWdzKCk7Ci0JcGh5c19hZGRyX3QgcmV0OwotCi1hZ2FpbjoK LQlyZXQgPSBtZW1ibG9ja19hbGxvY19yYW5nZV9uaWQoc2l6ZSwgYWxpZ24sIDAsCi0JCQkJICAg ICAgIE1FTUJMT0NLX0FMTE9DX0FDQ0VTU0lCTEUsIG5pZCwgZmxhZ3MpOwotCi0JaWYgKCFyZXQg JiYgKGZsYWdzICYgTUVNQkxPQ0tfTUlSUk9SKSkgewotCQlmbGFncyAmPSB+TUVNQkxPQ0tfTUlS Uk9SOwotCQlnb3RvIGFnYWluOwotCX0KLQlyZXR1cm4gcmV0OworCXJldHVybiBtZW1ibG9ja19h bGxvY19yYW5nZV9uaWQoc2l6ZSwgYWxpZ24sIHN0YXJ0LCBlbmQsIE5VTUFfTk9fTk9ERSk7CiB9 CiAKIHBoeXNfYWRkcl90IF9faW5pdCBtZW1ibG9ja19waHlzX2FsbG9jX3RyeV9uaWQocGh5c19h ZGRyX3Qgc2l6ZSwgcGh5c19hZGRyX3QgYWxpZ24sIGludCBuaWQpCiB7Ci0JcGh5c19hZGRyX3Qg cmVzID0gbWVtYmxvY2tfcGh5c19hbGxvY19uaWQoc2l6ZSwgYWxpZ24sIG5pZCk7Ci0KLQlpZiAo cmVzKQotCQlyZXR1cm4gcmVzOwotCXJldHVybiBtZW1ibG9ja19hbGxvY19yYW5nZV9uaWQoc2l6 ZSwgYWxpZ24sIDAsCi0JCQkJCU1FTUJMT0NLX0FMTE9DX0FDQ0VTU0lCTEUsCi0JCQkJCU5VTUFf Tk9fTk9ERSwgTUVNQkxPQ0tfTk9ORSk7CisJcmV0dXJuIG1lbWJsb2NrX2FsbG9jX3JhbmdlX25p ZChzaXplLCBhbGlnbiwgMCwgbmlkLAorCQkJCQlNRU1CTE9DS19BTExPQ19BQ0NFU1NJQkxFKTsK IH0KIAogLyoqCkBAIC0xMzgyLDE5ICsxNDE0LDEzIEBAIHBoeXNfYWRkcl90IF9faW5pdCBtZW1i bG9ja19waHlzX2FsbG9jX3RyeV9uaWQocGh5c19hZGRyX3Qgc2l6ZSwgcGh5c19hZGRyX3QgYWxp CiAgKiBAbWF4X2FkZHI6IHRoZSB1cHBlciBib3VuZCBvZiB0aGUgbWVtb3J5IHJlZ2lvbiB0byBh bGxvY2F0ZSAocGh5cyBhZGRyZXNzKQogICogQG5pZDogbmlkIG9mIHRoZSBmcmVlIGFyZWEgdG8g ZmluZCwgJU5VTUFfTk9fTk9ERSBmb3IgYW55IG5vZGUKICAqCi0gKiBUaGUgQG1pbl9hZGRyIGxp bWl0IGlzIGRyb3BwZWQgaWYgaXQgY2FuIG5vdCBiZSBzYXRpc2ZpZWQgYW5kIHRoZSBhbGxvY2F0 aW9uCi0gKiB3aWxsIGZhbGwgYmFjayB0byBtZW1vcnkgYmVsb3cgQG1pbl9hZGRyLiBBbHNvLCBh bGxvY2F0aW9uIG1heSBmYWxsIGJhY2sKLSAqIHRvIGFueSBub2RlIGluIHRoZSBzeXN0ZW0gaWYg dGhlIHNwZWNpZmllZCBub2RlIGNhbiBub3QKLSAqIGhvbGQgdGhlIHJlcXVlc3RlZCBtZW1vcnku Ci0gKgotICogVGhlIGFsbG9jYXRpb24gaXMgcGVyZm9ybWVkIGZyb20gbWVtb3J5IHJlZ2lvbiBs aW1pdGVkIGJ5Ci0gKiBtZW1ibG9jay5jdXJyZW50X2xpbWl0IGlmIEBtYXhfYWRkciA9PSAlTUVN QkxPQ0tfQUxMT0NfQUNDRVNTSUJMRS4KLSAqCi0gKiBUaGUgcGh5cyBhZGRyZXNzIG9mIGFsbG9j YXRlZCBib290IG1lbW9yeSBibG9jayBpcyBjb252ZXJ0ZWQgdG8gdmlydHVhbCBhbmQKLSAqIGFs bG9jYXRlZCBtZW1vcnkgaXMgcmVzZXQgdG8gMC4KKyAqIEFsbG9jYXRlcyBtZW1vcnkgYmxvY2sg dXNpbmcgbWVtYmxvY2tfYWxsb2NfcmFuZ2VfbmlkKCkgYW5kCisgKiBjb252ZXJ0cyB0aGUgcmV0 dXJuZWQgcGh5c2ljYWwgYWRkcmVzcyB0byB2aXJ0dWFsLgogICoKLSAqIEluIGFkZGl0aW9uLCBm dW5jdGlvbiBzZXRzIHRoZSBtaW5fY291bnQgdG8gMCB1c2luZyBrbWVtbGVha19hbGxvYyBmb3IK LSAqIGFsbG9jYXRlZCBib290IG1lbW9yeSBibG9jaywgc28gdGhhdCBpdCBpcyBuZXZlciByZXBv cnRlZCBhcyBsZWFrcy4KKyAqIFRoZSBAbWluX2FkZHIgbGltaXQgaXMgZHJvcHBlZCBpZiBpdCBj YW4gbm90IGJlIHNhdGlzZmllZCBhbmQgdGhlIGFsbG9jYXRpb24KKyAqIHdpbGwgZmFsbCBiYWNr IHRvIG1lbW9yeSBiZWxvdyBAbWluX2FkZHIuIE90aGVyIGNvbnN0cmFpbnRzLCBzdWNoCisgKiBh cyBub2RlIGFuZCBtaXJyb3JlZCBtZW1vcnkgd2lsbCBiZSBoYW5kbGVkIGFnYWluIGluCisgKiBt ZW1ibG9ja19hbGxvY19yYW5nZV9uaWQoKS4KICAqCiAgKiBSZXR1cm46CiAgKiBWaXJ0dWFsIGFk ZHJlc3Mgb2YgYWxsb2NhdGVkIG1lbW9yeSBibG9jayBvbiBzdWNjZXNzLCBOVUxMIG9uIGZhaWx1 cmUuCkBAIC0xNDA1LDExICsxNDMxLDYgQEAgc3RhdGljIHZvaWQgKiBfX2luaXQgbWVtYmxvY2tf YWxsb2NfaW50ZXJuYWwoCiAJCQkJaW50IG5pZCkKIHsKIAlwaHlzX2FkZHJfdCBhbGxvYzsKLQl2 b2lkICpwdHI7Ci0JZW51bSBtZW1ibG9ja19mbGFncyBmbGFncyA9IGNob29zZV9tZW1ibG9ja19m bGFncygpOwotCi0JaWYgKFdBUk5fT05DRShuaWQgPT0gTUFYX05VTU5PREVTLCAiVXNhZ2Ugb2Yg TUFYX05VTU5PREVTIGlzIGRlcHJlY2F0ZWQuIFVzZSBOVU1BX05PX05PREUgaW5zdGVhZFxuIikp Ci0JCW5pZCA9IE5VTUFfTk9fTk9ERTsKIAogCS8qCiAJICogRGV0ZWN0IGFueSBhY2NpZGVudGFs IHVzZSBvZiB0aGVzZSBBUElzIGFmdGVyIHNsYWIgaXMgcmVhZHksIGFzIGF0CkBAIC0xNDE5LDU0 ICsxNDQwLDE2IEBAIHN0YXRpYyB2b2lkICogX19pbml0IG1lbWJsb2NrX2FsbG9jX2ludGVybmFs KAogCWlmIChXQVJOX09OX09OQ0Uoc2xhYl9pc19hdmFpbGFibGUoKSkpCiAJCXJldHVybiBremFs bG9jX25vZGUoc2l6ZSwgR0ZQX05PV0FJVCwgbmlkKTsKIAotCWlmICghYWxpZ24pIHsKLQkJZHVt cF9zdGFjaygpOwotCQlhbGlnbiA9IFNNUF9DQUNIRV9CWVRFUzsKLQl9Ci0KLQlpZiAobWF4X2Fk ZHIgPiBtZW1ibG9jay5jdXJyZW50X2xpbWl0KQotCQltYXhfYWRkciA9IG1lbWJsb2NrLmN1cnJl bnRfbGltaXQ7Ci1hZ2FpbjoKLQlhbGxvYyA9IG1lbWJsb2NrX2ZpbmRfaW5fcmFuZ2Vfbm9kZShz aXplLCBhbGlnbiwgbWluX2FkZHIsIG1heF9hZGRyLAotCQkJCQkgICAgbmlkLCBmbGFncyk7Ci0J aWYgKGFsbG9jICYmICFtZW1ibG9ja19yZXNlcnZlKGFsbG9jLCBzaXplKSkKLQkJZ290byBkb25l OwotCi0JaWYgKG5pZCAhPSBOVU1BX05PX05PREUpIHsKLQkJYWxsb2MgPSBtZW1ibG9ja19maW5k X2luX3JhbmdlX25vZGUoc2l6ZSwgYWxpZ24sIG1pbl9hZGRyLAotCQkJCQkJICAgIG1heF9hZGRy LCBOVU1BX05PX05PREUsCi0JCQkJCQkgICAgZmxhZ3MpOwotCQlpZiAoYWxsb2MgJiYgIW1lbWJs b2NrX3Jlc2VydmUoYWxsb2MsIHNpemUpKQotCQkJZ290byBkb25lOwotCX0KLQotCWlmIChtaW5f YWRkcikgewotCQltaW5fYWRkciA9IDA7Ci0JCWdvdG8gYWdhaW47Ci0JfQotCi0JaWYgKGZsYWdz ICYgTUVNQkxPQ0tfTUlSUk9SKSB7Ci0JCWZsYWdzICY9IH5NRU1CTE9DS19NSVJST1I7Ci0JCXBy X3dhcm4oIkNvdWxkIG5vdCBhbGxvY2F0ZSAlcGFwIGJ5dGVzIG9mIG1pcnJvcmVkIG1lbW9yeVxu IiwKLQkJCSZzaXplKTsKLQkJZ290byBhZ2FpbjsKLQl9CisJYWxsb2MgPSBtZW1ibG9ja19hbGxv Y19yYW5nZV9uaWQoc2l6ZSwgYWxpZ24sIG1pbl9hZGRyLCBtYXhfYWRkciwgbmlkKTsKIAotCXJl dHVybiBOVUxMOwotZG9uZToKLQlwdHIgPSBwaHlzX3RvX3ZpcnQoYWxsb2MpOworCS8qIHJldHJ5 IGFsbG9jYXRpb24gd2l0aG91dCBsb3dlciBsaW1pdCAqLworCWlmICghYWxsb2MgJiYgbWluX2Fk ZHIpCisJCWFsbG9jID0gbWVtYmxvY2tfYWxsb2NfcmFuZ2VfbmlkKHNpemUsIGFsaWduLCAwLCBt YXhfYWRkciwgbmlkKTsKIAotCS8qIFNraXAga21lbWxlYWsgZm9yIGthc2FuX2luaXQoKSBkdWUg dG8gaGlnaCB2b2x1bWUuICovCi0JaWYgKG1heF9hZGRyICE9IE1FTUJMT0NLX0FMTE9DX0tBU0FO KQotCQkvKgotCQkgKiBUaGUgbWluX2NvdW50IGlzIHNldCB0byAwIHNvIHRoYXQgYm9vdG1lbSBh bGxvY2F0ZWQKLQkJICogYmxvY2tzIGFyZSBuZXZlciByZXBvcnRlZCBhcyBsZWFrcy4gVGhpcyBp cyBiZWNhdXNlIG1hbnkKLQkJICogb2YgdGhlc2UgYmxvY2tzIGFyZSBvbmx5IHJlZmVycmVkIHZp YSB0aGUgcGh5c2ljYWwKLQkJICogYWRkcmVzcyB3aGljaCBpcyBub3QgbG9va2VkIHVwIGJ5IGtt ZW1sZWFrLgotCQkgKi8KLQkJa21lbWxlYWtfYWxsb2MocHRyLCBzaXplLCAwLCAwKTsKKwlpZiAo IWFsbG9jKQorCQlyZXR1cm4gTlVMTDsKIAotCXJldHVybiBwdHI7CisJcmV0dXJuIHBoeXNfdG9f dmlydChhbGxvYyk7CiB9CiAKIC8qKgotLSAKMi43LjQKCgpfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZl bEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxt YW4vbGlzdGluZm8veGVuLWRldmVs