On Mon, Jan 13, 2020 at 06:33:08PM +0000, Andrew Doran wrote: > On Mon, Jan 13, 2020 at 05:43:51PM +0100, Manuel Bouyer wrote: > > > On Mon, Jan 13, 2020 at 04:59:50PM +0100, Manuel Bouyer wrote: > > > It also sets rsp and rbp. I think rbp is not set by anything else, at last > > > in the Xen case. > > > The different rbp value would explain why in one case we hit a KASSERT() > > > in lwp_startup later. > > > But I don't know what pcb_rbp contains; I couldn't find where the pcb for > > > idlelwp is initialized. > > > > I tried the attached patch, which should set rsp/rbp as cpu_switchto() > > does. It doens't cause the lwp_startup() KASSERT as calling cpu_switchto() > > does; it also doesn't change the scheduler behavior. > > Wait - do you mean that everything works now? Or that everything still runs > on CPU0?
No, everything still runs on CPU0 > > The very first thing that idle_loop() does on amd64/i386 is set up the frame > pointer - ebp/rbp. > > 0000000000000000 <idle_loop>: > 0: 55 push %rbp > 1: 48 89 e5 mov %rsp,%rbp > 4: 41 56 push %r14 > 6: 41 55 push %r13 OK, so it's OK that my patch doesn't changes anything. And so I still don't understand the KASSERT when cpu_switchto() is called before idle_loop(). -- Manuel Bouyer <bou...@antioche.eu.org> NetBSD: 26 ans d'experience feront toujours la difference --