Page MenuHomeFreeBSD

D49271.diff
No OneTemporary

D49271.diff

diff --git a/sys/dev/sdhci/sdhci.c b/sys/dev/sdhci/sdhci.c
--- a/sys/dev/sdhci/sdhci.c
+++ b/sys/dev/sdhci/sdhci.c
@@ -700,12 +700,14 @@
mmccam_start_discovery(slot->sim);
SDHCI_UNLOCK(slot);
#else
- d = slot->dev = device_add_child(slot->bus, "mmc", DEVICE_UNIT_ANY);
SDHCI_UNLOCK(slot);
+ bus_topo_lock();
+ d = slot->dev = device_add_child(slot->bus, "mmc", DEVICE_UNIT_ANY);
if (d) {
device_set_ivars(d, slot);
(void)device_probe_and_attach(d);
}
+ bus_topo_unlock();
#endif
} else
SDHCI_UNLOCK(slot);
@@ -731,7 +733,9 @@
slot->opt &= ~SDHCI_TUNING_ENABLED;
SDHCI_UNLOCK(slot);
callout_drain(&slot->retune_callout);
+ bus_topo_lock();
device_delete_child(slot->bus, d);
+ bus_topo_unlock();
#endif
} else
SDHCI_UNLOCK(slot);
@@ -760,10 +764,10 @@
was_present = slot->dev != NULL;
#endif
if (!was_present && is_present) {
- taskqueue_enqueue_timeout(taskqueue_swi_giant,
+ taskqueue_enqueue_timeout(taskqueue_bus,
&slot->card_delayed_task, -SDHCI_INSERT_DELAY_TICKS);
} else if (was_present && !is_present) {
- taskqueue_enqueue(taskqueue_swi_giant, &slot->card_task);
+ taskqueue_enqueue(taskqueue_bus, &slot->card_task);
}
}
@@ -1129,7 +1133,7 @@
"timeout", CTLFLAG_RWTUN, &slot->timeout, 0,
"Maximum timeout for SDHCI transfers (in secs)");
TASK_INIT(&slot->card_task, 0, sdhci_card_task, slot);
- TIMEOUT_TASK_INIT(taskqueue_swi_giant, &slot->card_delayed_task, 0,
+ TIMEOUT_TASK_INIT(taskqueue_bus, &slot->card_delayed_task, 0,
sdhci_card_task, slot);
callout_init(&slot->card_poll_callout, 1);
callout_init_mtx(&slot->timeout_callout, &slot->mtx, 0);
@@ -1186,8 +1190,8 @@
callout_drain(&slot->timeout_callout);
callout_drain(&slot->card_poll_callout);
callout_drain(&slot->retune_callout);
- taskqueue_drain(taskqueue_swi_giant, &slot->card_task);
- taskqueue_drain_timeout(taskqueue_swi_giant, &slot->card_delayed_task);
+ taskqueue_drain(taskqueue_bus, &slot->card_task);
+ taskqueue_drain_timeout(taskqueue_bus, &slot->card_delayed_task);
SDHCI_LOCK(slot);
d = slot->dev;

File Metadata

Mime Type
text/plain
Expires
Mon, Apr 28, 8:01 AM (8 h, 15 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
17103857
Default Alt Text
D49271.diff (2 KB)

Event Timeline