Message ID | 20210805215256.1293987-2-stefanb@linux.vnet.ibm.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | ibmvtpm: Avoid error message when process gets signal while waiting | expand |
On Thu, Aug 05, 2021 at 05:52:55PM -0400, Stefan Berger wrote: > From: Stefan Berger <stefanb@linux.ibm.com> > > Rename the field tpm_processing_cmd to tpm_status in ibmvtpm_dev and set > the TPM_STATUS_BUSY flag while the vTPM is busy processing a command. > > Fixes: 6674ff145eef ("tpm_ibmvtpm: properly handle interrupted packet receptions") > Signed-off-by: Stefan Berger <stefanb@linux.ibm.com> > Cc: Nayna Jain <nayna@linux.ibm.com> > Cc: George Wilson <gcwilson@linux.ibm.com> Please put the bug fix first because otherwise it will be dependent of this patch, which is bad thing when it comes to backporting. /Jarkko
On 8/6/21 7:25 AM, Jarkko Sakkinen wrote: > On Thu, Aug 05, 2021 at 05:52:55PM -0400, Stefan Berger wrote: >> From: Stefan Berger <stefanb@linux.ibm.com> >> >> Rename the field tpm_processing_cmd to tpm_status in ibmvtpm_dev and set >> the TPM_STATUS_BUSY flag while the vTPM is busy processing a command. >> >> Fixes: 6674ff145eef ("tpm_ibmvtpm: properly handle interrupted packet receptions") >> Signed-off-by: Stefan Berger <stefanb@linux.ibm.com> >> Cc: Nayna Jain <nayna@linux.ibm.com> >> Cc: George Wilson <gcwilson@linux.ibm.com> > Please put the bug fix first because otherwise it will be dependent of this > patch, which is bad thing when it comes to backporting. Yes, and that's why I have this one here also with a Fix tag. I basically don't want to logically '&' with the 'true' flag but want this TPM_STATUS_BUSY flag first. Stefan > > /Jarkko
On Fri, Aug 06, 2021 at 08:08:27AM -0400, Stefan Berger wrote: > > On 8/6/21 7:25 AM, Jarkko Sakkinen wrote: > > On Thu, Aug 05, 2021 at 05:52:55PM -0400, Stefan Berger wrote: > > > From: Stefan Berger <stefanb@linux.ibm.com> > > > > > > Rename the field tpm_processing_cmd to tpm_status in ibmvtpm_dev and set > > > the TPM_STATUS_BUSY flag while the vTPM is busy processing a command. > > > > > > Fixes: 6674ff145eef ("tpm_ibmvtpm: properly handle interrupted packet receptions") > > > Signed-off-by: Stefan Berger <stefanb@linux.ibm.com> > > > Cc: Nayna Jain <nayna@linux.ibm.com> > > > Cc: George Wilson <gcwilson@linux.ibm.com> > > Please put the bug fix first because otherwise it will be dependent of this > > patch, which is bad thing when it comes to backporting. > > Yes, and that's why I have this one here also with a Fix tag. I basically > don't want to logically '&' with the 'true' flag but want this > TPM_STATUS_BUSY flag first. > > Stefan You can then just change the type to 'u8'. /Jarkko
diff --git a/drivers/char/tpm/tpm_ibmvtpm.c b/drivers/char/tpm/tpm_ibmvtpm.c index 903604769de9..cd6457061a2e 100644 --- a/drivers/char/tpm/tpm_ibmvtpm.c +++ b/drivers/char/tpm/tpm_ibmvtpm.c @@ -113,7 +113,8 @@ static int tpm_ibmvtpm_recv(struct tpm_chip *chip, u8 *buf, size_t count) return 0; } - sig = wait_event_interruptible(ibmvtpm->wq, !ibmvtpm->tpm_processing_cmd); + sig = wait_event_interruptible(ibmvtpm->wq, + (ibmvtpm->tpm_status & TPM_STATUS_BUSY) == 0); if (sig) return -EINTR; @@ -220,11 +221,12 @@ static int tpm_ibmvtpm_send(struct tpm_chip *chip, u8 *buf, size_t count) return -EIO; } - if (ibmvtpm->tpm_processing_cmd) { + if ((ibmvtpm->tpm_status & TPM_STATUS_BUSY)) { dev_info(ibmvtpm->dev, "Need to wait for TPM to finish\n"); /* wait for previous command to finish */ - sig = wait_event_interruptible(ibmvtpm->wq, !ibmvtpm->tpm_processing_cmd); + sig = wait_event_interruptible(ibmvtpm->wq, + (ibmvtpm->tpm_status & TPM_STATUS_BUSY) == 0); if (sig) return -EINTR; } @@ -237,7 +239,7 @@ static int tpm_ibmvtpm_send(struct tpm_chip *chip, u8 *buf, size_t count) * set the processing flag before the Hcall, since we may get the * result (interrupt) before even being able to check rc. */ - ibmvtpm->tpm_processing_cmd = true; + ibmvtpm->tpm_status |= TPM_STATUS_BUSY; again: rc = ibmvtpm_send_crq(ibmvtpm->vdev, @@ -255,7 +257,7 @@ static int tpm_ibmvtpm_send(struct tpm_chip *chip, u8 *buf, size_t count) goto again; } dev_err(ibmvtpm->dev, "tpm_ibmvtpm_send failed rc=%d\n", rc); - ibmvtpm->tpm_processing_cmd = false; + ibmvtpm->tpm_status &= ~TPM_STATUS_BUSY; } spin_unlock(&ibmvtpm->rtce_lock); @@ -550,7 +552,7 @@ static void ibmvtpm_crq_process(struct ibmvtpm_crq *crq, case VTPM_TPM_COMMAND_RES: /* len of the data in rtce buffer */ ibmvtpm->res_len = be16_to_cpu(crq->len); - ibmvtpm->tpm_processing_cmd = false; + ibmvtpm->tpm_status &= ~TPM_STATUS_BUSY; wake_up_interruptible(&ibmvtpm->wq); return; default: diff --git a/drivers/char/tpm/tpm_ibmvtpm.h b/drivers/char/tpm/tpm_ibmvtpm.h index b92aa7d3e93e..252f1cccdfc5 100644 --- a/drivers/char/tpm/tpm_ibmvtpm.h +++ b/drivers/char/tpm/tpm_ibmvtpm.h @@ -41,7 +41,8 @@ struct ibmvtpm_dev { wait_queue_head_t wq; u16 res_len; u32 vtpm_version; - bool tpm_processing_cmd; + u8 tpm_status; +#define TPM_STATUS_BUSY (1 << 0) /* vtpm is processing a command */ }; #define CRQ_RES_BUF_SIZE PAGE_SIZE