[Search for users] [Overall Top Noters] [List of all Conferences] [Download this site]

Conference vaxaxp::vmsnotes

Title:VAX and Alpha VMS
Notice:This is a new VMSnotes, please read note 2.1
Moderator:VAXAXP::BERNARDO
Created:Wed Jan 22 1997
Last Modified:Fri Jun 06 1997
Last Successful Update:Fri Jun 06 1997
Number of topics:703
Total number of notes:3722

292.0. "Any example OpenVMS Alpha PCI DMA driver? " by CSC32::KING () Thu Mar 06 1997 13:42

    
    I have a customer that is having some difficulty writing a 
    device driver in C for a PCI device on an Alphastation 255,
    using DMA. The problem is in setting up the scatter/gather
    map for DMA using the routines IOC$ALLOC_CRCTX, IOC$ALLOC_CNT_RES
    and IOC$LOAD_MAP. Is there an example available anywhere? 
    
    Peter, CSC Colorado, internals/drivers team
T.RTitleUserPersonal
Name
DateLines
292.1STAR::LEWISThu Mar 06 1997 14:243
    There's not a specific driver example, but there are example
    calls and discussion in the "Writing OpenVMS Device Drivers in C"
    book. Does your customer have a copy of that book?
292.2Source Listings Available...XDELTA::HOFFMANSteve, OpenVMS EngineeringThu Mar 06 1997 16:554
: Is there an example available anywhere? 

   The OpenVMS source listings are available for purchase on CD-ROM...

292.3What's the problem?STAR::CROLLFri Mar 07 1997 09:039
Perhaps the customer could give us some specifics about the problems he or she
is having?  Is it simply a "how does this work" kind of question, or are there
specific problems he or she is running into?

It's interesting for us to know this stuff, as it may lead to improvements in
either the book or the code.  Besides, with more specific questions we may even
be able to help answer them....

John
292.4Customer e-mailBSS::JILSONWFH in the Chemung River ValleyFri Mar 07 1997 10:02129
Here is the customer's e-mail concerning his problem.  Probably not enough 
context and I believe the customer isn't passing some value correctly.

Jilly


Attached is a copy of the dma load map routine which I am debugging.
As listed here, the exe_std$readchk and exe_std$read are not included.
This version fails at the ioc$load_map call since irp->svapte was zero.

When adding the exe_std$readchk and exe_std$read to fill the irp values,
(prior to ioc$alloc_crctx) the call to ioc$alloc_cnt_res fails with
INVEXCEPTN Exception while above ASTDEL due to access violations at :
IOC$INIT_IO_BRIDGE_C+4FC inst STL R23(R24) where
R23=FFFFFFFF.80CEE350 & R24=00000000.00002518 .
Access violation loc 0000000000002518.
(In module SYS$CPU_ROUTINES_0D02 offset 2414.)

