*
* @APPLE_LICENSE_HEADER_START@
*
- * Copyright (c) 1999-2003 Apple Computer, Inc. All Rights Reserved.
- *
* This file contains Original Code and/or Modifications of Original Code
* as defined in and that are subject to the Apple Public Source License
* Version 2.0 (the 'License'). You may not use this file except in
boolean_t state;
if (!disableSerialOuput) {
- state = ml_set_interrupts_enabled(FALSE);
- simple_lock(&kprintf_lock);
+
+ /*
+ * Spin to get kprintf lock but re-enable interrupts while failing.
+ * This allows interrupts to be handled while waiting but
+ * interrupts are disabled once we have the lock.
+ */
+ state = ml_set_interrupts_enabled(FALSE);
+ while (!simple_lock_try(&kprintf_lock)) {
+ ml_set_interrupts_enabled(state);
+ ml_set_interrupts_enabled(FALSE);
+ }
if (cpu_number() != cpu_last_locked) {
MP_DEBUG_KPRINTF("[cpu%d...]\n", cpu_number());