Page MenuHomeFreeBSD

D59196.id185667.diff
No OneTemporary

D59196.id185667.diff

diff --git a/sys/dev/tpm/tpm20.h b/sys/dev/tpm/tpm20.h
--- a/sys/dev/tpm/tpm20.h
+++ b/sys/dev/tpm/tpm20.h
@@ -128,6 +128,7 @@
void *intr_cookie;
int intr_type; /* Current event type */
bool interrupts;
+ bool common_initialized;
struct tpm_priv *internal_priv;
diff --git a/sys/dev/tpm/tpm20.c b/sys/dev/tpm/tpm20.c
--- a/sys/dev/tpm/tpm20.c
+++ b/sys/dev/tpm/tpm20.c
@@ -157,7 +157,7 @@
{
struct tpm_priv *priv = data;
- free(priv->buf, M_TPM20);
+ free(priv, M_TPM20);
}
int
@@ -209,7 +209,7 @@
args.mda_si_drv1 = sc;
result = make_dev_s(&args, &sc->sc_cdev, TPM_CDEV_NAME);
if (result != 0)
- tpm20_release(sc);
+ return (result);
#if defined TPM_HARVEST || defined RANDOM_ENABLE_TPM
random_source_register(&random_tpm);
@@ -217,6 +217,7 @@
tpm20_harvest, sc);
taskqueue_enqueue_timeout(taskqueue_thread, &sc->harvest_task, 0);
#endif
+ sc->common_initialized = true;
return (result);
@@ -226,16 +227,24 @@
tpm20_release(struct tpm_sc *sc)
{
+ if (!sc->common_initialized)
+ goto out;
#if defined TPM_HARVEST || defined RANDOM_ENABLE_TPM
if (device_is_attached(sc->dev))
taskqueue_drain_timeout(taskqueue_thread, &sc->harvest_task);
random_source_deregister(&random_tpm);
#endif
-
- tpm20_priv_dtor(sc->internal_priv);
+ sc->common_initialized = false;
+out:
+ if (sc->internal_priv != NULL) {
+ tpm20_priv_dtor(sc->internal_priv);
+ sc->internal_priv = NULL;
+ }
sx_destroy(&sc->dev_lock);
- if (sc->sc_cdev != NULL)
+ if (sc->sc_cdev != NULL) {
destroy_dev(sc->sc_cdev);
+ sc->sc_cdev = NULL;
+ }
}
int
diff --git a/sys/dev/tpm/tpm_tis_core.c b/sys/dev/tpm/tpm_tis_core.c
--- a/sys/dev/tpm/tpm_tis_core.c
+++ b/sys/dev/tpm/tpm_tis_core.c
@@ -120,17 +120,21 @@
result = bus_setup_intr(dev, sc->irq_res, INTR_TYPE_MISC | INTR_MPSAFE,
NULL, tpmtis_intr_handler, sc, &sc->intr_cookie);
if (result != 0) {
- bus_release_resource(dev, SYS_RES_IRQ, sc->irq_rid, sc->irq_res);
+ if (bus_release_resource(dev, SYS_RES_IRQ, sc->irq_rid,
+ sc->irq_res) == 0)
+ sc->irq_res = NULL;
goto skip_irq;
}
- tpmtis_setup_intr(sc);
-
skip_irq:
result = tpm20_init(sc);
- if (result != 0)
+ if (result != 0) {
tpmtis_detach(dev);
+ return (result);
+ }
+ if (sc->intr_cookie != NULL)
+ tpmtis_setup_intr(sc);
- return (result);
+ return (0);
}
static int

File Metadata

Mime Type
text/plain
Expires
Tue, Sep 8, 5:19 PM (6 h, 51 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
38189687
Default Alt Text
D59196.id185667.diff (2 KB)

Event Timeline