| Title: | CSGUK_SYSTEMS |
| Notice: | No restrictions on keyword creation |
| Moderator: | KERNEL::ADAMS |
| Created: | Wed Mar 01 1989 |
| Last Modified: | Thu Nov 28 1996 |
| Last Successful Update: | Fri Jun 06 1997 |
| Number of topics: | 242 |
| Total number of notes: | 1855 |
Gents,
Over the past few months we have had alot of calls where we have to
translate the Virtual Address (VA) to Physical Address (PA) using SDA and/or
SYSGEN. To put it frankly (apologies to FB) WE HAVE F!@KED IT UP!!!!. The
purpose of this memo is to remind engineers (and they know who they are) how to
translate VA's to PA's.
It is divided into 3 sections:-
a) The procedure to accomplish VA to PA translation.
b) Worked examples.
c) Hints and tips.
a) The procedure to accomplish VA to PA translation.
----------------------------------------------------
1) Locate Virtual Address
If its a 8XXXXXXX number its in SYSTEM S0 space
Any other number and its in PROCESS PX space
2) If VA is 8XXXXXXX it can be translated using either the crash dump
ie: anal/crash sysdump.dmp or alternatively the online running system
ie: anal/sys
If VA is anything else you will have to use the crash dump
3) Type the following commands to determine Page Frame Number (PFN):-
For a system VA type:-
SDA> sho page/sys 8XXXXXXX;1 <CR>
For a process address type:-
SDA> sho proc/page XXXXXXXX;1 <CR>
4) Left shift PFN by 9 bits and add byte offset and this will give
you the Physical Address (PA) of the Virtual Address (VA).
************************************************************
Confusing isn't it????? so following is some worked examples
************************************************************
b) Worked examples.
-------------------
1) Example 1 is a VAX 11750 machine check in kernel mode caused by a
memory RDS not logged in errorlog.
$ anal/cr ;
VAX/VMS System dump analyzer
Dump taken on 23-APR-1988 19:03:29.78
MACHINECHK, Machine check while in kernel mode
SDA> sho cra
Time of system crash: 23-APR-1988 19:03:29.78
Version of system: VAX/VMS VERSION V4.4
VAXcluster node name: LS
Reason for BUGCHECK exception: MACHINECHK, Machine check while in kernel mode
Process currently executing: URH1
Current image file: _LS$DUA0:[KERNEL.EXE]URH.EXE
Current IPL: 31 (decimal)
General registers:
R0 = 801AB57C R1 = 02C80074 R2 = 00000000 R3 = 0000001D
R4 = 801C3940 R5 = 00000005 R6 = 8044B160 R7 = 00000005
R8 = 002D8A20 R9 = 0000001B R10 = 800394C8 R11 = 002C6C00
AP = 7FFE9D54 FP = 7FFE7DE4 SP = 804F09CC PC = 801F8192
PSL = 041F0008
Processor registers: VAX-11/750
P0BR = 806A6200 SBR = 00DDD400 ASTLVL = 00000004
P0LR = 000023FA SLR = 00008B00 SISR = 00000000
P1BR = 7FEC5200 PCBB = 0064FC78 ICCS = 800000C1
P1LR = 001FFA0A SCBB = 00DD9C00 SID = 0200637C
ICR = FFFFF0CA TBDR = 00000000 CAER = 00000000
TODR = 4A9A2782 CADR = 00000000 CMIERR = 00080010
ACCS = 00000000 MCESR = 00000000
ISP = 804F09CC
KSP = 7FFE7DCC
ESP = 7FFE9D18
SSP = 7FFED04E
USP = 7FF44548
SDA> sho sta
Current operating stack (INTERRUPT):
804F09AC 0000001B
804F09B0 800394C8
804F09B4 002C6C00
804F09B8 7FFE9D54
804F09BC 7FFE7DE4 CTL$GL_KSTKBAS+5E4
804F09C0 804F09C4
804F09C4 801F8192 MCHK+55A
804F09C8 041F0008
SP => 804F09CC 00000028
804F09D0 00000002
804F09D4 8044B190 ;VA in this example
804F09D8 8000C5A7 LCK$GRANTWTRS+070
804F09DC 02C80074
804F09E0 00000008
804F09E4 00000000
804F09E8 00000000
804F09EC 00000000
804F09F0 00000008
804F09F4 00000008
804F09F8 8000C5A3 LCK$GRANTWTRS+06C
804F09FC 00480009
SDA> sho page 8044b190;4
ADDRESS SVAPTE PTE TYPE PROT BITS PAGTYP LOC STATE TYPE REFCNT BAK
SVAPTE FLINK BLINK
8044B000 8112CD60 B4006E6C VALID ERKW M K
--|---
|
|
|
|--------------------|
|
__|_
SDA> eval 6e6c@9+190 (8044B190-8044B000=190)
Hex = 00DCD990 Decimal = 14473616
SDA> *EXIT*
**************************in this example array is D ie 13th megabyte
2) Example 2 is a timeout error on a VAX 8600
SDA> sho page/sys 80184200;1
ADDRESS SVAPTE PTE TYPE PROT BITS PAGTYP LOC STATE TY
PE REFCNT BAK SVAPTE FLINK BLINK
80184200 82139884 94100090 IOPAG KW M K
--|---
|
|
PFN....Note 21 bits
|
____________________|
|
|
|
___|__
SDA> eval 100090@9
Hex = 20012000 Decimal = 536944640
SDA> ----|---
|
|_________Adapter at Tr#9 (RH780)
Note:- There was no byte offset to add as in previous example as VA was
on a page boundary.
c) Hints and tips.
------------------
1) Not all memory errors are necessarily logged in errorlog, so check
in crash dump. If necessary run Alan's DUE program.
2) Not all RDS errors are memory related so check in errorlog as well
as crash dump. Do not assume that ALL RDS errors are memory related.
3) Don't forget PFN's are 21 bits wide. Failure to include bit 20 may
result in calling out memory when in fact it is I/O space.
4) Don't forget to shift PFN by 9 bits and add byte offset.
| T.R | Title | User | Personal Name | Date | Lines |
|---|---|---|---|---|---|
| 16.1 | ...tribute to BDAY | KERNEL::JAMES | Alan James CSC Basingstoke | Mon Feb 19 1990 11:39 | 94 |
Procedure for VA translation using SDA
**************************************
- PRODUCED BY BOB DAY
Procedure to translate a Virtual Address to a Physical
Address using SDA and the Page Tables.
1. Get your VA from the stack, or the errorlog entry for
the mcheck.
2. If the VA is 8xxxxxxx it's a System space address. If
it is anything else it's a Process space address.
NB If you have a System space address you do NOT need a
crashdump to translate it. A system will normally map
it's System and I/O addresses the same each time it
boots... Therefore you can use the dump from an Operator
Requested Shutdown, or failing that an ANAL/SYS.
3. If you have a system address do :-
SDA> Sh page/sys 8xxxxxxx;1 <ret>
for a process address do :-
SDA> Sh proc/page xxxxxxxx;1 <ret>
eg
SDA> sh page/sys 8002AAEC;1 ( this is the VA of TXA CSR on THESUN )
ADDRESS SVAPTE PTE TYPE PROT BITS PAGTYP LOC STATE TYPE REFCNT BAK SVAPTE FLINK BLINK
8002AA00 87FFE954 941009F0 IOPAG KW M K
4. The number under 'ADDRESS' is the VA of the first longword
of the page. We need to subtract this number from our original
VA to get the offset into the page.
8002AAEC-8002AA00 = EC
The number under 'PTE' is contents of the PTE. This contains
the Page Frame Number, as well as protection bits. We are
interested in bits 20-0, this is the PFN..
5. The easy way to break down the PTE is
SDA> eval/pte 941009f0
|31 28|27 24|23 20|19 16|15 12|11 8|7
| | | | | | |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+-->
|1 | 0 0 1 0 |1 |--| 0 0 |--| 0| 1009FE
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+-->
Vld Prot= KW M Own=K W Page Frame Number
Page is Active and Valid
The PFN ( bits 20-0 ) becomes bits 29-9 of the PA, so
we need to shift it 9 places left..
6. Do it the easy way
SDA> eval 1009FE@9
Hex = 2013E000 Decimal = 538180608
So 2013E000 is the Physical Address of the page. We now need to
add in the offset to get the address.
SDA> eval 2013E000+EC
Hex = 2013E0EC Decimal = 538180844
2013E0EC is the final physical address...
7. You now need to get a copy of the pyhsical address map
for the system your dealing with and see where your
address is.
eg.
THESUN is an 8600, so if you check this address against the
physical address map for the 8600, you will find that 2013E0EC
falls within the range for SBIA-0 adapter 0. This is a DW780..
Bits 0-17 are the 18 bit unibus address, in this case 3E0EC,
convert this to octal and you get 760354. Which (fortunately)
turns out to be the CSR for TXA...
| |||||