[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] Live-Patch application failure in core-scheduling mode
On 07.02.20 09:23, Jan Beulich wrote: On 07.02.2020 09:04, Jürgen Groß wrote:On 06.02.20 15:02, Sergey Dyasli wrote:On 06/02/2020 11:05, Sergey Dyasli wrote:On 06/02/2020 09:57, Jürgen Groß wrote:On 05.02.20 17:03, Sergey Dyasli wrote:Hello, I'm currently investigating a Live-Patch application failure in core- scheduling mode and this is an example of what I usually get: (it's easily reproducible) (XEN) [ 342.528305] livepatch: lp: CPU8 - IPIing the other 15 CPUs (XEN) [ 342.558340] livepatch: lp: Timed out on semaphore in CPU quiesce phase 13/15 (XEN) [ 342.558343] bad cpus: 6 9 (XEN) [ 342.559293] CPU: 6 (XEN) [ 342.559562] Xen call trace: (XEN) [ 342.559565] [<ffff82d08023f304>] R common/schedule.c#sched_wait_rendezvous_in+0xa4/0x270 (XEN) [ 342.559568] [<ffff82d08023f8aa>] F common/schedule.c#schedule+0x17a/0x260 (XEN) [ 342.559571] [<ffff82d080240d5a>] F common/softirq.c#__do_softirq+0x5a/0x90 (XEN) [ 342.559574] [<ffff82d080278ec5>] F arch/x86/domain.c#guest_idle_loop+0x35/0x60 (XEN) [ 342.559761] CPU: 9 (XEN) [ 342.560026] Xen call trace: (XEN) [ 342.560029] [<ffff82d080241661>] R _spin_lock_irq+0x11/0x40 (XEN) [ 342.560032] [<ffff82d08023f323>] F common/schedule.c#sched_wait_rendezvous_in+0xc3/0x270 (XEN) [ 342.560036] [<ffff82d08023f8aa>] F common/schedule.c#schedule+0x17a/0x260 (XEN) [ 342.560039] [<ffff82d080240d5a>] F common/softirq.c#__do_softirq+0x5a/0x90 (XEN) [ 342.560042] [<ffff82d080279db5>] F arch/x86/domain.c#idle_loop+0x55/0xb0 The first HT sibling is waiting for the second in the LP-application context while the second waits for the first in the scheduler context. Any suggestions on how to improve this situation are welcome.Can you test the attached patch, please? It is only tested to boot, so I did no livepatch tests with it.Thank you for the patch! It seems to fix the issue in my manual testing. I'm going to submit automatic LP testing for both thread/core modes.Andrew suggested to test late ucode loading as well and so I did. It uses stop_machine() to rendezvous cpus and it failed with a similar backtrace for a problematic CPU. But in this case the system crashed since there is no timeout involved: (XEN) [ 155.025168] Xen call trace: (XEN) [ 155.040095] [<ffff82d0802417f2>] R _spin_unlock_irq+0x22/0x30 (XEN) [ 155.069549] [<ffff82d08023f3c2>] S common/schedule.c#sched_wait_rendezvous_in+0xa2/0x270 (XEN) [ 155.109696] [<ffff82d08023f728>] F common/schedule.c#sched_slave+0x198/0x260 (XEN) [ 155.145521] [<ffff82d080240e1a>] F common/softirq.c#__do_softirq+0x5a/0x90 (XEN) [ 155.180223] [<ffff82d0803716f6>] F x86_64/entry.S#process_softirqs+0x6/0x20 It looks like your patch provides a workaround for LP case, but other cases like stop_machine() remain broken since the underlying issue with the scheduler is still there.And here is the fix for ucode loading (that was in fact the only case where stop_machine_run() wasn't already called in a tasklet).This is a rather odd restriction, and hence will need explaining. stop_machine_run() is using a tasklet on each online cpu (excluding the one it was called one) for doing a rendezvous of all cpus. With tasklets always being executed on idle vcpus it is mandatory for stop_machine_run() to be called on an idle vcpu as well when core scheduling is active, as otherwise a deadlock will occur. This is being accomplished by the use of continue_hypercall_on_cpu(). Without it being entirely clear that there's no alternative to it, I don't think I'd be fine with re-introduction of continue_hypercall_on_cpu(0, ...) into ucode loading. I don't see a viable alternative. As the hypercall needs to wait until the loading has been performed for being able to report the result I can't see how this can be done else. Also two remarks on the patch itself: struct ucode_buf's len field can be unsigned int, seeing the very first check done in microcode_update(). And instead of xmalloc_bytes() please see whether you can make use of xmalloc_flex_struct() there. Both are fine with me. Juergen _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |