Re: [PATCH 3/3] x86/vsmp: remove vsmp paravirt support

2017-08-10 Thread Juergen Gross
On 10/08/17 17:28, Shai Fultheim (s...@scalemp.com) wrote:
> NACK.  This is needed and used by thousands of installations.

Okay, thanks for reacting so fast. Will drop the patch.


Juergen

> 
> 
> 
> Shai Fultheim | M +1 (408) 480-1612 | E s...@scalemp.com
> 
> This email message and any attachments to it are ScaleMP confidential 
> information.
> 
> -Original Message-
> From: Ingo Molnar [mailto:mingo.kernel@gmail.com] On Behalf Of Juergen 
> Gross
> Sent: Thursday, August 10, 2017 15:53
> To: linux-kernel@vger.kernel.org; xen-de...@lists.xenproject.org; 
> x...@kernel.org
> Cc: h...@zytor.com; mi...@redhat.com; t...@linutronix.de; 
> boris.ostrov...@oracle.com; ru...@rustcorp.com.au; lgu...@lists.ozlabs.org; 
> Juergen Gross 
> Subject: [PATCH 3/3] x86/vsmp: remove vsmp paravirt support
> 
> vSMP has seen its last functional patch more than 3 years ago. It is
> not clear whether the vSMP paravirtualized irq functions are still
> needed.
> 
> Remove them as they seem to be optional and their existence is blocking
> some simplification work of paravirt infrastructure.
> 
> Signed-off-by: Juergen Gross 
> ---
>  arch/x86/Kconfig  |  1 -
>  arch/x86/kernel/vsmp_64.c | 69 
> +--
>  2 files changed, 1 insertion(+), 69 deletions(-)
> 
> diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
> index 3fac2570a2e1..13a3d8744ae4 100644
> --- a/arch/x86/Kconfig
> +++ b/arch/x86/Kconfig
> @@ -495,7 +495,6 @@ config X86_NUMACHIP
>  config X86_VSMP
>   bool "ScaleMP vSMP"
>   select HYPERVISOR_GUEST
> - select PARAVIRT
>   depends on X86_64 && PCI
>   depends on X86_EXTENDED_PLATFORM
>   depends on SMP
> diff --git a/arch/x86/kernel/vsmp_64.c b/arch/x86/kernel/vsmp_64.c
> index b034b1b14b9c..5d392b809ee4 100644
> --- a/arch/x86/kernel/vsmp_64.c
> +++ b/arch/x86/kernel/vsmp_64.c
> @@ -21,7 +21,6 @@
>  #include 
>  #include 
>  #include 
> -#include 
>  #include 
>  
>  #define TOPOLOGY_REGISTER_OFFSET 0x10
> @@ -29,64 +28,7 @@
>  /* Flag below is initialized once during vSMP PCI initialization. */
>  static int irq_routing_comply = 1;
>  
> -#if defined CONFIG_PCI && defined CONFIG_PARAVIRT
> -/*
> - * Interrupt control on vSMPowered systems:
> - * ~AC is a shadow of IF.  If IF is 'on' AC should be 'off'
> - * and vice versa.
> - */
> -
> -asmlinkage __visible unsigned long vsmp_save_fl(void)
> -{
> - unsigned long flags = native_save_fl();
> -
> - if (!(flags & X86_EFLAGS_IF) || (flags & X86_EFLAGS_AC))
> - flags &= ~X86_EFLAGS_IF;
> - return flags;
> -}
> -PV_CALLEE_SAVE_REGS_THUNK(vsmp_save_fl);
> -
> -__visible void vsmp_restore_fl(unsigned long flags)
> -{
> - if (flags & X86_EFLAGS_IF)
> - flags &= ~X86_EFLAGS_AC;
> - else
> - flags |= X86_EFLAGS_AC;
> - native_restore_fl(flags);
> -}
> -PV_CALLEE_SAVE_REGS_THUNK(vsmp_restore_fl);
> -
> -asmlinkage __visible void vsmp_irq_disable(void)
> -{
> - unsigned long flags = native_save_fl();
> -
> - native_restore_fl((flags & ~X86_EFLAGS_IF) | X86_EFLAGS_AC);
> -}
> -PV_CALLEE_SAVE_REGS_THUNK(vsmp_irq_disable);
> -
> -asmlinkage __visible void vsmp_irq_enable(void)
> -{
> - unsigned long flags = native_save_fl();
> -
> - native_restore_fl((flags | X86_EFLAGS_IF) & (~X86_EFLAGS_AC));
> -}
> -PV_CALLEE_SAVE_REGS_THUNK(vsmp_irq_enable);
> -
> -static unsigned __init vsmp_patch(u8 type, u16 clobbers, void *ibuf,
> -   unsigned long addr, unsigned len)
> -{
> - switch (type) {
> - case PARAVIRT_PATCH(pv_irq_ops.irq_enable):
> - case PARAVIRT_PATCH(pv_irq_ops.irq_disable):
> - case PARAVIRT_PATCH(pv_irq_ops.save_fl):
> - case PARAVIRT_PATCH(pv_irq_ops.restore_fl):
> - return paravirt_patch_default(type, clobbers, ibuf, addr, len);
> - default:
> - return native_patch(type, clobbers, ibuf, addr, len);
> - }
> -
> -}
> -
> +#if defined CONFIG_PCI
>  static void __init set_vsmp_pv_ops(void)
>  {
>   void __iomem *address;
> @@ -115,15 +57,6 @@ static void __init set_vsmp_pv_ops(void)
>   }
>  #endif
>  
> - if (cap & ctl & (1 << 4)) {
> - /* Setup irq ops and turn on vSMP  IRQ fastpath handling */
> - pv_irq_ops.irq_disable = PV_CALLEE_SAVE(vsmp_irq_disable);
> - pv_irq_ops.irq_enable  = PV_CALLEE_SAVE(vsmp_irq_enable);
> - pv_irq_ops.save_fl  = PV_CALLEE_SAVE(vsmp_save_fl);
> - pv_irq_ops.restore_fl  = PV_CALLEE_SAVE(vsmp_restore_fl);
> - pv_init_ops.patch = vsmp_patch;
> - ctl &= ~(1 << 4);
> - }
>   writel(ctl, address + 4);
>   ctl = readl(address + 4);
>   pr_info("vSMP CTL: control set to:0x%08x\n", ctl);
> 



