WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

[Xen-devel] [PATCH v2] VPMU issue on Nehalem cpus

To: "xen-devel@xxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxx>
Subject: [Xen-devel] [PATCH v2] VPMU issue on Nehalem cpus
From: Dietmar Hahn <dietmar.hahn@xxxxxxxxxxxxxx>
Date: Mon, 22 Nov 2010 10:43:22 +0100
Cc: "Shan, Haitao" <haitao.shan@xxxxxxxxx>, Jan Beulich <JBeulich@xxxxxxxxxx>
Delivery-date: Mon, 22 Nov 2010 01:44:18 -0800
Dkim-signature: v=1; a=rsa-sha256; c=simple/simple; d=ts.fujitsu.com; i=dietmar.hahn@xxxxxxxxxxxxxx; q=dns/txt; s=s1536b; t=1290419006; x=1321955006; h=from:to:subject:date:cc:mime-version:message-id; z=From:=20Dietmar=20Hahn=20<dietmar.hahn@xxxxxxxxxxxxxx> |To:=20"xen-devel@xxxxxxxxxxxxxxxxxxx"=20<xen-devel@lists .xensource.com>|Subject:=20[PATCH=20v2]=20VPMU=20issue=20 on=20Nehalem=20cpus|Date:=20Mon,=2022=20Nov=202010=2010:4 3:22=20+0100|Cc:=20"Shan,=20Haitao"=20<haitao.shan@intel. com>,=0D=0A=20Jan=20Beulich=20<JBeulich@xxxxxxxxxx> |MIME-Version:=201.0|Message-Id:=20<201011221043.22815.di etmar.hahn@xxxxxxxxxxxxxx>; bh=qpY1izZyUV3Sx+liaHb/cBZXDKOEKAYATZIlUY5FwB0=; b=AOyepdFdLXN3/EdewrQqZhvQ+hIRFqO0lap/rmtSgerzjpXvuUFCAS4Y 5qJXUZKyqLA+7PZ0QRtXi8RBkojQ/D/6Ud4EtmEPxLaxttTapRA9FCmUS wAEq+C79zuS72/gVkM/Krjd18oGVWih4+2Q+tKV+03bV3QJO6KhUd2adI VBK2NEzpGdrLLUotw9j41ck4sYfJBJ/E1Wd3RxD/cWa2gLlBfqyIOC3ft JCE71ipwBjOnZjpUQEwrvE7WE0V40;
Domainkey-signature: s=s1536a; d=ts.fujitsu.com; c=nofws; q=dns; h=X-SBRSScore:X-IronPort-AV:Received:X-IronPort-AV: Received:Received:From:To:Subject:Date:User-Agent:Cc: X-KMail-Markup:MIME-Version:Content-Type:Message-Id; b=jKJ3gIdkv/RXI0ZgkiHRWquqbiavmuUXU3IfKAvG3vjBT6KG/X3PNwl6 hhpW/vG4IKWz5KPT5Ul57SB2pRvXM7sXl+F5xW5iFeOZiZvMkpTb+d9dX RmxxyZjtnAJkVhXxeKUbFYGPuazi2gkBuzDL5AHwSARBQGhmzBPWyirho OdVOZzDaDzrKG7Qdn89ml1bQFaUCpP/uRZJT6/M2XD3WMMAMj2JaFxm0D FYcoFpGJdyGWs6bIShqoTILfekyBs;
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: KMail/1.13.5 (Linux/2.6.34.7-0.5-xen; KDE/4.5.3; x86_64; ; )

Hi,

this ist the second version of the patch. I improved the comment, changed

nmi->pmc in some names and worked in Jan's notes.

Thanks.

Dietmar.

Fix an issue on Nehalem cpus where performance counter overflows may lead to

endless interrupt loops on this cpu.

Signed-off-by: Dietmar Hahn <dietmar.hahn@xxxxxxxxxxxxxx>

diff -r 117d82dcd6ba -r 387427bfd6f7 xen/arch/x86/hvm/vmx/vpmu_core2.c

--- a/xen/arch/x86/hvm/vmx/vpmu_core2.c Fri Nov 19 18:55:18 2010 +0000

+++ b/xen/arch/x86/hvm/vmx/vpmu_core2.c Mon Nov 22 10:28:15 2010 +0100

@@ -36,6 +36,68 @@

#include <asm/hvm/vpmu.h>

#include <asm/hvm/vmx/vpmu_core2.h>

+/*

+ * QUIRK to workaround an issue on Nehalem processors currently seen

+ * on family 6 cpus E5520 (model 26) and X7542 (model 46).

+ * The issue leads to endless PMC interrupt loops on the processor.

+ * If the interrupt handler is running and a pmc reaches the value 0, this

+ * value remains forever and it triggers immediately a new interrupt after

+ * finishing the handler.

+ * A workaround is to read all flagged counters and if the value is 0 write

+ * 1 (or another value != 0) into it.

+ * There exist no errata and the real cause of this behaviour is unknown.

+ */

+static int is_pmc_quirk;

+

+static void check_pmc_quirk(void)

+{

+ u8 family = current_cpu_data.x86;

+ u8 cpu_model = current_cpu_data.x86_model;

+ is_pmc_quirk = 0;

+ if ( family == 6 )

+ {

+ if ( cpu_model == 46 || cpu_model == 26 )

+ is_pmc_quirk = 1;

+ }

+}

+

+static int core2_get_pmc_count(void);

+static void handle_pmc_quirk(u64 msr_content)

+{

+ int num_gen_pmc = core2_get_pmc_count();

+ int num_fix_pmc = 3;

+ int i;

+ u64 val;

+

+ if ( !is_pmc_quirk )

+ return;

+

+ val = msr_content;

+ for ( i = 0; i < num_gen_pmc; i++ )

+ {

+ if ( val & 0x1 )

+ {

+ u64 cnt;

+ rdmsrl(MSR_P6_PERFCTR0 + i, cnt);

+ if ( cnt == 0 )

+ wrmsrl(MSR_P6_PERFCTR0 + i, 1);

+ }

+ val >>= 1;

+ }

+ val = msr_content >> 32;

+ for ( i = 0; i < num_fix_pmc; i++ )

+ {

+ if ( val & 0x1 )

+ {

+ u64 cnt;

+ rdmsrl(MSR_CORE_PERF_FIXED_CTR0 + i, cnt);

+ if ( cnt == 0 )

+ wrmsrl(MSR_CORE_PERF_FIXED_CTR0 + i, 1);

+ }

+ val >>= 1;

+ }

+}

+

u32 core2_counters_msr[] = {

MSR_CORE_PERF_FIXED_CTR0,

MSR_CORE_PERF_FIXED_CTR1,

@@ -494,6 +556,10 @@

rdmsrl(MSR_CORE_PERF_GLOBAL_STATUS, msr_content);

if ( !msr_content )

return 0;

+

+ if ( is_pmc_quirk )

+ handle_pmc_quirk(msr_content);

+

core2_vpmu_cxt->global_ovf_status |= msr_content;

msr_content = 0xC000000700000000 | ((1 << core2_get_pmc_count()) - 1);

wrmsrl(MSR_CORE_PERF_GLOBAL_OVF_CTRL, msr_content);

@@ -515,6 +581,7 @@

static void core2_vpmu_initialise(struct vcpu *v)

{

+ check_pmc_quirk();

}

static void core2_vpmu_destroy(struct vcpu *v)

--

Company details: http://ts.fujitsu.com/imprint.html

Attachment: vpmu_pmc_quirk-v2.patch
Description: Text Data

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
<Prev in Thread] Current Thread [Next in Thread>