Messages in this thread | | | From | Arnd Bergmann <> | Date | Mon, 23 May 2022 10:16:56 +0200 | Subject | Re: [PATCH v2] riscv: add irq stack support |
| |
On Sun, May 15, 2022 at 7:14 AM Jisheng Zhang <jszhang@kernel.org> wrote: > On Mon, Mar 07, 2022 at 08:19:35PM +0100, Arnd Bergmann wrote: > > On Mon, Mar 7, 2022 at 3:08 PM Jisheng Zhang <jszhang@kernel.org> wrote: > > > +2: > > > > What is the benefit of doing this in assembler? Is it measurably faster? > > > > I see that arm64 does the same thing in C code, and it would be best to > > have a common implementation for doing this, in terms of maintainability. > > > > Sorry for delay. The assembler code is mainly to cal the stack ptr then > change the SP to use the stack, which equals to arm64 call_on_irq_stack() > which is implemented in assembler too.
I understand that you need to be in asm code to switch the stack, it just felt that the arm64 method is a bit easier to debug here.
I suppose being able to keep using generic_handle_arch_irq() is also beneficial, so it doesn't make much difference either way.
> > > + for_each_possible_cpu(cpu) { > > > +#ifdef CONFIG_VMAP_STACK > > > + void *s = __vmalloc_node(IRQ_STACK_SIZE, THREAD_ALIGN, > > > + THREADINFO_GFP, cpu_to_node(cpu), > > > + __builtin_return_address(0)); > > > +#else > > > + void *s = (void *)__get_free_pages(GFP_KERNEL, get_order(IRQ_STACK_SIZE)); > > > +#endif > > > > On a related topic: is there a reason to still keep the non-VMAP_STACK > > irq stack is 16KB on RV64 now, vmalloc doesn't gurantee physical > continuous pages, I want to keep the stack physical continuous > characteristic for !VMAP_STACK case.
I don't understand. What is the benefit of having a physically continuous stack? If this is required for something, you could still get that with a VMAP stack by using alloc_pages() to allocate the stack and them using vmap() to put it into the vmalloc range with appropriate guard pages.
I think we really want to avoid the case of missing guard pages around the stack, and eliminate the part where the stack is in the linear map.
Arnd
| |