xen-devel.lists.xenproject.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] hvm/x86: fix x2APIC APIC_ID read emulation
@ 2013-06-09  2:20 Wangzhenguo
  2013-06-09  9:19 ` Wei Liu
  2013-06-10  9:07 ` [PATCH v2] x86/HVM: " Jan Beulich
  0 siblings, 2 replies; 4+ messages in thread
From: Wangzhenguo @ 2013-06-09  2:20 UTC (permalink / raw)
  To: xen-devel@lists.xen.org; +Cc: Yangxiaowei, keir@xen.org

>From 769b64a379c9b447cf5ad8a6f93560dedeb26f2a Mon Sep 17 00:00:00 2001
From: Zhenguo Wang <wangzhenguo@huawei.com>
Date: Sun, 9 Jun 2013 10:08:48 +0800
Subject: [PATCH] hvm/x86: fix x2APIC APIC_ID read emulation

APIC and x2APIC have different format for APIC_ID register. Need translation.

Signed-off-by: Zhenguo Wang <wangzhenguo@huawei.com>
Signed-off-by: Xiaowei Yang <xiaowei.yang@huawei.com>
---
 xen/arch/x86/hvm/vlapic.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/xen/arch/x86/hvm/vlapic.c b/xen/arch/x86/hvm/vlapic.c
index 8c6a7e2..e0f6f06 100644
--- a/xen/arch/x86/hvm/vlapic.c
+++ b/xen/arch/x86/hvm/vlapic.c
@@ -584,6 +584,8 @@ int hvm_x2apic_msr_read(struct vcpu *v, unsigned int msr, uint64_t *msr_content)
     vlapic_read_aligned(vlapic, offset, &low);
     if ( offset == APIC_ICR )
         vlapic_read_aligned(vlapic, APIC_ICR2, &high);
+    else if ( offset == APIC_ID)
+        low = VLAPIC_ID(vlapic);
 
     *msr_content = (((uint64_t)high) << 32) | low;
     return 0;
--

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH] hvm/x86: fix x2APIC APIC_ID read emulation
  2013-06-09  2:20 [PATCH] hvm/x86: fix x2APIC APIC_ID read emulation Wangzhenguo
@ 2013-06-09  9:19 ` Wei Liu
  2013-06-10  9:07 ` [PATCH v2] x86/HVM: " Jan Beulich
  1 sibling, 0 replies; 4+ messages in thread
From: Wei Liu @ 2013-06-09  9:19 UTC (permalink / raw)
  To: Wangzhenguo; +Cc: Yangxiaowei, wei.liu2, keir@xen.org, xen-devel@lists.xen.org

On Sun, Jun 09, 2013 at 02:20:04AM +0000, Wangzhenguo wrote:
> >From 769b64a379c9b447cf5ad8a6f93560dedeb26f2a Mon Sep 17 00:00:00 2001
> From: Zhenguo Wang <wangzhenguo@huawei.com>
> Date: Sun, 9 Jun 2013 10:08:48 +0800
> Subject: [PATCH] hvm/x86: fix x2APIC APIC_ID read emulation
> 
> APIC and x2APIC have different format for APIC_ID register. Need translation.
> 
> Signed-off-by: Zhenguo Wang <wangzhenguo@huawei.com>
> Signed-off-by: Xiaowei Yang <xiaowei.yang@huawei.com>
> ---
>  xen/arch/x86/hvm/vlapic.c | 2 ++
>  1 file changed, 2 insertions(+)
> 
> diff --git a/xen/arch/x86/hvm/vlapic.c b/xen/arch/x86/hvm/vlapic.c
> index 8c6a7e2..e0f6f06 100644
> --- a/xen/arch/x86/hvm/vlapic.c
> +++ b/xen/arch/x86/hvm/vlapic.c
> @@ -584,6 +584,8 @@ int hvm_x2apic_msr_read(struct vcpu *v, unsigned int msr, uint64_t *msr_content)
>      vlapic_read_aligned(vlapic, offset, &low);
>      if ( offset == APIC_ICR )
>          vlapic_read_aligned(vlapic, APIC_ICR2, &high);
> +    else if ( offset == APIC_ID)
                                  ^
Style problem. Should add one space before closing parenthesis.


Wei.

