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 867D7D3A696 for ; Tue, 29 Oct 2024 20:04:09 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id E24646B0089; Tue, 29 Oct 2024 16:04:08 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id DACA26B008A; Tue, 29 Oct 2024 16:04:08 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id C27186B0092; Tue, 29 Oct 2024 16:04:08 -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 9F79C6B0089 for ; Tue, 29 Oct 2024 16:04:08 -0400 (EDT) Received: from smtpin07.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id 0D6001C55C4 for ; Tue, 29 Oct 2024 20:04:08 +0000 (UTC) X-FDA: 82727714916.07.3118ED7 Received: from mail-qt1-f169.google.com (mail-qt1-f169.google.com [209.85.160.169]) by imf22.hostedemail.com (Postfix) with ESMTP id 68D88C0021 for ; Tue, 29 Oct 2024 20:03:35 +0000 (UTC) Authentication-Results: imf22.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b="xA/mWI6U"; spf=pass (imf22.hostedemail.com: domain of surenb@google.com designates 209.85.160.169 as permitted sender) smtp.mailfrom=surenb@google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1730232165; a=rsa-sha256; cv=none; b=QMsvVn6dquMjroDHmPC5ZVvMc1djqWzC1AAw8qK/aJd4KivS2ytkwdU6awogS/OHtcJr0N mzZNZT7DLuvoJ4oshuPcbTu2JWjxB/MDK6F38KjwaGHI6a2mbdq8WYZ2BAegwgShYd6MY3 Brpc2kmkIkz89Zmw2lVcW6LmmJgFtNU= ARC-Authentication-Results: i=1; imf22.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b="xA/mWI6U"; spf=pass (imf22.hostedemail.com: domain of surenb@google.com designates 209.85.160.169 as permitted sender) smtp.mailfrom=surenb@google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1730232165; 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=zf39bWQ5vfHbieQ54t13BqlyoQktov7Zrgd6cXx/5yg=; b=J12ixYMGmtZgZnhg+L/LKR7RnFRepomPi3pOOuFxQWz9jCrTdWZJdkzJEKcsjmO7nZUfS9 hTQNdOeKmjJ3lTkDhSBYg70ORG7Xc8uGX3Fd+K4/YCiBBL9LlfD0GhuWg/1y0wdnG6yD2g HWKRmyzp5rIob8Bt/rRprOWF8WBE+08= Received: by mail-qt1-f169.google.com with SMTP id d75a77b69052e-460969c49f2so8161cf.0 for ; Tue, 29 Oct 2024 13:04:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1730232245; x=1730837045; darn=kvack.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=zf39bWQ5vfHbieQ54t13BqlyoQktov7Zrgd6cXx/5yg=; b=xA/mWI6U4s/Qkpt8LyUJqwv3cQdM+5T4RpBj3uyx+wfsHRfv9Iq1Z2L3TCENX6cZI/ 4DkwtBUomRwi9fIIFLxAhOSASalpqLW5H9R5dGZQbJUc0k0JwkX1MKbDVM6lOf7u7bDK paumnzRNCNnKbYyQiGhVaq8u10RauSmMf1mAldUsTmqbMzT+lK1TWaL4pGOIKW1OXZcx IpHWs6/y8hYNeLj84MBm1LQ002iMGMLGMJd0CCS/4vCQB9PuIRP+hgM3mLMEkI/boAhJ pixGYqWE75WwzRLdttuH94jWa9gDo+dj/NQPrQ8lC9kOL3dhvb7MCgBv6l5T8W4gPf/7 h4lQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1730232245; x=1730837045; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=zf39bWQ5vfHbieQ54t13BqlyoQktov7Zrgd6cXx/5yg=; b=ockYpqkuon29NPsjh++qkctB2St3uWKWTTXpPljy7Tr/JfuSZLkui/iK6eaw30wLUz uEt/uzI1SM1Wubb8H2v0cpE/cjefnZe2SrpyBw5fJCLqdAusa0i5LrK6z2mK6Pu0e/QA 04g4uIRB0jFENHw8abRLlapIxA3efUKn+Es8mg3In7x7L6LbrHX4NzUWOVyfD1gc11Ek iox2paawdpLiKDUUV5+pqZQHEn/iOqzFyA9EMGCZjFNkbYyVzqiF77cQwI+R2hl37Q5W zkim/E1xy4xNkP8w7E5CeFCGvhTCGH3mAqEK200zeZI/rUGluO6B1wPUU4MlzqoIASNc Eyjg== X-Forwarded-Encrypted: i=1; AJvYcCXW7PhnhDdZF390mGeV+2nzjf1aITjmszv5L8rRQetEBq7ZKhwUzqnFU3DechW0k8Q8yu67WOL+Pg==@kvack.org X-Gm-Message-State: AOJu0YwlN1xoRKl+XHiTuVW/V3bRGBhc01W2LnnNWUQ3pNrHMt69UPAQ tw/90dLnnqhJaBBdlqRSJvq8ohD3jynyxmE+brGisftUxtWc3xZOTu1DTiRlQmhtogqNwNMNLdM 9HVw/YmNsY0ycn1dwV4DYXGFUqZ18JMxwre7W X-Gm-Gg: ASbGncvTMV1pYG4qREKCoJ+aKDXrTgvVaiB/yqbxK6McOwP/yKSC9sOplqH5ide6zPE gLIDjk1yu+4Oi6085H3z+1mpSJP/i2jGsmof9fi8Gdwo/eKiYyGFmlTWXAASeeQ== X-Google-Smtp-Source: AGHT+IHZ2BmoldDG0jw/wYyhOArxtXPspkHOnLfPayzAYdt/J8JkxayXKHRKoQg8gPYakRL/DF4Pe3ywKFPSTVFhhlY= X-Received: by 2002:ac8:776a:0:b0:461:6727:253f with SMTP id d75a77b69052e-4616727292amr3476101cf.24.1730232244814; Tue, 29 Oct 2024 13:04:04 -0700 (PDT) MIME-Version: 1.0 References: <20241028202935.1047017-1-surenb@google.com> In-Reply-To: From: Suren Baghdasaryan Date: Tue, 29 Oct 2024 13:03:51 -0700 Message-ID: Subject: Re: [PATCH 1/1] alloc_tag: avoid execmem_vmap() when !MMU To: Mike Rapoport Cc: akpm@linux-foundation.org, arnd@kernel.org, arnd@arndb.de, pasha.tatashin@soleen.com, mcgrof@kernel.org, song@kernel.org, mhiramat@kernel.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, kernel test robot Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Stat-Signature: 5659mf3fx7dqzekxcawoeg9ptcrczwqh X-Rspamd-Queue-Id: 68D88C0021 X-Rspam-User: X-Rspamd-Server: rspam10 X-HE-Tag: 1730232215-49040 X-HE-Meta: U2FsdGVkX1+n9GNWfZLyb4M5SKjHjSZgTFzNLhDZfVE9MOtO+Dta6479LPoCyKbcOPwLLLm0fbO3v+IeqtWhPi0HUY4J/5GYMB7+NuqQQ+Z8XlHRbRldWWG55NkZQqZVNajsa6VheX5Ctd0vwxwTz+pIZvcmJB9BzHaydegFzfI42NLekQmOLDf/1wkB90xUFVEAds2WuvT+Qgb6OunwbtYcni2UYtaaZHzrtPPCEL5oZQ98DvYfxjcSKudL7XJKsoJKi1gWGgC1oKdtzl/hmDtOvbWUYe6jAc/0AkzW/94n9/lHnV604z8ied2elqPS8DhaazsY4qwFkRWRGDw8IWkDGc59BWrYm7Pn9RjiChI8QpqrS3zhs2vaR06Gqtm8Ib3hGBJOgCijvYG2Mfq0KPF9R/rmdzmWoicTA6oksAWgz5KuMcY/YCSkjR5kGXy4Axa69pZp1F3vUpWtG4O6rPDuypKWuN44ZtGc7i23AStC8LfRQrrfwcFwILfOWs/uJBcUHQqwtjFBgIWolvb1DcGY1PEhV8Bia+AQKxo92AmRAXqNgEePvwx0r1vIAf46sZwZAYdmHGEFIud7JCcuBuqrPt7lNXhnSeJnKZI98KJO5D/ow4ZMiLrQZgWANRg+TnM6nyxYAkgV9508MrRi/0EJ5sRSumxNxxEVScshW6Of6KtYkSDn0M+Y09wpLFoL+lrmIpxb0DCG8ji/TXlHQxVwLDJNb/OIiW4Je69o0cpL4Akd3TcrPq581voRGWMT6S2HbYdczturg4tZ8c8rdbUekX8SFsZtFpwWijT02Hl79acvHFiL2/BN2FK4zjosKrHHBhZul8rZPsHJyWnjvx0Rm1bzBZyD1z/oMCgKutr4Bb8YumuPXrI8/S4p+cmImyvjqyZL/5h0VdauH2OJcc024/MTzVk8YTCstArrA1RO52wpqskjpy77V+O12dVaJ54oyincWQWWimfLg5/ Pcs3pTWg nAwkSTGczwSXwWEhJc1zoOQ28X4q7HyCWzbnH25TfcRdy7JrlfWs5caCN+v77W32nRBPohLsYPifJi8z1K8Tc7IrPm1NHkZT8TnmhKlovkWWkm8RsA9hdOhoQYpo+zSanYPgBx2yLq02Qq2g4SqUjpJMeeqDsOeqfYkcQ7DlUs/GdUu0rZ5q/Ru92RoAarJ8rP7EKLherLn2ZvptcCBBipmFqm3fXEjD8RlOScNcUS4+QKOrcFdV6cftYcZ7PmY8tX6q0M4mBIW+Lw0TPq7WSKw9ZL/5rgl5bL5PEGxgssLGQpotHPN4lDT936zgzymTDsGUbUiE/sAFUCsvyclBLRbKocVWtWVdCF1rG 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: List-Subscribe: List-Unsubscribe: On Tue, Oct 29, 2024 at 10:13=E2=80=AFAM Mike Rapoport wr= ote: > > Hi Suren, > > On Mon, Oct 28, 2024 at 01:29:35PM -0700, Suren Baghdasaryan wrote: > > With CONFIG_MMU=3Dn __get_vm_area_node() is not available and memory fo= r the > > allocation tags cannot be populated as needed. For this case, populate = the > > required memory at initialization time. > > Do we care that much to have alloc_tags on !MMU configs? > > Your patch is great, but it would have been a lot easier to make > MEM_ALLOC_PROFILING depend on MMU. I didn't want to prevent !MMU users from using allocation profiling but I'm not aware of any current !MMU users. Therefore I have no objections to making MEM_ALLOC_PROFILING dependent on MMU if we indeed don't care about !MMU && MEM_ALLOC_PROFILING configuration. I'll be posting v5 tomorrow with all these fixes, so please let me know which way you prefer. Thanks! > > > Fixes: 57bc3834fb6f ("alloc_tag: populate memory for module tags as nee= ded") > > Reported-by: kernel test robot > > Closes: https://lore.kernel.org/oe-kbuild-all/202410250808.dQGyYjlk-lkp= @intel.com/ > > Closes: https://lore.kernel.org/oe-lkp/202410251525.9f85854d-oliver.san= g@intel.com > > Closes: https://lore.kernel.org/oe-kbuild-all/202410261016.IO7C6Cml-lkp= @intel.com/ > > Closes: https://lore.kernel.org/oe-kbuild-all/202410270919.LebQlmxD-lkp= @intel.com/ > > Cc: Arnd Bergmann > > Cc: Mike Rapoport (Microsoft) > > Signed-off-by: Suren Baghdasaryan > > --- > > include/linux/execmem.h | 2 ++ > > lib/alloc_tag.c | 23 ++++++++++++++++++++++- > > mm/execmem.c | 32 ++++++++++++++++---------------- > > 3 files changed, 40 insertions(+), 17 deletions(-) > > > > diff --git a/include/linux/execmem.h b/include/linux/execmem.h > > index 5a5e2917f870..64130ae19690 100644 > > --- a/include/linux/execmem.h > > +++ b/include/linux/execmem.h > > @@ -139,6 +139,7 @@ void *execmem_alloc(enum execmem_type type, size_t = size); > > */ > > void execmem_free(void *ptr); > > > > +#ifdef CONFIG_MMU > > /** > > * execmem_vmap - create virtual mapping for EXECMEM_MODULE_DATA memor= y > > * @size: size of the virtual mapping in bytes > > @@ -148,6 +149,7 @@ void execmem_free(void *ptr); > > * Return: the area descriptor on success or %NULL on failure. > > */ > > struct vm_struct *execmem_vmap(size_t size); > > +#endif > > > > /** > > * execmem_update_copy - copy an update to executable memory > > diff --git a/lib/alloc_tag.c b/lib/alloc_tag.c > > index c1ddac2d29f0..1c74942e6dfd 100644 > > --- a/lib/alloc_tag.c > > +++ b/lib/alloc_tag.c > > @@ -268,7 +268,6 @@ void __init alloc_tag_sec_init(void) > > #ifdef CONFIG_MODULES > > > > static struct maple_tree mod_area_mt =3D MTREE_INIT(mod_area_mt, MT_FL= AGS_ALLOC_RANGE); > > -static struct vm_struct *vm_module_tags; > > /* A dummy object used to indicate an unloaded module */ > > static struct module unloaded_mod; > > /* A dummy object used to indicate a module prepended area */ > > @@ -391,6 +390,9 @@ static bool find_aligned_area(struct ma_state *mas,= unsigned long section_size, > > return false; > > } > > > > +#ifdef CONFIG_MMU > > +static struct vm_struct *vm_module_tags; > > + > > static int vm_module_tags_populate(void) > > { > > unsigned long phys_size =3D vm_module_tags->nr_pages << PAGE_SHIF= T; > > @@ -417,6 +419,13 @@ static int vm_module_tags_populate(void) > > > > return 0; > > } > > +#else > > +static int vm_module_tags_populate(void) > > +{ > > + /* Memory was already allocated */ > > + return 0; > > +} > > +#endif > > > > static void *reserve_module_tags(struct module *mod, unsigned long siz= e, > > unsigned int prepend, unsigned long alig= n) > > @@ -561,6 +570,7 @@ static void replace_module(struct module *mod, stru= ct module *new_mod) > > > > static int __init alloc_mod_tags_mem(void) > > { > > +#ifdef CONFIG_MMU > > /* Map space to copy allocation tags */ > > vm_module_tags =3D execmem_vmap(MODULE_ALLOC_TAG_VMAP_SIZE); > > if (!vm_module_tags) { > > @@ -578,6 +588,13 @@ static int __init alloc_mod_tags_mem(void) > > } > > > > module_tags.start_addr =3D (unsigned long)vm_module_tags->addr; > > +#else > > + /* Allocate space to copy allocation tags */ > > + module_tags.start_addr =3D (unsigned long)execmem_alloc(EXECMEM_M= ODULE_DATA, > > + MODULE_ALLO= C_TAG_VMAP_SIZE); > > + if (!module_tags.start_addr) > > + return -ENOMEM; > > +#endif > > module_tags.end_addr =3D module_tags.start_addr + MODULE_ALLOC_TA= G_VMAP_SIZE; > > /* Ensure the base is alloc_tag aligned when required for indexin= g */ > > module_tags.start_addr =3D alloc_tag_align(module_tags.start_addr= ); > > @@ -587,6 +604,7 @@ static int __init alloc_mod_tags_mem(void) > > > > static void __init free_mod_tags_mem(void) > > { > > +#ifdef CONFIG_MMU > > int i; > > > > module_tags.start_addr =3D 0; > > @@ -594,6 +612,9 @@ static void __init free_mod_tags_mem(void) > > __free_page(vm_module_tags->pages[i]); > > kfree(vm_module_tags->pages); > > free_vm_area(vm_module_tags); > > +#else > > + execmem_free((void *)module_tags.start_addr); > > +#endif > > } > > > > #else /* CONFIG_MODULES */ > > diff --git a/mm/execmem.c b/mm/execmem.c > > index 5c0f9f2d6f83..317b6a8d35be 100644 > > --- a/mm/execmem.c > > +++ b/mm/execmem.c > > @@ -64,6 +64,22 @@ static void *execmem_vmalloc(struct execmem_range *r= ange, size_t size, > > > > return p; > > } > > + > > +struct vm_struct *execmem_vmap(size_t size) > > +{ > > + struct execmem_range *range =3D &execmem_info->ranges[EXECMEM_MOD= ULE_DATA]; > > + struct vm_struct *area; > > + > > + area =3D __get_vm_area_node(size, range->alignment, PAGE_SHIFT, V= M_ALLOC, > > + range->start, range->end, NUMA_NO_NODE, > > + GFP_KERNEL, __builtin_return_address(0)= ); > > + if (!area && range->fallback_start) > > + area =3D __get_vm_area_node(size, range->alignment, PAGE_= SHIFT, VM_ALLOC, > > + range->fallback_start, range->f= allback_end, > > + NUMA_NO_NODE, GFP_KERNEL, __bui= ltin_return_address(0)); > > + > > + return area; > > +} > > #else > > static void *execmem_vmalloc(struct execmem_range *range, size_t size, > > pgprot_t pgprot, unsigned long vm_flags) > > @@ -368,22 +384,6 @@ void execmem_free(void *ptr) > > vfree(ptr); > > } > > > > -struct vm_struct *execmem_vmap(size_t size) > > -{ > > - struct execmem_range *range =3D &execmem_info->ranges[EXECMEM_MOD= ULE_DATA]; > > - struct vm_struct *area; > > - > > - area =3D __get_vm_area_node(size, range->alignment, PAGE_SHIFT, V= M_ALLOC, > > - range->start, range->end, NUMA_NO_NODE, > > - GFP_KERNEL, __builtin_return_address(0)= ); > > - if (!area && range->fallback_start) > > - area =3D __get_vm_area_node(size, range->alignment, PAGE_= SHIFT, VM_ALLOC, > > - range->fallback_start, range->f= allback_end, > > - NUMA_NO_NODE, GFP_KERNEL, __bui= ltin_return_address(0)); > > - > > - return area; > > -} > > - > > void *execmem_update_copy(void *dst, const void *src, size_t size) > > { > > return text_poke_copy(dst, src, size); > > > > base-commit: 92409df3e00a17d6fd5bb27732fa186749725ed5 > > -- > > 2.47.0.163.g1226f6d8fa-goog > > > > -- > Sincerely yours, > Mike.