From owner-freebsd-current Fri Nov 10 10: 6:56 2000 Delivered-To: freebsd-current@freebsd.org Received: from mailout05.sul.t-online.com (mailout05.sul.t-online.com [194.25.134.82]) by hub.freebsd.org (Postfix) with ESMTP id C24E237B479; Fri, 10 Nov 2000 10:06:47 -0800 (PST) Received: from fwd00.sul.t-online.com by mailout05.sul.t-online.com with smtp id 13uIZa-0003Ws-02; Fri, 10 Nov 2000 19:06:46 +0100 Received: from server.rock.net (340029380333-0001@[62.158.15.52]) by fwd00.sul.t-online.com with esmtp id 13uIZL-0HyVDkC; Fri, 10 Nov 2000 19:06:31 +0100 Received: from t-online.de (server [172.23.7.1]) by server.rock.net (8.9.3+Sun/8.9.3/Rock) with ESMTP id TAA28314; Fri, 10 Nov 2000 19:06:17 +0100 (MET) Message-ID: <3A0C3919.D3C56FF5@t-online.de> Date: Fri, 10 Nov 2000 19:06:17 +0100 From: Daniel Rock X-Mailer: Mozilla 4.7 [de] (X11; U; SunOS 5.8 i86pc) X-Accept-Language: de, en MIME-Version: 1.0 To: Mike Smith Cc: current@freebsd.org Subject: Re: ISA PnP resource allocation References: <200011101212.eAACCO906389@mass.osd.bsdi.com> Content-Type: multipart/mixed; boundary="------------7CE6D723BBB09DDB5BC341F4" X-Sender: 340029380333-0001@t-dialin.net Sender: owner-freebsd-current@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.ORG Dies ist eine mehrteilige Nachricht im MIME-Format. --------------7CE6D723BBB09DDB5BC341F4 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Mike Smith schrieb: > > > Now that someone has implementented resource alignment in the resource > > allocator, someone could review and integrate the attached patch. > > This looks fine to me. I assume you'd want the same changes applied to > aligning memory regions? I didn't run in this problem, but maybe some other person will, so: yes! I don't know the code in /sys/kern/subr_rman.c well. Does it only find nearby regions or also other as well. If it does find any region with the alignment constraints, the for(...) loop in /sys/isa/isa_common.c is completely meaningless and should be eliminated. The code then should look like this below (works at least for me). Daniel --------------7CE6D723BBB09DDB5BC341F4 Content-Type: text/plain; charset=us-ascii; name="sys.diff" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="sys.diff" Index: isa/isa_common.c =================================================================== RCS file: /data/cvs/src/sys/isa/isa_common.c,v retrieving revision 1.18 diff -u -r1.18 isa_common.c --- isa/isa_common.c 2000/07/12 00:42:08 1.18 +++ isa/isa_common.c 2000/11/10 18:05:42 @@ -133,31 +133,26 @@ result->ic_nmem = config->ic_nmem; for (i = 0; i < config->ic_nmem; i++) { u_int32_t start, end, size, align; - for (start = config->ic_mem[i].ir_start, - end = config->ic_mem[i].ir_end, - size = config->ic_mem[i].ir_size, - align = config->ic_mem[i].ir_align; - start + size - 1 <= end; - start += align) { - bus_set_resource(child, SYS_RES_MEMORY, i, - start, size); - res[i] = bus_alloc_resource(child, - SYS_RES_MEMORY, &i, - 0, ~0, 1, 0 /* !RF_ACTIVE */); - if (res[i]) { - result->ic_mem[i].ir_start = start; - result->ic_mem[i].ir_end = start + size - 1; - result->ic_mem[i].ir_size = size; - result->ic_mem[i].ir_align = align; - break; - } - } - /* - * If we didn't find a place for memory range i, then - * give up now. - */ - if (!res[i]) { + start = config->ic_mem[i].ir_start; + end = config->ic_mem[i].ir_end; + size = config->ic_mem[i].ir_size; + align = config->ic_mem[i].ir_align; + if(!align) + align = 1; + bus_set_resource(child, SYS_RES_MEMORY, i, + start, size); + res[i] = bus_alloc_resource(child, + SYS_RES_MEMORY, &i, + 0, ~0, 1, + rman_make_alignment_flags(align)); + if (res[i]) { + result->ic_mem[i].ir_start = res[i]->r_start; + result->ic_mem[i].ir_end = res[i]->r_end; + result->ic_mem[i].ir_size = res[i]->r_end - res[i]->r_start + 1; + result->ic_mem[i].ir_align = align; + } + else { success = 0; break; } @@ -197,31 +192,27 @@ result->ic_nport = config->ic_nport; for (i = 0; i < config->ic_nport; i++) { u_int32_t start, end, size, align; - for (start = config->ic_port[i].ir_start, - end = config->ic_port[i].ir_end, - size = config->ic_port[i].ir_size, - align = config->ic_port[i].ir_align; - start + size - 1 <= end; - start += align) { - bus_set_resource(child, SYS_RES_IOPORT, i, - start, size); - res[i] = bus_alloc_resource(child, - SYS_RES_IOPORT, &i, - 0, ~0, 1, 0 /* !RF_ACTIVE */); - if (res[i]) { - result->ic_port[i].ir_start = start; - result->ic_port[i].ir_end = start + size - 1; - result->ic_port[i].ir_size = size; - result->ic_port[i].ir_align = align; - break; - } - } - /* - * If we didn't find a place for port range i, then - * give up now. - */ - if (!res[i]) { + start = config->ic_port[i].ir_start; + end = config->ic_port[i].ir_end; + size = config->ic_port[i].ir_size; + align = config->ic_port[i].ir_align; + if(!align) + align = 1; + + bus_set_resource(child, SYS_RES_IOPORT, i, + start, size); + res[i] = bus_alloc_resource(child, + SYS_RES_IOPORT, &i, + 0, ~0, 1, + rman_make_alignment_flags(align)); + if (res[i]) { + result->ic_port[i].ir_start = res[i]->r_start; + result->ic_port[i].ir_end = res[i]->r_end; + result->ic_port[i].ir_size = res[i]->r_end - res[i]->r_start + 1; + result->ic_port[i].ir_align = align; + } + else { success = 0; break; } --------------7CE6D723BBB09DDB5BC341F4-- To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-current" in the body of the message