MCPcopy Create free account
hub / github.com/F-Stack/f-stack / mca_setup

Function mca_setup

freebsd/x86/x86/mca.c:1010–1055  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1008#endif
1009
1010static void
1011mca_setup(uint64_t mcg_cap)
1012{
1013
1014 /*
1015 * On AMD Family 10h processors, unless logging of level one TLB
1016 * parity (L1TP) errors is disabled, enable the recommended workaround
1017 * for Erratum 383.
1018 */
1019 if (cpu_vendor_id == CPU_VENDOR_AMD &&
1020 CPUID_TO_FAMILY(cpu_id) == 0x10 && amd10h_L1TP)
1021 workaround_erratum383 = 1;
1022
1023 mca_banks = mcg_cap & MCG_CAP_COUNT;
1024 mtx_init(&mca_lock, "mca", NULL, MTX_SPIN);
1025 STAILQ_INIT(&mca_records);
1026 STAILQ_INIT(&mca_pending);
1027 TASK_INIT(&mca_scan_task, 0, mca_scan_cpus, NULL);
1028 callout_init(&mca_timer, 1);
1029 STAILQ_INIT(&mca_freelist);
1030 TASK_INIT(&mca_resize_task, 0, mca_resize, NULL);
1031 mca_resize_freelist();
1032 SYSCTL_ADD_INT(NULL, SYSCTL_STATIC_CHILDREN(_hw_mca), OID_AUTO,
1033 "count", CTLFLAG_RD, (int *)(uintptr_t)&mca_count, 0,
1034 "Record count");
1035 SYSCTL_ADD_PROC(NULL, SYSCTL_STATIC_CHILDREN(_hw_mca), OID_AUTO,
1036 "maxcount", CTLTYPE_INT | CTLFLAG_RWTUN | CTLFLAG_MPSAFE,
1037 &mca_maxcount, 0, sysctl_mca_maxcount, "I",
1038 "Maximum record count (-1 is unlimited)");
1039 SYSCTL_ADD_PROC(NULL, SYSCTL_STATIC_CHILDREN(_hw_mca), OID_AUTO,
1040 "interval", CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE, &mca_ticks,
1041 0, sysctl_positive_int, "I",
1042 "Periodic interval in seconds to scan for machine checks");
1043 SYSCTL_ADD_NODE(NULL, SYSCTL_STATIC_CHILDREN(_hw_mca), OID_AUTO,
1044 "records", CTLFLAG_RD | CTLFLAG_MPSAFE, sysctl_mca_records,
1045 "Machine check records");
1046 SYSCTL_ADD_PROC(NULL, SYSCTL_STATIC_CHILDREN(_hw_mca), OID_AUTO,
1047 "force_scan", CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE, NULL, 0,
1048 sysctl_mca_scan, "I", "Force an immediate scan for machine checks");
1049#ifdef DEV_APIC
1050 if (cmci_supported(mcg_cap))
1051 cmci_setup();
1052 else if (amd_thresholding_supported())
1053 amd_thresholding_setup();
1054#endif
1055}
1056
1057#ifdef DEV_APIC
1058/*

Callers 1

_mca_initFunction · 0.85

Calls 7

mtx_initFunction · 0.85
mca_resize_freelistFunction · 0.85
cmci_supportedFunction · 0.85
cmci_setupFunction · 0.85
amd_thresholding_setupFunction · 0.85
callout_initFunction · 0.50

Tested by

no test coverage detected