Thread (22 messages) 22 messages, 5 authors, 2021-11-17

Re: [PATCH v3 7/7] ARM: implement support for vmap'ed stacks

From: Ard Biesheuvel <ardb@kernel.org>
Date: 2021-11-17 10:49:51
Also in: kernelci, linux-omap

On Wed, 17 Nov 2021 at 10:08, Ard Biesheuvel [off-list ref] wrote:
On Wed, 17 Nov 2021 at 10:07, Arnd Bergmann [off-list ref] wrote:
quoted
On Wed, Nov 17, 2021 at 10:03 AM Arnd Bergmann [off-list ref] wrote:
quoted
On Wed, Nov 17, 2021 at 9:36 AM Tony Lindgren [off-list ref] wrote:
quoted
* Ard Biesheuvel [off-list ref] [211117 08:29]:
quoted
Thanks Tony, that is very helpful. I have a Beaglebone white somewhere
so I'll try and reproduce it locally as well.
I think with Beaglebone you may hit this only with suspend/resume if at
all. On am335x cpuidle is not shutting down the CPU. And only some models
will suspend to deeper idle states as it depends on the PMIC.

If you have some test patch to try, just let me know.
I looked at how the sleep code is called and found that cpu_suspend()/
__cpu_suspend() has interesting manipulation of the stack pointer to
call the platform specific function with a simple 1:1 page table,
I would expect the problem somewhere in there, haven't pinpointed
the exact line yet, but if any of that code tries to local the physical
address of the stack using virt_to_phys or its asm equivalent, this
fails for a vmap stack.
and just after sending this I see

void __cpu_suspend_save(u32 *ptr, u32 ptrsz, u32 sp, u32 *save_ptr)
{
        *save_ptr = virt_to_phys(ptr);

'ptr' is a pointer to the stack here. It might not be the only place that
needs fixing, but this clearly has to do a page table walk like
vmalloc_to_page() does to get to the correct physical address.
I had just arrived at the same conclusion. I'll fix this up and drop
it in kernelci.
Updated branch here:
https://git.kernel.org/pub/scm/linux/kernel/git/ardb/linux.git/commit/?h=arm-vmap-stacks-v4

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help