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 A39CAC001DC for ; Sat, 29 Jul 2023 05:32:54 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id A8ACD6B0071; Sat, 29 Jul 2023 01:32:53 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id A3B516B0072; Sat, 29 Jul 2023 01:32:53 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 9028F6B0074; Sat, 29 Jul 2023 01:32:53 -0400 (EDT) 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 7AF146B0071 for ; Sat, 29 Jul 2023 01:32:53 -0400 (EDT) Received: from smtpin22.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id 2A106C049B for ; Sat, 29 Jul 2023 05:32:53 +0000 (UTC) X-FDA: 81063530226.22.D0D8EF4 Received: from www262.sakura.ne.jp (www262.sakura.ne.jp [202.181.97.72]) by imf02.hostedemail.com (Postfix) with ESMTP id AF4AC80002 for ; Sat, 29 Jul 2023 05:32:49 +0000 (UTC) Authentication-Results: imf02.hostedemail.com; dkim=none; spf=none (imf02.hostedemail.com: domain of penguin-kernel@I-love.SAKURA.ne.jp has no SPF policy when checking 202.181.97.72) smtp.mailfrom=penguin-kernel@I-love.SAKURA.ne.jp; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1690608770; 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=KDOF6CoCkQEYBlpwDlEbQxnaCpSiWmYOVerYp+xTOQ8=; b=GiGXViHm8QHwmnZp/1N4wszyWryYrwztnn0iuSpreSIYuxcdtRyTr6tWtKulPrTm2x12Zc k11x7BXHyEU1fMDIDF+GfBn+Tbkrz63e3SK+UXST9by8ZyQd/pGKCAXEY7kITTdpZNR3ww aOgKd/JbNmHes88agu1T+28YnAWrFUI= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1690608770; a=rsa-sha256; cv=none; b=PZgLCz/R2W1QdmHqxzKM6jRMWLiaOtZv9iGF5SY37esyqArYC/Mbwx5lwBh685b54hE3Pa EjbqgmWtyzBKoDZVgHkHKL33chNH5yQ4uaoi8Ags4pmpsYJ9oqZa42XA8M6Or0PdeoPC+V zNEUGJOxDwR0zRJ3uZhZskvxu1I/vyQ= ARC-Authentication-Results: i=1; imf02.hostedemail.com; dkim=none; spf=none (imf02.hostedemail.com: domain of penguin-kernel@I-love.SAKURA.ne.jp has no SPF policy when checking 202.181.97.72) smtp.mailfrom=penguin-kernel@I-love.SAKURA.ne.jp; dmarc=none Received: from fsav116.sakura.ne.jp (fsav116.sakura.ne.jp [27.133.134.243]) by www262.sakura.ne.jp (8.15.2/8.15.2) with ESMTP id 36T5WIF7088477; Sat, 29 Jul 2023 14:32:18 +0900 (JST) (envelope-from penguin-kernel@I-love.SAKURA.ne.jp) Received: from www262.sakura.ne.jp (202.181.97.72) by fsav116.sakura.ne.jp (F-Secure/fsigk_smtp/550/fsav116.sakura.ne.jp); Sat, 29 Jul 2023 14:32:18 +0900 (JST) X-Virus-Status: clean(F-Secure/fsigk_smtp/550/fsav116.sakura.ne.jp) Received: from [192.168.1.6] (M106072142033.v4.enabler.ne.jp [106.72.142.33]) (authenticated bits=0) by www262.sakura.ne.jp (8.15.2/8.15.2) with ESMTPSA id 36T5V368088259 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=NO); Sat, 29 Jul 2023 14:31:03 +0900 (JST) (envelope-from penguin-kernel@I-love.SAKURA.ne.jp) Message-ID: Date: Sat, 29 Jul 2023 14:31:01 +0900 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.13.0 Subject: Re: [PATCH v2 1/2] seqlock: Do the lockdep annotation before locking in do_write_seqcount_begin_nested() Content-Language: en-US To: Sebastian Andrzej Siewior , Michal Hocko Cc: Petr Mladek , linux-mm@kvack.org, linux-kernel@vger.kernel.org, "Luis Claudio R. Goncalves" , Andrew Morton , Boqun Feng , Ingo Molnar , John Ogness , Mel Gorman , Peter Zijlstra , Thomas Gleixner , Waiman Long , Will Deacon References: <20230623171232.892937-1-bigeasy@linutronix.de> <20230623171232.892937-2-bigeasy@linutronix.de> <20230626081254.XmorFrhs@linutronix.de> <20230727151029.e_M9bi8N@linutronix.de> From: Tetsuo Handa In-Reply-To: <20230727151029.e_M9bi8N@linutronix.de> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Rspamd-Queue-Id: AF4AC80002 X-Rspam-User: X-Rspamd-Server: rspam11 X-Stat-Signature: 63hpferpw3tm4dx3f8g7eccreb6wxtgt X-HE-Tag: 1690608769-114987 X-HE-Meta: U2FsdGVkX18XaEvdkGm15e0CAI6Dl7b95cXVFm8KN0CJW89Lnda9QY2jR2ZjcciPR8ak5ei2wyKGM0ZgMeCs2h+kJLGf/Zun2X/YDZj7kwjuhHocdLyjBZxIQFik32i6eG/kYJt+Sj2shl8X93BU6BqNtbrV5cj7P/kMcULkB4nh2F2/p17G3TOJaTrdkxB+l8pfv8yoFzW4uKQKIArz7NZnyETR+6pFoLCbjwVUOtG89kIU7mNcgxFoLd9UbfnQmLjHbJB+IbdKSZgPZgNpqxmBbcZ+FHAem0LvI9GlZVRbd4HtyEatRGGLSopVSFnHy6d3zEW2SqWbH6jIMdCTENpbZtBon2+bPz8d1CooIwcosT0G4uYGATqtbrQNhu5sYo1sRdmzHrIYzYMAqytbPTPcSIn93WJeC0WFhXfHeon0tb+nEJSk/hJZP78ua+OTmKMLv21L90QND1GOqmbSQbKEEvbGBozRtr1KzFKpy6jWUXH/k5el0dbeBuNGulFoMzHer0lFbxmikiOfkB5iqUy4fg44ky2zP2wFcb0WmDQX7/bTTPpwjgSdBgcUvcXRBBb14jCxSdfZ5J5beJeK/CFCEd+8PD4Eg1eacJXEhb9iRVHUghi7yeHEXD9YUFwIwAvejvn39BWgkzt7HuiuiLXt73rkqNM1NW/ny4gcro2T5nNWQAYn8KlEqCHUNeF4CV8VVKv9x8sL8c/mQ20Ab2I0m7lDl9mC2xsO3WVb2G7DDAJrYadnjogNCm46fGA2b6eFVypm7eO5UM3joKjcxopONqUHFCSwex/g7K7dRCZARvwnumyU9UdJ5svVM+7zEwdVOdQCThRKkC2xW4G/nfm7l17hA40Fr/I3tS1uBC/C9c3JUEbAA1rwwXDi0GQWy0HrVqt9wVNerQAbj0G40icC4OmDI7fRM7GdhLt6+xZiaWblQRBMdpMluNKFbQS31Xsk1u070t9CvaAblhb s6Wzo98I yn2EDeOSB2H9Gm2hKvciINWKPLPovmFwu3aC2H+fdcioJWcAhyXk5KqU7dB77RDfvHUJdB9h/zpX0LpqXxwPwvROAnWsg/jLEPtcSr7LkMt9ZQPD8UlSjwujJgBpAojhAiXJKTEwXzUKaDHgROXUEXdzVJQ8pKxPJ9cVOKSVBbj2HQCEYluYlR0J8uPqpPL/bxqw+GplHjjnQjgtubyw9RcR4nP0kattv1SALzXqcI1ImHOBkz6eDGmLWE5nAle4jgZjMe8UisBtrI3rz4ipmO3EKNQ632yoKhD/rkXw3OAClYAin9ukqLAtsbhtMQJZA4e/nnHMhXTNgXwmpJ65S5bjUVamqy2NoCsseFHclXxkyzFS6fnYIJ0bmtJ9js4d8wm6HmmNd8ywj9m0= 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 2023/07/28 0:10, Sebastian Andrzej Siewior wrote: > On 2023-06-28 21:14:16 [+0900], Tetsuo Handa wrote: >>> Anyway, please do not do this change only because of printk(). >>> IMHO, the current ordering is more logical and the printk() problem >>> should be solved another way. >> >> Then, since [PATCH 1/2] cannot be applied, [PATCH 2/2] is automatically >> rejected. > > My understanding is that this patch gets applied and your objection will > be noted. My preference is that zonelist_update_seq is not checked by !__GFP_DIRECT_RECLAIM allocations, which is a low-hanging fruit towards GFP_LOCKLESS mentioned at https://lkml.kernel.org/r/ZG3+l4qcCWTPtSMD@dhcp22.suse.cz and https://lkml.kernel.org/r/ZJWWpGZMJIADQvRS@dhcp22.suse.cz . Maybe we can defer checking zonelist_update_seq till retry check like below, for this is really an infrequent event. diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 7d3460c7a480..2f7b82af2590 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -3642,22 +3642,27 @@ EXPORT_SYMBOL_GPL(fs_reclaim_release); * retries the allocation if zonelist changes. Writer side is protected by the * embedded spin_lock. */ -static DEFINE_SEQLOCK(zonelist_update_seq); +static unsigned int zonelist_update_seq; static unsigned int zonelist_iter_begin(void) { if (IS_ENABLED(CONFIG_MEMORY_HOTREMOVE)) - return read_seqbegin(&zonelist_update_seq); + return data_race(READ_ONCE(zonelist_update_seq)); return 0; } -static unsigned int check_retry_zonelist(unsigned int seq) +static unsigned int check_retry_zonelist(gfp_t gfp, unsigned int seq) { - if (IS_ENABLED(CONFIG_MEMORY_HOTREMOVE)) - return read_seqretry(&zonelist_update_seq, seq); + if (IS_ENABLED(CONFIG_MEMORY_HOTREMOVE) && (gfp & __GFP_DIRECT_RECLAIM)) { + unsigned int seq2; + + smp_rmb(); + seq2 = data_race(READ_ONCE(zonelist_update_seq)); + return unlikely(seq != seq2 || (seq2 & 1)); + } - return seq; + return 0; } /* Perform direct synchronous page reclaim */ @@ -4146,7 +4151,7 @@ __alloc_pages_slowpath(gfp_t gfp_mask, unsigned int order, * a unnecessary OOM kill. */ if (check_retry_cpuset(cpuset_mems_cookie, ac) || - check_retry_zonelist(zonelist_iter_cookie)) + check_retry_zonelist(gfp_mask, zonelist_iter_cookie)) goto restart; /* Reclaim has failed us, start killing things */ @@ -4172,7 +4177,7 @@ __alloc_pages_slowpath(gfp_t gfp_mask, unsigned int order, * a unnecessary OOM kill. */ if (check_retry_cpuset(cpuset_mems_cookie, ac) || - check_retry_zonelist(zonelist_iter_cookie)) + check_retry_zonelist(gfp_mask, zonelist_iter_cookie)) goto restart; /* @@ -5136,22 +5141,12 @@ static void __build_all_zonelists(void *data) int nid; int __maybe_unused cpu; pg_data_t *self = data; + static DEFINE_SPINLOCK(lock); 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. - */ - local_irq_save(flags); - /* - * Explicitly disable this CPU's synchronous printk() before taking - * seqlock to prevent any printk() from trying to hold port->lock, for - * tty_insert_flip_string_and_push_buffer() on other CPU might be - * calling kmalloc(GFP_ATOMIC | __GFP_NOWARN) with port->lock held. - */ - printk_deferred_enter(); - write_seqlock(&zonelist_update_seq); + spin_lock_irqsave(&lock, flags); + data_race(zonelist_update_seq++); + smp_wmb(); #ifdef CONFIG_NUMA memset(node_load, 0, sizeof(node_load)); @@ -5188,9 +5183,9 @@ static void __build_all_zonelists(void *data) #endif } - write_sequnlock(&zonelist_update_seq); - printk_deferred_exit(); - local_irq_restore(flags); + smp_wmb(); + data_race(zonelist_update_seq++); + spin_unlock_irqrestore(&lock, flags); } static noinline void __init