Re: [Qemu-devel] [PATCH v3 08/13] pc: apic_common: reset APIC ID to initial ID when switching into x2APIC mode

2016-10-13 Thread Radim Krčmář
2016-10-13 11:52+0200, Igor Mammedov:
> SDM: x2APIC State Transitions:
>  State Changes From xAPIC Mode to x2APIC Mode
> "
> Any APIC ID value written to the memory-mapped
> local APIC ID register is not preserved
> "
> 
> Signed-off-by: Igor Mammedov 
> ---

Reviewed-by: Radim Krčmář 

>  hw/intc/apic_common.c | 5 +
>  1 file changed, 5 insertions(+)
> 
> diff --git a/hw/intc/apic_common.c b/hw/intc/apic_common.c
> index ea3c8ca..d78c885 100644
> --- a/hw/intc/apic_common.c
> +++ b/hw/intc/apic_common.c
> @@ -40,6 +40,11 @@ void cpu_set_apic_base(DeviceState *dev, uint64_t val)
>  if (dev) {
>  APICCommonState *s = APIC_COMMON(dev);
>  APICCommonClass *info = APIC_COMMON_GET_CLASS(s);
> +/* switching to x2APIC, reset possibly modified xAPIC ID */
> +if (!(s->apicbase & MSR_IA32_APICBASE_EXTD) &&
> +(val & MSR_IA32_APICBASE_EXTD)) {
> +s->id = s->initial_apic_id;
> +}
>  info->set_base(s, val);
>  }
>  }
> -- 
> 2.7.4
> 
> 



[Qemu-devel] [PATCH v3 08/13] pc: apic_common: reset APIC ID to initial ID when switching into x2APIC mode

2016-10-13 Thread Igor Mammedov
SDM: x2APIC State Transitions:
 State Changes From xAPIC Mode to x2APIC Mode
"
Any APIC ID value written to the memory-mapped
local APIC ID register is not preserved
"

Signed-off-by: Igor Mammedov 
---
 hw/intc/apic_common.c | 5 +
 1 file changed, 5 insertions(+)

diff --git a/hw/intc/apic_common.c b/hw/intc/apic_common.c
index ea3c8ca..d78c885 100644
--- a/hw/intc/apic_common.c
+++ b/hw/intc/apic_common.c
@@ -40,6 +40,11 @@ void cpu_set_apic_base(DeviceState *dev, uint64_t val)
 if (dev) {
 APICCommonState *s = APIC_COMMON(dev);
 APICCommonClass *info = APIC_COMMON_GET_CLASS(s);
+/* switching to x2APIC, reset possibly modified xAPIC ID */
+if (!(s->apicbase & MSR_IA32_APICBASE_EXTD) &&
+(val & MSR_IA32_APICBASE_EXTD)) {
+s->id = s->initial_apic_id;
+}
 info->set_base(s, val);
 }
 }
-- 
2.7.4