RE: [PATCH 3/3] x86/vsmp: remove vsmp paravirt support

2017-08-10 Thread Shai Fultheim (s...@scalemp.com)
NACK.  This is needed and used by thousands of installations.



Shai Fultheim | M +1 (408) 480-1612 | E s...@scalemp.com

This email message and any attachments to it are ScaleMP confidential 
information.

-Original Message-
From: Ingo Molnar [mailto:mingo.kernel@gmail.com] On Behalf Of Juergen Gross
Sent: Thursday, August 10, 2017 15:53
To: linux-kernel@vger.kernel.org; xen-de...@lists.xenproject.org; 
x...@kernel.org
Cc: h...@zytor.com; mi...@redhat.com; t...@linutronix.de; 
boris.ostrov...@oracle.com; ru...@rustcorp.com.au; lgu...@lists.ozlabs.org; 
Juergen Gross 
Subject: [PATCH 3/3] x86/vsmp: remove vsmp paravirt support

vSMP has seen its last functional patch more than 3 years ago. It is
not clear whether the vSMP paravirtualized irq functions are still
needed.

Remove them as they seem to be optional and their existence is blocking
some simplification work of paravirt infrastructure.

Signed-off-by: Juergen Gross 
---
 arch/x86/Kconfig  |  1 -
 arch/x86/kernel/vsmp_64.c | 69 +--
 2 files changed, 1 insertion(+), 69 deletions(-)

diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
index 3fac2570a2e1..13a3d8744ae4 100644
--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
@@ -495,7 +495,6 @@ config X86_NUMACHIP
 config X86_VSMP
bool "ScaleMP vSMP"
select HYPERVISOR_GUEST
-   select PARAVIRT
depends on X86_64 && PCI
depends on X86_EXTENDED_PLATFORM
depends on SMP
diff --git a/arch/x86/kernel/vsmp_64.c b/arch/x86/kernel/vsmp_64.c
index b034b1b14b9c..5d392b809ee4 100644
--- a/arch/x86/kernel/vsmp_64.c
+++ b/arch/x86/kernel/vsmp_64.c
@@ -21,7 +21,6 @@
 #include 
 #include 
 #include 
-#include 
 #include 
 
 #define TOPOLOGY_REGISTER_OFFSET 0x10
