summaryrefslogtreecommitdiffstats
path: root/sys/dev/acpica
diff options
context:
space:
mode:
authornjl <njl@FreeBSD.org>2004-07-16 16:59:32 +0000
committernjl <njl@FreeBSD.org>2004-07-16 16:59:32 +0000
commitf4f737747428b6aa748a03486d406cce18e01578 (patch)
treee997f495c95339dbbe5767d84cf67db334877cab /sys/dev/acpica
parent8651a1567e64ee76aaffc579456f6224e4148a57 (diff)
downloadFreeBSD-src-f4f737747428b6aa748a03486d406cce18e01578.zip
FreeBSD-src-f4f737747428b6aa748a03486d406cce18e01578.tar.gz
Fix acpi_video loading. When we started cleaning up the duplicate handles
left around after the PCI probe, acpi_video stopped attaching because while it was an acpi child device, it really is a PCI device. Fix this by making it a PCI child. * Remove non-handle ivars accesses since child busses only implement acpi_get_handle(). * Access the acpi softc directly through the devclass instead of through the implied parent. * Clean up a potential panic on unload by freeing the sysctl context before storing NULL in the OID. Found by: marks
Diffstat (limited to 'sys/dev/acpica')
-rw-r--r--sys/dev/acpica/acpi_video.c9
1 files changed, 4 insertions, 5 deletions
diff --git a/sys/dev/acpica/acpi_video.c b/sys/dev/acpica/acpi_video.c
index 2588181..c42bfd1 100644
--- a/sys/dev/acpica/acpi_video.c
+++ b/sys/dev/acpica/acpi_video.c
@@ -153,7 +153,7 @@ static driver_t acpi_video_driver = {
static devclass_t acpi_video_devclass;
-DRIVER_MODULE(acpi_video, acpi, acpi_video_driver, acpi_video_devclass,
+DRIVER_MODULE(acpi_video, pci, acpi_video_driver, acpi_video_devclass,
acpi_video_modevent, NULL);
MODULE_DEPEND(acpi_video, acpi, 1, 1, 1);
@@ -180,8 +180,8 @@ acpi_video_modevent(struct module *mod __unused, int evt, void *cookie __unused)
STAILQ_INIT(&other_units);
break;
case MOD_UNLOAD:
- acpi_video_sysctl_tree = NULL;
sysctl_ctx_free(&acpi_video_sysctl_ctx);
+ acpi_video_sysctl_tree = NULL;
break;
default:
err = EINVAL;
@@ -199,8 +199,7 @@ acpi_video_probe(device_t dev)
ACPI_LOCK;
handle = acpi_get_handle(dev);
- if (acpi_get_type(dev) == ACPI_TYPE_DEVICE &&
- !acpi_disabled("video") &&
+ if (!acpi_disabled("video") &&
vid_check_requirements(handle)) {
device_set_desc(dev, "ACPI video extension");
err = 0;
@@ -220,7 +219,7 @@ acpi_video_attach(device_t dev)
sc = device_get_softc(dev);
ACPI_LOCK;
- acpi_sc = acpi_device_get_parent_softc(dev);
+ acpi_sc = devclass_get_softc(devclass_find("acpi"), 0);
if (acpi_video_sysctl_tree == NULL && acpi_sc != NULL) {
acpi_video_sysctl_tree = SYSCTL_ADD_NODE(&acpi_video_sysctl_ctx,
SYSCTL_CHILDREN(acpi_sc->acpi_sysctl_tree),
OpenPOWER on IntegriCloud