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 kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 062BDC48BF6 for ; Mon, 4 Mar 2024 01:54:57 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 45CF46B009F; Sun, 3 Mar 2024 20:54:57 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 40CC26B00A0; Sun, 3 Mar 2024 20:54:57 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 25F626B00A1; Sun, 3 Mar 2024 20:54:57 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id 0C8B46B009F for ; Sun, 3 Mar 2024 20:54:57 -0500 (EST) Received: from smtpin18.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id B1AD0A08B3 for ; Mon, 4 Mar 2024 01:54:56 +0000 (UTC) X-FDA: 81857688192.18.C23DECC Received: from outboundhk.mxmail.xiaomi.com (outboundhk.mxmail.xiaomi.com [207.226.244.122]) by imf02.hostedemail.com (Postfix) with ESMTP id 266698000D for ; Mon, 4 Mar 2024 01:54:45 +0000 (UTC) Authentication-Results: imf02.hostedemail.com; dkim=none; dmarc=pass (policy=quarantine) header.from=xiaomi.com; spf=pass (imf02.hostedemail.com: domain of luowuyang@xiaomi.com designates 207.226.244.122 as permitted sender) smtp.mailfrom=luowuyang@xiaomi.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1709517294; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding:in-reply-to: references; bh=iZ3wmA7gFxX1QbIJvX6C2gXrMBxOppCb3e0JHvP+1+Q=; b=cZ5IoZgr/DH8rea6VJqbtiWRwADkAP/dISX/7OnvlrUvVLcv4+Xd0UiJAhpv4RZvW4NkpJ L/QmDVGkOKv1yIqx6fnBzZBPaFfJwjwZ1jwSj3RGmYb04Lkz2fzdg+Dca+ie6GAlsrYIGk 6tHUsmtqyd2XA0WA6m9bJfVCRu914Ds= ARC-Authentication-Results: i=1; imf02.hostedemail.com; dkim=none; dmarc=pass (policy=quarantine) header.from=xiaomi.com; spf=pass (imf02.hostedemail.com: domain of luowuyang@xiaomi.com designates 207.226.244.122 as permitted sender) smtp.mailfrom=luowuyang@xiaomi.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1709517294; a=rsa-sha256; cv=none; b=f1LrHrVNqn73fopgD2DvzEUN0sQY1hb2MiI5OZXoRVQkzIkneU4ESnj8bWb7Fs3ZNwFCDq ejTJGxV9SmnNn2CiQkcaJUgFkTfli63t+bjL0OKd1cm+m9fRBBpeQ4hxX1F4AhT6k96miy jDxcQrgtfACfoWX1WQ5CO0kxB8cvT1Y= X-IronPort-AV: E=Sophos;i="6.06,203,1705334400"; d="scan'208,217,223";a="105155632" From: =?gb2312?B?wt7O59H0?= To: "'aravinda.prasad@intel.com'" , "'damon@lists.linux.dev'" , "'linux-mm@kvack.org'" , "'sj@kernel.org'" , "'linux-kernel@vger.kernel.org'" CC: "'s2322819@ed.ac.uk'" , "'sandeep4.kumar@intel.com'" , "'ying.huang@intel.com'" , "'dave.hansen@intel.com'" , "'dan.j.williams@intel.com'" , "'sreenivas.subramoney@intel.com'" , "'antti.kervinen@intel.com'" , "'alexander.kanevskiy@intel.com'" , "'alan.nair@intel.com'" Subject: mm/DAMON: Profiling enhancements for DAMON Thread-Topic: mm/DAMON: Profiling enhancements for DAMON Thread-Index: Adpt1uhGqaRIgIsVQKCV/7quh6p6mQ== Date: Mon, 4 Mar 2024 01:54:40 +0000 Message-ID: <2f27b5bc596c451e84f65c3c32fc3aa7@xiaomi.com> Accept-Language: zh-CN, en-US Content-Language: zh-CN X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.237.88.13] Content-Type: multipart/alternative; boundary="_000_2f27b5bc596c451e84f65c3c32fc3aa7xiaomicom_" MIME-Version: 1.0 X-Rspam-User: X-Stat-Signature: n11onjzxgtpfse5dudct6pccmjygo4e4 X-Rspamd-Server: rspam07 X-Rspamd-Queue-Id: 266698000D X-HE-Tag: 1709517285-887842 X-HE-Meta: U2FsdGVkX1/YwyN5cXhpdb5V9kJ2a++IzIWpjy9BhoQj7fCGZ0hnMLM2ZxMO61/z4mrGIGaBdWUfTJ2TUz9NV5ZrKzAqRnC82cq+al8TXUalSdjOqWnvrbXrTW3e7rliUJIoe/dsgztw34MRJlYeqEqPIp8d00CJfsB3EmcJ3S2MBxmDsuFglI4gya6wvH4i6BGa2H1ADq7nIsAlIrLEry9FpxKkIqMgKCKJkftijlxd/kJyrjGlF7JMoAIeJVmoxGn334qhvJc4eNbzFKtFR0BS2HnGrBuh8kR32Ym7of7yFdVohqXctXz9mnmQjHbYMvfbClI3hYkaGvAS6rmYUYTeHSE2EZIM62mMEhbdYNdBRi/oMAKltc3NALfwMHA3iqW2NZSb0aR8zxFmKZO3It0zlj2ZV4+Y0jFQLbGJYmrp1o9ahdcwfjFBbIAOcPEYsXhvKfQHvXcjeL1lHn3PpRdsjLtTciO3ubueLzN5zT8OknazbWz5QXK7CVqdNFUzvGvO9W/L8/t1GxNJKOAySD8R2wc0VHNrMLYo6qNXYy+bLVzyp96/asA5aP9H8gaEJAZA1HDI6lrlGPPLUNnXXO1oCHjkDhxrvHocK+eBGMjqaVqPgSYdoFFnEI6JdGUf1VGCxnZGceUanCOr7JEfN/eMFK6gIaoEe0w9sTxGiCsfFFUdFvlaywm2qmrlgV/+aGy5vr/cNRADTlvc1HHNkr6L4dUDNsOGdjnJgf5pjFZtK4AY0hgfz8DQMH/vZg1eIQN1KUOn/ijH1M0D/CCjA2Rp4wbCEhrz8L4Vps4mJ9Ugm6dQuZfzjnfsPeFoEBhVc4PL7TsdCWaRNvnuWPk3yyngbekchuzn X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: --_000_2f27b5bc596c451e84f65c3c32fc3aa7xiaomicom_ Content-Type: text/plain; charset="gb2312" Content-Transfer-Encoding: base64 RnJvbSBtYm94cmRAeiBUaHUgSmFuICAxIDAwOjAwOjAwIDE5NzANClJldHVybi1QYXRoOiA8b3du ZXItbGludXgtbW1Aa3ZhY2sub3JnPg0KWC1TcGFtLUNoZWNrZXItVmVyc2lvbjogU3BhbUFzc2Fz c2luIDMuNC4wICgyMDE0LTAyLTA3KSBvbg0KICAgICAgICBhd3MtdXMtd2VzdC0yLWtvcmctbGtt bC0xLndlYi5jb2RlYXVyb3JhLm9yZw0KUmVjZWl2ZWQ6IGZyb20ga2FuZ2Eua3ZhY2sub3JnIChr YW5nYS5rdmFjay5vcmcgWzIwNS4yMzMuNTYuMTddKQ0KICAgICAgICBieSBzbXRwLmxvcmUua2Vy bmVsLm9yZyAoUG9zdGZpeCkgd2l0aCBFU01UUCBpZCA4RTQxNUM0MzMyRg0KICAgICAgICBmb3Ig PGxpbnV4LW1tQGFyY2hpdmVyLmtlcm5lbC5vcmc+OyBGcmksIDE1IERlYyAyMDIzIDA3OjQyOjMy ICswMDAwIChVVEMpDQpSZWNlaXZlZDogYnkga2FuZ2Eua3ZhY2sub3JnIChQb3N0Zml4KQ0KICAg ICAgICBpZCAyQUEwNDhEMDExQjsgRnJpLCAxNSBEZWMgMjAyMyAwMjo0MjozMiAtMDUwMCAoRVNU KQ0KUmVjZWl2ZWQ6IGJ5IGthbmdhLmt2YWNrLm9yZyAoUG9zdGZpeCwgZnJvbSB1c2VyaWQgNDAp DQogICAgICAgIGlkIDI1QTNGOEQwMTAzOyBGcmksIDE1IERlYyAyMDIzIDAyOjQyOjMyIC0wNTAw IChFU1QpDQpYLURlbGl2ZXJlZC1UbzogaW50LWxpc3QtbGludXgtbW1Aa3ZhY2sub3JnDQpSZWNl aXZlZDogYnkga2FuZ2Eua3ZhY2sub3JnIChQb3N0Zml4LCBmcm9tIHVzZXJpZCA2MzA0MikNCiAg ICAgICAgaWQgMEZBQUU4RDAxMUI7IEZyaSwgMTUgRGVjIDIwMjMgMDI6NDI6MzIgLTA1MDAgKEVT VCkNClgtRGVsaXZlcmVkLVRvOiBsaW51eC1tbUBrdmFjay5vcmcNClJlY2VpdmVkOiBmcm9tIHJl bGF5Lmhvc3RlZGVtYWlsLmNvbSAoc210cHJlbGF5MDAxNy5ob3N0ZWRlbWFpbC5jb20gWzIxNi40 MC40NC4xN10pDQogICAgICAgIGJ5IGthbmdhLmt2YWNrLm9yZyAoUG9zdGZpeCkgd2l0aCBFU01U UCBpZCAwMTU0ODhEMDEwMw0KICAgICAgICBmb3IgPGxpbnV4LW1tQGt2YWNrLm9yZz47IEZyaSwg MTUgRGVjIDIwMjMgMDI6NDI6MzEgLTA1MDAgKEVTVCkNClJlY2VpdmVkOiBmcm9tIHNtdHBpbjA2 Lmhvc3RlZGVtYWlsLmNvbSAoYTEwLnJvdXRlci5mbG9hdC4xOCBbMTAuMjAwLjE4LjFdKQ0KICAg ICAgICBieSB1bmlyZWxheTA2Lmhvc3RlZGVtYWlsLmNvbSAoUG9zdGZpeCkgd2l0aCBFU01UUCBp ZCBDM0VENkExNDczDQogICAgICAgIGZvciA8bGludXgtbW1Aa3ZhY2sub3JnPjsgRnJpLCAxNSBE ZWMgMjAyMyAwNzo0MjozMSArMDAwMCAoVVRDKQ0KWC1GREE6IDgxNTY4MjYwMTAyLjA2LjMzMkVE OTENClJlY2VpdmVkOiBmcm9tIG1nYW1haWwuaW50ZWwuY29tIChtZ2FtYWlsLmludGVsLmNvbSBb MTM0LjEzNC4xMzYuMjBdKQ0KICAgICAgICBieSBpbWYxOC5ob3N0ZWRlbWFpbC5jb20gKFBvc3Rm aXgpIHdpdGggRVNNVFAgaWQgN0U4NEUxQzAwMTMNCiAgICAgICAgZm9yIDxsaW51eC1tbUBrdmFj ay5vcmc+OyBGcmksIDE1IERlYyAyMDIzIDA3OjQyOjI4ICswMDAwIChVVEMpDQpBdXRoZW50aWNh dGlvbi1SZXN1bHRzOiBpbWYxOC5ob3N0ZWRlbWFpbC5jb207DQogICAgICAgIGRraW09cGFzcyBo ZWFkZXIuZD1pbnRlbC5jb20gaGVhZGVyLnM9SW50ZWwgaGVhZGVyLmI9R1JDUCtoZ2w7DQogICAg ICAgIHNwZj1wYXNzIChpbWYxOC5ob3N0ZWRlbWFpbC5jb206IGRvbWFpbiBvZiBhcmF2aW5kYS5w cmFzYWRAaW50ZWwuY29tIGRlc2lnbmF0ZXMgMTM0LjEzNC4xMzYuMjAgYXMgcGVybWl0dGVkIHNl bmRlcikgc210cC5tYWlsZnJvbT1hcmF2aW5kYS5wcmFzYWRAaW50ZWwuY29tOw0KICAgICAgICBk bWFyYz1wYXNzIChwb2xpY3k9bm9uZSkgaGVhZGVyLmZyb209aW50ZWwuY29tDQpBUkMtTWVzc2Fn ZS1TaWduYXR1cmU6IGk9MTsgYT1yc2Etc2hhMjU2OyBjPXJlbGF4ZWQvcmVsYXhlZDsgZD1ob3N0 ZWRlbWFpbC5jb207DQogICAgICAgIHM9YXJjLTIwMjIwNjA4OyB0PTE3MDI2MjYxNDk7DQogICAg ICAgIGg9ZnJvbTpmcm9tOnNlbmRlcjpyZXBseS10bzpzdWJqZWN0OnN1YmplY3Q6ZGF0ZTpkYXRl Og0KICAgICAgICBtZXNzYWdlLWlkOm1lc3NhZ2UtaWQ6dG86dG86Y2M6Y2M6bWltZS12ZXJzaW9u Om1pbWUtdmVyc2lvbjoNCiAgICAgICAgY29udGVudC10eXBlOmNvbnRlbnQtdHlwZToNCiAgICAg ICAgY29udGVudC10cmFuc2Zlci1lbmNvZGluZzpjb250ZW50LXRyYW5zZmVyLWVuY29kaW5nOmlu LXJlcGx5LXRvOg0KICAgICAgICByZWZlcmVuY2VzOmRraW0tc2lnbmF0dXJlOyBiaD1XeTRtYVRw M0Z2WkpQUXBLNFA2THNEVEE1eElqN05IbDlUMEhiaGtMOVA4PTsNCiAgICAgICAgYj1OZUU0Qzl2 V3hvVVdPUzBnZ3E0REFOb3FldnBPN3BkbnRGejBJRFNrSzlhb2kyejdwNG9QQm1qTmI0Yjk5YjFT Mm9XSXI3DQogICAgICAgIHhtMHI3QmFuWS84Y24zZzlVWXZPbVpDdEpNaEZoSFIyQTFvYkUxUmE2 QjVVeGNObmkrYUt2WnZ1TUZKek80cjZST3hwNUcNCiAgICAgICAgVU1BR1gxU2RKTlZ4b2FXdS9K bFZwTEZQYWk3VnhOWT0NCkFSQy1TZWFsOiBpPTE7IHM9YXJjLTIwMjIwNjA4OyBkPWhvc3RlZGVt YWlsLmNvbTsgdD0xNzAyNjI2MTQ5OyBhPXJzYS1zaGEyNTY7DQogICAgICAgIGN2PW5vbmU7DQog ICAgICAgIGI9SEE5VFZ4Z2FTclNCNm9jVXdDK3ZrZWErM0JEZkZyR29VRmo5VUZlSTRjM1hvaGJT by9vSENUQVZuUXBoN0xmR2VvSDRoTg0KICAgICAgICBFTWV2ODBOUUZXemc0Vi80azVHUlo0dlBr ejY3VkR5bUtyMnIvYyt0SW5GeUgydVRrV2QyTDdDc0xQeGZ3ZXVsSDhCczN2DQogICAgICAgIFZX NTkvKzFadW1ORkFJOStzQ0s3M08zOGlSejdJL1k9DQpBUkMtQXV0aGVudGljYXRpb24tUmVzdWx0 czogaT0xOw0KICAgICAgICBpbWYxOC5ob3N0ZWRlbWFpbC5jb207DQogICAgICAgIGRraW09cGFz cyBoZWFkZXIuZD1pbnRlbC5jb20gaGVhZGVyLnM9SW50ZWwgaGVhZGVyLmI9R1JDUCtoZ2w7DQog ICAgICAgIHNwZj1wYXNzIChpbWYxOC5ob3N0ZWRlbWFpbC5jb206IGRvbWFpbiBvZiBhcmF2aW5k YS5wcmFzYWRAaW50ZWwuY29tIGRlc2lnbmF0ZXMgMTM0LjEzNC4xMzYuMjAgYXMgcGVybWl0dGVk IHNlbmRlcikgc210cC5tYWlsZnJvbT1hcmF2aW5kYS5wcmFzYWRAaW50ZWwuY29tOw0KICAgICAg ICBkbWFyYz1wYXNzIChwb2xpY3k9bm9uZSkgaGVhZGVyLmZyb209aW50ZWwuY29tDQpES0lNLVNp Z25hdHVyZTogdj0xOyBhPXJzYS1zaGEyNTY7IGM9cmVsYXhlZC9zaW1wbGU7DQogIGQ9aW50ZWwu Y29tOyBpPUBpbnRlbC5jb207IHE9ZG5zL3R4dDsgcz1JbnRlbDsNCiAgdD0xNzAyNjI2MTQ4OyB4 PTE3MzQxNjIxNDg7DQogIGg9ZnJvbTp0bzpjYzpzdWJqZWN0OmRhdGU6bWVzc2FnZS1pZDptaW1l LXZlcnNpb246DQogICBjb250ZW50LXRyYW5zZmVyLWVuY29kaW5nOw0KICBiaD01eWVSSDg2NERD V29ISDVWR2hXdmpYclI1M3o5Y3MxV2ExbzNPYUVvOW1rPTsNCiAgYj1HUkNQK2hnbG15WHJRdnRS ZWdid25pZTMyYU1teFI4czJBeUwxZy9BQlg1Nklkc2dSdGpwbUdiNg0KICAgMjhJUWViY2d4SG13 K0Y0QmZwQnNGWmZrZGNnNnUrVDJNZGRmbllUY2tsZWJpckFpbGZWcDRBWEFLDQogICBkY3RoUFg2 T2lEMjk1cEFoUnZuaDFxdTNWZXZWTHRVYkEyZHNPTXNJcDJZR3p1THNiUlZoZE1pQzkNCiAgIGlO R0MxV09DQUYyTVdTSm0wZ25qYnplRlUxWi9BdW9BVHRScDBVYU9IZ3FwREtSd2JRek9pR0p4TA0K ICAgY2l4clFFSzI3bEk4L2dHazZkcnN0QVJEaGk1RjdSaHdlVW16Q2tkNVVTTEFkUndjUWhxQ095 dWlEDQogICBhKzREbW8vbTBiTWpwRGVHK2R2NjFKcW5lcnNuUTFXeXRnY1hKcjFiNkV6Y1BRaUU1 STg1ZTh5eWoNCiAgIFE9PTsNClgtSXJvblBvcnQtQVY6IEU9TWNBZmVlO2k9IjY2MDAsOTkyNywx MDkyNCI7IGE9IjM4NTY2MDkwMCINClgtSXJvblBvcnQtQVY6IEU9U29waG9zO2k9IjYuMDQsMjc4 LDE2OTU3MTE2MDAiOw0KICAgZD0ic2NhbicyMDgiO2E9IjM4NTY2MDkwMCINClJlY2VpdmVkOiBm cm9tIG9yc21nYTAwMS5qZi5pbnRlbC5jb20gKFsxMC43LjIwOS4xOF0pDQogIGJ5IG9yc21nYTEw MS5qZi5pbnRlbC5jb20gd2l0aCBFU01UUC9UTFMvRUNESEUtUlNBLUFFUzI1Ni1HQ00tU0hBMzg0 OyAxNCBEZWMgMjAyMyAyMzo0MjoyNiAtMDgwMA0KWC1FeHRMb29wMTogMQ0KWC1Jcm9uUG9ydC1B VjogRT1NY0FmZWU7aT0iNjYwMCw5OTI3LDEwOTI0IjsgYT0iODA4ODc3NDM3Ig0KWC1Jcm9uUG9y dC1BVjogRT1Tb3Bob3M7aT0iNi4wNCwyNzgsMTY5NTcxMTYwMCI7DQogICBkPSJzY2FuJzIwOCI7 YT0iODA4ODc3NDM3Ig0KUmVjZWl2ZWQ6IGZyb20gYWRyLXBhci1pbnNwdXIxLmlpbmQuaW50ZWwu Y29tIChbMTAuMjIzLjkzLjIwOV0pDQogIGJ5IG9yc21nYTAwMS1hdXRoLmpmLmludGVsLmNvbSB3 aXRoIEVTTVRQL1RMUy9FQ0RIRS1SU0EtQUVTMjU2LUdDTS1TSEEzODQ7IDE0IERlYyAyMDIzIDIz OjQyOjIyIC0wODAwDQpGcm9tOiBBcmF2aW5kYSBQcmFzYWQgPGFyYXZpbmRhLnByYXNhZEBpbnRl bC5jb20+DQpUbzogZGFtb25AbGlzdHMubGludXguZGV2LA0KICAgICAgICBsaW51eC1tbUBrdmFj ay5vcmcsDQogICAgICAgIHNqQGtlcm5lbC5vcmcsDQogICAgICAgIGxpbnV4LWtlcm5lbEB2Z2Vy Lmtlcm5lbC5vcmcNCkNjOiBhcmF2aW5kYS5wcmFzYWRAaW50ZWwuY29tLA0KICAgICAgICBzMjMy MjgxOUBlZC5hYy51aywNCiAgICAgICAgc2FuZGVlcDQua3VtYXJAaW50ZWwuY29tLA0KICAgICAg ICB5aW5nLmh1YW5nQGludGVsLmNvbSwNCiAgICAgICAgZGF2ZS5oYW5zZW5AaW50ZWwuY29tLA0K ICAgICAgICBkYW4uai53aWxsaWFtc0BpbnRlbC5jb20sDQogICAgICAgIHNyZWVuaXZhcy5zdWJy YW1vbmV5QGludGVsLmNvbSwNCiAgICAgICAgYW50dGkua2VydmluZW5AaW50ZWwuY29tLA0KICAg ICAgICBhbGV4YW5kZXIua2FuZXZza2l5QGludGVsLmNvbSwNCiAgICAgICAgQWxhbiBOYWlyIDxh bGFuLm5haXJAaW50ZWwuY29tPg0KU3ViamVjdDogbW0vREFNT046IFByb2ZpbGluZyBlbmhhbmNl bWVudHMgZm9yIERBTU9ODQpEYXRlOiBGcmksIDE1IERlYyAyMDIzIDEzOjE2OjE5ICswNTMwDQpN ZXNzYWdlLUlkOiA8MjAyMzEyMTUwNzQ2MTkuMTczNzg3LTEtYXJhdmluZGEucHJhc2FkQGludGVs LmNvbT4NClgtTWFpbGVyOiBnaXQtc2VuZC1lbWFpbCAyLjIxLjMNCk1JTUUtVmVyc2lvbjogMS4w DQpDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgNCkNvbnRlbnQtVHJhbnNm ZXItRW5jb2Rpbmc6IDhiaXQNClgtU3RhdC1TaWduYXR1cmU6IG5qZDc4b3U2cmY5aWZpM3JkYnhl bm50cjNweG80eWt4DQpYLVJzcGFtZC1TZXJ2ZXI6IHJzcGFtMTANClgtUnNwYW1kLVF1ZXVlLUlk OiA3RTg0RTFDMDAxMw0KWC1Sc3BhbS1Vc2VyOg0KWC1IRS1UYWc6IDE3MDI2MjYxNDgtNDI5MTkx DQpYLUhFLU1ldGE6IFUyRnNkR1ZrWDErNmRTK3p6dVloVUtLMWZja2pZb25vbHNmT0t3SElSZGhs TDNQbUYyWVpWMTIvSVF1TUhaakJvT3ViZnNiMHducVdhZDBlaE1qeFRmYkJRd2dXazNkVjV1RzNZ NEliYnZVNXRMYzhxYlpuTzBFZTRacDdaaDE5dlRqKzJha0FZTEMvSnlQUjdBNGU1REE0R3pkSWNX bjJrQkZ6dTVTN3ZzU0ZHV0VLWnhTOWVodG0xQTNsV2pWMkpwYjdva3RnaWtlZmVoLzllbnBLaU53 UW9WU0oxVkxFNXRaWjJXMDljd3BFWDZxS0tmM2dlUW9DYU5abTFXbHdPM2JTbVdTSURGQnNwQUxH d2dURkhzMTUwU3hlSGN5SnJHZitQd0dPMmFtSzZQQ3dSM0NoYzVuZFJocDFVSWZ5MjVvV2FScXRU eWtwc2Urcnh4ZGhPWFlJNVZiVS9aZUdjNVlydW1FakU5ZlNqRXQwSkVGbzBaOU1kcVZoT1BzaFZV N3ExVk5XMVJHYnpKOC80OUpSVlBxbk1NVVB2L1FtRjdFY0VTTlBkRWw0RkhKSHlUTGRwNjAvSUpN UUZEOXFTZnhpUTZGSmEyNTZpK0ZoQ2ZSQWRHTCtrS3ZSajRET1ZUdlUyenUxcDB4Z1hXYXZRWklY aURWeE5hQzJ1bkY2WjRQSHY4SEFyR0xJRC9JOEgwU0RpWjdHakJjaFo0RFlENEZpM001aFl2K04y LzVwdnRFK1VpdlpnQmdQaWk4RzRaOGcxMUZ4N1hxQUtZWUQrWWtaTyt1T1JKUEJkM2d0SGZKTWgy SEtybThXZmFDNUVNZUNmNFhTQ3dNM2I5UnlQTG12SjJVeUVlUHNxZzdIcVY4VEhUc2hlSjZXUitx aVZZdW13MmMvdlRsSWlmSkFmTGc1c0wwK0d3djI5T0xacEdpWmJDbzJoczdUdExVN2IrWlFpaitG VEVuTVdyeEJSK29iazFDQmVCKzhyRDY1WjZNOXRITXpTWVJvWGxZdEtQcVVGTTcrbDF5V3NPVXBt SUNadGhhVkMyTzJoS2xHckkwVW9oOG50RHlXY2ZDa09QOXBTbDBWc2E1MUtjV0JqMk13eGFSUWFG aGdINllRb2hvdGxBWlluTG8vS3I1TFZ1MStSRkcwWTZCSW1scnM3VStGa0JwYW9XcWc0dFQ2UlFw cDN5SWFUbFVIVUpQbm8yOEpoa0docDEyQ2ZBTWx6N1Bwd2NtNEp6OCtVWDdDTEVPZ2NQcDlqQ094 R1Nhc0N1eU5YNHlZaklLbG5sdVRZZmMNCjBJQm85bzluDQptN1lGU2h0em16bjRScFVzaW5ZaDBN TzFKS1VlVXhDTlZGQ3BqMk9TY2gwbjQwS3hGOW5maWtkNlZNS2FJcnN5a1F6YjVienlwR1dnTWZC Rmc5Ti9wMi9iY21ZbWZRNFhTVG1HMHFXVFN0OGYvSUl0L3dZMVVWZzZvclVteGNWaElnQ0FDQmFE cWhWc3U4Z0s4VlIxblF4UDlHTHRtcEp3V2NHMzY5bE5zb1NyQks5Tk5JWGNjTGw0N2MxNUduWHpP bU9TMw0KWC1Cb2dvc2l0eTogSGFtLCB0ZXN0cz1ib2dvZmlsdGVyLCBzcGFtaWNpdHk9MC4wMDAw MDAsIHZlcnNpb249MS4yLjQNClNlbmRlcjogb3duZXItbGludXgtbW1Aa3ZhY2sub3JnDQpQcmVj ZWRlbmNlOiBidWxrDQpYLUxvb3A6IG93bmVyLW1ham9yZG9tb0BrdmFjay5vcmcNCkxpc3QtSUQ6 IDxsaW51eC1tbS5rdmFjay5vcmc+DQpMaXN0LVN1YnNjcmliZTogPG1haWx0bzptYWpvcmRvbW9A a3ZhY2sub3JnPg0KTGlzdC1VbnN1YnNjcmliZTogPG1haWx0bzptYWpvcmRvbW9Aa3ZhY2sub3Jn Pg0KDQpEQU1PTiByYW5kb21seSBzYW1wbGVzIG9uZSBvciBtb3JlIHBhZ2VzIGluIGV2ZXJ5IHJl Z2lvbiBhbmQgdHJhY2tzDQphY2Nlc3NlcyB0byB0aGVtIHVzaW5nIHRoZSBBQ0NFU1NFRCBiaXQg aW4gUFRFIChvciBQTUQgZm9yIDJNQiBwYWdlcykuDQpXaGVuIHRoZSByZWdpb24gc2l6ZSBpcyBs YXJnZSAoZS5nLiwgc2V2ZXJhbCBHQnMpLCB3aGljaCBpcyBjb21tb24NCmZvciBsYXJnZSBmb290 cHJpbnQgYXBwbGljYXRpb25zLCBkZXRlY3Rpbmcgd2hldGhlciB0aGUgcmVnaW9uIGlzDQphY2Nl c3NlZCBvciBub3QgY29tcGxldGVseSBkZXBlbmRzIG9uIHdoZXRoZXIgdGhlIHBhZ2VzIHRoYXQg YXJlDQphY3RpdmVseSBhY2Nlc3NlZCBpbiB0aGUgcmVnaW9uIGFyZSBwaWNrZWQgZHVyaW5nIHJh bmRvbSBzYW1wbGluZy4NCklmIHN1Y2ggcGFnZXMgYXJlIG5vdCBwaWNrZWQgZm9yIHNhbXBsaW5n LCBEQU1PTiBmYWlscyB0byBpZGVudGlmeQ0KdGhlIHJlZ2lvbiBhcyBhY2Nlc3NlZC4gSG93ZXZl ciwgaW5jcmVhc2luZyB0aGUgc2FtcGxpbmcgcmF0ZSBvcg0KaW5jcmVhc2luZyB0aGUgbnVtYmVy IG9mIHJlZ2lvbnMgaW5jcmVhc2VzIENQVSBvdmVyaGVhZHMgb2Yga2RhbW9uZC4NCg0KVGhpcyBw YXRjaCBwcm9wb3NlcyBwcm9maWxpbmcgZGlmZmVyZW50IGxldmVscyBvZiB0aGUgYXBwbGljYXRp b26hr3MNCnBhZ2UgdGFibGUgdHJlZSB0byBkZXRlY3Qgd2hldGhlciBhIHJlZ2lvbiBpcyBhY2Nl c3NlZCBvciBub3QuIFRoaXMNCnBhdGNoIGlzIGJhc2VkIG9uIHRoZSBvYnNlcnZhdGlvbiB0aGF0 LCB3aGVuIHRoZSBhY2Nlc3NlZCBiaXQgZm9yIGENCnBhZ2UgaXMgc2V0LCB0aGUgYWNjZXNzZWQg Yml0cyBhdCB0aGUgaGlnaGVyIGxldmVscyBvZiB0aGUgcGFnZSB0YWJsZQ0KdHJlZSAoUE1EL1BV RC9QR0QpIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHBhdGggb2YgdGhlIHBhZ2UgdGFibGUgd2Fsaw0K YXJlIGFsc28gc2V0LiBIZW5jZSwgaXQgaXMgZWZmaWNpZW50IHRvICBjaGVjayB0aGUgYWNjZXNz ZWQgYml0cyBhdA0KdGhlIGhpZ2hlciBsZXZlbHMgb2YgdGhlIHBhZ2UgdGFibGUgdHJlZSB0byBk ZXRlY3Qgd2hldGhlciBhIHJlZ2lvbg0KaXMgYWNjZXNzZWQgb3Igbm90LiBGb3IgZXhhbXBsZSwg aWYgdGhlIGFjY2VzcyBiaXQgZm9yIGEgUFVEIGVudHJ5DQppcyBzZXQsIHRoZW4gb25lIG9yIG1v cmUgcGFnZXMgaW4gdGhlIDFHQiBQVUQgc3VidHJlZSBpcyBhY2Nlc3NlZCBhcw0KZWFjaCBQVUQg ZW50cnkgY292ZXJzIDFHQiBtYXBwaW5nLiBIZW5jZSwgaW5zdGVhZCBvZiBzYW1wbGluZw0KdGhv dXNhbmRzIG9mIDRLLzJNIHBhZ2VzIHRvIGRldGVjdCBhY2Nlc3NlcyBpbiBhIGxhcmdlIHJlZ2lv biwNCnNhbXBsaW5nIGF0IHRoZSBoaWdoZXIgbGV2ZWwgb2YgcGFnZSB0YWJsZSB0cmVlIGlzIGZh c3RlciBhbmQgZWZmaWNpZW50Lg0KDQpUaGlzIHBhdGNoIGlzIGJhc2VkIG9uIDYuNi4zIGtlcm5l bC4NCg0KVE9ETzogU3VwcG9ydCA1LWxldmVsIHBhZ2UgdGFibGUgdHJlZQ0KDQpFdmFsdWF0aW9u Og0KDQotIE1BU0lNIGJlbmNobWFyayB3aXRoIDFHQiwgMTBHQiwgMTAwR0IgZm9vdHByaW50IHdp dGggMTAlIGhvdCBkYXRhDQogIGFuZCA1VEIgd2l0aCAxMEdCIGhvdCBkYXRhLg0KLSBEQU1PTjog NW1zIHNhbXBsaW5nLCAyMDBtcyBhZ2dyZWdhdGlvbiBpbnRlcnZhbC4gUmVzdCBhbGwNCiAgcGFy YW1ldGVycyBzZXQgdG8gZGVmYXVsdCB2YWx1ZS4NCi0gREFNT04rUFRQOiBQYWdlIHRhYmxlIHBy b2ZpbGluZyBhcHBsaWVkIHRvIERBTU9OIHdpdGggdGhlIGFib3ZlDQogIHBhcmFtZXRlcnMuDQoN ClByb2ZpbGluZyBlZmZpY2llbmN5IGluIGRldGVjdGluZyBob3QgZGF0YSBbMV06DQoNCkZvb3Rw cmludCAgICAgIDFHQiAgICAgMTBHQiAgICAxMDBHQiAgIDVUQg0KLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpEQU1PTiAgICAgICAgICA+OTAlICAgIDw1MCUg ICAgfjAlICAgICAgMCUNCkRBTU9OK1BUUCAgICAgID45MCUgICAgPjkwJSAgICA+OTAlICAgID45 MCUNCg0KQ1BVIG92ZXJoZWFkcyAoaW4gYmlsbGlvbiBjeWNsZXMpIGZvciBrZGFtb25kOg0KDQpG b290cHJpbnQgICAgICAxR0IgICAgIDEwR0IgICAgMTAwR0IgICA1VEINCi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KREFNT04gICAgICAgICAgMS4xNSAgICAx OS41MyAgIDMuNTIgICAgOS41NQ0KREFNT04rUFRQICAgICAgMC44MyAgICAzLjIwICAgMS4yNyAg ICAyLjU1DQoNCkEgZGV0YWlsZWQgZXhwbGFuYXRpb24gYW5kIGV2YWx1YXRpb24gY2FuIGJlIGZv dW5kIGluIHRoZSBhclhpdiBwYXBlcjoNClsxXSBodHRwczovL2FyeGl2Lm9yZy9wZGYvMjMxMS4x MDI3NS5wZGYNCg0KUmVnYXJkcywNCkFyYXZpbmRhDQoNClNpZ25lZC1vZmYtYnk6IEFsYW4gTmFp ciA8YWxhbi5uYWlyQGludGVsLmNvbT4NClNpZ25lZC1vZmYtYnk6IFNhbmRlZXAgS3VtYXIgPHNh bmRlZXA0Lmt1bWFyQGludGVsLmNvbT4NClNpZ25lZC1vZmYtYnk6IEFyYXZpbmRhIFByYXNhZCA8 YXJhdmluZGEucHJhc2FkQGludGVsLmNvbT4NCi0tLQ0KYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0 YWJsZS5oIHwgICAxNyArKysrKw0KaW5jbHVkZS9saW51eC9kYW1vbi5oICAgICAgICAgIHwgICAx MyArKysrDQppbmNsdWRlL2xpbnV4L3BndGFibGUuaCAgICAgICAgfCAgIDMxICsrKysrKysrDQpt bS9kYW1vbi9jb3JlLmMgICAgICAgICAgICAgICAgfCAgIDI4ICsrKysrKysrDQptbS9kYW1vbi92 YWRkci5jICAgICAgICAgICAgICAgfCAgMTQ2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKystLS0NCjUgZmlsZXMgY2hhbmdlZCwgMjIzIGluc2VydGlvbnMoKyksIDEyIGRlbGV0 aW9ucygtKQ0KDQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIv YXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oDQppbmRleCBlMDJiMTc5ZWMuLmFjY2RhYmI5 NSAxMDA2NDQNCi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaA0KKysrIGIvYXJj aC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oDQpAQCAtMTY5LDYgKzE2OSwxMSBAQCBzdGF0aWMg aW5saW5lIGludCBwdWRfeW91bmcocHVkX3QgcHVkKQ0KICAgICAgIHJldHVybiBwdWRfZmxhZ3Mo cHVkKSAmIF9QQUdFX0FDQ0VTU0VEOw0KfQ0KK3N0YXRpYyBpbmxpbmUgaW50IHBnZF95b3VuZyhw Z2RfdCBwZ2QpDQorew0KKyAgICAgICByZXR1cm4gcGdkX2ZsYWdzKHBnZCkgJiBfUEFHRV9BQ0NF U1NFRDsNCit9DQorDQpzdGF0aWMgaW5saW5lIGludCBwdGVfd3JpdGUocHRlX3QgcHRlKQ0Kew0K ICAgICAgIC8qDQpAQCAtNjgxLDYgKzY4NiwxOCBAQCBzdGF0aWMgaW5saW5lIHB1ZF90IHB1ZF9t a3dyaXRlKHB1ZF90IHB1ZCkNCiAgICAgICByZXR1cm4gcHVkX2NsZWFyX3NhdmVkZGlydHkocHVk KTsNCn0NCitzdGF0aWMgaW5saW5lIHBnZF90IHBnZF9jbGVhcl9mbGFncyhwZ2RfdCBwZ2QsIHBn ZHZhbF90IGNsZWFyKQ0KK3sNCisgICAgICAgcGdkdmFsX3QgdiA9IG5hdGl2ZV9wZ2RfdmFsKHBn ZCk7DQorDQorICAgICAgIHJldHVybiBuYXRpdmVfbWFrZV9wZ2QodiAmIH5jbGVhcik7DQorfQ0K Kw0KK3N0YXRpYyBpbmxpbmUgcGdkX3QgcGdkX21rb2xkKHBnZF90IHBnZCkNCit7DQorICAgICAg IHJldHVybiBwZ2RfY2xlYXJfZmxhZ3MocGdkLCBfUEFHRV9BQ0NFU1NFRCk7DQorfQ0KKw0KI2lm ZGVmIENPTkZJR19IQVZFX0FSQ0hfU09GVF9ESVJUWQ0Kc3RhdGljIGlubGluZSBpbnQgcHRlX3Nv ZnRfZGlydHkocHRlX3QgcHRlKQ0Kew0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGFtb24u aCBiL2luY2x1ZGUvbGludXgvZGFtb24uaA0KaW5kZXggYzcwY2NhOGE4Li44NTIxYTYyZWMgMTAw NjQ0DQotLS0gYS9pbmNsdWRlL2xpbnV4L2RhbW9uLmgNCisrKyBiL2luY2x1ZGUvbGludXgvZGFt b24uaA0KQEAgLTE5LDYgKzE5LDE0IEBADQovKiBNYXggcHJpb3JpdHkgc2NvcmUgZm9yIERBTU9O LWJhc2VkIG9wZXJhdGlvbiBzY2hlbWVzICovDQojZGVmaW5lIERBTU9TX01BWF9TQ09SRSAgICAg ICAgICAgICAgKDk5KQ0KKy8qIERBTU9OIHByb2ZpbGluZyBsZXZlbHMgKi8NCitlbnVtIGRhbW9u X3Byb2ZpbGVfbGV2ZWwgew0KKyAgICAgICBQVEVfTEVWRUwsDQorICAgICAgIFBNRF9MRVZFTCwN CisgICAgICAgUFVEX0xFVkVMLA0KKyAgICAgICBQR0RfTEVWRUwsDQorfTsNCisNCi8qIEdldCBh IHJhbmRvbSBudW1iZXIgaW4gW2wsIHIpICovDQpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcg ZGFtb25fcmFuZCh1bnNpZ25lZCBsb25nIGwsIHVuc2lnbmVkIGxvbmcgcikNCnsNCkBAIC01Nyw2 ICs2NSw4IEBAIHN0cnVjdCBkYW1vbl9yZWdpb24gew0KICAgICAgIHVuc2lnbmVkIGludCBhZ2U7 DQovKiBwcml2YXRlOiBJbnRlcm5hbCB2YWx1ZSBmb3IgYWdlIGNhbGN1bGF0aW9uLiAqLw0KICAg ICAgIHVuc2lnbmVkIGludCBsYXN0X25yX2FjY2Vzc2VzOw0KKyAgICAgICAvKiBQYWdlIHRhYmxl IHByb2ZpbGluZyBsZXZlbCAqLw0KKyAgICAgICBlbnVtIGRhbW9uX3Byb2ZpbGVfbGV2ZWwgcHJv ZmlsZV9sZXZlbDsNCn07DQogLyoqDQpAQCAtNjU2LDYgKzY2Niw5IEBAIGludCBkYW1vbl9zdG9w KHN0cnVjdCBkYW1vbl9jdHggKipjdHhzLCBpbnQgbnJfY3R4cyk7DQppbnQgZGFtb25fc2V0X3Jl Z2lvbl9iaWdnZXN0X3N5c3RlbV9yYW1fZGVmYXVsdChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LA0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqc3RhcnQsIHVuc2ln bmVkIGxvbmcgKmVuZCk7DQorZW51bSBkYW1vbl9wcm9maWxlX2xldmVsIHBpY2tfcHJvZmlsZV9s ZXZlbCh1bnNpZ25lZCBsb25nIHN0YXJ0LA0KKyAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBl bmQsIHVuc2lnbmVkIGxvbmcgYWRkcik7DQorDQojZW5kaWYgLyogQ09ORklHX0RBTU9OICovDQog I2VuZGlmIC8qIF9EQU1PTl9IICovDQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wZ3RhYmxl LmggYi9pbmNsdWRlL2xpbnV4L3BndGFibGUuaA0KaW5kZXggYWY3NjM5YzNiLi44MmQ1ZjY3ZWEg MTAwNjQ0DQotLS0gYS9pbmNsdWRlL2xpbnV4L3BndGFibGUuaA0KKysrIGIvaW5jbHVkZS9saW51 eC9wZ3RhYmxlLmgNCkBAIC05MzUsNiArOTM1LDM3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBhcmNo X3N3YXBfcmVzdG9yZShzd3BfZW50cnlfdCBlbnRyeSwgc3RydWN0IGZvbGlvICpmb2xpbykNCiNk ZWZpbmUgZmx1c2hfdGxiX2ZpeF9zcHVyaW91c19mYXVsdCh2bWEsIGFkZHJlc3MsIHB0ZXApIGZs dXNoX3RsYl9wYWdlKHZtYSwgYWRkcmVzcykNCiNlbmRpZg0KKy8qDQorICogV2hlbiB3YWxraW5n IHBhZ2UgdGFibGVzLCBnZXQgdGhlIGFkZHJlc3Mgb2YgdGhlIGN1cnJlbnQvcGFzc2VkIGJvdW5k YXJ5LA0KKyAqIG9yIHRoZSBzdGFydCBhZGRyZXNzIG9mIHRoZSByYW5nZSBpZiB0aGF0IGNvbWVz IGVhcmxpZXIuDQorICovDQorDQorI2RlZmluZSBwZ2RfYWRkcl9zdGFydChhZGRyLCBzdGFydCkg ICAgICAgICAgICAgICAgIFwNCisoeyAgICAgdW5zaWduZWQgbG9uZyBfX2JvdW5kYXJ5ID0gKGFk ZHIpICYgUEdESVJfTUFTSzsgICAgICAgXA0KKyAgICAgICAoX19ib3VuZGFyeSA+IHN0YXJ0KSA/ IF9fYm91bmRhcnkgOiAoc3RhcnQpOyAgXA0KK30pDQorDQorI2lmbmRlZiBwNGRfYWRkcl9zdGFy dA0KKyNkZWZpbmUgcDRkX2FkZHJfc3RhcnQoYWRkciwgc3RhcnQpICAgICAgICAgICAgICAgICBc DQorKHsgICAgIHVuc2lnbmVkIGxvbmcgX19ib3VuZGFyeSA9IChhZGRyKSAmIFA0RF9NQVNLOyBc DQorICAgICAgIChfX2JvdW5kYXJ5ID4gc3RhcnQpID8gX19ib3VuZGFyeSA6IChzdGFydCk7ICBc DQorfSkNCisjZW5kaWYNCisNCisjaWZuZGVmIHB1ZF9hZGRyX3N0YXJ0DQorI2RlZmluZSBwdWRf YWRkcl9zdGFydChhZGRyLCBzdGFydCkgICAgICAgICAgICAgICAgIFwNCisoeyAgICAgdW5zaWdu ZWQgbG9uZyBfX2JvdW5kYXJ5ID0gKGFkZHIpICYgUFVEX01BU0s7IFwNCisgICAgICAgKF9fYm91 bmRhcnkgPiBzdGFydCkgPyBfX2JvdW5kYXJ5IDogKHN0YXJ0KTsgIFwNCit9KQ0KKyNlbmRpZg0K Kw0KKyNpZm5kZWYgcG1kX2FkZHJfc3RhcnQNCisjZGVmaW5lIHBtZF9hZGRyX3N0YXJ0KGFkZHIs IHN0YXJ0KSAgICAgICAgICAgICAgICAgXA0KKyh7ICAgICB1bnNpZ25lZCBsb25nIF9fYm91bmRh cnkgPSAoYWRkcikgJiBQTURfTUFTSzsgXA0KKyAgICAgICAoX19ib3VuZGFyeSA+IHN0YXJ0KSA/ IF9fYm91bmRhcnkgOiAoc3RhcnQpOyAgXA0KK30pDQorI2VuZGlmDQorDQovKg0KICAqIFdoZW4g d2Fsa2luZyBwYWdlIHRhYmxlcywgZ2V0IHRoZSBhZGRyZXNzIG9mIHRoZSBuZXh0IGJvdW5kYXJ5 LA0KICAqIG9yIHRoZSBlbmQgYWRkcmVzcyBvZiB0aGUgcmFuZ2UgaWYgdGhhdCBjb21lcyBlYXJs aWVyLiAgQWx0aG91Z2ggbm8NCmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1v bi9jb3JlLmMNCmluZGV4IGZkNWJlNzNmNi4uMmE3ZDVjMDQxIDEwMDY0NA0KLS0tIGEvbW0vZGFt b24vY29yZS5jDQorKysgYi9tbS9kYW1vbi9jb3JlLmMNCkBAIC0zMSw2ICszMSwzMyBAQCBzdGF0 aWMgc3RydWN0IGRhbW9uX29wZXJhdGlvbnMgZGFtb25fcmVnaXN0ZXJlZF9vcHNbTlJfREFNT05f T1BTXTsNCiBzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKmRhbW9uX3JlZ2lvbl9jYWNoZSBfX3Jv X2FmdGVyX2luaXQ7DQorLyogUGljayB0aGUgaGlnaGVzdCBwb3NzaWJsZSBwYWdlIHRhYmxlIHBy b2ZpbGluZyBsZXZlbCBmb3IgdGhlDQorICogcmVnaW9uIGNvcnJlc3BvbmRpbmcgdG8gYWRkcg0K KyAqLw0KK2VudW0gZGFtb25fcHJvZmlsZV9sZXZlbCBwaWNrX3Byb2ZpbGVfbGV2ZWwodW5zaWdu ZWQgbG9uZyBzdGFydCwNCisgICAgICAgdW5zaWduZWQgbG9uZyBlbmQsIHVuc2lnbmVkIGxvbmcg YWRkcikNCit7DQorICAgICAgIGVudW0gZGFtb25fcHJvZmlsZV9sZXZlbCBsZXZlbCA9IFBURV9M RVZFTDsNCisNCisgICAgICAgaWYgKHBtZF9hZGRyX3N0YXJ0KGFkZHIsIChzdGFydCkgLSAxKSA8 IHN0YXJ0DQorICAgICAgICAgICAgICB8fCBwbWRfYWRkcl9lbmQoYWRkciwgKGVuZCkgKyAxKSA+ IGVuZCkNCisgICAgICAgICAgICAgIGdvdG8gb3V0Ow0KKyAgICAgICBsZXZlbCA9IFBNRF9MRVZF TDsNCisNCisgICAgICAgaWYgKHB1ZF9hZGRyX3N0YXJ0KGFkZHIsIChzdGFydCkgLSAxKSA8IHN0 YXJ0DQorICAgICAgICAgICAgICB8fCBwdWRfYWRkcl9lbmQoYWRkciwgKGVuZCkgKyAxKSA+IGVu ZCkNCisgICAgICAgICAgICAgIGdvdG8gb3V0Ow0KKyAgICAgICBsZXZlbCA9IFBVRF9MRVZFTDsN CisNCisgICAgICAgaWYgKHBnZF9hZGRyX3N0YXJ0KGFkZHIsIChzdGFydCkgLSAxKSA8IHN0YXJ0 DQorICAgICAgICAgICAgICB8fCBwZ2RfYWRkcl9lbmQoYWRkciwgKGVuZCkgKyAxKSA+IGVuZCkN CisgICAgICAgICAgICAgIGdvdG8gb3V0Ow0KKyAgICAgICBsZXZlbCA9IFBHRF9MRVZFTDsNCisN CitvdXQ6DQorICAgICAgIHJldHVybiBsZXZlbDsNCit9DQorDQovKiBTaG91bGQgYmUgY2FsbGVk IHVuZGVyIGRhbW9uX29wc19sb2NrIHdpdGggaWQgc21hbGxlciB0aGFuIE5SX0RBTU9OX09QUyAq Lw0Kc3RhdGljIGJvb2wgX19kYW1vbl9pc19yZWdpc3RlcmVkX29wcyhlbnVtIGRhbW9uX29wc19p ZCBpZCkNCnsNCkBAIC0xMzIsNiArMTU5LDcgQEAgc3RydWN0IGRhbW9uX3JlZ2lvbiAqZGFtb25f bmV3X3JlZ2lvbih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkNCiAgICAg ICAgcmVnaW9uLT5hZ2UgPSAwOw0KICAgICAgIHJlZ2lvbi0+bGFzdF9ucl9hY2Nlc3NlcyA9IDA7 DQorICAgICAgIHJlZ2lvbi0+cHJvZmlsZV9sZXZlbCA9IFBURV9MRVZFTDsNCiAgICAgICAgcmV0 dXJuIHJlZ2lvbjsNCn0NCmRpZmYgLS1naXQgYS9tbS9kYW1vbi92YWRkci5jIGIvbW0vZGFtb24v dmFkZHIuYw0KaW5kZXggY2Y4YTlmYzVjLi5iNzEyMjFiM2UgMTAwNjQ0DQotLS0gYS9tbS9kYW1v bi92YWRkci5jDQorKysgYi9tbS9kYW1vbi92YWRkci5jDQpAQCAtMzg3LDE2ICszODcsNzYgQEAg c3RhdGljIGludCBkYW1vbl9ta29sZF9odWdldGxiX2VudHJ5KHB0ZV90ICpwdGUsIHVuc2lnbmVk IGxvbmcgaG1hc2ssDQojZGVmaW5lIGRhbW9uX21rb2xkX2h1Z2V0bGJfZW50cnkgTlVMTA0KI2Vu ZGlmIC8qIENPTkZJR19IVUdFVExCX1BBR0UgKi8NCi1zdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dh bGtfb3BzIGRhbW9uX21rb2xkX29wcyA9IHsNCi0gICAgICAgLnBtZF9lbnRyeSA9IGRhbW9uX21r b2xkX3BtZF9lbnRyeSwNCitzdGF0aWMgaW50IGRhbW9uX21rb2xkX3BtZChwbWRfdCAqcG1kLCB1 bnNpZ25lZCBsb25nIGFkZHIsDQorICAgICAgIHVuc2lnbmVkIGxvbmcgbmV4dCwgc3RydWN0IG1t X3dhbGsgKndhbGspDQorew0KKyAgICAgICBzcGlubG9ja190ICpwdGw7DQorDQorICAgICAgIGlm ICghcG1kX3ByZXNlbnQoKnBtZCkgfHwgcG1kX25vbmUoKnBtZCkpDQorICAgICAgICAgICAgICBn b3RvIG91dDsNCisNCisgICAgICAgcHRsID0gcG1kX2xvY2sod2Fsay0+bW0sIHBtZCk7DQorICAg ICAgIGlmIChwbWRfeW91bmcoKnBtZCkpDQorICAgICAgICAgICAgICAqcG1kID0gcG1kX21rb2xk KCpwbWQpOw0KKw0KKyAgICAgICBzcGluX3VubG9jayhwdGwpOw0KKw0KK291dDoNCisgICAgICAg cmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQgZGFtb25fbWtvbGRfcHVkKHB1ZF90ICpwdWQs IHVuc2lnbmVkIGxvbmcgYWRkciwNCisgICAgICAgdW5zaWduZWQgbG9uZyBuZXh0LCBzdHJ1Y3Qg bW1fd2FsayAqd2FsaykNCit7DQorICAgICAgIHNwaW5sb2NrX3QgKnB0bDsNCisNCisgICAgICAg aWYgKCFwdWRfcHJlc2VudCgqcHVkKSB8fCBwdWRfbm9uZSgqcHVkKSkNCisgICAgICAgICAgICAg IGdvdG8gb3V0Ow0KKw0KKyAgICAgICBwdGwgPSBwdWRfbG9jayh3YWxrLT5tbSwgcHVkKTsNCisg ICAgICAgaWYgKHB1ZF95b3VuZygqcHVkKSkNCisgICAgICAgICAgICAgICpwdWQgPSBwdWRfbWtv bGQoKnB1ZCk7DQorDQorICAgICAgIHNwaW5fdW5sb2NrKHB0bCk7DQorDQorb3V0Og0KKyAgICAg ICByZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGludCBkYW1vbl9ta29sZF9wZ2QocGdkX3QgKnBn ZCwgdW5zaWduZWQgbG9uZyBhZGRyLA0KKyAgICAgICB1bnNpZ25lZCBsb25nIG5leHQsIHN0cnVj dCBtbV93YWxrICp3YWxrKQ0KK3sNCisNCisgICAgICAgaWYgKCFwZ2RfcHJlc2VudCgqcGdkKSB8 fCBwZ2Rfbm9uZSgqcGdkKSkNCisgICAgICAgICAgICAgIGdvdG8gb3V0Ow0KKw0KKyAgICAgICBz cGluX2xvY2soJnBnZF9sb2NrKTsNCisgICAgICAgaWYgKHBnZF95b3VuZygqcGdkKSkNCisgICAg ICAgICAgICAgICpwZ2QgPSBwZ2RfbWtvbGQoKnBnZCk7DQorDQorICAgICAgIHNwaW5fdW5sb2Nr KCZwZ2RfbG9jayk7DQorDQorb3V0Og0KKyAgICAgICByZXR1cm4gMDsNCit9DQorDQorc3RhdGlj IGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyBkYW1vbl9ta29sZF9vcHNbXSA9IHsNCisgICAgICAg ey5wbWRfZW50cnkgPSBkYW1vbl9ta29sZF9wbWRfZW50cnksDQogICAgICAgLmh1Z2V0bGJfZW50 cnkgPSBkYW1vbl9ta29sZF9odWdldGxiX2VudHJ5LA0KLSAgICAgICAud2Fsa19sb2NrID0gUEdX QUxLX1JETE9DSywNCisgICAgICAgLndhbGtfbG9jayA9IFBHV0FMS19SRExPQ0t9LA0KKyAgICAg ICB7LnBtZF9lbnRyeSA9IGRhbW9uX21rb2xkX3BtZH0sDQorICAgICAgIHsucHVkX2VudHJ5ID0g ZGFtb25fbWtvbGRfcHVkfSwNCisgICAgICAgey5wZ2RfZW50cnkgPSBkYW1vbl9ta29sZF9wZ2R9 LA0KfTsNCi1zdGF0aWMgdm9pZCBkYW1vbl92YV9ta29sZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwg dW5zaWduZWQgbG9uZyBhZGRyKQ0KK3N0YXRpYyB2b2lkIGRhbW9uX3ZhX21rb2xkKHN0cnVjdCBt bV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyKQ0Kew0KKyAgICAgICB1bnNpZ25l ZCBsb25nIGFkZHIgPSByLT5zYW1wbGluZ19hZGRyOw0KKw0KKyAgICAgICByLT5wcm9maWxlX2xl dmVsID0gcGlja19wcm9maWxlX2xldmVsKHItPmFyLnN0YXJ0LCByLT5hci5lbmQsIGFkZHIpOw0K Kw0KICAgICAgIG1tYXBfcmVhZF9sb2NrKG1tKTsNCi0gICAgICAgd2Fsa19wYWdlX3JhbmdlKG1t LCBhZGRyLCBhZGRyICsgMSwgJmRhbW9uX21rb2xkX29wcywgTlVMTCk7DQorICAgICAgIHdhbGtf cGFnZV9yYW5nZShtbSwgYWRkciwgYWRkciArIDEsIGRhbW9uX21rb2xkX29wcyArIHItPnByb2Zp bGVfbGV2ZWwsIE5VTEwpOw0KICAgICAgIG1tYXBfcmVhZF91bmxvY2sobW0pOw0KfQ0KQEAgLTQw OSw3ICs0NjksNyBAQCBzdGF0aWMgdm9pZCBfX2RhbW9uX3ZhX3ByZXBhcmVfYWNjZXNzX2NoZWNr KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLA0Kew0KICAgICAgIHItPnNhbXBsaW5nX2FkZHIgPSBkYW1v bl9yYW5kKHItPmFyLnN0YXJ0LCByLT5hci5lbmQpOw0KLSAgICAgICBkYW1vbl92YV9ta29sZCht bSwgci0+c2FtcGxpbmdfYWRkcik7DQorICAgICAgIGRhbW9uX3ZhX21rb2xkKG1tLCByKTsNCn0N CiBzdGF0aWMgdm9pZCBkYW1vbl92YV9wcmVwYXJlX2FjY2Vzc19jaGVja3Moc3RydWN0IGRhbW9u X2N0eCAqY3R4KQ0KQEAgLTUzMSwyMiArNTkxLDg0IEBAIHN0YXRpYyBpbnQgZGFtb25feW91bmdf aHVnZXRsYl9lbnRyeShwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGhtYXNrLA0KI2RlZmluZSBk YW1vbl95b3VuZ19odWdldGxiX2VudHJ5IE5VTEwNCiNlbmRpZiAvKiBDT05GSUdfSFVHRVRMQl9Q QUdFICovDQotc3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyBkYW1vbl95b3VuZ19vcHMg PSB7DQotICAgICAgIC5wbWRfZW50cnkgPSBkYW1vbl95b3VuZ19wbWRfZW50cnksDQorc3RhdGlj IGludCBkYW1vbl95b3VuZ19wbWQocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLA0KKyAg ICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBuZXh0LCBzdHJ1Y3QgbW1fd2FsayAqd2FsaykNCit7 DQorICAgICAgIHNwaW5sb2NrX3QgKnB0bDsNCisgICAgICAgc3RydWN0IGRhbW9uX3lvdW5nX3dh bGtfcHJpdmF0ZSAqcHJpdiA9IHdhbGstPnByaXZhdGU7DQorDQorICAgICAgIGlmICghcG1kX3By ZXNlbnQoKnBtZCkgfHwgcG1kX25vbmUoKnBtZCkpDQorICAgICAgICAgICAgICBnb3RvIG91dDsN CisNCisgICAgICAgcHRsID0gcG1kX2xvY2sod2Fsay0+bW0sIHBtZCk7DQorICAgICAgIGlmIChw bWRfeW91bmcoKnBtZCkgfHwgbW11X25vdGlmaWVyX3Rlc3RfeW91bmcod2Fsay0+bW0sIGFkZHIp KQ0KKyAgICAgICAgICAgICAgcHJpdi0+eW91bmcgPSB0cnVlOw0KKw0KKyAgICAgICAqcHJpdi0+ Zm9saW9fc3ogPSAoMVVMIDw8IFBNRF9TSElGVCk7DQorICAgICAgIHNwaW5fdW5sb2NrKHB0bCk7 DQorb3V0Og0KKyAgICAgICByZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGludCBkYW1vbl95b3Vu Z19wdWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLA0KKyAgICAgICAgICAgICAgdW5z aWduZWQgbG9uZyBuZXh0LCBzdHJ1Y3QgbW1fd2FsayAqd2FsaykNCit7DQorICAgICAgIHNwaW5s b2NrX3QgKnB0bDsNCisgICAgICAgc3RydWN0IGRhbW9uX3lvdW5nX3dhbGtfcHJpdmF0ZSAqcHJp diA9IHdhbGstPnByaXZhdGU7DQorDQorICAgICAgIGlmICghcHVkX3ByZXNlbnQoKnB1ZCkgfHwg cHVkX25vbmUoKnB1ZCkpDQorICAgICAgICAgICAgICBnb3RvIG91dDsNCisNCisgICAgICAgcHRs ID0gcHVkX2xvY2sod2Fsay0+bW0sIHB1ZCk7DQorICAgICAgIGlmIChwdWRfeW91bmcoKnB1ZCkg fHwgbW11X25vdGlmaWVyX3Rlc3RfeW91bmcod2Fsay0+bW0sIGFkZHIpKQ0KKyAgICAgICAgICAg ICAgcHJpdi0+eW91bmcgPSB0cnVlOw0KKw0KKyAgICAgICAqcHJpdi0+Zm9saW9fc3ogPSAoMVVM IDw8IFBVRF9TSElGVCk7DQorDQorICAgICAgIHNwaW5fdW5sb2NrKHB0bCk7DQorb3V0Og0KKyAg ICAgICByZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGludCBkYW1vbl95b3VuZ19wZ2QocGdkX3Qg KnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyLA0KKyAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBu ZXh0LCBzdHJ1Y3QgbW1fd2FsayAqd2FsaykNCit7DQorICAgICAgIHN0cnVjdCBkYW1vbl95b3Vu Z193YWxrX3ByaXZhdGUgKnByaXYgPSB3YWxrLT5wcml2YXRlOw0KKw0KKyAgICAgICBpZiAoIXBn ZF9wcmVzZW50KCpwZ2QpIHx8IHBnZF9ub25lKCpwZ2QpKQ0KKyAgICAgICAgICAgICAgZ290byBv dXQ7DQorDQorICAgICAgIHNwaW5fbG9jaygmcGdkX2xvY2spOw0KKyAgICAgICBpZiAocGdkX3lv dW5nKCpwZ2QpIHx8IG1tdV9ub3RpZmllcl90ZXN0X3lvdW5nKHdhbGstPm1tLCBhZGRyKSkNCisg ICAgICAgICAgICAgIHByaXYtPnlvdW5nID0gdHJ1ZTsNCisNCisgICAgICAgKnByaXYtPmZvbGlv X3N6ID0gKDFVTCA8PCBQR0RJUl9TSElGVCk7DQorDQorICAgICAgIHNwaW5fdW5sb2NrKCZwZ2Rf bG9jayk7DQorb3V0Og0KKyAgICAgICByZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGNvbnN0IHN0 cnVjdCBtbV93YWxrX29wcyBkYW1vbl95b3VuZ19vcHNbXSA9IHsNCisgICAgICAgey5wbWRfZW50 cnkgPSBkYW1vbl95b3VuZ19wbWRfZW50cnksDQogICAgICAgLmh1Z2V0bGJfZW50cnkgPSBkYW1v bl95b3VuZ19odWdldGxiX2VudHJ5LA0KLSAgICAgICAud2Fsa19sb2NrID0gUEdXQUxLX1JETE9D SywNCisgICAgICAgLndhbGtfbG9jayA9IFBHV0FMS19SRExPQ0t9LA0KKyAgICAgICB7LnBtZF9l bnRyeSA9IGRhbW9uX3lvdW5nX3BtZH0sDQorICAgICAgIHsucHVkX2VudHJ5ID0gZGFtb25feW91 bmdfcHVkfSwNCisgICAgICAgey5wZ2RfZW50cnkgPSBkYW1vbl95b3VuZ19wZ2R9LA0KfTsNCi1z dGF0aWMgYm9vbCBkYW1vbl92YV95b3VuZyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQg bG9uZyBhZGRyLA0KK3N0YXRpYyBib29sIGRhbW9uX3ZhX3lvdW5nKHN0cnVjdCBtbV9zdHJ1Y3Qg Km1tLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLA0KICAgICAgICAgICAgICB1bnNpZ25lZCBsb25n ICpmb2xpb19zeikNCnsNCisgICAgICAgdW5zaWduZWQgbG9uZyBhZGRyID0gci0+c2FtcGxpbmdf YWRkcjsNCiAgICAgICBzdHJ1Y3QgZGFtb25feW91bmdfd2Fsa19wcml2YXRlIGFyZyA9IHsNCiAg ICAgICAgICAgICAgIC5mb2xpb19zeiA9IGZvbGlvX3N6LA0KICAgICAgICAgICAgICAueW91bmcg PSBmYWxzZSwNCiAgICAgICB9Ow0KICAgICAgICBtbWFwX3JlYWRfbG9jayhtbSk7DQotICAgICAg IHdhbGtfcGFnZV9yYW5nZShtbSwgYWRkciwgYWRkciArIDEsICZkYW1vbl95b3VuZ19vcHMsICZh cmcpOw0KKyAgICAgICB3YWxrX3BhZ2VfcmFuZ2UobW0sIGFkZHIsIGFkZHIgKyAxLCBkYW1vbl95 b3VuZ19vcHMgKyByLT5wcm9maWxlX2xldmVsLCAmYXJnKTsNCiAgICAgICBtbWFwX3JlYWRfdW5s b2NrKG1tKTsNCiAgICAgICByZXR1cm4gYXJnLnlvdW5nOw0KfQ0KQEAgLTU3Miw3ICs2OTQsNyBA QCBzdGF0aWMgdm9pZCBfX2RhbW9uX3ZhX2NoZWNrX2FjY2VzcyhzdHJ1Y3QgbW1fc3RydWN0ICpt bSwNCiAgICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgIH0NCi0gICAgICAgbGFzdF9hY2Nlc3Nl ZCA9IGRhbW9uX3ZhX3lvdW5nKG1tLCByLT5zYW1wbGluZ19hZGRyLCAmbGFzdF9mb2xpb19zeik7 DQorICAgICAgIGxhc3RfYWNjZXNzZWQgPSBkYW1vbl92YV95b3VuZyhtbSwgciwgJmxhc3RfZm9s aW9fc3opOw0KICAgICAgIGlmIChsYXN0X2FjY2Vzc2VkKQ0KICAgICAgICAgICAgICByLT5ucl9h Y2Nlc3NlcysrOw0KDQpIaSxBcmF2aW5kYS5wcmFzYWQsDQoNClJlY2VudGx5LCB3ZSBhcmUgcmVz ZWFyY2hpbmcgdGhpcyBwYXRjaCwgd2hhdCBkbyB5b3UgdGhpbmsgb2YgYXBwbHlpbmcgdGhpcyBw YXRjaCB0byBBcm02NCA/IGFuZCBEbyB5b3UgaGF2ZSBhbnkgc3VnZ2VzdGlvbnM/DQoNClRoYW5r cyENCiMvKioqKioqsb7Tyrz+vLDG5Li9vP66rNPQ0KHD17mry761xLGjw9zQxc+io6y99s/e09q3 osvNuPjJz8PmtdjWt9bQwdCz9rXEuPbIy7vyyLrX6aGjvfvWucjOus7G5Mv7yMvS1MjOus7Qzsq9 yrnTw6OosPzAqLWrsrvP3tPayKuyv7vysr+31rXY0LnCtqGiuLTWxqGiu/LJoreio6mxvtPKvP7W 0LXE0MXPoqGjyOe5+8T6tO3K1cHLsb7Tyrz+o6zH68T6waK8tLXnu7C78tPKvP7NqNaqt6K8/sjL sqLJvrP9sb7Tyrz+o6EgVGhpcyBlLW1haWwgYW5kIGl0cyBhdHRhY2htZW50cyBjb250YWluIGNv bmZpZGVudGlhbCBpbmZvcm1hdGlvbiBmcm9tIFhJQU9NSSwgd2hpY2ggaXMgaW50ZW5kZWQgb25s eSBmb3IgdGhlIHBlcnNvbiBvciBlbnRpdHkgd2hvc2UgYWRkcmVzcyBpcyBsaXN0ZWQgYWJvdmUu IEFueSB1c2Ugb2YgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZCBoZXJlaW4gaW4gYW55IHdheSAo aW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8sIHRvdGFsIG9yIHBhcnRpYWwgZGlzY2xvc3Vy ZSwgcmVwcm9kdWN0aW9uLCBvciBkaXNzZW1pbmF0aW9uKSBieSBwZXJzb25zIG90aGVyIHRoYW4g dGhlIGludGVuZGVkIHJlY2lwaWVudChzKSBpcyBwcm9oaWJpdGVkLiBJZiB5b3UgcmVjZWl2ZSB0 aGlzIGUtbWFpbCBpbiBlcnJvciwgcGxlYXNlIG5vdGlmeSB0aGUgc2VuZGVyIGJ5IHBob25lIG9y IGVtYWlsIGltbWVkaWF0ZWx5IGFuZCBkZWxldGUgaXQhKioqKioqLyMNCg== --_000_2f27b5bc596c451e84f65c3c32fc3aa7xiaomicom_ Content-Type: text/html; charset="gb2312" Content-Transfer-Encoding: quoted-printable

