From nobody Thu Apr 25 16:45:12 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass(p=reject dis=none) header.from=citrix.com ARC-Seal: i=1; a=rsa-sha256; t=1637346113; cv=none; d=zohomail.com; s=zohoarc; b=m34ymFtek+/B52eLHNZBqB13VdUwwwv7Ozf2Fp8Md9HNX0eP6da3wcAOrhwb7CuTJ9ef64ejYm867aJjd+UGGLPuMbbPFc6tq/obWwuLHp8zE2bK1z0U7vqCBuegWrZu/jyDKuVwnykUqkA7+EA+QZ1I6w6PiCLEkDzdwu3Z7Bc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1637346113; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=t6p6UdbN6MQBmdcfdCP5on7EwJYT5poSefJwshcIFHo=; b=m93Wx5P1t5OsqkyFPRG12/X4A5+yvNhCPky8VGOCzFvXUw4HXiz+VIol9GUOH93Fs4iw/sKgvo7rkBMFfoWTe0jISRPq4vlYJmQQC6D075WOgY1gqlMdU1DY3D+lHTGPFLubswcmQ/hQX7cF3Hj0cvZAv4/adwhzf4PyJ49lTDw= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1637346113089124.55591933873222; Fri, 19 Nov 2021 10:21:53 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.228179.394773 (Exim 4.92) (envelope-from ) id 1mo8Vv-00030S-8G; Fri, 19 Nov 2021 18:21:31 +0000 Received: by outflank-mailman (output) from mailman id 228179.394773; Fri, 19 Nov 2021 18:21:31 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1mo8Vv-0002wC-40; Fri, 19 Nov 2021 18:21:31 +0000 Received: by outflank-mailman (input) for mailman id 228179; Fri, 19 Nov 2021 18:21:30 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1mo8Vu-0002lj-DY for xen-devel@lists.xenproject.org; Fri, 19 Nov 2021 18:21:30 +0000 Received: from esa6.hc3370-68.iphmx.com (esa6.hc3370-68.iphmx.com [216.71.155.175]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 819f2f5b-4965-11ec-9787-a32c541c8605; Fri, 19 Nov 2021 19:21:27 +0100 (CET) X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 819f2f5b-4965-11ec-9787-a32c541c8605 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=citrix.com; s=securemail; t=1637346087; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=e6Vpp1nFGSlUEaNAYW2skTKEUq4i4p9h+155eMsODFw=; b=esSrIo9w4eSbYEd+HkSCaNrS03/Rvh80XkTMIw1YS3lcywBNCLX2YCZG 6Utrnu/en3MYMb6sNothiMhAo9qku7RGA5BZpbY0RElq7ScYZA1hQzaDF I2fq4g/h6SrTj0oguqYq4YCLc+f/5btCr0ulns+kg5H3kiJwyiMwG4qNQ s=; Authentication-Results: esa6.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none IronPort-SDR: eD/0pI9T+NW7zY5q+V3UeGmeC2/CofjBgRM0hFDsMkZFfS51lFi57VTFYBAS88+7OtecbD027R PbGEafFWYxClsqu2wKWlY7vHNT2bIG9cAMDGybsEOFazTsR1SpzAHJeEkkiKOg178yG73TBS54 aLWmvvkYVhO6KoyZIi6SHxd3yKprX9xw3mc3/Qk2MHsQsFY+rZ/HvERBcy4LgA7l6ydDB7Iesw dLzm6HXGf4RSnOEnFYHPoRdhDNeEUTrLrpOiLnETlT4dQSV1+XYYduTxE2nV5LY4vr4aSpo35U GTSmsOc+lLFyLrU8vfb6KNrf X-SBRS: 5.1 X-MesageID: 58204891 X-Ironport-Server: esa6.hc3370-68.iphmx.com X-Remote-IP: 162.221.156.83 X-Policy: $RELAYED IronPort-Data: A9a23:xHHOxqBXMMqsDBVW/+Tkw5YqxClBgxIJ4kV8jS/XYbTApD900jQHy jBMXW6Pa/6ONGejKtlzOdu0/EkHscXdyN5jQQY4rX1jcSlH+JHPbTi7wuYcHM8wwunrFh8PA xA2M4GYRCwMo/u1Si6FatANl1ElvU2zbue6WLGs1hxZH1c+EX540EM7wYbVv6Yz6TSHK1LV0 T/Ni5W31G+Ng1aY5UpNtspvADs21BjDkGtwUm4WPJinj3eH/5UhN7oNJLnZEpfNatI88thW5 Qr05OrREmvxp3/BAz4++1rxWhVirrX6ZWBihpfKMkQLb9crSiEai84G2PQghUh/tXapr9BP8 cx0v4WrcFt2BJPHwepeekwNe81+FfUuFL7vJHG+tYqYzlHccmuqyPJrZK00FdRGoKAtWzgIr KFGbmBWBvyAr7veLLaTY+9gnMk8auLsO5sSoCpIxjDFF/c2B5vERs0m4PcFjG1o2pAfRJ4yY eI8UhdNUCqDPCRBFUkMBbY4wOL4pEvgJmgwRFW9+vNsvjm7IBZK+KfpGMrYfJqNX8o9tmSyq 3/C/m/5KgoHL9HZwj2Amlq8i+mKkS7lVYY6ELyj6uUskFCV3nYUChAdSR28u/bRt6Klc4sBc QpOoHNo9PVsshzwJjXgY/GmiEDHni4cZeNJKucj8zjRlZDq6F+XRUFRG1atd+canMMxQDUr0 HqAkNXoGSFjvdWpdJ6NyluHhWjsYHZIdAfucQdBFFJYuIe7/OnfmzqWFo47eJNZmOEZDt0ZL 9qiiCElz4segscQv0lQ1QCW2mn8znQlo+Nc2+k2Yo5Hxl8mDGJGT9bxgbQ+0RqmBNzEJrVml CJa8/VyFMhUUfmweNWlGY3h5o2B6fefKyH7ilVyBZQn/DnF0yf9Jt8KvmkvdBo0YppsldrVj Kn74145CHh7ZiXCUEOKS9jpV5RCIVbIS7wJqcw4nvIRO8MsJWdrDQllZFKK3nCFraTfufpXB HtvSu71VSxyIf0+lFKeHr5BuZd2lnFW7T6CHvjTkkX4uYdykVbIEN/pxnPVNbtnhE5FyS2Im +ti2zyil08CDbagO3aPqub+7zkidBAGOHw/kOQPHsbrH+asMDtJ5yb5zexzdop7sb5Sk+uUr HixVlUBkAj0hGHdKBXMYXdmMeu9UZF6pHM9HCotIVf3hCRzPdfxtP8SJ8ktYL0q1O1/1vooH fMLTNqNX6ZUQTPd9jVDMZSk9N5+dA6mjB6lNja+ZGRtZIZpQgHEo4e2fgbm+CQUIDCwsM8y/ ++p2g/BGMJRTAV+FsfGLvmoygrp73QanetzWWrOI8VSJxqwoNQ7dXSpg6Zucc8WKBjFyj+L7 CqsAE8V9bvXvos40NjVnqTY/Y2nJPRzQxhBFG7B4LfoaSSDpji/wZVNWfqjdCzGUD+m472rY OhYwq2uMPADm1oW4YNwH6wykPA77trr4bRb0h5lDDPAaFHyUuFsJXyP3M9usKxRx+AG5VvqC xzXotQKa6+UPM7FEUIKIFt3Z+uO4vgYhz3O4KlnO079/iJ2oOKKXEg608NgU8CBwG+Z6L8Y/ No= IronPort-HdrOrdr: A9a23:HqkgkK+vrsK11f3Y3mBuk+DgI+orL9Y04lQ7vn2YSXRuHPBw8P re5cjztCWE7gr5N0tBpTntAsW9qDbnhPtICOoqTNCftWvdyQiVxehZhOOIqVDd8m/Fh4pgPM 9bAtBD4bbLbGSS4/yU3ODBKadD/OW6 X-IronPort-AV: E=Sophos;i="5.87,248,1631592000"; d="scan'208";a="58204891" From: Andrew Cooper To: Xen-devel CC: Andrew Cooper , Jan Beulich , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= , Wei Liu Subject: [PATCH 1/5] x86/traps: Collect PERFC_exceptions stats for IST vectors too Date: Fri, 19 Nov 2021 18:21:02 +0000 Message-ID: <20211119182106.14868-2-andrew.cooper3@citrix.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20211119182106.14868-1-andrew.cooper3@citrix.com> References: <20211119182106.14868-1-andrew.cooper3@citrix.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @citrix.com) X-ZM-MESSAGEID: 1637346114498100002 This causes NMIs, #DB and #MC to be counted, rather than being reported as = 0. Signed-off-by: Andrew Cooper Reviewed-by: Jan Beulich --- CC: Jan Beulich CC: Roger Pau Monn=C3=A9 CC: Wei Liu --- xen/arch/x86/x86_64/entry.S | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/xen/arch/x86/x86_64/entry.S b/xen/arch/x86/x86_64/entry.S index d5998acf8806..3caa5654768d 100644 --- a/xen/arch/x86/x86_64/entry.S +++ b/xen/arch/x86/x86_64/entry.S @@ -1005,6 +1005,13 @@ handle_ist_exception: #endif movq %rsp,%rdi movzbl UREGS_entry_vector(%rsp),%eax + +#ifdef CONFIG_PERF_COUNTERS + lea per_cpu__perfcounters(%rip), %rcx + add STACK_CPUINFO_FIELD(per_cpu_offset)(%r14), %rcx + incl ASM_PERFC_exceptions * 4(%rcx, %rax, 4) +#endif + leaq exception_table(%rip),%rdx mov (%rdx, %rax, 8), %rdx INDIRECT_CALL %rdx --=20 2.11.0 From nobody Thu Apr 25 16:45:12 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass(p=reject dis=none) header.from=citrix.com ARC-Seal: i=1; a=rsa-sha256; t=1637346116; cv=none; d=zohomail.com; s=zohoarc; b=OOioIRJhzGFogrqo0fP3w0x32lAyDKMRdMmFfcwM3Yh2sj8lP9zyy7vnQ7r7M5eSbwVTEA5RyJSv7oKNUJoLBKm9F2nMlqJb2TeS2XlO7Ri67C6e4daAoxBVBvDEsHXgVEG5MK3rkfF27rq3TuuAMtz0qjpGZ315AhgmGBVV5bA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1637346116; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=6P2OggBF8f9l0pGhn+W8NstUtfPqCi9brJPIIiVFvJ8=; b=KVB7qlWuSJGfywycPD5gB+O9oGxAml3ILcFw/GDt7icwi6GEcA5k7rGAxrkUTuy4XyyEBqu8d0pJL+wXKIfeZ67rRU/Q3Qu+mxUaHPN9U2DyMHfkpHJ0krk7y9Yw2C5V/avF3C3povFhenb8mYePYikGdzYZimJN9JcG8RcIrFM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 163734611656940.8729542325907; Fri, 19 Nov 2021 10:21:56 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.228178.394765 (Exim 4.92) (envelope-from ) id 1mo8Vu-0002oC-Oz; Fri, 19 Nov 2021 18:21:30 +0000 Received: by outflank-mailman (output) from mailman id 228178.394765; Fri, 19 Nov 2021 18:21:30 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1mo8Vu-0002nj-IJ; Fri, 19 Nov 2021 18:21:30 +0000 Received: by outflank-mailman (input) for mailman id 228178; Fri, 19 Nov 2021 18:21:29 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1mo8Vt-0002lj-LQ for xen-devel@lists.xenproject.org; Fri, 19 Nov 2021 18:21:29 +0000 Received: from esa4.hc3370-68.iphmx.com (esa4.hc3370-68.iphmx.com [216.71.155.144]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 81c4d2c8-4965-11ec-9787-a32c541c8605; Fri, 19 Nov 2021 19:21:27 +0100 (CET) X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 81c4d2c8-4965-11ec-9787-a32c541c8605 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=citrix.com; s=securemail; t=1637346088; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=+dvslWpq2dfj5scGr7oA/OvN7mfOaLRx99JYp6UlUt0=; b=ASo7co4OpfWUPvgKWoU4eFjTFfoMJnGuOQHo8GLLd3iZwQs/cDzBmqMc YxRX5dSsHlaX1uc/mYPiZ7PCPbK8eRLRlttw/GLyvpF4I7Ee8BjlpzDOb p6Qh0DUt8hiMyg3UuK4s+j0RZucBvo0Iv5sMIdejcmUKBczoqqHzpQ6yS 0=; Authentication-Results: esa4.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none IronPort-SDR: 72tG7BfDNzaA6XSRNe7cV1TNzkGOKMkND5NzQ9V2M9KwjjH4r0ODrXNHbHdPgz3h5/cZi2j1AO hg96kqKgmDaBsOl8ZRB4rAaH6nqklZTButmlrKsu/smNX+B3BA9ckuWl3UpxawAkna0wMvfNuV 1N1YDycTFX5ulbM5AWms2t5xInMhFUIsbUvDlt85rBCsXx1qGsGPGtc0s5Ba1zL5b8hp+Qml2t teTlEC79tgpr6i8evyYO8z5U+vR/Lfy1fmTx2sSLFQp2yz3EqSdpqDLXw9kkVlwtSFKQXue8m+ iRqsuvI3eq4EZAl1BxUq3DI+ X-SBRS: 5.1 X-MesageID: 60237326 X-Ironport-Server: esa4.hc3370-68.iphmx.com X-Remote-IP: 162.221.156.83 X-Policy: $RELAYED IronPort-Data: A9a23:ukfqI6lMinqNhevXEPxri9bo5gxMIURdPkR7XQ2eYbSJt1+Wr1Gzt xIXWz3XMqqPZjbzKI0iPtu2px4AupXRnYUwHAFtryAyFiMWpZLJC+rCIxarNUt+DCFioGGLT Sk6QoOdRCzhZiaE/n9BClVlxJVF/fngqoDUUYYoAQgsA187IMsdoUg7wbdg29c52YLR7z6l4 rseneWOYDdJ5BYsWo4kw/rrRMRH5amaVJsw5zTSVNgT1LPsvyB94KE3fMldG0DQUIhMdtNWc s6YpF2PEsE1yD92Yj+tuu6TnkTn2dc+NyDW4pZdc/DKbhSvOkXee0v0XRYRQR4/ttmHozx+4 NxThL+XThstB5SSlN8DFBd5QztBYbITrdcrIVDn2SCS50jPcn+qyPRyFkAme4Yf/46bA0kXq 6ZecmpUKEne2aTmm9pXScE17ignBODtMJkSpTdLyjbBAOx9aZvCX7/L9ZlT2zJYasVmQ66EP JVCM2QHgBLoQhRIBnYbA6sFkMyHmGLjI20IjHCWuv9ii4TU5FMoi+W8WDbPQfSVQe1Fk0Deo XjJl0zbKBwHMN2UyRKe72mhwOTImEvTSI8UUbG16PNuqFmS3XAITg0bU0Ohpvu0gVL4XMhQQ 3H44QJ38/J0rhbyCICgAVvo+xZooyLwRfJZDdwZzwaRzpPtvQqiGC8Kb25bV4A54ZpeqSMR6 neFmNbgBDpKubKTSG6A+rr8kQ5eKRT5PkdZO3ZaEFJtD83L5dhq00mRFooL/Lud14WtQVnNL ya2QD/Sbln5peoCzO2F8F/OmFpATbCZH1dutm07so9Ihz6VhbJJhaT0tjA3Dt4ade51q2VtW lBexqByC8hUU/mweNSlGrllIV1Qz6/t3MfgqVBuBYI90D+m5mSue4tdiBknehw2aJhcKG+0P R+P0e+02HO1FCH3BUOQS9jvY/nGMIC6TYi1PhwqRoQmjmdNmP+vo3g1OB/4M5HFm0kwi6AvU ap3gu73ZUv2/Z9PlWLsL89EiOdD7nlnmQv7GMCqpzz6gOH2TCPEFt843K6mM7lRAFWs+16Or b6y9qKiln1ibQEJSnWNrNNIcwlVdSNT6FKfg5U/S9Nv6zFOQAkJY8I9C5t4E2C8t6gKxOrO4 F+nXUpUlAj2iXHdcF3YYXF/crL/G514qCtjbyArOF+p3VklYJqus/hDJ8dmI+F/+bwx1+NwQ tkEZ96EXqZFRAPY9mlPdpL6toFjKkim3FrcIyq/bTEjVJd8XAiVqMT8dw7i+XBWXCq6vMczu ZO60QbfTcZRTghuFp+OOvmu00mwrT4Wn+crBxnEJdxaeUPN9ol2KnOu0q9rcp9UcRian2mUz QebBxsctNLhmY5t/Ymbn72AoqeoD/B6QhhQEV7E4OvkLiLd5Gein9NNCb7aYTDHWWro06y+f uEJnerkOfgKkVsW4YpxF7FnkfA369f1/uIIyw1lGDPAbkixC6MmKX6DhJEduqpIz75fmA23R kPQpYUKZeTXYJvoQAwLOQ4oTuWfzvVFyDDd4MM8LFj++CIqrqGMVl9fPkXUhSFQRFev3FjJH Qv1VBYq1jGC IronPort-HdrOrdr: A9a23:oNTa2atlWoWcSGTg5N50Q4lK7skDTtV00zEX/kB9WHVpmszxra 6TdZMgpGbJYVcqKRcdcL+7WJVoLUmxyXcx2/h1AV7AZniAhILLFvAA0WKK+VSJcEeSygce79 YFT0EXMqyJMbEQt6fHCWeDfOrIuOP3kpyVuQ== X-IronPort-AV: E=Sophos;i="5.87,248,1631592000"; d="scan'208";a="60237326" From: Andrew Cooper To: Xen-devel CC: Andrew Cooper , Jan Beulich , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= , Wei Liu Subject: [PATCH 2/5] x86/traps: Drop dummy_nmi_callback() Date: Fri, 19 Nov 2021 18:21:03 +0000 Message-ID: <20211119182106.14868-3-andrew.cooper3@citrix.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20211119182106.14868-1-andrew.cooper3@citrix.com> References: <20211119182106.14868-1-andrew.cooper3@citrix.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @citrix.com) X-ZM-MESSAGEID: 1637346116815100009 The unconditional nmi_callback() call in do_nmi() calls dummy_nmi_callback() in all cases other than for a few specific and rare tasks (alternative patching, microcode loading, etc). Indirect calls are expensive under retpoline, so rearrange the logic to use NULL as the default, and skip the call entirely in the common case. While rearranging the code, fold the exit paths. Signed-off-by: Andrew Cooper Reviewed-by: Jan Beulich --- CC: Jan Beulich CC: Roger Pau Monn=C3=A9 CC: Wei Liu --- xen/arch/x86/traps.c | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/xen/arch/x86/traps.c b/xen/arch/x86/traps.c index d483aa91f2f1..f526298e997d 100644 --- a/xen/arch/x86/traps.c +++ b/xen/arch/x86/traps.c @@ -1872,29 +1872,23 @@ static void unknown_nmi_error(const struct cpu_user= _regs *regs, } } =20 -static int dummy_nmi_callback(const struct cpu_user_regs *regs, int cpu) -{ - return 0; -} - -static nmi_callback_t *nmi_callback =3D dummy_nmi_callback; +static nmi_callback_t *__read_mostly nmi_callback; =20 DEFINE_PER_CPU(unsigned int, nmi_count); =20 void do_nmi(const struct cpu_user_regs *regs) { unsigned int cpu =3D smp_processor_id(); + nmi_callback_t *callback; unsigned char reason =3D 0; bool handle_unknown =3D false; =20 this_cpu(nmi_count)++; nmi_enter(); =20 - if ( nmi_callback(regs, cpu) ) - { - nmi_exit(); - return; - } + callback =3D ACCESS_ONCE(nmi_callback); + if ( unlikely(callback) && callback(regs, cpu) ) + goto out; =20 /* * Accessing port 0x61 may trap to SMM which has been actually @@ -1921,6 +1915,7 @@ void do_nmi(const struct cpu_user_regs *regs) unknown_nmi_error(regs, reason); } =20 + out: nmi_exit(); } =20 @@ -1935,7 +1930,7 @@ nmi_callback_t *set_nmi_callback(nmi_callback_t *call= back) =20 void unset_nmi_callback(void) { - nmi_callback =3D dummy_nmi_callback; + nmi_callback =3D NULL; } =20 bool nmi_check_continuation(void) --=20 2.11.0 From nobody Thu Apr 25 16:45:12 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass(p=reject dis=none) header.from=citrix.com ARC-Seal: i=1; a=rsa-sha256; t=1637346113; cv=none; d=zohomail.com; s=zohoarc; b=TPeqWNG0/xTleDodEVOwXnF/z3agNDnTpq4f4cYdzNQPzGI9lMqhTiZx7pM14HKIdNNJbITMJPjLZQlXa6PVrJ0CsndQh7hJdBhdQThPMOBJkhcTJVAlVOJXY+aBaNpVZq8gXzCgetPhDdQmzVwXO0s+Vpe8BWdSEC9hxhLgLtA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1637346113; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=9KpmtlLTBSuxTfM1km4O4HR8x32ZndeS23njum2ca4M=; b=Ux9re/63kIIuCaBJyCbo/pbA6dFDmQ4DXP5GzZc2dm+df2c3TKLikh3AjjQTi0HdVMRoSAGx64nB7Hyye/rvp7PHj5v3Dc05hMJtn/0ovcNtLN3ddGLYEwmf1B7kDbHLPYjEbajCrkJ8oJYZnJ6OgLeiFEWWu6uvFQ1xO6RyPhQ= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1637346113157248.0837158889094; Fri, 19 Nov 2021 10:21:53 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.228177.394760 (Exim 4.92) (envelope-from ) id 1mo8Vu-0002m1-Cj; Fri, 19 Nov 2021 18:21:30 +0000 Received: by outflank-mailman (output) from mailman id 228177.394760; Fri, 19 Nov 2021 18:21:30 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1mo8Vu-0002lu-9o; Fri, 19 Nov 2021 18:21:30 +0000 Received: by outflank-mailman (input) for mailman id 228177; Fri, 19 Nov 2021 18:21:29 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1mo8Vt-0002li-J0 for xen-devel@lists.xenproject.org; Fri, 19 Nov 2021 18:21:29 +0000 Received: from esa1.hc3370-68.iphmx.com (esa1.hc3370-68.iphmx.com [216.71.145.142]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 822ecc3b-4965-11ec-a9d2-d9f7a1cc8784; Fri, 19 Nov 2021 19:21:28 +0100 (CET) X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 822ecc3b-4965-11ec-a9d2-d9f7a1cc8784 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=citrix.com; s=securemail; t=1637346088; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=4Tg1fkG/MNuvf6uaxrexDrCfGCJ7J9q3adQ48ksJAfI=; b=bCWByRz6/6eHompw/ii0YOFF/cCES2g0uw349hrqqEXXlDZ3k6fzMdP2 4PdUCQg9+hSni/qAJG21vKve/0LazRPe4NCxDksZim+c2QKlCx57TPJS1 sDoI6MfJYdleB2EBV+CyxI7K+Upp2IiLU0OD0FNP12H60oAEoGQykbn9X 8=; Authentication-Results: esa1.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none IronPort-SDR: 3VmWMg947YzY5kGf8XYQZf/XKFc6Yv/pXErvBuuwuw+HHSSsSEWlwOy+YkNFj8Io4O3wEC5I9x dmu+KgOFndklA3HHPwllgBill/nYupb39JDrMlNFZpf2BwT0UvvHBQySSt8hHp+uMi0J6DD8hS VRr4qPA5gx/xe7sJVKLQxl+Uaqi7ae99/glGw6OQJSvWzqEr3vj1oJ7aSvw4TUVA/qI9vHmbUR JhQ25fBRHLVz30mA4jFYrqFaKxH3YeUIw8/s5jnqr9izymuH26lxui3mZVv+2OGMV1ajK3Hkob 2fs96KQPPR5uxlks824/ZUCT X-SBRS: 5.1 X-MesageID: 58632249 X-Ironport-Server: esa1.hc3370-68.iphmx.com X-Remote-IP: 162.221.156.83 X-Policy: $RELAYED IronPort-Data: A9a23:lHmXsa9PN6Le/c0TirBiDrUDTXmTJUtcMsCJ2f8bNWPcYEJGY0x3z mtLDGGEOvbYNzCgL9t+bN+38kJQvJWGz4JqQFForSs8E34SpcT7XtnIdU2Y0wF+jyHgoOCLy +1EN7Es+ehtFie0Si9AttENlFEkvU2ybuOU5NXsZ2YhGmeIdA970Ug6wrdg09Yy6TSEK1jlV e3a8pW31GCNg1aYAkpMg05UgEoy1BhakGpwUm0WPZinjneH/5UmJMt3yZWKB2n5WuFp8tuSH I4v+l0bElTxpH/BAvv9+lryn9ZjrrT6ZWBigVIOM0Sub4QrSoXfHc/XOdJFAXq7hQllkPhz2 dJOksOrbzsYfZzsmu4PFEkJNQtXaPguFL/veRBTsOSWxkzCNXDt3+9vHAc9OohwFuRfWD8Us 6ZCcXZUM07F17neLLGTE4GAguwKKsXxMZxZkXZn1TzDVt4tQIzZQrWM7thdtNs1rp0eQ62EP ZZIAdZpRD7KPyNXZm40NI59zMqBnXWnbBYAi03A8MLb5ECMlVcsgdABKuH9ZdiiVchT2EGCq Qru3U70HxUbP9y30iee/zSngeqntTP2XsceGaO18tZugUaP3SoDBRsOT1y5rPKlzEmkVLpix 1c8o3R06/JorQryE4e7D0bQTGO4UgA0WctXEMpl8yex++nlwwSTFC9UHxhrQYlz3CMpfgAC2 liMltLvIDVgtryJVH6QnoupQSOO1Ts9djFbO3JdJecRy5y6+dxo0EqTJjp2OPft1oWdJN3m/ 9ydQMHSbZ03hNVD6ai09Euvb9mE9smQFV5dCuk6swuYAuJFiGyNO9PABbvzt68owGOlor+p5 iVsdy+2tr5mMH11vHbRKNjh5Znwjxp/DBXSgER0A74q/Cm39niocOh4uW8lex03apdUJGK5P Cc/XD+9ArcJYRNGioctPeqM5zkCl/C8RbwJqNiKBjaxXnSBXFDep3w/DaJh92vsjFItgckC1 WSzKq6R4YIhIf0/llKeHr5FuZdyn3xW7T6DFPjTkkX8uZLDNSH9dFvwGAbXBgzPxPjf+1u9H hc2H5bi9iizp8WiOHSKqtBKcghRRZX5bLivw/Fqmie4ClIOMAkc5zX5kNvNoqRpwPZYkPnm5 Ha4VhMKwVbznySfew6LdmpiePXkWpMm9SA3OiklPFCJ3Xk/YNnwsPdDJsVvJbR3pvZ+yfNUT uUef5nSCPp4VTmaqS8WaoPwrdI+eU3z1x6OJSesfBM2Y4VkG17S4tbhcwa2rHsOAyO7uNEQu bql0g+HE5MPSx47VJTdae61zkP3tn8YwbogU0zNK9hVWUPt7Ik1dHCh0q5pe5kBcEyRyCGb2 gCaBQYjidPM+4JlosPUga2krpuyF7csFERtAGSGv629MjPX/zT/zNYYAvqIZz3USEj95L6mO bdO1/j5PfAKwARKvo57H+o5xK4y/YKy9bpTzwAiF3TXdVW7TLhnJyDej8VIs6RMwJ5fuBe3B R3TqoULZ+3RNZO3CkMVKSokcv+HhKMdlTTl5PgoJFn3uX1s972dXEQOZxSBhUSx9leu3F/JF Qv5hPMr1g== IronPort-HdrOrdr: A9a23:5+nQGaDmwKSu/DPlHemU55DYdb4zR+YMi2TC1yhKJyC9Ffbo7v xG/c5rsyMc5wxwZJhNo7y90ey7MBbhHP1OkO4s1NWZLWrbUQKTRekIh+bfKn/baknDH4ZmpN 9dmsNFaeEYY2IUsS+D2njbL+od X-IronPort-AV: E=Sophos;i="5.87,248,1631592000"; d="scan'208";a="58632249" From: Andrew Cooper To: Xen-devel CC: Andrew Cooper , Jan Beulich , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= , Wei Liu Subject: [PATCH 3/5] x86/crash: Drop manual hooking of exception_table[] Date: Fri, 19 Nov 2021 18:21:04 +0000 Message-ID: <20211119182106.14868-4-andrew.cooper3@citrix.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20211119182106.14868-1-andrew.cooper3@citrix.com> References: <20211119182106.14868-1-andrew.cooper3@citrix.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @citrix.com) X-ZM-MESSAGEID: 1637346114574100005 NMI hooking in the crash path has undergone several revisions since its introduction. What we have now is not sufficiently different from the regu= lar nmi_callback() mechanism to warrant special casing. Use set_nmi_callback() directly, and do away with patching a read-only data structure via a read-write alias. This also means that the vmx_vmexit_handler() can and should call do_nmi() directly, rather than indirecting through the exception table to pick up the crash path hook. Signed-off-by: Andrew Cooper Reviewed-by: Jan Beulich --- CC: Jan Beulich CC: Roger Pau Monn=C3=A9 CC: Wei Liu --- xen/arch/x86/crash.c | 15 ++------------- xen/arch/x86/hvm/vmx/vmx.c | 2 +- xen/arch/x86/traps.c | 5 +++++ 3 files changed, 8 insertions(+), 14 deletions(-) diff --git a/xen/arch/x86/crash.c b/xen/arch/x86/crash.c index 0611b4fb9b09..f6264946a681 100644 --- a/xen/arch/x86/crash.c +++ b/xen/arch/x86/crash.c @@ -36,10 +36,8 @@ static unsigned int crashing_cpu; static DEFINE_PER_CPU_READ_MOSTLY(bool, crash_save_done); =20 /* This becomes the NMI handler for non-crashing CPUs, when Xen is crashin= g. */ -static void noreturn do_nmi_crash(const struct cpu_user_regs *regs) +static int noreturn do_nmi_crash(const struct cpu_user_regs *regs, int cpu) { - unsigned int cpu =3D smp_processor_id(); - stac(); =20 /* nmi_shootdown_cpus() should ensure that this assertion is correct. = */ @@ -136,16 +134,7 @@ static void nmi_shootdown_cpus(void) SYS_DESC_irq_gate, 0, &trap_nop); set_ist(&idt_tables[cpu][TRAP_machine_check], IST_NONE); =20 - /* - * Ideally would be: - * exception_table[TRAP_nmi] =3D &do_nmi_crash; - * - * but the exception_table is read only. Access it via its directmap - * mappings. - */ - write_atomic((unsigned long *)__va(__pa(&exception_table[TRAP_nmi])), - (unsigned long)&do_nmi_crash); - + set_nmi_callback(do_nmi_crash); smp_send_nmi_allbutself(); =20 msecs =3D 1000; /* Wait at most a second for the other cpus to stop */ diff --git a/xen/arch/x86/hvm/vmx/vmx.c b/xen/arch/x86/hvm/vmx/vmx.c index d403e2d8060a..37c31c08b984 100644 --- a/xen/arch/x86/hvm/vmx/vmx.c +++ b/xen/arch/x86/hvm/vmx/vmx.c @@ -3887,7 +3887,7 @@ void vmx_vmexit_handler(struct cpu_user_regs *regs) ((intr_info & INTR_INFO_INTR_TYPE_MASK) =3D=3D MASK_INSR(X86_EVENTTYPE_NMI, INTR_INFO_INTR_TYPE_MASK)) ) { - exception_table[TRAP_nmi](regs); + do_nmi(regs); enable_nmis(); } break; diff --git a/xen/arch/x86/traps.c b/xen/arch/x86/traps.c index f526298e997d..096a411fdf94 100644 --- a/xen/arch/x86/traps.c +++ b/xen/arch/x86/traps.c @@ -1886,6 +1886,11 @@ void do_nmi(const struct cpu_user_regs *regs) this_cpu(nmi_count)++; nmi_enter(); =20 + /* + * Think carefully before putting any logic before this point. + * nmi_callback() might be the crash quiesce... + */ + callback =3D ACCESS_ONCE(nmi_callback); if ( unlikely(callback) && callback(regs, cpu) ) goto out; --=20 2.11.0 From nobody Thu Apr 25 16:45:12 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass(p=reject dis=none) header.from=citrix.com ARC-Seal: i=1; a=rsa-sha256; t=1637346114; cv=none; d=zohomail.com; s=zohoarc; b=e6WEFoUuTw0nNgWLOyhb5mfQAitxUaAPdd79GkOQdkNchAPT0ZWBvv2uDGzrR4Fi8wvbxkYhw9ucrx2ctc9r+uMK0AcPnlVXIq6dh1WULZrr2zb68gPEwbiXTYKWE91Ql1vt7oGDaXH0aSvgsk6AHmWI8zpX1vu2KWryRVYm27I= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1637346114; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=cInDaGXYv7AQCaQQ3BSV+aC2hFUFOhGxOJceBfBV5rE=; b=ge3/YDbKZsUNfcYugwtURbqMniZXzLEbO8EyxUP13M23aoaXnsgRGbNFH+vEU2mtiVN3UpUY7ZzLdIB7shcTjby6kAzWDDc6TtiqWkS3MRjC5s7KOGxuO521etYt+DQdKL1HM5NVRUiLtkjAk7pP+hd5vIsWwE9qhGKOhwfXFCI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1637346114067849.8431414081396; Fri, 19 Nov 2021 10:21:54 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.228182.394815 (Exim 4.92) (envelope-from ) id 1mo8Vy-00045y-Lu; Fri, 19 Nov 2021 18:21:34 +0000 Received: by outflank-mailman (output) from mailman id 228182.394815; Fri, 19 Nov 2021 18:21:34 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1mo8Vy-00045P-A8; Fri, 19 Nov 2021 18:21:34 +0000 Received: by outflank-mailman (input) for mailman id 228182; Fri, 19 Nov 2021 18:21:32 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1mo8Vw-0002lj-Di for xen-devel@lists.xenproject.org; Fri, 19 Nov 2021 18:21:32 +0000 Received: from esa6.hc3370-68.iphmx.com (esa6.hc3370-68.iphmx.com [216.71.155.175]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 83ae3c8b-4965-11ec-9787-a32c541c8605; Fri, 19 Nov 2021 19:21:29 +0100 (CET) X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 83ae3c8b-4965-11ec-9787-a32c541c8605 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=citrix.com; s=securemail; t=1637346089; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=7vzlAG4/8XA2/yA95Szl0X1Xge6hpLYeA3lSnn/oSps=; b=gan2s9ZlVMXkLV7ZI2jx709pcF1HqVW4TaF8Fz7vHJt//1bSyVT7SeiQ fmIbED+EV3tkMBGSYmkYH8w6tzP55nO5vqEeYtIQzK7XZhuKFzDFlRRA0 XLUScDQ8wcZ7IZat+UmrDGK4EjiJ/0bC7ENJHvP7+dfA1sP9+oT6g4JI8 g=; Authentication-Results: esa6.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none IronPort-SDR: SQRwZzHJffDlvilNT5NvYAsz3ZTjeh2Lt7ERYVPUXYlpOl96AEHLVzHBIkSMuJA+R9dUwsgg1f XbhAhKGgbImjPgzk+HTCgKhw4x5aO01IYEDWZiJeHP7vFKtiISRNH84ExsGNkeqgYSiN/1WS6a qRIXpgrakB/aKMvi+MlJZcsMBiSgN22Wz2BbTGsc8pM/t6/jI/7dXzdoJHHlpGa2bkhKaCj46/ jP8kJLTshKr5EDTOvCcUM9fEr4YN20FP2dqZ2myT/gdSDbWxQkJDXDL3CqNZBY5BVWc82BtoI8 CnIPbQGiO6/HllARb4Z97ukP X-SBRS: 5.1 X-MesageID: 58204893 X-Ironport-Server: esa6.hc3370-68.iphmx.com X-Remote-IP: 162.221.156.83 X-Policy: $RELAYED IronPort-Data: A9a23:4ubKA6k8IGSEpChbyCrb8Dno5gxMIURdPkR7XQ2eYbSJt1+Wr1Gzt xIdDz3TPaqNNmv0fdFyOY63pkxXusLTz9ZmQAdk/380RSMWpZLJC+rCIxarNUt+DCFioGGLT Sk6QoOdRCzhZiaE/n9BClVlxJVF/fngqoDUUYYoAQgsA187IMsdoUg7wbdg29c52YLR7z6l4 rseneWOYDdJ5BYsWo4kw/rrRMRH5amaVJsw5zTSVNgT1LPsvyB94KE3fMldG0DQUIhMdtNWc s6YpF2PEsE1yD92Yj+tuu6TnkTn2dc+NyDW4pZdc/DKbhSvOkXee0v0XRYRQR4/ttmHozx+4 OsOlaywdz4wB6fVg91BDCNmGHhwfoQTrdcrIVDn2SCS50jPcn+qyPRyFkAme4Yf/46bA0kXq 6ZecmpUKEne2aTmm9pXScE17ignBODtMJkSpTdLyjbBAOx9aZvCX7/L9ZlT2zJYasVmQKaEP 5ZJOGEHgBLobhd+GQtLGq4Hluq23UKhfiZahkifqv9ii4TU5FMoi+W8WDbPQfSVQe1Fk0Deo XjJl0zbKBwHMN2UyRKe72mhwOTImEvTSI8UUbG16PNuqFmS3XAITg0bU0Ohpvu0gVL4XMhQQ 3H44QJ38/J0rhbyCICgAVvo+xZooyLwRfJuUM0K6D+005Pe+h2gWjc+cDUYZp8P4ZpeqSMR6 neFmNbgBDpKubKTSG6A+rr8kQ5eKRT5PkdZO3ZaEFJtD83L5dhq00mRFooL/Lud14WtQVnNL ya2QD/Sbln5peoCzO2F8F/OmFpATbCZH1dutm07so9Ihz6VhbJJhaT0tjA3Dt4ade51q2VtW lBexqByC8hUU/mweNSlGrllIV1Qz6/t3MfgqVBuBYI90D+m5mSue4tdiBknehw2aJhcKG+0P R+P0e+02HO1FCH3BUOQS9jvY/nGMIC6TYi1PhwqRoQmjmdNmP+vo3g1OB/4M5HFm0kwi6AvU ap3gu73ZUv2/Z9PlWLsL89EiOdD7nlnmQv7GMCqpzz6gOH2TCPEFt843K6mM7lRAFWs+16Or b6y9qKiln1ibQEJSnWNrNNIcwlVdSNT6FKfg5U/S9Nv6zFOQAkJY8I9C5t7E2C8t6gKxOrO4 F+nXUpUlAj2iXHdcF3YYXF/crL/G514qCtjbyArOF+p3VklYJqus/hDJ8dmI+F/+bwx1+NwQ tkEZ96EXqZFRAPY9mlPdpL6toFjKkim3FrcIyq/bTEjVJd8XAiVqMT8dw7i+XBWXCq6vMczu ZO60QbfTcZRTghuFp+OOvmu00mwrT4Wn+crBxnEJdxaeUPN9ol2KnOu0q9rcp9UcRian2mUz QebBxsctNLhmY5t/Ymbn72AoqeoD/B6QhhQEV7E4OvkLiLd5Gein9NNCb7aYTDHWWro06y+f uEJnerkOfgKkVsW4YpxF7FnkfA369f1/uIIyw1lGDPAbkixC6MmKX6DhJEduqpIz75fmA23R kPQpYUKZeTXYJvoQAwLOQ4oTuWfzvVFyDDd4MM8LFj++CIqrqGMVl9fPkXUhSFQRFev3FjJH Qv1VBYq1jGC IronPort-HdrOrdr: A9a23:qOJJS61WLZPOYjWGPFz+ZwqjBIokLtp133Aq2lEZdPRUGvb3qy nIpoVj6faUskd2ZJhOo7C90cW7LU80sKQFhLX5Xo3SOzUO2lHYT72KhLGKq1aLdhEWtNQtsZ uIG5IOcOEYZmIasS+V2maF+q4bsbu6zJw= X-IronPort-AV: E=Sophos;i="5.87,248,1631592000"; d="scan'208";a="58204893" From: Andrew Cooper To: Xen-devel CC: Andrew Cooper , Jan Beulich , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= , Wei Liu Subject: [PATCH 4/5] x86/traps: Drop exception_table[] and use if/else dispatching Date: Fri, 19 Nov 2021 18:21:05 +0000 Message-ID: <20211119182106.14868-5-andrew.cooper3@citrix.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20211119182106.14868-1-andrew.cooper3@citrix.com> References: <20211119182106.14868-1-andrew.cooper3@citrix.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @citrix.com) X-ZM-MESSAGEID: 1637347017046100001 There is also a lot of redundancy in the table. 8 vectors head to do_trap(= ), 3 are handled in the IST logic, and that only leaves 7 others not heading to the do_reserved_trap() catch-all. This also removes the fragility that any accidental NULL entry in the table becomes a ticking timebomb. Function pointers are expensive under retpoline, and different vectors have wildly different frequences. Drop the indirect call, and use an if/else ch= ain instead, which is a code layout technique used by profile-guided optimsiati= on. Using Xen's own perfcounter infrastructure, we see the following frequences= of vectors measured from boot until I can SSH into dom0 and collect the stats: vec | CFL-R | Milan | Notes ----+---------+---------+ NMI | 345 | 3768 | Watchdog. Milan has many more CPUs. ----+---------+---------+ #PF | 1233234 | 2006441 | #GP | 90054 | 96193 | #UD | 848 | 851 | #NM | 0 | 132 | Per-vendor lazy vs eager FPU policy. #DB | 67 | 67 | No clue, but it's something in userspace. Bloat-o-meter (after some manual insertion of ELF metadata) reports: add/remove: 0/1 grow/shrink: 2/0 up/down: 102/-256 (-154) Function old new delta handle_exception_saved 148 226 +78 handle_ist_exception 453 477 +24 exception_table 256 - -256 showing that the if/else chains are less than half the size that exception_table[] was in the first place. As part of this change, make two other minor changes. do_reserved_trap() is renamed to do_unhandled_trap() because it is the catchall, and already cove= rs things that aren't reserved any more (#VE/#VC/#HV/#SX). Furthermore, don't forward #TS to guests. #TS is specifically for errors relating to the Task State Segment, which is a Xen-owned structure, not a guest-owned structure. Even in the 32bit days, we never let guests register their own Task State Segments. Signed-off-by: Andrew Cooper Acked-by: Jan Beulich --- CC: Jan Beulich CC: Roger Pau Monn=C3=A9 CC: Wei Liu Preliminary perf data says that there is no measurable difference with bti-thunk=3Djmp. bti-thunk=3Dlfence shows up to a 3% improvement, and bti-thunk=3Dretpoline is expected to have a better improvement still. --- xen/arch/x86/traps.c | 34 ++------------------- xen/arch/x86/x86_64/entry.S | 67 ++++++++++++++++++++++++++++++++++++-= ---- xen/include/asm-x86/processor.h | 3 -- 3 files changed, 62 insertions(+), 42 deletions(-) diff --git a/xen/arch/x86/traps.c b/xen/arch/x86/traps.c index 096a411fdf94..e82ab007abcf 100644 --- a/xen/arch/x86/traps.c +++ b/xen/arch/x86/traps.c @@ -135,36 +135,6 @@ const unsigned int nmi_cpu; #define stack_words_per_line 4 #define ESP_BEFORE_EXCEPTION(regs) ((unsigned long *)regs->rsp) =20 -static void do_trap(struct cpu_user_regs *regs); -static void do_reserved_trap(struct cpu_user_regs *regs); - -void (* const exception_table[TRAP_nr])(struct cpu_user_regs *regs) =3D { - [TRAP_divide_error] =3D do_trap, - [TRAP_debug] =3D do_debug, - [TRAP_nmi] =3D (void *)do_nmi, - [TRAP_int3] =3D do_int3, - [TRAP_overflow] =3D do_trap, - [TRAP_bounds] =3D do_trap, - [TRAP_invalid_op] =3D do_invalid_op, - [TRAP_no_device] =3D do_device_not_available, - [TRAP_double_fault] =3D do_reserved_trap, - [TRAP_copro_seg] =3D do_reserved_trap, - [TRAP_invalid_tss] =3D do_trap, - [TRAP_no_segment] =3D do_trap, - [TRAP_stack_error] =3D do_trap, - [TRAP_gp_fault] =3D do_general_protection, - [TRAP_page_fault] =3D do_page_fault, - [TRAP_spurious_int] =3D do_reserved_trap, - [TRAP_copro_error] =3D do_trap, - [TRAP_alignment_check] =3D do_trap, - [TRAP_machine_check] =3D (void *)do_machine_check, - [TRAP_simd_error] =3D do_trap, - [TRAP_virtualisation] =3D do_reserved_trap, - [X86_EXC_CP] =3D do_entry_CP, - [X86_EXC_CP + 1 ... - (ARRAY_SIZE(exception_table) - 1)] =3D do_reserved_trap, -}; - void show_code(const struct cpu_user_regs *regs) { unsigned char insns_before[8] =3D {}, insns_after[16] =3D {}; @@ -881,7 +851,7 @@ void fatal_trap(const struct cpu_user_regs *regs, bool = show_remote) (regs->eflags & X86_EFLAGS_IF) ? "" : " IN INTERRUPT CONTEXT"); } =20 -static void do_reserved_trap(struct cpu_user_regs *regs) +void do_unhandled_trap(struct cpu_user_regs *regs) { unsigned int trapnr =3D regs->entry_vector; =20 @@ -973,7 +943,7 @@ static bool extable_fixup(struct cpu_user_regs *regs, b= ool print) return true; } =20 -static void do_trap(struct cpu_user_regs *regs) +void do_trap(struct cpu_user_regs *regs) { unsigned int trapnr =3D regs->entry_vector; =20 diff --git a/xen/arch/x86/x86_64/entry.S b/xen/arch/x86/x86_64/entry.S index 3caa5654768d..3eaf0e67b2b9 100644 --- a/xen/arch/x86/x86_64/entry.S +++ b/xen/arch/x86/x86_64/entry.S @@ -773,14 +773,48 @@ handle_exception_saved: sti 1: movq %rsp,%rdi movzbl UREGS_entry_vector(%rsp),%eax - leaq exception_table(%rip),%rdx #ifdef CONFIG_PERF_COUNTERS lea per_cpu__perfcounters(%rip), %rcx add STACK_CPUINFO_FIELD(per_cpu_offset)(%r14), %rcx incl ASM_PERFC_exceptions * 4(%rcx, %rax, 4) #endif - mov (%rdx, %rax, 8), %rdx - INDIRECT_CALL %rdx + + /* + * Dispatch to appropriate C handlers. + * + * The logic is implemented as an if/else chain. DISPATCH() calls + * need be in frequency order for best performance. + */ +#define DISPATCH(vec, handler) \ + cmp $vec, %al; \ + jne .L_ ## vec ## _done; \ + call handler; \ + jmp .L_exn_dispatch_done; \ +.L_ ## vec ## _done: + + DISPATCH(X86_EXC_PF, do_page_fault) + DISPATCH(X86_EXC_GP, do_general_protection) + DISPATCH(X86_EXC_UD, do_invalid_op) + DISPATCH(X86_EXC_NM, do_device_not_available) + DISPATCH(X86_EXC_BP, do_int3) + + /* Logically "if ( (1 << vec) & MASK ) { do_trap(); }" */ + mov $(1 << X86_EXC_DE) | (1 << X86_EXC_OF) | (1 << X86_EXC_BR) |\ + (1 << X86_EXC_NP) | (1 << X86_EXC_SS) | (1 << X86_EXC_MF) |\ + (1 << X86_EXC_AC) | (1 << X86_EXC_XM), %edx + bt %eax, %edx + jnc .L_do_trap_done + call do_trap + jmp .L_exn_dispatch_done +.L_do_trap_done: + + DISPATCH(X86_EXC_CP, do_entry_CP) +#undef DISPATCH + + call do_unhandled_trap + BUG /* do_unhandled_trap() shouldn't return. */ + +.L_exn_dispatch_done: mov %r15, STACK_CPUINFO_FIELD(xen_cr3)(%r14) mov %r13b, STACK_CPUINFO_FIELD(use_pv_cr3)(%r14) #ifdef CONFIG_PV @@ -1012,9 +1046,28 @@ handle_ist_exception: incl ASM_PERFC_exceptions * 4(%rcx, %rax, 4) #endif =20 - leaq exception_table(%rip),%rdx - mov (%rdx, %rax, 8), %rdx - INDIRECT_CALL %rdx + /* + * Dispatch to appropriate C handlers. + * + * The logic is implemented as an if/else chain. DISPATCH() calls + * need be in frequency order for best performance. + */ +#define DISPATCH(vec, handler) \ + cmp $vec, %al; \ + jne .L_ ## vec ## _done; \ + call handler; \ + jmp .L_ist_dispatch_done; \ +.L_ ## vec ## _done: + + DISPATCH(X86_EXC_NMI, do_nmi) + DISPATCH(X86_EXC_DB, do_debug) + DISPATCH(X86_EXC_MC, do_machine_check) +#undef DISPATCH + + call do_unhandled_trap + BUG /* do_unhandled_trap() shouldn't return. */ + +.L_ist_dispatch_done: mov %r15, STACK_CPUINFO_FIELD(xen_cr3)(%r14) mov %bl, STACK_CPUINFO_FIELD(use_pv_cr3)(%r14) cmpb $TRAP_nmi,UREGS_entry_vector(%rsp) @@ -1088,7 +1141,7 @@ autogen_stubs: /* Automatically generated stubs. */ =20 entrypoint 1b =20 - /* Reserved exceptions, heading towards do_reserved_trap(). */ + /* Reserved exceptions, heading towards do_unhandled_trap(). */ .elseif vec =3D=3D X86_EXC_CSO || vec =3D=3D X86_EXC_SPV || \ vec =3D=3D X86_EXC_VE || (vec > X86_EXC_CP && vec < TRAP_= nr) =20 diff --git a/xen/include/asm-x86/processor.h b/xen/include/asm-x86/processo= r.h index bc4dc6925372..f031a050cba0 100644 --- a/xen/include/asm-x86/processor.h +++ b/xen/include/asm-x86/processor.h @@ -506,9 +506,6 @@ extern void mtrr_bp_init(void); =20 void mcheck_init(struct cpuinfo_x86 *c, bool_t bsp); =20 -/* Dispatch table for exceptions */ -extern void (* const exception_table[TRAP_nr])(struct cpu_user_regs *regs); - #define DECLARE_TRAP_HANDLER(_name) \ void _name(void); \ void do_ ## _name(struct cpu_user_regs *regs) --=20 2.11.0 From nobody Thu Apr 25 16:45:12 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass(p=reject dis=none) header.from=citrix.com ARC-Seal: i=1; a=rsa-sha256; t=1637346116; cv=none; d=zohomail.com; s=zohoarc; b=MpdHqlbEmHMDmVLDKm5G7owpQNSaC/ua4HESO7HZd7bZ9/Idk4Y90jva3QEtsXQoDwN7HiodwRkqD7WTuzdSq+EnRXbenSVMSbhZiHoQubco3gH52uCXxPaPmCKrAtgzIvEB+eJoidCYu2IU5d+T93SbDb/7fgXiq6qKmBw7krc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1637346116; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=7PtKQ+pilHnBiUVz5GvHSyNfW+mXhW5iq0Pdqn6hs/E=; b=KFv57b5as6InXq8jcipchKW28px3UJ/ynoB6znjxY3q4kzCc1avCtMc6wk7O4VRrIgnO3AXxCVsHqlGSav0X6+Qu2UAt7/xDkG6pbDEgZyVISRorh7EKfiZevtfUCnaeUynBmaOYek8i3obwiwqh9tcXF7nRH8fxmGgZEuB535o= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 163734611639393.30327832394391; Fri, 19 Nov 2021 10:21:56 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.228180.394781 (Exim 4.92) (envelope-from ) id 1mo8Vv-00036W-Lt; Fri, 19 Nov 2021 18:21:31 +0000 Received: by outflank-mailman (output) from mailman id 228180.394781; Fri, 19 Nov 2021 18:21:31 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1mo8Vv-00034V-EX; Fri, 19 Nov 2021 18:21:31 +0000 Received: by outflank-mailman (input) for mailman id 228180; Fri, 19 Nov 2021 18:21:30 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1mo8Vu-0002li-GO for xen-devel@lists.xenproject.org; Fri, 19 Nov 2021 18:21:30 +0000 Received: from esa1.hc3370-68.iphmx.com (esa1.hc3370-68.iphmx.com [216.71.145.142]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 83b28778-4965-11ec-a9d2-d9f7a1cc8784; Fri, 19 Nov 2021 19:21:29 +0100 (CET) X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 83b28778-4965-11ec-a9d2-d9f7a1cc8784 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=citrix.com; s=securemail; t=1637346089; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=oebDvExn3h5mZXwVNZR6XTnRXuwlDim+nPy+eMS01Lg=; b=VkzycAazMhCTwkI65PoYbauzlp5ulE/dFEQHlnrQzkkaRjy6YtmKvl00 tb/fWQgST5OG6zzP8S3ZgBBI6fRPoJdLab8nOxWksjDkrUBRnIbvKyGUK 88RWpFMaSdJPhnfREl+T/vVgMzklo2L4WpH6F+smUzr+Rcnft+Huoqelw s=; Authentication-Results: esa1.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none IronPort-SDR: jZf+f0pPJQRSo2c4Mz2E7Bj9mTPC3M1gwAObLxWEKg4jWn1MtQjj9rmotjgU7Frw7bXvsRvVwC PFLLCNQVDSokct9cvoFJxVY3q3ZIG8GSHXSBJ/+JDx1YsRZ66LCQuyQi00Qeu+VIaLlxFHNARN Kcs49bjDaCTLCB9R5P1bYjDS6/4eXjIDUD9jG6pN1CKLry6zCd+a/FxvWBl2paUXuMXl7wPKFy 2kiq7Q1MUwssEIAmWfhcVA1UVxLaPBJucyFGRmsdhvOJq7XurPe/0RazBlC7tbgtt6QLa0xWmi LKxXrjgIk1R+KIScHwc5thst X-SBRS: 5.1 X-MesageID: 58632251 X-Ironport-Server: esa1.hc3370-68.iphmx.com X-Remote-IP: 162.221.156.83 X-Policy: $RELAYED IronPort-Data: A9a23:ohHziaNSSJUTYHrvrR1pkMFynXyQoLVcMsEvi/4bfWQNrUoq3jdRy GAcXmCBM/qMZjegeNwnPoywpBxQsZWHz9RmGQto+SlhQUwRpJueD7x1DKtR0wB+jCHnZBg6h ynLQoCYdKjYdpJYz/uUGuCJQUNUjMlkfZKhTr6bUsxNbVU8En540Esyw7RRbrNA2rBVPSvc4 bsenOWHULOV82Yc3rU8sv/rRLtH5ZweiRtA1rAMTakjUGz2zhH5OKk3N6CpR0YUd6EPdgKMq 0Qv+5nilo/R109F5tpICd8XeGVSKlLZFVDmZna7x8FOK/WNz8A/+v9TCRYSVatYozeYmNNWl 85ria3zeCcrNL+LyLU7eTANRkmSPYUekFPGCX22sMjVxEzaaXr8hf5pCSnaP6VBpLwxWzsXs 6VFdnZdNXhvhMrvqF6/YsBqit4uM4/AO4QHt2s75TrYEewnUdbIRKCiCdpwgWdu3ZoUQK+2i 8wxbR9QZhP6QEF2HloaOcwak8jxp2iuSmgNwL6SjfVuuDWCpOBr65DyNPLFd9rMQt9a9m66j G/b+2XyAjkBKceSjzGC9xqEluLJ2C/2Ro8WPLm57eJxxk2ewHQJDx8bXkf9puO24nNSQPoGd RZSoHB36/Fvqgr7FbERQiFUvlaGrxkffIVLNdELqzCtyKDGpFbIIEItG2sphMMdiOc6Qjkj1 1msltzvBCByvLD9dU9x5ot4vhvpZ3FLcDZqiTssCFJcvoK9+N1bYgfnF447SMaIYsvJ9SYcK txghAw3nP0tgMECzM1XFniX0mv39vAlouPYjzg7v15JDCslO+ZJhKTysDA3CMqsyq7DEzFtW 1BexaCjABgmV83lqcB0aLxl8EuVz/iEKibAplVkAoMs8T+gk1b6I9sPum8mdRc0b5ZYEdMMX KM1kVkMjHO0FCH0BZKbnqrrU5h6pUQePYqNug/ogipmPcEqKV7vENBGbk+MxWH9+HXAYolkU ap3hf2EVC5AYYw+lWLeb75EjdcDm3BvrUuOFMuT50n2jtKjiIu9FO5t3K2mNbtisstpYWz9r r5iCid940kFDbClPHCIqdV7wJJjBSFTOK0aYvd/LoarSjeK0kl4U5c9GJstJN5ombp7jODN8 i3vU0NU0gOn13bGNR+LejZob7a2BcRzqncyPCoNO1e02id8PdbzvflHL5ZnL6M68OFDzOJvS 6VXccu3HfkSGC/M/C4QbMehodU6Jgirnw+HIwGsfCM7I8x7XwXM99K9Jlnv+SACAzCZr8w7p 7H8hArXTYBaH1ZpDdrMaeLpxFS05CBPlOV3VkrOA99SZESzr9Q6d32v1qc6epheJw/Cyz2W0 xetLS0Z/eSd8ZUo9NTphLyfq9v7GeVJAUcHTXLQ6qy7NHeG8zP7k5NASuuBYRvUSHjwpPe5f exQwvzxbK8HkVJNv9YuGrpn1/tjtd7mprscxQV4BnTbKV+sD+o4cHWB2MBOsIxLx6NY5lTqC h7epIECNOXbIt7hHX4QOBEhP7aK2vwjkzXP6eg4fRfh7yht8bvbCUhfMnFgUsCGwGeZ5G/9/ dochQ== IronPort-HdrOrdr: A9a23:zSaxeak4hzgM4y5HUGLiCNhV9+TpDfIU3DAbv31ZSRFFG/Fxl6 iV8sjzsiWE8Qr5OUtQ/+xoV5PhfZqxz/JICMwqTNKftWrdyQyVxeNZnOjfKlTbckWUnINgPO VbAsxD4bXLfCBHZK3BgTVQfexO/DD+ytHLudvj X-IronPort-AV: E=Sophos;i="5.87,248,1631592000"; d="scan'208";a="58632251" From: Andrew Cooper To: Xen-devel CC: Andrew Cooper , Jan Beulich , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= , Wei Liu Subject: [PATCH 5/5] x86/traps: Clean up diagnostics Date: Fri, 19 Nov 2021 18:21:06 +0000 Message-ID: <20211119182106.14868-6-andrew.cooper3@citrix.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20211119182106.14868-1-andrew.cooper3@citrix.com> References: <20211119182106.14868-1-andrew.cooper3@citrix.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @citrix.com) X-ZM-MESSAGEID: 1637346116838100010 do{_reserved,}_trap() should use fatal_trap() rather than opencoding part of it. This lets the remote stack trace logic work in more fatal error conditions. With do_trap() converted, there is only one single user of trapstr() remaining. Tweak the formatting in pv_inject_event(), and remove trapstr() entirely. Take the opportunity of exporting vec_name() to improve the diagnostics in stub_selftest(). Signed-off-by: Andrew Cooper Reviewed-by: Jan Beulich --- CC: Jan Beulich CC: Roger Pau Monn=C3=A9 CC: Wei Liu --- xen/arch/x86/extable.c | 8 +++++--- xen/arch/x86/pv/traps.c | 6 +++--- xen/arch/x86/traps.c | 25 +++---------------------- xen/include/asm-x86/traps.h | 2 +- 4 files changed, 12 insertions(+), 29 deletions(-) diff --git a/xen/arch/x86/extable.c b/xen/arch/x86/extable.c index 109ab7da9811..3cb0352abe5f 100644 --- a/xen/arch/x86/extable.c +++ b/xen/arch/x86/extable.c @@ -124,6 +124,8 @@ search_exception_table(const struct cpu_user_regs *regs) } =20 #ifndef NDEBUG +#include + static int __init stub_selftest(void) { static const struct { @@ -172,10 +174,10 @@ static int __init stub_selftest(void) if ( res.raw !=3D tests[i].res.raw ) { printk("Selftest %u failed: Opc %*ph " - "expected %u[%04x], got %u[%04x]\n", + "expected %s[%04x], got %s[%04x]\n", i, (int)ARRAY_SIZE(tests[i].opc), tests[i].opc, - tests[i].res.fields.trapnr, tests[i].res.fields.ec, - res.fields.trapnr, res.fields.ec); + vec_name(tests[i].res.fields.trapnr), tests[i].res.fiel= ds.ec, + vec_name(res.fields.trapnr), res.fields.ec); =20 fail =3D true; } diff --git a/xen/arch/x86/pv/traps.c b/xen/arch/x86/pv/traps.c index 1e05a9f1cdad..1d1cb0784c98 100644 --- a/xen/arch/x86/pv/traps.c +++ b/xen/arch/x86/pv/traps.c @@ -89,9 +89,9 @@ void pv_inject_event(const struct x86_event *event) =20 if ( unlikely(null_trap_bounce(curr, tb)) ) { - gprintk(XENLOG_WARNING, - "Unhandled %s fault/trap [#%d, ec=3D%04x]\n", - trapstr(vector), vector, error_code); + gprintk(XENLOG_ERR, + "Unhandled: vec %u, %s[%04x]\n", + vector, vec_name(vector), error_code); =20 if ( vector =3D=3D TRAP_page_fault ) show_page_walk(event->cr2); diff --git a/xen/arch/x86/traps.c b/xen/arch/x86/traps.c index e82ab007abcf..7a178f030c73 100644 --- a/xen/arch/x86/traps.c +++ b/xen/arch/x86/traps.c @@ -759,21 +759,7 @@ static int nmi_show_execution_state(const struct cpu_u= ser_regs *regs, int cpu) return 1; } =20 -const char *trapstr(unsigned int trapnr) -{ - static const char * const strings[] =3D { - "divide error", "debug", "nmi", "bkpt", "overflow", "bounds", - "invalid opcode", "device not available", "double fault", - "coprocessor segment", "invalid tss", "segment not found", - "stack error", "general protection fault", "page fault", - "spurious interrupt", "coprocessor error", "alignment check", - "machine check", "simd error", "virtualisation exception" - }; - - return trapnr < ARRAY_SIZE(strings) ? strings[trapnr] : "???"; -} - -static const char *vec_name(unsigned int vec) +const char *vec_name(unsigned int vec) { static const char names[][4] =3D { #define P(x) [X86_EXC_ ## x] =3D "#" #x @@ -858,9 +844,7 @@ void do_unhandled_trap(struct cpu_user_regs *regs) if ( debugger_trap_fatal(trapnr, regs) ) return; =20 - show_execution_state(regs); - panic("FATAL RESERVED TRAP: vec %u, %s[%04x]\n", - trapnr, vec_name(trapnr), regs->error_code); + fatal_trap(regs, false); } =20 static void fixup_exception_return(struct cpu_user_regs *regs, @@ -970,10 +954,7 @@ void do_trap(struct cpu_user_regs *regs) if ( debugger_trap_fatal(trapnr, regs) ) return; =20 - show_execution_state(regs); - panic("FATAL TRAP: vector =3D %d (%s)\n" - "[error_code=3D%04x]\n", - trapnr, trapstr(trapnr), regs->error_code); + fatal_trap(regs, false); } =20 int guest_rdmsr_xen(const struct vcpu *v, uint32_t idx, uint64_t *val) diff --git a/xen/include/asm-x86/traps.h b/xen/include/asm-x86/traps.h index ec23d3a70b36..3c5feac5e4b1 100644 --- a/xen/include/asm-x86/traps.h +++ b/xen/include/asm-x86/traps.h @@ -19,7 +19,7 @@ #ifndef ASM_TRAP_H #define ASM_TRAP_H =20 -const char *trapstr(unsigned int trapnr); +const char *vec_name(unsigned int vec); =20 #endif /* ASM_TRAP_H */ =20 --=20 2.11.0