From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751330AbdJWNcw (ORCPT ); Mon, 23 Oct 2017 09:32:52 -0400 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]:34966 "EHLO mx0a-001b2d01.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751278AbdJWNcu (ORCPT ); Mon, 23 Oct 2017 09:32:50 -0400 Subject: Re: [PATCH v4 1/4] tpm: move wait_for_tpm_stat() to respective driver files To: Jarkko Sakkinen , Alexander.Steffen@infineon.com Cc: linux-integrity@vger.kernel.org, zohar@linux.vnet.ibm.com, linux-security-module@vger.kernel.org, linux-kernel@vger.kernel.org, peterhuewe@gmx.de, tpmdd@selhorst.net, jgunthorpe@obsidianresearch.com, patrickc@us.ibm.com References: <20171017203232.2262-1-nayna@linux.vnet.ibm.com> <20171017203232.2262-2-nayna@linux.vnet.ibm.com> <20171019142141.jtzilibffx4fsgmw@linux.intel.com> <20171020085645.q43e62d2vmspatm2@linux.intel.com> From: Nayna Jain Date: Mon, 23 Oct 2017 19:02:18 +0530 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.3.0 MIME-Version: 1.0 In-Reply-To: <20171020085645.q43e62d2vmspatm2@linux.intel.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Content-Language: en-US X-TM-AS-GCONF: 00 x-cbid: 17102313-0012-0000-0000-0000152F35F8 X-IBM-SpamModules-Scores: X-IBM-SpamModules-Versions: BY=3.00007939; HX=3.00000241; KW=3.00000007; PH=3.00000004; SC=3.00000239; SDB=6.00935302; UDB=6.00471208; IPR=6.00715569; BA=6.00005656; NDR=6.00000001; ZLA=6.00000005; ZF=6.00000009; ZB=6.00000000; ZP=6.00000000; ZH=6.00000000; ZU=6.00000002; MB=3.00017670; XFM=3.00000015; UTC=2017-10-23 13:32:47 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 17102313-0013-0000-0000-00004FFC160A Message-Id: <67d5b797-17b6-6247-1f0d-c62c09967f87@linux.vnet.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:,, definitions=2017-10-23_05:,, signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 suspectscore=0 malwarescore=0 phishscore=0 adultscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1707230000 definitions=main-1710230193 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 10/20/2017 02:26 PM, Jarkko Sakkinen wrote: > On Thu, Oct 19, 2017 at 05:00:29PM +0000, Alexander.Steffen@infineon.com wrote: >>> On Tue, Oct 17, 2017 at 04:32:29PM -0400, Nayna Jain wrote: >>>> The function wait_for_tpm_stat() is currently defined in >>>> tpm-interface file. It is a hardware specific function used >>>> only by tpm_tis and xen-tpmfront, so it is removed from >>>> tpm-interface.c and defined in respective driver files. >>>> >>>> Suggested-by: Jarkko Sakkinen >>>> Signed-off-by: Nayna Jain >>>> Reviewed-by: Jarkko Sakkinen >>>> --- >>>> drivers/char/tpm/tpm-interface.c | 60 ---------------------------------------- >>>> drivers/char/tpm/tpm.h | 2 -- >>>> drivers/char/tpm/tpm_tis_core.c | 60 >>> ++++++++++++++++++++++++++++++++++++++++ >>>> drivers/char/tpm/xen-tpmfront.c | 60 >>> ++++++++++++++++++++++++++++++++++++++++ >>>> 4 files changed, 120 insertions(+), 62 deletions(-) >>>> >>>> diff --git a/drivers/char/tpm/tpm-interface.c b/drivers/char/tpm/tpm- >>> interface.c >>>> index 1d6729be4cd6..313f7618d569 100644 >>>> --- a/drivers/char/tpm/tpm-interface.c >>>> +++ b/drivers/char/tpm/tpm-interface.c >>>> @@ -1035,66 +1035,6 @@ int tpm_send(u32 chip_num, void *cmd, size_t >>> buflen) >>>> } >>>> EXPORT_SYMBOL_GPL(tpm_send); >>>> >>>> -static bool wait_for_tpm_stat_cond(struct tpm_chip *chip, u8 mask, >>>> - bool check_cancel, bool *canceled) >>>> -{ >>>> - u8 status = chip->ops->status(chip); >>>> - >>>> - *canceled = false; >>>> - if ((status & mask) == mask) >>>> - return true; >>>> - if (check_cancel && chip->ops->req_canceled(chip, status)) { >>>> - *canceled = true; >>>> - return true; >>>> - } >>>> - return false; >>>> -} >>>> - >>>> -int wait_for_tpm_stat(struct tpm_chip *chip, u8 mask, unsigned long >>> timeout, >>>> - wait_queue_head_t *queue, bool check_cancel) >>>> -{ >>>> - unsigned long stop; >>>> - long rc; >>>> - u8 status; >>>> - bool canceled = false; >>>> - >>>> - /* check current status */ >>>> - status = chip->ops->status(chip); >>>> - if ((status & mask) == mask) >>>> - return 0; >>>> - >>>> - stop = jiffies + timeout; >>>> - >>>> - if (chip->flags & TPM_CHIP_FLAG_IRQ) { >>>> -again: >>>> - timeout = stop - jiffies; >>>> - if ((long)timeout <= 0) >>>> - return -ETIME; >>>> - rc = wait_event_interruptible_timeout(*queue, >>>> - wait_for_tpm_stat_cond(chip, mask, check_cancel, >>>> - &canceled), >>>> - timeout); >>>> - if (rc > 0) { >>>> - if (canceled) >>>> - return -ECANCELED; >>>> - return 0; >>>> - } >>>> - if (rc == -ERESTARTSYS && freezing(current)) { >>>> - clear_thread_flag(TIF_SIGPENDING); >>>> - goto again; >>>> - } >>>> - } else { >>>> - do { >>>> - tpm_msleep(TPM_TIMEOUT); >>>> - status = chip->ops->status(chip); >>>> - if ((status & mask) == mask) >>>> - return 0; >>>> - } while (time_before(jiffies, stop)); >>>> - } >>>> - return -ETIME; >>>> -} >>>> -EXPORT_SYMBOL_GPL(wait_for_tpm_stat); >>>> - >>>> #define TPM_ORD_SAVESTATE 152 >>>> #define SAVESTATE_RESULT_SIZE 10 >>>> >>>> diff --git a/drivers/char/tpm/tpm.h b/drivers/char/tpm/tpm.h >>>> index 2d5466a72e40..4fc83ac7abeb 100644 >>>> --- a/drivers/char/tpm/tpm.h >>>> +++ b/drivers/char/tpm/tpm.h >>>> @@ -525,8 +525,6 @@ int tpm_do_selftest(struct tpm_chip *chip); >>>> unsigned long tpm_calc_ordinal_duration(struct tpm_chip *chip, u32 >>> ordinal); >>>> int tpm_pm_suspend(struct device *dev); >>>> int tpm_pm_resume(struct device *dev); >>>> -int wait_for_tpm_stat(struct tpm_chip *chip, u8 mask, unsigned long >>> timeout, >>>> - wait_queue_head_t *queue, bool check_cancel); >>>> >>>> static inline void tpm_msleep(unsigned int delay_msec) >>>> { >>>> diff --git a/drivers/char/tpm/tpm_tis_core.c >>> b/drivers/char/tpm/tpm_tis_core.c >>>> index 63bc6c3b949e..b33126a35694 100644 >>>> --- a/drivers/char/tpm/tpm_tis_core.c >>>> +++ b/drivers/char/tpm/tpm_tis_core.c >>>> @@ -31,6 +31,66 @@ >>>> #include "tpm.h" >>>> #include "tpm_tis_core.h" >>>> >>>> +static bool wait_for_tpm_stat_cond(struct tpm_chip *chip, u8 mask, >>>> + bool check_cancel, bool *canceled) >>>> +{ >>>> + u8 status = chip->ops->status(chip); >>>> + >>>> + *canceled = false; >>>> + if ((status & mask) == mask) >>>> + return true; >>>> + if (check_cancel && chip->ops->req_canceled(chip, status)) { >>>> + *canceled = true; >>>> + return true; >>>> + } >>>> + return false; >>>> +} >>>> + >>>> +static int wait_for_tpm_stat(struct tpm_chip *chip, u8 mask, >>>> + unsigned long timeout, wait_queue_head_t *queue, >>>> + bool check_cancel) >>>> +{ >>>> + unsigned long stop; >>>> + long rc; >>>> + u8 status; >>>> + bool canceled = false; >>>> + >>>> + /* check current status */ >>>> + status = chip->ops->status(chip); >>>> + if ((status & mask) == mask) >>>> + return 0; >>>> + >>>> + stop = jiffies + timeout; >>>> + >>>> + if (chip->flags & TPM_CHIP_FLAG_IRQ) { >>>> +again: >>>> + timeout = stop - jiffies; >>>> + if ((long)timeout <= 0) >>>> + return -ETIME; >>>> + rc = wait_event_interruptible_timeout(*queue, >>>> + wait_for_tpm_stat_cond(chip, mask, check_cancel, >>>> + &canceled), >>>> + timeout); >>>> + if (rc > 0) { >>>> + if (canceled) >>>> + return -ECANCELED; >>>> + return 0; >>>> + } >>>> + if (rc == -ERESTARTSYS && freezing(current)) { >>>> + clear_thread_flag(TIF_SIGPENDING); >>>> + goto again; >>>> + } >>>> + } else { >>>> + do { >>>> + tpm_msleep(TPM_TIMEOUT); >>>> + status = chip->ops->status(chip); >>>> + if ((status & mask) == mask) >>>> + return 0; >>>> + } while (time_before(jiffies, stop)); >>>> + } >>>> + return -ETIME; >>>> +} >>>> + >>>> /* Before we attempt to access the TPM we must see that the valid bit is >>> set. >>>> * The specification says that this bit is 0 at reset and remains 0 until the >>>> * 'TPM has gone through its self test and initialization and has established >>>> diff --git a/drivers/char/tpm/xen-tpmfront.c b/drivers/char/tpm/xen- >>> tpmfront.c >>>> index 656e8af95d52..d20a0a9ded27 100644 >>>> --- a/drivers/char/tpm/xen-tpmfront.c >>>> +++ b/drivers/char/tpm/xen-tpmfront.c >>>> @@ -39,6 +39,66 @@ enum status_bits { >>>> VTPM_STATUS_CANCELED = 0x8, >>>> }; >>>> >>>> +static bool wait_for_tpm_stat_cond(struct tpm_chip *chip, u8 mask, >>>> + bool check_cancel, bool *canceled) >>>> +{ >>>> + u8 status = chip->ops->status(chip); >>>> + >>>> + *canceled = false; >>>> + if ((status & mask) == mask) >>>> + return true; >>>> + if (check_cancel && chip->ops->req_canceled(chip, status)) { >>>> + *canceled = true; >>>> + return true; >>>> + } >>>> + return false; >>>> +} >>>> + >>>> +static int wait_for_tpm_stat(struct tpm_chip *chip, u8 mask, >>>> + unsigned long timeout, wait_queue_head_t *queue, >>>> + bool check_cancel) >>>> +{ >>>> + unsigned long stop; >>>> + long rc; >>>> + u8 status; >>>> + bool canceled = false; >>>> + >>>> + /* check current status */ >>>> + status = chip->ops->status(chip); >>>> + if ((status & mask) == mask) >>>> + return 0; >>>> + >>>> + stop = jiffies + timeout; >>>> + >>>> + if (chip->flags & TPM_CHIP_FLAG_IRQ) { >>>> +again: >>>> + timeout = stop - jiffies; >>>> + if ((long)timeout <= 0) >>>> + return -ETIME; >>>> + rc = wait_event_interruptible_timeout(*queue, >>>> + wait_for_tpm_stat_cond(chip, mask, check_cancel, >>>> + &canceled), >>>> + timeout); >>>> + if (rc > 0) { >>>> + if (canceled) >>>> + return -ECANCELED; >>>> + return 0; >>>> + } >>>> + if (rc == -ERESTARTSYS && freezing(current)) { >>>> + clear_thread_flag(TIF_SIGPENDING); >>>> + goto again; >>>> + } >>>> + } else { >>>> + do { >>>> + tpm_msleep(TPM_TIMEOUT); >>>> + status = chip->ops->status(chip); >>>> + if ((status & mask) == mask) >>>> + return 0; >>>> + } while (time_before(jiffies, stop)); >>>> + } >>>> + return -ETIME; >>>> +} >>>> + >>>> static u8 vtpm_status(struct tpm_chip *chip) >>>> { >>>> struct tpm_private *priv = dev_get_drvdata(&chip->dev); >>>> -- >>>> 2.13.3 >>>> >>> This commit caused a compiler warning because freezer.h was not included >>> to xen-tpmfront.c. I manually fixed it. >> Yep, and checkpatch.pl still complains about some stuff (mostly >> whitespace) in both patch 1/4 and 2/4. When fixed patches are >> available, I can run them again through my automation. >> Alexander Sorry for delay in response.. I was on vacation for last few days. Thanks for informing. I am wondering these didn't show up when I ran checkpatch.pl. > I'll fix these manually (weird, I run sparse and checkpatch, must have > done some mistake). Thanks Jarkko. Thanks & Regards,     - Nayna > Thank you! > > /Jarkko >