From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S376123AbcKQKlH (ORCPT ); Thu, 17 Nov 2016 05:41:07 -0500 Received: from mx0b-001b2d01.pphosted.com ([148.163.158.5]:38886 "EHLO mx0a-001b2d01.pphosted.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S2992776AbcKQKk4 (ORCPT ); Thu, 17 Nov 2016 05:40:56 -0500 Subject: Re: [tpmdd-devel] [PATCH] tpm: drop chip->is_open and chip->duration_adjusted To: Jarkko Sakkinen , tpmdd-devel@lists.sourceforge.net References: <20161114234500.24839-1-jarkko.sakkinen@linux.intel.com> Cc: Christophe Ricard , open list , linux-security-module@vger.kernel.org From: Nayna Date: Thu, 17 Nov 2016 16:10:29 +0530 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.6.0 MIME-Version: 1.0 In-Reply-To: <20161114234500.24839-1-jarkko.sakkinen@linux.intel.com> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit X-TM-AS-GCONF: 00 X-Content-Scanned: Fidelis XPS MAILER x-cbid: 16111710-0024-0000-0000-0000150AA320 X-IBM-SpamModules-Scores: X-IBM-SpamModules-Versions: BY=3.00006093; HX=3.00000240; KW=3.00000007; PH=3.00000004; SC=3.00000189; SDB=6.00781882; UDB=6.00377225; IPR=6.00559388; BA=6.00004888; NDR=6.00000001; ZLA=6.00000005; ZF=6.00000009; ZB=6.00000000; ZP=6.00000000; ZH=6.00000000; ZU=6.00000002; MB=3.00013358; XFM=3.00000011; UTC=2016-11-17 10:40:54 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 16111710-0025-0000-0000-00004635062E Message-Id: <582D891D.9000801@linux.vnet.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:,, definitions=2016-11-17_04:,, signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 suspectscore=2 malwarescore=0 phishscore=0 adultscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1609300000 definitions=main-1611170196 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 11/15/2016 05:14 AM, Jarkko Sakkinen wrote: > Use atomic bitops for chip->flags so that we do not need chip->is_open > and chip->duration_adjusted anymore. > > Signed-off-by: Jarkko Sakkinen > --- > drivers/char/tpm/st33zp24/st33zp24.c | 6 +++--- > drivers/char/tpm/tpm-chip.c | 14 ++++++++------ > drivers/char/tpm/tpm-dev.c | 9 +++------ > drivers/char/tpm/tpm-interface.c | 30 +++++++++++++++--------------- > drivers/char/tpm/tpm-sysfs.c | 2 +- > drivers/char/tpm/tpm.h | 14 +++++++------- > drivers/char/tpm/tpm2-cmd.c | 2 +- > drivers/char/tpm/tpm_crb.c | 2 +- > drivers/char/tpm/tpm_i2c_nuvoton.c | 8 ++++---- > drivers/char/tpm/tpm_tis_core.c | 26 +++++++++++++------------- > drivers/char/tpm/tpm_vtpm_proxy.c | 2 +- > 11 files changed, 57 insertions(+), 58 deletions(-) > > diff --git a/drivers/char/tpm/st33zp24/st33zp24.c b/drivers/char/tpm/st33zp24/st33zp24.c > index 6f060c7..14734a0 100644 > --- a/drivers/char/tpm/st33zp24/st33zp24.c > +++ b/drivers/char/tpm/st33zp24/st33zp24.c > @@ -267,7 +267,7 @@ static int wait_for_stat(struct tpm_chip *chip, u8 mask, unsigned long timeout, > > stop = jiffies + timeout; > > - if (chip->flags & TPM_CHIP_FLAG_IRQ) { > + if (test_bit(TPM_CHIP_FLAG_IRQ, &chip->flags)) { > cur_intrs = tpm_dev->intrs; > clear_interruption(tpm_dev); > enable_irq(tpm_dev->irq); > @@ -429,7 +429,7 @@ static int st33zp24_send(struct tpm_chip *chip, unsigned char *buf, > if (ret < 0) > goto out_err; > > - if (chip->flags & TPM_CHIP_FLAG_IRQ) { > + if (test_bit(TPM_CHIP_FLAG_IRQ, &chip->flags)) { > ordinal = be32_to_cpu(*((__be32 *) (buf + 6))); > > ret = wait_for_stat(chip, TPM_STS_DATA_AVAIL | TPM_STS_VALID, > @@ -586,7 +586,7 @@ int st33zp24_probe(void *phy_id, const struct st33zp24_phy_ops *ops, > goto _tpm_clean_answer; > > tpm_dev->irq = irq; > - chip->flags |= TPM_CHIP_FLAG_IRQ; > + set_bit(TPM_CHIP_FLAG_IRQ, &chip->flags); > > disable_irq_nosync(tpm_dev->irq); > } > diff --git a/drivers/char/tpm/tpm-chip.c b/drivers/char/tpm/tpm-chip.c > index 3f27753..04819e1 100644 > --- a/drivers/char/tpm/tpm-chip.c > +++ b/drivers/char/tpm/tpm-chip.c > @@ -183,7 +183,7 @@ struct tpm_chip *tpm_chip_alloc(struct device *dev, > goto out; > > if (!dev) > - chip->flags |= TPM_CHIP_FLAG_VIRTUAL; > + set_bit(TPM_CHIP_FLAG_VIRTUAL, &chip->flags); > > cdev_init(&chip->cdev, &tpm_fops); > chip->cdev.owner = THIS_MODULE; > @@ -271,7 +271,7 @@ static void tpm_del_char_device(struct tpm_chip *chip) > > /* Make the driver uncallable. */ > down_write(&chip->ops_sem); > - if (chip->flags & TPM_CHIP_FLAG_TPM2) > + if (test_bit(TPM_CHIP_FLAG_TPM2, &chip->flags)) > tpm2_shutdown(chip, TPM2_SU_CLEAR); > chip->ops = NULL; > up_write(&chip->ops_sem); > @@ -281,7 +281,8 @@ static void tpm_del_legacy_sysfs(struct tpm_chip *chip) > { > struct attribute **i; > > - if (chip->flags & (TPM_CHIP_FLAG_TPM2 | TPM_CHIP_FLAG_VIRTUAL)) > + if (test_bit(TPM_CHIP_FLAG_TPM2, &chip->flags) || > + test_bit(TPM_CHIP_FLAG_VIRTUAL, &chip->flags)) > return; > > sysfs_remove_link(&chip->dev.parent->kobj, "ppi"); > @@ -299,8 +300,9 @@ static int tpm_add_legacy_sysfs(struct tpm_chip *chip) > struct attribute **i; > int rc; > > - if (chip->flags & (TPM_CHIP_FLAG_TPM2 | TPM_CHIP_FLAG_VIRTUAL)) > - return 0; > + if (test_bit(TPM_CHIP_FLAG_TPM2, &chip->flags) || > + test_bit(TPM_CHIP_FLAG_VIRTUAL, &chip->flags)) > + return; guess should be "return 0;" Thanks & Regards, - Nayna > > rc = __compat_only_sysfs_link_entry_to_kobj( > &chip->dev.parent->kobj, &chip->dev.kobj, "ppi"); > @@ -335,7 +337,7 @@ int tpm_chip_register(struct tpm_chip *chip) > int rc; > > if (chip->ops->flags & TPM_OPS_AUTO_STARTUP) { > - if (chip->flags & TPM_CHIP_FLAG_TPM2) > + if (test_bit(TPM_CHIP_FLAG_TPM2, &chip->flags)) > rc = tpm2_auto_startup(chip); > else > rc = tpm1_auto_startup(chip); > diff --git a/drivers/char/tpm/tpm-dev.c b/drivers/char/tpm/tpm-dev.c > index 912ad30..3738c38 100644 > --- a/drivers/char/tpm/tpm-dev.c > +++ b/drivers/char/tpm/tpm-dev.c > @@ -57,17 +57,14 @@ static int tpm_open(struct inode *inode, struct file *file) > container_of(inode->i_cdev, struct tpm_chip, cdev); > struct file_priv *priv; > > - /* It's assured that the chip will be opened just once, > - * by the check of is_open variable, which is protected > - * by driver_lock. */ > - if (test_and_set_bit(0, &chip->is_open)) { > + if (test_and_set_bit(TPM_CHIP_FLAG_IS_OPEN, &chip->flags)) { > dev_dbg(&chip->dev, "Another process owns this TPM\n"); > return -EBUSY; > } > > priv = kzalloc(sizeof(*priv), GFP_KERNEL); > if (priv == NULL) { > - clear_bit(0, &chip->is_open); > + clear_bit(TPM_CHIP_FLAG_IS_OPEN, &chip->flags); > return -ENOMEM; > } > > @@ -173,7 +170,7 @@ static int tpm_release(struct inode *inode, struct file *file) > flush_work(&priv->work); > file->private_data = NULL; > atomic_set(&priv->data_pending, 0); > - clear_bit(0, &priv->chip->is_open); > + clear_bit(TPM_CHIP_FLAG_IS_OPEN, &priv->chip->flags); > kfree(priv); > return 0; > } > diff --git a/drivers/char/tpm/tpm-interface.c b/drivers/char/tpm/tpm-interface.c > index a2688ac..6426be7 100644 > --- a/drivers/char/tpm/tpm-interface.c > +++ b/drivers/char/tpm/tpm-interface.c > @@ -367,10 +367,10 @@ ssize_t tpm_transmit(struct tpm_chip *chip, const u8 *buf, size_t bufsiz, > goto out; > } > > - if (chip->flags & TPM_CHIP_FLAG_IRQ) > + if (test_bit(TPM_CHIP_FLAG_IRQ, &chip->flags)) > goto out_recv; > > - if (chip->flags & TPM_CHIP_FLAG_TPM2) > + if (test_bit(TPM_CHIP_FLAG_TPM2, &chip->flags)) > stop = jiffies + tpm2_calc_ordinal_duration(chip, ordinal); > else > stop = jiffies + tpm_calc_ordinal_duration(chip, ordinal); > @@ -503,10 +503,10 @@ int tpm_get_timeouts(struct tpm_chip *chip) > unsigned long old_timeout[4]; > ssize_t rc; > > - if (chip->flags & TPM_CHIP_FLAG_HAVE_TIMEOUTS) > + if (test_bit(TPM_CHIP_FLAG_HAVE_TIMEOUTS, &chip->flags)) > return 0; > > - if (chip->flags & TPM_CHIP_FLAG_TPM2) { > + if (test_bit(TPM_CHIP_FLAG_TPM2, &chip->flags)) { > /* Fixed timeouts for TPM2 */ > chip->timeout_a = msecs_to_jiffies(TPM2_TIMEOUT_A); > chip->timeout_b = msecs_to_jiffies(TPM2_TIMEOUT_B); > @@ -519,7 +519,7 @@ int tpm_get_timeouts(struct tpm_chip *chip) > chip->duration[TPM_LONG] = > msecs_to_jiffies(TPM2_DURATION_LONG); > > - chip->flags |= TPM_CHIP_FLAG_HAVE_TIMEOUTS; > + set_bit(TPM_CHIP_FLAG_HAVE_TIMEOUTS, &chip->flags); > return 0; > } > > @@ -600,11 +600,11 @@ int tpm_get_timeouts(struct tpm_chip *chip) > chip->duration[TPM_SHORT] = HZ; > chip->duration[TPM_MEDIUM] *= 1000; > chip->duration[TPM_LONG] *= 1000; > - chip->duration_adjusted = true; > + set_bit(TPM_CHIP_FLAG_DURATION_ADJUSTED, &chip->flags); > dev_info(&chip->dev, "Adjusting TPM timeout parameters."); > } > > - chip->flags |= TPM_CHIP_FLAG_HAVE_TIMEOUTS; > + set_bit(TPM_CHIP_FLAG_HAVE_TIMEOUTS, &chip->flags); > return 0; > } > EXPORT_SYMBOL_GPL(tpm_get_timeouts); > @@ -676,7 +676,7 @@ int tpm_is_tpm2(u32 chip_num) > if (chip == NULL) > return -ENODEV; > > - rc = (chip->flags & TPM_CHIP_FLAG_TPM2) != 0; > + rc = (test_bit(TPM_CHIP_FLAG_TPM2, &chip->flags)) != 0; > > tpm_put_ops(chip); > > @@ -703,7 +703,7 @@ int tpm_pcr_read(u32 chip_num, int pcr_idx, u8 *res_buf) > chip = tpm_chip_find_get(chip_num); > if (chip == NULL) > return -ENODEV; > - if (chip->flags & TPM_CHIP_FLAG_TPM2) > + if (test_bit(TPM_CHIP_FLAG_TPM2, &chip->flags)) > rc = tpm2_pcr_read(chip, pcr_idx, res_buf); > else > rc = tpm_pcr_read_dev(chip, pcr_idx, res_buf); > @@ -740,7 +740,7 @@ int tpm_pcr_extend(u32 chip_num, int pcr_idx, const u8 *hash) > if (chip == NULL) > return -ENODEV; > > - if (chip->flags & TPM_CHIP_FLAG_TPM2) { > + if (test_bit(TPM_CHIP_FLAG_TPM2, &chip->flags)) { > rc = tpm2_pcr_extend(chip, pcr_idx, hash); > tpm_put_ops(chip); > return rc; > @@ -890,7 +890,7 @@ int wait_for_tpm_stat(struct tpm_chip *chip, u8 mask, unsigned long timeout, > > stop = jiffies + timeout; > > - if (chip->flags & TPM_CHIP_FLAG_IRQ) { > + if (test_bit(TPM_CHIP_FLAG_IRQ, &chip->flags)) { > again: > timeout = stop - jiffies; > if ((long)timeout <= 0) > @@ -944,7 +944,7 @@ int tpm_pm_suspend(struct device *dev) > if (chip == NULL) > return -ENODEV; > > - if (chip->flags & TPM_CHIP_FLAG_TPM2) { > + if (test_bit(TPM_CHIP_FLAG_TPM2, &chip->flags)) { > tpm2_shutdown(chip, TPM2_SU_STATE); > return 0; > } > @@ -1036,7 +1036,7 @@ int tpm_get_random(u32 chip_num, u8 *out, size_t max) > if (chip == NULL) > return -ENODEV; > > - if (chip->flags & TPM_CHIP_FLAG_TPM2) { > + if (test_bit(TPM_CHIP_FLAG_TPM2, &chip->flags)) { > err = tpm2_get_random(chip, out, max); > tpm_put_ops(chip); > return err; > @@ -1081,7 +1081,7 @@ int tpm_seal_trusted(u32 chip_num, struct trusted_key_payload *payload, > int rc; > > chip = tpm_chip_find_get(chip_num); > - if (chip == NULL || !(chip->flags & TPM_CHIP_FLAG_TPM2)) > + if (chip == NULL || !(test_bit(TPM_CHIP_FLAG_TPM2, &chip->flags))) > return -ENODEV; > > rc = tpm2_seal_trusted(chip, payload, options); > @@ -1107,7 +1107,7 @@ int tpm_unseal_trusted(u32 chip_num, struct trusted_key_payload *payload, > int rc; > > chip = tpm_chip_find_get(chip_num); > - if (chip == NULL || !(chip->flags & TPM_CHIP_FLAG_TPM2)) > + if (chip == NULL || !(test_bit(TPM_CHIP_FLAG_TPM2, &chip->flags))) > return -ENODEV; > > rc = tpm2_unseal_trusted(chip, payload, options); > diff --git a/drivers/char/tpm/tpm-sysfs.c b/drivers/char/tpm/tpm-sysfs.c > index 848ad65..21b3fde 100644 > --- a/drivers/char/tpm/tpm-sysfs.c > +++ b/drivers/char/tpm/tpm-sysfs.c > @@ -244,7 +244,7 @@ static ssize_t durations_show(struct device *dev, struct device_attribute *attr, > jiffies_to_usecs(chip->duration[TPM_SHORT]), > jiffies_to_usecs(chip->duration[TPM_MEDIUM]), > jiffies_to_usecs(chip->duration[TPM_LONG]), > - chip->duration_adjusted > + test_bit(TPM_CHIP_FLAG_DURATION_ADJUSTED, &chip->flags) > ? "adjusted" : "original"); > } > static DEVICE_ATTR_RO(durations); > diff --git a/drivers/char/tpm/tpm.h b/drivers/char/tpm/tpm.h > index 1ae9768..a1fadfa 100644 > --- a/drivers/char/tpm/tpm.h > +++ b/drivers/char/tpm/tpm.h > @@ -142,10 +142,12 @@ enum tpm2_startup_types { > #define TPM_PPI_VERSION_LEN 3 > > enum tpm_chip_flags { > - TPM_CHIP_FLAG_TPM2 = BIT(1), > - TPM_CHIP_FLAG_IRQ = BIT(2), > - TPM_CHIP_FLAG_VIRTUAL = BIT(3), > - TPM_CHIP_FLAG_HAVE_TIMEOUTS = BIT(4), > + TPM_CHIP_FLAG_IS_OPEN = 0, > + TPM_CHIP_FLAG_TPM2 = 1, > + TPM_CHIP_FLAG_IRQ = 2, > + TPM_CHIP_FLAG_VIRTUAL = 3, > + TPM_CHIP_FLAG_HAVE_TIMEOUTS = 4, > + TPM_CHIP_FLAG_DURATION_ADJUSTED = 5, > }; > > struct tpm_chip_seqops { > @@ -168,10 +170,9 @@ struct tpm_chip { > struct tpm_chip_seqops bin_log_seqops; > struct tpm_chip_seqops ascii_log_seqops; > > - unsigned int flags; > + unsigned long flags; > > int dev_num; /* /dev/tpm# */ > - unsigned long is_open; /* only one allowed */ > > struct mutex tpm_mutex; /* tpm is processing */ > > @@ -181,7 +182,6 @@ struct tpm_chip { > unsigned long timeout_d; /* jiffies */ > bool timeout_adjusted; > unsigned long duration[3]; /* jiffies */ > - bool duration_adjusted; > > struct dentry *bios_dir[TPM_NUM_EVENT_LOG_FILES]; > > diff --git a/drivers/char/tpm/tpm2-cmd.c b/drivers/char/tpm/tpm2-cmd.c > index da5b782..7abe8a0 100644 > --- a/drivers/char/tpm/tpm2-cmd.c > +++ b/drivers/char/tpm/tpm2-cmd.c > @@ -946,7 +946,7 @@ int tpm2_probe(struct tpm_chip *chip) > return rc; > > if (be16_to_cpu(cmd.header.out.tag) == TPM2_ST_NO_SESSIONS) > - chip->flags |= TPM_CHIP_FLAG_TPM2; > + set_bit(TPM_CHIP_FLAG_TPM2, &chip->flags); > > return 0; > } > diff --git a/drivers/char/tpm/tpm_crb.c b/drivers/char/tpm/tpm_crb.c > index 65040d7..e37ebaa 100644 > --- a/drivers/char/tpm/tpm_crb.c > +++ b/drivers/char/tpm/tpm_crb.c > @@ -429,7 +429,7 @@ static int crb_acpi_add(struct acpi_device *device) > > dev_set_drvdata(&chip->dev, priv); > chip->acpi_dev_handle = device->handle; > - chip->flags = TPM_CHIP_FLAG_TPM2; > + set_bit(TPM_CHIP_FLAG_TPM2, &chip->flags); > > rc = crb_cmd_ready(dev, priv); > if (rc) > diff --git a/drivers/char/tpm/tpm_i2c_nuvoton.c b/drivers/char/tpm/tpm_i2c_nuvoton.c > index e3a9155..f4e25b5 100644 > --- a/drivers/char/tpm/tpm_i2c_nuvoton.c > +++ b/drivers/char/tpm/tpm_i2c_nuvoton.c > @@ -180,7 +180,7 @@ static bool i2c_nuvoton_check_status(struct tpm_chip *chip, u8 mask, u8 value) > static int i2c_nuvoton_wait_for_stat(struct tpm_chip *chip, u8 mask, u8 value, > u32 timeout, wait_queue_head_t *queue) > { > - if ((chip->flags & TPM_CHIP_FLAG_IRQ) && queue) { > + if ((test_bit(TPM_CHIP_FLAG_IRQ, &chip->flags)) && queue) { > s32 rc; > struct priv_data *priv = dev_get_drvdata(&chip->dev); > unsigned int cur_intrs = priv->intrs; > @@ -552,10 +552,10 @@ static int i2c_nuvoton_probe(struct i2c_client *client, > > of_id = of_match_device(dev->driver->of_match_table, dev); > if (of_id && of_id->data == OF_IS_TPM2) > - chip->flags |= TPM_CHIP_FLAG_TPM2; > + set_bit(TPM_CHIP_FLAG_TPM2, &chip->flags); > } else > if (id->driver_data == I2C_IS_TPM2) > - chip->flags |= TPM_CHIP_FLAG_TPM2; > + set_bit(TPM_CHIP_FLAG_TPM2, &chip->flags); > > init_waitqueue_head(&priv->read_queue); > > @@ -585,7 +585,7 @@ static int i2c_nuvoton_probe(struct i2c_client *client, > __func__, priv->irq); > priv->irq = 0; > } else { > - chip->flags |= TPM_CHIP_FLAG_IRQ; > + set_bit(TPM_CHIP_FLAG_IRQ, &chip->flags); > /* Clear any pending interrupt */ > i2c_nuvoton_ready(chip); > /* - wait for TPM_STS==0xA0 (stsValid, commandReady) */ > diff --git a/drivers/char/tpm/tpm_tis_core.c b/drivers/char/tpm/tpm_tis_core.c > index 7993678..e6af2a0 100644 > --- a/drivers/char/tpm/tpm_tis_core.c > +++ b/drivers/char/tpm/tpm_tis_core.c > @@ -105,7 +105,7 @@ static int request_locality(struct tpm_chip *chip, int l) > > stop = jiffies + chip->timeout_a; > > - if (chip->flags & TPM_CHIP_FLAG_IRQ) { > + if (test_bit(TPM_CHIP_FLAG_IRQ, &chip->flags)) { > again: > timeout = stop - jiffies; > if ((long)timeout <= 0) > @@ -346,7 +346,7 @@ static void disable_interrupts(struct tpm_chip *chip) > > devm_free_irq(chip->dev.parent, priv->irq, chip); > priv->irq = 0; > - chip->flags &= ~TPM_CHIP_FLAG_IRQ; > + clear_bit(TPM_CHIP_FLAG_IRQ, &chip->flags); > } > > /* > @@ -370,10 +370,10 @@ static int tpm_tis_send_main(struct tpm_chip *chip, u8 *buf, size_t len) > if (rc < 0) > goto out_err; > > - if (chip->flags & TPM_CHIP_FLAG_IRQ) { > + if (test_bit(TPM_CHIP_FLAG_IRQ, &chip->flags)) { > ordinal = be32_to_cpu(*((__be32 *) (buf + 6))); > > - if (chip->flags & TPM_CHIP_FLAG_TPM2) > + if (test_bit(TPM_CHIP_FLAG_TPM2, &chip->flags)) > dur = tpm2_calc_ordinal_duration(chip, ordinal); > else > dur = tpm_calc_ordinal_duration(chip, ordinal); > @@ -397,16 +397,16 @@ static int tpm_tis_send(struct tpm_chip *chip, u8 *buf, size_t len) > int rc, irq; > struct tpm_tis_data *priv = dev_get_drvdata(&chip->dev); > > - if (!(chip->flags & TPM_CHIP_FLAG_IRQ) || priv->irq_tested) > + if (!(test_bit(TPM_CHIP_FLAG_IRQ, &chip->flags)) || priv->irq_tested) > return tpm_tis_send_main(chip, buf, len); > > /* Verify receipt of the expected IRQ */ > irq = priv->irq; > priv->irq = 0; > - chip->flags &= ~TPM_CHIP_FLAG_IRQ; > + clear_bit(TPM_CHIP_FLAG_IRQ, &chip->flags); > rc = tpm_tis_send_main(chip, buf, len); > priv->irq = irq; > - chip->flags |= TPM_CHIP_FLAG_IRQ; > + set_bit(TPM_CHIP_FLAG_IRQ, &chip->flags); > if (!priv->irq_tested) > msleep(1); > if (!priv->irq_tested) > @@ -549,7 +549,7 @@ static int tpm_tis_gen_interrupt(struct tpm_chip *chip) > u32 cap2; > cap_t cap; > > - if (chip->flags & TPM_CHIP_FLAG_TPM2) > + if (test_bit(TPM_CHIP_FLAG_TPM2, &chip->flags)) > return tpm2_get_tpm_pt(chip, 0x100, &cap2, desc); > else > return tpm_getcap(chip, TPM_CAP_PROP_TIS_TIMEOUT, &cap, desc); > @@ -611,7 +611,7 @@ static int tpm_tis_probe_irq_single(struct tpm_chip *chip, u32 intmask, > /* tpm_tis_send will either confirm the interrupt is working or it > * will call disable_irq which undoes all of the above. > */ > - if (!(chip->flags & TPM_CHIP_FLAG_IRQ)) { > + if (!(test_bit(TPM_CHIP_FLAG_IRQ, &chip->flags))) { > rc = tpm_tis_write8(priv, original_int_vec, > TPM_INT_VECTOR(priv->locality)); > if (rc < 0) > @@ -737,7 +737,7 @@ int tpm_tis_core_init(struct device *dev, struct tpm_tis_data *priv, int irq, > goto out_err; > > dev_info(dev, "%s TPM (device-id 0x%X, rev-id %d)\n", > - (chip->flags & TPM_CHIP_FLAG_TPM2) ? "2.0" : "1.2", > + (test_bit(TPM_CHIP_FLAG_TPM2, &chip->flags)) ? "2.0" : "1.2", > vendor >> 16, rid); > > if (!(priv->flags & TPM_TIS_ITPM_POSSIBLE)) { > @@ -794,7 +794,7 @@ int tpm_tis_core_init(struct device *dev, struct tpm_tis_data *priv, int irq, > if (irq) { > tpm_tis_probe_irq_single(chip, intmask, IRQF_SHARED, > irq); > - if (!(chip->flags & TPM_CHIP_FLAG_IRQ)) > + if (!(test_bit(TPM_CHIP_FLAG_IRQ, &chip->flags))) > dev_err(&chip->dev, FW_BUG > "TPM interrupt not working, polling instead\n"); > } else { > @@ -839,7 +839,7 @@ int tpm_tis_resume(struct device *dev) > struct tpm_chip *chip = dev_get_drvdata(dev); > int ret; > > - if (chip->flags & TPM_CHIP_FLAG_IRQ) > + if (test_bit(TPM_CHIP_FLAG_IRQ, &chip->flags)) > tpm_tis_reenable_interrupts(chip); > > ret = tpm_pm_resume(dev); > @@ -849,7 +849,7 @@ int tpm_tis_resume(struct device *dev) > /* TPM 1.2 requires self-test on resume. This function actually returns > * an error code but for unknown reason it isn't handled. > */ > - if (!(chip->flags & TPM_CHIP_FLAG_TPM2)) > + if (!(test_bit(TPM_CHIP_FLAG_TPM2, &chip->flags))) > tpm_do_selftest(chip); > > return 0; > diff --git a/drivers/char/tpm/tpm_vtpm_proxy.c b/drivers/char/tpm/tpm_vtpm_proxy.c > index 3d6f6ca..b0cb284 100644 > --- a/drivers/char/tpm/tpm_vtpm_proxy.c > +++ b/drivers/char/tpm/tpm_vtpm_proxy.c > @@ -482,7 +482,7 @@ static struct file *vtpm_proxy_create_device( > vtpm_proxy_fops_open(file); > > if (proxy_dev->flags & VTPM_PROXY_FLAG_TPM2) > - proxy_dev->chip->flags |= TPM_CHIP_FLAG_TPM2; > + set_bit(TPM_CHIP_FLAG_TPM2, &proxy_dev->chip->flags); > > vtpm_proxy_work_start(proxy_dev); >