Attachment: dma mapping portion of the **** memory driver.
=============8<--------(cut here)-------->8=================
   int  em$dma_map (IRP *irp, PCB *pcb, EM_UCB *ucb, CCB *ccb )
{
  struct epci_dma *epcip = (struct epci_dma *)irp->irp$l_qio_p1;
  int status;
  ADP *adp;
  CRB *crb;
  VEC *vec;
  IDB *idb;
  MCJ *mcj;
  CRCTX *crctx;
  char *qioh;

#ifdef DEBUG
 extern void ini$brk(void);
#endif

  struct iohandle *iobar0;             /*declare ptr to ioh for bar0    */
  struct iohandle *iobar1;             /*declare ptr to ioh for bar1    */
  struct iohandle *iobar2;             /*declare ptr to ioh for bar2    */
  struct iohandle *iobarrom;           /*declare ptr to ioh for barrom  */

  crb = ucb->ucb$r_ucb.ucb$l_crb;
  vec = &crb->crb$l_intd;
  idb = vec->vec$l_idb;
  mcj = idb->idb$q_csr;
  qioh = &mcj->mcj$q_entries;
  iobar0 = qioh;
  qioh = qioh+16;
  iobar2 = qioh;
  adp =  idb->idb$ps_adp;

  if (ucb->ucb$l_em_type != UCB$K_NONE)
    return (call_abortio (irp, pcb, (UCB *)ucb, EIO) );

 /*             STORE THE PARTITION PARAMETERS                          */

  ucb->ucb$l_dma_size = epcip->pci_dma_size;
  ucb->ucb$l_dma_offset = epcip->pci_dma_offset;

 /* allocate crctx (note that third parameter is optional  */


   ioc$alloc_crctx ( adp->adp$l_crab, &(UCB *)ucb->ucb$l_crctx, 0 );

#ifdef DEBUG
ini$brk();
#endif

 /* fill it up */

   crctx->crctx$l_item_cnt = ( ucb->ucb$l_dma_size / PAGESIZE + 2 ) *2 ;

 /* *2 is for read/write */

   crctx->crctx$l_callback = 0;

 /* count the resources */

#ifdef DEBUG
ini$brk();
#endif
     status = ioc$alloc_cnt_res ( adp->adp$l_crab,
                                   &(UCB *)ucb->ucb$l_crctx,
                                   crctx->crctx$q_context1,
                                   crctx->crctx$q_context2,
                                   crctx->crctx$q_context3);

  if (status == 0)
    return (call_abortio (irp, pcb, (UCB *)ucb, EIO) );


 /* should check for crctx$v_item_valid in crctx$l_flags
  *      and item # in crctx$l_item_num
  *        else status = insfmemreg
  */


/* here's the UNIX code ...
  flags = (DMA_CONTIG | DMA_OUT | DMA_SLEEP | DMA_ALL);
  status = dma_map_alloc((u_long)epcip->pci_dma_size, ctrlr,
                        &ucb->ucb_dma_whan,flags);
 */
 /* load 'em up */

   ioc$load_map ( adp,
                  (UCB *)ucb->ucb$l_crctx,      /* maybe should update for read
*/
                  irp->irp$l_svapte,
                  epcip->pci_write_addr,
                  (UCB *)ucb->ucb$l_dma_whan);


 /* now, do it again for read (hopefully already allocated )  */


 /* load 'em up */

   ioc$load_map ( adp,
                  (UCB *)ucb->ucb$l_crctx,
                  irp->irp$l_svapte,
                  *epcip->pci_read_addr,
                  (UCB *)ucb->ucb$l_dma_rhan);

  ucb->ucb$l_em_type = UCB$K_DMA;
#ifdef DEBUG
ini$brk();
#endif
  return ( call_finishio (irp, (UCB *)ucb, SS$_NORMAL, 0) );
}
292.5STAR::LEWISFri Mar 07 1997 15:534
    It looks like the  failure is happening during the removal of a
    descriptor, which implies to me that all the resources are nearly used
    up or badly fragmented. It does appear that more data is needed.
    Sue
292.6CSC32::KINGTue Mar 11 1997 15:2853
    
    Thank you for the help so far.
    
    This customer does not have the book, just the developer's guide and 
    reference manual on CD. I've been faxing him some pages from the book, 
    and helping him to use SDA in hopes of helping/advising him, but 
    letting him do all his own work. He does not have another system to 
    be able to use the System Code Debugger, and the code does not fail 
    when he single steps using XDELTA. I did suggest he might want to get 
    the source listings. He appears to be making some progress and here is 
    the latest mail he sent me;
    
    >
    > Research is showing me that the call to allocate a counted resource
    > context block (IOC$ALLOC_CRCTX) is returning a successful status while
    > providing a pointer causing the memory access violation when attempting
    > to allocate counted resources (IOC$ALLOC_CNT_RES).
    
    > Half the time the symptom is to crash/panic and perform a selective
    > memory dump. When this is the case, the system is crashing with a
    > "INVEXCEPTN, Exception while above ASTDEL" due to the access violation.
    > The other half of the time the call apparently succeeds but is loading
    > the maps with invalid values and attempts to use them cause the screen
    > turn yellow an spew "Avanti machine check" messages and stack dumps
    > followed by a machine init sequence, which I presume means I overwrote
    > PCI board space owned by the graphics card. There does not appear to
    > be any method of debugging this sort of fault since nothing gets saved
    > anywhere.
    
    > Using the SDA/ANALYZE utility I've been able to verify the table
    > linkages between ADP, CRAB, IDB, etc. and find they are all where 
    > I think they belong. Due to the nature of dynamically loaded drivers, 
    > (which I am loading via mc sysman io connect commands) the addresses 
    > are changing for each run. This makes the debugging a little more 
    > compicated as I must maintain records unique to each reboot.
    
    > Although not thoroughly defeated, I would appreciate any suggestions
    > you can make as to why the call to IOC$ALLOC_CRCTX is not working. I 
    > am calling it thusly:
    
    > ioc$alloc_crctx ( adp->adp$l_crab, &(UCB *)ucb->ucb$l_crctx, 0 );
    > if (status == 0) return (call_abortio (irp, pcb, (UCB *)ucb, EIO) );
    
    
    He has not saved any crash dumps for me to analyze, but from the PC, 
    the system is crashing in the APECS_SUPPORT portion of SYSLOA.
    Any further assistance appreciated.
    
    Peter
    
    
    
    
