svn commit: r295754 - head/sys/dev/ofw
Zbigniew Bodek
zbb at FreeBSD.org
Thu Feb 18 11:53:58 UTC 2016
Author: zbb
Date: Thu Feb 18 11:53:57 2016
New Revision: 295754
URL: https://svnweb.freebsd.org/changeset/base/295754
Log:
Fix bug in ofwbus_release_resource() for non-ofwbus descendants
Resource list for devices that are not ofwbus descendants, but
got to ofwbus method via bus_generic_release_resource() call chain,
cannot be found using BUS_GET_RESOURCE_LIST() used by ofwbus.
In that case, changing device's resource list should be avoided
(will not contain resource list prepared by ofw or simplebus).
Pointy-hat to: zbb
Reviewed by: wma
Obtained from: Semihalf
Sponsored by: Cavium
Differential Revision: https://reviews.freebsd.org/D5304
Modified:
head/sys/dev/ofw/ofwbus.c
Modified: head/sys/dev/ofw/ofwbus.c
==============================================================================
--- head/sys/dev/ofw/ofwbus.c Thu Feb 18 11:26:08 2016 (r295753)
+++ head/sys/dev/ofw/ofwbus.c Thu Feb 18 11:53:57 2016 (r295754)
@@ -271,12 +271,17 @@ ofwbus_release_resource(device_t bus, de
int rid, struct resource *r)
{
struct resource_list_entry *rle;
+ int passthrough;
int error;
- /* Clean resource list entry */
- rle = resource_list_find(BUS_GET_RESOURCE_LIST(bus, child), type, rid);
- if (rle != NULL)
- rle->res = NULL;
+ passthrough = (device_get_parent(child) != bus);
+ if (!passthrough) {
+ /* Clean resource list entry */
+ rle = resource_list_find(BUS_GET_RESOURCE_LIST(bus, child),
+ type, rid);
+ if (rle != NULL)
+ rle->res = NULL;
+ }
if ((rman_get_flags(r) & RF_ACTIVE) != 0) {
error = bus_deactivate_resource(child, type, rid, r);
More information about the svn-src-head
mailing list