= >From mboxrd@z Thu Jan  1 00:00:00 1970

= Return-Path: <owner-linux-mm@kvack.org>

= X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on

=         aws-us-west-2-korg-lkml-1.web.co= deaurora.org

= Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17])=

=         by smtp.lore.kernel.org (Postfix= ) with ESMTP id 8E415C4332F

=         for <linux-mm@archiver.kernel= .org>; Fri, 15 Dec 2023 07:42:32 +0000 (UTC)

= Received: by kanga.kvack.org (Postfix)

=         id 2AA048D011B; Fri, 15 Dec 2023= 02:42:32 -0500 (EST)

= Received: by kanga.kvack.org (Postfix, from userid 40)

=         id 25A3F8D0103; Fri, 15 Dec 2023= 02:42:32 -0500 (EST)

= X-Delivered-To: int-list-linux-mm@kvack.org

= Received: by kanga.kvack.org (Postfix, from userid 63042)=

=         id 0FAAE8D011B; Fri, 15 Dec 2023= 02:42:32 -0500 (EST)

= X-Delivered-To: linux-mm@kvack.org

= Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40= .44.17])

=         by kanga.kvack.org (Postfix) wit= h ESMTP id 015488D0103

=         for <linux-mm@kvack.org>; = Fri, 15 Dec 2023 02:42:31 -0500 (EST)

