|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] x86: wrap kexec feature with CONFIG_KEXEC
>>> On 27.08.15 at 16:47, <jonathan.creekmore@xxxxxxxxx> wrote:
> Add the appropriate #if checks around the kexec code in the x86 codebase
> so that the feature can actually be turned off by the flag instead of
> always required to be enabled on x86.
But you realize that these HAVE_* variables aren't meant to be used
for disabling features? If you really wanted something like that, you'd
need to introduce "kexec=y" in the top level Makefile, overridable by
"kexec=n" on the make command line.
> --- a/xen/arch/x86/Makefile
> +++ b/xen/arch/x86/Makefile
> @@ -56,8 +56,8 @@ obj-y += trace.o
> obj-y += traps.o
> obj-y += usercopy.o
> obj-y += x86_emulate.o
> -obj-y += machine_kexec.o
> -obj-y += crash.o
> +obj-$(HAS_KEXEC) += machine_kexec.o
> +obj-$(HAS_KEXEC) += crash.o
> obj-y += tboot.o
> obj-y += hpet.o
> obj-y += vm_event.o
If you already touch this, please move the two altered lines to their
proper (alphabetical) slot.
> --- a/xen/arch/x86/crash.c
> +++ b/xen/arch/x86/crash.c
> @@ -64,7 +64,9 @@ static void noreturn do_nmi_crash(const struct
> cpu_user_regs *regs)
> */
> set_ist(&idt_tables[cpu][TRAP_machine_check], IST_NONE);
>
> +#ifdef CONFIG_KEXEC
> kexec_crash_save_cpu();
> +#endif
In cases like this code will look much better if you introduced a no-op
inline function for the !CONFIG_KEXEC case in the appropriate header.
> --- a/xen/arch/x86/x86_64/compat/entry.S
> +++ b/xen/arch/x86/x86_64/compat/entry.S
Similarly at least the changes here ...
> --- a/xen/arch/x86/x86_64/entry.S
> +++ b/xen/arch/x86/x86_64/entry.S
.. and here will want better abstraction, to not further uglify the code.
> --- a/xen/drivers/passthrough/vtd/dmar.h
> +++ b/xen/drivers/passthrough/vtd/dmar.h
> @@ -108,6 +108,7 @@ struct acpi_atsr_unit *acpi_find_matched_atsr_unit(const
> struct pci_dev *);
>
> #define DMAR_OPERATION_TIMEOUT MILLISECS(1000)
>
> +#ifdef CONFIG_KEXEC
> #define IOMMU_WAIT_OP(iommu, offset, op, cond, sts) \
> do { \
> s_time_t start_time = NOW(); \
> @@ -125,6 +126,22 @@ do { \
> cpu_relax(); \
> } \
> } while (0)
> +#else
> +#define IOMMU_WAIT_OP(iommu, offset, op, cond, sts) \
> +do { \
> + s_time_t start_time = NOW(); \
> + while (1) { \
> + sts = op(iommu->reg, offset); \
> + if ( cond ) \
> + break; \
> + if ( NOW() > start_time + DMAR_OPERATION_TIMEOUT ) { \
> + panic("%s:%d:%s: DMAR hardware is malfunctional", \
> + __FILE__, __LINE__, __func__); \
> + } \
> + cpu_relax(); \
> + } \
> +} while (0)
> +#endif
Along the same lines here - no way for such a macro to be duplicated
for a case likely no-one but you will ever build-test.
> --- a/xen/include/asm-x86/config.h
> +++ b/xen/include/asm-x86/config.h
> @@ -1,6 +1,6 @@
>
> /****************************************************************************
> **
> * config.h
> - *
> + *
> * A Linux-style configuration list.
> */
>
Please leave out this unrelated white space change.
Jan
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |