[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] iommu: leave IOMMU enabled by default during kexec crash transition
On 19/02/2019 08:13, Jan Beulich wrote: >>>> On 18.02.19 at 17:21, <igor.druzhinin@xxxxxxxxxx> wrote: > > First of all - please follow patch submission rules: They get sent _to_ > the list, with maintainers and others _cc_-ed. > >> It's unsafe to disable IOMMU on a live system which is the case >> if we're crashing since remapping hardware doesn't usually know what >> to do with ongoing bus transactions and frequently raises NMI/MCE/SMI, >> etc. (depends on the firmware configuration) to signal these abnormalities. >> This, in turn, doesn't play well with kexec transition process as there is >> no any handling available at the moment for this kind of events resulting >> in failures to enter the kernel. >> >> Modern Linux kernels taught to copy all the necessary DMAR/IR tables >> following kexec from the previous kernel (Xen in our case) - so it's >> currently normal to keep IOMMU enabled. It would only require to change >> crash kernel command line by enabling IOMMU drivers from the existing users. >> >> An option is left for compatibility with ancient crash kernels which >> didn't like to have IOMMU active under their feet on boot. >> >> Signed-off-by: Igor Druzhinin <igor.druzhinin@xxxxxxxxxx> >> --- >> >> Jan, Andrew, should we have this option here and, if so, what is the default >> value for it should be? > > I think the option should definitely be here (I can't even see what > the alternative would be, as then the patch would be effectively > be deletion of the iommu_crash_shutdown() invocation, just for a > patch adding the option to re-instate it. > > The default is more difficult to choose: Keeping the IOMMU on for > an unaware crash kernel is perhaps about as bad as turning it off > when the crash kernel would know how to deal with it. > > Wouldn't it be possible to allow the kexec tool to specify the > intended behavior via a (flag to a) hypercall? How is adding of the > respective command line option controlled in the bare metal Linux > case? We certainly don't want to change the existing ABI but as to extending: Could you give a usecase for kexec tool having such an additional hypercall? What additional value to the command line option it would add? I'm not following your last question. Could you elaborate? >> --- a/docs/misc/xen-command-line.pandoc >> +++ b/docs/misc/xen-command-line.pandoc >> @@ -1235,6 +1235,11 @@ boolean (e.g. `iommu=no`) can override this and leave >> the IOMMUs disabled. >> This option depends on `intremap`, and is disabled by default due to >> some >> corner cases in the implementation which have yet to be resolved. >> >> +* The `crash-shutdown` boolean controls shutting down IOMMU before >> switching >> + to a crash kernel through kexec. This option is inactive by default and >> + is for compatibility with older kexec kernels only as modern kernels >> copy >> + all the necessary tables from the previous kernel following kexec >> transition. > > You also want to append to the "List of" at the top of this option's > description. > Will do. >> --- a/xen/arch/x86/crash.c >> +++ b/xen/arch/x86/crash.c >> @@ -162,8 +162,9 @@ static void nmi_shootdown_cpus(void) >> printk("Failed to shoot down CPUs {%*pbl}\n", >> nr_cpu_ids, cpumask_bits(&waiting_to_crash)); >> >> - /* Crash shutdown any IOMMU functionality as the crashdump kernel is not >> - * happy when booting if interrupt/dma remapping is still enabled */ >> + /* Try to crash shutdown IOMMU functionality as some old crashdump >> + * kernels are not happy when booting if interrupt/dma remapping >> + * is still enabled */ >> iommu_crash_shutdown(); > > Please can you correct comment style here seeing the you > re-write it anyway? > Ok. >> @@ -88,6 +89,8 @@ static int __init parse_iommu_param(const char *s) >> iommu_intremap = val; >> else if ( (val = parse_boolean("intpost", s, ss)) >= 0 ) >> iommu_intpost = val; >> + else if ( (val = parse_boolean("crash-shutdown", s, ss)) >= 0 ) >> + iommu_crash_shutdown_enable = val; > > #ifdef CONFIG_KEXEC ? > >> @@ -579,6 +582,9 @@ void iommu_share_p2m_table(struct domain* d) >> >> void iommu_crash_shutdown(void) >> { >> + if ( !iommu_crash_shutdown_enable ) >> + return; > > How to read this is very ambiguous - the way I've been reading it > first ("enable IOMMU on crash shutdown") the condition seemed > outright wrong. I think the command line option wants to be > something like "iommu=crash-disable" and the variable then > iommu_crash_disable (subject to further improvement if still > considered potentially ambiguous). > I can't see how "crash-shutdown" is ambiguous but if you prefer "crash-disable" I'll rename it. Igor _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |