Date: Fri, 29 Apr 2011 18:41:21 +0000 (UTC) From: John Baldwin <jhb@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r221218 - in head/sys: arm/arm dev/fdt ia64/ia64 kern mips/mips mips/rmi x86/x86 Message-ID: <201104291841.p3TIfLTn010695@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: jhb Date: Fri Apr 29 18:41:21 2011 New Revision: 221218 URL: http://svn.freebsd.org/changeset/base/221218 Log: Change rman_manage_region() to actually honor the rm_start and rm_end constraints on the rman and reject attempts to manage a region that is out of range. - Fix various places that set rm_end incorrectly (to ~0 or ~0u instead of ~0ul). - To preserve existing behavior, change rman_init() to set rm_start and rm_end to allow managing the full range (0 to ~0ul) if they are not set by the caller when rman_init() is called. Modified: head/sys/arm/arm/nexus.c head/sys/dev/fdt/fdtbus.c head/sys/ia64/ia64/nexus.c head/sys/kern/subr_rman.c head/sys/mips/mips/mainbus.c head/sys/mips/mips/nexus.c head/sys/mips/rmi/xlr_pci.c head/sys/x86/x86/nexus.c Modified: head/sys/arm/arm/nexus.c ============================================================================== --- head/sys/arm/arm/nexus.c Fri Apr 29 18:30:53 2011 (r221217) +++ head/sys/arm/arm/nexus.c Fri Apr 29 18:41:21 2011 (r221218) @@ -138,10 +138,10 @@ nexus_attach(device_t dev) { mem_rman.rm_start = 0; - mem_rman.rm_end = ~0u; + mem_rman.rm_end = ~0ul; mem_rman.rm_type = RMAN_ARRAY; mem_rman.rm_descr = "I/O memory addresses"; - if (rman_init(&mem_rman) || rman_manage_region(&mem_rman, 0, ~0u)) + if (rman_init(&mem_rman) || rman_manage_region(&mem_rman, 0, ~0)) panic("nexus_probe mem_rman"); /* Modified: head/sys/dev/fdt/fdtbus.c ============================================================================== --- head/sys/dev/fdt/fdtbus.c Fri Apr 29 18:30:53 2011 (r221217) +++ head/sys/dev/fdt/fdtbus.c Fri Apr 29 18:41:21 2011 (r221218) @@ -206,7 +206,7 @@ fdtbus_attach(device_t dev) * Mem-mapped I/O space rman. */ start = 0; - end = ~0u; + end = ~0ul; sc->sc_mem.rm_start = start; sc->sc_mem.rm_end = end; sc->sc_mem.rm_type = RMAN_ARRAY; Modified: head/sys/ia64/ia64/nexus.c ============================================================================== --- head/sys/ia64/ia64/nexus.c Fri Apr 29 18:30:53 2011 (r221217) +++ head/sys/ia64/ia64/nexus.c Fri Apr 29 18:41:21 2011 (r221218) @@ -174,7 +174,7 @@ nexus_probe(device_t dev) panic("nexus_probe port_rman"); mem_rman.rm_start = 0; - mem_rman.rm_end = ~0u; + mem_rman.rm_end = ~0ul; mem_rman.rm_type = RMAN_ARRAY; mem_rman.rm_descr = "I/O memory addresses"; if (rman_init(&mem_rman) Modified: head/sys/kern/subr_rman.c ============================================================================== --- head/sys/kern/subr_rman.c Fri Apr 29 18:30:53 2011 (r221217) +++ head/sys/kern/subr_rman.c Fri Apr 29 18:41:21 2011 (r221218) @@ -138,6 +138,8 @@ rman_init(struct rman *rm) mtx_init(&rman_mtx, "rman head", NULL, MTX_DEF); } + if (rm->rm_start == 0 && rm->rm_end == 0) + rm->rm_end = ~0ul; if (rm->rm_type == RMAN_UNINIT) panic("rman_init"); if (rm->rm_type == RMAN_GAUGE) @@ -162,6 +164,8 @@ rman_manage_region(struct rman *rm, u_lo DPRINTF(("rman_manage_region: <%s> request: start %#lx, end %#lx\n", rm->rm_descr, start, end)); + if (start < rm->rm_start || end > rm->rm_end) + return EINVAL; r = int_alloc_resource(M_NOWAIT); if (r == NULL) return ENOMEM; Modified: head/sys/mips/mips/mainbus.c ============================================================================== --- head/sys/mips/mips/mainbus.c Fri Apr 29 18:30:53 2011 (r221217) +++ head/sys/mips/mips/mainbus.c Fri Apr 29 18:41:21 2011 (r221218) @@ -146,7 +146,7 @@ mainbus_probe(device_t dev) panic("mainbus_probe port_rman"); mem_rman.rm_start = 0; - mem_rman.rm_end = ~0u; + mem_rman.rm_end = ~0ul; mem_rman.rm_type = RMAN_ARRAY; mem_rman.rm_descr = "I/O memory addresses"; if (rman_init(&mem_rman) || rman_manage_region(&mem_rman, 0, ~0)) Modified: head/sys/mips/mips/nexus.c ============================================================================== --- head/sys/mips/mips/nexus.c Fri Apr 29 18:30:53 2011 (r221217) +++ head/sys/mips/mips/nexus.c Fri Apr 29 18:41:21 2011 (r221218) @@ -151,7 +151,7 @@ nexus_probe(device_t dev) } mem_rman.rm_start = 0; - mem_rman.rm_end = ~0u; + mem_rman.rm_end = ~0ul; mem_rman.rm_type = RMAN_ARRAY; mem_rman.rm_descr = "Memory addresses"; if (rman_init(&mem_rman) != 0 || Modified: head/sys/mips/rmi/xlr_pci.c ============================================================================== --- head/sys/mips/rmi/xlr_pci.c Fri Apr 29 18:30:53 2011 (r221217) +++ head/sys/mips/rmi/xlr_pci.c Fri Apr 29 18:41:21 2011 (r221218) @@ -126,7 +126,7 @@ xlr_pci_init_resources(void) panic("pci_init_resources irq_rman"); port_rman.rm_start = 0; - port_rman.rm_end = ~0u; + port_rman.rm_end = ~0ul; port_rman.rm_type = RMAN_ARRAY; port_rman.rm_descr = "I/O ports"; if (rman_init(&port_rman) @@ -134,7 +134,7 @@ xlr_pci_init_resources(void) panic("pci_init_resources port_rman"); mem_rman.rm_start = 0; - mem_rman.rm_end = ~0u; + mem_rman.rm_end = ~0ul; mem_rman.rm_type = RMAN_ARRAY; mem_rman.rm_descr = "I/O memory"; if (rman_init(&mem_rman) Modified: head/sys/x86/x86/nexus.c ============================================================================== --- head/sys/x86/x86/nexus.c Fri Apr 29 18:30:53 2011 (r221217) +++ head/sys/x86/x86/nexus.c Fri Apr 29 18:41:21 2011 (r221218) @@ -256,7 +256,7 @@ nexus_init_resources(void) panic("nexus_init_resources port_rman"); mem_rman.rm_start = 0; - mem_rman.rm_end = ~0u; + mem_rman.rm_end = ~0ul; mem_rman.rm_type = RMAN_ARRAY; mem_rman.rm_descr = "I/O memory addresses"; if (rman_init(&mem_rman)
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201104291841.p3TIfLTn010695>