Re: [Xen-devel] [PATCH for-4.13 v4 1/3] vmx: add ASSERT to prevent syncing PIR to IRR...

2019-11-14 Thread Roger Pau Monné
On Thu, Nov 14, 2019 at 01:25:54PM +0100, Jan Beulich wrote:
> On 13.11.2019 16:59, Roger Pau Monne wrote:
> > --- a/xen/arch/x86/hvm/vmx/vmx.c
> > +++ b/xen/arch/x86/hvm/vmx/vmx.c
> > @@ -2054,6 +2054,17 @@ static void vmx_sync_pir_to_irr(struct vcpu *v)
> >  unsigned int group, i;
> >  DECLARE_BITMAP(pending_intr, NR_VECTORS);
> >  
> > +if ( v != current && v->is_running )
> 
> Iirc it was suggested to use vcpu_runnable() here. Is there a reason
> you used the less reliable (more prone to races) ->is_running?

My mistake, I don't think there's any reason to prefer is_running over
vcpu_runable in this case. I can resend with this fixed, but I will
wait for comments on the other patches.

Thanks, Roger.

___
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

Re: [Xen-devel] [PATCH for-4.13 v4 1/3] vmx: add ASSERT to prevent syncing PIR to IRR...

2019-11-14 Thread Jan Beulich
On 13.11.2019 16:59, Roger Pau Monne wrote:
> --- a/xen/arch/x86/hvm/vmx/vmx.c
> +++ b/xen/arch/x86/hvm/vmx/vmx.c
> @@ -2054,6 +2054,17 @@ static void vmx_sync_pir_to_irr(struct vcpu *v)
>  unsigned int group, i;
>  DECLARE_BITMAP(pending_intr, NR_VECTORS);
>  
> +if ( v != current && v->is_running )

Iirc it was suggested to use vcpu_runnable() here. Is there a reason
you used the less reliable (more prone to races) ->is_running?

Jan

___
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

[Xen-devel] [PATCH for-4.13 v4 1/3] vmx: add ASSERT to prevent syncing PIR to IRR...

2019-11-13 Thread Roger Pau Monne
... if the vCPU is different than the one currently running or if it's
running on a different pCPU.

No functional change intended.

Suggested by: Andrew Cooper 
Signed-off-by: Roger Pau Monné 
---
Cc: Juergen Gross 
---
 xen/arch/x86/hvm/vmx/vmx.c | 11 +++
 1 file changed, 11 insertions(+)

diff --git a/xen/arch/x86/hvm/vmx/vmx.c b/xen/arch/x86/hvm/vmx/vmx.c
index a55ff37733..e5e674c373 100644
--- a/xen/arch/x86/hvm/vmx/vmx.c
+++ b/xen/arch/x86/hvm/vmx/vmx.c
@@ -2054,6 +2054,17 @@ static void vmx_sync_pir_to_irr(struct vcpu *v)
 unsigned int group, i;
 DECLARE_BITMAP(pending_intr, NR_VECTORS);
 
+if ( v != current && v->is_running )
+{
+/*
+ * Syncing PIR to IRR must not be done behind the back of the CPU,
+ * since the IRR is controlled by the hardware when the vCPU is
+ * executing.
+ */
+ASSERT_UNREACHABLE();
+return;
+}
+
 if ( !pi_test_and_clear_on(&v->arch.hvm.vmx.pi_desc) )
 return;
 
-- 
2.24.0


___
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel