* [PATCH v2 10/11] vmware: set cpu capabilities during platform initialization [not found] <20170413101116.723-1-jgross@suse.com> @ 2017-04-13 10:11 ` Juergen Gross [not found] ` <20170413101116.723-11-jgross@suse.com> 2017-04-13 13:39 ` [PATCH v2 00/11] x86: xen cpuid() cleanup Boris Ostrovsky 2 siblings, 0 replies; 3+ messages in thread From: Juergen Gross @ 2017-04-13 10:11 UTC (permalink / raw) To: linux-kernel, xen-devel Cc: Juergen Gross, x86, Alok Kataria, virtualization, Ingo Molnar, H. Peter Anvin, boris.ostrovsky, Thomas Gleixner There is no need to set the same capabilities for each cpu individually. This can be done for all cpus in platform initialization. Cc: Alok Kataria <akataria@vmware.com> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Ingo Molnar <mingo@redhat.com> Cc: "H. Peter Anvin" <hpa@zytor.com> Cc: x86@kernel.org Cc: virtualization@lists.linux-foundation.org Signed-off-by: Juergen Gross <jgross@suse.com> --- arch/x86/kernel/cpu/vmware.c | 39 ++++++++++++++++++++------------------- 1 file changed, 20 insertions(+), 19 deletions(-) diff --git a/arch/x86/kernel/cpu/vmware.c b/arch/x86/kernel/cpu/vmware.c index 22403a28caf5..40ed26852ebd 100644 --- a/arch/x86/kernel/cpu/vmware.c +++ b/arch/x86/kernel/cpu/vmware.c @@ -113,6 +113,24 @@ static void __init vmware_paravirt_ops_setup(void) #define vmware_paravirt_ops_setup() do {} while (0) #endif +/* + * VMware hypervisor takes care of exporting a reliable TSC to the guest. + * Still, due to timing difference when running on virtual cpus, the TSC can + * be marked as unstable in some cases. For example, the TSC sync check at + * bootup can fail due to a marginal offset between vcpus' TSCs (though the + * TSCs do not drift from each other). Also, the ACPI PM timer clocksource + * is not suitable as a watchdog when running on a hypervisor because the + * kernel may miss a wrap of the counter if the vcpu is descheduled for a + * long time. To skip these checks at runtime we set these capability bits, + * so that the kernel could just trust the hypervisor with providing a + * reliable virtual TSC that is suitable for timekeeping. + */ +static void __init vmware_set_capabilities(void) +{ + setup_force_cpu_cap(X86_FEATURE_CONSTANT_TSC); + setup_force_cpu_cap(X86_FEATURE_TSC_RELIABLE); +} + static void __init vmware_platform_setup(void) { uint32_t eax, ebx, ecx, edx; @@ -152,6 +170,8 @@ static void __init vmware_platform_setup(void) #ifdef CONFIG_X86_IO_APIC no_timer_check = 1; #endif + + vmware_set_capabilities(); } /* @@ -176,24 +196,6 @@ static uint32_t __init vmware_platform(void) return 0; } -/* - * VMware hypervisor takes care of exporting a reliable TSC to the guest. - * Still, due to timing difference when running on virtual cpus, the TSC can - * be marked as unstable in some cases. For example, the TSC sync check at - * bootup can fail due to a marginal offset between vcpus' TSCs (though the - * TSCs do not drift from each other). Also, the ACPI PM timer clocksource - * is not suitable as a watchdog when running on a hypervisor because the - * kernel may miss a wrap of the counter if the vcpu is descheduled for a - * long time. To skip these checks at runtime we set these capability bits, - * so that the kernel could just trust the hypervisor with providing a - * reliable virtual TSC that is suitable for timekeeping. - */ -static void vmware_set_cpu_features(struct cpuinfo_x86 *c) -{ - set_cpu_cap(c, X86_FEATURE_CONSTANT_TSC); - set_cpu_cap(c, X86_FEATURE_TSC_RELIABLE); -} - /* Checks if hypervisor supports x2apic without VT-D interrupt remapping. */ static bool __init vmware_legacy_x2apic_available(void) { @@ -206,7 +208,6 @@ static bool __init vmware_legacy_x2apic_available(void) const __refconst struct hypervisor_x86 x86_hyper_vmware = { .name = "VMware", .detect = vmware_platform, - .set_cpu_features = vmware_set_cpu_features, .init_platform = vmware_platform_setup, .x2apic_available = vmware_legacy_x2apic_available, }; -- 2.12.0 ^ permalink raw reply related [flat|nested] 3+ messages in thread
[parent not found: <20170413101116.723-11-jgross@suse.com>]
* Re: [PATCH v2 10/11] vmware: set cpu capabilities during platform initialization [not found] ` <20170413101116.723-11-jgross@suse.com> @ 2017-04-13 10:29 ` Alok Kataria 0 siblings, 0 replies; 3+ messages in thread From: Alok Kataria @ 2017-04-13 10:29 UTC (permalink / raw) To: jgross@suse.com Cc: x86@kernel.org, linux-kernel@vger.kernel.org, virtualization@lists.linux-foundation.org, mingo@redhat.com, hpa@zytor.com, xen-devel@lists.xenproject.org, boris.ostrovsky@oracle.com, tglx@linutronix.de On Thu, 2017-04-13 at 12:11 +0200, Juergen Gross wrote: > There is no need to set the same capabilities for each cpu > individually. This can be done for all cpus in platform initialization. Looks reasonable to me. Acked-by: Alok Kataria <akataria@vmware.com> Thanks, Alok > > Cc: Alok Kataria <akataria@vmware.com> > Cc: Thomas Gleixner <tglx@linutronix.de> > Cc: Ingo Molnar <mingo@redhat.com> > Cc: "H. Peter Anvin" <hpa@zytor.com> > Cc: x86@kernel.org > Cc: virtualization@lists.linux-foundation.org > Signed-off-by: Juergen Gross <jgross@suse.com> > --- > arch/x86/kernel/cpu/vmware.c | 39 ++++++++++++++++++++------------------- > 1 file changed, 20 insertions(+), 19 deletions(-) > > diff --git a/arch/x86/kernel/cpu/vmware.c b/arch/x86/kernel/cpu/vmware.c > index 22403a28caf5..40ed26852ebd 100644 > --- a/arch/x86/kernel/cpu/vmware.c > +++ b/arch/x86/kernel/cpu/vmware.c > @@ -113,6 +113,24 @@ static void __init vmware_paravirt_ops_setup(void) > #define vmware_paravirt_ops_setup() do {} while (0) > #endif > > +/* > + * VMware hypervisor takes care of exporting a reliable TSC to the guest. > + * Still, due to timing difference when running on virtual cpus, the TSC can > + * be marked as unstable in some cases. For example, the TSC sync check at > + * bootup can fail due to a marginal offset between vcpus' TSCs (though the > + * TSCs do not drift from each other). Also, the ACPI PM timer clocksource > + * is not suitable as a watchdog when running on a hypervisor because the > + * kernel may miss a wrap of the counter if the vcpu is descheduled for a > + * long time. To skip these checks at runtime we set these capability bits, > + * so that the kernel could just trust the hypervisor with providing a > + * reliable virtual TSC that is suitable for timekeeping. > + */ > +static void __init vmware_set_capabilities(void) > +{ > + setup_force_cpu_cap(X86_FEATURE_CONSTANT_TSC); > + setup_force_cpu_cap(X86_FEATURE_TSC_RELIABLE); > +} > + > static void __init vmware_platform_setup(void) > { > uint32_t eax, ebx, ecx, edx; > @@ -152,6 +170,8 @@ static void __init vmware_platform_setup(void) > #ifdef CONFIG_X86_IO_APIC > no_timer_check = 1; > #endif > + > + vmware_set_capabilities(); > } > > /* > @@ -176,24 +196,6 @@ static uint32_t __init vmware_platform(void) > return 0; > } > > -/* > - * VMware hypervisor takes care of exporting a reliable TSC to the guest. > - * Still, due to timing difference when running on virtual cpus, the TSC can > - * be marked as unstable in some cases. For example, the TSC sync check at > - * bootup can fail due to a marginal offset between vcpus' TSCs (though the > - * TSCs do not drift from each other). Also, the ACPI PM timer clocksource > - * is not suitable as a watchdog when running on a hypervisor because the > - * kernel may miss a wrap of the counter if the vcpu is descheduled for a > - * long time. To skip these checks at runtime we set these capability bits, > - * so that the kernel could just trust the hypervisor with providing a > - * reliable virtual TSC that is suitable for timekeeping. > - */ > -static void vmware_set_cpu_features(struct cpuinfo_x86 *c) > -{ > - set_cpu_cap(c, X86_FEATURE_CONSTANT_TSC); > - set_cpu_cap(c, X86_FEATURE_TSC_RELIABLE); > -} > - > /* Checks if hypervisor supports x2apic without VT-D interrupt remapping. */ > static bool __init vmware_legacy_x2apic_available(void) > { > @@ -206,7 +208,6 @@ static bool __init vmware_legacy_x2apic_available(void) > const __refconst struct hypervisor_x86 x86_hyper_vmware = { > .name = "VMware", > .detect = vmware_platform, > - .set_cpu_features = vmware_set_cpu_features, > .init_platform = vmware_platform_setup, > .x2apic_available = vmware_legacy_x2apic_available, > }; ^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH v2 00/11] x86: xen cpuid() cleanup [not found] <20170413101116.723-1-jgross@suse.com> 2017-04-13 10:11 ` [PATCH v2 10/11] vmware: set cpu capabilities during platform initialization Juergen Gross [not found] ` <20170413101116.723-11-jgross@suse.com> @ 2017-04-13 13:39 ` Boris Ostrovsky 2 siblings, 0 replies; 3+ messages in thread From: Boris Ostrovsky @ 2017-04-13 13:39 UTC (permalink / raw) To: Juergen Gross, linux-kernel, xen-devel Cc: x86, virtualization, Ingo Molnar, H. Peter Anvin, Alok Kataria, Thomas Gleixner On 04/13/2017 06:11 AM, Juergen Gross wrote: > Reduce special casing of xen_cpuid() by using cpu capabilities instead > of faked cpuid nodes. > > This cleanup enables us remove the hypervisor specific set_cpu_features > callback as the same effect can be reached via > setup_[clear|force]_cpu_cap(). > > Removing the rest faked nodes from xen_cpuid() requires some more work > as the remaining cases (mwait leafs and extended topology info) have > to be handled at the consumer sides of this information. Reviewed-by: Boris Ostrovsky <boris.ostrovsky@oracle.com> -boris ^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2017-04-13 13:39 UTC | newest] Thread overview: 3+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- [not found] <20170413101116.723-1-jgross@suse.com> 2017-04-13 10:11 ` [PATCH v2 10/11] vmware: set cpu capabilities during platform initialization Juergen Gross [not found] ` <20170413101116.723-11-jgross@suse.com> 2017-04-13 10:29 ` Alok Kataria 2017-04-13 13:39 ` [PATCH v2 00/11] x86: xen cpuid() cleanup Boris Ostrovsky
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).