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 A50AFC4167B for ; Wed, 29 Nov 2023 12:30:09 +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:In-Reply-To:From:References:Cc:To: Subject:MIME-Version:Date:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=rQ5Ktf+tMmYF0MAnFgK2XqgikVieZPgQE/k4GubqVaM=; b=z8Ck6VNBa2alxV YfWBfKjgN2Qwa6lEqvRYp7esIJcQ7RnppQqXX8esGDAyiFoSpfITw0iIt3sifc2HEKMaPevhRL7ze B0StNiIadmXJqHvixjY/Ajv+fy1N99QHFNhA6O8V1IBfXe1dptvTh5wfrTEwPx8p4q1KswN6vwYaB VPQ3y/9Jmh8Xw7TUCfPYtLlNhDc/yfHzrixQulNLnbxYrEVGC8vW+EOKI90P8ffVy//Yv1XUkyY0u DqJkzuE1ZgWqL2n0MiDegaSGRfxYLxLkO0ynLu9LCKZZJzjcYIQqc2R77yHwNpnbKZsAEdWtmTvjD UOMiXncNxceDG5LzT0Fg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1r8JhJ-008JwV-1X; Wed, 29 Nov 2023 12:29:45 +0000 Received: from foss.arm.com ([217.140.110.172]) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1r8JhF-008JvI-32 for linux-arm-kernel@lists.infradead.org; Wed, 29 Nov 2023 12:29:43 +0000 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 645A62F4; Wed, 29 Nov 2023 04:30:26 -0800 (PST) Received: from [10.57.70.211] (unknown [10.57.70.211]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id E85733F5A1; Wed, 29 Nov 2023 04:29:35 -0800 (PST) Message-ID: <02d85331-eaa0-4d76-a3d6-ea5eb18b683c@arm.com> Date: Wed, 29 Nov 2023 12:29:34 +0000 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v2 01/14] mm: Batch-copy PTE ranges during fork() Content-Language: en-GB To: Barry Song <21cnbao@gmail.com> Cc: akpm@linux-foundation.org, andreyknvl@gmail.com, anshuman.khandual@arm.com, ardb@kernel.org, catalin.marinas@arm.com, david@redhat.com, dvyukov@google.com, glider@google.com, james.morse@arm.com, jhubbard@nvidia.com, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, mark.rutland@arm.com, maz@kernel.org, oliver.upton@linux.dev, ryabinin.a.a@gmail.com, suzuki.poulose@arm.com, vincenzo.frascino@arm.com, wangkefeng.wang@huawei.com, will@kernel.org, willy@infradead.org, yuzenghui@huawei.com, yuzhao@google.com, ziy@nvidia.com References: <20231115163018.1303287-2-ryan.roberts@arm.com> <20231127055414.9015-1-v-songbaohua@oppo.com> <755343a1-ce94-4d38-8317-0925e2dae3bc@arm.com> From: Ryan Roberts In-Reply-To: X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20231129_042942_072637_FBD05988 X-CRM114-Status: GOOD ( 30.60 ) X-BeenThere: linux-arm-kernel@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-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org T24gMjgvMTEvMjAyMyAxOTowMCwgQmFycnkgU29uZyB3cm90ZToKPiBPbiBXZWQsIE5vdiAyOSwg MjAyMyBhdCAxMjowMOKAr0FNIFJ5YW4gUm9iZXJ0cyA8cnlhbi5yb2JlcnRzQGFybS5jb20+IHdy b3RlOgo+Pgo+PiBPbiAyOC8xMS8yMDIzIDAwOjExLCBCYXJyeSBTb25nIHdyb3RlOgo+Pj4gT24g TW9uLCBOb3YgMjcsIDIwMjMgYXQgMTA6MjTigK9QTSBSeWFuIFJvYmVydHMgPHJ5YW4ucm9iZXJ0 c0Bhcm0uY29tPiB3cm90ZToKPj4+Pgo+Pj4+IE9uIDI3LzExLzIwMjMgMDU6NTQsIEJhcnJ5IFNv bmcgd3JvdGU6Cj4+Pj4+PiArY29weV9wcmVzZW50X3B0ZXMoc3RydWN0IHZtX2FyZWFfc3RydWN0 ICpkc3Rfdm1hLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnNyY192bWEsCj4+Pj4+PiArICAgICAg ICAgICAgICBwdGVfdCAqZHN0X3B0ZSwgcHRlX3QgKnNyY19wdGUsCj4+Pj4+PiArICAgICAgICAg ICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAo+Pj4+Pj4gKyAgICAg ICAgICAgICAgaW50ICpyc3MsIHN0cnVjdCBmb2xpbyAqKnByZWFsbG9jKQo+Pj4+Pj4gIHsKPj4+ Pj4+ICAgICAgc3RydWN0IG1tX3N0cnVjdCAqc3JjX21tID0gc3JjX3ZtYS0+dm1fbW07Cj4+Pj4+ PiAgICAgIHVuc2lnbmVkIGxvbmcgdm1fZmxhZ3MgPSBzcmNfdm1hLT52bV9mbGFnczsKPj4+Pj4+ ICAgICAgcHRlX3QgcHRlID0gcHRlcF9nZXQoc3JjX3B0ZSk7Cj4+Pj4+PiAgICAgIHN0cnVjdCBw YWdlICpwYWdlOwo+Pj4+Pj4gICAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvOwo+Pj4+Pj4gKyAgICBp bnQgbnIgPSAxOwo+Pj4+Pj4gKyAgICBib29sIGFub247Cj4+Pj4+PiArICAgIGJvb2wgYW55X2Rp cnR5ID0gcHRlX2RpcnR5KHB0ZSk7Cj4+Pj4+PiArICAgIGludCBpOwo+Pj4+Pj4KPj4+Pj4+ICAg ICAgcGFnZSA9IHZtX25vcm1hbF9wYWdlKHNyY192bWEsIGFkZHIsIHB0ZSk7Cj4+Pj4+PiAtICAg IGlmIChwYWdlKQo+Pj4+Pj4gKyAgICBpZiAocGFnZSkgewo+Pj4+Pj4gICAgICAgICAgICAgIGZv bGlvID0gcGFnZV9mb2xpbyhwYWdlKTsKPj4+Pj4+IC0gICAgaWYgKHBhZ2UgJiYgZm9saW9fdGVz dF9hbm9uKGZvbGlvKSkgewo+Pj4+Pj4gLSAgICAgICAgICAgIC8qCj4+Pj4+PiAtICAgICAgICAg ICAgICogSWYgdGhpcyBwYWdlIG1heSBoYXZlIGJlZW4gcGlubmVkIGJ5IHRoZSBwYXJlbnQgcHJv Y2VzcywKPj4+Pj4+IC0gICAgICAgICAgICAgKiBjb3B5IHRoZSBwYWdlIGltbWVkaWF0ZWx5IGZv ciB0aGUgY2hpbGQgc28gdGhhdCB3ZSdsbCBhbHdheXMKPj4+Pj4+IC0gICAgICAgICAgICAgKiBn dWFyYW50ZWUgdGhlIHBpbm5lZCBwYWdlIHdvbid0IGJlIHJhbmRvbWx5IHJlcGxhY2VkIGluIHRo ZQo+Pj4+Pj4gLSAgICAgICAgICAgICAqIGZ1dHVyZS4KPj4+Pj4+IC0gICAgICAgICAgICAgKi8K Pj4+Pj4+IC0gICAgICAgICAgICBmb2xpb19nZXQoZm9saW8pOwo+Pj4+Pj4gLSAgICAgICAgICAg IGlmICh1bmxpa2VseShwYWdlX3RyeV9kdXBfYW5vbl9ybWFwKHBhZ2UsIGZhbHNlLCBzcmNfdm1h KSkpIHsKPj4+Pj4+IC0gICAgICAgICAgICAgICAgICAgIC8qIFBhZ2UgbWF5IGJlIHBpbm5lZCwg d2UgaGF2ZSB0byBjb3B5LiAqLwo+Pj4+Pj4gLSAgICAgICAgICAgICAgICAgICAgZm9saW9fcHV0 KGZvbGlvKTsKPj4+Pj4+IC0gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb3B5X3ByZXNlbnRf cGFnZShkc3Rfdm1hLCBzcmNfdm1hLCBkc3RfcHRlLCBzcmNfcHRlLAo+Pj4+Pj4gLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHIsIHJzcywgcHJlYWxsb2Ms IHBhZ2UpOwo+Pj4+Pj4gKyAgICAgICAgICAgIGFub24gPSBmb2xpb190ZXN0X2Fub24oZm9saW8p Owo+Pj4+Pj4gKyAgICAgICAgICAgIG5yID0gZm9saW9fbnJfcGFnZXNfY29udF9tYXBwZWQoZm9s aW8sIHBhZ2UsIHNyY19wdGUsIGFkZHIsCj4+Pj4+PiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBlbmQsIHB0ZSwgJmFueV9kaXJ0eSk7Cj4+Pj4+Cj4+Pj4+IGlu IGNhc2Ugd2UgaGF2ZSBhIGxhcmdlIGZvbGlvIHdpdGggMTYgQ09OVFBURSBiYXNlcGFnZXMsIGFu ZCB1c2Vyc3BhY2UKPj4+Pj4gZG8gbWFkdmlzZShhZGRyICsgNEtCICogNSwgRE9OVE5FRUQpOwo+ Pj4+Cj4+Pj4gbml0OiBpZiB5b3UgYXJlIG9mZnNldHRpbmcgYnkgNSBwYWdlcyBmcm9tIGFkZHIs IHRoZW4gYmVsb3cgSSB0aGluayB5b3UgbWVhbgo+Pj4+IHBhZ2UwfnBhZ2U0IGFuZCBwYWdlNn4x NT8KPj4+Pgo+Pj4+Pgo+Pj4+PiB0aHVzLCB0aGUgNHRoIGJhc2VwYWdlIG9mIFBURSBiZWNvbWVz IFBURV9OT05FIGFuZCBmb2xpb19ucl9wYWdlc19jb250X21hcHBlZCgpCj4+Pj4+IHdpbGwgcmV0 dXJuIDE1LiBpbiB0aGlzIGNhc2UsIHdlIHNob3VsZCBjb3B5IHBhZ2UwfnBhZ2UzIGFuZCBwYWdl NX5wYWdlMTUuCj4+Pj4KPj4+PiBObyBJIGRvbid0IHRoaW5rIGZvbGlvX25yX3BhZ2VzX2NvbnRf bWFwcGVkKCkgd2lsbCByZXR1cm4gMTU7IHRoYXQncyBjZXJ0YWlubHkKPj4+PiBub3QgaG93IGl0 cyBpbnRlbmRlZCB0byB3b3JrLiBUaGUgZnVuY3Rpb24gaXMgc2Nhbm5pbmcgZm9yd2FyZHMgZnJv bSB0aGUgY3VycmVudAo+Pj4+IHB0ZSB1bnRpbCBpdCBmaW5kcyB0aGUgZmlyc3QgcHRlIHRoYXQg ZG9lcyBub3QgZml0IGluIHRoZSBiYXRjaCAtIGVpdGhlciBiZWNhdXNlCj4+Pj4gaXQgbWFwcyBh IFBGTiB0aGF0IGlzIG5vdCBjb250aWd1b3VzLCBvciBiZWNhdXNlIHRoZSBwZXJtaXNzaW9ucyBh cmUgZGlmZmVyZW50Cj4+Pj4gKGFsdGhvdWdoIHRoaXMgaXMgYmVpbmcgcmVsYXhlZCBhIGJpdDsg c2VlIGNvbnZlcnNhdGlvbiB3aXRoIERhdmlkSCBhZ2FpbnN0IHRoaXMKPj4+PiBzYW1lIHBhdGNo KS4KPj4+Pgo+Pj4+IFNvIHRoZSBmaXJzdCB0aW1lIHRocm91Z2ggdGhpcyBsb29wLCBmb2xpb19u cl9wYWdlc19jb250X21hcHBlZCgpIHdpbGwgcmV0dXJuIDUsCj4+Pj4gKHBhZ2UwfnBhZ2U0KSB0 aGVuIHRoZSBuZXh0IHRpbWUgdGhyb3VnaCB0aGUgbG9vcCB3ZSB3aWxsIGdvIHRocm91Z2ggdGhl Cj4+Pj4gIXByZXNlbnQgcGF0aCBhbmQgcHJvY2VzcyB0aGUgc2luZ2xlIHN3YXAgbWFya2VyLiBU aGVuIHRoZSAzcmQgdGltZSB0aHJvdWdoIHRoZQo+Pj4+IGxvb3AgZm9saW9fbnJfcGFnZXNfY29u dF9tYXBwZWQoKSB3aWxsIHJldHVybiAxMC4KPj4+Cj4+PiBvbmUgY2FzZSB3ZSBoYXZlIG1ldCBi eSBydW5uaW5nIGh1bmRyZWRzIG9mIHJlYWwgcGhvbmVzIGlzIGFzIGJlbG93LAo+Pj4KPj4+Cj4+ PiBzdGF0aWMgaW50Cj4+PiBjb3B5X3B0ZV9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRz dF92bWEsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqc3JjX3ZtYSwKPj4+ICAgICAgICAgICAgICAg IHBtZF90ICpkc3RfcG1kLCBwbWRfdCAqc3JjX3BtZCwgdW5zaWduZWQgbG9uZyBhZGRyLAo+Pj4g ICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBlbmQpCj4+PiB7Cj4+PiAgICAgICAgIC4uLgo+ Pj4gICAgICAgICBkc3RfcHRlID0gcHRlX2FsbG9jX21hcF9sb2NrKGRzdF9tbSwgZHN0X3BtZCwg YWRkciwgJmRzdF9wdGwpOwo+Pj4gICAgICAgICBpZiAoIWRzdF9wdGUpIHsKPj4+ICAgICAgICAg ICAgICAgICByZXQgPSAtRU5PTUVNOwo+Pj4gICAgICAgICAgICAgICAgIGdvdG8gb3V0Owo+Pj4g ICAgICAgICB9Cj4+PiAgICAgICAgIHNyY19wdGUgPSBwdGVfb2Zmc2V0X21hcF9ub2xvY2soc3Jj X21tLCBzcmNfcG1kLCBhZGRyLCAmc3JjX3B0bCk7Cj4+PiAgICAgICAgIGlmICghc3JjX3B0ZSkg ewo+Pj4gICAgICAgICAgICAgICAgIHB0ZV91bm1hcF91bmxvY2soZHN0X3B0ZSwgZHN0X3B0bCk7 Cj4+PiAgICAgICAgICAgICAgICAgLyogcmV0ID09IDAgKi8KPj4+ICAgICAgICAgICAgICAgICBn b3RvIG91dDsKPj4+ICAgICAgICAgfQo+Pj4gICAgICAgICBzcGluX2xvY2tfbmVzdGVkKHNyY19w dGwsIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTsKPj4+ICAgICAgICAgb3JpZ19zcmNfcHRlID0gc3Jj X3B0ZTsKPj4+ICAgICAgICAgb3JpZ19kc3RfcHRlID0gZHN0X3B0ZTsKPj4+ICAgICAgICAgYXJj aF9lbnRlcl9sYXp5X21tdV9tb2RlKCk7Cj4+Pgo+Pj4gICAgICAgICBkbyB7Cj4+PiAgICAgICAg ICAgICAgICAgLyoKPj4+ICAgICAgICAgICAgICAgICAgKiBXZSBhcmUgaG9sZGluZyB0d28gbG9j a3MgYXQgdGhpcyBwb2ludCAtIGVpdGhlciBvZiB0aGVtCj4+PiAgICAgICAgICAgICAgICAgICog Y291bGQgZ2VuZXJhdGUgbGF0ZW5jaWVzIGluIGFub3RoZXIgdGFzayBvbiBhbm90aGVyIENQVS4K Pj4+ICAgICAgICAgICAgICAgICAgKi8KPj4+ICAgICAgICAgICAgICAgICBpZiAocHJvZ3Jlc3Mg Pj0gMzIpIHsKPj4+ICAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyZXNzID0gMDsKPj4+ICAg ICAgICAgICAgICAgICAgICAgICAgIGlmIChuZWVkX3Jlc2NoZWQoKSB8fAo+Pj4gICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHNwaW5fbmVlZGJyZWFrKHNyY19wdGwpIHx8IHNwaW5fbmVlZGJy ZWFrKGRzdF9wdGwpKQo+Pj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK Pj4+ICAgICAgICAgICAgICAgICB9Cj4+PiAgICAgICAgICAgICAgICAgcHRlbnQgPSBwdGVwX2dl dChzcmNfcHRlKTsKPj4+ICAgICAgICAgICAgICAgICBpZiAocHRlX25vbmUocHRlbnQpKSB7Cj4+ PiAgICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmVzcysrOwo+Pj4gICAgICAgICAgICAgICAg ICAgICAgICAgY29udGludWU7Cj4+PiAgICAgICAgICAgICAgICAgfQo+Pj4KPj4+IHRoZSBhYm92 ZSBpdGVyYXRpb24gY2FuIGJyZWFrIHdoZW4gcHJvZ3Jlc3MgPiA9MzIuIGZvciBleGFtcGxlLCBh dCB0aGUKPj4+IGJlZ2lubmluZywKPj4+IGlmIGFsbCBQVEVzIGFyZSBub25lLCB3ZSBicmVhayB3 aGVuIHByb2dyZXNzID49MzIsIGFuZCB3ZSBicmVhayB3aGVuIHdlCj4+PiBhcmUgaW4gdGhlIDh0 aCBwdGUgb2YgMTZQVEVzIHdoaWNoIG1pZ2h0IGJlY29tZSBDT05UUFRFIGFmdGVyIHdlIHJlbGVh c2UKPj4+IFBUTC4KPj4+Cj4+PiBzaW5jZSB3ZSBhcmUgcmVsZWFzaW5nIFBUTHMsIG5leHQgdGlt ZSB3aGVuIHdlIGdldCBQVEwsIHRob3NlIHB0ZV9ub25lKCkgbWlnaHQKPj4+IGJlY29tZSBwdGVf Y29udCgpLCB0aGVuIGFyZSB5b3UgZ29pbmcgdG8gY29weSBDT05UUFRFIGZyb20gOHRoIHB0ZSwK Pj4+IHRodXMsIGltbWVkaWF0ZWx5Cj4+PiBicmVhayB0aGUgY29uc2lzdGVudCBDT05QVEVzIHJ1 bGUgb2YgaGFyZHdhcmU/Cj4+Pgo+Pj4gcHRlMCAtIHB0ZV9ub25lCj4+PiBwdGUxIC0gcHRlX25v bmUKPj4+IC4uLgo+Pj4gcHRlNyAtIHB0ZV9ub25lCj4+Pgo+Pj4gcHRlOCAtIHB0ZV9jb250Cj4+ PiAuLi4KPj4+IHB0ZTE1IC0gcHRlX2NvbnQKPj4+Cj4+PiBzbyB3ZSBkaWQgc29tZSBtb2RpZmlj YXRpb24gdG8gYXZvaWQgYSBicmVhayBpbiB0aGUgbWlkZGxlIG9mIFBURXMKPj4+IHdoaWNoIGNh biBwb3RlbnRpYWxseQo+Pj4gYmVjb21lIENPTlRQRS4KPj4+IGRvIHsKPj4+ICAgICAgICAgICAg ICAgICAvKgo+Pj4gICAgICAgICAgICAgICAgICogV2UgYXJlIGhvbGRpbmcgdHdvIGxvY2tzIGF0 IHRoaXMgcG9pbnQgLSBlaXRoZXIgb2YgdGhlbQo+Pj4gICAgICAgICAgICAgICAgICogY291bGQg Z2VuZXJhdGUgbGF0ZW5jaWVzIGluIGFub3RoZXIgdGFzayBvbiBhbm90aGVyIENQVS4KPj4+ICAg ICAgICAgICAgICAgICAqLwo+Pj4gICAgICAgICAgICAgICAgIGlmIChwcm9ncmVzcyA+PSAzMikg ewo+Pj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmVzcyA9IDA7Cj4+PiAj aWZkZWYgQ09ORklHX0NPTlRfUFRFX0hVR0VQQUdFCj4+PiAgICAgICAgICAgICAgICAgLyoKPj4+ ICAgICAgICAgICAgICAgICAqIFhYWDogZG9uJ3QgcmVsZWFzZSBwdGwgYXQgYW4gdW5saWduZWQg YWRkcmVzcyBhcwo+Pj4gY29udF9wdGUgbWlnaHQgZm9ybSB3aGlsZQo+Pj4gICAgICAgICAgICAg ICAgICogcHRsIGlzIHJlbGVhc2VkLCB0aGlzIGNhdXNlcyBkb3VibGUtbWFwCj4+PiAgICAgICAg ICAgICAgICAgKi8KPj4+ICAgICAgICAgICAgICAgICBpZiAoIXZtYV9pc19jaHBfYW5vbnltb3Vz KHNyY192bWEpIHx8Cj4+PiAgICAgICAgICAgICAgICAgICAgKHZtYV9pc19jaHBfYW5vbnltb3Vz KHNyY192bWEpICYmIElTX0FMSUdORUQoYWRkciwKPj4+IEhQQUdFX0NPTlRfUFRFX1NJWkUpKSkK Pj4+ICNlbmRpZgo+Pj4gICAgICAgICAgICAgICAgIGlmIChuZWVkX3Jlc2NoZWQoKSB8fAo+Pj4g ICAgICAgICAgICAgICAgICAgIHNwaW5fbmVlZGJyZWFrKHNyY19wdGwpIHx8IHNwaW5fbmVlZGJy ZWFrKGRzdF9wdGwpKQo+Pj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK Pj4+IH0KPj4+Cj4+PiBXZSBjb3VsZCBvbmx5IHJlcHJvZHVjZSB0aGUgYWJvdmUgaXNzdWUgYnkg cnVubmluZyB0aG91c2FuZHMgb2YgcGhvbmVzLgo+Pj4KPj4+IERvZXMgeW91ciBjb2RlIHN1cnZp dmUgZnJvbSB0aGlzIHByb2JsZW0/Cj4+Cj4+IFllcyBJJ20gY29uZmlkZW50IG15IGNvZGUgaXMg c2FmZSBhZ2FpbnN0IHRoaXM7IGFzIEkgc2FpZCBiZWZvcmUsIHRoZSBDT05UX1BURQo+PiBiaXQg aXMgbm90IGJsaW5kbHkgImNvcGllZCIgZnJvbSBwYXJlbnQgdG8gY2hpbGQgcHRlLiBBcyBmYXIg YXMgdGhlIGNvcmUtbW0gaXMKPj4gY29uY2VybmVkLCB0aGVyZSBpcyBubyBDT05UX1BURSBiaXQ7 IHRoZXkgYXJlIGp1c3QgcmVndWxhciBQVEVzLiBTbyB0aGUgY29kZQo+PiB3aWxsIHNlZSBzb21l IHB0ZV9ub25lKCkgZW50cmllcyBmb2xsb3dlZCBieSBzb21lIHB0ZV9wcmVzZW50KCkgZW50cmll cy4gQW5kCj4+IHdoZW4gY2FsbGluZyBzZXRfcHRlcygpIG9uIHRoZSBjaGlsZCwgdGhlIGFyY2gg Y29kZSB3aWxsIGV2YWx1YXRlIHRoZSBjdXJyZW50Cj4+IHN0YXRlIG9mIHRoZSBwZ3RhYmxlIGFs b25nIHdpdGggdGhlIG5ldyBzZXRfcHRlcygpIHJlcXVlc3QgYW5kIGRldGVybWluZSB3aGVyZQo+ PiBpdCBzaG91bGQgaW5zZXJ0IHRoZSBDT05UX1BURSBiaXQuCj4gCj4geWVwLCBpIGhhdmUgcmVh ZCB2ZXJ5IGNhcmVmdWxseSBhbmQgdGhpbmsgeW91ciBjb2RlIGlzIHNhZmUgaGVyZS4gVGhlCj4g b25seSBwcm9ibGVtCj4gaXMgdGhhdCB0aGUgY29kZSBjYW4gcmFuZG9tbHkgdW5mb2xkIHBhcmVu dCBwcm9jZXNzZXMnIENPTlBURSB3aGlsZSBzZXR0aW5nCj4gd3Jwcm90ZWN0IGluIHRoZSBtaWRk bGUgb2YgYSBsYXJnZSBmb2xpbyB3aGlsZSBpdCBhY3R1YWxseSBzaG91bGQga2VlcCBDT05UCj4g Yml0IGFzIGFsbCBQVEVzIGNhbiBiZSBzdGlsbCBjb25zaXN0ZW50IGlmIHdlIHNldCBwcm90ZWN0 IGZyb20gdGhlIDFzdCBQVEUuCj4gCj4gd2hpbGUgQSBmb3JrcyBCLCAgcHJvZ3Jlc3MgPj0gMzIg bWlnaHQgaW50ZXJydXB0IGluIHRoZSBtaWRkbGUgb2YgYQo+IG5ldyBDT05UUFRFIGZvbGlvIHdo aWNoIGlzIGZvcm1pbmcsIGFzIHdlIGhhdmUgdG8gc2V0IHdycHJvdGVjdCB0byBwYXJlbnQgQSwK PiB0aGlzIHBhcmVudCBpbW1lZGlhdGVseSBsb3NlcyBDT05UIGJpdC4gdGhpcyBpcyAgc2FkLiBi dXQgaSBjYW4ndCBmaW5kIGEKPiBnb29kIHdheSB0byByZXNvbHZlIGl0IHVubGVzcyBDT05UIGlz IGV4cG9zZWQgdG8gbW0tY29yZS4gYW55IGlkZWEgb24KPiB0aGlzPwoKTm8gdGhpcyBpcyBub3Qg dGhlIGNhc2U7IGNvcHlfcHJlc2VudF9wdGVzKCkgd2lsbCBjb3B5IGFzIG1hbnkgcHRlcyBhcyBh cmUKcGh5c2NpYWxseSBjb250aWd1b3VzIGFuZCBiZWxvbmcgdG8gdGhlIHNhbWUgZm9saW8gKHdo aWNoIHVzdWFsbHkgbWVhbnMgInRoZQp3aG9sZSBmb2xpbyIgLSB0aGUgb25seSB0aW1lIGl0IGRv ZXNuJ3QgaXMgd2hlbiB3ZSBoaXQgdGhlIGVuZCBvZiB0aGUgdm1hKS4gV2UKd2lsbCB0aGVuIHJl dHVybiB0byB0aGUgbWFpbiBsb29wIGFuZCBtb3ZlIGZvcndhcmRzIGJ5IHRoZSBudW1iZXIgb2Yg cHRlcyB0aGF0CndlcmUgc2VydmljZWQsIGluY2x1ZGluZzoKCnByb2dyZXNzICs9IDggKiByZXQ7 CgpUaGF0IG1pZ2h0IGdvIGFib3ZlIDMyLCBzbyB3ZSB3aWxsIGZsYXNoIHRoZSBsb2NrLiBCdXQg d2UgaGF2ZW4ndCBkb25lIHRoYXQgaW4KdGhlIG1pZGRsZSBvZiBhIGxhcmdlIGZvbGlvLiBTbyB0 aGUgY29udHB0ZS1uZXNzIHNob3VsZCBiZSBwcmVzZXJ2ZWQuCgo+IAo+IE91ciBjb2RlWzFdIHJl c29sdmVzIHRoaXMgYnkgb25seSBicmVha2luZyBhdCB0aGUgYWxpZ25lZCBhZGRyZXNzCj4gCj4g aWYgKHByb2dyZXNzID49IDMyKSB7Cj4gICAgICBwcm9ncmVzcyA9IDA7Cj4gICAgICAjaWZkZWYg Q09ORklHX0NPTlRfUFRFX0hVR0VQQUdFCj4gICAgICAvKgo+ICAgICAgICogWFhYOiBkb24ndCBy ZWxlYXNlIHB0bCBhdCBhbiB1bmxpZ25lZCBhZGRyZXNzIGFzIGNvbnRfcHRlCj4gbWlnaHQgZm9y bSB3aGlsZQo+ICAgICAgICogcHRsIGlzIHJlbGVhc2VkLCB0aGlzIGNhdXNlcyBkb3VibGUtbWFw Cj4gICAgICAqLwo+ICAgICBpZiAoIXZtYV9pc19jaHBfYW5vbnltb3VzKHNyY192bWEpIHx8Cj4g ICAgICAgICAodm1hX2lzX2NocF9hbm9ueW1vdXMoc3JjX3ZtYSkgJiYgSVNfQUxJR05FRChhZGRy LAo+IEhQQUdFX0NPTlRfUFRFX1NJWkUpKSkKPiAgICAgI2VuZGlmCj4gICAgICAgICBpZiAobmVl ZF9yZXNjaGVkKCkgfHwKPiAgICAgICAgICAgIHNwaW5fbmVlZGJyZWFrKHNyY19wdGwpIHx8IHNw aW5fbmVlZGJyZWFrKGRzdF9wdGwpKQo+ICAgICAgICAgICAgICBicmVhazsKPiB9Cj4gCj4gWzFd IGh0dHBzOi8vZ2l0aHViLmNvbS9PbmVQbHVzT1NTL2FuZHJvaWRfa2VybmVsX29uZXBsdXNfc204 NTUwL2Jsb2Ivb25lcGx1cy9zbTg1NTBfdV8xNC4wLjBfb25lcGx1czExL21tL21lbW9yeS5jI0wx MTgwCj4gCj4gCj4gVGhhbmtzCj4gQmFycnkKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1h cm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcv bWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg== 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 E61C2C07CB1 for ; Wed, 29 Nov 2023 12:29:42 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 4160E6B03D0; Wed, 29 Nov 2023 07:29:42 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 39F356B03D1; Wed, 29 Nov 2023 07:29:42 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 267306B03D2; Wed, 29 Nov 2023 07:29:42 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id 135DF6B03D0 for ; Wed, 29 Nov 2023 07:29:42 -0500 (EST) Received: from smtpin23.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id D9D4C1403B0 for ; Wed, 29 Nov 2023 12:29:41 +0000 (UTC) X-FDA: 81510922962.23.5DB2FAA Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by imf06.hostedemail.com (Postfix) with ESMTP id 0825C180013 for ; Wed, 29 Nov 2023 12:29:39 +0000 (UTC) Authentication-Results: imf06.hostedemail.com; dkim=none; spf=pass (imf06.hostedemail.com: domain of ryan.roberts@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=ryan.roberts@arm.com; dmarc=pass (policy=none) header.from=arm.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1701260980; 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:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Ht3MNqbT7g70dyUBlXLotMzdDj8K4IW6q2OATmBk4Ng=; b=gNOCXXgxn8S+eTmsbpgKouKRGIRnR0TB0NxGHrm8frSQgtuM/EhQJOHUWtXd6c9D+1zGtm E7villzWms3RWmSUcdNDgTmpgfmkcloeCqnaqh6+tVSGdQ1hlmDoohllhPjzWl6hcBeW4l 0zrg49pukuEJE0VTR1acRdXbmVwO51w= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1701260980; a=rsa-sha256; cv=none; b=iaot4C/ygsq1wVGtDknqvZcl+tSHnvWVi3VsoMRrtG9WgzsROI2ztlT6gc6DgvP/qdDZ7h tLsk2LHBLA1344zaxY5283L0Wd8doSF1lOUW8uszdczB0Msf0YNp/+l6bVvV9IMXYxwF/E 9p24Ur3Zyf7gBk0ac4LEm1W2jkQQvWI= ARC-Authentication-Results: i=1; imf06.hostedemail.com; dkim=none; spf=pass (imf06.hostedemail.com: domain of ryan.roberts@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=ryan.roberts@arm.com; dmarc=pass (policy=none) header.from=arm.com Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 645A62F4; Wed, 29 Nov 2023 04:30:26 -0800 (PST) Received: from [10.57.70.211] (unknown [10.57.70.211]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id E85733F5A1; Wed, 29 Nov 2023 04:29:35 -0800 (PST) Message-ID: <02d85331-eaa0-4d76-a3d6-ea5eb18b683c@arm.com> Date: Wed, 29 Nov 2023 12:29:34 +0000 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v2 01/14] mm: Batch-copy PTE ranges during fork() Content-Language: en-GB To: Barry Song <21cnbao@gmail.com> Cc: akpm@linux-foundation.org, andreyknvl@gmail.com, anshuman.khandual@arm.com, ardb@kernel.org, catalin.marinas@arm.com, david@redhat.com, dvyukov@google.com, glider@google.com, james.morse@arm.com, jhubbard@nvidia.com, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, mark.rutland@arm.com, maz@kernel.org, oliver.upton@linux.dev, ryabinin.a.a@gmail.com, suzuki.poulose@arm.com, vincenzo.frascino@arm.com, wangkefeng.wang@huawei.com, will@kernel.org, willy@infradead.org, yuzenghui@huawei.com, yuzhao@google.com, ziy@nvidia.com References: <20231115163018.1303287-2-ryan.roberts@arm.com> <20231127055414.9015-1-v-songbaohua@oppo.com> <755343a1-ce94-4d38-8317-0925e2dae3bc@arm.com> From: Ryan Roberts In-Reply-To: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Rspamd-Queue-Id: 0825C180013 X-Rspam-User: X-Stat-Signature: eakdui35fgrf6u3qcjf6p883ptn5bw8t X-Rspamd-Server: rspam03 X-HE-Tag: 1701260979-675260 X-HE-Meta: U2FsdGVkX1/a8CPjxCCdH7AzEtJOCURLPEAqhP4M0mvNcnwOzwOpnOknEvwaeH656KtkxyrjgPpgj+k9saALo1cdfTerj5nepQ5ASk+FUro648ahDhyjoVopSABvDLz+H+xJHV5GS8XadurRs8KXXtGkyz+CPp9wYOyFG8vxKw83Wk5wxvN8c2N27ynrLMY81KKPF4SS1rEPlwEF2dzDGVQW0E1VqB9gVQsJdpDBXIPjFvIOf36Y5BnfLZodk57ZfGg3R+rlQRH04NOSTo/B4qmolmD/tDAXmWix0dV4a018d+giAYh0UOw04soPkXY63kGx3VQFB5gN6lt7T/8RaJ9Kd4SO4zO6wgGO0pK85BOQxIryGx47aOj3JDQnXlum2NIb2VjSmh5hFIPBOTehZCrDQeNsTy0fsitjrZLMTO96q292MO8rNtwUNFaOO394fPH//GuQLStUUJWBhn/rfb6PitZQeXH6Tf6tisoS0boTDm9bX4e7UdlzyyXzoVLqBdiQUyn0vyuH1sEWig6scr/2DK1cW7WjmO279SZYTzet1cWXD3T2PCrLc+qTHgy3wBklVQa3tPVrasn1m0Uo2Uv0YbReLJtUln6G9T8XGljlc5RFf4dmxOCn/1mg8ivbGrJ8+jNME3trviSQ424UgKUI+p5LLxZf8P3bymwHQ0PI71FszhZCZE/abuU7mucuEp5EU7kC8XIXIx/D7/x/UUuUQEmsuLLhhAaOelarNZrGp8Oo/3oSSQGc1ahN+vf699R4cX/FzzHRVIJgVD3SSYFYiLN0mWnlwDlug50mcpoRqzXo9YNq6al5YnDO4a/TEBJVcNM+ca7Q+MNyN8qq0mddIE/wFYlQBtojwNA8hI0WYWSkqxDa5ev/ZBli8CpDMCSDgc7wYJ9z4x5cJwiQSEKXcuhde/llG6BzXeyQMB4gvOJAagRZP93BdCql1xMlmwnBi8AJ5bFuFswTwvv NTtDeynY X0W6WkVKEzOzB878Utw932TmLK3BeeiYBeqLlMyymP+0HlFPzfqqTa37mnlnVGgXqfMkMg7Wu8yRsY6uD9F/9JCSQNK+7788ut0/y5Re0PBwN6cOTj9ngyc/7E2ptcJOEXZ13K+ap8wyZMVhqoxx2mWZ9NzplaKnzHAWZZRSZ1v5gxNq/HVyd5TzXrf1ukHFPRIQqhmA37+N5k752RDH3JHbCiXGMyUQhW+S+2iCH5ZUkjm4jmg514rpaGP0cCY3oPIntq34el+TCPymG1JHiXMafZnBGj7rZ7paDbjywnG6bbYg= 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: On 28/11/2023 19:00, Barry Song wrote: > On Wed, Nov 29, 2023 at 12:00 AM Ryan Roberts wrote: >> >> On 28/11/2023 00:11, Barry Song wrote: >>> On Mon, Nov 27, 2023 at 10:24 PM Ryan Roberts wrote: >>>> >>>> On 27/11/2023 05:54, Barry Song wrote: >>>>>> +copy_present_ptes(struct vm_area_struct *dst_vma, struct vm_area_struct *src_vma, >>>>>> + pte_t *dst_pte, pte_t *src_pte, >>>>>> + unsigned long addr, unsigned long end, >>>>>> + int *rss, struct folio **prealloc) >>>>>> { >>>>>> struct mm_struct *src_mm = src_vma->vm_mm; >>>>>> unsigned long vm_flags = src_vma->vm_flags; >>>>>> pte_t pte = ptep_get(src_pte); >>>>>> struct page *page; >>>>>> struct folio *folio; >>>>>> + int nr = 1; >>>>>> + bool anon; >>>>>> + bool any_dirty = pte_dirty(pte); >>>>>> + int i; >>>>>> >>>>>> page = vm_normal_page(src_vma, addr, pte); >>>>>> - if (page) >>>>>> + if (page) { >>>>>> folio = page_folio(page); >>>>>> - if (page && folio_test_anon(folio)) { >>>>>> - /* >>>>>> - * If this page may have been pinned by the parent process, >>>>>> - * copy the page immediately for the child so that we'll always >>>>>> - * guarantee the pinned page won't be randomly replaced in the >>>>>> - * future. >>>>>> - */ >>>>>> - folio_get(folio); >>>>>> - if (unlikely(page_try_dup_anon_rmap(page, false, src_vma))) { >>>>>> - /* Page may be pinned, we have to copy. */ >>>>>> - folio_put(folio); >>>>>> - return copy_present_page(dst_vma, src_vma, dst_pte, src_pte, >>>>>> - addr, rss, prealloc, page); >>>>>> + anon = folio_test_anon(folio); >>>>>> + nr = folio_nr_pages_cont_mapped(folio, page, src_pte, addr, >>>>>> + end, pte, &any_dirty); >>>>> >>>>> in case we have a large folio with 16 CONTPTE basepages, and userspace >>>>> do madvise(addr + 4KB * 5, DONTNEED); >>>> >>>> nit: if you are offsetting by 5 pages from addr, then below I think you mean >>>> page0~page4 and page6~15? >>>> >>>>> >>>>> thus, the 4th basepage of PTE becomes PTE_NONE and folio_nr_pages_cont_mapped() >>>>> will return 15. in this case, we should copy page0~page3 and page5~page15. >>>> >>>> No I don't think folio_nr_pages_cont_mapped() will return 15; that's certainly >>>> not how its intended to work. The function is scanning forwards from the current >>>> pte until it finds the first pte that does not fit in the batch - either because >>>> it maps a PFN that is not contiguous, or because the permissions are different >>>> (although this is being relaxed a bit; see conversation with DavidH against this >>>> same patch). >>>> >>>> So the first time through this loop, folio_nr_pages_cont_mapped() will return 5, >>>> (page0~page4) then the next time through the loop we will go through the >>>> !present path and process the single swap marker. Then the 3rd time through the >>>> loop folio_nr_pages_cont_mapped() will return 10. >>> >>> one case we have met by running hundreds of real phones is as below, >>> >>> >>> static int >>> copy_pte_range(struct vm_area_struct *dst_vma, struct vm_area_struct *src_vma, >>> pmd_t *dst_pmd, pmd_t *src_pmd, unsigned long addr, >>> unsigned long end) >>> { >>> ... >>> dst_pte = pte_alloc_map_lock(dst_mm, dst_pmd, addr, &dst_ptl); >>> if (!dst_pte) { >>> ret = -ENOMEM; >>> goto out; >>> } >>> src_pte = pte_offset_map_nolock(src_mm, src_pmd, addr, &src_ptl); >>> if (!src_pte) { >>> pte_unmap_unlock(dst_pte, dst_ptl); >>> /* ret == 0 */ >>> goto out; >>> } >>> spin_lock_nested(src_ptl, SINGLE_DEPTH_NESTING); >>> orig_src_pte = src_pte; >>> orig_dst_pte = dst_pte; >>> arch_enter_lazy_mmu_mode(); >>> >>> do { >>> /* >>> * We are holding two locks at this point - either of them >>> * could generate latencies in another task on another CPU. >>> */ >>> if (progress >= 32) { >>> progress = 0; >>> if (need_resched() || >>> spin_needbreak(src_ptl) || spin_needbreak(dst_ptl)) >>> break; >>> } >>> ptent = ptep_get(src_pte); >>> if (pte_none(ptent)) { >>> progress++; >>> continue; >>> } >>> >>> the above iteration can break when progress > =32. for example, at the >>> beginning, >>> if all PTEs are none, we break when progress >=32, and we break when we >>> are in the 8th pte of 16PTEs which might become CONTPTE after we release >>> PTL. >>> >>> since we are releasing PTLs, next time when we get PTL, those pte_none() might >>> become pte_cont(), then are you going to copy CONTPTE from 8th pte, >>> thus, immediately >>> break the consistent CONPTEs rule of hardware? >>> >>> pte0 - pte_none >>> pte1 - pte_none >>> ... >>> pte7 - pte_none >>> >>> pte8 - pte_cont >>> ... >>> pte15 - pte_cont >>> >>> so we did some modification to avoid a break in the middle of PTEs >>> which can potentially >>> become CONTPE. >>> do { >>> /* >>> * We are holding two locks at this point - either of them >>> * could generate latencies in another task on another CPU. >>> */ >>> if (progress >= 32) { >>> progress = 0; >>> #ifdef CONFIG_CONT_PTE_HUGEPAGE >>> /* >>> * XXX: don't release ptl at an unligned address as >>> cont_pte might form while >>> * ptl is released, this causes double-map >>> */ >>> if (!vma_is_chp_anonymous(src_vma) || >>> (vma_is_chp_anonymous(src_vma) && IS_ALIGNED(addr, >>> HPAGE_CONT_PTE_SIZE))) >>> #endif >>> if (need_resched() || >>> spin_needbreak(src_ptl) || spin_needbreak(dst_ptl)) >>> break; >>> } >>> >>> We could only reproduce the above issue by running thousands of phones. >>> >>> Does your code survive from this problem? >> >> Yes I'm confident my code is safe against this; as I said before, the CONT_PTE >> bit is not blindly "copied" from parent to child pte. As far as the core-mm is >> concerned, there is no CONT_PTE bit; they are just regular PTEs. So the code >> will see some pte_none() entries followed by some pte_present() entries. And >> when calling set_ptes() on the child, the arch code will evaluate the current >> state of the pgtable along with the new set_ptes() request and determine where >> it should insert the CONT_PTE bit. > > yep, i have read very carefully and think your code is safe here. The > only problem > is that the code can randomly unfold parent processes' CONPTE while setting > wrprotect in the middle of a large folio while it actually should keep CONT > bit as all PTEs can be still consistent if we set protect from the 1st PTE. > > while A forks B, progress >= 32 might interrupt in the middle of a > new CONTPTE folio which is forming, as we have to set wrprotect to parent A, > this parent immediately loses CONT bit. this is sad. but i can't find a > good way to resolve it unless CONT is exposed to mm-core. any idea on > this? No this is not the case; copy_present_ptes() will copy as many ptes as are physcially contiguous and belong to the same folio (which usually means "the whole folio" - the only time it doesn't is when we hit the end of the vma). We will then return to the main loop and move forwards by the number of ptes that were serviced, including: progress += 8 * ret; That might go above 32, so we will flash the lock. But we haven't done that in the middle of a large folio. So the contpte-ness should be preserved. > > Our code[1] resolves this by only breaking at the aligned address > > if (progress >= 32) { > progress = 0; > #ifdef CONFIG_CONT_PTE_HUGEPAGE > /* > * XXX: don't release ptl at an unligned address as cont_pte > might form while > * ptl is released, this causes double-map > */ > if (!vma_is_chp_anonymous(src_vma) || > (vma_is_chp_anonymous(src_vma) && IS_ALIGNED(addr, > HPAGE_CONT_PTE_SIZE))) > #endif > if (need_resched() || > spin_needbreak(src_ptl) || spin_needbreak(dst_ptl)) > break; > } > > [1] https://github.com/OnePlusOSS/android_kernel_oneplus_sm8550/blob/oneplus/sm8550_u_14.0.0_oneplus11/mm/memory.c#L1180 > > > Thanks > Barry