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 505DEC00144 for ; Fri, 29 Jul 2022 09:49:14 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id AA3028E0001; Fri, 29 Jul 2022 05:49:13 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id A52DF6B0072; Fri, 29 Jul 2022 05:49:13 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 8F3B48E0001; Fri, 29 Jul 2022 05:49:13 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id 7BA436B0071 for ; Fri, 29 Jul 2022 05:49:13 -0400 (EDT) Received: from smtpin22.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 49D6012060E for ; Fri, 29 Jul 2022 09:49:13 +0000 (UTC) X-FDA: 79739664186.22.41B8D10 Received: from smtp-out1.suse.de (smtp-out1.suse.de [195.135.220.28]) by imf14.hostedemail.com (Postfix) with ESMTP id C3D901000D9 for ; Fri, 29 Jul 2022 09:49:12 +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 7B6073402E; Fri, 29 Jul 2022 09:49:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_rsa; t=1659088151; 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=jQHS9ztplh4Ee/QPpTZd5woby2nOAyOs3B+Gm7PCNnA=; b=U+4k02oyX7Q2rlHerS8t13TJaOlns3elgFnaWTAvDVh9oGtAHSW03zGGXeeTekyUaOM68h 4WvG7H+NFEzyr+NLQMVt0X/t2u4Dnky/PHYebKeviDIoKebXtxoPnVO8m2AqFD7KVT7l8K +hzxvy3N2IwoaMU77xpXYvAlPhFZ7FQ= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_ed25519; t=1659088151; 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=jQHS9ztplh4Ee/QPpTZd5woby2nOAyOs3B+Gm7PCNnA=; b=L9ZJ/9BlgL5aYuxLQa1zhmjd7v50EnfyjYh40aoHv19tPTOOhCS0YaQsXE+dUU7Q8CwIjV EhJujbh3NuRZzjDg== 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 49B5013A8E; Fri, 29 Jul 2022 09:49:11 +0000 (UTC) Received: from dovecot-director2.suse.de ([192.168.254.65]) by imap2.suse-dmz.suse.de with ESMTPSA id vFtaEBet42IZbQAAMHmgww (envelope-from ); Fri, 29 Jul 2022 09:49:11 +0000 Message-ID: <976e08ef-a73b-1090-d147-e03fc600d149@suse.cz> Date: Fri, 29 Jul 2022 11:49:10 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.11.0 Subject: Re: [PATCH v3 11/15] mm/sl[au]b: introduce common alloc/free functions without tracepoint Content-Language: en-US To: Hyeonggon Yoo <42.hyeyoo@gmail.com>, Christoph Lameter , Pekka Enberg , David Rientjes , Joonsoo Kim , Andrew Morton , Roman Gushchin , Joe Perches , Vasily Averin , Matthew WilCox Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org References: <20220712133946.307181-1-42.hyeyoo@gmail.com> <20220712133946.307181-12-42.hyeyoo@gmail.com> From: Vlastimil Babka In-Reply-To: <20220712133946.307181-12-42.hyeyoo@gmail.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit ARC-Authentication-Results: i=1; imf14.hostedemail.com; dkim=pass header.d=suse.cz header.s=susede2_rsa header.b=U+4k02oy; dkim=pass header.d=suse.cz header.s=susede2_ed25519 header.b="L9ZJ/9Bl"; spf=pass (imf14.hostedemail.com: domain of vbabka@suse.cz designates 195.135.220.28 as permitted sender) smtp.mailfrom=vbabka@suse.cz; dmarc=none ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1659088153; a=rsa-sha256; cv=none; b=8iummZrejOG599XtkfmoMisHXGPB6TsG6TK0g658LZs41Hab3fr2ysoz+4ipO1qHaz7WU3 PLbTfv4cSqpfRlSGEzyD6aGwitRNjuVjwMa9JLi2TZASzLpbhAGj4PekRJ7a9s58Rx4pQN gZGD2YrTRWWY5gD9JPpfO+3DVfE+RxM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1659088152; 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=jQHS9ztplh4Ee/QPpTZd5woby2nOAyOs3B+Gm7PCNnA=; b=TI7C4KExIVbnzmt0LqzwCOpUABMQjVJOR0h1+UdS46JPI4QR953A3ocM4uoEkopJwB7Ipb OZFOR15f0rp44OMlzjelaR+2VajqQgSF3fwh0mRIWcKYb7JTqM6xRdyfigoi1p8CO2LE9q 9PH8NvJyMlPk843ZHAMPU8rsYrW+Ppo= X-Stat-Signature: 9fg9inmb7xcty1cz4gbqucezwnn456h7 X-Rspamd-Queue-Id: C3D901000D9 X-Rspam-User: Authentication-Results: imf14.hostedemail.com; dkim=pass header.d=suse.cz header.s=susede2_rsa header.b=U+4k02oy; dkim=pass header.d=suse.cz header.s=susede2_ed25519 header.b="L9ZJ/9Bl"; spf=pass (imf14.hostedemail.com: domain of vbabka@suse.cz designates 195.135.220.28 as permitted sender) smtp.mailfrom=vbabka@suse.cz; dmarc=none X-Rspamd-Server: rspam12 X-HE-Tag: 1659088152-958217 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 7/12/22 15:39, Hyeonggon Yoo wrote: > To unify kmalloc functions in later patch, introduce common alloc/free > functions that does not have tracepoint. > > Signed-off-by: Hyeonggon Yoo <42.hyeyoo@gmail.com> Reviewed-by: Vlastimil Babka > --- > > v3: > Tried to avoid affecting existing functions. > > mm/slab.c | 36 +++++++++++++++++++++++++++++------- > mm/slab.h | 4 ++++ > mm/slub.c | 13 +++++++++++++ > 3 files changed, 46 insertions(+), 7 deletions(-) > > diff --git a/mm/slab.c b/mm/slab.c > index a2f43425a0ae..375e35c14430 100644 > --- a/mm/slab.c > +++ b/mm/slab.c > @@ -3560,6 +3560,14 @@ void *kmem_cache_alloc_node(struct kmem_cache *cachep, gfp_t flags, int nodeid) > } > EXPORT_SYMBOL(kmem_cache_alloc_node); > > +void *__kmem_cache_alloc_node(struct kmem_cache *cachep, gfp_t flags, > + int nodeid, size_t orig_size, > + unsigned long caller) > +{ > + return slab_alloc_node(cachep, NULL, flags, nodeid, > + orig_size, caller); > +} > + > #ifdef CONFIG_TRACING > void *kmem_cache_alloc_node_trace(struct kmem_cache *cachep, > gfp_t flags, > @@ -3645,6 +3653,26 @@ void *__kmalloc(size_t size, gfp_t flags) > } > EXPORT_SYMBOL(__kmalloc); > > +static __always_inline > +void __do_kmem_cache_free(struct kmem_cache *cachep, void *objp, > + unsigned long caller) > +{ > + unsigned long flags; > + > + local_irq_save(flags); > + debug_check_no_locks_freed(objp, cachep->object_size); > + if (!(cachep->flags & SLAB_DEBUG_OBJECTS)) > + debug_check_no_obj_freed(objp, cachep->object_size); > + __cache_free(cachep, objp, caller); > + local_irq_restore(flags); > +} > + > +void __kmem_cache_free(struct kmem_cache *cachep, void *objp, > + unsigned long caller) > +{ > + __do_kmem_cache_free(cachep, objp, caller); > +} > + > /** > * kmem_cache_free - Deallocate an object > * @cachep: The cache the allocation was from. > @@ -3655,18 +3683,12 @@ EXPORT_SYMBOL(__kmalloc); > */ > void kmem_cache_free(struct kmem_cache *cachep, void *objp) > { > - unsigned long flags; > cachep = cache_from_obj(cachep, objp); > if (!cachep) > return; > > trace_kmem_cache_free(_RET_IP_, objp, cachep->name); > - local_irq_save(flags); > - debug_check_no_locks_freed(objp, cachep->object_size); > - if (!(cachep->flags & SLAB_DEBUG_OBJECTS)) > - debug_check_no_obj_freed(objp, cachep->object_size); > - __cache_free(cachep, objp, _RET_IP_); > - local_irq_restore(flags); > + __do_kmem_cache_free(cachep, objp, _RET_IP_); > } > EXPORT_SYMBOL(kmem_cache_free); > > diff --git a/mm/slab.h b/mm/slab.h > index c81c92d421f1..9193e9c1f040 100644 > --- a/mm/slab.h > +++ b/mm/slab.h > @@ -275,6 +275,10 @@ void create_kmalloc_caches(slab_flags_t); > struct kmem_cache *kmalloc_slab(size_t, gfp_t); > > void *kmalloc_large_node_notrace(size_t size, gfp_t flags, int node); > +void *__kmem_cache_alloc_node(struct kmem_cache *s, gfp_t gfpflags, > + int node, size_t orig_size, > + unsigned long caller); > +void __kmem_cache_free(struct kmem_cache *s, void *x, unsigned long caller); > #endif > > gfp_t kmalloc_fix_flags(gfp_t flags); > diff --git a/mm/slub.c b/mm/slub.c > index 6cb7ca27f3b7..74eb78678c98 100644 > --- a/mm/slub.c > +++ b/mm/slub.c > @@ -3262,6 +3262,14 @@ void *kmem_cache_alloc_lru(struct kmem_cache *s, struct list_lru *lru, > } > EXPORT_SYMBOL(kmem_cache_alloc_lru); > > +void *__kmem_cache_alloc_node(struct kmem_cache *s, gfp_t gfpflags, > + int node, size_t orig_size, > + unsigned long caller) > +{ > + return slab_alloc_node(s, NULL, gfpflags, node, > + caller, orig_size); > +} > + > #ifdef CONFIG_TRACING > void *kmem_cache_alloc_trace(struct kmem_cache *s, gfp_t gfpflags, size_t size) > { > @@ -3526,6 +3534,11 @@ void ___cache_free(struct kmem_cache *cache, void *x, unsigned long addr) > } > #endif > > +void __kmem_cache_free(struct kmem_cache *s, void *x, unsigned long caller) > +{ > + slab_free(s, virt_to_slab(x), x, NULL, &x, 1, caller); > +} > + > void kmem_cache_free(struct kmem_cache *s, void *x) > { > s = cache_from_obj(s, x);