This section describes how you can correlate the information that is reported by the Oracle Solaris Fault Management Architecture (FMA) with the logical domain resources that are marked as being faulty.
FMA reports CPU errors in terms of physical CPU numbers and memory errors in terms of physical memory addresses.
If you want to determine within which logical domain an error occurred and the corresponding virtual CPU number or real memory address within the domain, then you must perform a mapping.
You can find the domain and the virtual CPU number within the domain that correspond to a given physical CPU number.
First, generate a long parseable list for all domains by using the following command:
primary# ldm list -l -p
Look for the entry in the list's VCPU sections that has a pid field equal to the physical CPU number.
If you find such an entry, the CPU is in the domain the entry is listed under, and the virtual CPU number within the domain is given by the entry's vid field.
If you do not find such an entry, the CPU is not in any domain.
You can find the domain and the real memory address within the domain that correspond to a given physical memory address (PA).
First, generate a long parseable list for all domains.
primary# ldm list -l -p
Look for the line in the list's MEMORY sections where the PA falls within the inclusive range pa to (pa + size - 1); that is, pa ≤ PA ≤ (pa + size - 1). pa and size refer to the values in the corresponding fields of the line.
If you find such an entry, the PA is in the domain the entry is listed under and the corresponding real address within the domain is given by ra + (PA - pa).
If you do not find such an entry, the PA is not in any domain.
The following command produces a long parseable list of logical domains configurations.
primary# ldm list -l -p VERSION 1.6 DOMAIN|name=primary|state=active|flags=normal,control,vio-service| cons=SP|ncpu=4|mem=1073741824|util=0.6|uptime=64801| softstate=Solaris running VCPU |vid=0|pid=0|util=0.9|strand=100 |vid=1|pid=1|util=0.5|strand=100 |vid=2|pid=2|util=0.6|strand=100 |vid=3|pid=3|util=0.6|strand=100 MEMORY |ra=0x8000000|pa=0x8000000|size=1073741824 IO |dev=pci@780|alias=bus_a |dev=pci@7c0|alias=bus_b ... DOMAIN|name=ldg1|state=active|flags=normal|cons=5000| ncpu=2|mem=805306368|util=29|uptime=903| softstate=Solaris running VCPU |vid=0|pid=4|util=29|strand=100 |vid=1|pid=5|util=29|strand=100 MEMORY |ra=0x8000000|pa=0x48000000|size=805306368 ... DOMAIN|name=ldg2|state=active|flags=normal|cons=5001| ncpu=3|mem=1073741824|util=35|uptime=775| softstate=Solaris running VCPU |vid=0|pid=6|util=35|strand=100 |vid=1|pid=7|util=34|strand=100 |vid=2|pid=8|util=35|strand=100 MEMORY |ra=0x8000000|pa=0x78000000|size=1073741824 ...Example 81 Determining the Virtual CPU That Corresponds to a Physical CPU Number
The logical domain configuration is shown in Example 80. This example describes how to determine the domain and the virtual CPU corresponding to physical CPU number 5, and the domain and the real address corresponding to physical address 0x7e816000.
Looking through the VCPU entries in the list for the one with the pid field equal to 5, you can find the following entry under logical domain ldg1.
Hence, the physical CPU number 5 is in domain ldg1 and within the domain it has virtual CPU number 1.
Looking through the MEMORY entries in the list, you can find the following entry under domain ldg2.
Where 0x78000000 <= 0x7e816000 <= (0x78000000 + 1073741824 - 1); that is, pa <= PA <= (pa + size - 1). Hence, the PA is in domain ldg2 and the corresponding real address is 0x8000000 + (0x7e816000 - 0x78000000) = 0xe816000.