= Received: from smtpin06.hostedemail.com (a10.router.float.18 [10.200.18.1])=

=         by unirelay06.hostedemail.com (P= ostfix) with ESMTP id C3ED6A1473

=         for <linux-mm@kvack.org>; = Fri, 15 Dec 2023 07:42:31 +0000 (UTC)

= X-FDA: 81568260102.06.332ED91

= Received: from mgamail.intel.com (mgamail.intel.com [134.134.136.20])<= /o:p>

=         by imf18.hostedemail.com (Postfi= x) with ESMTP id 7E84E1C0013

=         for <linux-mm@kvack.org>; = Fri, 15 Dec 2023 07:42:28 +0000 (UTC)

= Authentication-Results: imf18.hostedemail.com;

=         dkim=3Dpass header.d=3Dintel.com= header.s=3DIntel header.b=3DGRCP+hgl;

=         spf=3Dpass (imf18.hostedemail.co= m: domain of aravinda.prasad@intel.com designates 134.134.136.20 as permitt= ed sender) smtp.mailfrom=3Daravinda.prasad@intel.com;

=         dmarc=3Dpass (policy=3Dnone) hea= der.from=3Dintel.com

= ARC-Message-Signature: i=3D1; a=3Drsa-sha256; c=3Drelaxed/relaxed; d=3Dhost= edemail.com;

