From: Greg KH <greg@kroah.com>
To: linux-kernel@vger.kernel.org
Cc: kjhall@us.ibm.com
Subject: [PATCH] tpm: fix cause of SMP stack traces
Date: Wed, 9 Mar 2005 16:42:01 -0800 [thread overview]
Message-ID: <11104153213727@kroah.com> (raw)
In-Reply-To: <1110415321526@kroah.com>
ChangeSet 1.2036, 2005/03/09 10:12:38-08:00, kjhall@us.ibm.com
[PATCH] tpm: fix cause of SMP stack traces
There were misplaced spinlock acquires and releases in the probe, close and release
paths which were causing might_sleep and schedule while atomic error messages accompanied
by stack traces when the kernel was compiled with SMP support. Bug reported by Reben Jenster
<ruben@hotheads.de>
Signed-off-by: Kylene Hall <kjhall@us.ibm.com>
Signed-off-by: Greg Kroah-Hartman <greg@kroah.com>
drivers/char/tpm/tpm.c | 16 ++++++++--------
1 files changed, 8 insertions(+), 8 deletions(-)
diff -Nru a/drivers/char/tpm/tpm.c b/drivers/char/tpm/tpm.c
--- a/drivers/char/tpm/tpm.c 2005-03-09 16:40:19 -08:00
+++ b/drivers/char/tpm/tpm.c 2005-03-09 16:40:19 -08:00
@@ -422,21 +422,24 @@
int tpm_release(struct inode *inode, struct file *file)
{
struct tpm_chip *chip = file->private_data;
+
+ file->private_data = NULL;
spin_lock(&driver_lock);
chip->num_opens--;
+ spin_unlock(&driver_lock);
+
down(&chip->timer_manipulation_mutex);
if (timer_pending(&chip->user_read_timer))
del_singleshot_timer_sync(&chip->user_read_timer);
else if (timer_pending(&chip->device_timer))
del_singleshot_timer_sync(&chip->device_timer);
up(&chip->timer_manipulation_mutex);
+
kfree(chip->data_buffer);
atomic_set(&chip->data_pending, 0);
pci_dev_put(chip->pci_dev);
- file->private_data = NULL;
- spin_unlock(&driver_lock);
return 0;
}
@@ -534,6 +537,8 @@
list_del(&chip->list);
+ spin_unlock(&driver_lock);
+
pci_set_drvdata(pci_dev, NULL);
misc_deregister(&chip->vendor->miscdev);
@@ -541,8 +546,6 @@
device_remove_file(&pci_dev->dev, &dev_attr_pcrs);
device_remove_file(&pci_dev->dev, &dev_attr_caps);
- spin_unlock(&driver_lock);
-
pci_disable_device(pci_dev);
dev_mask[chip->dev_num / 32] &= !(1 << (chip->dev_num % 32));
@@ -583,6 +586,7 @@
int tpm_pm_resume(struct pci_dev *pci_dev)
{
struct tpm_chip *chip = pci_get_drvdata(pci_dev);
+
if (chip == NULL)
return -ENODEV;
@@ -650,15 +654,12 @@
chip->vendor->miscdev.dev = &(pci_dev->dev);
chip->pci_dev = pci_dev_get(pci_dev);
- spin_lock(&driver_lock);
-
if (misc_register(&chip->vendor->miscdev)) {
dev_err(&chip->pci_dev->dev,
"unable to misc_register %s, minor %d\n",
chip->vendor->miscdev.name,
chip->vendor->miscdev.minor);
pci_dev_put(pci_dev);
- spin_unlock(&driver_lock);
kfree(chip);
dev_mask[i] &= !(1 << j);
return -ENODEV;
@@ -672,7 +673,6 @@
device_create_file(&pci_dev->dev, &dev_attr_pcrs);
device_create_file(&pci_dev->dev, &dev_attr_caps);
- spin_unlock(&driver_lock);
return 0;
}
next prev parent reply other threads:[~2005-03-10 1:11 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-03-10 0:41 [BK PATCH] Add TPM driver support for 2.6.11 Greg KH
2005-03-10 0:42 ` [PATCH] Add TPM hardware enablement driver Greg KH
2005-03-10 0:42 ` Greg KH [this message]
2005-03-10 0:42 ` [PATCH] tpm_msc-build-fix Greg KH
2005-03-10 0:42 ` [PATCH] tpm_atmel build fix Greg KH
2005-03-10 0:42 ` [PATCH] tpm-build-fix Greg KH
2005-03-10 3:51 ` [PATCH] Add TPM hardware enablement driver Jeff Garzik
2005-03-15 23:59 ` Kylene Jo Hall
2005-03-17 0:32 ` Kylene Hall
2005-03-23 2:02 ` Jeff Garzik
2005-03-24 6:39 ` Greg KH
2005-03-24 21:04 ` Jeff Garzik
2005-03-24 21:33 ` Greg KH
2005-04-05 16:14 ` Kylene Jo Hall
2005-04-08 20:07 ` Kylene Jo Hall
2005-04-09 8:31 ` Ian Campbell
2005-04-27 22:15 ` [PATCH: 1 of 12] Fix concerns with TPM driver -- use enums Kylene Hall
2005-04-27 22:23 ` Greg KH
2005-04-27 22:15 ` [PATCH: 2 of 12 ] Fix TPM driver -- address missing const defs Kylene Hall
2005-04-27 22:16 ` [PATCH: 3 of 12] Fix TPM driver --remove unnecessary module stuff Kylene Hall
2005-04-27 22:16 ` [PATCH 4 of 12] Fix TPM driver -- read return code issue Kylene Hall
2005-04-27 22:16 ` [PATCH 5 of 12] Fix TPM driver -- large stack objects Kylene Hall
2005-04-27 22:18 ` [PATCH 6 of 12] Fix TPM driver -- how timer is initialized Kylene Hall
2005-04-27 22:18 ` [PATCH 7 of 12] Fix TPM driver -- use to_pci_dev Kylene Hall
2005-03-10 17:35 ` [PATCH] Add TPM hardware enablement driver Nish Aravamudan
2005-03-10 18:19 ` Nish Aravamudan
2005-03-10 19:09 ` [PATCH] char/tpm: use msleep(), clean-up timers, fix typo Nishanth Aravamudan
2005-03-10 21:04 ` [PATCH] Add TPM hardware enablement driver Alexey Dobriyan
2005-04-27 22:18 ` [PATCH 9 of 12] Fix TPM driver -- remove unnecessary __force Kylene Hall
2005-03-11 18:18 ` [PATCH] char/tpm: use msleep(), clean-up timers, fix typo Nishanth Aravamudan
2005-04-15 20:23 ` Kylene Hall
2005-04-15 20:44 ` Nish Aravamudan
2005-04-15 21:04 ` Greg KH
2005-04-15 21:47 ` Nish Aravamudan
2005-04-15 21:47 ` Nish Aravamudan
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=11104153213727@kroah.com \
--to=greg@kroah.com \
--cc=kjhall@us.ibm.com \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.