mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-04 18:19:28 +09:00
xen: setup pv irq ops vector earlier
commit 0ce0bba4e5 upstream.
Setting pv_irq_ops for Xen PV domains should be done as early as
possible in order to support e.g. very early printk() usage.
The same applies to xen_vcpu_info_reset(0), as it is needed for the
pv irq ops.
Move the call of xen_setup_machphys_mapping() after initializing the
pv functions as it contains a WARN_ON(), too.
Remove the no longer necessary conditional in xen_init_irq_ops()
from PVH V1 times to make clear this is a PV only function.
Cc: <stable@vger.kernel.org> # 4.14
Signed-off-by: Juergen Gross <jgross@suse.com>
Reviewed-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
Signed-off-by: Juergen Gross <jgross@suse.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
f47f1f9767
commit
54ca2776fc
@@ -1230,12 +1230,20 @@ asmlinkage __visible void __init xen_start_kernel(void)
|
||||
|
||||
xen_setup_features();
|
||||
|
||||
xen_setup_machphys_mapping();
|
||||
|
||||
/* Install Xen paravirt ops */
|
||||
pv_info = xen_info;
|
||||
pv_init_ops.patch = paravirt_patch_default;
|
||||
pv_cpu_ops = xen_cpu_ops;
|
||||
xen_init_irq_ops();
|
||||
|
||||
/*
|
||||
* Setup xen_vcpu early because it is needed for
|
||||
* local_irq_disable(), irqs_disabled(), e.g. in printk().
|
||||
*
|
||||
* Don't do the full vcpu_info placement stuff until we have
|
||||
* the cpu_possible_mask and a non-dummy shared_info.
|
||||
*/
|
||||
xen_vcpu_info_reset(0);
|
||||
|
||||
x86_platform.get_nmi_reason = xen_get_nmi_reason;
|
||||
|
||||
@@ -1247,6 +1255,7 @@ asmlinkage __visible void __init xen_start_kernel(void)
|
||||
* Set up some pagetable state before starting to set any ptes.
|
||||
*/
|
||||
|
||||
xen_setup_machphys_mapping();
|
||||
xen_init_mmu_ops();
|
||||
|
||||
/* Prevent unwanted bits from being set in PTEs. */
|
||||
@@ -1271,20 +1280,9 @@ asmlinkage __visible void __init xen_start_kernel(void)
|
||||
get_cpu_cap(&boot_cpu_data);
|
||||
x86_configure_nx();
|
||||
|
||||
xen_init_irq_ops();
|
||||
|
||||
/* Let's presume PV guests always boot on vCPU with id 0. */
|
||||
per_cpu(xen_vcpu_id, 0) = 0;
|
||||
|
||||
/*
|
||||
* Setup xen_vcpu early because idt_setup_early_handler needs it for
|
||||
* local_irq_disable(), irqs_disabled().
|
||||
*
|
||||
* Don't do the full vcpu_info placement stuff until we have
|
||||
* the cpu_possible_mask and a non-dummy shared_info.
|
||||
*/
|
||||
xen_vcpu_info_reset(0);
|
||||
|
||||
idt_setup_early_handler();
|
||||
|
||||
xen_init_capabilities();
|
||||
|
||||
@@ -128,8 +128,6 @@ static const struct pv_irq_ops xen_irq_ops __initconst = {
|
||||
|
||||
void __init xen_init_irq_ops(void)
|
||||
{
|
||||
/* For PVH we use default pv_irq_ops settings. */
|
||||
if (!xen_feature(XENFEAT_hvm_callback_vector))
|
||||
pv_irq_ops = xen_irq_ops;
|
||||
pv_irq_ops = xen_irq_ops;
|
||||
x86_init.irqs.intr_init = xen_init_IRQ;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user