On Wed, Sep 8, 2021 at 10:16 AM Shuah Khan skhan@linuxfoundation.org wrote:
On 9/8/21 11:05 AM, Arnd Bergmann wrote:
On Wed, Sep 8, 2021 at 4:12 PM Shuah Khan skhan@linuxfoundation.org wrote:
On 9/7/21 5:14 PM, Linus Torvalds wrote:
The KUNIT macros create all these individually reasonably small initialized structures on stack, and when you have more than a small handful of them the KUNIT infrastructure just makes the stack space explode. Sometimes the compiler will be able to re-use the stack slots, but it seems to be an iffy proposition to depend on it - it seems to be a combination of luck and various config options.
I have been concerned about these macros creeping in for a while. I will take a closer look and work with Brendan to come with a plan to address it.
I've previously sent patches to turn off the structleak plugin for any kunit test file to work around this, but only a few of those patches got merged and new files have been added since. It would definitely help to come up with a proper fix, but my structleak-disable hack should be sufficient as a quick fix.
Looks like these are RFC patches and the discussion went cold. Let's pick this back up and we can make progress.
https://lore.kernel.org/lkml/CAFd5g45+JqKDqewqz2oZtnphA-_0w62FdSTkRs43K_NJUg...
I can try to get the patch reapplying and send it out (I just figured that Arnd or Kees would want to send it out :-) since it was your idea).
I definitely agree that in the cases where KUnit is not actually contributing to blowing the stack - struct leak just thinks it is, this is fine; however, it sounds like Linus' concerns with KUnit's macros go deeper than this. Arnd, I think you sketched out a way to make the KUNIT_* macros take up less space, but after some investigation we found that it was pretty inflexible.
Ideally test cases should never get big enough for KUNIT_* macros to be a problem (when they do it is usually an indication that your test case is trying to do too many things); nevertheless, we are still in this situation.
I think I will need to dust off some cobwebs out of my brain to remember why I didn't like the idea of making the KUNIT_* macros take up less stack space.