static void check_syscfg_dram_mod_en(void)
{
uint64_t syscfg;
- static bool_t printed = 0;
if (!((boot_cpu_data.x86_vendor == X86_VENDOR_AMD) &&
(boot_cpu_data.x86 >= 0x0f)))
if (!(syscfg & SYSCFG_MTRR_FIX_DRAM_MOD_EN))
return;
- if (!test_and_set_bool(printed))
- printk(KERN_ERR "MTRR: SYSCFG[MtrrFixDramModEn] not "
- "cleared by BIOS, clearing this bit\n");
+ printk_once(KERN_ERR "MTRR: SYSCFG[MtrrFixDramModEn] found set; clearing\n");
syscfg &= ~SYSCFG_MTRR_FIX_DRAM_MOD_EN;
wrmsrl(MSR_K8_SYSCFG, syscfg);
rdmsrl(MSR_AMD64_LS_CFG, value);
if (!(value & (1 << 15))) {
- static bool_t warned;
-
- if (c == &boot_cpu_data || opt_cpu_info ||
- !test_and_set_bool(warned))
- printk(KERN_WARNING
- "CPU%u: Applying workaround for erratum 793\n",
- smp_processor_id());
+ if (c == &boot_cpu_data || opt_cpu_info)
+ printk_once(XENLOG_WARNING
+ "CPU%u: Applying workaround for erratum 793\n",
+ smp_processor_id());
wrmsrl(MSR_AMD64_LS_CFG, value | (1 << 15));
}
} else if (c->x86 == 0x12) {
rdmsrl(MSR_AMD64_DE_CFG, value);
if (!(value & (1U << 31))) {
- static bool warned;
-
- if (c == &boot_cpu_data || opt_cpu_info ||
- !test_and_set_bool(warned))
- printk(KERN_WARNING
- "CPU%u: Applying workaround for erratum 665\n",
- smp_processor_id());
+ if (c == &boot_cpu_data || opt_cpu_info)
+ printk_once(XENLOG_WARNING
+ "CPU%u: Applying workaround for erratum 665\n",
+ smp_processor_id());
wrmsrl(MSR_AMD64_DE_CFG, value | (1U << 31));
}
}
*/
if ( unlikely(!vmx_vmcs_try_enter(v)) )
{
- static bool_t warned;
+ printk_once(XENLOG_WARNING "Segment register inaccessible for %pv\n"
+ "(If you see this outside of debugging activity,"
+ " please report to xen-devel@lists.xenproject.org)\n",
+ v);
- if ( !warned )
- {
- warned = 1;
- printk(XENLOG_WARNING "Segment register inaccessible for %pv\n"
- "(If you see this outside of debugging activity,"
- " please report to xen-devel@lists.xenproject.org)\n",
- v);
- }
memset(reg, 0, sizeof(*reg));
return;
}
static void cf_check vmx_handle_eoi(uint8_t vector, int isr)
{
uint8_t old_svi = set_svi(isr);
- static bool warned;
- if ( vector != old_svi && !test_and_set_bool(warned) )
- printk(XENLOG_WARNING "EOI for %02x but SVI=%02x\n", vector, old_svi);
+ if ( vector != old_svi )
+ printk_once(XENLOG_WARNING "EOI for %02x but SVI=%02x\n", vector, old_svi);
}
static void cf_check vmx_enable_msr_interception(struct domain *d, uint32_t msr)
{
nodeid_t node;
unsigned idx;
- static bool warned;
static unsigned nodes_found;
BUILD_BUG_ON(MAX_NUMNODES >= NUMA_NO_NODE);
if (pxm2node[idx].node == NUMA_NO_NODE)
goto finish;
- if (!warned) {
- printk(KERN_WARNING "SRAT: Too many proximity domains (%#x)\n",
- pxm);
- warned = true;
- }
+ printk_once(XENLOG_WARNING "SRAT: Too many proximity domains (%#x)\n",
+ pxm);
return NUMA_NO_NODE;
plt_stamp64 += plt_mask + 1;
}
if ( i != 0 )
- {
- static bool warned_once;
-
- if ( !test_and_set_bool(warned_once) )
- printk("Platform timer appears to have unexpectedly wrapped "
- "%u%s times.\n", i, (i == 10) ? " or more" : "");
- }
+ printk_once("Platform timer appears to have unexpectedly wrapped "
+ "%u%s times.\n", i, (i == 10) ? " or more" : "");
spin_unlock_irq(&platform_timer_lock);
}
else if ( adj != tsc_adjust[socket] )
{
- static bool __read_mostly warned;
-
- if ( !warned )
- {
- warned = true;
- printk(XENLOG_WARNING
- "Differing TSC ADJUST values within socket(s) - fixing all\n");
- }
+ printk_once(XENLOG_WARNING
+ "Differing TSC ADJUST values within socket(s) - fixing all\n");
wrmsrl(MSR_IA32_TSC_ADJUST, tsc_adjust[socket]);
}
}