diff options
author | Stefan Berger <stefanb@linux.vnet.ibm.com> | 2018-06-26 22:09:31 +0300 |
---|---|---|
committer | Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com> | 2018-07-28 17:03:11 +0300 |
commit | eccc9bb844838b6b7a9691b31747416c4c34a83f (patch) | |
tree | 03482783baceba18da9c1901a534732123aae84e /drivers/char | |
parent | aaae81536351f831fe6719e5b4e6afbadc5e5f85 (diff) | |
download | linux-eccc9bb844838b6b7a9691b31747416c4c34a83f.tar.xz |
tpm: Convert tpm_find_get_ops() to use tpm_default_chip()
Convert tpm_find_get_ops() to use tpm_default_chip() in case no chip
is passed in.
Signed-off-by: Stefan Berger <stefanb@linux.vnet.ibm.com>
Reviewed-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
Tested-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
Signed-off-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
Diffstat (limited to 'drivers/char')
-rw-r--r-- | drivers/char/tpm/tpm-chip.c | 32 |
1 files changed, 13 insertions, 19 deletions
diff --git a/drivers/char/tpm/tpm-chip.c b/drivers/char/tpm/tpm-chip.c index f551061262c9..46caadca916a 100644 --- a/drivers/char/tpm/tpm-chip.c +++ b/drivers/char/tpm/tpm-chip.c @@ -124,29 +124,23 @@ EXPORT_SYMBOL_GPL(tpm_default_chip); */ struct tpm_chip *tpm_find_get_ops(struct tpm_chip *chip) { - struct tpm_chip *res = NULL; - int chip_num = 0; - int chip_prev; - - mutex_lock(&idr_lock); + int rc; - if (!chip) { - do { - chip_prev = chip_num; - chip = idr_get_next(&dev_nums_idr, &chip_num); - if (chip && !tpm_try_get_ops(chip)) { - res = chip; - break; - } - } while (chip_prev != chip_num); - } else { + if (chip) { if (!tpm_try_get_ops(chip)) - res = chip; + return chip; + return NULL; } - mutex_unlock(&idr_lock); - - return res; + chip = tpm_default_chip(); + if (!chip) + return NULL; + rc = tpm_try_get_ops(chip); + /* release additional reference we got from tpm_default_chip() */ + put_device(&chip->dev); + if (rc) + return NULL; + return chip; } /** |