292.7A fork lock index of 0 is not goodCSC64::BLAYLOCKIf at first you doubt,doubt again.Tue Mar 11 1997 16:3428
Besides passing the 3rd parameter incorrectly, there is nothing
too wrong with the call, presuming the crab address is correct.
He is also not checking the status correctly; you get back
either SS$_NORMAL or SS$_INSFMEM from the call, not 0.

His call to ioc$alloc_crctx should be coded as


 status = ioc$alloc_crctx ( adp->adp$l_crab, &(UCB *)ucb->ucb$l_crctx);

OR

 status = ioc$alloc_crctx ( adp->adp$l_crab, &(UCB *)ucb->ucb$l_crctx,
			ucb->ucb$b_flck); // Or just pass spl$c_iolock8

 if (!$VMS_STATUS_SUCCESS(status)) 
         return (call_abortio (irp, pcb, (UCB *)ucb, EIO) );


For what it costs Digital to debug his code, we could have bought
him a book.  This call is documented correctly in the Device Support
Manual. You could argue that the '[' is on the wrong side of the
comma in the

	,[fleck_index]

description of the call.
292.8STAR::LEWISThu Mar 13 1997 11:414
    I have just been reminded that you can't call ioc$map_io during
    unit init -- IPL must be at 8 or below. Is he calling ioc$map_io
    during unit init?
    
292.9Fun With IPLXDELTA::HOFFMANSteve, OpenVMS EngineeringThu Mar 13 1997 15:0810
:    I have just been reminded that you can't call ioc$map_io during
:    unit init -- IPL must be at 8 or below. Is he calling ioc$map_io
:    during unit init?

   On OpenVMS VAX, there are few (no?) repurcussions of dropping IPL in
   the unit init routine, as it returned back to (on VAX) SYSGEN, which
   just dropped IPL directly down.  (This technique was used in at least 
   one OpenVMS-supported device driver.)  Is this, uh, technique still
   feasible on OpenVMS Alpha?  

292.10CSR_MAPPING is what's neededSTAR::LEWISThu Mar 13 1997 15:527
    re: .9
    Not sure about having drivers drop IPL, however there is a way to get
    the I/O mapped. There's a CSR_MAPPING routine option in the ddt that
    provides the right environment. It's all on page 46 of the Writing
    OpenVMS device drivers in C book. 
    Sue
    
292.11Dropping IPL in Unit Init.....STAR::CROLLFri Mar 14 1997 13:4117
Generally speaking, you can fork in unit init to the driver's fork IPL routine.
After the fork block is set up, you return to AUTOGEN (LOAD_DRIVER, actually),
which shortly thereafter drops IPL back to 0, permitting the fork routine to run.

