Hi,
Guy wrote:
Hello
I worked lately on the bug 6745357 (kernel crash during startup at
page_ctr_add_internal).
I have observed the following :
The bug was introduced from nv_88.
The changeset that breaks the boot is this one :
Issues Resolved:
BUG/RFE:6594519Need support for ACPI System Resource Affinity Table (SRAT)
BUG/RFE:6621201Need support to read ACPI System Locality Information Table
(SLIT)
BUG/RFE:6688471x86/x64 lgroup platform support code needs cleaning
Files Changed:
update:usr/src/uts/i86pc/os/acpi_fw.h
update:usr/src/uts/i86pc/os/cpuid.c
update:usr/src/uts/i86pc/os/fakebop.c
update:usr/src/uts/i86pc/os/lgrpplat.c
update:usr/src/uts/i86pc/os/mlsetup.c
update:usr/src/uts/intel/sys/x86_archext.h
The discussion in the CR (not complete yet) suggests the root cause
here is:
(begin quote)
the comparison currently used by pfn_2_mtype() is insufficient is that
mnoderanges
are not necessarily in pfn ascending order, like in this particular
case:
0]> ffffff00074b9000::array mnoderange_t 3 | ::print mnoderange_t
{
mnr_pfnlo = 0x80000
mnr_pfnhi = 0xf57f5
mnr_mnode = 0
mnr_memrange = 0
mnr_mt_clpgcnt = 0
mnr_mt_flpgcnt = [ 0, 0, 0 ]
mnr_mt_totcnt = 0
}
{
mnr_pfnlo = 0
mnr_pfnhi = 0xfff
mnr_mnode = 0x1
mnr_memrange = 0x2
mnr_mt_clpgcnt = 0
mnr_mt_flpgcnt = [ 0xcf3, 0, 0 ]
mnr_mt_totcnt = 0xcf3
}
{
mnr_pfnlo = 0x1000
mnr_pfnhi = 0x7ffff
mnr_mnode = 0x1
mnr_memrange = 0x1
mnr_mt_clpgcnt = 0xe
mnr_mt_flpgcnt = [ 0x74c, 0xd7c00, 0 ]
mnr_mt_totcnt = 0xd835a
}
(end quote)
If that is the case then it sounds like disabling srat eliminates a cause
on your system of this not being in ascending order, but may leave
other systems no better off. Not sure.
Could you try the fix suggested in the CR:
pfn_2_mtype() should perform proper range checking just like
plat_pfn_to_mem_node()
/*
* return the mnoderange containing pfn
*/
/*ARGSUSED*/
int
pfn_2_mtype(pfn_t pfn)
{
#if defined(__xpv)
return (0);
#else
int n;
for (n = mnoderangecnt - 1; n >= 0; n--) {
- if (pfn >= mnoderanges[n].mnr_pfnlo) {
+ if (pfn >= mnoderanges[n].mnr_pfnlo && \
+ pfn <= mnoderanges[n].mnr_pfnhi)
break;
}
}
return (n);
#endif
}
Cheers
Gavin
_______________________________________________
opensolaris-code mailing list
[email protected]
http://mail.opensolaris.org/mailman/listinfo/opensolaris-code