@@ -29,64 +28,7 @@
 /* Flag below is initialized once during vSMP PCI initialization. */
 static int irq_routing_comply = 1;
 
-#if defined CONFIG_PCI && defined CONFIG_PARAVIRT
-/*
- * Interrupt control on vSMPowered systems:
- * ~AC is a shadow of IF.  If IF is 'on' AC should be 'off'
- * and vice versa.
- */
-
-asmlinkage __visible unsigned long vsmp_save_fl(void)
-{
-   unsigned long flags = native_save_fl();
-
-   if (!(flags & X86_EFLAGS_IF) || (flags & X86_EFLAGS_AC))
-   flags &= ~X86_EFLAGS_IF;
-   return flags;
-}
-PV_CALLEE_SAVE_REGS_THUNK(vsmp_save_fl);
-
-__visible void vsmp_restore_fl(unsigned long flags)
-{
-   if (flags & X86_EFLAGS_IF)
-   flags &= ~X86_EFLAGS_AC;
-   else
-   flags |= X86_EFLAGS_AC;
-   native_restore_fl(flags);
-}
-PV_CALLEE_SAVE_REGS_THUNK(vsmp_restore_fl);
-
-asmlinkage __visible void vsmp_irq_disable(void)
-{
-   unsigned long flags = native_save_fl();
-
-   native_restore_fl((flags & ~X86_EFLAGS_IF) | X86_EFLAGS_AC);
-}
-PV_CALLEE_SAVE_REGS_THUNK(vsmp_irq_disable);
-
-asmlinkage __visible void vsmp_irq_enable(void)
-{
-   unsigned long flags = native_save_fl();
-
-   native_restore_fl((flags | X86_EFLAGS_IF) & (~X86_EFLAGS_AC));
-}
-PV_CALLEE_SAVE_REGS_THUNK(vsmp_irq_enable);
-
-static unsigned __init vsmp_patch(u8 type, u16 clobbers, void *ibuf,
- unsigned long addr, unsigned len)
-{
-   switch (type) {
-   case PARAVIRT_PATCH(pv_irq_ops.irq_enable):
-   case PARAVIRT_PATCH(pv_irq_ops.irq_disable):
-   case PARAVIRT_PATCH(pv_irq_ops.save_fl):
-   case PARAVIRT_PATCH(pv_irq_ops.restore_fl):
-   return paravirt_patch_default(type, clobbers, ibuf, addr, len);
-   default:
-   return native_patch(type, clobbers, ibuf, addr, len);
-   }
-
-}
-
+#if defined CONFIG_PCI
 static void __init set_vsmp_pv_ops(void)
 {
void __iomem *address;
@@ -115,15 +57,6 @@ static void __init set_vsmp_pv_ops(void)
}
 #endif
 
-   if (cap & ctl & (1 << 4)) {
-   /* Setup irq ops and turn on vSMP  IRQ fastpath handling */
-   pv_irq_ops.irq_disable = PV_CALLEE_SAVE(vsmp_irq_disable);
-   pv_irq_ops.irq_enable  = PV_CALLEE_SAVE(vsmp_irq_enable);
-   pv_irq_ops.save_fl  = PV_CALLEE_SAVE(vsmp_save_fl);
-   pv_irq_ops.restore_fl  = PV_CALLEE_SAVE(vsmp_restore_fl);
-   pv_init_ops.patch = vsmp_patch;
-   ctl &= ~(1 << 4);
-   }
writel(ctl, address + 4);
ctl = readl(address + 4);
pr_info("vSMP CTL: control set to:0x%08x\n", ctl);
-- 
2.12.3



[PATCH 3/3] x86/vsmp: remove vsmp paravirt support

2017-08-10 Thread Juergen Gross
vSMP has seen its last functional patch more than 3 years ago. It is
not clear whether the vSMP paravirtualized irq functions are still
needed.

Remove them as they seem to be optional and their existence is blocking
some simplification work of paravirt infrastructure.

Signed-off-by: Juergen Gross 
---
 arch/x86/Kconfig  |  1 -
 arch/x86/kernel/vsmp_64.c | 69 +--
 2 files changed, 1 insertion(+), 69 deletions(-)

diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
index 3fac2570a2e1..13a3d8744ae4 100644
--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
@@ -495,7 +495,6 @@ config X86_NUMACHIP
 config X86_VSMP
