From patchwork Wed Feb 29 02:16:09 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexander Graf X-Patchwork-Id: 143657 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3AC8BB6FB7 for ; Wed, 29 Feb 2012 13:16:16 +1100 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S966223Ab2B2CQN (ORCPT ); Tue, 28 Feb 2012 21:16:13 -0500 Received: from cantor2.suse.de ([195.135.220.15]:49211 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S966189Ab2B2CQL (ORCPT ); Tue, 28 Feb 2012 21:16:11 -0500 Received: from relay1.suse.de (unknown [195.135.220.254]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx2.suse.de (Postfix) with ESMTP id 60B848BB22; Wed, 29 Feb 2012 03:16:10 +0100 (CET) From: Alexander Graf To: kvm-ppc@vger.kernel.org Cc: kvm@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, Scott Wood , Stuart Yoder Subject: [PATCH] KVM: PPC: Don't sync timebase when inside KVM Date: Wed, 29 Feb 2012 03:16:09 +0100 Message-Id: <1330481769-24390-1-git-send-email-agraf@suse.de> X-Mailer: git-send-email 1.7.3.4 Sender: kvm-ppc-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm-ppc@vger.kernel.org When we know that we're running inside of a KVM guest, we don't have to worry about synchronizing timebases between different CPUs, since the host already took care of that. This fixes CPU overcommit scenarios where vCPUs could hang forever trying to sync each other while not being scheduled. Reported-by: Stuart Yoder Signed-off-by: Alexander Graf --- arch/powerpc/kernel/smp.c | 6 ++++-- 1 files changed, 4 insertions(+), 2 deletions(-) diff --git a/arch/powerpc/kernel/smp.c b/arch/powerpc/kernel/smp.c index 46695fe..670b453 100644 --- a/arch/powerpc/kernel/smp.c +++ b/arch/powerpc/kernel/smp.c @@ -49,6 +49,8 @@ #ifdef CONFIG_PPC64 #include #endif +#include +#include #ifdef DEBUG #include @@ -541,7 +543,7 @@ int __cpuinit __cpu_up(unsigned int cpu) DBG("Processor %u found.\n", cpu); - if (smp_ops->give_timebase) + if (!kvm_para_available() && smp_ops->give_timebase) smp_ops->give_timebase(); /* Wait until cpu puts itself in the online map */ @@ -626,7 +628,7 @@ void __devinit start_secondary(void *unused) if (smp_ops->setup_cpu) smp_ops->setup_cpu(cpu); - if (smp_ops->take_timebase) + if (!kvm_para_available() && smp_ops->take_timebase) smp_ops->take_timebase(); secondary_cpu_time_init();