From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id BDCE5C7EE2D for ; Fri, 12 May 2023 14:58:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=P6OoKPtQz1UrD8EFihzCIMPldlQSwjM2u8jBR/vAWIw=; b=m91KZ4lvopBC0s 5Bds22F/Q8AOZng5TWk2HkVBVDbnbe3V8qqfJn9VRhnaiAnk/iX7krSH1vZLfEgFRg+v5ZD4zBNoo w/t5Ou9uM4vISw7+F1eTtBsR+O08AwznvGxnX8IRMTswgfL4SjZDPl2UWptaZkDsgNM8PBpYvHUiV W6fOIhKpwUT6V+t5s+4lk5oKi4N0O5aaDYYBM1PHW9wWbt4i856ExewFEJEtqVGlBMJyG5EliEcyH tvepc6T9tHV4ur2mmddp1EXIUfVbFmqDYdHDUFKTPvFXV96BiL6LLoritn53OVOE7TU7hiMMcW9CH 7nxLCdTFszaX1lN4OzZQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1pxUDl-00CG09-0i; Fri, 12 May 2023 14:58:13 +0000 Received: from dfw.source.kernel.org ([2604:1380:4641:c500::1]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1pxUDi-00CFxe-0T for linux-riscv@lists.infradead.org; Fri, 12 May 2023 14:58:11 +0000 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 7BE6C6133B; Fri, 12 May 2023 14:58:09 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 414DCC433EF; Fri, 12 May 2023 14:58:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1683903488; bh=2Hg7N6ebdPoIJZTj/Z2XT0CsZmR9YcBL0bRVObnrrco=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Os5JiE+94pc+yBVvOpqjMSDiGSPKKDvcZURYVV7tm3zq/Llfx7r+svdbETNcWHa9V Li9vVWnnYPg4WmY1beATZukfwTwxRLiQJpQmEs/GjF49Mf4C7W1sm0VTzGAs3LvJ4V fiW7zPjP32r2q8vcrAiansu0eVnkhKadKCYOX+a3UFnS4f2mBOnAYzv6slNn4OKi0T BBktSF+bxWWWpHNDAtW4wOAZ8gQ/LY6hbDNeK7wW+z40xpd+VuFNYevwb5gOiYtXJB 0A/zrgC1iRCSbGLV+DiScyv8mJHKg3G9Tak/03DMMiegzuW6pG8j5kuNpkGbWaRLoJ nuEOcUj9yW5Aw== From: =?UTF-8?q?Bj=C3=B6rn=20T=C3=B6pel?= To: Paul Walmsley , Palmer Dabbelt , Albert Ou , linux-riscv@lists.infradead.org Cc: =?UTF-8?q?Bj=C3=B6rn=20T=C3=B6pel?= , linux-kernel@vger.kernel.org, linux-mm@kvack.org, David Hildenbrand , Oscar Salvador , virtualization@lists.linux-foundation.org, linux@rivosinc.com, Alexandre Ghiti Subject: [PATCH 4/7] riscv: mm: Add memory hot add/remove support Date: Fri, 12 May 2023 16:57:34 +0200 Message-Id: <20230512145737.985671-5-bjorn@kernel.org> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230512145737.985671-1-bjorn@kernel.org> References: <20230512145737.985671-1-bjorn@kernel.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230512_075810_268732_938D9CDF X-CRM114-Status: GOOD ( 17.88 ) X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org RnJvbTogQmrDtnJuIFTDtnBlbCA8Ympvcm5Acml2b3NpbmMuY29tPgoKRnJvbSBhbiBhcmNoIHBl cnNwZWN0aXZlLCBhIGNvdXBsZSBvZiBjYWxsYmFja3MgbmVlZHMgdG8gYmUKaW1wbGVtZW50ZWQg dG8gc3VwcG9ydCBob3RwbHVnZ2luZzoKCmFyY2hfYWRkX21lbW9yeSgpIFRoaXMgY2FsbGJhY2sg aXMgcmVzcG9uc2libGUgZm9yIHVwZGF0aW5nIHRoZQpsaW5lYXIvZGlyZWN0IG1hcCwgYW5kIGNh bGwgaW50byB0aGUgbWVtb3J5IGhvdHBsdWdnaW5nIGdlbmVyaWMgY29kZQp2aWEgX19hZGRfcGFn ZXMoKS4KCmFyY2hfcmVtb3ZlX21lbW9yeSgpIEluIHRoaXMgY2FsbGJhY2sgdGhlIGxpbmVhci9k aXJlY3QgbWFwIGlzIHRvcmUKZG93bi4KCnZtZW1tYXBfZnJlZSgpIFRoZSBmdW5jdGlvbiB0ZWFy cyBkb3duIHRoZSB2bWVtbWFwIG1hcHBpbmdzIChpZgpDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVAg aXMgaW4tdXNlKSwgYW5kIGFsc28gZGVhbGxvY2F0ZXMgdGhlIGJhY2tpbmcKdm1lbW1hcCBwYWdl cy4gTm90ZSB0aGF0IGZvciBwZXJzaXN0ZW50IG1lbW9yeSwgYW4gYWx0ZXJuYXRpdmUKYWxsb2Nh dG9yIGZvciB0aGUgYmFja2luZyBwYWdlcyBjYW4gYmUgdXNlZCAtLSB0aGUgdm1lbV9hbHRtYXAu IFRoaXMKbWVhbnMgdGhhdCB3aGVuIHRoZSBiYWNraW5nIHBhZ2VzIGFyZSBjbGVhcmVkLCBleHRy YSBjYXJlIGlzIG5lZWRlZCBzbwp0aGF0IHRoZSBjb3JyZWN0IGRlYWxsb2NhdGlvbiBtZXRob2Qg aXMgdXNlZC4gTm90ZSB0aGF0IFJJU0MtVgpwb3B1bGF0ZXMgdGhlIHZtZW1tYXAgdXNpbmcgdm1l bW1hcF9wb3B1bGF0ZV9iYXNlcGFnZXMoKSwgc28gY3VycmVudGx5Cm5vIGh1Z2VwYWdlcyBhcmUg dXNlZCBmb3IgdGhlIGJhY2tpbmcgc3RvcmUuCgpUaGUgcGFnZSB0YWJsZSB1bm1hcC90ZWFyZG93 biBmdW5jdGlvbnMgYXJlIGhlYXZpbHkgYmFzZWQgKGNvcGllZCEpCmZyb20gdGhlIHg4NiB0cmVl LiBUaGUgc2FtZSByZW1vdmVfcGdkX21hcHBpbmcoKSBpcyB1c2VkIGluIGJvdGgKdm1lbW1hcF9m cmVlKCkgYW5kIGFyY2hfcmVtb3ZlX21lbW9yeSgpLCBidXQgaW4gdGhlIGxhdHRlciBmdW5jdGlv bgp0aGUgYmFja2luZyBwYWdlcyBhcmUgbm90IHJlbW92ZWQuCgpTaWduZWQtb2ZmLWJ5OiBCasO2 cm4gVMO2cGVsIDxiam9ybkByaXZvc2luYy5jb20+Ci0tLQogYXJjaC9yaXNjdi9tbS9pbml0LmMg fCAyMzMgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogMSBmaWxl IGNoYW5nZWQsIDIzMyBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9tbS9p bml0LmMgYi9hcmNoL3Jpc2N2L21tL2luaXQuYwppbmRleCBhZWE4Y2NiM2Y0YWUuLmE0Njg3MDhk MWUxYyAxMDA2NDQKLS0tIGEvYXJjaC9yaXNjdi9tbS9pbml0LmMKKysrIGIvYXJjaC9yaXNjdi9t bS9pbml0LmMKQEAgLTE0NDQsMyArMTQ0NCwyMzYgQEAgaW50IF9fbWVtaW5pdCB2bWVtbWFwX3Bv cHVsYXRlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLCBpbnQgbm9kZSwK IAlyZXR1cm4gdm1lbW1hcF9wb3B1bGF0ZV9iYXNlcGFnZXMoc3RhcnQsIGVuZCwgbm9kZSwgTlVM TCk7CiB9CiAjZW5kaWYKKworI2lmZGVmIENPTkZJR19NRU1PUllfSE9UUExVRworc3RhdGljIHZv aWQgX19tZW1pbml0IGZyZWVfcHRlX3RhYmxlKHB0ZV90ICpwdGVfc3RhcnQsIHBtZF90ICpwbWQp Cit7CisJcHRlX3QgKnB0ZTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBQVFJTX1BFUl9Q VEU7IGkrKykgeworCQlwdGUgPSBwdGVfc3RhcnQgKyBpOworCQlpZiAoIXB0ZV9ub25lKCpwdGUp KQorCQkJcmV0dXJuOworCX0KKworCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpcGFnZV9hZGRy ZXNzKHBtZF9wYWdlKCpwbWQpKSwgMCk7CisJcG1kX2NsZWFyKHBtZCk7Cit9CisKK3N0YXRpYyB2 b2lkIF9fbWVtaW5pdCBmcmVlX3BtZF90YWJsZShwbWRfdCAqcG1kX3N0YXJ0LCBwdWRfdCAqcHVk KQoreworCXBtZF90ICpwbWQ7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgUFRSU19QRVJf UE1EOyBpKyspIHsKKwkJcG1kID0gcG1kX3N0YXJ0ICsgaTsKKwkJaWYgKCFwbWRfbm9uZSgqcG1k KSkKKwkJCXJldHVybjsKKwl9CisKKwlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKXBhZ2VfYWRk cmVzcyhwdWRfcGFnZSgqcHVkKSksIDApOworCXB1ZF9jbGVhcihwdWQpOworfQorCitzdGF0aWMg dm9pZCBfX21lbWluaXQgZnJlZV9wdWRfdGFibGUocHVkX3QgKnB1ZF9zdGFydCwgcDRkX3QgKnA0 ZCkKK3sKKwlwdWRfdCAqcHVkOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IFBUUlNfUEVS X1BVRDsgaSsrKSB7CisJCXB1ZCA9IHB1ZF9zdGFydCArIGk7CisJCWlmICghcHVkX25vbmUoKnB1 ZCkpCisJCQlyZXR1cm47CisJfQorCisJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZylwYWdlX2Fk ZHJlc3MocDRkX3BhZ2UoKnA0ZCkpLCAwKTsKKwlwNGRfY2xlYXIocDRkKTsKK30KKworc3RhdGlj IHZvaWQgX19tZW1pbml0IGZyZWVfdm1lbW1hcF9zdG9yYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBz aXplX3Qgc2l6ZSwKKwkJCQkJICAgc3RydWN0IHZtZW1fYWx0bWFwICphbHRtYXApCit7CisJaWYg KGFsdG1hcCkKKwkJdm1lbV9hbHRtYXBfZnJlZShhbHRtYXAsIHNpemUgPj4gUEFHRV9TSElGVCk7 CisJZWxzZQorCQlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKXBhZ2VfYWRkcmVzcyhwYWdlKSwg Z2V0X29yZGVyKHNpemUpKTsKK30KKworc3RhdGljIHZvaWQgX19tZW1pbml0IHJlbW92ZV9wdGVf bWFwcGluZyhwdGVfdCAqcHRlX2Jhc2UsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9u ZyBlbmQsCisJCQkJCSBib29sIGlzX3ZtZW1tYXAsIHN0cnVjdCB2bWVtX2FsdG1hcCAqYWx0bWFw KQoreworCXVuc2lnbmVkIGxvbmcgbmV4dDsKKwlwdGVfdCAqcHRlcCwgcHRlOworCisJZm9yICg7 IGFkZHIgPCBlbmQ7IGFkZHIgPSBuZXh0KSB7CisJCW5leHQgPSAoYWRkciArIFBBR0VfU0laRSkg JiBQQUdFX01BU0s7CisJCWlmIChuZXh0ID4gZW5kKQorCQkJbmV4dCA9IGVuZDsKKworCQlwdGVw ID0gcHRlX2Jhc2UgKyBwdGVfaW5kZXgoYWRkcik7CisJCXB0ZSA9IFJFQURfT05DRSgqcHRlcCk7 CisKKwkJaWYgKCFwdGVfcHJlc2VudCgqcHRlcCkpCisJCQljb250aW51ZTsKKworCQlwdGVfY2xl YXIoJmluaXRfbW0sIGFkZHIsIHB0ZXApOworCQlpZiAoaXNfdm1lbW1hcCkKKwkJCWZyZWVfdm1l bW1hcF9zdG9yYWdlKHB0ZV9wYWdlKHB0ZSksIFBBR0VfU0laRSwgYWx0bWFwKTsKKwl9Cit9CisK K3N0YXRpYyB2b2lkIF9fbWVtaW5pdCByZW1vdmVfcG1kX21hcHBpbmcocG1kX3QgKnBtZF9iYXNl LCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAorCQkJCQkgYm9vbCBpc192 bWVtbWFwLCBzdHJ1Y3Qgdm1lbV9hbHRtYXAgKmFsdG1hcCkKK3sKKwl1bnNpZ25lZCBsb25nIG5l eHQ7CisJcHRlX3QgKnB0ZV9iYXNlOworCXBtZF90ICpwbWRwLCBwbWQ7CisKKwlmb3IgKDsgYWRk ciA8IGVuZDsgYWRkciA9IG5leHQpIHsKKwkJbmV4dCA9IHBtZF9hZGRyX2VuZChhZGRyLCBlbmQp OworCQlwbWRwID0gcG1kX2Jhc2UgKyBwbWRfaW5kZXgoYWRkcik7CisJCXBtZCA9IFJFQURfT05D RSgqcG1kcCk7CisKKwkJaWYgKCFwbWRfcHJlc2VudChwbWQpKQorCQkJY29udGludWU7CisKKwkJ aWYgKHBtZF9sZWFmKHBtZCkpIHsKKwkJCXBtZF9jbGVhcihwbWRwKTsKKwkJCWlmIChpc192bWVt bWFwKQorCQkJCWZyZWVfdm1lbW1hcF9zdG9yYWdlKHBtZF9wYWdlKHBtZCksIFBNRF9TSVpFLCBh bHRtYXApOworCQkJY29udGludWU7CisJCX0KKworCQlwdGVfYmFzZSA9IChwdGVfdCAqKXBtZF9w YWdlX3ZhZGRyKCpwbWRwKTsKKwkJcmVtb3ZlX3B0ZV9tYXBwaW5nKHB0ZV9iYXNlLCBhZGRyLCBu ZXh0LCBpc192bWVtbWFwLCBhbHRtYXApOworCQlmcmVlX3B0ZV90YWJsZShwdGVfYmFzZSwgcG1k cCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBfX21lbWluaXQgcmVtb3ZlX3B1ZF9tYXBwaW5nKHB1 ZF90ICpwdWRfYmFzZSwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwKKwkJ CQkJIGJvb2wgaXNfdm1lbW1hcCwgc3RydWN0IHZtZW1fYWx0bWFwICphbHRtYXApCit7CisJdW5z aWduZWQgbG9uZyBuZXh0OworCXB1ZF90ICpwdWRwLCBwdWQ7CisJcG1kX3QgKnBtZF9iYXNlOwor CisJZm9yICg7IGFkZHIgPCBlbmQ7IGFkZHIgPSBuZXh0KSB7CisJCW5leHQgPSBwdWRfYWRkcl9l bmQoYWRkciwgZW5kKTsKKwkJcHVkcCA9IHB1ZF9iYXNlICsgcHVkX2luZGV4KGFkZHIpOworCQlw dWQgPSBSRUFEX09OQ0UoKnB1ZHApOworCisJCWlmICghcHVkX3ByZXNlbnQocHVkKSkKKwkJCWNv bnRpbnVlOworCisJCWlmIChwdWRfbGVhZihwdWQpKSB7CisJCQlpZiAocGd0YWJsZV9sNF9lbmFi bGVkKSB7CisJCQkJcHVkX2NsZWFyKHB1ZHApOworCQkJCWlmIChpc192bWVtbWFwKQorCQkJCQlm cmVlX3ZtZW1tYXBfc3RvcmFnZShwdWRfcGFnZShwdWQpLCBQVURfU0laRSwgYWx0bWFwKTsKKwkJ CX0KKwkJCWNvbnRpbnVlOworCQl9CisKKwkJcG1kX2Jhc2UgPSBwbWRfb2Zmc2V0KHB1ZHAsIDAp OworCQlyZW1vdmVfcG1kX21hcHBpbmcocG1kX2Jhc2UsIGFkZHIsIG5leHQsIGlzX3ZtZW1tYXAs IGFsdG1hcCk7CisKKwkJaWYgKHBndGFibGVfbDRfZW5hYmxlZCkKKwkJCWZyZWVfcG1kX3RhYmxl KHBtZF9iYXNlLCBwdWRwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIF9fbWVtaW5pdCByZW1vdmVf cDRkX21hcHBpbmcocDRkX3QgKnA0ZF9iYXNlLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVk IGxvbmcgZW5kLAorCQkJCQkgYm9vbCBpc192bWVtbWFwLCBzdHJ1Y3Qgdm1lbV9hbHRtYXAgKmFs dG1hcCkKK3sKKwl1bnNpZ25lZCBsb25nIG5leHQ7CisJcDRkX3QgKnA0ZHAsIHA0ZDsKKwlwdWRf dCAqcHVkX2Jhc2U7CisKKwlmb3IgKDsgYWRkciA8IGVuZDsgYWRkciA9IG5leHQpIHsKKwkJbmV4 dCA9IHA0ZF9hZGRyX2VuZChhZGRyLCBlbmQpOworCQlwNGRwID0gcDRkX2Jhc2UgKyBwNGRfaW5k ZXgoYWRkcik7CisJCXA0ZCA9IFJFQURfT05DRSgqcDRkcCk7CisKKwkJaWYgKCFwNGRfcHJlc2Vu dChwNGQpKQorCQkJY29udGludWU7CisKKwkJaWYgKHA0ZF9sZWFmKHA0ZCkpIHsKKwkJCWlmIChw Z3RhYmxlX2w1X2VuYWJsZWQpIHsKKwkJCQlwNGRfY2xlYXIocDRkcCk7CisJCQkJaWYgKGlzX3Zt ZW1tYXApCisJCQkJCWZyZWVfdm1lbW1hcF9zdG9yYWdlKHA0ZF9wYWdlKHA0ZCksIFA0RF9TSVpF LCBhbHRtYXApOworCQkJfQorCQkJY29udGludWU7CisJCX0KKworCQlwdWRfYmFzZSA9IHB1ZF9v ZmZzZXQocDRkcCwgMCk7CisJCXJlbW92ZV9wdWRfbWFwcGluZyhwdWRfYmFzZSwgYWRkciwgbmV4 dCwgaXNfdm1lbW1hcCwgYWx0bWFwKTsKKworCQlpZiAocGd0YWJsZV9sNV9lbmFibGVkKQorCQkJ ZnJlZV9wdWRfdGFibGUocHVkX2Jhc2UsIHA0ZHApOworCX0KK30KKworc3RhdGljIHZvaWQgX19t ZW1pbml0IHJlbW92ZV9wZ2RfbWFwcGluZyh1bnNpZ25lZCBsb25nIHZhLCB1bnNpZ25lZCBsb25n IGVuZCwgYm9vbCBpc192bWVtbWFwLAorCQkJCQkgc3RydWN0IHZtZW1fYWx0bWFwICphbHRtYXAp Cit7CisJdW5zaWduZWQgbG9uZyBhZGRyLCBuZXh0OworCXA0ZF90ICpwNGRfYmFzZTsKKwlwZ2Rf dCAqcGdkOworCisJZm9yIChhZGRyID0gdmE7IGFkZHIgPCBlbmQ7IGFkZHIgPSBuZXh0KSB7CisJ CW5leHQgPSBwZ2RfYWRkcl9lbmQoYWRkciwgZW5kKTsKKwkJcGdkID0gcGdkX29mZnNldF9rKGFk ZHIpOworCisJCWlmICghcGdkX3ByZXNlbnQoKnBnZCkpCisJCQljb250aW51ZTsKKworCQlpZiAo cGdkX2xlYWYoKnBnZCkpCisJCQljb250aW51ZTsKKworCQlwNGRfYmFzZSA9IHA0ZF9vZmZzZXQo cGdkLCAwKTsKKwkJcmVtb3ZlX3A0ZF9tYXBwaW5nKHA0ZF9iYXNlLCBhZGRyLCBuZXh0LCBpc192 bWVtbWFwLCBhbHRtYXApOworCX0KKworCWZsdXNoX3RsYl9hbGwoKTsKK30KKworc3RhdGljIHZv aWQgX19tZW1pbml0IHJlbW92ZV9saW5lYXJfbWFwcGluZyhwaHlzX2FkZHJfdCBzdGFydCwgdTY0 IHNpemUpCit7CisJdW5zaWduZWQgbG9uZyB2YSA9ICh1bnNpZ25lZCBsb25nKV9fdmEoc3RhcnQp OworCXVuc2lnbmVkIGxvbmcgZW5kID0gKHVuc2lnbmVkIGxvbmcpX192YShzdGFydCArIHNpemUp OworCisJcmVtb3ZlX3BnZF9tYXBwaW5nKHZhLCBlbmQsIGZhbHNlLCBOVUxMKTsKK30KKworaW50 IF9fcmVmIGFyY2hfYWRkX21lbW9yeShpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLCBzdHJ1 Y3QgbWhwX3BhcmFtcyAqcGFyYW1zKQoreworCWludCByZXQ7CisKKwljcmVhdGVfbGluZWFyX21h cHBpbmdfcmFuZ2Uoc3RhcnQsIHN0YXJ0ICsgc2l6ZSwgcGFyYW1zKTsKKwlmbHVzaF90bGJfYWxs KCk7CisJcmV0ID0gX19hZGRfcGFnZXMobmlkLCBzdGFydCA+PiBQQUdFX1NISUZULCBzaXplID4+ IFBBR0VfU0hJRlQsIHBhcmFtcyk7CisJaWYgKHJldCkgeworCQlyZW1vdmVfbGluZWFyX21hcHBp bmcoc3RhcnQsIHNpemUpOworCQlyZXR1cm4gcmV0OworCX0KKworCW1heF9wZm4gPSBQRk5fVVAo c3RhcnQgKyBzaXplKTsKKwltYXhfbG93X3BmbiA9IG1heF9wZm47CisJcmV0dXJuIDA7Cit9CisK K3ZvaWQgX19yZWYgYXJjaF9yZW1vdmVfbWVtb3J5KHU2NCBzdGFydCwgdTY0IHNpemUsIHN0cnVj dCB2bWVtX2FsdG1hcCAqYWx0bWFwKQoreworCV9fcmVtb3ZlX3BhZ2VzKHN0YXJ0ID4+IFBBR0Vf U0hJRlQsIHNpemUgPj4gUEFHRV9TSElGVCwgYWx0bWFwKTsKKwlyZW1vdmVfbGluZWFyX21hcHBp bmcoc3RhcnQsIHNpemUpOworfQorCisjaWZkZWYgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQCit2 b2lkIF9fcmVmIHZtZW1tYXBfZnJlZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25n IGVuZCwgc3RydWN0IHZtZW1fYWx0bWFwICphbHRtYXApCit7CisJcmVtb3ZlX3BnZF9tYXBwaW5n KHN0YXJ0LCBlbmQsIHRydWUsIGFsdG1hcCk7Cit9CisjZW5kaWYgLyogQ09ORklHX1NQQVJTRU1F TV9WTUVNTUFQICovCisjZW5kaWYgLyogQ09ORklHX01FTU9SWV9IT1RQTFVHICovCi0tIAoyLjM5 LjIKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51 eC1yaXNjdiBtYWlsaW5nIGxpc3QKbGludXgtcmlzY3ZAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRw Oi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LXJpc2N2Cg==