[resent a few times, sorry if you receive the same messages]

Hi, I've found that there is a serious bug in sys/kern/subr_rman.c
about finding an acceptable region.  I'm sure it's a obvious bug and
going to commit it soon, but this is my first commit to resource
manager code, so please review my patch.  I'll commit this 2 or 3 days
later.

OK, when I trying to use wi PCCard with NEWCARD, sometimes wrong 
I/O port range was allocated and attaching the card was failed
depending on the usage of I/O port resources.
Here is the kernel message w/ RMAN_DEBUG option in subr_rman.c.

----
rman_reserve_resource: <I/O ports> request: [0x100, 0xffffffff], length 0x40, flags 
6144, device pccard1
considering [0x100, 0x107]
region is allocated
considering [0x108, 0x10d]
truncated region: [0x140, 0x10d]; size 0xffffffce (requested 0x40)
                   ^^^^^  ^^^^^
                   start  > end, hmmm, very odd.
----

The resource manager is trying to find the I/O port resource range
(length = 0x40) checking the range [0x108 - 0x10d].  Adjusted start
address on boundary and alignment is [0x140], but this address already
exceeds end address of the range.  That's the problem.
As the result, wrong address range [0x140 - 0x17f] was allocated.

Here is my patch.  very simple but correct I think.

Index: subr_rman.c
===================================================================
RCS file: /home/ncvs/src/sys/kern/subr_rman.c,v
retrieving revision 1.24
diff -u -r1.24 subr_rman.c
--- subr_rman.c 4 Apr 2002 21:03:26 -0000       1.24
+++ subr_rman.c 25 Aug 2002 14:49:20 -0000
@@ -232,6 +234,10 @@
                } while ((rstart & amask) != 0 && rstart < end &&
                    rstart < s->r_end);
                rend = ulmin(s->r_end, ulmax(rstart + count, end));
+               if (rstart > rend) {
+                       DPRINTF(("adjusted start exceeds end\n"));
+                       continue;
+               }
                DPRINTF(("truncated region: [%#lx, %#lx]; size %#lx (requested 
%#lx)\n",
                       rstart, rend, (rend - rstart + 1), count));
 


The kernel message w/ my patch is:
----
rman_reserve_resource: <I/O ports> request: [0x100, 0xffffffff], length 0x40, flags 
6144, device pccard1
considering [0x100, 0x107]
region is allocated
considering [0x108, 0x10d]
adjusted start exceeds end
considering [0x10e, 0x10e]
region is allocated
considering [0x10f, 0x16f]
truncated region: [0x140, 0x16f]; size 0x30 (requested 0x40)
considering [0x170, 0x177]
region is allocated
considering [0x178, 0x1ef]
truncated region: [0x180, 0x1ef]; size 0x70 (requested 0x40)
----

It seems that correct range is allocated, and wi PCCard is always
working correctly now :-)

Thanks

To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-current" in the body of the message

Reply via email to