> +        low = VLAPIC_ID(vlapic);
>  
>      *msr_content = (((uint64_t)high) << 32) | low;
>      return 0;
> --
> 
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@lists.xen.org
> http://lists.xen.org/xen-devel

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH v2] x86/HVM: fix x2APIC APIC_ID read emulation
  2013-06-09  2:20 [PATCH] hvm/x86: fix x2APIC APIC_ID read emulation Wangzhenguo
  2013-06-09  9:19 ` Wei Liu
@ 2013-06-10  9:07 ` Jan Beulich
  2013-06-10 12:23   ` Keir Fraser
  1 sibling, 1 reply; 4+ messages in thread
From: Jan Beulich @ 2013-06-10  9:07 UTC (permalink / raw)
  To: xen-devel@lists.xen.org
  Cc: Yangxiaowei, keir@xen.org, Eddie Dong, Jun Nakajima, Wangzhenguo

[-- Attachment #1: Type: text/plain, Size: 1688 bytes --]

APIC and x2APIC have different format for APIC_ID register. Need
translation.

Signed-off-by: Zhenguo Wang <wangzhenguo@huawei.com>
Signed-off-by: Xiaowei Yang <xiaowei.yang@huawei.com>

Convert code to use switch(), fixing coding style issue at once, and
use GET_xAPIC_ID() on the value read instead of VLAPIC_ID() (reading
the field again).

In the course of this also properly reject both read and writes on the
non-existing MSR corresponding to APIC_ICR2.

Signed-off-by: Jan Beulich <jbeulich@suse.com>

--- a/xen/arch/x86/hvm/vlapic.c
+++ b/xen/arch/x86/hvm/vlapic.c
@@ -582,8 +582,19 @@ int hvm_x2apic_msr_read(struct vcpu *v, 
         return 1;
 
     vlapic_read_aligned(vlapic, offset, &low);
-    if ( offset == APIC_ICR )
+    switch ( offset )
+    {
+    case APIC_ID:
+        low = GET_xAPIC_ID(low);
+        break;
+
+    case APIC_ICR:
         vlapic_read_aligned(vlapic, APIC_ICR2, &high);
+        break;
+
+    case APIC_ICR2:
+        return 1;
+    }
 
     *msr_content = (((uint64_t)high) << 32) | low;
     return 0;
@@ -837,11 +848,17 @@ int hvm_x2apic_msr_write(struct vcpu *v,
     if ( !vlapic_x2apic_mode(vlapic) )
         return X86EMUL_UNHANDLEABLE;
 
-    if ( offset == APIC_ICR )
+    switch ( offset )
     {
-        int rc = vlapic_reg_write(v, APIC_ICR2, (uint32_t)(msr_content >> 32));
+        int rc;
+
+    case APIC_ICR:
+        rc = vlapic_reg_write(v, APIC_ICR2, (uint32_t)(msr_content >> 32));
         if ( rc )
             return rc;
+
+    case APIC_ICR2:
+        return X86EMUL_UNHANDLEABLE;
     }
 
     return vlapic_reg_write(v, offset, (uint32_t)msr_content);




[-- Attachment #2: x86-HVM-x2apic-id.patch --]
[-- Type: text/plain, Size: 1728 bytes --]

x86/HVM: fix x2APIC APIC_ID read emulation

APIC and x2APIC have different format for APIC_ID register. Need
translation.

Signed-off-by: Zhenguo Wang <wangzhenguo@huawei.com>
Signed-off-by: Xiaowei Yang <xiaowei.yang@huawei.com>

Convert code to use switch(), fixing coding style issue at once, and
use GET_xAPIC_ID() on the value read instead of VLAPIC_ID() (reading
the field again).

In the course of this also properly reject both read and writes on the
non-existing MSR corresponding to APIC_ICR2.

Signed-off-by: Jan Beulich <jbeulich@suse.com>

--- a/xen/arch/x86/hvm/vlapic.c
+++ b/xen/arch/x86/hvm/vlapic.c
@@ -582,8 +582,19 @@ int hvm_x2apic_msr_read(struct vcpu *v, 
         return 1;
 
     vlapic_read_aligned(vlapic, offset, &low);
-    if ( offset == APIC_ICR )
+    switch ( offset )
+    {
+    case APIC_ID:
+        low = GET_xAPIC_ID(low);
+        break;
+
+    case APIC_ICR:
         vlapic_read_aligned(vlapic, APIC_ICR2, &high);
+        break;
+
+    case APIC_ICR2:
+        return 1;
+    }
 
     *msr_content = (((uint64_t)high) << 32) | low;
     return 0;
@@ -837,11 +848,17 @@ int hvm_x2apic_msr_write(struct vcpu *v,
     if ( !vlapic_x2apic_mode(vlapic) )
         return X86EMUL_UNHANDLEABLE;
 
-    if ( offset == APIC_ICR )
+    switch ( offset )
     {
-        int rc = vlapic_reg_write(v, APIC_ICR2, (uint32_t)(msr_content >> 32));
+        int rc;
+
+    case APIC_ICR:
+        rc = vlapic_reg_write(v, APIC_ICR2, (uint32_t)(msr_content >> 32));
         if ( rc )
             return rc;
+
+    case APIC_ICR2:
+        return X86EMUL_UNHANDLEABLE;
     }
 
     return vlapic_reg_write(v, offset, (uint32_t)msr_content);

[-- Attachment #3: Type: text/plain, Size: 126 bytes --]

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

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH v2] x86/HVM: fix x2APIC APIC_ID read emulation
  2013-06-10  9:07 ` [PATCH v2] x86/HVM: " Jan Beulich
