From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1041299AbdDUPWm (ORCPT ); Fri, 21 Apr 2017 11:22:42 -0400 Received: from mail-by2nam03on0124.outbound.protection.outlook.com ([104.47.42.124]:54432 "EHLO NAM03-BY2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1041251AbdDUPWA (ORCPT ); Fri, 21 Apr 2017 11:22:00 -0400 Authentication-Results: linux.vnet.ibm.com; dkim=none (message not signed) header.d=none;linux.vnet.ibm.com; dmarc=none action=none header.from=cs.rutgers.edu; Message-ID: <58FA22A1.105@cs.rutgers.edu> Date: Fri, 21 Apr 2017 10:17:53 -0500 From: Zi Yan User-Agent: Postbox 5.0.12 (Windows/20170323) MIME-Version: 1.0 To: Anshuman Khandual CC: n-horiguchi@ah.jp.nec.com, kirill.shutemov@linux.intel.com, linux-kernel@vger.kernel.org, linux-mm@kvack.org, akpm@linux-foundation.org, minchan@kernel.org, vbabka@suse.cz, mgorman@techsingularity.net, mhocko@kernel.org, zi.yan@cs.rutgers.edu, dnellans@nvidia.com Subject: Re: [PATCH v5 06/11] mm: thp: check pmd migration entry in common path References: <20170420204752.79703-1-zi.yan@sent.com> <20170420204752.79703-7-zi.yan@sent.com> In-Reply-To: X-Enigmail-Version: 1.2.3 Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="------------enig595100625FACE9F209DE01E4" X-Originating-IP: [12.1.252.66] X-ClientProxiedBy: BN6PR03CA0050.namprd03.prod.outlook.com (10.173.137.12) To DM5PR14MB1657.namprd14.prod.outlook.com (10.171.156.15) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: b1a19b0d-e931-4fd1-5cc2-08d488c99a3f X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(201703131423075)(201703031133081);SRVR:DM5PR14MB1657; X-Microsoft-Exchange-Diagnostics: 1;DM5PR14MB1657;3:mVp/3fimUINhcvr78rph/ioDre0Z00Yn6XfGcHMw+x3fQ64vMogteUvhS9D040gTD32dRE62Fws0Npi+AUXidMvRhqmaPv3kvMjoBNSNt491yQ4ZpU/NVG06xNPl1Z2cEmpKjJKNNkW5IXjl5OizA3EeYCqlOTOL9YtuS4n0T1HvciXGqVWufRlAUCpdKKTczOf9GPjEz4RPC9GtANJOPWqwIYKekYP616JglfX5z+X1O6HDrsFwUNtW4GaGFygLhZUsCn5XqpiqvnRwzPGbnBr0symt2MNKpBBimaYYLHTpFZtTeV4nhydpxFig9MOOUgB1tOhTqF3Gm4dX5pQA9Q==;25:I8YVqASdrRs+qb+u059/qPRFxki+PYMDVZRq/30UIGPsjtBLEvUgfQDwLZ+41t08o99t7/qT9DiCQq/W4HHYw/Gdv1gIoTTECGR5WfAK01hSfhbOO4MjOItZFsX1Kf9y5DhxeNBlz1Dtf0ixm8X89rlex6DWrKP4WGk3t7XjxUBsIBCTMdKDWPiFEtpkctdOKbAoiShz8bzy27Zzji7Pk6otypoL3RcXtq1pcb4YjpPNKlLOyONJfzi+XXaYv0Nnba9MKbrrITIRESDeMIIfKP7MJUcrJOvX3g9uzX7k8epyj9HuZ0mv2c5lAIzvr8hwYhVi/H5VB2QjetC31IQlRzg3/0oyYQXkbIpFuUReicTEismDcFomC4WIA80D4rXPOPM+pPFKNewjI/hU65f34Oq6TbIMNjXZzxQ2uJZ63l1sD0bPqGapJDwHuMAI30OnpoB3EKCnIgv22OjaU1H3SQ== X-Microsoft-Exchange-Diagnostics: 1;DM5PR14MB1657;31:RV4Y0N9vsmQtyxSrw6HN+fVeQNloCS6JdBeaYnSOARQz/kdJKVk3tkUkTCN4tFIJMI3L5ASJ5OIwztAwup2Dg2y4q5HchKfw6QoWKjXlL8JZdpJTxsCtCWcSzaNK9FRGHhnj2SZ+W7naB5Isw05ByQOd3//TKoN+4gfbqBB8PAQWaqsF/+alxs7lI1+01ZrL6qIcRdsNrzLZsLq5oCr3xhkmXrrJ83EkjvnBgQt3wqQ=;20:E6xMiwPg7ksyYpDAAPKvjhatMC9GUB6Bon8ethem2JrNWHXththckN2ygD1eq7iVRBQCw1iHvHkmxabI1zWpHgfEvPSZR/fHM/KBllRZhzeoYxewfrdQlTf7HbbWIRM28EavB6F2c9QMXOi6HG0yzDcH309s3PT+hp/2D3VbfyOhyWYUkGKm3Fb7dYnOOU7TWGB5OGerjN9+5Yp3mvHhm4wVkolcRF84HEVfN2G1yx6KmMS96TzgYndOkVgFjGUux6w5xoSvLUhILImDOKEJJ7aT07ra5FCOhHN/IpE9gouP4/26TNWBgsPfbrQnUbPtbijxRErrmZAngBJDgo0GkWE3jcWLnswh8zZh1ne6vjvWWyJW45MpmmOXPzIvwe86GnXxKSfMh6JqpF+3JUpkE94E0W8oD69Qu6zj0muZNTpztzcewrlywl6O56XoKcabRW+zFwj2yfdi99gjXt6LQRsIoJSLN+SrKDIQi6OisdxX5fQE0LBYxDHbubmSwwl4 X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040450)(601004)(2401047)(5005006)(8121501046)(93006095)(93001095)(3002001)(10201501046)(6041248)(20161123562025)(20161123564025)(20161123555025)(20161123560025)(201703131423075)(201702281529075)(201702281528075)(201703061421075)(6072148);SRVR:DM5PR14MB1657;BCL:0;PCL:0;RULEID:;SRVR:DM5PR14MB1657; X-Microsoft-Exchange-Diagnostics: 1;DM5PR14MB1657;4:+yw9Ly6mPVQkP0WKA9TbhuaX6wbd2PuTAUMktfy1R7oHTAcwuYf1LSTPULvrifsL8dCmCIgJgUhOkIV+DNye8Pgl5oKHlUoOz5+SiZIYHwAiavt7DfrevXHdxL1YEdRBXKNZzg2CXV0zARE3VJsrlWeN12vK+FVNcd8geIhNqdawjMW6pFtUrurtVm4v+Z82+zaWixJRl4ynmuWeQCNUa0g3mp6oaZQmbzrb7kN15+UQ7YlAJNSTWcrTgBQKT0nxizdoX7wkSa0e26V78wl5j1KoTg/gjDwGK4ClbfYKqYIDXFko+cfsULbQBTFS5QhN73J6bFT+mAYtvo3TDmRhjvpIfNlMcluqfohctnvv2FNcDxtz6EAEkI4z/b8w5z8GS6GcptxovZJPWHmAwejUBVGqQ1rqrTZuSG0VcnFiAUnvXVhRHJ6oPNNxzocUImjCqBEzVnZ8euq0Qbs4AyqvArFlDMUTAbre0rifO/zTq2kxe8bhjucGnagLFCHvWz/FmrqA7I5qWNCPwcQqwLHdgdOBf+N2hBOoSSi1lscOUnWS6mInmXhpJo/Ra4132SwluBNpR3JMYUgaGica8HVtsDj24nLNtHHlnXngx2xq2B54EsPI3cTVsL1frUSw2bcwAbkjskIHPea3/+xmF0cgrNijEXZHGk6N7Z0ttHVEKsDvROb7f74IC/UI4E2jkw08zPIatHxLwbBxIKSatS6sDWgex7knjqO8sm7/PStJXpcsPt9fXkCXXJL08djrsSYA X-Forefront-PRVS: 02843AA9E0 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6009001)(6049001)(39840400002)(39450400003)(39850400002)(39400400002)(39410400002)(24454002)(377454003)(84326002)(5890100001)(81166006)(86362001)(66066001)(75432002)(189998001)(7736002)(2906002)(4001350100001)(54356999)(229853002)(83506001)(2950100002)(8676002)(21480400002)(6666003)(6916009)(42882006)(90366009)(7416002)(568964002)(76176999)(38730400002)(5660300001)(53546009)(110136004)(305945005)(6246003)(65816999)(4326008)(42186005)(50986999)(25786009)(77096006)(3846002)(6116002)(88552002)(33656002)(6486002)(53936002);DIR:OUT;SFP:1102;SCL:1;SRVR:DM5PR14MB1657;H:[10.20.179.35];FPR:;SPF:None;MLV:sfv;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;DM5PR14MB1657;23:yFIity0TBYSJYBjBb4oKu037ShfNa2NISN2hNDz3D?= =?us-ascii?Q?jVGQEfkW7xmk1IxIQVAYV2GJtYI64d6JPqOsqSrrw8f+cJP8utXRfh5BiAtg?= =?us-ascii?Q?VMS7gYPuaBN9JkLNKxP+5tOchd/SCDkV3OO3PWIzX6O1hCURFJPPQn++wqT9?= =?us-ascii?Q?dG5vO+8G51ChjmkcZAD8M19p7miffOTkYn0uD3X2L2pOwt1704lWxr1MlH3/?= =?us-ascii?Q?ALycKSLjTFPVniX4FICde5RtbEGJZ+hsbnt+sJ/RbjTMVW0iaL+cKL3u+jlx?= =?us-ascii?Q?8BRx3A6AKUVywcRNkleO2RCH6ypKMfpaPvuMibyKL193DI+ilaqjZMCAa4kD?= =?us-ascii?Q?wdNBtBZTv19tvmvpWXXK7EcJXrxYTVpbql3rykH8mlkf7xc+YFKApdTakOIN?= =?us-ascii?Q?UzMx4uFbw9yt8HZNG4Erb4AQ7N8cUtIlce7BVe+xZfRmr6bl3zmoXrABNpjO?= =?us-ascii?Q?D33qCoIXrygmAg6el7yMrrOiWvW3ywLptmSrs9SSSlipy5lckzEtNhRcOT5s?= =?us-ascii?Q?t+gT9MwfutZWR1jnxfh3OCIKwEtvv0SPpinjC0Jeye55fcf2hfH5iUkJJ97o?= =?us-ascii?Q?rdi9acEs7cQCv3HoS5Y6Q+yoYT11SBoAjpsQBK7Kd9ovW0IpcawJ1WIa9D7h?= =?us-ascii?Q?vepgHV95Vq608MfpgCOMzeoShDUA/RJy+JP1hkBgANqf2Jew2LkrKjkfi6CO?= =?us-ascii?Q?7BsZH3m9i6dybZEvS/4EL7pePrrddkBkNbQCWFl8Bf/U+ZdLtCk1YTIM4KQQ?= =?us-ascii?Q?8XP8c9G9JjJOM90pvlGVa/X4fnN0XpOMJpgYzFJuWo42lsG0BHm7FTlr8E7/?= =?us-ascii?Q?viFYg/ASJALiOuyxYiW4GCY1hprdKFWSnfC0h6T5FHu4YIG6qlAiXHHS5v2J?= =?us-ascii?Q?Z/wkUiqrK8aEoZU3W3y911LW7uFHSbj1lGQoO71wYukmBTecktMAxqrSxuNs?= =?us-ascii?Q?gNuPqoqhiOSPw1rLJwFR6I4F6fgIcihl0RGzNSrX/vfnDpmD9rifOY6OmBzL?= =?us-ascii?Q?qw0NtaJm6ZU0j0+r8W8GI3rNLVra70v+zSM92Db8SeFi/DHdxB6hhxsyoSDx?= =?us-ascii?Q?qFRt1t/JapnoXGWGCvF/3B1nNqep0AcWZf4fQttyKoVmYQ+bzWDqHleTbqhd?= =?us-ascii?Q?f6PA7HmLQJmuHuTIBwSqMl03JOUsNljFNjjd6CtWPIeT92sy1DtJbKqMO3XQ?= =?us-ascii?Q?jAqdDMPT81xoL70fhx9t5oxdIHxF/Y5V0E5xtpaLjqaGngND9Lt9JGKEH6jq?= =?us-ascii?Q?lMQeM5pLue2tVGIwTigUPPdjSdEp2qlnW+yZQ8a?= X-Microsoft-Exchange-Diagnostics: 1;DM5PR14MB1657;6:+xtYj0XFiDaAUdYMyEUcu45QBsR2em6Vb7FR4w2oU66T1zMHxiqhP3PMNWXIJg73UkCf42c10MBDzhCBtLR5LbTF279vIK2+efIl5HqtIRbvarqTTAl+iP1QVDu055NDNxZ5BMhOMvsWWtg6v4ugdnE3f9mq6OYEdqvDOibMDNJzZeR5jfji0vBff3VrVZbfG0oyJ5o8MdrreYRnQzvgi1OlstupgM8DndSiY7Pdbfnej4SCdqLJ7bxfR2Kd448SgSocmvObijPtDq5JjGhbl001CZvzBNbk58GD+i8Vkh9289ByrObDiTGsfcIs66p24NxJMmQ3Sd0f8tCWspvo9m8fEjlcTIdjhwkyLwK8xRkpJFpR6gN3WlsYHt4Yc0tgsCimMrGsLlnpnNhMlJE+I9dF3TbWbkS+mgznbRonWchG+uAAZvmpBIMA9Awzvt1Lwpb51kwcPl0Dv4uSURntq6VbiSFj6Qtv+RgKiBy6tEVi56QX1PAZaJIkxhzJf0e4mXzklQ8ZRjc/kYM9RChaBA==;5:26Kcc0U5UMtfHm31GKG9aRIY8ErFae9BgaNk930byYAK4zlE4VypQU/kM626UzwySOmgYTV4WyUJ4t71n+TH3YZ1KpmpKTLvTsO/QTXszOv+8FcQbR5GrRj2hO4QIfec96nIYzgZ2WpkkyoujcPK7g==;24:HjNiIdE5Uq2gyuDVjLv+9vwY/if/5IsIb7iBqE+wluGI2lORUQGU73jIfSP0QDIvsJ8i8a1wwVd8lnP7xNtIiKYeNSNM1ihaMpEU/ATWeyM= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;DM5PR14MB1657;7:1bHH2MlXOPRXR/J57l1Vr9sZsMM6+yodXyPtke6fBGkjALjoSIpH/XSDS2s+X5+vRrNkgnRHL1Ns2ywQdCrUbdcVql/f37mGnJWr8kHc7KdWVob7Sk/hN6aO4s/zqpUhZAozXp1WFwCLtpQLGmz190Jfv3a8wUkR37e6i8cBRdzJTZo2osFwpA8HDbycuRCVTJboi08Dlj554dStG91jVk7CKqjlrGho+1ufOAbWgyLBqubmLJ80xiOinZ0yY3sNh4JVIMzFWVILnUK5S2SV7JgtpPofjNxztRjD732Clk6eAnWXu9hpDFnz22SJ3Hx/jT4aN2LYN7PexsVM2/xICw== X-OriginatorOrg: cs.rutgers.edu X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Apr 2017 15:17:57.1136 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR14MB1657 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This is an OpenPGP/MIME signed message (RFC 2440 and 3156) --------------enig595100625FACE9F209DE01E4 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Anshuman Khandual wrote: > On 04/21/2017 02:17 AM, Zi Yan wrote: >> From: Zi Yan >> >> If one of callers of page migration starts to handle thp, >> memory management code start to see pmd migration entry, so we need >> to prepare for it before enabling. This patch changes various code >> point which checks the status of given pmds in order to prevent race >> between thp migration and the pmd-related works. >> >> ChangeLog v1 -> v2: >> - introduce pmd_related() (I know the naming is not good, but can't >> think up no better name. Any suggesntion is welcomed.) >> >> Signed-off-by: Naoya Horiguchi >> >> ChangeLog v2 -> v3: >> - add is_swap_pmd() >> - a pmd entry should be pmd pointing to pte pages, is_swap_pmd(), >> pmd_trans_huge(), pmd_devmap(), or pmd_none() >> - pmd_none_or_trans_huge_or_clear_bad() and pmd_trans_unstable() retur= n >> true on pmd_migration_entry, so that migration entries are not >> treated as pmd page table entries. >> >> ChangeLog v4 -> v5: >> - add explanation in pmd_none_or_trans_huge_or_clear_bad() to state >> the equivalence of !pmd_present() and is_pmd_migration_entry() >> - fix migration entry wait deadlock code (from v1) in follow_page_mask= () >> - remove unnecessary code (from v1) in follow_trans_huge_pmd() >> - use is_swap_pmd() instead of !pmd_present() for pmd migration entry,= >> so it will not be confused with pmd_none() >> - change author information >> >> Signed-off-by: Zi Yan >> --- >> arch/x86/mm/gup.c | 7 +++-- >> fs/proc/task_mmu.c | 30 +++++++++++++-------- >> include/asm-generic/pgtable.h | 17 +++++++++++- >> include/linux/huge_mm.h | 14 ++++++++-- >> mm/gup.c | 22 ++++++++++++++-- >> mm/huge_memory.c | 61 ++++++++++++++++++++++++++++++++++= ++++----- >> mm/memcontrol.c | 5 ++++ >> mm/memory.c | 12 +++++++-- >> mm/mprotect.c | 4 +-- >> mm/mremap.c | 2 +- >> 10 files changed, 145 insertions(+), 29 deletions(-) >> >> diff --git a/arch/x86/mm/gup.c b/arch/x86/mm/gup.c >> index 456dfdfd2249..096bbcc801e6 100644 >> --- a/arch/x86/mm/gup.c >> +++ b/arch/x86/mm/gup.c >> @@ -9,6 +9,7 @@ >> #include >> #include >> #include >> +#include >> #include >> =20 >> #include >> @@ -243,9 +244,11 @@ static int gup_pmd_range(pud_t pud, unsigned long= addr, unsigned long end, >> pmd_t pmd =3D *pmdp; >> =20 >> next =3D pmd_addr_end(addr, end); >> - if (pmd_none(pmd)) >> + if (!pmd_present(pmd)) { >> + VM_BUG_ON(is_swap_pmd(pmd) && IS_ENABLED(CONFIG_MIGRATION) && >> + !is_pmd_migration_entry(pmd)); >> return 0; >> - if (unlikely(pmd_large(pmd) || !pmd_present(pmd))) { >> + } else if (unlikely(pmd_large(pmd))) { >> /* >> * NUMA hinting faults need to be handled in the GUP >> * slowpath for accounting purposes and so that they >> diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c >> index 5c8359704601..57489dcd71c4 100644 >> --- a/fs/proc/task_mmu.c >> +++ b/fs/proc/task_mmu.c >> @@ -600,7 +600,8 @@ static int smaps_pte_range(pmd_t *pmd, unsigned lo= ng addr, unsigned long end, >> =20 >> ptl =3D pmd_trans_huge_lock(pmd, vma); >> if (ptl) { >> - smaps_pmd_entry(pmd, addr, walk); >> + if (pmd_present(*pmd)) >> + smaps_pmd_entry(pmd, addr, walk); >> spin_unlock(ptl); >> return 0; >> } >> @@ -942,6 +943,9 @@ static int clear_refs_pte_range(pmd_t *pmd, unsign= ed long addr, >> goto out; >> } >> =20 >> + if (!pmd_present(*pmd)) >> + goto out; >> + >=20 > These pmd_present() checks should have been done irrespective of the > presence of new PMD migration entries. Please separate them out in a > different clean up patch. Not really. The introduction of PMD migration entries makes pmd_trans_huge_lock() return a lock when PMD is a swap entry (See changes on pmd_trans_huge_lock() in this patch). This was not the case before, where pmd_trans_huge_lock() returned NULL if PMD entry was pmd_none() and both two chunks were not reachable. Maybe I should use is_swap_pmd() to clarify the confusion. >> diff --git a/mm/huge_memory.c b/mm/huge_memory.c >> index 7406d88445bf..3479e9caf2fa 100644 >> --- a/mm/huge_memory.c >> +++ b/mm/huge_memory.c >> @@ -912,6 +912,22 @@ int copy_huge_pmd(struct mm_struct *dst_mm, struc= t mm_struct *src_mm, >> =20 >> ret =3D -EAGAIN; >> pmd =3D *src_pmd; >> + >> + if (unlikely(is_swap_pmd(pmd))) { >> + swp_entry_t entry =3D pmd_to_swp_entry(pmd); >> + >> + VM_BUG_ON(IS_ENABLED(CONFIG_MIGRATION) && >> + !is_pmd_migration_entry(pmd)); >> + if (is_write_migration_entry(entry)) { >> + make_migration_entry_read(&entry); >=20 > We create a read migration entry after detecting a write ? When copying page tables, COW mappings require pages in both parent and child to be set to read. In copy_huge_pmd(), only anonymous VMAs are copied and the other VMAs will be refilled on fault. Writable anonymous VMAs have VM_MAYWRITE set but not VM_SHARED and this matches is_cow_mapping(). So all mappings copied in this function are COW mapping= s. >=20 >> + pmd =3D swp_entry_to_pmd(entry); >> + set_pmd_at(src_mm, addr, src_pmd, pmd); >> + } >> + set_pmd_at(dst_mm, addr, dst_pmd, pmd); >> + ret =3D 0; >> + goto out_unlock; >> + } >> + >> if (unlikely(!pmd_trans_huge(pmd))) { >> pte_free(dst_mm, pgtable); >> goto out_unlock; >> @@ -1218,6 +1234,9 @@ int do_huge_pmd_wp_page(struct vm_fault *vmf, pm= d_t orig_pmd) >> if (unlikely(!pmd_same(*vmf->pmd, orig_pmd))) >> goto out_unlock; >> =20 >> + if (unlikely(!pmd_present(orig_pmd))) >> + goto out_unlock; >> + >> page =3D pmd_page(orig_pmd); >> VM_BUG_ON_PAGE(!PageCompound(page) || !PageHead(page), page); >> /* >> @@ -1548,6 +1567,12 @@ bool madvise_free_huge_pmd(struct mmu_gather *t= lb, struct vm_area_struct *vma, >> if (is_huge_zero_pmd(orig_pmd)) >> goto out; >> =20 >> + if (unlikely(!pmd_present(orig_pmd))) { >> + VM_BUG_ON(IS_ENABLED(CONFIG_MIGRATION) && >> + !is_pmd_migration_entry(orig_pmd)); >> + goto out; >> + } >> + >> page =3D pmd_page(orig_pmd); >> /* >> * If other processes are mapping this page, we couldn't discard >> @@ -1758,6 +1783,21 @@ int change_huge_pmd(struct vm_area_struct *vma,= pmd_t *pmd, >> preserve_write =3D prot_numa && pmd_write(*pmd); >> ret =3D 1; >> =20 >> + if (is_swap_pmd(*pmd)) { >> + swp_entry_t entry =3D pmd_to_swp_entry(*pmd); >> + >> + VM_BUG_ON(IS_ENABLED(CONFIG_MIGRATION) && >> + !is_pmd_migration_entry(*pmd)); >> + if (is_write_migration_entry(entry)) { >> + pmd_t newpmd; >> + >> + make_migration_entry_read(&entry); >=20 > Same here or maybe I am missing something. I follow the same pattern in change_pte_range() (mm/mprotect.c). The comment there says "A protection check is difficult so just be safe and disable write". --=20 Best Regards, Yan Zi --------------enig595100625FACE9F209DE01E4 Content-Type: application/pgp-signature; name="signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="signature.asc" -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/ iQEcBAEBCAAGBQJY+iKhAAoJEEGLLxGcTqbMWKEH/iKaVELdk3qnEdda35UMMiyA QQqPq6qwdxLe6Ti1LeEMew0gEzbkYhvtF8bS92ZDqpLbOVLBPNZc/Rta5Og3dWgB UnYwO1ytg2hghRm/lj7B1tVht/x+x74XZxDA9ohySwX5I/iWUOjbVz7ieCnpZtmj hXNxl1ldWdGxfTp4ptOpqXCkvBBQsgM+FkKsDnw1BKsHYkgoLSPX5kW3VnCqHquh z8jydKCw1NBryq63izEshctQcQcnnUPYj1kQYGrweOpzQrZZY1HTR6KdYHP1sjkB iMfzXVkGNAuGGsYEStC9ldfZdEFC4WMiwv+W9jY30K6yBp2+hHiZ3G3S4gdnS8I= =m0h0 -----END PGP SIGNATURE----- --------------enig595100625FACE9F209DE01E4--