bool "ScaleMP vSMP"
select HYPERVISOR_GUEST
-   select PARAVIRT
depends on X86_64 && PCI
depends on X86_EXTENDED_PLATFORM
depends on SMP
diff --git a/arch/x86/kernel/vsmp_64.c b/arch/x86/kernel/vsmp_64.c
index b034b1b14b9c..5d392b809ee4 100644
--- a/arch/x86/kernel/vsmp_64.c
+++ b/arch/x86/kernel/vsmp_64.c
@@ -21,7 +21,6 @@
 #include 
 #include 
 #include 
-#include 
 #include 
 
 #define TOPOLOGY_REGISTER_OFFSET 0x10
@@ -29,64 +28,7 @@
 /* Flag below is initialized once during vSMP PCI initialization. */
 static int irq_routing_comply = 1;
 
-#if defined CONFIG_PCI && defined CONFIG_PARAVIRT
-/*
- * Interrupt control on vSMPowered systems:
- * ~AC is a shadow of IF.  If IF is 'on' AC should be 'off'
- * and vice versa.
- */
-
-asmlinkage __visible unsigned long vsmp_save_fl(void)
-{
-   unsigned long flags = native_save_fl();
-
-   if (!(flags & X86_EFLAGS_IF) || (flags & X86_EFLAGS_AC))
-   flags &= ~X86_EFLAGS_IF;
-   return flags;
-}
-PV_CALLEE_SAVE_REGS_THUNK(vsmp_save_fl);
-
-__visible void vsmp_restore_fl(unsigned long flags)
-{
-   if (flags & X86_EFLAGS_IF)
-   flags &= ~X86_EFLAGS_AC;
-   else
-   flags |= X86_EFLAGS_AC;
-   native_restore_fl(flags);
-}
-PV_CALLEE_SAVE_REGS_THUNK(vsmp_restore_fl);
-
-asmlinkage __visible void vsmp_irq_disable(void)
-{
-   unsigned long flags = native_save_fl();
-
-   native_restore_fl((flags & ~X86_EFLAGS_IF) | X86_EFLAGS_AC);
-}
-PV_CALLEE_SAVE_REGS_THUNK(vsmp_irq_disable);
-
-asmlinkage __visible void vsmp_irq_enable(void)
-{
-   unsigned long flags = native_save_fl();
-
-   native_restore_fl((flags | X86_EFLAGS_IF) & (~X86_EFLAGS_AC));
-}
-PV_CALLEE_SAVE_REGS_THUNK(vsmp_irq_enable);
-
-static unsigned __init vsmp_patch(u8 type, u16 clobbers, void *ibuf,
- unsigned long addr, unsigned len)
-{
-   switch (type) {
-   case PARAVIRT_PATCH(pv_irq_ops.irq_enable):
-   case PARAVIRT_PATCH(pv_irq_ops.irq_disable):
-   case PARAVIRT_PATCH(pv_irq_ops.save_fl):
-   case PARAVIRT_PATCH(pv_irq_ops.restore_fl):
-   return paravirt_patch_default(type, clobbers, ibuf, addr, len);
-   default:
-   return native_patch(type, clobbers, ibuf, addr, len);
-   }
-
-}
-
+#if defined CONFIG_PCI
 static void __init set_vsmp_pv_ops(void)
 {
void __iomem *address;
@@ -115,15 +57,6 @@ static void __init set_vsmp_pv_ops(void)
}
 #endif
 
-   if (cap & ctl & (1 << 4)) {
-   /* Setup irq ops and turn on vSMP  IRQ fastpath handling */
-   pv_irq_ops.irq_disable = PV_CALLEE_SAVE(vsmp_irq_disable);
-   pv_irq_ops.irq_enable  = PV_CALLEE_SAVE(vsmp_irq_enable);
-   pv_irq_ops.save_fl  = PV_CALLEE_SAVE(vsmp_save_fl);
-   pv_irq_ops.restore_fl  = PV_CALLEE_SAVE(vsmp_restore_fl);
-   pv_init_ops.patch = vsmp_patch;
-   ctl &= ~(1 << 4);
-   }
writel(ctl, address + 4);
ctl = readl(address + 4);
pr_info("vSMP CTL: control set to:0x%08x\n", ctl);
-- 
2.12.3