=         s=3Darc-20220608; t=3D1702626149= ;

=         h=3Dfrom:from:sender:reply-to:su= bject:subject:date:date:

=         message-id:message-id:to:to:cc:c= c:mime-version:mime-version:

=         content-type:content-type:<= /o:p>

=         content-transfer-encoding:conten= t-transfer-encoding:in-reply-to:

=         references:dkim-signature; bh=3D= Wy4maTp3FvZJPQpK4P6LsDTA5xIj7NHl9T0HbhkL9P8=3D;

=         b=3DNeE4C9vWxoUWOS0ggq4DANoqevpO= 7pdntFz0IDSkK9aoi2z7p4oPBmjNb4b99b1S2oWIr7

=         xm0r7BanY/8cn3g9UYvOmZCtJMhFhHR2= A1obE1Ra6B5UxcNni+aKvZvuMFJzO4r6ROxp5G

=         UMAGX1SdJNVxoaWu/JlVpLFPai7VxNY= =3D

= ARC-Seal: i=3D1; s=3Darc-20220608; d=3Dhostedemail.com; t=3D1702626149; a= =3Drsa-sha256;

=         cv=3Dnone;

=         b=3DHA9TVxgaSrSB6ocUwC+vkea&= #43;3BDfFrGoUFj9UFeI4c3XohbSo/oHCTAVnQph7LfGeoH4hN

