Steve, I noticed that below two sentances:Your first test:
==> /[EMAIL PROTECTED],0/pci8086,[EMAIL PROTECTED]/[EMAIL PROTECTED],[EMAIL PROTECTED]/[EMAIL PROTECTED],0 That meas target0 lun0 of [EMAIL PROTECTED],[EMAIL PROTECTED] is a disk, so the following command sequence issued by sd driver. But second time, ==> ses0 is /[EMAIL PROTECTED],0/pci8086,[EMAIL PROTECTED]/pci1103,[EMAIL PROTECTED]/[EMAIL PROTECTED],0 That means target0 lun0 of *pci1103,[EMAIL PROTECTED] is a enclosure device. The following command sequence issued by ses driver. As I said before, solaris configuration is a multi-threading, so the any of your two instances(two channel) can be configured firstly. Actually, the squence of configuring two instances([EMAIL PROTECTED],[EMAIL PROTECTED] , *pci1103,[EMAIL PROTECTED]) is random. I don't see any problem here. Javen Steve Chang 写道: > Javen, > Here is a question - > Two disks are connected on HBA channels(channel 0 & 1) and > run two times (reboot system and start the test) but got > two different results. > > case I: kernel processes ID0 first then ID1 scanning > ID0 cmd flow ==> 12 -12 -00 -5a -46 -46 -1b -25 -25 -00 -1b -00 -1a > -5e > ==> sd1 at hptiop0 > ==> /[EMAIL PROTECTED],0/pci8086,[EMAIL > PROTECTED]/[EMAIL PROTECTED],[EMAIL PROTECTED]/[EMAIL PROTECTED],0 > Then ID1 cmd flow ==> 12 -12 -00 -5a -46 -46 -1b -25 -25 -00 -1b -00 -1a > -5e > ==> sd2 at hptiop0 > ==> /[EMAIL PROTECTED],0/pci8086,[EMAIL > PROTECTED]/[EMAIL PROTECTED],[EMAIL PROTECTED]/[EMAIL PROTECTED],0 > > > Case II: kernel processes ID0, ID1 ,, ID15 then back to ID0 again > Cmd flow [cmd(id)] ==> 12(0) --12(1) --12(2) ... -12(15) > Then cmd(id) ==> 12(0) --12(0) --1c(0) > ==> ses 0 at hptiop0:target0/lun0 > ==> ses0 is /[EMAIL PROTECTED],0/pci8086,[EMAIL > PROTECTED]/pci1103,[EMAIL PROTECTED]/[EMAIL PROTECTED],0 > > > Q: Why same procedure but can't get a consistent result during test? > Does it mean the return value of inquiry(0x12) incorrect? > > > Regards, > Steve > > > -----Original Message----- > From: Javen Wu [mailto:[EMAIL PROTECTED] > Sent: Thursday, March 27, 2008 6:45 PM > To: Steve Chang > Cc: driver-discuss@opensolaris.org > Subject: Re: [driver-discuss] SCSI HBA driver debugging questions > > The question is whether you remove the interrupt in your detach routine? > I don't know which ddi interface you used. > If you used ddi_intr_add_handler() in your attach routine, did you call > ddi_intr_remove_handler() in your detach routine? > > Javen > > Steve Chang wrote: > >> Javen, >> During debugging, I found some issue not related to my driver >> >> (1) use the following to remove previous attached driver >> #rem_drv mydriver >> (2) Then use the following to add driver immediately >> #add_drv -i '"pci1103,0"' -c scsi mydriver >> (Where pci1103,0 is HBA PCI ID) >> >> The kernel go panic immediately, and from the trace, kernel just >> dispatches the interrupt to my ISR which is a NULL pointer so >> kernel panic. How come kernel doestn't start from _init() procedure >> and still remember my ISR entry point? >> >> Does it mean that "#rem_drv mydriver" can't clean up attached >> Driver? >> >> >> Thanks >> Steve >> >> >> >> -----Original Message----- >> From: Javen Wu [mailto:[EMAIL PROTECTED] >> Sent: Thursday, March 27, 2008 1:35 AM >> To: Steve Chang >> Cc: driver-discuss@opensolaris.org >> Subject: Re: [driver-discuss] SCSI HBA driver debugging questions >> >> Setup serial console: >> >> 1. connect the serial ports between host and client(the system with your >> debug version driver). >> 2. change client side: >> change /boot/solaris/bootenv.rc: change the console from 'text' to 'ttya' >> example: >> setprop console 'ttya' >> I assume you connect ttya of the client. >> >> 3. change host side: /etc/remote, and add one existing line or add a >> line. below is a example: >> hardwire:\ >> :dv=/dev/term/a:br#9600:el=^C^S^Q^U^D:ie=%$:oe=^D: >> >> 4. change grub menulist of client to redirect GRUB: >> add below two sentence to your /boot/grub/menu.lst: >> >> serial --unit=0 --speed=9600 >> terminal serial >> >> >> Above /dev/term/a means I connect to ttya of host side. >> 5. on your host terminal run: "tip hardwire". >> >> you can enable kmdb by default by add -k option to your grub menulist like: >> #---------- ADDED BY BOOTADM - DO NOT EDIT ---------- >> title Solaris Express Community Edition snv_84 X86 >> kernel$ /platform/i86pc/kernel/$ISADIR/unix -k >> module$ /platform/i86pc/$ISADIR/boot_archive >> #---------------------END BOOTADM-------------------- >> >> >> Good luck! >> Javen >> >> Steve Chang wrote: >> >> >> >>> Javen, >>> Can you instruct me how to set up kmdb and serial connection? >>> I can't figure out the instruction in doc "Writing Device Driver" >>> >>> My platform is "x86pc" >>> (1) During booting, I select "e" and change 1st item to boot >>> with Kmdb with "-k" but the system boot up maintenance >>> mode. How to configure it as you said? >>> >>> (2) As for setting serial port, on host side, I add "ttya -debug" >>> And enable it with "tip debug". On target side, I use "eeprom >>> Output-device=ttya" but no response with reboot or after panic >>> To get output on "host system" >>> >>> Thanks >>> >>> Steve >>> >>> >>> >>> -----Original Message----- >>> From: Javen Wu [mailto:[EMAIL PROTECTED] >>> Sent: Monday, March 24, 2008 2:16 AM >>> To: Steve Chang >>> Cc: driver-discuss@opensolaris.org >>> Subject: Re: [driver-discuss] SCSI HBA driver debugging questions >>> >>> Steve, >>> >>> Firstly, I saw several panic in your attached sys-log. The panics were >>> caused most likely by your driver. >>> >>> I cannot understand what's your meaning about "kernel stop" "Locks-up"? >>> Did you mean "Panic" and "Hang"? >>> >> >From your syslog, I cannot give any comments. But I can give you some >>> suggestion for debugging your HBA driver. >>> >>> 1. Before your driver get stable, please don't copy you debug version >>> driver to /kernel/drv or /usr/kernel/drv >>> because once your driver is with panic bug, you will panic again and >>> again which prevent you booting up system successfully. >>> So please just create a link under /kernel/drv/ or /usr/kernel/drv/ >>> which point to a binary locates at /tmp. Before you load your driver, >>> copy your binary to /tmp. The contents under directory "/tmp" cannot >>> across reboot, that means once panic causes reboot, the link points to a >>> NULL file locates /tmp after reboot, you can boot your system > successfully. >>> 2. Please enable kmdb during debug. you can use -k option to boot your >>> system. Once meet panic, the system would freeze and you can do live >>> analyze or save core dump for post-analyze. >>> >>> 3. In case a hang problem, you can try break the system enter into kmdb >>> mode or login to the machine by ssh from another machine and run "mdb >>> -KF". Then force save a core dump or do live debugging to check current >>> thread list and see where the system hang. "$threadlist" is very helpful >>> to show threads and stack of the threads. >>> >>> Hope it helps your debugging. >>> >>> Cheers >>> Javen >>> >>> >>> >>> Steve Chang wrote: >>> >>> >>> >>> >>> >>>> Dear Javen, >>>> I've struggled on debugging for a while. Can you point out what's wrong >>>> through the >>>> attached file(through var/adm/messages)? >>>> >>>> My target system is a dual Intel Xeon server board platform and install a >>>> Solaris Developer Extension version (09/07). During debugging, >>>> (1) I put mydriver to /usr/kernel/drv/amd64 and mydriver.conf to >>>> /usr/kernel/drv >>>> (2) Use "prtconf" to check the HBA PCI id which I found our HBA >>>> >>>> >> "pci1103,0" >> >> >>>> (driver not attached) >>>> (3) Install driver (as a superuser) >>>> #add_drv -i '"pci1103,0"' -c scsi mydriver >>>> (4) Then system locks up >>>> (5) Fix the kernel and check /var/adm/messages >>>> >>>> There are two text files in this attached which run the same procedures >>>> >>>> >> two >> >> >>>> times >>>> But get the different result. >>>> 1. DEB - the 1st time running >>>> Kerenl stops after ID=9 scsi_hba_probe() return ?? >>>> 2. DEB - fix the system and run the same procedure again >>>> Kernel send ID=14 directly and locks up after ID=15 >>>> scsi_hba_probe() return ?? >>>> >>>> What's wrong of the kernel? Is it caused by bad kernel or my code? If I >>>> >>>> >>>> >>>> >>> keep >>> >>> >>> >>> >>>> fixing the >>>> kernel and retry again, I'll get the different result lock-up again. It > is >>>> bothering me >>>> since I cannot debug my driver. How to make it more stable to run the >>>> debugging? >>>> >>>> Thanks >>>> >>>> Steve Chang >>>> HighPoint Technologies, Inc. >>>> 408-240-6115 >>>> >>>> >>>> >>>> >>>> >>>> >>>> >>> >>> >>> >> >> > _______________________________________________ driver-discuss mailing list driver-discuss@opensolaris.org http://mail.opensolaris.org/mailman/listinfo/driver-discuss