From: Thomas Gleixner <tglx@linutronix.de>
To: Mike Rapoport <rppt@kernel.org>, linux-kernel@vger.kernel.org
Cc: Andrew Morton <akpm@linux-foundation.org>,
Catalin Marinas <catalin.marinas@arm.com>,
Christophe Leroy <christophe.leroy@csgroup.eu>,
"David S. Miller" <davem@davemloft.net>,
Dinh Nguyen <dinguyen@kernel.org>,
Heiko Carstens <hca@linux.ibm.com>, Helge Deller <deller@gmx.de>,
Huacai Chen <chenhuacai@kernel.org>,
Kent Overstreet <kent.overstreet@linux.dev>,
Luis Chamberlain <mcgrof@kernel.org>,
Mark Rutland <mark.rutland@arm.com>,
Michael Ellerman <mpe@ellerman.id.au>,
Mike Rapoport <rppt@kernel.org>,
Nadav Amit <nadav.amit@gmail.com>,
"Naveen N. Rao" <naveen.n.rao@linux.ibm.com>,
Palmer Dabbelt <palmer@dabbelt.com>,
Puranjay Mohan <puranjay12@gmail.com>,
Rick Edgecombe <rick.p.edgecombe@intel.com>,
Russell King <linux@armlinux.org.uk>, Song Liu <song@kernel.org>,
Steven Rostedt <rostedt@goodmis.org>,
Thomas Bogendoerfer <tsbogend@alpha.franken.de>,
Will Deacon <will@kernel.org>,
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
Subject: Re: [PATCH v2 06/12] mm/execmem: introduce execmem_data_alloc()
Date: Mon, 19 Jun 2023 00:32:55 +0200 [thread overview]
Message-ID: <87jzw0qu3s.ffs@tglx> (raw)
In-Reply-To: <20230616085038.4121892-7-rppt@kernel.org>
Mike!
Sorry for being late on this ...
On Fri, Jun 16 2023 at 11:50, Mike Rapoport wrote:
>
> +void *execmem_data_alloc(size_t size)
> +{
> + unsigned long start = execmem_params.modules.data.start;
> + unsigned long end = execmem_params.modules.data.end;
> + pgprot_t pgprot = execmem_params.modules.data.pgprot;
> + unsigned int align = execmem_params.modules.data.alignment;
> + unsigned long fallback_start = execmem_params.modules.data.fallback_start;
> + unsigned long fallback_end = execmem_params.modules.data.fallback_end;
> + bool kasan = execmem_params.modules.flags & EXECMEM_KASAN_SHADOW;
While I know for sure that you read up on the discussion I had with Song
about data structures, it seems you completely failed to understand it.
> + return execmem_alloc(size, start, end, align, pgprot,
> + fallback_start, fallback_end, kasan);
Having _seven_ intermediate variables to fill _eight_ arguments of a
function instead of handing in @size and a proper struct pointer is
tasteless and disgusting at best.
Six out of those seven parameters are from:
execmem_params.module.data
while the KASAN shadow part is retrieved from
execmem_params.module.flags
So what prevents you from having a uniform data structure, which is
extensible and decribes _all_ types of allocations?
Absolutely nothing. The flags part can either be in the type dependend
part or you make the type configs an array as I had suggested originally
and then execmem_alloc() becomes:
void *execmem_alloc(type, size)
and
static inline void *execmem_data_alloc(size_t size)
{
return execmem_alloc(EXECMEM_TYPE_DATA, size);
}
which gets the type independent parts from @execmem_param.
Just read through your own series and watch the evolution of
execmem_alloc():
static void *execmem_alloc(size_t size)
static void *execmem_alloc(size_t size, unsigned long start,
unsigned long end, unsigned int align,
pgprot_t pgprot)
static void *execmem_alloc(size_t len, unsigned long start,
unsigned long end, unsigned int align,
pgprot_t pgprot,
unsigned long fallback_start,
unsigned long fallback_end,
bool kasan)
In a month from now this function will have _ten_ parameters and tons of
horrible wrappers which convert an already existing data structure into
individual function arguments.
Seriously?
If you want this function to be [ab]used outside of the exec_param
configuration space for whatever non-sensical reasons then this still
can be either:
void *execmem_alloc(params, type, size)
static inline void *execmem_data_alloc(size_t size)
{
return execmem_alloc(&exec_param, EXECMEM_TYPE_DATA, size);
}
or
void *execmem_alloc(type_params, size);
static inline void *execmem_data_alloc(size_t size)
{
return execmem_alloc(&exec_param.data, size);
}
which both allows you to provide alternative params, right?
Coming back to my conversation with Song:
"Bad programmers worry about the code. Good programmers worry about
data structures and their relationships."
You might want to reread:
https://lore.kernel.org/r/87lenuukj0.ffs@tglx
and the subsequent thread.
The fact that my suggestions had a 'mod_' namespace prefix does not make
any of my points moot.
Song did an extremly good job in abstracting things out, but you decided
to ditch his ground work instead of building on it and keeping the good
parts. That's beyond sad.
Worse, you went the full 'not invented here' path with an outcome which is
even worse than the original hackery from Song which started the above
referenced thread.
I don't know what caused you to decide that ad hoc hackery is better
than proper data structure based design patterns. I actually don't want
to know.
As much as my voice counts:
NAK-ed-by: Thomas Gleixner <tglx@linutronix.de>
Thanks,
tglx
next prev parent reply other threads:[~2023-06-18 22:33 UTC|newest]
Thread overview: 65+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-06-16 8:50 [PATCH v2 00/12] mm: jit/text allocator Mike Rapoport
2023-06-16 8:50 ` [PATCH v2 01/12] nios2: define virtual address space for modules Mike Rapoport
2023-06-16 16:00 ` Edgecombe, Rick P
2023-06-17 5:52 ` Mike Rapoport
2023-06-16 18:14 ` Song Liu
2023-06-16 8:50 ` [PATCH v2 02/12] mm: introduce execmem_text_alloc() and jit_text_alloc() Mike Rapoport
2023-06-16 16:48 ` Kent Overstreet
2023-06-16 18:18 ` Song Liu
2023-06-17 5:57 ` Mike Rapoport
2023-06-17 20:38 ` Andy Lutomirski
2023-06-18 8:00 ` Mike Rapoport
2023-06-19 17:09 ` Andy Lutomirski
2023-06-19 20:18 ` Nadav Amit
2023-06-20 17:24 ` Andy Lutomirski
2023-06-25 16:14 ` Mike Rapoport
2023-06-25 16:59 ` Andy Lutomirski
2023-06-25 17:42 ` Mike Rapoport
2023-06-25 18:07 ` Kent Overstreet
2023-06-26 6:13 ` Song Liu
2023-06-26 9:54 ` Puranjay Mohan
2023-06-26 12:23 ` Mark Rutland
2023-06-26 12:31 ` Mark Rutland
2023-06-26 17:48 ` Song Liu
2023-07-17 17:23 ` Andy Lutomirski
2023-06-26 13:01 ` Mark Rutland
2023-06-19 11:34 ` Kent Overstreet
2023-06-16 8:50 ` [PATCH v2 03/12] mm/execmem, arch: convert simple overrides of module_alloc to execmem Mike Rapoport
2023-06-16 18:36 ` Song Liu
2023-06-16 8:50 ` [PATCH v2 04/12] mm/execmem, arch: convert remaining " Mike Rapoport
2023-06-16 16:16 ` Edgecombe, Rick P
2023-06-17 6:10 ` Mike Rapoport
2023-06-16 18:53 ` Song Liu
2023-06-17 6:14 ` Mike Rapoport
2023-06-16 8:50 ` [PATCH v2 05/12] modules, execmem: drop module_alloc Mike Rapoport
2023-06-16 18:56 ` Song Liu
2023-06-16 8:50 ` [PATCH v2 06/12] mm/execmem: introduce execmem_data_alloc() Mike Rapoport
2023-06-16 16:55 ` Edgecombe, Rick P
2023-06-17 6:44 ` Mike Rapoport
2023-06-16 20:01 ` Song Liu
2023-06-17 6:51 ` Mike Rapoport
2023-06-18 22:32 ` Thomas Gleixner [this message]
2023-06-18 23:14 ` Kent Overstreet
2023-06-19 0:43 ` Thomas Gleixner
2023-06-19 2:12 ` Kent Overstreet
2023-06-20 14:51 ` Steven Rostedt
2023-06-20 15:32 ` Alexei Starovoitov
2023-06-19 15:23 ` Mike Rapoport
2023-06-16 8:50 ` [PATCH v2 07/12] arm64, execmem: extend execmem_params for generated code definitions Mike Rapoport
2023-06-16 20:05 ` Song Liu
2023-06-17 6:57 ` Mike Rapoport
2023-06-17 15:36 ` Kent Overstreet
2023-06-17 16:38 ` Song Liu
2023-06-17 20:37 ` Kent Overstreet
2023-06-16 8:50 ` [PATCH v2 08/12] riscv: extend execmem_params for kprobes allocations Mike Rapoport
2023-06-16 20:09 ` Song Liu
2023-06-16 8:50 ` [PATCH v2 09/12] powerpc: " Mike Rapoport
2023-06-16 20:09 ` Song Liu
2023-06-16 8:50 ` [PATCH v2 10/12] arch: make execmem setup available regardless of CONFIG_MODULES Mike Rapoport
2023-06-16 20:17 ` Song Liu
2023-06-16 8:50 ` [PATCH v2 11/12] x86/ftrace: enable dynamic ftrace without CONFIG_MODULES Mike Rapoport
2023-06-16 20:18 ` Song Liu
2023-06-16 8:50 ` [PATCH v2 12/12] kprobes: remove dependcy on CONFIG_MODULES Mike Rapoport
2023-06-16 11:44 ` Björn Töpel
2023-06-17 6:52 ` Mike Rapoport
2023-06-16 17:02 ` [PATCH v2 00/12] mm: jit/text allocator Edgecombe, Rick P
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87jzw0qu3s.ffs@tglx \
--to=tglx@linutronix.de \
--cc=akpm@linux-foundation.org \
--cc=bpf@vger.kernel.org \
--cc=catalin.marinas@arm.com \
--cc=chenhuacai@kernel.org \
--cc=christophe.leroy@csgroup.eu \
--cc=davem@davemloft.net \
--cc=deller@gmx.de \
--cc=dinguyen@kernel.org \
--cc=hca@linux.ibm.com \
--cc=kent.overstreet@linux.dev \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mips@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=linux-modules@vger.kernel.org \
--cc=linux-parisc@vger.kernel.org \
--cc=linux-riscv@lists.infradead.org \
--cc=linux-s390@vger.kernel.org \
--cc=linux-trace-kernel@vger.kernel.org \
--cc=linux@armlinux.org.uk \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=loongarch@lists.linux.dev \
--cc=mark.rutland@arm.com \
--cc=mcgrof@kernel.org \
--cc=mpe@ellerman.id.au \
--cc=nadav.amit@gmail.com \
--cc=naveen.n.rao@linux.ibm.com \
--cc=netdev@vger.kernel.org \
--cc=palmer@dabbelt.com \
--cc=puranjay12@gmail.com \
--cc=rick.p.edgecombe@intel.com \
--cc=rostedt@goodmis.org \
--cc=rppt@kernel.org \
--cc=song@kernel.org \
--cc=sparclinux@vger.kernel.org \
--cc=tsbogend@alpha.franken.de \
--cc=will@kernel.org \
--cc=x86@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox