From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S936225AbdCVTaG (ORCPT ); Wed, 22 Mar 2017 15:30:06 -0400 Received: from mail-sn1nam02on0081.outbound.protection.outlook.com ([104.47.36.81]:42469 "EHLO NAM02-SN1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S936188AbdCVT3n (ORCPT ); Wed, 22 Mar 2017 15:29:43 -0400 Authentication-Results: vger.kernel.org; dkim=none (message not signed) header.d=none;vger.kernel.org; dmarc=none action=none header.from=amd.com; From: Yazen Ghannam To: CC: Yazen Ghannam , Tony Luck , Borislav Petkov , , Subject: [PATCH 1/2] x86/mce/AMD: Redo use of SMCA MCA_DE{STAT,ADDR} registers Date: Wed, 22 Mar 2017 14:29:30 -0500 Message-ID: <1490210971-62346-1-git-send-email-Yazen.Ghannam@amd.com> X-Mailer: git-send-email 2.7.4 MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [165.204.77.1] X-ClientProxiedBy: CY4PR19CA0034.namprd19.prod.outlook.com (10.172.173.148) To BN6PR1201MB0131.namprd12.prod.outlook.com (10.174.114.144) X-MS-Office365-Filtering-Correlation-Id: 941e991d-54f2-4bf0-a895-08d47159c977 X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(48565401081);SRVR:BN6PR1201MB0131; X-Microsoft-Exchange-Diagnostics: 1;BN6PR1201MB0131;3:waMq/A0PAZSyszpq9GVWg8dK23c/LAZsnycvico5kS/latvDCm4HDYM6bGGnJPckGc1vIu/d2XVCuNL9/nZwZwY0Nrc47yxYQvU01uxocz3VZ/T5VnwTsNKGrXMNnjooRI4FY9z1PDD9d1dXta/gDh0s8g08S2kEjYl8kiiIyZ8YD5gEnYjnVFQRW19H/JmpOIQEW9cPJ1giFG7JZceFpJ0CoW0Qd4lydsozaJzUPJi6GlYQrftCPtV/Os3OeFlSR4QWisryhZzk69BYOGB1B/0RCEpR0+bJ0Kx139Hj6tI=;25:IqWValtUwguh5NrK26SkYm434ZBClc4gbRnRT8gLylqMYBtt2puRt+V8tjqaOMMeIeAhtc2UjMq9RaRQQlxY6673soVagl5esKkYew57QFnqYQXvfu4v0M9g7CIVI0Od2t9BHkED6YFvV5GstHh6R1+fokQ3rbuHTjgwFXVu16Bgn86GIZneM4vNQhRipJVX1Bi+a/ZX/AcbnQPSsc9v3cFjVjAF0LnnghzqdNAf3168JHT3X3LZqQBTz65GgFsNF1U4vyJ5jW1A8dEEWNc6rH35XEnI/vZsSeGzU3hRjaBLLyq1W+paybD4jWikc6jLnNERvFdJdA2DeEJyALHUMVtrbXsfkcvi+us7wT93A1uf2U9b6akEm8gCq67FuWsoEXCodXL6DKJKZcpPKImBH7azySbnT+kGeKO0TflxieztBTpNrVJo7vS9ct/suAchtvlLYpcd/eDI/FrGLd5URA== X-Microsoft-Exchange-Diagnostics: 1;BN6PR1201MB0131;31:dxvZi4AwR5ZC+7PMefRFHR9ezv9LVXSfa+iv+sqIRFsl6Pbfa66yU8USMczhQ3RRV5louv7rlI77+/Yf+w2lGCcph62aJe3cfPuLzc44CODWB0R4LGL+/D6pwlqA1eRtSRaxkgd4b6jiUX3HekT//OSlQgpNVbFa4zfjq3anksYbYXBJ7eph8u9SEl62pjlNP5BsqDG2d/J4XyZR36LHE+Y3yux+/NcX54AONJwsTyo=;20:jgzDwRzgUtwjzYe0lHxfz6YtXHtAgh0+fy+WNPmUU1TCaxylppBLvTzRxLC/KgyTOX4OOe9Wj5S8tC6cQhgeHBxKSQnok3cY3Mgwlj2jwdKRgAeYWJF2Uqrd9Cauzxi/7oj9Rqc2jF9K3tutKUOZl8yBt79tS1T/jsA59jw2pSMBDIWfWoThjpBkEQGQw90xmmrU4BhOxmIWSW2eaD1DKMzOQBOxu42VIHVHaoQzcQU/4HCod8Bscb6qSmoeqRbb+TOJrZbzF/8S/Bg+RdejjJVeFbMoVZRHVHeMHMc4h6aJoLqtuU0frUuI1DHXZrygVWoXl6caCEtbLZsY3Wy9vWV1DzjtPTcV7dh9OlAyiKBLJAfjmXvBo1kvrCiWIy9csww66J9bPckwPhVRykB044O0tr8bu6m65rBCgHRBrVVur1sgY9l2L8/I4CnVE5wyByJO3lGhKAau7ZTYXhYwN0wucfZzmKo2JnPuI81ZYiScM/OgvmKgzRqoKonuB8mq X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(767451399110); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040375)(601004)(2401047)(8121501046)(5005006)(3002001)(10201501046)(6055026)(6041248)(20161123558025)(20161123562025)(20161123560025)(20161123564025)(20161123555025)(6072148);SRVR:BN6PR1201MB0131;BCL:0;PCL:0;RULEID:;SRVR:BN6PR1201MB0131; X-Microsoft-Exchange-Diagnostics: 1;BN6PR1201MB0131;4:lViltO8tpGkz/si6/8le3O+F4uNtRc8eMiwDzPnEvm0UcgKKxwmFo+jWdNYrVrvw/TwBFfi7tcDLsz2yPK/LRIhI3MobROXd1rdPcJJakwWgW9nHcYBsHjyJk8XN/NdgIpK2dxZCcihzoCuL1mkWy7TC5drLleYsYHWE9zA7CIbFJTXPqxcYb+64j3yXWAudf8AD0tvhrx89A78y8nj5hNzxuBxVPhbfNUGi8hvHruX9gtCeEuIBWHaFA9cD5oyRvtJh9fW3/DwphN8+8aSoNaVjdA+6/OVFP76Hg+24z6wJV9AoQFhOl6T+NvEyj+/3zI0hEYnfmTNndBkB2F3FEOlXwIufq3N4spxlApGCluoBNPez2AN2z01rwtWcS3r23DzuuXKBb/VGwGk8OALnBpi/sn6P/tasMMGPNY1AK0Y0v9hzuBdvYmX0NN/kS2QIHpOEWjqnOsbg0+m+jqcMJvAgCedC5tI/cVYLmUqLP5dlYe3xiNPxotjQmJZUyuSsSikE3I2bfHxMZdR3iedE5k6QWNX4bJEKCwzB01xeWq0G3TI08ZweIZkHubefOAqwHnq9tyYMHJ2vUB7Q1O6vxB/i7taQYQZLRnO1HT1wF/Lhkm17tNNUPMlxqr8Ow2KRPco9iCNdnxjgC2SoRFGlF08Uu/Xl/+t8yyQBKnbQvSI= X-Forefront-PRVS: 02543CD7CD X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(4630300001)(6009001)(39850400002)(39410400002)(39840400002)(39860400002)(39450400003)(48376002)(6116002)(53416004)(50226002)(86362001)(6486002)(81166006)(66066001)(3846002)(25786009)(6666003)(6916009)(8676002)(47776003)(2906002)(305945005)(2351001)(50986999)(50466002)(54906002)(5660300001)(36756003)(5003940100001)(42186005)(53936002)(110136004)(7736002)(4326008)(189998001)(38730400002)(142933001);DIR:OUT;SFP:1101;SCL:1;SRVR:BN6PR1201MB0131;H:yaz-diesel.amd.com;FPR:;SPF:None;MLV:sfv;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;BN6PR1201MB0131;23:n2eheSlitWmKeRjhLfcIvZP9/udbHKsxZXa7P1p?= =?us-ascii?Q?b67wJppU928/Q91EU1D42Hh8AcPJkcuf6Elh0Wi0twlQgyQdSAjGHOlcTPHm?= =?us-ascii?Q?ZfC1q1WGBiFaDcJ/5OdTkWGvLFRYZxbqceGbXJhmpfFuEZiyWNOTQclz/w8R?= =?us-ascii?Q?2Lv57ggOMVWLd9Yf59VMqXBZrWjpSso3slTwpDnvenBcPnHWv67HpbEscMoE?= =?us-ascii?Q?F3nYkI8xA8xfrkgQSEx98YET3whDe1z7mXUPXMDtpQlZz8tvUeUsk/eUZDmm?= =?us-ascii?Q?uO0DpsyPJqTxgzfBuglBP48Lu+7bJBHoYRJj82b6Y6in7Bn1IIrvSY2UxSak?= =?us-ascii?Q?+7SItXs7j8aCHTaAtOpVGqG0XSBvgnvVZ3H9txNDbohRqBh26d2JUF4BIgCn?= =?us-ascii?Q?zpYi6rDVq4LLLv1TobH0zSEYw70/6Ab5owuhZ2zq8jTJX3Z2KG2qmtM3xuyp?= =?us-ascii?Q?6DpPFg09QN3C75Bp/STQUj3vsgyBN6qy/UTsmOJ9TB+H+KTrVIlIBMWCdgFM?= =?us-ascii?Q?DoUpfnzdc49p0T+yn6R5SX2qDZGIO4iAuTgw4jfVdPU2ondxWZRp2ALLA6h+?= =?us-ascii?Q?aODmhNbF5iDBiM7+zNcWrvy3dZQwwnLqmd5MdG8sm5PnVB3/ovHunGCOO9cv?= =?us-ascii?Q?qM8Xi7XyQArgWzTV0ENBFFoQXso4I39oXGyNEBkxCrRFnBXCdZMnnV2l3/GD?= =?us-ascii?Q?eGcrOurJcebLfo6k0S1REi/DJ3nmXG8KC0tDH6T+rZzXDwvUxplW75qPp6dc?= =?us-ascii?Q?JjM1rxHUjqMBliJASN4ZdaDQhs1hCCP0dHKZzKGTXtTQcJ0TIO5VbKADz64n?= =?us-ascii?Q?v4tl4ywggs6oSMlyzREkRV68d/6paY5vh+Vgw1kohDuCB8MAeIaCRXJe5xo2?= =?us-ascii?Q?M08zEsPQ1dn8fiPNsoOsST2vRKQiQRWC5munXYozxBbMyy4htPcU4Ahbgxmu?= =?us-ascii?Q?TAPhG15zvmE7bRQUe1vRktr9Sf9BpkJ8LtXoW6gMdgHq4RFRbO4Yjx/dJNbT?= =?us-ascii?Q?7FnQ=3D?= X-Microsoft-Exchange-Diagnostics: 1;BN6PR1201MB0131;6:dl+65W84kLBtJ4m1GiBzgZKA6xkUbKpRsfRCtbjSfKS6mKBr/K6YSCR2odOrKAaMOGWjp8PhSR3QhhAdmtWyEP9QhKLop9MpekNHSv2zzmNXktgC2pJXnu0RJitMueI/64Xcnf7fPWuEtwMaaKKbB1KInXsxpDAos/kKBNEuSMlLsaz4YxQfQUFnf6/rMhfgDRGePDEvOKRVkkkM02FBpxgnI/Wqy2n5wQOJN6rUPZupvVuHbQ9SrDFR87BOj6ODulMDBGY3uuZybNSwTMpKCi01zRJtiTdIfXZYTcZW++BvfIrEPg1/JBY8U948N3iosAmRnHA6KDYHh5MfG72X3T16UrD8JC3eTfapD1C8JYZO5sIO030zo9NKCMa1Tgkjg4eJ179hNiL4a6MAXoiNGdL5mQ6WT7mQDI96fCz2sg0=;5:CmJ9r9psR0zrSdWLkjbT4PbrG8ij5V69rICM/JNTH6aSwR2P76iYo04CKqnevpEM92XyD4Cllq1cFusDdquYTRSydy1Yd2vetMWbx3ctmb5bUo9K5BnjUL/Ja2+B260RVQmGBCoSfChbZ6KR5H5IiQ==;24:0oMZ3OvE/9Lxmr1Bt4JVKebAjGW0nB4A/UTHSJVlkDqtuP4B4gXa17fT1FjiyUR41v1FWqzw3hN3DxpvtL3XDrbhaYl0JPocm/RkJ2c0NC0= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;BN6PR1201MB0131;7:i1o7rfFvDlrnGnb+vUNPVB59nzhGFvLfnk5w4c1M5lHkPPZI6XmUNX/SW4Uy1UIfI8IcbUgPSOVhVZ1QZHDYfMcWtyCXCCvyv7UtSwyAwb5DJhmrEXp7bnHU4+q7/yKA/SJT8ohlB2ONb8qJ5s8NGSJwIcqKhMbrJKS2JH7StvkDsXQNAGg4JCf0wAO+EJO0n+DKuIy73lVOtN2g9c7Dl9u4oZGyNHxFTOfZXhQHX3y/Styoqo8Hk9oelfdpDaMbcnmjB+BgmBbNPw1hKaXFnxqH7SZi33jTasfywZfqhZZL7wUqKO/1dBdkdSYa6Uj5so4Q11kpKMj1DNVV/7mfqQ==;20:XaaKdabwa/IjxnSy3jdIsvX0wRu5rcb78exF0S2z/Ka6oDYrQsncHDUr3At3sjYUU78KZ8BbEQxtm/CdLf4OzMmQKSRZEEPFib1Vo397tE08pKmJ5TNJNIdimrdDu0B1zwnVFnDhVCytA2o5ElcT+YlR61H8D62uLsS0SVhJdMpnUXPACZQ/rJt9PklFMwATQphtvd3so5UJ2QBghW3B1G3fWPoEromjifkT5eaEc1MZSsqDOEmfZSMpwY8o0w46 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Mar 2017 19:29:40.5077 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN6PR1201MB0131 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Yazen Ghannam We have support for the new SMCA MCA_DE{STAT,ADDR} registers in Linux. So we've used these registers in place of MCA_{STATUS,ADDR} on SMCA systems. However, the guidance for current implementations of SMCA is to continue using MCA_{STATUS,ADDR} and to use MCA_DE{STAT,ADDR} only if a Deferred error was not found in the former registers. This also means we shouldn't clear MCA_CONFIG[LogDeferredInMcaStat]. Redo the AMD Deferred error interrupt handler to follow the guidance for current SMCA systems. Also, don't break after finding the first error. Don't clear MCA_CONFIG[LogDeferredInMcaStat] during AMD mcheck init. Signed-off-by: Yazen Ghannam --- arch/x86/kernel/cpu/mcheck/mce_amd.c | 47 ++++++++++++++++-------------------- 1 file changed, 21 insertions(+), 26 deletions(-) diff --git a/arch/x86/kernel/cpu/mcheck/mce_amd.c b/arch/x86/kernel/cpu/mcheck/mce_amd.c index 524cc57..4e459e0 100644 --- a/arch/x86/kernel/cpu/mcheck/mce_amd.c +++ b/arch/x86/kernel/cpu/mcheck/mce_amd.c @@ -472,20 +472,6 @@ prepare_threshold_block(unsigned int bank, unsigned int block, u32 addr, smca_high |= BIT(0); /* - * SMCA logs Deferred Error information in MCA_DE{STAT,ADDR} - * registers with the option of additionally logging to - * MCA_{STATUS,ADDR} if MCA_CONFIG[LogDeferredInMcaStat] is set. - * - * This bit is usually set by BIOS to retain the old behavior - * for OSes that don't use the new registers. Linux supports the - * new registers so let's disable that additional logging here. - * - * MCA_CONFIG[LogDeferredInMcaStat] is bit 34 (bit 2 in the high - * portion of the MSR). - */ - smca_high &= ~BIT(2); - - /* * SMCA sets the Deferred Error Interrupt type per bank. * * MCA_CONFIG[DeferredIntTypeSupported] is bit 5, and tells us @@ -756,7 +742,8 @@ int umc_normaddr_to_sysaddr(u64 norm_addr, u16 nid, u8 umc, u64 *sys_addr) EXPORT_SYMBOL_GPL(umc_normaddr_to_sysaddr); static void -__log_error(unsigned int bank, bool deferred_err, bool threshold_err, u64 misc) +__log_error(unsigned int bank, bool deferred_err, bool use_smca_destat, + bool threshold_err, u64 misc) { u32 msr_status = msr_ops.status(bank); u32 msr_addr = msr_ops.addr(bank); @@ -765,7 +752,7 @@ __log_error(unsigned int bank, bool deferred_err, bool threshold_err, u64 misc) WARN_ON_ONCE(deferred_err && threshold_err); - if (deferred_err && mce_flags.smca) { + if (deferred_err && use_smca_destat) { msr_status = MSR_AMD64_SMCA_MCx_DESTAT(bank); msr_addr = MSR_AMD64_SMCA_MCx_DEADDR(bank); } @@ -807,6 +794,10 @@ __log_error(unsigned int bank, bool deferred_err, bool threshold_err, u64 misc) mce_log(&m); + /* We should still clear MCA_DESTAT even if we used MCA_STATUS. */ + if (mce_flags.smca && !use_smca_destat) + wrmsrl(MSR_AMD64_SMCA_MCx_DESTAT(bank), 0); + wrmsrl(msr_status, 0); } @@ -832,25 +823,29 @@ asmlinkage __visible void __irq_entry smp_trace_deferred_error_interrupt(void) exiting_ack_irq(); } +static inline bool check_deferred_status(u64 status) +{ + return ((status & MCI_STATUS_VAL) && (status & MCI_STATUS_DEFERRED)); +} + /* APIC interrupt handler for deferred errors */ static void amd_deferred_error_interrupt(void) { unsigned int bank; - u32 msr_status; u64 status; for (bank = 0; bank < mca_cfg.banks; ++bank) { - msr_status = (mce_flags.smca) ? MSR_AMD64_SMCA_MCx_DESTAT(bank) - : msr_ops.status(bank); + rdmsrl(msr_ops.status(bank), status); - rdmsrl(msr_status, status); + if (check_deferred_status(status)) { + __log_error(bank, true, false, false, 0); - if (!(status & MCI_STATUS_VAL) || - !(status & MCI_STATUS_DEFERRED)) - continue; + } else if (mce_flags.smca) { + rdmsrl(MSR_AMD64_SMCA_MCx_DESTAT(bank), status); - __log_error(bank, true, false, 0); - break; + if (check_deferred_status(status)) + __log_error(bank, true, true, false, 0); + } } } @@ -904,7 +899,7 @@ static void amd_threshold_interrupt(void) return; log: - __log_error(bank, false, true, ((u64)high << 32) | low); + __log_error(bank, false, false, true, ((u64)high << 32) | low); /* Reset threshold block after logging error. */ memset(&tr, 0, sizeof(tr)); -- 2.7.4