@ 2013-06-10 12:23   ` Keir Fraser
  0 siblings, 0 replies; 4+ messages in thread
From: Keir Fraser @ 2013-06-10 12:23 UTC (permalink / raw)
  To: Jan Beulich, xen-devel@lists.xen.org
  Cc: Yangxiaowei, keir@xen.org, Eddie Dong, Jun Nakajima, Wangzhenguo

On 10/06/2013 10:07, "Jan Beulich" <JBeulich@suse.com> wrote:

> APIC and x2APIC have different format for APIC_ID register. Need
> translation.
> 
> Signed-off-by: Zhenguo Wang <wangzhenguo@huawei.com>
> Signed-off-by: Xiaowei Yang <xiaowei.yang@huawei.com>
> 
> Convert code to use switch(), fixing coding style issue at once, and
> use GET_xAPIC_ID() on the value read instead of VLAPIC_ID() (reading
> the field again).
> 
> In the course of this also properly reject both read and writes on the
> non-existing MSR corresponding to APIC_ICR2.
> 
> Signed-off-by: Jan Beulich <jbeulich@suse.com>

Acked-by: Keir Fraser <keir@xen.org>

> --- a/xen/arch/x86/hvm/vlapic.c
> +++ b/xen/arch/x86/hvm/vlapic.c
> @@ -582,8 +582,19 @@ int hvm_x2apic_msr_read(struct vcpu *v,
>          return 1;
>  
>      vlapic_read_aligned(vlapic, offset, &low);
> -    if ( offset == APIC_ICR )
> +    switch ( offset )
> +    {
> +    case APIC_ID:
> +        low = GET_xAPIC_ID(low);
> +        break;
> +
> +    case APIC_ICR:
>          vlapic_read_aligned(vlapic, APIC_ICR2, &high);
> +        break;
> +
> +    case APIC_ICR2:
> +        return 1;
> +    }
>  
>      *msr_content = (((uint64_t)high) << 32) | low;
>      return 0;
> @@ -837,11 +848,17 @@ int hvm_x2apic_msr_write(struct vcpu *v,
>      if ( !vlapic_x2apic_mode(vlapic) )
>          return X86EMUL_UNHANDLEABLE;
>  
> -    if ( offset == APIC_ICR )
> +    switch ( offset )
>      {
> -        int rc = vlapic_reg_write(v, APIC_ICR2, (uint32_t)(msr_content >>
> 32));
> +        int rc;
> +
> +    case APIC_ICR:
> +        rc = vlapic_reg_write(v, APIC_ICR2, (uint32_t)(msr_content >> 32));
>          if ( rc )
>              return rc;
> +
> +    case APIC_ICR2:
> +        return X86EMUL_UNHANDLEABLE;
>      }
>  
>      return vlapic_reg_write(v, offset, (uint32_t)msr_content);
> 
> 
> 

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2013-06-10 12:23 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-06-09  2:20 [PATCH] hvm/x86: fix x2APIC APIC_ID read emulation Wangzhenguo
2013-06-09  9:19 ` Wei Liu
2013-06-10  9:07 ` [PATCH v2] x86/HVM: " Jan Beulich
2013-06-10 12:23   ` Keir Fraser

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).