=         EMev80NQFWzg4V/4k5GRZ4vPkz67VDym= Kr2r/c+tInFyH2uTkWd2L7CsLPxfweulH8Bs3v

=         VW59/+1ZumNFAI9+sCK73O38= iRz7I/Y=3D

= ARC-Authentication-Results: i=3D1;

=         imf18.hostedemail.com;

=         dkim=3Dpass header.d=3Dintel.com= header.s=3DIntel header.b=3DGRCP+hgl;

=         spf=3Dpass (imf18.hostedemail.co= m: domain of aravinda.prasad@intel.com designates 134.134.136.20 as permitt= ed sender) smtp.mailfrom=3Daravinda.prasad@intel.com;

=         dmarc=3Dpass (policy=3Dnone) hea= der.from=3Dintel.com

= DKIM-Signature: v=3D1; a=3Drsa-sha256; c=3Drelaxed/simple;

=   d=3Dintel.com; i=3D@intel.com; q=3Ddns/txt; s=3DIntel;

=   t=3D1702626148; x=3D1734162148;

=   h=3Dfrom:to:cc:subject:date:message-id:mime-version:

=    content-transfer-encoding;

=   bh=3D5yeRH864DCWoHH5VGhWvjXrR53z9cs1Wa1o3OaEo9mk=3D;

