On Wednesday, June 08, 2011 4:20:00 pm deeptech71_at_gmail.com wrote: > On Wed, Jun 8, 2011 at 7:56 PM, John Baldwin <jhb_at_freebsd.org> wrote: > > On Wednesday, June 08, 2011 11:20:17 am deeptech71_at_gmail.com wrote: > >> On Tue, Jun 7, 2011 at 4:35 PM, John Baldwin <jhb_at_freebsd.org> wrote: > >> found-> vendor=0x1002, dev=0x4170, revid=0x00 > >> domain=0, bus=1, slot=0, func=1 > >> class=03-80-00, hdrtype=0x00, mfdev=0 > >> cmdreg=0x0007, statreg=0x02b0, cachelnsz=4 (dwords) > >> lattimer=0x40 (1920 ns), mingnt=0x08 (2000 ns), maxlat=0x00 (0 ns) > >> powerspec 2 supports D0 D1 D2 D3 current D0 > >> map[10]: type Prefetchable Memory, range 32, base 0xe0000000, size 28, enabled > >> pcib1: attempting to grow prefetch window for (0xe0000000-0xefffffff,0x10000000) > >> pcib1: attempting to grow memory window for (0xe0000000-0xefffffff,0x10000000) > > > > Odd, I'm not sure why this failed. Hmm, it seems this was always failing for > > you though in the older dmesg's though. > > > > Hmmm, can you revert all your changes to pci_pci.c and try just this change: > > > > Index: pci_pci.c > > =================================================================== > > --- pci_pci.c (revision 222863) > > +++ pci_pci.c (working copy) > > _at__at_ -953,7 +975,7 _at__at_ pcib_grow_window(struct pcib_softc *sc, struct pci > > * ok, ensure it is properly aligned for this window. > > * Also check for overflow. > > */ > > - if (back <= end && start_free <= back) { > > + if (back <= end + 1 && start_free <= back) { > > if (bootverbose) > > printf("\tback candidate range: %#lx-%#lx\n", > > start_free, back); > > failure. Hmm, I would say 'progress' actually as it's getting better: > map[10]: type Prefetchable Memory, range 32, base 0xe0000000, size 28, enabled > pcib1: attempting to grow prefetch window for (0xe0000000-0xefffffff,0x10000000) > back candidate range: 0xe0000000-0xf0000000 It at least attempts to grow it now. This patch is a slightly more correct fix for the same bug as above but also adds extra debugging so I can see why bus_adjust_resource() is failing to grow the window. It won't fix it yet, but should output more debug info when it fails to grow the window: Index: pci_pci.c =================================================================== --- pci_pci.c (revision 222863) +++ pci_pci.c (working copy) _at__at_ -916,7 +934,8 _at__at_ pcib_grow_window(struct pcib_softc *sc, struct pci /* Move end_free down until it is properly aligned. */ end_free &= ~(align - 1); - front = end_free - count; + end_free--; + front = end_free - (count - 1); /* * The resource would now be allocated at (front, _at__at_ -944,7 +963,7 _at__at_ pcib_grow_window(struct pcib_softc *sc, struct pci /* Move start_free up until it is properly aligned. */ start_free = roundup2(start_free, align); - back = start_free + count; + back = start_free + count - 1; /* * The resource would now be allocated at (start_free, _at__at_ -957,7 +976,7 _at__at_ pcib_grow_window(struct pcib_softc *sc, struct pci if (bootverbose) printf("\tback candidate range: %#lx-%#lx\n", start_free, back); - back = roundup2(back, w->step) - 1; + back = roundup2(back + 1, w->step) - 1; back -= rman_get_end(w->res); } else back = 0; _at__at_ -976,6 +995,11 _at__at_ pcib_grow_window(struct pcib_softc *sc, struct pci rman_get_end(w->res)); if (error == 0) break; + if (bootverbose) + device_printf(sc->dev, + "failed to grow %s window to %#lx-%#lx: %d\n", + w->name, rman_get_start(w->res) - front, + rman_get_end(w->res), error); front = 0; } else { error = bus_adjust_resource(sc->dev, type, w->res, _at__at_ -983,6 +1007,11 _at__at_ pcib_grow_window(struct pcib_softc *sc, struct pci rman_get_end(w->res) + back); if (error == 0) break; + if (bootverbose) + device_printf(sc->dev, + "failed to grow %s window to %#lx-%#lx: %d\n", + w->name, rman_get_start(w->res), + rman_get_end(w->res) + back, error); back = 0; } } -- John BaldwinReceived on Thu Jun 09 2011 - 11:22:47 UTC
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:40:14 UTC