Date: Tue, 28 Mar 2000 21:38:51 +0200 From: "D. Rock" <rock@dead-end.net> To: current@freebsd.org Subject: Resource allocation error in new pnp code Message-ID: <38E10A4B.129A7C27@dead-end.net>
next in thread | raw e-mail | index | archive | help
This is a multi-part message in MIME format. --------------53A353B57F098AF27051730B Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Hi, I already mentioned this bug a few months ago but didn't got a reply. Maybe I'm the only one who is affected by this bug. I have several PnP cards in my system (see attached output of pnpinfo). Especially one card requests a resource: I/O Range 0x100 .. 0x3ff, alignment 0x1, len 0x1 [16-bit addr] My ISDN controller also requests a resource from this range: I/O Range 0x100 .. 0x3f0, alignment 0x8, len 0x8 [not 16-bit addr] Now the following happens: first card gets assigned: Mar 28 21:12:00 gate /kernel: unknown10: <EEPROM> at port 0x100 on isa0 and the ISDN card gets assigned: Mar 28 21:12:00 gate /kernel: isic0: <Sedlbauer WinSpeed> at port 0x101-0x108 irq 11 on isa0 which is wrong since it requests an alignment of 8. The code in /sys/isa/isa_common.c, which should prevent this is useless, since most work is done in /sys/kern/subr_rman.c which automatically tries to find an alternate region, but without honouring any alignment. Also attached is my (ugly) hack for this problem, but I think the problem should be addressed elsewhere (in the resource manager), since it may affect any type of resource allocation which requires different alignment. -- Daniel --------------53A353B57F098AF27051730B Content-Type: text/plain; charset=us-ascii; name="pnpinfo" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="pnpinfo" Checking for Plug-n-Play devices... Card assigned CSN #1 Vendor ID AZT3002 (0x02305407), Serial Number 0xffffffff PnP Version 1.0, Vendor Version 1 Device Description: AZT3002 PnP SOUND DEVICE Logical Device ID: AZT0500 0x00055407 #0 Device supports I/O Range Check Device Description: IDE CDROM DISABLED TAG Start DF Good Configuration I/O Range 0x0 .. 0x0, alignment 0x8, len 0x0 [16-bit addr] I/O Range 0x0 .. 0x0, alignment 0x2, len 0x0 [16-bit addr] IRQ: IRQ: High true edge sensitive TAG End DF Logical Device ID: AZT1004 0x04105407 #1 Device supports I/O Range Check Device Description: AUDIO TAG Start DF Good Configuration I/O Range 0x220 .. 0x220, alignment 0x10, len 0x10 [16-bit addr] I/O Range 0x388 .. 0x388, alignment 0x8, len 0x8 [16-bit addr] I/O Range 0x534 .. 0x534, alignment 0x4, len 0x4 [16-bit addr] IRQ: 5 IRQ: High true edge sensitive DMA: channel(s) 1 8-bit, not a bus master, count by byte, , Compatibility mode DMA: channel(s) 3 8-bit, not a bus master, count by byte, , Compatibility mode TAG Start DF I/O Range 0x220 .. 0x240, alignment 0x20, len 0x10 [16-bit addr] I/O Range 0x388 .. 0x388, alignment 0x8, len 0x8 [16-bit addr] I/O Range 0x534 .. 0x608, alignment 0xd4, len 0x4 [16-bit addr] IRQ: 5 9 10 IRQ: High true edge sensitive DMA: channel(s) 0 1 3 8-bit, not a bus master, count by byte, , Compatibility mode DMA: channel(s) 0 1 3 8-bit, not a bus master, count by byte, , Compatibility mode TAG Start DF I/O Range 0x220 .. 0x240, alignment 0x20, len 0x10 [16-bit addr] I/O Range 0x388 .. 0x388, alignment 0x8, len 0x8 [16-bit addr] I/O Range 0xe84 .. 0xf44, alignment 0xc0, len 0x4 [16-bit addr] IRQ: 5 9 10 IRQ: High true edge sensitive DMA: channel(s) 0 1 3 8-bit, not a bus master, count by byte, , Compatibility mode DMA: channel(s) 0 1 3 8-bit, not a bus master, count by byte, , Compatibility mode TAG Start DF I/O Range 0x100 .. 0x3f0, alignment 0x10, len 0x10 [16-bit addr] I/O Range 0x100 .. 0x3f8, alignment 0x8, len 0x8 [16-bit addr] I/O Range 0x100 .. 0xffc, alignment 0x4, len 0x4 [16-bit addr] IRQ: 5 9 10 11 15 IRQ: High true edge sensitive DMA: channel(s) 0 1 3 8-bit, not a bus master, count by byte, , Compatibility mode DMA: channel(s) 0 1 3 8-bit, not a bus master, count by byte, , Compatibility mode TAG Start DF I/O Range 0x100 .. 0x3f0, alignment 0x10, len 0x10 [16-bit addr] I/O Range 0x100 .. 0x3f8, alignment 0x8, len 0x8 [16-bit addr] I/O Range 0x100 .. 0xffc, alignment 0x4, len 0x4 [16-bit addr] IRQ: 5 9 10 11 15 IRQ: High true edge sensitive DMA: channel(s) 0 1 3 8-bit, not a bus master, count by byte, , Compatibility mode TAG End DF Logical Device ID: AZT2001 0x01205407 #2 Device supports I/O Range Check Device Description: MPU401 MIDI TAG Start DF Good Configuration I/O Range 0x330 .. 0x330, alignment 0x2, len 0x2 [16-bit addr] IRQ: 9 IRQ: High true edge sensitive TAG Start DF I/O Range 0x300 .. 0x330, alignment 0x30, len 0x2 [16-bit addr] IRQ: 5 9 10 11 15 IRQ: High true edge sensitive TAG Start DF I/O Range 0x100 .. 0x3fe, alignment 0x2, len 0x2 [16-bit addr] IRQ: 5 9 10 11 15 IRQ: High true edge sensitive TAG End DF Logical Device ID: AZT3001 0x01305407 #3 Device supports I/O Range Check Device Description: GAME PORT TAG Start DF Good Configuration I/O Range 0x200 .. 0x200, alignment 0x8, len 0x8 [16-bit addr] TAG Start DF I/O Range 0x208 .. 0x208, alignment 0x8, len 0x8 [16-bit addr] TAG End DF Logical Device ID: AZT4003 0x03405407 #4 Device supports I/O Range Check Device Description: MODEM TAG Start DF Good Configuration I/O Range 0x3e8 .. 0x3e8, alignment 0x8, len 0x8 [16-bit addr] IRQ: 3 4 5 9 10 11 15 IRQ: High true edge sensitive TAG Start DF I/O Range 0x2f8 .. 0x2f8, alignment 0x8, len 0x8 [16-bit addr] IRQ: 3 IRQ: High true edge sensitive TAG Start DF I/O Range 0x3f8 .. 0x3f8, alignment 0x8, len 0x8 [16-bit addr] IRQ: 3 4 5 9 10 11 15 IRQ: High true edge sensitive TAG Start DF I/O Range 0x2e8 .. 0x2e8, alignment 0x8, len 0x8 [16-bit addr] IRQ: 3 4 5 9 10 11 15 IRQ: High true edge sensitive TAG Start DF I/O Range 0x100 .. 0x3f8, alignment 0x8, len 0x8 [16-bit addr] IRQ: 3 4 5 9 10 11 15 IRQ: High true edge sensitive TAG End DF Logical Device ID: AZT5001 0x01505407 #5 Device supports I/O Range Check Device Description: EEPROM TAG Start DF Good Configuration I/O Range 0x100 .. 0x3ff, alignment 0x1, len 0x1 [16-bit addr] TAG End DF End Tag Successfully got 88 resources, 6 logical fdevs -- card select # 0x0001 CSN AZT3002 (0x02305407), Serial Number 0xffffffff Logical device #0 IO: 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 IRQ 0 0 DMA 4 4 IO range check 0x00 activate 0x00 Logical device #1 IO: 0x0388 0x0388 0x0388 0x0388 0x0388 0x0388 0x0388 0x0388 IRQ 5 0 DMA 0 1 IO range check 0x00 activate 0x01 Logical device #2 IO: 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 IRQ 9 0 DMA 4 4 IO range check 0x00 activate 0x01 Logical device #3 IO: 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 IRQ 0 0 DMA 4 4 IO range check 0x00 activate 0x01 Logical device #4 IO: 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 IRQ 10 0 DMA 4 4 IO range check 0x00 activate 0x01 Logical device #5 IO: 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 IRQ 0 0 DMA 4 4 IO range check 0x00 activate 0x01 Card assigned CSN #2 Vendor ID SAG0001 (0x0100274c), Serial Number 0x050044b0 PnP Version 1.0, Vendor Version 1 Device Description: speed win SEDLBAUER AG Logical Device ID: SAG0001 0x0100274c #0 Device supports I/O Range Check TAG Start DF I/O Range 0x100 .. 0x3f0, alignment 0x8, len 0x8 [not 16-bit addr] IRQ: 3 4 5 7 10 11 12 13 15 - only one type (true/edge) TAG Start DF I/O Range 0x100 .. 0x3f0, alignment 0x8, len 0x8 [not 16-bit addr] IRQ: 5 - only one type (true/edge) TAG Start DF I/O Range 0x100 .. 0x3f0, alignment 0x8, len 0x8 [not 16-bit addr] IRQ: 7 - only one type (true/edge) TAG End DF End Tag Successfully got 13 resources, 1 logical fdevs -- card select # 0x0002 CSN SAG0001 (0x0100274c), Serial Number 0x050044b0 Logical device #0 IO: 0x0108 0x0108 0x0108 0x0108 0x0108 0x0108 0x0108 0x0108 IRQ 11 0 DMA 4 0 IO range check 0x00 activate 0x01 --------------53A353B57F098AF27051730B Content-Type: text/plain; charset=us-ascii; name="isa_common.diff" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="isa_common.diff" Index: isa_common.c =================================================================== RCS file: /data/cvs/src/sys/isa/isa_common.c,v retrieving revision 1.16 diff -u -r1.16 isa_common.c --- isa_common.c 2000/02/11 04:35:07 1.16 +++ isa_common.c 2000/03/28 19:26:44 @@ -207,6 +207,13 @@ SYS_RES_IOPORT, &i, 0, ~0, 1, 0 /* !RF_ACTIVE */); if (res[i]) { + /* HACK */ + if(res[i]->r_start != start) { + bus_release_resource(child, + SYS_RES_IOPORT, i, + res[i]); + continue; + } result->ic_port[i].ir_start = start; result->ic_port[i].ir_end = start + size - 1; result->ic_port[i].ir_size = size; --------------53A353B57F098AF27051730B-- To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-current" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?38E10A4B.129A7C27>