Re: include: linux: slab: kmalloc_trace undefined when compiling drivers

From: Vlastimil Babka
Date: Mon Nov 14 2022 - 11:58:07 EST


On 11/14/22 13:39, Ian Cowan wrote:
> On Mon, Nov 14, 2022 at 05:59:06PM +0900, Hyeonggon Yoo wrote:
>> On Sat, Nov 12, 2022 at 08:21:14PM -0500, Ian Cowan wrote:
>> > On Sat, Nov 12, 2022 at 05:11:27PM -0800, Randy Dunlap wrote:
>> > >
>> > >
>> > > On 11/12/22 16:43, Ian Cowan wrote:
>> > > > On Sat, Nov 12, 2022 at 04:34:18PM -0800, Randy Dunlap wrote:
>> > > >>
>> > > >>
>> > > >> On 11/12/22 13:59, Ian Cowan wrote:
>> > > >>> On Sat, Nov 12, 2022 at 09:21:34AM -0800, Randy Dunlap wrote:
>> > > >>>> Hi--
>> > > >>>>
>> > > >>>> On 11/12/22 08:37, Ian Cowan wrote:
>> > > >>>>> When compiling drivers (speficially drivers/pci/hotplug), I am receiving
>> > > >>>>> the following modpost error for both `kmalloc_trace` and
>> > > >>>>> `kmalloc_node_trace` on the staging/staging-next branch:
>> > > >>>>>
>> > > >>
>> > > >> Ian, what do you mean by "on the staging/staging-next branch"?
>> > > >>
>> > > >> What kernel version are you trying to build?
>> > > >>
>> > > >> The .config that you sent is for v6.1.0-rc1.
>> > > >
>> > > > I am building from the staging repository (gregkh/staging) and my
>> > > > working branch when building is staging-next. So I am trying to build
>> > > > from staging and not a particular version. I have also run `make modules_prepare`
>> > > > and updated the .config per that script. However, when I do build
>> > > > v6.1.0-rc1 from the main repository (torvalds/linux), I run into the same problem.
>> > >
>> > > Have you built the entire kernel already and then you are trying to build
>> > > only drivers/pci/hotplug?
>> > Yes, I did build the entire kernel already and then I'm just trying to
>> > rebuild that module.
>> >
>> > In `include/linux/slab.h` if I remove the lines between `#ifdef
>> > CONFIG_TRACING` and `#else` (lines 473-480) and then the corresponding
>> > `#endif` and leave lines 481-499, I'm able to compile that module
>> > without issue.
>>
>> I don't get what the problem is.
>> In case kmalloc[_node]_trace() is undefined, it's replaced with kmem_cache_alloc[_node].
>>
>> Is the kernel built with same config on tree?
>
> Yes, the same config on tree with no errors or warnings. I was able to
> trace it back to this commit - building on the commit immediately prior
> builds without error or warning. It looks like this commit does some
> refactoring of the kmem_cache_alloc[_node] and kmalloc[_node]_trace.
>
> https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging.git/commit/?h=staging-next&id=26a40990ba052

As you can see in that diff, mm/slab_common.c does
EXPORT_SYMBOL(kmalloc_trace) and EXPORT_SYMBOL(kmalloc_node_trace) so I
don't see why they should be missing.

Wonder if you have a stale mm/slab_common.o because for some reason it's not
being recompiled (a file timestamp in the future?)
Can you rm it and rebuild? And maybe also mm/built-in.a
Or maybe a full make clean and/or a fresh checkout.