You have to be careful synchronizing things, however, since there's no guarantee
that the driver's fork routine will actually execute "shortly after" the fork
block is set up.  It's possible that some other fork thread will execute ahead
of you and attempt to issue I/O before the unit init routine has executed.  Or a
thread (at any IPL) on some other processor.  One way to avoid this is to not
set the online bit until all unit init is complete, and to make sure the start
I/O routine checks the online state before doing anything interesting.  Online
is checked somewhere in the QIO path (don't remember where), but if other fork
threads can issue I/O to your driver, you have to watch out for this.

Digital drivers frequently fork in unit init; the reason is that much of the
initialization that needs to be done can't be done at IPL 31.  You just have to
be aware of the potential synchronization issues.
292.12CSC32::KINGWed Mar 19 1997 18:0981
    
    I was out a few days, and here are the customer's latest replies. 
    We still appreciate all the help, and as mentioned in an earlier 
    reply, these may help show what type of problems a typical customer 
    may encounter. 
    
    Peter
    ______________________
    (customer replies)
    
    FYI: I seem to have found the problem with IOC$ALLOC_CRCTX.
    
    Partly the problem was that I was not providing a lock request such as
    status = ioc$alloc_crctx ( adp->adp$l_crab, &crctx, SPL$C_IOLOCK8 );
    
    The other part of the problem is that when I place an XDELTA breakpoint
    request ("ini$brk") between the IOC$ALLOC_CRCTX and the subsequent
    IOC$ALLOC_CNT_RES I always get an access fault after telling XDELTA to
    proceed (;P). It's pretty frustrating when you cannot trust your
    debugger.
    
    At this point I can successfully load maps (according to status
    responses).
    Hopefully I'm loading them correctly. The "next bug" I come accross is
    another access violation in the start io routine, but is also when I
    have everything breakpointed with "ini$brk" requests. (Also failing in
    INIT_IO_BRIDGE_C, where I was failing before.)
    
    _____________________
    
    Same problem, different area. It appears that INIT_IO_BRIDGE_C is being
    called with a zero argument in R5, which causes a subsequent LDQ
    R18(R5)
    to have an access violation in the same module when I'm trying to do
    IOC$WRITE_IO calls to access on-board PCI registers. Oddly enough the
    call is exactly the same as another call performed previously in the
    code, and it appears not to be directly relate to the code I'm using.
    As I move calls to XDELTA (ini$brk();) around I'm getting the error on
    different IOC$WRITE_IO requests.
    
    Is there a way I can set up a memory barrier from the C language? Some
    compilers will allow inline macro code, and when dealing with devices
    it's sometimes best to ensure bus access is sequential.
    (In other words how can I embed an inline "mb" statement into a c
    program?)
    
    __________________
    
    I bet you thought I'd gotten somewhere, but alas...
    
    With your help I have gotten the IOC$ALLOC_CRCTX working to where I
    don't get the access violations and returning SS$_NORMAL, but after 
    that I call IOC$ALLOC_CNT_RES and IOC$LOAD_MAP. Both return SS$_NORMAL. 
    (So far so good, right?) Unfortunately the "dma_address_ref" supplied 
    in the IOC$LOAD_MAP call is zero following the call, which causes all 
    kinds of grief and aggrevation at a later date.
    
    ... not much later, but not right then...
    
    A section of code follows to demonstrate how I call it:
    
       boff = ((*(char *)epcip->pci_write_addr) % PAGESIZE);
    
       status = ioc$load_map ( adp,
                    (UCB *)ucb->ucb$l_crctx,
                    irp->irp$l_svapte,
                    boff,
                    &(UCB *)ucb->ucb$l_dma_whan);
    
       if (status != SS$_NORMAL)
          return (call_abortio(irp, pcb, (UCB*)ucb, EIO));
    
       if((UCB *)ucb->ucb$l_dma_whan == 0 )
          return (call_abortio(irp, pcb, (UCB*)ucb, EIO));
    
    My problem is two-fold actually. I have commented out the check for the
    address being zero. The reason I did was the call_abortio never returns
    to the caller of $QIO. This causes the process to hang until
    interrupted by a ^C. Any thoughts on how to fix that would also be 
    helpful.
    
292.13CSC64::BLAYLOCKIf at first you doubt,doubt again.Mon Mar 24 1997 18:3232
>    My problem is two-fold actually. I have commented out the check for the
>    address being zero. The reason I did was the call_abortio never returns
>    interrupted by a ^C. Any thoughts on how to fix that would also be 
>    helpful.

   
Not knowing what his call to 'call_abortio' is, there are some hints
as to why this fails.  Since he is able to type ^C, his code is
not hung in kernel mode itself but in user mode.  That would indicate
that either the EFN is not getting set or if he is using an IOSB,
it is not getting set to a non-zero value.  So in this case, what is
'EIO' defined as; hopefully not zero?

Not having a platform type, in at least one of them (in [CPU402.LIS])
if your call to IOC$ALLOC_CNT_RES did not do anything (ie failed)
then the load map call will return 0 in the dma_address_ref parameter
because of the zeros in the crctx.

>    IOC$WRITE_IO calls to access on-board PCI registers. Oddly enough the
>    call is exactly the same as another call performed previously in the
>    code, and it appears not to be directly relate to the code I'm using.
>    As I move calls to XDELTA (ini$brk();) around I'm getting the error on
>    different IOC$WRITE_IO requests.

Static data? Stack overwrite? Data not properly saved across fork boundaries? 
How does INI$BRK fail; what is the failure specifically?

>    Is there a way I can set up a memory barrier from the C language? Some
>    compilers will allow inline macro code, and when dealing with devices

Check out the file c_asm.h for 'asm("mb");' or use HELP CC Language Builtin
for __MB (and subsequently builtin.h).
292.14BSS::JILSONWFH in the Chemung River ValleyThu May 15 1997 13:19379
Our customer has come back with one last problem.  In using his driver he 
is intermittently receiving the following machine check.  He claims that it 
is failing in his DMA subroutine he has off the Startio routine.  His test 
is to loop thru the following about 10,000 times and it fails within 700 
times thru the loop.

Open a channel, Write, Read, Compare, Close the channel

He is saving all of his arguments to IOC$LOADMAP, IOC$READIO & IOC$WRITEIO 
withing the driver and has examined them in the dump and they are all 
correct.  He has access to a PCI bus analyzer and has not seen anything 
unusual on the bus at the time of the machine check.

Any good advise as to where he can go from here?

Jilly


******************************** ENTRY    1 ******************************** 


Logging OS                        1. OpenVMS 
System Architecture               2. Alpha 
OS version                           E7.1     
Event sequence number            41. 
Timestamp of occurrence              14-MAY-1997 14:43:03   
Time since reboot                    0 Day(s) 1:03:56 
Host name                            OVMS1    

System Model                         AlphaStation 255/233 

Entry type                        2. Machine Check  

CPU Minor class                   1. Machine check (670 entry) 

Byte Count                    x02E8 
Processor Specific Offset x00000110 
System Specific Offset    x000001A0 
PAL Error Type Code       x00000205 
PAL Frame Revision        x00000001 
- ALPHA CHIP REGISTERS -               
PALTEMP1                  x0000000000000000 
PALTEMP2                  x0015C4F800000004 
PALTEMP3                  xFFFFFFFF80E388C0 
PALTEMP4                  xFFFFFFFF80DDEE00 
PALTEMP5                  x0000000000000001 
PALTEMP6                  xFFFFFFFF80CC0128 
PALTEMP7                  x0000000000004200 
PALTEMP8                  x0000000000000400 
PALTEMP9                  x0000000000000803 
PALTEMP10                 x0000002B52B93EA8 
PALTEMP11                 x0000000000000000 
PALTEMP12                 x0000000000008000 
PALTEMP13                 xFFFFFFFF80C3FFF0 
PALTEMP14                 xFFFFFFFF800B2144 
PALTEMP15                 x0000000000000018 
PALTEMP16                 x0000000000000303 
PALTEMP17                 x000000000000000D 
PALTEMP18                 x0000000000000000 
PALTEMP19                 x0000000000000000 
PALTEMP20                 x00000000000F0000 
PALTEMP21                 x00003FFFFFFFFFFF 
PALTEMP22                 x0000000000000040 
PALTEMP23                 x0000000000000008 
PALTEMP24                 xFFFFFFFF80D0E000 
PALTEMP25                 x0000000000090000 
PALTEMP26                 x000000007FFA2000 
PALTEMP27                 x0000000000000000 
PALTEMP28                 x000000000363A000 
PALTEMP29                 xFFFFFFFC00000000 
PALTEMP30                 x0000000000390000 
PALTEMP31                 x0000000003638080 
Exception Address Reg     xFFFFFFFF80058E22 
                                     Exception Address Reg Provides Information 

                                        About The Most Recent Exception. 
                                     Address Points to Native-Mode Instruction 
                                     If Machine Check or Math Trap Exception, 
                                        PC in Exception Address is Correct. 
                                     Last Exception Addr PC:  x3FFFFFFFE0016388 

Exception Summary Reg     x7610003677FF0033 
                                     Last Exception:  Division by Zero 
                                                      Floating Point Overflow 
                                     Exception Mask Reg IPR Window Bit Set 
Exception Mask Reg        x408035244A003690 
                                     Exception Operation Result in Register I4 
                                     Exception Operation Result in Register I7 
                                     Exception Operation Result in Register I9 
                                     Exception Operation Result in Register I10 

                                     Exception Operation Result in Register I12 

                                     Exception Operation Result in Register I13 

                                     Exception Operation Result in Register I25 

                                     Exception Operation Result in Register I27 

                                     Exception Operation Result in Register I30 

                                     Exception Operation Result in Register F2 
                                     Exception Operation Result in Register F5 
                                     Exception Operation Result in Register F8 
                                     Exception Operation Result in Register F10 

                                     Exception Operation Result in Register F12 

                                     Exception Operation Result in Register F13 

                                     Exception Operation Result in Register F23 

                                     Exception Operation Result in Register F30 

Icache Ctrl & Status Reg  x0015C4F800000004 
                                     Performance Counters Disabled 
                                     Empty Wrt Buffer Before Issuing Next Inst 
                                     Branch Prediction Selection: Not Taken 
                                     JSR Stack is Disabled 
                                     Instructions Can Only Single Issue 
                                     If Not in PALmode, Executing Reserved Inst 

                                        Opcode Will Result in OPCDEC Exception. 

                                     Super Page Istream Memory Mapping Disabled 

                                     Float Point Inst Will Cause FEN Exception 
                                     Icache Addr Space Numb:  x0000000000000000 

PALcode Base Address Reg  x0000000000008000 
                                     PALcode Base Address:  x0000000000000002 
Hardware Int Enable Reg   x00000001FFC014E0 
                                     CRD Error Interrupts Disabled 
                                     CPU Hrdw Interrupts Enabled Irq_h Pins 0,2 

                                     CPU Hrdw Interrupts Enbld Irq_h Pins 3,4,5 

                                     Performance Cntr 0 & 1 Interrupts Disabled 

                                     Serial Line Interrupts Disabled 
                                     Software Interrupts Enbld Level 9,10,11,12 

                                     Software Interrupts Enbld Levels 13,14,15 
                                     AST Interrupts Enbld in Kernel, Executive, 

                                        Supervisor, and User Mode. 
Hardware Int Request Reg  x0000000000000000 
                                     NO Hrdw Int Req With Companion Enable Set 
                                     NO Softw Int Req With Companion Enable Set 

                                     NO AST Int Req With Companion Enable Set 
Memory Management CSR     x0000000000005000 
                                     MMCSR Valid Only on Mem Mgt Err, DTB Miss, 

                                        D-Stream Fault, Dcache Parity Error. 
                                     Last Faulting Instruction RA Field: R0 
                                     Last Faulting Instruction Opcode Follows: 
                                        x28 - LDL  Load Sign-Extended Longword 
(Data) Cache Status Reg   x0000000000000003 
                                     This is EV45 Cache Status Register(C_STAT) 

                                     EV45 Chip is Production Version of 21064A 
                                     Last Load or Store Missed Dcache 
Cache Address Reg         x00000007FFFFFFFF 
Abox Control Reg          x000000000000940A 
                                     Machine Checks Enabled for Uncorr Errors 
                                     CRD Interrupts Disabled 
                                     Single Entry Icache Stream Buffer Enabled 
                                     Lock Operation Conforms to Alpha Architect 

                                     Dcache Enabled 
                                     EV45 16K Byte Dcache Selected 
                                     Double Invalidate: Both EV45 Dcache Blocks 

                                        Addressed By iAdr_h<12:5> Invalidated. 
Bus Interface Status Reg  x0000000000002041 
                                     HARD ERROR Detected During External Cycle 
                                     BIU Command Cycle Type:   Read_Block 
Bus Interface Address Reg x0000000282008128 
                                     Address Only Valid if Bus Interface Status 

                                        Register Error Bit 0,1,2, or 3 is Set. 
                                     BIU Addr adr_h <4:2>:  x2 
                                     BIU Addr adr_h<33:5>:  x0000000014100409 
Bus Interface Control Reg x0000000810002225 
                                     External Cache (Bcache) Enabled 
                                     PARITY MODE: External Cache Parity Enabled 

                                     Cache Rams are Output Enable Controlled 
                                     Ext Cache Rd Access Time: 3 CPU Cycles 
                                     Ext Cache Wrt Cycle Time: 3 CPU Cycles 
                                     Size of External Cache:  256 Kbyte 
                                     Ext Cache For Phys Addr Quad 3 Disabled 
                                     Ext Cache Rd Time Controlling Bcache Reads 

                                     Ext Cache Wrt En Ctrl:  x0000000000000001 
Fill Syndrome Reg         x0000000000000000 
                                     No Error in Low Long Word of Quad Word 
                                     No Error in Upper Long Word of Quad Word 
Fill Address Reg          x0000000000011250 
                                     Addr Only Valid if Bus Interface Stat Reg 
                                        ECC(Bit 8) or PARITY(Bit 10) Error Set. 

                                     IF Bus Interface Stat Reg FILL_IRD Bit 11 
                                        is Clear, Cache Blk Phy Adr<4:2> is: x4 

                                     Cache Blk Phy Adr<33:5>  x0000000000000892 

Virtual Address Reg       x00000000000061D0 
                                     Dstream FLT/DTB Miss VA  x00000000000061D0 

Bcache Tag Reg            x1C8A00007229EC50 
                                     Last Bcache Access Resulted in a Miss 
                                     Parity Bit for Bcache Tag Status Bits Clr 
                                     Bcache Tag  Dirty Bit  Clear 
                                     Bcache Tag  Shared Bit  Clear 
                                     Bcache Tag  Valid Bit  Set 
                                     Bcache Tag Addrress  Parity Bit  Clear 
                                     Tag Being Probed:  x0000000000014F62 

coma_gcr                  x000000006D8D00B4 
                                     DMA Priority 
                                     128 bit wide MEM 
                                     Bcache enabled 
                                     Bcache long writes 
coma_edsr                 x000000000000A1F0 
coma_ter                  x000000006D8D3FF0 
                                     sysTag<21:17> =   x0000000000001FF8 
coma_elar                 x000000007D81FFFF 
                                     sysBus<20:5> at time of e x000000000000FFFF
 
coma_ehar                 x000000007D811FFF 
                                     sysBus<33:21> at time of  x0000000000001FFF
 
coma_ldlr                 x000000007D811908 
                                     sysBus<20:5> last locked  x0000000000001908
 
coma_ldhr                 x000000007D810004 
                                     sysBus<31:21> last locked x0000000000000004
 
coma_base0                x000000007D810000 
                                     Reg Base Adr <33:23> =  x0000000000000000 
coma_base1                x000000007D810000 
                                     Reg Base Adr <33:23> =  x0000000000000000 
coma_base2                x000000007D810000 
                                     Reg Base Adr <33:23> =  x0000000000000000 
coma_cnfg0                x000000007D810049 
                                     Bank Valid 
                                     Bank Size =  64 MB 
                                     Column Adr Selection  x0000000000000001 
coma_cnfg1                x000000006D8D0000 
                                     Bank Size =  1024 MB 
                                     Column Adr Selection  x0000000000000000 
coma_cnfg2                x000000006D8D0000 
                                     Bank Size =  1024 MB 
                                     Column Adr Selection  x0000000000000000 

epic_dcsr                 xFFFFFFFF801A081C 
                                     Prefetch enabled 
                                     Disable correctable error 
                                     No Device 
                                     Pass 2 Chip 
                                     Partial Bypass 
                                     PCI Cycle Type =   Memory Read 
epic_pear                 xFFFFFFFF84100408 
                                     PCI error address  x0000000084100408 
epic_sear                 x0000000000272110 
                                     DMA Address =   x0000000000027211 
epic_tbr1                 x0000000000550000 
                                     Translation Base Adr =   x0000000000002A80 

epic_tbr2                 x0000000000000000 
                                     Translation Base Adr =   x0000000000000000 

epic_pbr1                 x00000000000C0000 
                                     Scatter/Gather Enabled 
                                     Window Enabled 
                                     PCI Base Adr  x0000000000000000 
epic_pbr2                 x0000000040080000 
                                     Scatter/Gather Disabled 
                                     Window Enabled 
                                     PCI Base Adr  x0000000000000400 
epic_pmr1                 x0000000007F00000 
                                     PCI Mask  x000000000000007F 
epic_pmr2                 x000000003FF00000 
                                     PCI Mask  x00000000000003FF 
epic_harx1                xFFFFFFFF80000000 
                                     PCI_ad - memory space =  x0000000000000010 

epic_harx2                x0000000000000000 
                                     PCI_ad - memory space =  x0000000000000000 

epic_pmlt                 x00000000000000FF 
                                     Master Latency Timer =   0. 
epic_tag0                 x0000000001218000 
                                     pci_page  x0000000000000242 
epic_tag1                 x0000000001218000 
                                     pci_page  x0000000000000242 
epic_tag2                 x0000000001218000 
                                     pci_page  x0000000000000242 
epic_tag3                 x0000000001218000 
                                     pci_page  x0000000000000242 
epic_tag4                 x0000000001218000 
                                     pci_page  x0000000000000242 
epic_tag5                 x0000000001218000 
                                     pci_page  x0000000000000242 
epic_tag6                 x0000000001218000 
                                     pci_page  x0000000000000242 
epic_tag7                 x0000000001218000 
                                     pci_page  x0000000000000242 
epic_data0                x0000000000000264 
                                     cpu_page  x0000000000000099 
epic_data1                x0000000000000264 
                                     cpu_page  x0000000000000099 
epic_data2                x0000000000000264 
                                     cpu_page  x0000000000000099 
epic_data3                x0000000000000264 
                                     cpu_page  x0000000000000099 
epic_data4                x0000000000000264 
                                     cpu_page  x0000000000000099 
epic_data5                x0000000000000264 
                                     cpu_page  x0000000000000099 
epic_data6                x0000000000000264 
                                     cpu_page  x0000000000000099 
epic_data7                x0000000000000264 
                                     cpu_page  x0000000000000099 


******************************** ENTRY    2 ******************************** 


Logging OS                        1. OpenVMS 
System Architecture               2. Alpha 
OS version                           E7.1     
Event sequence number            42. 
Timestamp of occurrence              14-MAY-1997 14:43:03   
Time since reboot                    0 Day(s) 1:03:56 
Host name                            OVMS1    

System Model                         AlphaStation 255/233 

Entry type                       37. Crash Re-Start 

Bugcheck Minor class              1. Crash Re-start 

Bugcheck Msg                         MACHINECHK, Machine check while in kernel 
                                     mode 
Process ID                x00010015 
Process Name                           
KSP                       x000000007FFA1B90 
ESP                       x000000007FFA6000 
SSP                       x000000007FFAC100 
USP                       x000000007AFE7950 
R0                        xFFFFFFFF80C31B80 
R1                        x000000000000940A 
R2                        xFFFFFFFF80C33400 
R3                        x0000000000000003 
R4                        x0000000000000210 
R5                        x0000000000001F04 
R6                        xFFFFFFFF80DFF380 
R7                        x0000000000040050 
R8                        xFFFFFFFF80DFDEE8 
R9                        xFFFFFFFFFFFFFFFF 
R10                       x0000000000000128 
R11                       x0000000000040000 
R12                       x0000000000008000 
R13                       xFFFFFFFF80C3FFF0 
R14                       xFFFFFFFF80E3E980 
R15                       xFFFFFFFF80C05000 
R16                       x0000000000000215 
R17                       x0000000000000001 
R18                       x0000000000000001 
R19                       x0000000000000000 
R20                       xFFFFFFFFFFFFFFF8 
R21                       xFFFFFFFFFFFFFFFF 
R22                       x0000000100000000 
R23                       xFFFFFFFF80C31B88 
R24                       xFFFFFFFF80C31B8C 
R25                       x0000000000000003 
R26                       x0000000000000210 
R27                       xFFFFFFFF80C3CBD0 
R28                       xFFFFFFFF80055648 
FP                        x000000007FFA1B90 
SP                        x000000007FFA1B90 
PC                        xFFFFFFFF80062BD0 
PS                        x1000000000001F04 
PTBR                      x0000000000001B1D 
Process Ctl Block Base Re x0000000003638080 
PRBR                      xFFFFFFFF80D0E000 
VPTB                      xFFFFFFFC00000000 
System Ctl Block Base Reg x00000000000001C8 
Software Interrupt Summar x0000000000000000 
ASN                       x000000000000002B 
ASTSR ASTEN               x000000000000000F 
FEN                       x0000000000000001 
ASN                       x000000000000002B 
IPL                       x000000000000001F 
MCES                      x0000000000000008 

$ analyze/crash [sys0.sysexe0
$ analyze/crash [sys0.sysexe]
)0=<

OpenVMS (TM) Alpha system dump analyzer
...analyzing a selective memory dump...


Dump taken on 14-MAY-1997 15:07:08.76
MACHINECHK, Machine check while in kernel mode


SDA> show page 84100408;1

System page table
-----------------
 MAPPED ADDRESS      PTE ADDRESS           PTE        TYPE  READ WRIT BITS GH PG
TYP   LOC          BAK       REFCNT  FLINK    BLINK


        --------            1 entry not in memory:     VA   FFFFFFFF.84100000   
       PTE  FFFFFFFD.FFE10400
292.15EEMELI::MOSEROrienteers do it in the bush...Thu May 15 1997 15:175
    is there any reason to stay at an early Raven V7.1 field test, and not
    upgrade to the latest officially released version, i.e. V7.1?
    Just to make sure, there are no field test anomalies left over...
    
    /cmos
292.16V7.1 = Gryphon, Raven ~= V7.2MILORD::BISHOPThe punishment that brought us peace was upon HimThu May 15 1997 16:181
    Christian means Gryphon not Raven. :-)
292.17STAR::LEWISThu May 15 1997 16:504
    re:.14
    One thing I saw : the failing address whose pte you displayed is
    presumably a PCI bus address, not a system memory address. 
    Sue
292.18BSS::JILSONWFH in the Chemung River ValleyThu May 15 1997 17:069
Yes that address is for the PCI space but he has no idea where it came 
from.  I guess that is the basic question.  Where did that address come 
from?  

As to E7.1, that was the only version of 7.1 available when he started 
writing his driver and to date he hasn't received any media to update to V7.1 
and he hasn't had time to go chasing said media.

Jilly
292.19Contact SSB, upgrade to final V7.1 release...XDELTA::HOFFMANSteve, OpenVMS EngineeringThu May 15 1997 17:2110
:As to E7.1, that was the only version of 7.1 available when he started 
:writing his driver and to date he hasn't received any media to update to V7.1 
:and he hasn't had time to go chasing said media.

   There's either an ordering/shipping snarl, or there was no order.
   (I'm curious to know what PAKs are in use -- all SDK 7.1 field test
   PAKs expired several months ago.)  In any case, contact SSB, and
   request a shipment of the V7.1 kit -- see notes 8.* or 9.* here for
   the SSB contact information.