=   b=3DGRCP+hglmyXrQvtRegbwnie32aMmxR8s2AyL1g/ABX56IdsgRtjpmGb6

=    28IQebcgxHmw+F4BfpBsFZfkdcg6u+T2MddfnYTcklebirAilfVp4A= XAK

=    dcthPX6OiD295pAhRvnh1qu3VevVLtUbA2dsOMsIp2YGzuLsbRVhdMiC9=

=    iNGC1WOCAF2MWSJm0gnjbzeFU1Z/AuoATtRp0UaOHgqpDKRwbQzOiGJxL=

=    cixrQEK27lI8/gGk6drstARDhi5F7RhweUmzCkd5USLAdRwcQhqCOyuiD=

=    a+4Dmo/m0bMjpDeG+dv61JqnersnQ1WytgcXJr1b6EzcPQiE5I85e8= yyj

=    Q=3D=3D;

= X-IronPort-AV: E=3DMcAfee;i=3D"6600,9927,10924"; a=3D"385660= 900"

= X-IronPort-AV: E=3DSophos;i=3D"6.04,278,1695711600";

=    d=3D"scan'208";a=3D"385660900"

= Received: from orsmga001.jf.intel.com ([10.7.209.18])

=   by orsmga101.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384= ; 14 Dec 2023 23:42:26 -0800

= X-ExtLoop1: 1

= X-IronPort-AV: E=3DMcAfee;i=3D"6600,9927,10924"; a=3D"808877= 437"

= X-IronPort-AV: E=3DSophos;i=3D"6.04,278,1695711600";

=    d=3D"scan'208";a=3D"808877437"

