看板 DFBSD_bugs 關於我們 聯絡資訊
Issue #2244 has been updated by Sepherosa Ziehau. On Fri, Nov 25, 2011 at 8:24 AM, Alan K via Redmine <bugtracker-admin@leaf.dragonflybsd.org> wrote: > > Issue #2244 has been updated by Alan K. > > > I tested with dfly-x86_64-2.12.0_RC.img. It doesn't have the problem. > > This led me to test different stages of the master branch. > > The problem appears to first start with commit 7e370202e053de3ef8357ef02e8b6f1e97694f97 > > The problem does not occur before that commit (i.e. with 95874ffdec65823430464b7869d8f0acf75cc226 or older). > > ########## > > http://gitweb.dragonflybsd.org/dragonfly.git/commit/7e370202e053de3ef8357ef02e8b6f1e97694f97 > > x86_64/nexus: Per-cpu IRQ rman > > 슠Now interrupt thread will be pin to the same CPU as where its GSI > 슠will go.sys/platform/pc64/x86_64/nexus.c > ---------------------------------------- > Bug #2244: usb - system hangs during boot when USB mass storage device/stick is connected - 2.13.0.357.gcdb8af > http://bugs.dragonflybsd.org/issues/2244 Please test the master: 2b195d6a566cb8441f5d6d66363235683bbd92af > > Author: Alan K > Status: New > Priority: Normal > Assignee: > Category: > Target version: > > > Versions: > > Workstation: Lenovo Thinkcentre M58p > DragonFlyBSD: v2.13.0.357.gcdb8af-DEVELOPMENT X86_64_GENERIC x86_64 > > ################ > > Problem Description: > > My system hangs during boot if a USB mass storage device/stick is connected. > By hang I mean no more output is shown and I cannot turn off/on num lock key on keyboard. > A hard reset is needed at this stage. > > This prevents me from installing DragonFlyBSD from a USB stick. > > I first noticed the problem when trying to boot via USB using the 2011 Nov 17th "DragonFly-x86_64-LATEST-IMG.img". > I haven't tried older versions. > > I can connect and use the USB mass storage device/stick after boot without problem, and shutdown while attached without problem. > > ################ > > I recompiled kernel with "options USB_DEBUG" and booted with verbose logging option. > The last lines shown are: > > uhci1: <UHCI (generic) USB controller> [tentative] port 0x1860-0x187f irq 17 at device 26.1 on pci0 > uhci1: Reserved 0x20 bytes for rid 0x20 type 4 at 0x1860 > uhci1: LegSup = 0x0010 > > ################ > > From pciconf -lv: > > uhci0@pci0:0:26:0: 슠 슠 슠class=0x0c0300 card=0x304817aa chip=0x3a678086 rev=0x02 hdr=0x00 > 슠 슠vendor 슠 슠 = 'Intel Corporation' > 슠 슠device 슠 슠 = 'USB UHCI Controller' > 슠 슠class 슠 슠 슠= serial bus > 슠 슠subclass 슠 = USB > uhci1@pci0:0:26:1: 슠 슠 슠class=0x0c0300 card=0x304817aa chip=0x3a688086 rev=0x02 hdr=0x00 > 슠 슠vendor 슠 슠 = 'Intel Corporation' > 슠 슠device 슠 슠 = 'USB UHCI Controller' > 슠 슠class 슠 슠 슠= serial bus > 슠 슠subclass 슠 = USB > > ################ > > I put kprintf's in various kernel source files to find where it hangs. > (Please note that I do not know anything about the kernel and very little about C). > This is what I found: > > Function "uhci_pci_attach(device_t self)" is called from /usr/src/sys/bus/usb/uhci_pci.c > > uhci_pci_attach() calls "err = uhci_init(sc);" which is in /usr/src/sys/bus/usb/uhci.c > > uhci_init() calls "uhci_globalreset(sc);" which is in /usr/src/sys/bus/usb/uhci.c > > uhci_globalreset() calls "usb_delay_ms(&sc->sc_bus, USB_BUS_RESET_DELAY);" which is in /usr/src/sys/bus/usb/usb_subr.c > > usb_delay_ms calls "delay((ms+1) * 1000);" with value 101000 (ms is 100). > > ... > ... > > It appears that "delay((ms+1) * 1000);" never returns. I think this because I have a kprintf() after the delay(). > > delay() is defined as DELAY in /usr/src/sys/bus/usb/usb_subr.c. > DELAY is defined in sys/systm.h but I cannot find the source file containing the DELAY function. > > ################ > > /usr/src/sys/bus/usb/usb_subr.c with the extra kprintfs: > > /* Delay for a certain number of ms */ > void > usb_delay_ms(usbd_bus_handle bus, u_int ms) > { > 슠 슠 슠 슠kprintf("AK: at start of function usb_delay_ms\n"); > > 슠 슠 슠 슠/* Wait at least two clock ticks so we know the time has passed. */ > 슠 슠 슠 슠if (bus->use_polling || cold) { > 슠 슠 슠 슠 슠 슠 슠 슠kprintf("AK: usb_delay_ms: in if cold and calling delay.\nAK: Value of ms after math: %d\n", (ms+1)*1000); > 슠 슠 슠 슠 슠 슠 슠 슠delay((ms+1) * 1000); > 슠 슠 슠 슠 슠 슠 슠 슠kprintf("AK: usb_delay_ms: finished delay\n"); > 슠 슠 슠 슠} > 슠 슠 슠 슠else { > 슠 슠 슠 슠 슠 슠 슠 슠kprintf("AK: usb_delay_ms: in else about about to do tsleep\n"); > 슠 슠 슠 슠 슠 슠 슠 슠tsleep(&ms, 0, "usbdly", (ms*hz+999)/1000 + 1); > 슠 슠 슠 슠} > > 슠 슠 슠 슠kprintf("AK: at end of usb_delay_ms\n"); > } > > ################ > > Attached dmesg and messages files taken after verbose boot without the usb stick attached. > > > > -- > You have received this notification because you have either subscribed to it, or are involved in it. > To change your notification preferences, please click here: http://bugs.dragonflybsd.org/my/account > -- Tomorrow Will Never Die ---------------------------------------- Bug #2244: usb - system hangs during boot when USB mass storage device/stick is connected - 2.13.0.357.gcdb8af http://bugs.dragonflybsd.org/issues/2244 Author: Alan K Status: New Priority: Normal Assignee: Category: Target version: Versions: Workstation: Lenovo Thinkcentre M58p DragonFlyBSD: v2.13.0.357.gcdb8af-DEVELOPMENT X86_64_GENERIC x86_64 ################ Problem Description: My system hangs during boot if a USB mass storage device/stick is connected. By hang I mean no more output is shown and I cannot turn off/on num lock key on keyboard. A hard reset is needed at this stage. This prevents me from installing DragonFlyBSD from a USB stick. I first noticed the problem when trying to boot via USB using the 2011 Nov 17th "DragonFly-x86_64-LATEST-IMG.img". I haven't tried older versions. I can connect and use the USB mass storage device/stick after boot without problem, and shutdown while attached without problem. ################ I recompiled kernel with "options USB_DEBUG" and booted with verbose logging option. The last lines shown are: uhci1: <UHCI (generic) USB controller> [tentative] port 0x1860-0x187f irq 17 at device 26.1 on pci0 uhci1: Reserved 0x20 bytes for rid 0x20 type 4 at 0x1860 uhci1: LegSup = 0x0010 ################ From pciconf -lv: uhci0@pci0:0:26:0: class=0x0c0300 card=0x304817aa chip=0x3a678086 rev=0x02 hdr=0x00 vendor = 'Intel Corporation' device = 'USB UHCI Controller' class = serial bus subclass = USB uhci1@pci0:0:26:1: class=0x0c0300 card=0x304817aa chip=0x3a688086 rev=0x02 hdr=0x00 vendor = 'Intel Corporation' device = 'USB UHCI Controller' class = serial bus subclass = USB ################ I put kprintf's in various kernel source files to find where it hangs. (Please note that I do not know anything about the kernel and very little about C). This is what I found: Function "uhci_pci_attach(device_t self)" is called from /usr/src/sys/bus/usb/uhci_pci.c uhci_pci_attach() calls "err = uhci_init(sc);" which is in /usr/src/sys/bus/usb/uhci.c uhci_init() calls "uhci_globalreset(sc);" which is in /usr/src/sys/bus/usb/uhci.c uhci_globalreset() calls "usb_delay_ms(&sc->sc_bus, USB_BUS_RESET_DELAY);" which is in /usr/src/sys/bus/usb/usb_subr.c usb_delay_ms calls "delay((ms+1) * 1000);" with value 101000 (ms is 100). .... .... It appears that "delay((ms+1) * 1000);" never returns. I think this because I have a kprintf() after the delay(). delay() is defined as DELAY in /usr/src/sys/bus/usb/usb_subr.c. DELAY is defined in sys/systm.h but I cannot find the source file containing the DELAY function. ################ /usr/src/sys/bus/usb/usb_subr.c with the extra kprintfs: /* Delay for a certain number of ms */ void usb_delay_ms(usbd_bus_handle bus, u_int ms) { kprintf("AK: at start of function usb_delay_ms\n"); /* Wait at least two clock ticks so we know the time has passed. */ if (bus->use_polling || cold) { kprintf("AK: usb_delay_ms: in if cold and calling delay.\nAK: Value of ms after math: %d\n", (ms+1)*1000); delay((ms+1) * 1000); kprintf("AK: usb_delay_ms: finished delay\n"); } else { kprintf("AK: usb_delay_ms: in else about about to do tsleep\n"); tsleep(&ms, 0, "usbdly", (ms*hz+999)/1000 + 1); } kprintf("AK: at end of usb_delay_ms\n"); } ################ Attached dmesg and messages files taken after verbose boot without the usb stick attached. -- You have received this notification because you have either subscribed to it, or are involved in it. To change your notification preferences, please click here: http://bugs.dragonflybsd.org/my/account