Date: Tue, 05 Sep 2000 17:56:28 CST From: "bsdnewbie bsdnewbie" <bsdnewbie@hotmail.com> To: freebsd-scsi@FreeBSD.org Subject: _Problem of KLD Message-ID: <F241KSKVyqIyxJBU8v200004c1d@hotmail.com>
next in thread | raw e-mail | index | archive | help
I write a driver for a pci scsi card. In order to make my driver easy for debugging, I write it as a loadable module. But it can not work well, so I compile it into kernel and things get better. The problem is: why the loadable module can not work as it compiled in to the kernel. (described as follows:) I write my program by referring "aic7xxx.c" My program: /* * Attach all the sub-devices we can find */ int foo_attach(struct foo_softc *foo) { ... bus_setup_intr(...); devq = cam_simq_alloc(SCB_MAX); sim = cam_sim_alloc(foo_action, foo_poll, "foo", foo, foo->unit, 1, SCB_MAX, devq); xpt_bus_register(sim, bus_id); xpt_create_path(&path, /*periph*/NULL, cam_sim_path(sim), CAM_TARGET_WILDCARD, CAM_LUN_WILDCARD); ... } 1) When I use "kldload foo.ko", the function foo_action will be called with the "ccb->ccb_h.func_code == XPT_PATH_INQ" only one time. And no function will be called by system any more. 2) When I compile this module into kernel, the function foo_action will be called with the func_code in order: XPT_PATH_INQ XPT_PATH_INQ XPT_PATH_INQ XPT_RESET_BUS XPT_PATH_INQ XPT_PATH_INQ XPT_PATH_INQ XPT_SCSI_IO detail log of situation 1: /kernel: foo: -> foo_pci_attach /kernel: foo: <-> foo_setup /kernel: foo: <-> foo_alloc /kernel: foo: <-> foo_reset /kernel: foo: <-> foo_init /kernel: foo: -> foo_attach /kernel: (noperiph:foo0:0:-1:-1): xpt_compile_path /kernel: (noperiph:foo0:0:-1:-1): xpt_setup_ccb /kernel: (noperiph:foo0:0:-1:-1): xpt_action /kernel: foo: -> foo_action /kernel: (noperiph:foo0:0:-1:-1): foo_action /kernel: foo: XPT_PATH_INQ /kernel: (noperiph:foo0:0:-1:-1): xpt_done /kernel: foo: <- foo_action /kernel: (xpt0:xpt0:0:-1:-1): xpt_async /kernel: (noperiph:foo0:0:-1:-1): xpt_release_path /kernel: (noperiph:foo0:0:-1:-1): xpt_compile_path /kernel: (noperiph:foo0:0:-1:-1): xpt_setup_ccb /kernel: (noperiph:foo0:0:-1:-1): xpt_action /kernel: foo: <- foo_attach /kernel: foo: <- foo_pci_attach detail log of 2: (displayed by dmesg) Copyright (c) 1992-2000 The FreeBSD Project. Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994 The Regents of the University of California. All rights reserved. FreeBSD 4.1-RELEASE #4: Tue Sep 5 15:27:11 CST 2000 bsdnewbie@TPA.MyHome.com:/usr/src/sys/compile/NEW2 Timecounter "i8254" frequency 1193182 Hz CPU: Pentium III/Pentium III Xeon/Celeron (666.45-MHz 686-class CPU) Origin = "GenuineIntel" Id = 0x683 Stepping = 3 Features=0x383f9ff<FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,SEP,MTRR,PGE,MCA,CMOV,PA T,PSE36,MMX,FXSR,XMM> real memory = 134217728 (131072K bytes) config> di pcic0 config> di sn0 config> di lnc0 config> di le0 config> di ie0 config> di fe0 config> di cs0 config> di bt0 config> di aic0 config> di aha0 config> di adv0 config> q avail memory = 126468096 (123504K bytes) Preloaded elf kernel "kernel" at 0xc03fd000. Preloaded userconfig_script "/boot/kernel.conf" at 0xc03fd09c. Pentium Pro MTRR support enabled md0: Malloc disk npx0: <math processor> on motherboard npx0: INT 16 interface pcib0: <Host to PCI bridge> on motherboard pci0: <PCI bus> on pcib0 pcib2: <VIA 82C598MVP (Apollo MVP3) PCI-PCI (AGP) bridge> at device 1.0 on pci0 pci1: <PCI bus> on pcib2 pci1: <NVidia Riva Ultra Vanta TNT2 graphics accelerator> at 0.0 irq 11 isab0: <VIA 82C596B PCI-ISA bridge> at device 7.0 on pci0 isa0: <ISA bus> on isab0 atapci0: <VIA 82C596B ATA66 controller> port 0xd000-0xd00f at device 7.1 on pci0 ata0: at 0x1f0 irq 14 on atapci0 ata1: at 0x170 irq 15 on atapci0 uhci0: <VIA 83C572 USB controller> port 0xd400-0xd41f irq 10 at device 7.2 on pc i0 usb0: <VIA 83C572 USB controller> on uhci0 usb0: USB revision 1.0 uhub0: VIA UHCI root hub, class 9/0, rev 1.00/1.00, addr 1 uhub0: 2 ports with 2 removable, self powered uhub0: port 1 power on failed, IOERROR uhub0: port 2 power on failed, IOERROR xl0: <3Com 3c905B-TX Fast Etherlink XL> port 0xd800-0xd87f mem 0xea020000-0xea02 007f irq 12 at device 10.0 on pci0 xl0: Ethernet address: 00:10:5a:75:79:6a miibus0: <MII bus> on xl0 xlphy0: <3Com internal media interface> on miibus0 xlphy0: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto foo0: <my_foo_dev> port 0xec00-0xec3f,0xe800-0xe803,0xe400-0xe407,0xe000-0xe003 ,0xdc00-0xdc07 mem 0xea000000-0xea01ffff irq 9 at device 11.0 on pci0 foo: -> foo_pci_attach foo: <-> foo_setup foo: <-> foo_alloc foo: <-> foo_reset foo: <-> foo_init foo: -> foo_attach foo: -> foo_action foo: XPT_PATH_INQ foo: <- foo_action foo: <- foo_attach foo: <- foo_pci_attach pcib1: <Host to PCI bridge> on motherboard pci2: <PCI bus> on pcib1 fdc0: <NEC 72065B or clone> at port 0x3f0-0x3f5,0x3f7 irq 6 drq 2 on isa0 fdc0: FIFO enabled, 8 bytes threshold fd0: <1440-KB 3.5" drive> on fdc0 drive 0 atkbdc0: <Keyboard controller (i8042)> at port 0x60,0x64 on isa0 atkbd0: <AT Keyboard> flags 0x1 irq 1 on atkbdc0 kbd0 at atkbd0 vga0: <Generic ISA VGA> at port 0x3c0-0x3df iomem 0xa0000-0xbffff on isa0 sc0: <System console> at flags 0x100 on isa0 sc0: VGA <16 virtual consoles, flags=0x300> sio0 at port 0x3f8-0x3ff irq 4 flags 0x10 on isa0 sio0: type 16550A sio1 at port 0x2f8-0x2ff irq 3 on isa0 sio1: type 16550A ppc0: <Parallel port> at port 0x378-0x37f irq 7 on isa0 ppc0: Generic chipset (NIBBLE-only) in COMPATIBLE mode ppi0: <Parallel I/O> on ppbus0 lpt0: <Printer> on ppbus0 lpt0: Interrupt-driven port plip0: <PLIP network interface> on ppbus0 ad0: 14649MB <IBM-DTLA-307015> [29765/16/63] at ata0-master using UDMA66 acd0: CDROM <ATAPI CD-ROM DRIVE 40X MAXIMUM> at ata1-master using PIO4 (noperiph:foo0:0:-1:-1): xpt_compile_path (noperiph:foo0:0:-1:-1): xpt_setup_ccb (noperiph:foo0:0:-1:-1): xpt_action foo: -> foo_action (noperiph:foo0:0:-1:-1): foo_action foo: XPT_PATH_INQ (noperiph:foo0:0:-1:-1): xpt_done foo: <- foo_action (noperiph:foo0:0:-1:-1): xpt_release_path Waiting 15 seconds for SCSI devices to settle (xpt0:foo0:0:-1:-1): xpt_compile_path (xpt0:foo0:0:-1:-1): xpt_setup_ccb (xpt0:foo0:0:-1:-1): xpt_action foo: -> foo_action (xpt0:foo0:0:-1:-1): foo_action foo: XPT_PATH_INQ (xpt0:foo0:0:-1:-1): xpt_done foo: <- foo_action (xpt0:foo0:0:-1:-1): xpt_setup_ccb (xpt0:foo0:0:-1:-1): xpt_action foo: -> foo_action (xpt0:foo0:0:-1:-1): foo_action foo: XPT_RESET_BUS foo: <-> foo_reset (xpt0:foo0:0:-1:-1): xpt_done foo: <- foo_action (xpt0:foo0:0:-1:-1): xpt_finishconfig (xpt0:foo0:0:-1:-1): xpt_action (xpt0:foo0:0:-1:-1): xpt_scan_bus (xpt0:foo0:0:-1:-1): xpt_setup_ccb (xpt0:foo0:0:-1:-1): xpt_action foo: -> foo_action (xpt0:foo0:0:-1:-1): foo_action foo: XPT_PATH_INQ (xpt0:foo0:0:-1:-1): xpt_done foo: <- foo_action (xpt0:foo0:0:1:0): xpt_compile_path (xpt0:foo0:0:1:0): xpt_setup_ccb (xpt0:foo0:0:1:0): xpt_action (xpt0:foo0:0:1:0): xpt_scan_lun (xpt0:foo0:0:1:0): xpt_setup_ccb (xpt0:foo0:0:1:0): xpt_action foo: -> foo_action (xpt0:foo0:0:1:0): foo_action foo: XPT_PATH_INQ (xpt0:foo0:0:1:0): xpt_done foo: <- foo_action (probe0:foo0:0:1:0): xpt_compile_path (probe0:foo0:0:1:0): xpt_setup_ccb (probe0:foo0:0:1:0): xpt_action (probe0:foo0:0:1:0): xpt_setup_ccb (probe0:foo0:0:1:0): xpt_action (probe0:foo0:0:1:0): xpt_setup_ccb (probe0:foo0:0:1:0): xpt_action foo: -> foo_action (probe0:foo0:0:1:0): foo_action foo: XPT_PATH_INQ (probe0:foo0:0:1:0): xpt_done foo: <- foo_action (probe0:foo0:0:1:0): xpt_schedule (probe0:foo0:0:1:0): xpt_setup_ccb (probe0:foo0:0:1:0): probestart (probe0:foo0:0:1:0): xpt_action (probe0:foo0:0:1:0): . CDB: 12 0 0 0 24 0 foo: -> foo_action (probe0:foo0:0:1:0): foo_action foo: XPT_SCSI_IO (probe0:foo0:0:1:0): xpt_done foo: <- foo_action (probe0:foo0:0:1:0): camisr(probe0:foo0:0:1:0): probedone (xpt0:foo0:0:1:0): xpt_done (probe0:foo0:0:1:0): xpt_free_path (probe0:foo0:0:1:0): xpt_release_path (xpt0:foo0:0:1:0): camisr(xpt0:foo0:0:1:0): xpt_scan_bus (xpt0:foo0:0:1:0): xpt_setup_ccb (xpt0:foo0:0:1:0): xpt_action (xpt0:foo0:0:1:0): xpt_free_path (xpt0:foo0:0:1:0): xpt_release_path (xpt0:foo0:0:-1:-1): xpt_done (xpt0:foo0:0:-1:-1): camisr(xpt0:foo0:0:-1:-1): xpt_finishconfig (xpt0:foo0:0:-1:-1): xpt_free_path (xpt0:foo0:0:-1:-1): xpt_release_path (noperiph:xpt0:0:-1:-1): xpt_compile_path (noperiph:xpt0:0:-1:-1): xpt_setup_ccb (noperiph:xpt0:0:-1:-1): xpt_action (noperiph:xpt0:0:-1:-1): xpt_free_path (noperiph:xpt0:0:-1:-1): xpt_release_path (noperiph:xpt0:0:-1:-1): xpt_compile_path (noperiph:xpt0:0:-1:-1): xpt_setup_ccb (noperiph:xpt0:0:-1:-1): xpt_action (noperiph:xpt0:0:-1:-1): xpt_free_path (noperiph:xpt0:0:-1:-1): xpt_release_path (noperiph:xpt0:0:-1:-1): xpt_compile_path (noperiph:xpt0:0:-1:-1): xpt_setup_ccb (noperiph:xpt0:0:-1:-1): xpt_action (noperiph:xpt0:0:-1:-1): xpt_free_path (noperiph:xpt0:0:-1:-1): xpt_release_path (noperiph:xpt0:0:-1:-1): xpt_compile_path (noperiph:xpt0:0:-1:-1): xpt_setup_ccb (noperiph:xpt0:0:-1:-1): xpt_action (noperiph:xpt0:0:-1:-1): xpt_free_path (noperiph:xpt0:0:-1:-1): xpt_release_path Mounting root from ufs:/dev/ad0s2a I wanna to know why 1) and 2) runs in different way? How can I made 1) run just as that of 2)? I notice that in the source code of FreeBSD 4.1, aha is writen as a loadable module while ahc is writen to compiled into the kernel, why? Thanks in Advance, Best Regards, bsdnewbie Sep 5, 2k _________________________________________________________________________ Get Your Private, Free E-mail from MSN Hotmail at http://www.hotmail.com. Share information about yourself, create your own public profile at http://profiles.msn.com. To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-scsi" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?F241KSKVyqIyxJBU8v200004c1d>