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 39316EB64D7 for ; Wed, 21 Jun 2023 10:59:51 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 8C17C8D0002; Wed, 21 Jun 2023 06:59:50 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 872228D0001; Wed, 21 Jun 2023 06:59:50 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 739198D0002; Wed, 21 Jun 2023 06:59:50 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 640EB8D0001 for ; Wed, 21 Jun 2023 06:59:50 -0400 (EDT) Received: from smtpin28.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id 05AAC140908 for ; Wed, 21 Jun 2023 10:59:50 +0000 (UTC) X-FDA: 80926459740.28.FB1A93C Received: from smtp-out2.suse.de (smtp-out2.suse.de [195.135.220.29]) by imf01.hostedemail.com (Postfix) with ESMTP id 03ABB40027 for ; Wed, 21 Jun 2023 10:59:47 +0000 (UTC) Authentication-Results: imf01.hostedemail.com; dkim=pass header.d=suse.com header.s=susede1 header.b="QL5m/Pw4"; dmarc=pass (policy=quarantine) header.from=suse.com; spf=pass (imf01.hostedemail.com: domain of mhocko@suse.com designates 195.135.220.29 as permitted sender) smtp.mailfrom=mhocko@suse.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1687345188; 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:in-reply-to:references:references:dkim-signature; bh=SYvyqcfIvBDwQbH62qa2mc3i1QCrKaaO55zSCUw7Rpc=; b=o6qWJeiUEGPhqWIobdNFdJwD5i9W6Hf9+Fkzgp4RcWZZ6uTWfNoe1eneqJwIeQDgTND5QX v2Zx5Q6RkCcvtRGeo5CuouDA+iudYlu7j4ilx0bNOXjorjXcwh8yqwnEYCavt0g9tr5bHz onlnOV1HIStWnlwz1wfL6oE9WapqL/c= ARC-Authentication-Results: i=1; imf01.hostedemail.com; dkim=pass header.d=suse.com header.s=susede1 header.b="QL5m/Pw4"; dmarc=pass (policy=quarantine) header.from=suse.com; spf=pass (imf01.hostedemail.com: domain of mhocko@suse.com designates 195.135.220.29 as permitted sender) smtp.mailfrom=mhocko@suse.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1687345188; a=rsa-sha256; cv=none; b=YiR/foCh3Wld5ytYCiKMAUtmrlFjKxAqz28TAz9lUjnf9a9hd4StOUecb/AQ9KA6D2mJVK pL8WcavP7C+Cx2R6Czz5M4yeB69F8qJ75vBkYR4zmQfzzTQClxm6Nzn78OyEot19rQROL1 Zapm3xdV0pPOstxGS/4uO00++Vbvg9I= Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by smtp-out2.suse.de (Postfix) with ESMTPS id 4ABB11FDBA; Wed, 21 Jun 2023 10:59:46 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=susede1; t=1687345186; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=SYvyqcfIvBDwQbH62qa2mc3i1QCrKaaO55zSCUw7Rpc=; b=QL5m/Pw4N7kbpmEU5n3+duU+GUnXhgbmUPmPKyDXi6/5PDDXFix5p1X6Wz6WoXtUgmMmHg lW6ec7rxonyxNIk2pnLFtKyYtihaBjj/Ysr3GxucRX5xwZ3E5GbMPbWExodWdHRLeHRtdk BFMfCDWKMSs8TexDnX5rIMG6RJmm5MQ= Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by imap2.suse-dmz.suse.de (Postfix) with ESMTPS id AB465134B1; Wed, 21 Jun 2023 10:59:45 +0000 (UTC) Received: from dovecot-director2.suse.de ([192.168.254.65]) by imap2.suse-dmz.suse.de with ESMTPSA id ra6FJyHYkmRXHQAAMHmgww (envelope-from ); Wed, 21 Jun 2023 10:59:45 +0000 Date: Wed, 21 Jun 2023 12:59:44 +0200 From: Michal Hocko To: Sebastian Andrzej Siewior Cc: linux-mm@kvack.org, "Luis Claudio R. Goncalves" , Andrew Morton , Mel Gorman , Tetsuo Handa , Thomas Gleixner Subject: Re: [PATCH] mm/page_alloc: Use write_seqlock_irqsave() instead write_seqlock() + local_irq_save(). Message-ID: References: <20230621104034.HT6QnNkQ@linutronix.de> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20230621104034.HT6QnNkQ@linutronix.de> X-Rspamd-Server: rspam09 X-Rspamd-Queue-Id: 03ABB40027 X-Stat-Signature: p9fbbo6ncecai146ei47c41czetumx4n X-Rspam-User: X-HE-Tag: 1687345187-120096 X-HE-Meta: U2FsdGVkX1+6lFZy2v87BaybocylCdUv/cfWlzHu/pR+LHDuNOrT8Oib58NwVhXzLxKxhVT8bt8XPLPbrcDz2FkMO7kR0LKN0pyKDG3tkbkRmge4XRny08xfi7B187us51NqMwBz9qZoJwGeJ5K0SaJQhImYniYe/EZ2aIFeXjDR74PCYQ0aLPB6ZUY3vR6DBhnBYGqYnz4yYn3WA3lJiZowCHboxoMJ11QdCB8Rp8w9jUSRQXv3TlgQ9t18/YWM3FGZ94NF8qUc1D5pxPkKZEIUT2j/aeGoZZCMdjlvm5VIsOof6dnpIkLzLRsblLEPAXe9CRb8wG2jNlFMxGr9yHHYX4Pl2tAgjLvzs1VXdMtyMtOJbz8+9DG99NkU/CrjRtmDeOBNdFbtqH882BVPZBOAUDNe+iEmHOC6ocM2dHEWLSPdZ503QSBsjSDMoi1D3DGOCKJWp/7Aw13q3Dmo4a7T3c9Iujrvf5tpgithgfHA7wabLsZxebqGjuQN6PjSRNkNGuHOqhIGfC/XHxBRxaJ4okwT/0MCZIJ58rmFD1V5rOcBcYHtzIejzkjKeiTIp5bku9K6neTeLZ56JJCFAwJEo0/frofqq/+TLwxaGTBs3HoONxshIaIFhQtbwxf06rGHl1dPfpx6Qrk775JEGsZp+7NdZRx6wHEHOlT3qUp7znz1JwXG6LetyhQCX0i607NsI+MD+XmP/dOetqUrdun4yM/XBzeaisn0zTQMOnvYyTxTT9s5+Pn6R3kixlyxy6cjTe1Y6kRsttvMfHPRPTXXbRUGXXW2SfXQa7bx8ES4YTfJ6ceNEnYECAcCWuPqByUMYH59Uew7X/SafXYmHC03zwmDhDDqLJfqoaV9rUDcbX1ua3LAl4HKhivV+QcYafnG+2PnF1chZm84JxVf+nWL0muV2wcPWAvBpanysxFNbEPTX003tgPy7lKlWVTWPSiRK11ffbuH9bKIos0 7bgQNAcP 3Sfgt8vKgG36mwRLoY6U9uY5mwEJNU9HuMT226hXKhvO5kHXq185izfvIIOVKNRcEq1WSqV5YUHVTYNvgTO9N/qRguqLSDazayVNm/GwoywQwlwcB5z8d1dpce/p17uPlkpDfINuYl4NBUBhdw24h1EbNhQ4/cOcOG7y7ME18km1SWmcUmfmHGcDTNykeCrb/XDZoYH/sr1YJizQgnFdwYSAlRvQVu5orrik9fGrQm0tRPn7Ln7WHTs7dljJnaQnkdt3F 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 Wed 21-06-23 12:40:34, Sebastian Andrzej Siewior wrote: > __build_all_zonelists() acquires zonelist_update_seq by first disabling > interrupts via local_irq_save() and then acquiring the seqlock with > write_seqlock(). This is troublesome and leads to problems on > PREEMPT_RT because the inner spinlock_t is now acquired with disabled > interrupts. And the spinlock might sleep with PREEMPT_RT so a deadlock, right? It would be better to call that out explicitly > The API provides write_seqlock_irqsave() which does the right thing in > one step. > printk_deferred_enter() has to be invoked in non-migrate-able context to > ensure that deferred printing is enabled and disabled on the same CPU. > This is the case after zonelist_update_seq has been acquired. > > Acquire zonelist_update_seq with write_seqlock_irqsave() and then defer > printk output. > > Fixes: 1007843a91909 ("mm/page_alloc: fix potential deadlock on zonelist_update_seq seqlock") > Signed-off-by: Sebastian Andrzej Siewior Acked-by: Michal Hocko Thanks > --- > mm/page_alloc.c | 11 ++++------- > 1 file changed, 4 insertions(+), 7 deletions(-) > > diff --git a/mm/page_alloc.c b/mm/page_alloc.c > index 47421bedc12b7..99b7e7d09c5c0 100644 > --- a/mm/page_alloc.c > +++ b/mm/page_alloc.c > @@ -5808,11 +5808,10 @@ static void __build_all_zonelists(void *data) > unsigned long flags; > > /* > - * Explicitly disable this CPU's interrupts before taking seqlock > - * to prevent any IRQ handler from calling into the page allocator > - * (e.g. GFP_ATOMIC) that could hit zonelist_iter_begin and livelock. > + * The zonelist_update_seq must be acquired with irqsave because the > + * reader can be invoked from IRQ with GFP_ATOMIC. > */ > - local_irq_save(flags); > + write_seqlock_irqsave(&zonelist_update_seq, flags); > /* > * Explicitly disable this CPU's synchronous printk() before taking > * seqlock to prevent any printk() from trying to hold port->lock, for > @@ -5820,7 +5819,6 @@ static void __build_all_zonelists(void *data) > * calling kmalloc(GFP_ATOMIC | __GFP_NOWARN) with port->lock held. > */ > printk_deferred_enter(); > - write_seqlock(&zonelist_update_seq); > > #ifdef CONFIG_NUMA > memset(node_load, 0, sizeof(node_load)); > @@ -5857,9 +5855,8 @@ static void __build_all_zonelists(void *data) > #endif > } > > - write_sequnlock(&zonelist_update_seq); > printk_deferred_exit(); > - local_irq_restore(flags); > + write_sequnlock_irqrestore(&zonelist_update_seq, flags); > } > > static noinline void __init > -- > 2.40.1 -- Michal Hocko SUSE Labs