[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [stable-4.10: PATCH] xen: revert commits 72a9b186292 and da72ff5bfcb0



On Fri, May 05, 2017 at 10:00:36AM +0200, Juergen Gross wrote:
> Revert commit 72a9b186292 ("xen: Remove event channel notification
> through Xen PCI platform device") as the original analysis was wrong
> that all the removed code isn't in use any more. As commit da72ff5bfcb0
> ("partially revert xen: Remove event channel notification through Xen
> PCI platform device") reverted already some parts of it revert this
> commit, too.
> 
> It is still necessary for old Xen versions (< 4.0) and for being able
> to run the Linux kernel as dom0 in a nested Xen environment.
> 
> Upstream commit is 84d582d236dc1f9085e741affc72e9ba061a67c2.
> 
> Cc: Boris Ostrovsky <boris.ostrovsky@xxxxxxxxxx>
> Cc: Thomas Gleixner <tglx@xxxxxxxxxxxxx>
> Cc: Ingo Molnar <mingo@xxxxxxxxxx>
> Cc: "H. Peter Anvin" <hpa@xxxxxxxxx>
> Cc: x86@xxxxxxxxxx
> Cc: Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx>
> Cc: Bjorn Helgaas <bhelgaas@xxxxxxxxxx>
> Cc: Stefano Stabellini <sstabellini@xxxxxxxxxx>
> Cc: Julien Grall <julien.grall@xxxxxxx>
> Cc: Vitaly Kuznetsov <vkuznets@xxxxxxxxxx>
> Cc: Paul Gortmaker <paul.gortmaker@xxxxxxxxxxxxx>
> Cc: Ross Lagerwall <ross.lagerwall@xxxxxxxxxx>
> Cc: xen-devel@xxxxxxxxxxxxxxxxxxxx
> Cc: linux-kernel@xxxxxxxxxxxxxxx
> Cc: linux-pci@xxxxxxxxxxxxxxx
> Cc: Anthony Liguori <aliguori@xxxxxxxxxx>
> Cc: KarimAllah Ahmed <karahmed@xxxxxxxxx>
> Signed-off-by: Juergen Gross <jgross@xxxxxxxx>
> ---
> Please apply to stable-4.10.y and stable-4.11.y
> ---
>  arch/x86/include/asm/xen/events.h | 11 +++++++++++
>  arch/x86/pci/xen.c                |  2 +-
>  arch/x86/xen/enlighten.c          | 21 +++++++++++++++------
>  arch/x86/xen/smp.c                |  2 ++
>  arch/x86/xen/time.c               |  5 +++++
>  drivers/xen/events/events_base.c  | 26 +++++++++++++++++---------
>  drivers/xen/platform-pci.c        | 13 +++----------
>  include/xen/xen.h                 |  3 ++-
>  8 files changed, 56 insertions(+), 27 deletions(-)
> 
> diff --git a/arch/x86/include/asm/xen/events.h
> b/arch/x86/include/asm/xen/events.h
> index 608a79d5a466..e6911caf5bbf 100644
> --- a/arch/x86/include/asm/xen/events.h
> +++ b/arch/x86/include/asm/xen/events.h
> @@ -20,4 +20,15 @@ static inline int xen_irqs_disabled(struct pt_regs *regs)
>  /* No need for a barrier -- XCHG is a barrier on x86. */
>  #define xchg_xen_ulong(ptr, val) xchg((ptr), (val))
>  +extern int xen_have_vector_callback;
> +
> +/*
> + * Events delivered via platform PCI interrupts are always
> + * routed to vcpu 0 and hence cannot be rebound.
> + */
> +static inline bool xen_support_evtchn_rebind(void)
> +{
> +     return (!xen_hvm_domain() || xen_have_vector_callback);
> +}
> +
>  #endif /* _ASM_X86_XEN_EVENTS_H */
> diff --git a/arch/x86/pci/xen.c b/arch/x86/pci/xen.c
> index 292ab0364a89..c4b3646bd04c 100644
> --- a/arch/x86/pci/xen.c
> +++ b/arch/x86/pci/xen.c
> @@ -447,7 +447,7 @@ void __init xen_msi_init(void)
>   int __init pci_xen_hvm_init(void)
>  {
> -     if (!xen_feature(XENFEAT_hvm_pirqs))
> +     if (!xen_have_vector_callback || !xen_feature(XENFEAT_hvm_pirqs))
>               return 0;
>   #ifdef CONFIG_ACPI
> diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c
> index 51ef95232725..6623867cc0d4 100644
> --- a/arch/x86/xen/enlighten.c
> +++ b/arch/x86/xen/enlighten.c
> @@ -137,6 +137,8 @@ struct shared_info xen_dummy_shared_info;
>  void *xen_initial_gdt;
>   RESERVE_BRK(shared_info_page_brk, PAGE_SIZE);
> +__read_mostly int xen_have_vector_callback;
> +EXPORT_SYMBOL_GPL(xen_have_vector_callback);
>   static int xen_cpu_up_prepare(unsigned int cpu);
>  static int xen_cpu_up_online(unsigned int cpu);
> @@ -1508,7 +1510,10 @@ static void __init xen_pvh_early_guest_init(void)
>       if (!xen_feature(XENFEAT_auto_translated_physmap))
>               return;
>  -    BUG_ON(!xen_feature(XENFEAT_hvm_callback_vector));
> +     if (!xen_feature(XENFEAT_hvm_callback_vector))
> +             return;
> +
> +     xen_have_vector_callback = 1;
>       xen_pvh_early_cpu_init(0, false);
>       xen_pvh_set_cr_flags(0);
> @@ -1847,7 +1852,9 @@ static int xen_cpu_up_prepare(unsigned int cpu)
>               xen_vcpu_setup(cpu);
>       }
>  -    if (xen_pv_domain() || xen_feature(XENFEAT_hvm_safe_pvclock))
> +     if (xen_pv_domain() ||
> +         (xen_have_vector_callback &&
> +          xen_feature(XENFEAT_hvm_safe_pvclock)))
>               xen_setup_timer(cpu);
>       rc = xen_smp_intr_init(cpu);
> @@ -1863,7 +1870,9 @@ static int xen_cpu_dead(unsigned int cpu)
>  {
>       xen_smp_intr_free(cpu);
>  -    if (xen_pv_domain() || xen_feature(XENFEAT_hvm_safe_pvclock))
> +     if (xen_pv_domain() ||
> +         (xen_have_vector_callback &&
> +          xen_feature(XENFEAT_hvm_safe_pvclock)))
>               xen_teardown_timer(cpu);
>       return 0;
> @@ -1902,8 +1911,8 @@ static void __init xen_hvm_guest_init(void)
>       xen_panic_handler_init();
>  -    BUG_ON(!xen_feature(XENFEAT_hvm_callback_vector));
> -
> +     if (xen_feature(XENFEAT_hvm_callback_vector))
> +             xen_have_vector_callback = 1;
>       xen_hvm_smp_init();
>       WARN_ON(xen_cpuhp_setup());
>       xen_unplug_emulated_devices();
> @@ -1941,7 +1950,7 @@ bool xen_hvm_need_lapic(void)
>               return false;
>       if (!xen_hvm_domain())
>               return false;
> -     if (xen_feature(XENFEAT_hvm_pirqs))
> +     if (xen_feature(XENFEAT_hvm_pirqs) && xen_have_vector_callback)
>               return false;
>       return true;
>  }
> diff --git a/arch/x86/xen/smp.c b/arch/x86/xen/smp.c
> index 311acad7dad2..137afbbd0590 100644
> --- a/arch/x86/xen/smp.c
> +++ b/arch/x86/xen/smp.c
> @@ -765,6 +765,8 @@ static void __init xen_hvm_smp_prepare_cpus(unsigned
> int max_cpus)
>   void __init xen_hvm_smp_init(void)
>  {
> +     if (!xen_have_vector_callback)
> +             return;
>       smp_ops.smp_prepare_cpus = xen_hvm_smp_prepare_cpus;
>       smp_ops.smp_send_reschedule = xen_smp_send_reschedule;
>       smp_ops.cpu_die = xen_cpu_die;
> diff --git a/arch/x86/xen/time.c b/arch/x86/xen/time.c
> index 1e69956d7852..4535627cf532 100644
> --- a/arch/x86/xen/time.c
> +++ b/arch/x86/xen/time.c
> @@ -432,6 +432,11 @@ static void xen_hvm_setup_cpu_clockevents(void)
>   void __init xen_hvm_init_time_ops(void)
>  {
> +     /* vector callback is needed otherwise we cannot receive interrupts
> +      * on cpu > 0 and at this point we don't know how many cpus are
> +      * available */
> +     if (!xen_have_vector_callback)
> +             return;
>       if (!xen_feature(XENFEAT_hvm_safe_pvclock)) {
>               printk(KERN_INFO "Xen doesn't support pvclock on HVM,"
>                               "disable pv timer\n");
> diff --git a/drivers/xen/events/events_base.c
> b/drivers/xen/events/events_base.c
> index fd8e872d2943..86199f31bc57 100644
> --- a/drivers/xen/events/events_base.c
> +++ b/drivers/xen/events/events_base.c
> @@ -1312,6 +1312,9 @@ static int rebind_irq_to_cpu(unsigned irq,
> unsigned tcpu)

Your patch is line-wrapped and can not be applied :(

can you fix this up and resend both this, and the 4.9 patch?

thanks,

greg k-h

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.