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=-12.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=unavailable 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 4DD9EC433E0 for ; Tue, 23 Mar 2021 17:19:01 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 23AC361993 for ; Tue, 23 Mar 2021 17:19:01 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230134AbhCWRS3 (ORCPT ); Tue, 23 Mar 2021 13:18:29 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57622 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229904AbhCWRSC (ORCPT ); Tue, 23 Mar 2021 13:18:02 -0400 Received: from mail-ej1-x635.google.com (mail-ej1-x635.google.com [IPv6:2a00:1450:4864:20::635]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 470FCC061574 for ; Tue, 23 Mar 2021 10:18:02 -0700 (PDT) Received: by mail-ej1-x635.google.com with SMTP id a7so28367897ejs.3 for ; Tue, 23 Mar 2021 10:18:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=sIksllOwwOhhczn6psOt0I0GoHXhkwJmcDYhamv8gKE=; b=vSZ2XfjPA7Q0x7nDslI0TUHCfgjE8OzQMOyiNBobfPbkI7lBvvFArrtxoeDIweJhPl 8JHZOJTEfIN6cYo/3ONtzOz9XyV/C/Vyrb/R6bUfDuZWuDjZWUOsg+XY8wQfiHn8anFp NM496MAMALYcNbbsrGFVgyFgWqCos84G/R0MK46SuowtveMtrjpGirzN8vpR9zQIVz/l ej7DRfCobng5+6YzAzAgL1CJOA3zSyREUFYJ/+gUv/Yyr2wZgUmeVGLPyJuWTN/V3T1A NrnV3ziZIMZSj47PoXTFhNY0ghO/BugGK9eIjMuUeDl5riC1yWLStB+wjJtX01YDeeRk dkUg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=sIksllOwwOhhczn6psOt0I0GoHXhkwJmcDYhamv8gKE=; b=N5HWRa6lhgAAQKLzZul5Gw8i07D7+550xVZkb+JJESYHxRW9MkOrHsJW+8I1j8hevS Ngpf6JIomAiIDPqvzazhRa9lFOGfxOHZ2E//tWXSxYWdpGQV8Zv8RnCOlzxTZBOmMus9 ZZgyHu9aeglA99Fe62g/8h1Pl2QKrtTPuBHc5hji/oy+2Ml6bG3eF4ctkHpE8yTAuTGh FX7jOCKvQ2ljcgmq752VYA3vhgw7GCscbeu1P2hyWOyc7MOJTRnYgpCjAv5085onlWrY WY0ymF2yXY6OPPENny4kUwfPvettAPlYq7P4d+EDckqQnKExETII3Y+d65kwDNj42+VC 1Wjg== X-Gm-Message-State: AOAM531+7wwGyn0LhL/mqyRWzs1aCt8x4QQ9HNcXUi2dozvGlR7M5pQi 9BzTxm6kEFjzBWchNsIARdIz/NEfidXesxFIfkQ= X-Google-Smtp-Source: ABdhPJwU2t5vL8Vrp8UxhxH5Rh72ecVZHaOXV1n09OFWS/tmbQifotHY4rvMhWKy6CC87aCytJUDsCpsRi6eSvqyKx0= X-Received: by 2002:a17:906:a51:: with SMTP id x17mr5954970ejf.25.1616519881066; Tue, 23 Mar 2021 10:18:01 -0700 (PDT) MIME-Version: 1.0 References: <20210323135405.65059-1-linmiaohe@huawei.com> <20210323135405.65059-6-linmiaohe@huawei.com> In-Reply-To: <20210323135405.65059-6-linmiaohe@huawei.com> From: Yang Shi Date: Tue, 23 Mar 2021 10:17:48 -0700 Message-ID: Subject: Re: [PATCH v2 5/5] mm/migrate.c: fix potential deadlock in NUMA balancing shared exec THP case To: Miaohe Lin Cc: Andrew Morton , Jerome Glisse , Rafael Aquini , David Hildenbrand , Alistair Popple , Linux Kernel Mailing List , Linux MM Content-Type: text/plain; charset="UTF-8" Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, Mar 23, 2021 at 6:55 AM Miaohe Lin wrote: > > Since commit c77c5cbafe54 ("mm: migrate: skip shared exec THP for NUMA > balancing"), the NUMA balancing would skip shared exec transhuge page. > But this enhancement is not suitable for transhuge page. Because it's > required that page_mapcount() must be 1 due to no migration pte dance > is done here. On the other hand, the shared exec transhuge page will > leave the migrate_misplaced_page() with pte entry untouched and page > locked. Thus pagefault for NUMA will be triggered again and deadlock > occurs when we start waiting for the page lock held by ourselves. Thanks for catching this. By relooking the code I think the other important reason for removing this is migrate_misplaced_transhuge_page() actually can't see shared exec file THP at all since page_lock_anon_vma_read() is called before and if page is not anonymous page it will just restore the PMD without migrating anything. The pages for private mapped file vma may be anonymous pages due to COW but they can't be THP so it won't trigger THP numa fault at all. I think this is why no bug was reported. I overlooked this in the first place. Your fix is correct, and please add the above justification to your commit log. Reviewed-by: Yang Shi > > Fixes: c77c5cbafe54 ("mm: migrate: skip shared exec THP for NUMA balancing") > Signed-off-by: Miaohe Lin > --- > mm/migrate.c | 4 ---- > 1 file changed, 4 deletions(-) > > diff --git a/mm/migrate.c b/mm/migrate.c > index 5357a8527ca2..68bfa1625898 100644 > --- a/mm/migrate.c > +++ b/mm/migrate.c > @@ -2192,9 +2192,6 @@ int migrate_misplaced_transhuge_page(struct mm_struct *mm, > int page_lru = page_is_file_lru(page); > unsigned long start = address & HPAGE_PMD_MASK; > > - if (is_shared_exec_page(vma, page)) > - goto out; > - > new_page = alloc_pages_node(node, > (GFP_TRANSHUGE_LIGHT | __GFP_THISNODE), > HPAGE_PMD_ORDER); > @@ -2306,7 +2303,6 @@ int migrate_misplaced_transhuge_page(struct mm_struct *mm, > > out_unlock: > unlock_page(page); > -out: > put_page(page); > return 0; > } > -- > 2.19.1 > 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=-12.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS 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 CC03BC433C1 for ; Tue, 23 Mar 2021 17:18:08 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 6DD86619C0 for ; Tue, 23 Mar 2021 17:18:08 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 6DD86619C0 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 D82F16B0270; Tue, 23 Mar 2021 13:18:07 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id D59296B0271; Tue, 23 Mar 2021 13:18:07 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id C20CA6B0272; Tue, 23 Mar 2021 13:18:07 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0033.hostedemail.com [216.40.44.33]) by kanga.kvack.org (Postfix) with ESMTP id A55D06B0270 for ; Tue, 23 Mar 2021 13:18:07 -0400 (EDT) Received: from smtpin10.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay01.hostedemail.com (Postfix) with ESMTP id 6E6B71801A88B for ; Tue, 23 Mar 2021 17:18:07 +0000 (UTC) X-FDA: 77951797014.10.2688A61 Received: from mail-ej1-f51.google.com (mail-ej1-f51.google.com [209.85.218.51]) by imf04.hostedemail.com (Postfix) with ESMTP id 688C22BFE for ; Tue, 23 Mar 2021 17:18:02 +0000 (UTC) Received: by mail-ej1-f51.google.com with SMTP id kt15so18886893ejb.12 for ; Tue, 23 Mar 2021 10:18:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=sIksllOwwOhhczn6psOt0I0GoHXhkwJmcDYhamv8gKE=; b=vSZ2XfjPA7Q0x7nDslI0TUHCfgjE8OzQMOyiNBobfPbkI7lBvvFArrtxoeDIweJhPl 8JHZOJTEfIN6cYo/3ONtzOz9XyV/C/Vyrb/R6bUfDuZWuDjZWUOsg+XY8wQfiHn8anFp NM496MAMALYcNbbsrGFVgyFgWqCos84G/R0MK46SuowtveMtrjpGirzN8vpR9zQIVz/l ej7DRfCobng5+6YzAzAgL1CJOA3zSyREUFYJ/+gUv/Yyr2wZgUmeVGLPyJuWTN/V3T1A NrnV3ziZIMZSj47PoXTFhNY0ghO/BugGK9eIjMuUeDl5riC1yWLStB+wjJtX01YDeeRk dkUg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=sIksllOwwOhhczn6psOt0I0GoHXhkwJmcDYhamv8gKE=; b=T0Tdob4FduPXWpeMJWIIIxmfImKZKCIqQq1txKco2m7DRSyyPZpXGow/sW35Ki5Ou7 0oB3c4Hwo6wIhAKAR02ZwFr8Qqsxl676BR0Pec6GtQ2q4Sgm66mE9Y5J20yessgL+mfv EqtwmH3XclB05fB2BaPrwDhL/BIUxkkAsVwv1sZAVq9vKBKSaEH3yI5OvRRxiR0WW6kZ ugKU3lQ7rFcjcMl7gw1em5t5vKx2C54p69YsqHieHegc2t+M1L3ixHdcWEjHbKHZdKpU dWTxTgb4MBcchh+2Kg5CSb5h7aG2rrhH4+8w+4cEei55ijOIJRQVRcQRye07x32JkzU6 VpHQ== X-Gm-Message-State: AOAM5319UGYDW7ikXz9RIvsfv0cTM9mQVdcnKnEKttdtXHjodenGQ9dP HbQJxIVfwQZ41R+Si5dVFK5KzkUoYaE/b6TOQ6Q= X-Google-Smtp-Source: ABdhPJwU2t5vL8Vrp8UxhxH5Rh72ecVZHaOXV1n09OFWS/tmbQifotHY4rvMhWKy6CC87aCytJUDsCpsRi6eSvqyKx0= X-Received: by 2002:a17:906:a51:: with SMTP id x17mr5954970ejf.25.1616519881066; Tue, 23 Mar 2021 10:18:01 -0700 (PDT) MIME-Version: 1.0 References: <20210323135405.65059-1-linmiaohe@huawei.com> <20210323135405.65059-6-linmiaohe@huawei.com> In-Reply-To: <20210323135405.65059-6-linmiaohe@huawei.com> From: Yang Shi Date: Tue, 23 Mar 2021 10:17:48 -0700 Message-ID: Subject: Re: [PATCH v2 5/5] mm/migrate.c: fix potential deadlock in NUMA balancing shared exec THP case To: Miaohe Lin Cc: Andrew Morton , Jerome Glisse , Rafael Aquini , David Hildenbrand , Alistair Popple , Linux Kernel Mailing List , Linux MM Content-Type: text/plain; charset="UTF-8" X-Stat-Signature: y5fiishbt7sr83symj5zqi9xbgqd7rxt X-Rspamd-Server: rspam05 X-Rspamd-Queue-Id: 688C22BFE Received-SPF: none (gmail.com>: No applicable sender policy available) receiver=imf04; identity=mailfrom; envelope-from=""; helo=mail-ej1-f51.google.com; client-ip=209.85.218.51 X-HE-DKIM-Result: pass/pass X-HE-Tag: 1616519882-48348 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: On Tue, Mar 23, 2021 at 6:55 AM Miaohe Lin wrote: > > Since commit c77c5cbafe54 ("mm: migrate: skip shared exec THP for NUMA > balancing"), the NUMA balancing would skip shared exec transhuge page. > But this enhancement is not suitable for transhuge page. Because it's > required that page_mapcount() must be 1 due to no migration pte dance > is done here. On the other hand, the shared exec transhuge page will > leave the migrate_misplaced_page() with pte entry untouched and page > locked. Thus pagefault for NUMA will be triggered again and deadlock > occurs when we start waiting for the page lock held by ourselves. Thanks for catching this. By relooking the code I think the other important reason for removing this is migrate_misplaced_transhuge_page() actually can't see shared exec file THP at all since page_lock_anon_vma_read() is called before and if page is not anonymous page it will just restore the PMD without migrating anything. The pages for private mapped file vma may be anonymous pages due to COW but they can't be THP so it won't trigger THP numa fault at all. I think this is why no bug was reported. I overlooked this in the first place. Your fix is correct, and please add the above justification to your commit log. Reviewed-by: Yang Shi > > Fixes: c77c5cbafe54 ("mm: migrate: skip shared exec THP for NUMA balancing") > Signed-off-by: Miaohe Lin > --- > mm/migrate.c | 4 ---- > 1 file changed, 4 deletions(-) > > diff --git a/mm/migrate.c b/mm/migrate.c > index 5357a8527ca2..68bfa1625898 100644 > --- a/mm/migrate.c > +++ b/mm/migrate.c > @@ -2192,9 +2192,6 @@ int migrate_misplaced_transhuge_page(struct mm_struct *mm, > int page_lru = page_is_file_lru(page); > unsigned long start = address & HPAGE_PMD_MASK; > > - if (is_shared_exec_page(vma, page)) > - goto out; > - > new_page = alloc_pages_node(node, > (GFP_TRANSHUGE_LIGHT | __GFP_THISNODE), > HPAGE_PMD_ORDER); > @@ -2306,7 +2303,6 @@ int migrate_misplaced_transhuge_page(struct mm_struct *mm, > > out_unlock: > unlock_page(page); > -out: > put_page(page); > return 0; > } > -- > 2.19.1 >