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 X-Spam-Level: X-Spam-Status: No, score=-9.3 required=3.0 tests=DKIM_ADSP_CUSTOM_MED, DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 402B2C43331 for ; Wed, 1 Apr 2020 14:20:18 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id E4EA320705 for ; Wed, 1 Apr 2020 14:20:17 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="tepDJp6V" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org E4EA320705 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id 7E2298E0006; Wed, 1 Apr 2020 10:20:17 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 76BCF8E0001; Wed, 1 Apr 2020 10:20:17 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 6647B8E0006; Wed, 1 Apr 2020 10:20:17 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0159.hostedemail.com [216.40.44.159]) by kanga.kvack.org (Postfix) with ESMTP id 4BC5F8E0001 for ; Wed, 1 Apr 2020 10:20:17 -0400 (EDT) Received: from smtpin29.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay02.hostedemail.com (Postfix) with ESMTP id 0F80B40DD for ; Wed, 1 Apr 2020 14:20:17 +0000 (UTC) X-FDA: 76659496074.29.hook34_76d3a03fd0531 X-HE-Tag: hook34_76d3a03fd0531 X-Filterd-Recvd-Size: 6312 Received: from mail-pl1-f196.google.com (mail-pl1-f196.google.com [209.85.214.196]) by imf06.hostedemail.com (Postfix) with ESMTP for ; Wed, 1 Apr 2020 14:20:16 +0000 (UTC) Received: by mail-pl1-f196.google.com with SMTP id w3so9686379plz.5 for ; Wed, 01 Apr 2020 07:20:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=3w8U8eUpbxjczXIbE84xn0ieCjptlY7uxoIMsFwJA9s=; b=tepDJp6VfcT2Ri2fMsD41rRtuJQc4MLb6lzVXh2svkfQGQGSBK8jOCfdvPfa5VUWcB 1b815szyMrZ6mEl00BNFsBjhY/vFwAzyd+IHHUZLWtC+7/PN3XhSkZVlgMnqH1IGtvzb 2cEfDs2kvDHN47nFRtsWIU65OaOvo8mIHB3s3hbmUgYje5i5oD8e1w3IlD7/okZtxYui J8AY7pxt3N7JRdhgjVj2FAamTTYUH58YAoPKXEarLX5+a9U9nermI4VEDO9LYUXFmXQj psDU0JYlhALlv4fm9kZR9UKhNkbnB1XKJrvAWWcMQgJMw+3uyK2FdAFNT4cujXxiqrwi Y+bg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=3w8U8eUpbxjczXIbE84xn0ieCjptlY7uxoIMsFwJA9s=; b=pmg844+mfFUqVVSz0GnBTiXYiU8DyTXRQoF7iN/owcVbCqlSVzKQzetdivJ3yuG4BZ eG/pBFeQ1mUOVFnD6dkoX/GzYkGOMqXrDLSt2mvlUDZu1sQj5qeSrF6k6pyaJpvQCnD1 J8tV5rQaVBUs+1hfIkLlyLGBBOtTXcNAXgk4P0JdxUvOBVXmwHAOwscnFrFF8crdtLum UIc1+EOnFsA4jXZa9S51zaoIvUoSoOHBytSUH70qCRoRIcgQI8JeEiidOnTTMswmGWau mcjjY2d9wblzjWV3aS0VCVitDWB+bhYt7nxXePrtglyqpvvjpxOEVmufDiHx+4PPSVvd e6iw== X-Gm-Message-State: AGi0PuYZnX+tvoz2ZIYu1gUQKms6BKq3c5KPL5pK00DHBix6SgcRTniT L1ldLazFIRTn+kDKqNPErl+80QevwA== X-Google-Smtp-Source: APiQypI8QrXIIoTnew11fX4ZRvQKSDBZOTI5kkK+r3gh/CvBQnZMVjEiQ8uiOaCUcAJvfoE0C72LkQ== X-Received: by 2002:a17:90b:46c9:: with SMTP id jx9mr5339028pjb.2.1585750815146; Wed, 01 Apr 2020 07:20:15 -0700 (PDT) Received: from mylaptop.redhat.com ([209.132.188.80]) by smtp.gmail.com with ESMTPSA id e7sm1723449pfm.3.2020.04.01.07.20.10 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 01 Apr 2020 07:20:14 -0700 (PDT) From: Pingfan Liu To: linux-mm@kvack.org Cc: Pingfan Liu , =?UTF-8?q?J=C3=A9r=C3=B4me=20Glisse?= , Michal Hocko , Ralph Campbell , Balbir Singh , Dan Williams , John Hubbard , "Kirill A . Shutemov" , Aneesh Kumar , Andrew Morton Subject: [PATCH] mm/rmap: fix the handling of !private device page in try_to_unmap_one() Date: Wed, 1 Apr 2020 22:17:58 +0800 Message-Id: <1585750678-5840-1-git-send-email-kernelfans@gmail.com> X-Mailer: git-send-email 2.7.5 In-Reply-To: <1584885427-4952-1-git-send-email-kernelfans@gmail.com> References: <1584885427-4952-1-git-send-email-kernelfans@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable 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: This patch is a pure code refinement without any functional changes. try_to_unmap_one() is shared by try_to_unmap() and try_to_munlock(). As f= or unmap, if try_to_unmap_one() return true, it means the pte has been teare= d down and mapcount dec. Apparently the current code if (IS_ENABLED(CONFIG_MIGRATION) && (flags & TTU_MIGRATION) && is_zone_device_page(page) && !is_device_private_page(page)) return true; conflicts with this logic. Further more, as for zone_device, migration can only happen on is_device_private_page(page). For other zone_device, memmap_init_zone_dev= ice() raises an extra _refcount on all zone pages. This extra _refcount will bl= ock migration. So in try_to_unmap_one(), it can just return false for other z= one device. The reason why original code happen to work one !private zone_device. -1. if page mapped, then try_to_unmap_one()->page_remove_rmap() is skippe= d, and finally try_to_unmap(){ return !page_mapcount(page) ? true : false;} will return false. -2. if page not mapped, the extra _refcount will prevent the migration. Signed-off-by: Pingfan Liu Cc: J=C3=A9r=C3=B4me Glisse Cc: Michal Hocko Cc: Ralph Campbell Cc: Balbir Singh Cc: Dan Williams Cc: John Hubbard Cc: Kirill A. Shutemov Cc: Aneesh Kumar Cc: Andrew Morton To: linux-mm@kvack.org --- v1 -> v2: improve commit log and note in code mm/rmap.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/mm/rmap.c b/mm/rmap.c index b838647..723af4f 100644 --- a/mm/rmap.c +++ b/mm/rmap.c @@ -1358,6 +1358,10 @@ void page_remove_rmap(struct page *page, bool comp= ound) /* * @arg: enum ttu_flags will be passed to this argument + * + * For munlock, return true if @page is not mlocked by @vma without kill= ing pte + * For unmap, return true after tearing down pte. + * For both cases, return false if rmap_walk should be stopped. */ static bool try_to_unmap_one(struct page *page, struct vm_area_struct *v= ma, unsigned long address, void *arg) @@ -1380,7 +1384,7 @@ static bool try_to_unmap_one(struct page *page, str= uct vm_area_struct *vma, if (IS_ENABLED(CONFIG_MIGRATION) && (flags & TTU_MIGRATION) && is_zone_device_page(page) && !is_device_private_page(page)) - return true; + return false; if (flags & TTU_SPLIT_HUGE_PMD) { split_huge_pmd_address(vma, address, @@ -1487,7 +1491,7 @@ static bool try_to_unmap_one(struct page *page, str= uct vm_area_struct *vma, if (IS_ENABLED(CONFIG_MIGRATION) && (flags & TTU_MIGRATION) && - is_zone_device_page(page)) { + is_device_private_page(page)) { swp_entry_t entry; pte_t swp_pte; -- 2.7.5