Page MenuHomeFreeBSD

D47282.diff
No OneTemporary

D47282.diff

diff --git a/sys/kern/subr_bus.c b/sys/kern/subr_bus.c
--- a/sys/kern/subr_bus.c
+++ b/sys/kern/subr_bus.c
@@ -53,6 +53,9 @@
#include <sys/systm.h>
#include <sys/bus.h>
#include <sys/cpuset.h>
+#ifdef INTRNG
+#include <sys/intr.h>
+#endif
#include <net/vnet.h>
@@ -4364,17 +4367,26 @@
if (error != 0)
return (error);
- if ((rman_get_flags(r) & RF_UNMAPPED) == 0 &&
- (type == SYS_RES_MEMORY || type == SYS_RES_IOPORT)) {
- error = BUS_MAP_RESOURCE(dev, child, r, NULL, &map);
- if (error != 0) {
- rman_deactivate_resource(r);
- return (error);
- }
+ switch (rman_get_type(r)) {
+ case SYS_RES_IOPORT:
+ case SYS_RES_MEMORY:
+ if ((rman_get_flags(r) & RF_UNMAPPED) == 0) {
+ error = BUS_MAP_RESOURCE(dev, child, r, NULL, &map);
+ if (error != 0)
+ break;
- rman_set_mapping(r, &map);
+ rman_set_mapping(r, &map);
+ }
+ break;
+#ifdef INTRNG
+ case SYS_RES_IRQ:
+ error = intr_activate_irq(child, r);
+ break;
+#endif
}
- return (0);
+ if (error != 0)
+ rman_deactivate_resource(r);
+ return (error);
}
/**
@@ -4404,10 +4416,19 @@
if (error != 0)
return (error);
- if ((rman_get_flags(r) & RF_UNMAPPED) == 0 &&
- (type == SYS_RES_MEMORY || type == SYS_RES_IOPORT)) {
- rman_get_mapping(r, &map);
- BUS_UNMAP_RESOURCE(dev, child, r, &map);
+ switch (type) {
+ case SYS_RES_IOPORT:
+ case SYS_RES_MEMORY:
+ if ((rman_get_flags(r) & RF_UNMAPPED) == 0) {
+ rman_get_mapping(r, &map);
+ BUS_UNMAP_RESOURCE(dev, child, r, &map);
+ }
+ break;
+#ifdef INTRNG
+ case SYS_RES_IRQ:
+ intr_deactivate_irq(child, r);
+ break;
+#endif
}
return (0);
}

File Metadata

Mime Type
text/plain
Expires
Thu, Nov 7, 10:20 AM (21 h, 48 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
14348805
Default Alt Text
D47282.diff (1 KB)

Event Timeline