From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933125AbbIYTRr (ORCPT ); Fri, 25 Sep 2015 15:17:47 -0400 Received: from mail-bl2on0100.outbound.protection.outlook.com ([65.55.169.100]:18688 "EHLO na01-bl2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S932955AbbIYTR2 (ORCPT ); Fri, 25 Sep 2015 15:17:28 -0400 Authentication-Results: spf=none (sender IP is 165.204.84.222) smtp.mailfrom=amd.com; kernel.org; dkim=none (message not signed) header.d=none;kernel.org; dmarc=permerror action=none header.from=amd.com; X-WSS-ID: 0NV8YWW-08-9FL-02 X-M-MSG: From: Aravind Gopalakrishnan To: , , , CC: , , Aravind Gopalakrishnan Subject: [PATCH V2 3/3] RAS, mce_amd_inj: Inject errors on NBC for bank 4 errors Date: Fri, 25 Sep 2015 09:20:51 -0500 Message-ID: <1443190851-2172-4-git-send-email-Aravind.Gopalakrishnan@amd.com> X-Mailer: git-send-email 2.4.0 In-Reply-To: <1443190851-2172-1-git-send-email-Aravind.Gopalakrishnan@amd.com> References: <1443190851-2172-1-git-send-email-Aravind.Gopalakrishnan@amd.com> MIME-Version: 1.0 Content-Type: text/plain X-EOPAttributedMessage: 0 X-Forefront-Antispam-Report: CIP:165.204.84.222;CTRY:US;IPV:NLI;EFV:NLI;SFV:NSPM;SFS:(10009020)(6009001)(2980300002)(428002)(199003)(189002)(62966003)(46102003)(87936001)(97736004)(64706001)(106466001)(50226001)(101416001)(86362001)(5001920100001)(92566002)(77156002)(77096005)(68736005)(2201001)(2950100001)(5003940100001)(11100500001)(5003600100002)(105586002)(19580395003)(4001540100001)(50986999)(50466002)(47776003)(19580405001)(189998001)(5007970100001)(5001830100001)(36756003)(48376002)(5001860100001)(229853001)(53416004)(76176999)(5001770100001);DIR:OUT;SFP:1101;SCL:1;SRVR:DM3PR12MB0859;H:atltwp02.amd.com;FPR:;SPF:None;PTR:InfoDomainNonexistent;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;DM3PR12MB0859;2:t+2lcZKBNBnGY8vNyBY6IouLFWatcKkVae1Jjjlxv3bU3eqHo9AYiNI6nK7FjzeMqFUHqLkcQ+73IxPveW4dWA5/U9hxjzcZ20t8gvx0BpKIAuz3axHYtY4xveMbB+zwLIPsDCuHcLQ3U3rTi59/i1tvoCah6BtNJ7kjstaySWo=;3:wTP+TDO5gSNBJnsbOjBMkYNF3n21JccBrKoL3WCjeusPg16D8uRom6ntFmZ73dQGYkUqBIaDsPcNU00urUH0meHVT9enNanQonbYq51Df0iwlv4c97RAGAW28P3axolTcsWKRXbLqZSGPxJTMH70q6wex9uDOWHhOgi1EHFD1CtM+/y8QTfXKJo1rfq1DY7P1G62g0DOlyWX1tzJoJ07yBjyxdbwD0bYWkh/11teYxJue1rO+w0+6+Q3ujuC2coF;25:TZ/2o4IRndMbQ3d/gY40s3XpnogZI4bAJz4RafpBeKwsXYlogcc1gjl41mSE6YYeGkbn5CWOoIlj6yPx/taHL5EYrM7txTITcmFI6+WnWnlxUupdXuwEpOUpGcWmAitjEqXZKWvBsjT3ch+IU3Q+dGTIfP2s5ZKtRywvbAdsmY+8KGVCnKi0aBXCfr77E7HWoTSgTOOk6AddsrIKl9kYqcvnlczpxNpkr8ZN87qpokIx9eqNGJ+zMsYpz1dA7cJaPmJzpS7Qp8xF5RV7QTdGvQ== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:DM3PR12MB0859; X-Microsoft-Exchange-Diagnostics: 1;DM3PR12MB0859;20:Lbm+e/yRs2IHHRERc0Dvc5I8zg4lrfmA+N79ECEtK2Jn2qQw4xfsU65niUYn8tfjMyduaAm0sv+f1jSsErosErGbaqQ6L4sS5QTNIA79tGqo677t0ZQx2gCX0y86wcaybrEjpORIVf1FNKDHpBWqBBMPJIx3iAXAynz2atr0MG1+qtso7DbN6haVwhdMaNaRbRr/74Srz7MQ7aWC8Xbi27kOdoPZ5jzPlYlbCzPaEQLp07l+JXVni2G3EgO1+3BSldb8j9M2VtOlpEOrgicaYCmdKaLaO7D0SzXh/V0UPNNHXy8dnieL7SMhXOLtul+qxqczdoFuYzXC3J9rBmUszUoTEd16PsZNmEESB1/kYm1gJNd3mo/bLU3lMHrRcS30v7ZpBQM3+Dgp+tHi/PZuh0srJ6iluD9jelhqMBo654jcRVsbh/y+sTbQ9ywp/D2LMVQ9y5Q9XrIvUpmwN7vhRfT9wSCv1l2WSNI6q1SemTYniE9veDv+B8dDf9u84upa;4:OajyPWwNmOT1M2kRceJmEInubf9GtbHBliVumBluIt9D4HAPgzF3tMPWhgRsJMDXXOd0/SNZ63/rleNAW/hAo+99fPhdwgiSFCgtea+1ESmgC6TRWDHfqJU3LDaydHk8iJZd8n1oCLeRVbaW72adJcTD8gsiW8sRZVIxjCoTDwjseUJ/zohS/oIw9wBNbufeqy7vJWjJQvPs5dpXgP+L7aejJudAZWPjJZSTnpxfZgnUmhliz0hMIoRa+wfrV+6oFTKnc3Se9ExH10sBonrvEEbKBo+f6breDSoJkenGlwXUdl0d0fTVFvj0FuSrLTEGmezDO7wANaCFhM2ut9zPC9m+1ePxiOkFbwQBmlGtBis= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(2401047)(8121501046)(520078)(5005006)(3002001);SRVR:DM3PR12MB0859;BCL:0;PCL:0;RULEID:;SRVR:DM3PR12MB0859; X-Forefront-PRVS: 07106EF9B9 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;DM3PR12MB0859;23:Q7yDa2VgYmiEPg9tRv5+qIUSdR+Ul2U8PliWMVKPM?= =?us-ascii?Q?0UZSCjl0ecPx9RsI2jaSbaXhULeyYgAYicMZL7GJuXLNSNkJKJI7cyjw201F?= =?us-ascii?Q?KOJ1VUZiMRrZBi8Wsn+uM6qv5jVZpzxgZD9HIK3QhPpIYJPNQRN2zaPI1RO3?= =?us-ascii?Q?3BdxY9qrXOxQ/aUU90ws8ubhNNdTtzBwjB0N626efJ2jjlgPIKBKMUWSs3lg?= =?us-ascii?Q?jCUC172e1QDfhSvBs9IHBeSp2NaaoF8xOBSADV707rDpv4HHAOFZ9y90ss+L?= =?us-ascii?Q?4KH/eP4i9z9B48WavFqpgET4Rs7k85XvGFnrmOzczaciEn01jJuUjfvHJke7?= =?us-ascii?Q?kPwz0JqXMxNzXIylettpg9XVZnzca18HvY91pKs6KYxq16pVwrAkZSQbQ9Sx?= =?us-ascii?Q?2406pv8HJASJkXnpKuJki4x9Q/Fv6ryOyYGGeo1tJ07hZGYUAfBFhAjHMEX7?= =?us-ascii?Q?8tMl8KsidMtQgkZwEvyahIv4H5Cuuqh2/m99K9ArX1vf2yCUtrNa2r9HbMpI?= =?us-ascii?Q?eZ2YHHx5TxUaQ/pAmVUahRq7ZkF9FdWgHfAF953dSqchHHIvKBY3mnCWOiG5?= =?us-ascii?Q?bHjlszd/onQ1GOb46Z6QctFiAeAU5wD8zpbkHr4U/mcYFcEJS+ZA5pgFdCWn?= =?us-ascii?Q?+dGP9exJNeyL1tju6IzF9ttIgrRLOGMnvyKoE49sCpl/EWJYEDMdnELMMESJ?= =?us-ascii?Q?QkUpG6tsb8xf7N+ldtz53Z9TwghCEvshsuG3RNXkc97aJo7kjZQHVTiEnOv3?= =?us-ascii?Q?XmwZbyiGxbd4mOV5OEXfk4IkWTxsRv01p3v3rLSG0mLPH43OdKG0Z86YvKrd?= =?us-ascii?Q?NgZoXuQ6x+DC3Ok17H3KVctmp3QcZeLGJzyGfZmHJhn23uG/3WiQ/GEl60g7?= =?us-ascii?Q?gGaxpWDuUfPVHE+wmSGmwaotLWn6yVyAkVFwPHxYEOI3s6wbvlTeibq7sIZy?= =?us-ascii?Q?UfJPNUqCKhaYtM26OfjHUPtN78Ow+1Zf2s493RXdyty4KMmKYcBW9Lrpo5GS?= =?us-ascii?Q?5VK1pUdK+kl42aIWv4u/q25Uh6LHySErb/mK+/M/nv/i3dMV1RinbGwAlRgQ?= =?us-ascii?Q?TI6tALqhSS3Ll1ROosfn0gzAVsznITxzE+HAS3p0W9+qPIZvIqKwmpMa+Nhw?= =?us-ascii?Q?cQQxyYI+sU1r0urHMlt27HNT4y53U4c?= X-Microsoft-Exchange-Diagnostics: 1;DM3PR12MB0859;5:n23RkeZRDeI2N58za1aLVNInY63uRwtORKkFw9n8n1KNkbT6F6s6QQqI1r+f2GDt20FlLnCqyWMSdZiXjwIml9n7LU2IipG4OiPO7xUVfWJaXwoNFLdjW2QzRtIre5nIH//j9NtdVoXQk/6CsgW3zA==;24:iA7i2SVWcvdfwiOdYZ/UZiiN0FTRIdJ3b9FH7yc8qoPnDafmN8GER7Yjzp40BKrAljvvh7maGhULgAFlf6678Qrpp6VrFmJu9qf6p+nCnjs=;20:OMKU3H6mXT6jdcRzW/9mtC+auuxHaNvkeX5zpt+neYP0cAZAZWGu1jTBCcysKOac87f2I+EQHWPKC8Cedd3qYw== SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Sep 2015 19:17:25.4301 (UTC) X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.222];Helo=[atltwp02.amd.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM3PR12MB0859 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Bank 4 MCEs are logged and reported only on the node base core (NBC) in a socket. Refer to the D18F3x44[NbMcaToMstCpuEn] field in Fam10h and later BKDGs. The node base core (NBC) is the lowest numbered core in the node. This patch ensures that we inject the error on the NBC for bank 4 errors. Otherwise, triggering #MC or APIC interrupts on a core which is not the NBC would not have any effect on the system, i.e we would not see any relevant output on kernel logs for the error we just injected. Signed-off-by: Aravind Gopalakrishnan --- arch/x86/ras/mce_amd_inj.c | 56 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/arch/x86/ras/mce_amd_inj.c b/arch/x86/ras/mce_amd_inj.c index 794ca1f..42ab672 100644 --- a/arch/x86/ras/mce_amd_inj.c +++ b/arch/x86/ras/mce_amd_inj.c @@ -17,7 +17,9 @@ #include #include #include +#include #include +#include #include "../kernel/cpu/mcheck/mce-internal.h" @@ -30,6 +32,7 @@ static struct dentry *dfs_inj; static u8 n_banks; #define MAX_FLAG_OPT_SIZE 3 +#define NBCFG 0x44 enum injection_type { SW_INJ = 0, /* SW injection, simply decode the error */ @@ -196,6 +199,45 @@ static void trigger_thr_int(void *info) asm volatile("int %0" :: "i" (THRESHOLD_APIC_VECTOR)); } +static u32 get_nbc_for_node(int node_id) +{ + struct cpuinfo_x86 *c = &boot_cpu_data; + u32 cores_per_node; + + cores_per_node = c->x86_max_cores / amd_get_nodes_per_socket(); + + return cores_per_node * node_id; +} + +static void toggle_nb_mca_mst_cpu(u16 nid) +{ + struct pci_dev *F3 = node_to_amd_nb(nid)->misc; + u32 val; + int err; + + if (!F3) + return; + + err = pci_read_config_dword(F3, NBCFG, &val); + if (err) { + pr_err("%s: Error reading F%dx%03x.\n", + __func__, PCI_FUNC(F3->devfn), NBCFG); + return; + } + + if (val & BIT(27)) + return; + + pr_err("%s: Set D18F3x44[NbMcaToMstCpuEn] which BIOS hasn't done.\n", + __func__); + + val |= BIT(27); + err = pci_write_config_dword(F3, NBCFG, val); + if (err) + pr_err("%s: Error writing F%dx%03x.\n", + __func__, PCI_FUNC(F3->devfn), NBCFG); +} + static void do_inject(void) { u64 mcg_status = 0; @@ -230,6 +272,20 @@ static void do_inject(void) i_mce.status |= (i_mce.status & ~MCI_STATUS_UC); } + /* + * For multi node CPUs, logging and reporting of bank 4 errors happens + * only on the node base core. Refer to D18F3x44[NbMcaToMstCpuEn] for + * Fam10h and later BKDGs. + */ + if (static_cpu_has(X86_FEATURE_AMD_DCM) && b == 4) { + /* + * BIOS sets D18F3x44[NbMcaToMstCpuEn] by default. But make + * sure of it here just in case. + */ + toggle_nb_mca_mst_cpu(amd_get_nb_id(cpu)); + cpu = get_nbc_for_node(amd_get_nb_id(cpu)); + } + get_online_cpus(); if (!cpu_online(cpu)) goto err; -- 2.4.0