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 73365E7D0B7 for ; Thu, 21 Sep 2023 22:52:41 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id CF6FF6B0272; Thu, 21 Sep 2023 18:52:40 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id CCDAE6B0273; Thu, 21 Sep 2023 18:52:40 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id BBD396B0274; Thu, 21 Sep 2023 18:52:40 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id AFABF6B0272 for ; Thu, 21 Sep 2023 18:52:40 -0400 (EDT) Received: from smtpin23.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id 8369B1CAA71 for ; Thu, 21 Sep 2023 22:52:40 +0000 (UTC) X-FDA: 81262105680.23.C5A9CB1 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by imf20.hostedemail.com (Postfix) with ESMTP id 9ACBF1C000B for ; Thu, 21 Sep 2023 22:52:38 +0000 (UTC) Authentication-Results: imf20.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=bjJNwevJ; spf=pass (imf20.hostedemail.com: domain of song@kernel.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=song@kernel.org; dmarc=pass (policy=none) header.from=kernel.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1695336758; a=rsa-sha256; cv=none; b=4tWJrEjjf0tbzpNOz0gvRF28zTuoHeeFA92Hdv15Zg5QeUv2viw4BTPSCZA3hzIZbB+sLa oPlMw7484q5bQALBBMcAPhitW8XHJUOBQo6HosagwbXcqn8DuGafD9nXhquGeAPbQeTuJ1 mt3ow7wFMwKux/0d7NKaVdf3A/UE11U= ARC-Authentication-Results: i=1; imf20.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=bjJNwevJ; spf=pass (imf20.hostedemail.com: domain of song@kernel.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=song@kernel.org; dmarc=pass (policy=none) header.from=kernel.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1695336758; 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=kXltOii2wS53njMI7u+c+UD2X9bZ0uGdWQnoMh/qxRU=; b=xMeljydOTMaNdEtntHoAXSvBD6wGz0Sr3BWol605X1DNodQetzEzn+oraeDy3/kZJ1S81a hVk9hV55q5t/Z9wvUSMaqjvV02PQKg+rgaB68x46/UT6zPOcEkhdzGUvyrsIiMMIeE3sIq y/cMTByCzaMTTuWTjzQalwC4175Y6Ws= Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id BC72062115 for ; Thu, 21 Sep 2023 22:52:37 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id D27B6C433B7 for ; Thu, 21 Sep 2023 22:52:35 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1695336755; bh=N+rCKzD4RnGgPH16U+ccWdzVA4uu9GwvbHIaEOV8lLA=; h=References:In-Reply-To:From:Date:Subject:To:Cc:From; b=bjJNwevJA42TvkguuRjTs76ETN2R6q990VwsQaX+fVZHYFTVg3twcHMCXBi+EwswY KDvM3rQnSpp34FNwfM0U/WFpPi5sxiWBihMbkmLQVD3dMwe0w1TV/6pnGa5fK7MnRq f/RnmF4zvwavGrTVGR9fsTL6T+hC8QShKMLdwjOkeOLZk0rpJgxA2dFhnnTnVB9Xwk TCSjg9WYJ/gz4jSOZ5+6CD4cbsh3pPk93gUBjEKQnbqdin3Ors6QaTCSNo54GO47rs GROCJ3RhQnOtTsYPDlxmiEmDKgihH28meWIoUHV/vobKuLSBg7uQPTbsXHKf9QQFkj fMbBtTpx4QTiw== Received: by mail-lf1-f53.google.com with SMTP id 2adb3069b0e04-5031426b626so2437164e87.3 for ; Thu, 21 Sep 2023 15:52:35 -0700 (PDT) X-Gm-Message-State: AOJu0Yz0G4Ir3nzI4W2Laffntozu8LtgTDsZNTbHxcZcsI0Fxg2ieUZj k1/qq8ngK630fDjRbAJvx28CRW1h68Ng/wXvc9A= X-Google-Smtp-Source: AGHT+IHrJYRcXcnBl5OYoAS68DJ303ssKI8aEm5234o+h+Cle34G5bJm6ZjjrxLZlbKjfe5M7kikSCFf7m0lncLYrfA= X-Received: by 2002:a05:6512:ac7:b0:500:b3e3:6fa6 with SMTP id n7-20020a0565120ac700b00500b3e36fa6mr7384141lfu.68.1695336753899; Thu, 21 Sep 2023 15:52:33 -0700 (PDT) MIME-Version: 1.0 References: <20230918072955.2507221-1-rppt@kernel.org> <20230918072955.2507221-7-rppt@kernel.org> In-Reply-To: <20230918072955.2507221-7-rppt@kernel.org> From: Song Liu Date: Thu, 21 Sep 2023 15:52:21 -0700 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [PATCH v3 06/13] mm/execmem: introduce execmem_data_alloc() To: Mike Rapoport Cc: linux-kernel@vger.kernel.org, Andrew Morton , =?UTF-8?B?QmrDtnJuIFTDtnBlbA==?= , Catalin Marinas , Christophe Leroy , "David S. Miller" , Dinh Nguyen , Heiko Carstens , Helge Deller , Huacai Chen , Kent Overstreet , Luis Chamberlain , Mark Rutland , Michael Ellerman , Nadav Amit , "Naveen N. Rao" , Palmer Dabbelt , Puranjay Mohan , Rick Edgecombe , Russell King , Steven Rostedt , Thomas Bogendoerfer , Thomas Gleixner , Will Deacon , bpf@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mips@vger.kernel.org, linux-mm@kvack.org, linux-modules@vger.kernel.org, linux-parisc@vger.kernel.org, linux-riscv@lists.infradead.org, linux-s390@vger.kernel.org, linux-trace-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, loongarch@lists.linux.dev, netdev@vger.kernel.org, sparclinux@vger.kernel.org, x86@kernel.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspamd-Server: rspam08 X-Rspamd-Queue-Id: 9ACBF1C000B X-Stat-Signature: ugahaun49fgbmzei7io6gpr4stwxhgon X-Rspam-User: X-HE-Tag: 1695336758-455971 X-HE-Meta: U2FsdGVkX18LircEBFM+q1brDLAUU4G05lhBhE9e2vS61gb6HTxPELAGKDUF8ue0ipMgmLc05tdBS4JJHi1qxptR7p/vxXM8J/N1r3bdNR5Ta2W+Mi7VGRSRQBXOk/3gWEsuKdKA+M2XFDV2de0IB7RyGFpyVzNRnAFUZueKsK+TVvpjqqBFKQVNx9VCkEAMd5yTH1ulSzsnFxhX8+aEvXYdFLQNfoSo6qgaNhbHh9TjocGQAWo1MGuRNcLNTk03tD64ke3PXNiMQeMfGoTmwySTIxtRs95dsg4WJlhJHaLhfo5or8SGlNzu0sG0DvvLXFWF0rheBn4hOJy21JC9ApV9Sy256Zb4LJCvoFkk0ICmgeG0tnMJJ5Ol4BLg4BbnSfKHWdYUhVfpXLLeVZ91CWj8EZQZRH3tZZW4DHVJiQhm6b11WRphiNxQe5rNB8lnK53jXKAtf9UMdWbqKq14Ysf2pSK/My70Sx5CMlrgiDNQFalYl3usIH+ZpcjY3TQyJ2sQhUF9oAfBeNEbYH7161Buf8cWpYfHjTfatTK+O+DwSVkbqoqEo6qdq8KfLoIrH+BkOlbiPZVu0lUGDiC+rJt1f5LgSoCrbF1/MVpDCwbM9yghZHcOTBC+wdZvy4Fh0YikRcg51zWGIPY1k/0S6kyAdWUlaX5ueZTa3kvQisMPvlvWFIfCeC6G+SYZLO5mplRxTezola0p1pq17U+D3HksgWdrFXId58BpJ8DfTHty7vMxWTw/o9K6KmXWXiCtSI/zI8KS2gXBFFHfpfEGViBbJSq04X0/rMwXlsYPD+dhMXp4MTXfI5JHVqldLpR+RcPVgxuIzPkYOJhuEFt6+X+ySAFwatsAEJoPZMtqJOuC5CzRJ0O21Q+2EU+nQej0Az1VShbEdjReYD5PsgMxRAK9riIlKOiCyHEIW4ibe36RixEkHwPkQSLgZbs8rU0zwOPSqUJwgHaDGzUA/c+ xFFSYET0 yAJQ88sUCJeZw+XuqthbkLl4PBBhqkmkMHDnm+cwwX+q/HJgjPRXKe48SjJKTEx3H7x0G84EryjUFpUTN2PnexG+upVUM6D2DXbCMGF9UigIfqGLVqgd8IgSZazchN8rEtN4QAIwwwXYYPoMhhlEp9nfn3ZFUbzgHWxVqp4CKd6cp+oP4WNunRsOgZ6NEoKbndU44NnGJ0rOQoUZW0synUmcCzzUmyGvYneLeYODTvzU+u8Q+WirU/IWC1ZjHsdGIgIXNWYnNjS1KdfrpreNBggXJCndhS+SSAIIb9opPPPVssRDefq9y5SkQIS3VKUzqgvvGEwem+nWlbDNTr1jQm1hzRUaW4KToN4N8+KMCSykLobfTEuyDbXI2q6MxC3WN3zUI8LiHyL2CXgPTwkO++M1YPWirTgnRb/m5Ir3CFSf2PH8ziiPVCNcgSpS5zoMdYy8SbEWses6TkpgqAqE+CZGxlXynN154y2ucARnlOzX6QN/vLPTWp81CjQ== 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 Mon, Sep 18, 2023 at 12:31=E2=80=AFAM Mike Rapoport wr= ote: > [...] > diff --git a/include/linux/execmem.h b/include/linux/execmem.h > index 519bdfdca595..09d45ac786e9 100644 > --- a/include/linux/execmem.h > +++ b/include/linux/execmem.h > @@ -29,6 +29,7 @@ > * @EXECMEM_KPROBES: parameters for kprobes > * @EXECMEM_FTRACE: parameters for ftrace > * @EXECMEM_BPF: parameters for BPF > + * @EXECMEM_MODULE_DATA: parameters for module data sections > * @EXECMEM_TYPE_MAX: > */ > enum execmem_type { > @@ -37,6 +38,7 @@ enum execmem_type { > EXECMEM_KPROBES, > EXECMEM_FTRACE, In longer term, I think we can improve the JITed code and merge kprobe/ftrace/bpf. to use the same ranges. Also, do we need special setting for FTRACE? If not, let's just remove it. > EXECMEM_BPF, > + EXECMEM_MODULE_DATA, > EXECMEM_TYPE_MAX, > }; Overall, it is great that kprobe/ftrace/bpf no longer depend on modules. OTOH, I think we should merge execmem_type and existing mod_mem_type. Otherwise, we still need to handle page permissions in multiple places. What is our plan for that? Thanks, Song > > @@ -107,6 +109,23 @@ struct execmem_params *execmem_arch_params(void); > */ > void *execmem_text_alloc(enum execmem_type type, size_t size); > > +/** > + * execmem_data_alloc - allocate memory for data coupled to code > + * @type: type of the allocation > + * @size: how many bytes of memory are required > + * > + * Allocates memory that will contain data coupled with executable code, > + * like data sections in kernel modules. > + * > + * The memory will have protections defined by architecture. > + * > + * The allocated memory will reside in an area that does not impose > + * restrictions on the addressing modes. > + * > + * Return: a pointer to the allocated memory or %NULL > + */ > +void *execmem_data_alloc(enum execmem_type type, size_t size); > + > /** > * execmem_free - free executable memory > * @ptr: pointer to the memory that should be freed > diff --git a/kernel/module/main.c b/kernel/module/main.c > index c4146bfcd0a7..2ae83a6abf66 100644 > --- a/kernel/module/main.c > +++ b/kernel/module/main.c > @@ -1188,25 +1188,16 @@ void __weak module_arch_freeing_init(struct modul= e *mod) > { > } > > -static bool mod_mem_use_vmalloc(enum mod_mem_type type) > -{ > - return IS_ENABLED(CONFIG_ARCH_WANTS_MODULES_DATA_IN_VMALLOC) && > - mod_mem_type_is_core_data(type); > -} > - > static void *module_memory_alloc(unsigned int size, enum mod_mem_type ty= pe) > { > - if (mod_mem_use_vmalloc(type)) > - return vzalloc(size); > + if (mod_mem_type_is_data(type)) > + return execmem_data_alloc(EXECMEM_MODULE_DATA, size); > return execmem_text_alloc(EXECMEM_MODULE_TEXT, size); > } > > static void module_memory_free(void *ptr, enum mod_mem_type type) > { > - if (mod_mem_use_vmalloc(type)) > - vfree(ptr); > - else > - execmem_free(ptr); > + execmem_free(ptr); > } > > static void free_mod_mem(struct module *mod) > diff --git a/mm/execmem.c b/mm/execmem.c > index abcbd07e05ac..aeff85261360 100644 > --- a/mm/execmem.c > +++ b/mm/execmem.c > @@ -53,11 +53,23 @@ static void *execmem_alloc(size_t size, struct execme= m_range *range) > return kasan_reset_tag(p); > } > > +static inline bool execmem_range_is_data(enum execmem_type type) > +{ > + return type =3D=3D EXECMEM_MODULE_DATA; > +} > + > void *execmem_text_alloc(enum execmem_type type, size_t size) > { > return execmem_alloc(size, &execmem_params.ranges[type]); > } > > +void *execmem_data_alloc(enum execmem_type type, size_t size) > +{ > + WARN_ON_ONCE(!execmem_range_is_data(type)); > + > + return execmem_alloc(size, &execmem_params.ranges[type]); > +} > + > void execmem_free(void *ptr) > { > /* > @@ -93,7 +105,10 @@ static void execmem_init_missing(struct execmem_param= s *p) > struct execmem_range *r =3D &p->ranges[i]; > > if (!r->start) { > - r->pgprot =3D default_range->pgprot; > + if (execmem_range_is_data(i)) > + r->pgprot =3D PAGE_KERNEL; > + else > + r->pgprot =3D default_range->pgprot; > r->alignment =3D default_range->alignment; > r->start =3D default_range->start; > r->end =3D default_range->end; > -- > 2.39.2 >