[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 15:47, Jonathan Creekmore 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. > > Signed-off-by: Jonathan Creekmore <jonathan.creekmore@xxxxxxxxx> In principle, this is a good change, but is definitely aimed at 4.7 now. > diff --git a/xen/arch/x86/x86_64/compat/entry.S > b/xen/arch/x86/x86_64/compat/entry.S > index 1521779..e2fe49c 100644 > --- a/xen/arch/x86/x86_64/compat/entry.S > +++ b/xen/arch/x86/x86_64/compat/entry.S > @@ -428,7 +428,11 @@ ENTRY(compat_hypercall_table) > .quad do_hvm_op > .quad do_sysctl /* 35 */ > .quad do_domctl > +#if CONFIG_KEXEC > .quad compat_kexec_op > +#else > + .quad do_ni_hypercall > +#endif > .quad do_tmem_op > .quad do_ni_hypercall /* reserved for XenClient */ > .quad do_xenpmu_op /* 40 */ > @@ -479,6 +483,11 @@ ENTRY(compat_hypercall_args_table) > .byte 2 /* do_hvm_op */ > .byte 1 /* do_sysctl */ /* 35 */ > .byte 1 /* do_domctl */ > +#if CONFIG_KEXEC > + .byte 2 /* compat_kexec_op */ > +#else > + .byte 0 /* do_ni_hypercall */ > +#endif You have a hard tab here. > .byte 2 /* compat_kexec_op */ > .byte 1 /* do_tmem_op */ > .byte 0 /* reserved for XenClient */ > diff --git a/xen/arch/x86/x86_64/entry.S b/xen/arch/x86/x86_64/entry.S > index 74677a2..357f3d5 100644 > --- a/xen/arch/x86/x86_64/entry.S > +++ b/xen/arch/x86/x86_64/entry.S > @@ -761,7 +761,11 @@ ENTRY(hypercall_table) > .quad do_hvm_op > .quad do_sysctl /* 35 */ > .quad do_domctl > +#ifdef CONFIG_KEXEC > .quad do_kexec_op > +#else > + .quad do_ni_hypercall > +#endif > .quad do_tmem_op > .quad do_ni_hypercall /* reserved for XenClient */ > .quad do_xenpmu_op /* 40 */ > @@ -812,7 +816,11 @@ ENTRY(hypercall_args_table) > .byte 2 /* do_hvm_op */ > .byte 1 /* do_sysctl */ /* 35 */ > .byte 1 /* do_domctl */ > +#ifdef CONFIG_KEXEC > .byte 2 /* do_kexec */ > +#else > + .byte 0 /* do_ni_hypercall */ > +#endif These changes will corrupt guest registers in debug builds. Don't alter the args table at all, and use #ifndef CONFIG_KEXEC #define do_kexec_op do_ni_hypercall #define compat_kexec_op do_ni_hypercall #endif rather than patching the hypercall table itself. ~Andrew > .byte 1 /* do_tmem_op */ > .byte 0 /* reserved for XenClient */ > .byte 2 /* do_xenpmu_op */ /* 40 */ > diff --git a/xen/drivers/passthrough/vtd/dmar.h > b/xen/drivers/passthrough/vtd/dmar.h > index 729b603..697e5e5 100644 > --- 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 > > int vtd_hw_check(void); > void disable_pmr(struct iommu *iommu); > diff --git a/xen/include/asm-x86/config.h b/xen/include/asm-x86/config.h > index 3e9be83..e84e489 100644 > --- 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. > */ > This is an unrelated hunk and should be dropped. ~Andrew _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |