|
@@ -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;
|
|
|
}
|
|
|
|
|
|
/**
|