= Received: from adr-par-inspur1.iind.intel.com ([10.223.93.209])<= /span>

=   by orsmga001-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-S= HA384; 14 Dec 2023 23:42:22 -0800

= From: Aravinda Prasad <aravinda.prasad@intel.com>

= To: damon@lists.linux.dev,

=         linux-mm@kvack.org,

=         sj@kernel.org,=

=         linux-kernel@vger.kernel.org

= Cc: aravinda.prasad@intel.com,

=         s2322819@ed.ac.uk,

=         sandeep4.kumar@intel.com,

=         ying.huang@intel.com,=

=         dave.hansen@intel.com,

=         dan.j.williams@intel.com,

=         sreenivas.subramoney@intel.com,<= o:p>

=         antti.kervinen@intel.com,

=         alexander.kanevskiy@intel.com,

=         Alan Nair <alan.nair@intel.co= m>

= Subject: mm/DAMON: Profiling enhancements for DAMON

= Date: Fri, 15 Dec 2023 13:16:19 +0530

= Message-Id: <20231215074619.173787-1-aravinda.prasad@intel.com><= /o:p>

= X-Mailer: git-send-email 2.21.3

= MIME-Version: 1.0

= Content-Type: text/plain; charset=3DUTF-8

= Content-Transfer-Encoding: 8bit

= X-Stat-Signature: njd78ou6rf9ifi3rdbxenntr3pxo4ykx

= X-Rspamd-Server: rspam10

= X-Rspamd-Queue-Id: 7E84E1C0013

= X-Rspam-User:

= X-HE-Tag: 1702626148-429191

= X-HE-Meta: U2FsdGVkX1+6dS+zzuYhUKK1fckjYonolsfOKwHIRdhlL3PmF2YZV12/= IQuMHZjBoOubfsb0wnqWad0ehMjxTfbBQwgWk3dV5uG3Y4IbbvU5tLc8qbZnO0Ee4Zp7Zh19vTj= +2akAYLC/JyPR7A4e5DA4GzdIcWn2kBFzu5S7vsSFGWEKZxS9ehtm1A3lWjV2Jpb7oktgik= efeh/9enpKiNwQoVSJ1VLE5tZZ2W09cwpEX6qKKf3geQoCaNZm1WlwO3bSmWSIDFBspALGwgTFH= s150SxeHcyJrGf+PwGO2amK6PCwR3Chc5ndRhp1UIfy25oWaRqtTykpse+rxxdhOXYI= 5VbU/ZeGc5YrumEjE9fSjEt0JEFo0Z9MdqVhOPshVU7q1VNW1RGbzJ8/49JRVPqnMMUPv/QmF7E= cESNPdEl4FHJHyTLdp60/IJMQFD9qSfxiQ6FJa256i+FhCfRAdGL+kKvRj4DOVTvU2z= u1p0xgXWavQZIXiDVxNaC2unF6Z4PHv8HArGLID/I8H0SDiZ7GjBchZ4DYD4Fi3M5hYv+N2= /5pvtE+UivZgBgPii8G4Z8g11Fx7XqAKYYD+YkZO+uORJPBd3gtHfJMh2HKrm8W= faC5EMeCf4XSCwM3b9RyPLmvJ2UyEePsqg7HqV8THTsheJ6WR+qiVYumw2c/vTlIifJAfLg= 5sL0+Gwv29OLZpGiZbCo2hs7TtLU7b+ZQij+FTEnMWrxBR+obk1CBeB+= ;8rD65Z6M9tHMzSYRoXlYtKPqUFM7+l1yWsOUpmICZthaVC2O2hKlGrI0Uoh8ntDyWcfCkO= P9pSl0Vsa51KcWBj2MwxaRQaFhgH6YQohotlAZYnLo/Kr5LVu1+RFG0Y6BImlrs7U+F= kBpaoWqg4tT6RQpp3yIaTlUHUJPno28JhkGhp12CfAMlz7Ppwcm4Jz8+UX7CLEOgcPp9jCO= xGSasCuyNX4yYjIKlnluTYfc

= 0IBo9o9n

= m7YFShtzmzn4RpUsinYh0MO1JKUeUxCNVFCpj2OSch0n40KxF9nfikd6VMKaIrsykQzb5bzypGW= gMfBFg9N/p2/bcmYmfQ4XSTmG0qWTSt8f/IIt/wY1UVg6orUmxcVhIgCACBaDqhVsu8gK8VR1nQ= xP9GLtmpJwWcG369lNsoSrBK9NNIXccLl47c15GnXzOmOS3

= X-Bogosity: Ham, tests=3Dbogofilter, spamicity=3D0.000000, version=3D1.2.4<= o:p>

= Sender: owner-linux-mm@kvack.org

= Precedence: bulk

= X-Loop: owner-majordomo@kvack.org

= List-ID: <linux-mm.kvack.org>

= List-Subscribe: <mailto:majordomo@kvack.org>

= List-Unsubscribe: <mailto:majordomo@kvack.org>

=  

= DAMON randomly samples one or more pages in every region and tracks

= accesses to them using the ACCESSED bit in PTE (or PMD for 2MB pages).=

= When the region size is large (e.g., several GBs), which is common

= for large footprint applications, detecting whether the region is

= accessed or not completely depends on whether the pages that are=

= actively accessed in the region are picked during random sampling.

= If such pages are not picked for sampling, DAMON fails to identify

= the region as accessed. However, increasing the sampling rate or=

= increasing the number of regions increases CPU overheads of kdamond.

=  

= This patch proposes profiling different levels of the application=A1=AFs

= page table tree to detect whether a region is accessed or not. This

= patch is based on the observation that, when the accessed bit for a

= page is set, the accessed bits at the higher levels of the page table<= /o:p>

= tree (PMD/PUD/PGD) corresponding to the path of the page table walk

= are also set. Hence, it is efficient to  check the accessed bits at

= the higher levels of the page table tree to detect whether a region

= is accessed or not. For example, if the access bit for a PUD entry

= is set, then one or more pages in the 1GB PUD subtree is accessed as

= each PUD entry covers 1GB mapping. Hence, instead of sampling

= thousands of 4K/2M pages to detect accesses in a large region,

= sampling at the higher level of page table tree is faster and efficient.

=  

= This patch is based on 6.6.3 kernel.

=  

= TODO: Support 5-level page table tree

=  

= Evaluation:

=  

= - MASIM benchmark with 1GB, 10GB, 100GB footprint with 10% hot data

=   and 5TB with 10GB hot data.

= - DAMON: 5ms sampling, 200ms aggregation interval. Rest all

=   parameters set to default value.

= - DAMON+PTP: Page table profiling applied to DAMON with the above<= /o:p>

=   parameters.

=  

= Profiling efficiency in detecting hot data [1]:

=  

= Footprint      1GB     10GB&nb= sp;   100GB   5TB

= ---------------------------------------------

= DAMON          >90% &n= bsp;  <50%    ~0%      0%

= DAMON+PTP      >90%    >9= 0%    >90%    >90%

=  

= CPU overheads (in billion cycles) for kdamond:

=  

= Footprint      1GB     10GB&nb= sp;   100GB   5TB

= ---------------------------------------------

= DAMON          1.15  = ;  19.53   3.52    9.55

= DAMON+PTP      0.83    3.20&nbs= p;  1.27    2.55

=  

= A detailed explanation and evaluation can be found in the arXiv paper:=

= [1] https://arxiv.org/pdf/2311.10275.pdf

=  

= Regards,

= Aravinda

=  

= Signed-off-by: Alan Nair <alan.nair@intel.com>

= Signed-off-by: Sandeep Kumar <sandeep4.kumar@intel.com>

= Signed-off-by: Aravinda Prasad <aravinda.prasad@intel.com>=

= ---

= arch/x86/include/asm/pgtable.h |   17 +++++

= include/linux/damon.h         = |   13 ++++

= include/linux/pgtable.h        | &n= bsp; 31 ++++++++

= mm/damon/core.c           = ;     |   28 +++++&#= 43;++

= mm/damon/vaddr.c          = ;     |  146 +++++++&#= 43;++++++++++++++&#= 43;++++++++++++++--= -

= 5 files changed, 223 insertions(+), 12 deletions(-)

=  

= diff --git a/arch/x86/include/asm/pgtable.h b/arch/x86/include/asm/pgtable.= h

= index e02b179ec..accdabb95 100644

= --- a/arch/x86/include/asm/pgtable.h

= +++ b/arch/x86/include/asm/pgtable.h

= @@ -169,6 +169,11 @@ static inline int pud_young(pud_t pud)<= /span>

=        return pud_flags(pud) & _PAGE_ACCE= SSED;

= }

=

= +static inline int pgd_young(pgd_t pgd)

= +{

= +       return pgd_flags(pgd) & _PAGE= _ACCESSED;

= +}

= +

= static inline int pte_write(pte_t pte)

