From patchwork Mon May 22 14:31:05 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lino Sanfilippo X-Patchwork-Id: 13250695 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id A01CDC7EE23 for ; Mon, 22 May 2023 14:32:28 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229741AbjEVOc2 (ORCPT ); Mon, 22 May 2023 10:32:28 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56454 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231609AbjEVOc1 (ORCPT ); Mon, 22 May 2023 10:32:27 -0400 Received: from mout.gmx.net (mout.gmx.net [212.227.15.19]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1D9E19E; Mon, 22 May 2023 07:32:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.de; s=s31663417; t=1684765902; i=linosanfilippo@gmx.de; bh=23KmM5Vjp/r+0CEVZoYhx1NZ0LhMxpN04GBEUCeHBaA=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:In-Reply-To:References; b=Dotd6gRN0IZGqFv0g+0zOBKVgPxT9vZS7OwjQLeoqXusmJGOTOETnLkeT91QPpT3k 7/qLO6HpAoLMkkRogeeMO2zvQ1FglYnEUgQ5ZteuUvSTeJUa4LEtLG//U2qHsk2kHf F9ELFT3uoQIfTY5rJFpharCFXIkJsj9om3vlpFT4e5mQIAJdl28pYUKdfdW/tMuQ6l eyKFcDzJ7YSyngaCbWhD3+LgX/KOMSUFyRqS5+hWmvyqJbiiC4/jOLE/AmQgcDQisL /pEjFRcTh8MPiM/AQsDpUhCMjM716aBGKv4NFqFe4kPhPX5IbJLqdIk4MRr32i3FRa yYZouriZOBzHg== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from Venus.speedport.ip ([84.162.2.106]) by mail.gmx.net (mrgmx005 [212.227.17.190]) with ESMTPSA (Nemesis) id 1MQv8n-1po5rm4Akh-00Nxtb; Mon, 22 May 2023 16:31:42 +0200 From: Lino Sanfilippo To: peterhuewe@gmx.de, jarkko@kernel.org, jgg@ziepe.ca Cc: jsnitsel@redhat.com, hdegoede@redhat.com, oe-lkp@lists.linux.dev, lkp@intel.com, peter.ujfalusi@linux.intel.com, peterz@infradead.org, linux@mniewoehner.de, linux-integrity@vger.kernel.org, linux-kernel@vger.kernel.org, l.sanfilippo@kunbus.com, LinoSanfilippo@gmx.de, lukas@wunner.de, p.rosenberger@kunbus.com Subject: [PATCH 2/2] tpm, tpm_tis: reuse code in disable_interrupts() Date: Mon, 22 May 2023 16:31:05 +0200 Message-Id: <20230522143105.8617-2-LinoSanfilippo@gmx.de> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20230522143105.8617-1-LinoSanfilippo@gmx.de> References: <20230522143105.8617-1-LinoSanfilippo@gmx.de> MIME-Version: 1.0 X-Provags-ID: V03:K1:5nyh3VGLVlEBuWb2yLT46GgisZGdkKDMI/UWxmOTevTZoUkILFN 5DjVRTH5d5hzFJlQS1ULHkRfnneGFDdSoRfMOb9sjCydsrYvGujtZOf7CzvPzhA2Dsw7ClI tv/JxikT3Cc2tY4FE0yPx5A4RGHgOzn0BpRdvlsh2B2CDd27f6w8JP2uc0mW1qKWcL9l+VB gbNMTK1x9tr2Y43IxM3Aw== UI-OutboundReport: notjunk:1;M01:P0:PYvem97hXWc=;JEbL4U403GY4pF3llnOIcrIDa+1 eY9Xw3t0hyQtzqrQ0aeN028TNUfWO//NJBUDjgZwgYIllqk2ss0OGmUFKvGpOC+/5OXi18Bkp KFyfpTAaRrvvJj49qW4i9uCmYUx47xoSL0jIF4ZSXxUNSVdi5gBgj6GwGijSnEAyFMOq0WuvJ JkXMXyjBt5G2+Zx57TCHEFOFPDsyE+EJH4dHcUGCgKi5oN/rKMUzHiKs5jZDU4qwSFiMeFMjV mSUF+aWb7pzuyxSUpvKmnAjWF6JPqfzVrRVp/aU5tOuyHkSMYJrBthQ2hwEfaqHpyhrGv0lDa YPeX2fq6dqNcn8tnfIJRl+d/n5BzfHqqyHJ2Ks9g2rzKm1/BTeNaYvs+6elNC39HyJOVXiOcm ZNDwmbQaPMB1bI+36CpxeOKiVESlGkMK0kBfKp1r7KQDguZ4HTNIKusVr76svFarcREW+pOCi +M5BjY8A3RIyJ6ry3w3FwqI8i69sbMN4+EVzcBILasLEhOfwSEasqI4bXAQYFBlW4TyWCj9VB E+fPvk/cFxJvf0p6Qb9xrU5YoTkQwwO5zra2WWdd1VanFG4GHd53kprZtfPibpjgjvEfqsP+Q pYQTAi6COMA32lPhOOU43DtSeSNrGV5liSv+ds56D3XMlAhaC25lcQfs/nbM2lRMNAya+6lTP mYExtOafF0hKsSvpDWdMBQLS1Ee3TAmAtq4NBHNtJ1Ij29jeLAa/6KGEX5faVR7+JXASqqlPL ZHpMSbG+p8ZQ+Ask7wtue8iaqyCwFjf+W5U8q+Lfqtb0mtDnxRjWJTv6+CE300J7bJ2sAxVk7 AKyRB85fUGxikbuxWndZO3x5i41ACAPa6pn2MOheXHDCWix856MX13PtZ517FjaR9bISucqZo nEEDN/A3Sn2t6SMJdP4s1C+AFH2i46Ev3RUIhSU3tvEzhl0EUjY4rDTqkW29C2n3hMJ2lmR7+ tlAHQw== Precedence: bulk List-ID: X-Mailing-List: linux-integrity@vger.kernel.org From: Lino Sanfilippo Avoid code redundancy by shifting part of the code in disable_interrupts() into a subfunction and reusing this function in tpm_tis_handle_irq_storm(). Make sure that in the subfunction the INT_ENABLE register is written with a claimed locality even if the caller did not claim it before. In the shifted code get rid of the variable "rc" by initializing the interrupt mask to zero at variable declaration. Signed-off-by: Lino Sanfilippo Reviewed-by: Jerry Snitselaar Reviewed-by: Peter Ujfalusi --- drivers/char/tpm/tpm_tis_core.c | 36 ++++++++++++++++----------------- 1 file changed, 17 insertions(+), 19 deletions(-) diff --git a/drivers/char/tpm/tpm_tis_core.c b/drivers/char/tpm/tpm_tis_core.c index 458ebf8c2f16..8f4f2cb5520f 100644 --- a/drivers/char/tpm/tpm_tis_core.c +++ b/drivers/char/tpm/tpm_tis_core.c @@ -468,25 +468,32 @@ static int tpm_tis_send_data(struct tpm_chip *chip, const u8 *buf, size_t len) return rc; } +static void __tpm_tis_disable_interrupts(struct tpm_chip *chip) +{ + struct tpm_tis_data *priv = dev_get_drvdata(&chip->dev); + u32 intmask = 0; + + tpm_tis_read32(priv, TPM_INT_ENABLE(priv->locality), &intmask); + intmask &= ~TPM_GLOBAL_INT_ENABLE; + + tpm_tis_request_locality(chip, 0); + tpm_tis_write32(priv, TPM_INT_ENABLE(priv->locality), intmask); + tpm_tis_relinquish_locality(chip, 0); + + chip->flags &= ~TPM_CHIP_FLAG_IRQ; +} + static void disable_interrupts(struct tpm_chip *chip) { struct tpm_tis_data *priv = dev_get_drvdata(&chip->dev); - u32 intmask; - int rc; if (priv->irq == 0) return; - rc = tpm_tis_read32(priv, TPM_INT_ENABLE(priv->locality), &intmask); - if (rc < 0) - intmask = 0; - - intmask &= ~TPM_GLOBAL_INT_ENABLE; - rc = tpm_tis_write32(priv, TPM_INT_ENABLE(priv->locality), intmask); + __tpm_tis_disable_interrupts(chip); devm_free_irq(chip->dev.parent, priv->irq, chip); priv->irq = 0; - chip->flags &= ~TPM_CHIP_FLAG_IRQ; } /* @@ -755,20 +762,11 @@ static bool tpm_tis_req_canceled(struct tpm_chip *chip, u8 status) static void tpm_tis_handle_irq_storm(struct tpm_chip *chip) { struct tpm_tis_data *priv = dev_get_drvdata(&chip->dev); - int intmask = 0; dev_err(&chip->dev, HW_ERR "TPM interrupt storm detected, polling instead\n"); - tpm_tis_read32(priv, TPM_INT_ENABLE(priv->locality), &intmask); - - intmask &= ~TPM_GLOBAL_INT_ENABLE; - - tpm_tis_request_locality(chip, 0); - tpm_tis_write32(priv, TPM_INT_ENABLE(priv->locality), intmask); - tpm_tis_relinquish_locality(chip, 0); - - chip->flags &= ~TPM_CHIP_FLAG_IRQ; + __tpm_tis_disable_interrupts(chip); /* * We must not call devm_free_irq() from within the interrupt handler,