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 8B968C32772 for ; Tue, 23 Aug 2022 17:15:46 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 08C536B0073; Tue, 23 Aug 2022 13:15:46 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 03BA2940007; Tue, 23 Aug 2022 13:15:45 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id E1D7E6B0075; Tue, 23 Aug 2022 13:15:45 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id CE4526B0073 for ; Tue, 23 Aug 2022 13:15:45 -0400 (EDT) Received: from smtpin23.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id A23D51205E9 for ; Tue, 23 Aug 2022 17:15:45 +0000 (UTC) X-FDA: 79831509450.23.9239EFF Received: from smtp-out1.suse.de (smtp-out1.suse.de [195.135.220.28]) by imf27.hostedemail.com (Postfix) with ESMTP id 13A5240030 for ; Tue, 23 Aug 2022 17:15:44 +0000 (UTC) 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-out1.suse.de (Postfix) with ESMTPS id E2832336D9; Tue, 23 Aug 2022 17:15:43 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_rsa; t=1661274943; h=from:from:reply-to: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=vEBpfl3pgtZLUcRnNN7xouCt+plGofu/FkYkOP6oe74=; b=p9IJlS3zT1E+49k0he/IUMtkrf5PaPs/2CtKcr7/jCHdwJmnJzbNXPR72OcSNZ9FkhBGiZ 9cxsQKq8zr5M8z19dqNKTRxczJ2JIrHp2VMcnd0a/PU+hWksx/JKClq6zTPwdU7gjbhDkd PiGkU3rwbWs21JNBwhIEnt6OfVfSFYU= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_ed25519; t=1661274943; h=from:from:reply-to: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=vEBpfl3pgtZLUcRnNN7xouCt+plGofu/FkYkOP6oe74=; b=ufVOXxEjYVZaxVi7jU3dSTd2kMdZQnX4kFBw9I5u+qbypfctDP1or1FUc0fpKduFwbIp2R msnbC4hiSEbIxSAg== 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 8A22B13AB7; Tue, 23 Aug 2022 17:15:43 +0000 (UTC) Received: from dovecot-director2.suse.de ([192.168.254.65]) by imap2.suse-dmz.suse.de with ESMTPSA id 8YB3ID8LBWPxRgAAMHmgww (envelope-from ); Tue, 23 Aug 2022 17:15:43 +0000 Message-ID: Date: Tue, 23 Aug 2022 19:15:43 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.1.2 Subject: Re: [PATCH 1/9] slub: Make PREEMPT_RT support less convoluted Content-Language: en-US To: Sebastian Andrzej Siewior , linux-kernel@vger.kernel.org Cc: Thomas Gleixner , Peter Zijlstra , Steven Rostedt , Linus Torvalds , Matthew Wilcox , Andrew Morton , Christoph Lameter , David Rientjes , Joonsoo Kim , Pekka Enberg , linux-mm@kvack.org References: <20220817162703.728679-1-bigeasy@linutronix.de> <20220817162703.728679-2-bigeasy@linutronix.de> From: Vlastimil Babka In-Reply-To: <20220817162703.728679-2-bigeasy@linutronix.de> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1661274945; a=rsa-sha256; cv=none; b=KcQfH90V36IJ8SHg/eoqogRZpO/o61TaIdrXsweEE2JZdLhkrRfO9okeTV0xqBnYDMhFSa Z40swxU9DGvt/5VavyLpcJHAhtV3MmK/HlaYIXD2SNwrWFEUryVdB3UuyQBRXo3hpoeh6F YmWMM72vG14ymyEB7IwR6ZjciXHb6yg= ARC-Authentication-Results: i=1; imf27.hostedemail.com; dkim=pass header.d=suse.cz header.s=susede2_rsa header.b=p9IJlS3z; dkim=pass header.d=suse.cz header.s=susede2_ed25519 header.b=ufVOXxEj; spf=pass (imf27.hostedemail.com: domain of vbabka@suse.cz designates 195.135.220.28 as permitted sender) smtp.mailfrom=vbabka@suse.cz; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1661274945; 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:dkim-signature; bh=vEBpfl3pgtZLUcRnNN7xouCt+plGofu/FkYkOP6oe74=; b=qoyOfwfWVQHf8GVbGYw0P9sUC7Itk1vRmcOAqNZcnXUd/+YWUhDwNq3npkwtv1jQxokN4w 6unhFKPtTfTbpCp+7Vr9kV7H6JwhzFxf4WlatzWVKTI7ABIXq4Gft3F39k3mcfxjTEMcHL qIJU62h3OrmoIcZqM+4NIsYXfFYXvAQ= X-Rspam-User: X-Rspamd-Server: rspam08 X-Rspamd-Queue-Id: 13A5240030 Authentication-Results: imf27.hostedemail.com; dkim=pass header.d=suse.cz header.s=susede2_rsa header.b=p9IJlS3z; dkim=pass header.d=suse.cz header.s=susede2_ed25519 header.b=ufVOXxEj; spf=pass (imf27.hostedemail.com: domain of vbabka@suse.cz designates 195.135.220.28 as permitted sender) smtp.mailfrom=vbabka@suse.cz; dmarc=none X-Stat-Signature: e6d44ekeaxft5ouskirr6aw5kd9iru8y X-HE-Tag: 1661274944-147891 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 8/17/22 18:26, Sebastian Andrzej Siewior wrote: > From: Thomas Gleixner > > The slub code already has a few helpers depending on PREEMPT_RT. Add a few > more and get rid of the CONFIG_PREEMPT_RT conditionals all over the place. > > No functional change. > > Signed-off-by: Thomas Gleixner > Cc: Andrew Morton > Cc: Christoph Lameter > Cc: David Rientjes > Cc: Joonsoo Kim > Cc: Pekka Enberg > Cc: Vlastimil Babka > Cc: linux-mm@kvack.org > Signed-off-by: Sebastian Andrzej Siewior > --- > mm/slub.c | 66 +++++++++++++++++++++++++------------------------------ > 1 file changed, 30 insertions(+), 36 deletions(-) > > diff --git a/mm/slub.c b/mm/slub.c > index 862dbd9af4f52..5f7c5b5bd49f9 100644 > --- a/mm/slub.c > +++ b/mm/slub.c > @@ -100,9 +100,11 @@ > * except the stat counters. This is a percpu structure manipulated only by > * the local cpu, so the lock protects against being preempted or interrupted > * by an irq. Fast path operations rely on lockless operations instead. > - * On PREEMPT_RT, the local lock does not actually disable irqs (and thus > - * prevent the lockless operations), so fastpath operations also need to take > - * the lock and are no longer lockless. > + * > + * On PREEMPT_RT, the local lock neither disables interrupts nor preemption > + * which means the lockless fastpath cannot be used as it might interfere with > + * an in-progress slow path operations. In this case the local lock is always > + * taken but it still utilizes the freelist for the common operations. > * > * lockless fastpaths > * > @@ -163,8 +165,11 @@ > * function call even on !PREEMPT_RT, use inline preempt_disable() there. > */ > #ifndef CONFIG_PREEMPT_RT > -#define slub_get_cpu_ptr(var) get_cpu_ptr(var) > -#define slub_put_cpu_ptr(var) put_cpu_ptr(var) > +#define slub_get_cpu_ptr(var) get_cpu_ptr(var) > +#define slub_put_cpu_ptr(var) put_cpu_ptr(var) > +#define use_lockless_fast_path() (true) > +#define slub_local_irq_save(flags) local_irq_save(flags) > +#define slub_local_irq_restore(flags) local_irq_restore(flags) Note these won't be neccessary anymore after https://lore.kernel.org/linux-mm/20220823170400.26546-6-vbabka@suse.cz/T/#u > #else > #define slub_get_cpu_ptr(var) \ > ({ \ > @@ -176,6 +181,9 @@ do { \ > (void)(var); \ > migrate_enable(); \ > } while (0) > +#define use_lockless_fast_path() (false) > +#define slub_local_irq_save(flags) do { } while (0) > +#define slub_local_irq_restore(flags) do { } while (0) > #endif > > #ifdef CONFIG_SLUB_DEBUG > @@ -460,16 +468,14 @@ static __always_inline void __slab_unlock(struct slab *slab) > > static __always_inline void slab_lock(struct slab *slab, unsigned long *flags) > { > - if (IS_ENABLED(CONFIG_PREEMPT_RT)) > - local_irq_save(*flags); > + slub_local_irq_save(*flags); > __slab_lock(slab); > } > > static __always_inline void slab_unlock(struct slab *slab, unsigned long *flags) > { > __slab_unlock(slab); > - if (IS_ENABLED(CONFIG_PREEMPT_RT)) > - local_irq_restore(*flags); > + slub_local_irq_restore(*flags); > } Ditto. > /* > @@ -482,7 +488,7 @@ static inline bool __cmpxchg_double_slab(struct kmem_cache *s, struct slab *slab > void *freelist_new, unsigned long counters_new, > const char *n) > { > - if (!IS_ENABLED(CONFIG_PREEMPT_RT)) > + if (use_lockless_fast_path()) > lockdep_assert_irqs_disabled(); This test would stay after the patch I referenced above. But while this change will keep testing the technically correct thing, the name would be IMHO misleading here, as this is semantically not about the lockless fast path, but whether we need to have irqs disabled to avoid a deadlock due to irq incoming when we hold the bit_spin_lock() and its handler trying to acquire it as well.