= {

=        /*

= @@ -681,6 +686,18 @@ static inline pud_t pud_mkwrite(pud_t pud)

=        return pud_clear_saveddirty(pud);=

= }

=

= +static inline pgd_t pgd_clear_flags(pgd_t pgd, pgdval_t clear)

= +{

= +       pgdval_t v =3D native_pgd_val(pgd= );

= +

= +       return native_make_pgd(v & ~c= lear);

= +}

= +

= +static inline pgd_t pgd_mkold(pgd_t pgd)

= +{

= +       return pgd_clear_flags(pgd, _PAGE= _ACCESSED);

= +}

= +

= #ifdef CONFIG_HAVE_ARCH_SOFT_DIRTY

= static inline int pte_soft_dirty(pte_t pte)

= {

= diff --git a/include/linux/damon.h b/include/linux/damon.h

= index c70cca8a8..8521a62ec 100644

= --- a/include/linux/damon.h

= +++ b/include/linux/damon.h

= @@ -19,6 +19,14 @@

= /* Max priority score for DAMON-based operation schemes */

= #define DAMOS_MAX_SCORE        &nbs= p;     (99)

=

= +/* DAMON profiling levels */

= +enum damon_profile_level {

= +       PTE_LEVEL,

= +       PMD_LEVEL,

= +       PUD_LEVEL,

= +       PGD_LEVEL,

= +};

= +

= /* Get a random number in [l, r) */

= static inline unsigned long damon_rand(unsigned long l, unsigned long r)

= {

= @@ -57,6 +65,8 @@ struct damon_region {

=        unsigned int age;

= /* private: Internal value for age calculation. */

=        unsigned int last_nr_accesses;

= +       /* Page table profiling level */<= o:p>

= +       enum damon_profile_level profile_= level;

= };

=

=  /**

= @@ -656,6 +666,9 @@ int damon_stop(struct damon_ctx **ctxs, int nr_ctxs= );

= int damon_set_region_biggest_system_ram_default(struct damon_target *t,

=             &nb= sp;            =      unsigned long *start, unsigned long *end);

=

= +enum damon_profile_level pick_profile_level(unsigned long start,<= /o:p>

= +           &nbs= p;  unsigned long end, unsigned long addr);

= +

= #endif /* CONFIG_DAMON */

=

=  #endif /* _DAMON_H */

= diff --git a/include/linux/pgtable.h b/include/linux/pgtable.h

= index af7639c3b..82d5f67ea 100644

= --- a/include/linux/pgtable.h

= +++ b/include/linux/pgtable.h

= @@ -935,6 +935,37 @@ static inline void arch_swap_restore(swp_entry_t e= ntry, struct folio *folio)

= #define flush_tlb_fix_spurious_fault(vma, address, ptep) flush_tlb_page(vma= , address)

= #endif

=

= +/*

= + * When walking page tables, get the address of the current/passed bou= ndary,

= + * or the start address of the range if that comes earlier.=

= + */

= +

= +#define pgd_addr_start(addr, start)      = ;           \<= /span>

= +({     unsigned long __boundary =3D (addr) & P= GDIR_MASK;       \

= +       (__boundary > start) ? __bound= ary : (start);  \

= +})

= +

= +#ifndef p4d_addr_start

= +#define p4d_addr_start(addr, start)      = ;           \<= /span>

= +({     unsigned long __boundary =3D (addr) & P= 4D_MASK; \

= +       (__boundary > start) ? __bound= ary : (start);  \

= +})

= +#endif

= +

= +#ifndef pud_addr_start

= +#define pud_addr_start(addr, start)      = ;           \<= /span>

= +({     unsigned long __boundary =3D (addr) & P= UD_MASK; \

= +       (__boundary > start) ? __bound= ary : (start);  \

= +})

= +#endif

= +

= +#ifndef pmd_addr_start

= +#define pmd_addr_start(addr, start)      = ;           \<= /span>

= +({     unsigned long __boundary =3D (addr) & P= MD_MASK; \

= +       (__boundary > start) ? __bound= ary : (start);  \

= +})

= +#endif

= +

= /*

=   * When walking page tables, get the address of the next boundary,

=   * or the end address of the range if that comes earlier.  Altho= ugh no

= diff --git a/mm/damon/core.c b/mm/damon/core.c

= index fd5be73f6..2a7d5c041 100644

= --- a/mm/damon/core.c

= +++ b/mm/damon/core.c

= @@ -31,6 +31,33 @@ static struct damon_operations damon_registered_ops[= NR_DAMON_OPS];

=

=  static struct kmem_cache *damon_region_cache __ro_after_init;

=

= +/* Pick the highest possible page table profiling level for the

= + * region corresponding to addr

= + */

= +enum damon_profile_level pick_profile_level(unsigned long start,<= /o:p>

= +       unsigned long end, unsigned long = addr)

= +{

= +       enum damon_profile_level level = =3D PTE_LEVEL;

= +

= +       if (pmd_addr_start(addr, (start) = - 1) < start

= +           &nbs= p;  || pmd_addr_end(addr, (end) + 1) > end)

= +           &nbs= p;  goto out;

= +       level =3D PMD_LEVEL;

= +

= +       if (pud_addr_start(addr, (start) = - 1) < start

= +           &nbs= p;  || pud_addr_end(addr, (end) + 1) > end)

= +           &nbs= p;  goto out;

= +       level =3D PUD_LEVEL;

= +

= +       if (pgd_addr_start(addr, (start) = - 1) < start

= +           &nbs= p;  || pgd_addr_end(addr, (end) + 1) > end)

= +           &nbs= p;  goto out;

= +       level =3D PGD_LEVEL;

= +

= +out:

= +       return level;

= +}

= +

= /* Should be called under damon_ops_lock with id smaller than NR_DAMON_OPS = */

= static bool __damon_is_registered_ops(enum damon_ops_id id)

= {

= @@ -132,6 +159,7 @@ struct damon_region *damon_new_region(unsigned long= start, unsigned long end)

=

=         region->age =3D 0;=

=        region->last_nr_accesses =3D 0;

= +       region->profile_level =3D PTE_= LEVEL;

=

=         return region;=

= }

= diff --git a/mm/damon/vaddr.c b/mm/damon/vaddr.c

= index cf8a9fc5c..b71221b3e 100644

= --- a/mm/damon/vaddr.c

= +++ b/mm/damon/vaddr.c

= @@ -387,16 +387,76 @@ static int damon_mkold_hugetlb_entry(pte_t *pte, = unsigned long hmask,

= #define damon_mkold_hugetlb_entry NULL

= #endif /* CONFIG_HUGETLB_PAGE */

=

= -static const struct mm_walk_ops damon_mkold_ops =3D {

= -       .pmd_entry =3D damon_mkold_pmd_entry,=

= +static int damon_mkold_pmd(pmd_t *pmd, unsigned long addr,<= /span>

= +       unsigned long next, struct mm_wal= k *walk)

= +{

= +       spinlock_t *ptl;

= +

= +       if (!pmd_present(*pmd) || pmd_non= e(*pmd))

= +           &nbs= p;  goto out;

= +

= +       ptl =3D pmd_lock(walk->mm, pmd= );

= +       if (pmd_young(*pmd))

= +           &nbs= p;  *pmd =3D pmd_mkold(*pmd);

= +

= +       spin_unlock(ptl);

= +

= +out:

= +       return 0;

= +}

= +

= +static int damon_mkold_pud(pud_t *pud, unsigned long addr,<= /span>

= +       unsigned long next, struct mm_wal= k *walk)

= +{

= +       spinlock_t *ptl;

= +

= +       if (!pud_present(*pud) || pud_non= e(*pud))

= +           &nbs= p;  goto out;

= +

= +       ptl =3D pud_lock(walk->mm, pud= );

= +       if (pud_young(*pud))

= +           &nbs= p;  *pud =3D pud_mkold(*pud);

= +

= +       spin_unlock(ptl);

= +

= +out:

= +       return 0;

= +}

= +

= +static int damon_mkold_pgd(pgd_t *pgd, unsigned long addr,<= /span>

= +       unsigned long next, struct mm_wal= k *walk)

= +{

= +

= +       if (!pgd_present(*pgd) || pgd_non= e(*pgd))

= +           &nbs= p;  goto out;

= +

= +       spin_lock(&pgd_lock);

= +       if (pgd_young(*pgd))

= +           &nbs= p;  *pgd =3D pgd_mkold(*pgd);

= +

= +       spin_unlock(&pgd_lock);<= /o:p>

= +

= +out:

= +       return 0;

= +}

= +

= +static const struct mm_walk_ops damon_mkold_ops[] =3D {

= +       {.pmd_entry =3D damon_mkold_pmd_e= ntry,

=        .hugetlb_entry =3D damon_mkold_hugetlb= _entry,

= -       .walk_lock =3D PGWALK_RDLOCK,

= +       .walk_lock =3D PGWALK_RDLOCK},

= +       {.pmd_entry =3D damon_mkold_pmd},=

= +       {.pud_entry =3D damon_mkold_pud},=

= +       {.pgd_entry =3D damon_mkold_pgd},=

= };

=

= -static void damon_va_mkold(struct mm_struct *mm, unsigned long addr)<= /o:p>

= +static void damon_va_mkold(struct mm_struct *mm, struct damon_region *= r)

= {

= +       unsigned long addr =3D r->samp= ling_addr;

= +

= +       r->profile_level =3D pick_prof= ile_level(r->ar.start, r->ar.end, addr);

= +

=        mmap_read_lock(mm);<= /p>

= -       walk_page_range(mm, addr, addr + = 1, &damon_mkold_ops, NULL);

= +       walk_page_range(mm, addr, addr &#= 43; 1, damon_mkold_ops + r->profile_level, NULL);<= /p>

=        mmap_read_unlock(mm);

= }

=

= @@ -409,7 +469,7 @@ static void __damon_va_prepare_access_check(struct = mm_struct *mm,

= {

=        r->sampling_addr =3D damon_rand(r-&= gt;ar.start, r->ar.end);

=

= -       damon_va_mkold(mm, r->sampling_add= r);

= +       damon_va_mkold(mm, r);=

= }

=

=  static void damon_va_prepare_access_checks(struct damon_ctx *ctx)

= @@ -531,22 +591,84 @@ static int damon_young_hugetlb_entry(pte_t *pte, = unsigned long hmask,

= #define damon_young_hugetlb_entry NULL

= #endif /* CONFIG_HUGETLB_PAGE */

=

= -static const struct mm_walk_ops damon_young_ops =3D {

= -       .pmd_entry =3D damon_young_pmd_entry,=

= +static int damon_young_pmd(pmd_t *pmd, unsigned long addr,<= /span>

= +           &nbs= p;  unsigned long next, struct mm_walk *walk)

= +{

= +       spinlock_t *ptl;

= +       struct damon_young_walk_private *= priv =3D walk->private;

= +

= +       if (!pmd_present(*pmd) || pmd_non= e(*pmd))

= +           &nbs= p;  goto out;

= +

= +       ptl =3D pmd_lock(walk->mm, pmd= );

= +       if (pmd_young(*pmd) || mmu_notifi= er_test_young(walk->mm, addr))

= +           &nbs= p;  priv->young =3D true;

= +

= +       *priv->folio_sz =3D (1UL <&= lt; PMD_SHIFT);

= +       spin_unlock(ptl);

= +out:

= +       return 0;

= +}

= +

= +static int damon_young_pud(pud_t *pud, unsigned long addr,<= /span>

= +           &nbs= p;  unsigned long next, struct mm_walk *walk)

= +{

= +       spinlock_t *ptl;

= +       struct damon_young_walk_private *= priv =3D walk->private;

= +

= +       if (!pud_present(*pud) || pud_non= e(*pud))

= +           &nbs= p;  goto out;

= +

= +       ptl =3D pud_lock(walk->mm, pud= );

= +       if (pud_young(*pud) || mmu_notifi= er_test_young(walk->mm, addr))

= +           &nbs= p;  priv->young =3D true;

= +

= +       *priv->folio_sz =3D (1UL <&= lt; PUD_SHIFT);

= +

= +       spin_unlock(ptl);

= +out:

= +       return 0;

= +}

= +

= +static int damon_young_pgd(pgd_t *pgd, unsigned long addr,<= /span>

= +           &nbs= p;  unsigned long next, struct mm_walk *walk)

= +{

= +       struct damon_young_walk_private *= priv =3D walk->private;

= +

= +       if (!pgd_present(*pgd) || pgd_non= e(*pgd))

= +           &nbs= p;  goto out;

= +

= +       spin_lock(&pgd_lock);

= +       if (pgd_young(*pgd) || mmu_notifi= er_test_young(walk->mm, addr))

= +           &nbs= p;  priv->young =3D true;

= +

= +       *priv->folio_sz =3D (1UL <&= lt; PGDIR_SHIFT);

= +

= +       spin_unlock(&pgd_lock);<= /o:p>

= +out:

= +       return 0;

= +}

= +

= +static const struct mm_walk_ops damon_young_ops[] =3D {

= +       {.pmd_entry =3D damon_young_pmd_e= ntry,

=        .hugetlb_entry =3D damon_young_hugetlb= _entry,

= -       .walk_lock =3D PGWALK_RDLOCK,

= +       .walk_lock =3D PGWALK_RDLOCK},

= +       {.pmd_entry =3D damon_young_pmd},=

= +       {.pud_entry =3D damon_young_pud},=

= +       {.pgd_entry =3D damon_young_pgd},=

= };

=

= -static bool damon_va_young(struct mm_struct *mm, unsigned long addr,<= /o:p>

= +static bool damon_va_young(struct mm_struct *mm, struct damon_region *= r,

=             &nb= sp; unsigned long *folio_sz)

= {

= +       unsigned long addr =3D r->samp= ling_addr;

=        struct damon_young_walk_private arg = =3D {

=              &n= bsp; .folio_sz =3D folio_sz,

=             &nb= sp; .young =3D false,

=        };

=

=         mmap_read_lock(mm);

= -       walk_page_range(mm, addr, addr + = 1, &damon_young_ops, &arg);

= +       walk_page_range(mm, addr, addr &#= 43; 1, damon_young_ops + r->profile_level, &arg);

=        mmap_read_unlock(mm);

=        return arg.young;

= }

= @@ -572,7 +694,7 @@ static void __damon_va_check_access(struct mm_struc= t *mm,

=             &nb= sp; return;

=        }

=

= -       last_accessed =3D damon_va_young(mm, = r->sampling_addr, &last_folio_sz);

= +       last_accessed =3D damon_va_young(= mm, r, &last_folio_sz);

=        if (last_accessed)

=             &nb= sp; r->nr_accesses++;

 

Hi,Aravinda.prasad,<= /span>

 

Recently, we are researching th= is patch, what do you think of applying this patch to Arm64 ? and Do you ha= ve any suggestions?  

=  

Thank= s!

#/******=B1=BE=D3=CA=BC=FE=BC=B0=C6=E4=B8=BD=BC=FE=BA=AC=D3=D0=D0=A1=C3=D7= =B9=AB=CB=BE=B5=C4=B1=A3=C3=DC=D0=C5=CF=A2=A3=AC=BD=F6=CF=DE=D3=DA=B7=A2=CB= =CD=B8=F8=C9=CF=C3=E6=B5=D8=D6=B7=D6=D0=C1=D0=B3=F6=B5=C4=B8=F6=C8=CB=BB=F2= =C8=BA=D7=E9=A1=A3=BD=FB=D6=B9=C8=CE=BA=CE=C6=E4=CB=FB=C8=CB=D2=D4=C8=CE=BA= =CE=D0=CE=CA=BD=CA=B9=D3=C3=A3=A8=B0=FC=C0=A8=B5=AB=B2=BB=CF=DE=D3=DA=C8=AB= =B2=BF=BB=F2=B2=BF=B7=D6=B5=D8=D0=B9=C2=B6=A1=A2=B8=B4=D6=C6=A1=A2=BB=F2=C9= =A2=B7=A2=A3=A9=B1=BE=D3=CA=BC=FE=D6=D0=B5=C4=D0=C5=CF=A2=A1=A3=C8=E7=B9=FB= =C4=FA=B4=ED=CA=D5=C1=CB=B1=BE=D3=CA=BC=FE=A3=AC=C7=EB=C4=FA=C1=A2=BC=B4=B5= =E7=BB=B0=BB=F2=D3=CA=BC=FE=CD=A8=D6=AA=B7=A2=BC=FE=C8=CB=B2=A2=C9=BE=B3=FD= =B1=BE=D3=CA=BC=FE=A3=A1 This e-mail and its attachments contain confidenti= al information from XIAOMI, which is intended only for the person or entity= whose address is listed above. Any use of the information contained herein in any way (i= ncluding, but not limited to, total or partial disclosure, reproduction, or= dissemination) by persons other than the intended recipient(s) is prohibit= ed. If you receive this e-mail in error, please notify the sender by phone or email immediately and delete i= t!******/# --_000_2f27b5bc596c451e84f65c3c32fc3aa7xiaomicom_--