This is a bandaid for a problem that is not entirely fixed yet.

The pccard_function_init() call creates a bunch of inactive resources
that are persistant and configured on demand.  When the child driver
"allocates" a resource it is connected up to one of these.  When the
child releases the resource, we should not delete our copy, just
deactivate it again.  Otherwise there is nothing to recreate it again
after several probe functions have run and done an alloc/release cycle.
INVARIANTS shows 0xdeadc0de without this.

More work is needed to do a sweep though the pccard_function_disable()
call to actually delete the resources for real.  Right now, we leak
memory on eject (at best), so Dont Do That(TM) yet.  This affects
16 bit pccards on a cardbus bridge only.  This will be fixed soon, but
for now it gets the cards working.

Reviewed by: imp
This commit is contained in:
Peter Wemm 2001-01-07 21:32:05 +00:00
parent ce1c1e5def
commit 7722df0394
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=70766

View File

@ -213,6 +213,10 @@ pccard_detach_card(device_t dev, int flags)
continue;
pccard_function_disable(pf);
/*
* XXX must also actually delete resources created by
* pccard_function_init()
*/
if (pf->dev)
device_delete_child(dev, pf->dev);
}
@ -940,7 +944,7 @@ pccard_release_resource(device_t dev, device_t child, int type, int rid,
}
if (rle != NULL) {
return bus_release_resource(dev, type, rle->rid, rle->res);
return bus_deactivate_resource(dev, type, rle->rid, rle->res);
}
return bus_generic_release_resource(dev, child, type, rid, r);