xnu-4570.71.2.tar.gz
[apple/xnu.git] / libkern / os / log.c
index a2638fee590e25e517ce57709682a31359897d7d..14326986279b30c7e29cc424dfd3aa500f7b0554 100644 (file)
@@ -45,7 +45,7 @@ extern firehose_chunk_t firehose_boot_chunk;
 
 extern void bsd_log_lock(void);
 extern void bsd_log_unlock(void);
-extern void logwakeup(void);
+extern void logwakeup(struct msgbuf *);
 
 decl_lck_spin_data(extern, oslog_stream_lock)
 extern void oslog_streamwakeup(void);
@@ -72,7 +72,12 @@ uint32_t oslog_s_error_count = 0;
 uint32_t oslog_s_metadata_msgcount = 0;
 
 static bool oslog_boot_done = false;
-extern boolean_t oslog_early_boot_complete;
+extern boolean_t early_boot_complete;
+
+#ifdef XNU_KERNEL_PRIVATE
+bool startup_serial_logging_active = true;
+uint64_t startup_serial_num_procs = 300;
+#endif /* XNU_KERNEL_PRIVATE */
 
 // XXX
 firehose_tracepoint_id_t
@@ -166,9 +171,15 @@ _os_log_with_args_internal(os_log_t oslog, os_log_type_t type,
     if (format[0] == '\0') {
         return;
     }
-    /* cf. r24974766 & r25201228*/
-    safe    = (!oslog_early_boot_complete || oslog_is_safe());
-    logging = (!(logging_config & ATM_TRACE_DISABLE) || !(logging_config & ATM_TRACE_OFF));
+
+    /* early boot can log to dmesg for later replay (27307943) */
+    safe = (!early_boot_complete || oslog_is_safe());
+
+       if (logging_config & ATM_TRACE_DISABLE || logging_config & ATM_TRACE_OFF) {
+               logging = false;
+       } else {
+               logging = true;
+       }
 
     if (oslog != &_os_log_replay) {
         _os_log_to_msgbuf_internal(format, args, safe, logging);
@@ -185,7 +196,13 @@ _os_log_to_msgbuf_internal(const char *format, va_list args, bool safe, bool log
     static int msgbufreplay = -1;
     va_list args_copy;
 
+#if DEVELOPMENT || DEBUG
+    if (safe) {
+        bsd_log_lock();
+    }
+#else
     bsd_log_lock();
+#endif
 
     if (!safe) {
         if (-1 == msgbufreplay) msgbufreplay = msgbufp->msg_bufx;
@@ -242,9 +259,15 @@ _os_log_to_msgbuf_internal(const char *format, va_list args, bool safe, bool log
     vprintf_log_locked(format, args_copy);
     va_end(args_copy);
 
+#if DEVELOPMENT || DEBUG
+    if (safe) {
+        bsd_log_unlock();
+        logwakeup(msgbufp);
+    }
+#else
     bsd_log_unlock();
-
-    if (safe) logwakeup();
+    if (safe) logwakeup(msgbufp);
+#endif
 }
 
 static void