diff --git a/data/settings/kernel/drivers/kernel b/data/settings/kernel/drivers/kernel index 54c292858e..df1e9b9a7b 100644 --- a/data/settings/kernel/drivers/kernel +++ b/data/settings/kernel/drivers/kernel @@ -19,9 +19,13 @@ # disables syslog debug output - all debug output is also sent to # the syslog service by default. +#syslog_buffer_size 131768 + # The default size of the internal syslog ring buffer - if you often see + # or messages in your syslog, you might want to increase + # this value. Defaults to 65536 bytes. + #syslog_time_stamps true - # Include time stamps in syslog debug output, - # you don't get them by default + # Include time stamps in syslog debug output, defaults to false. #syslog_max_size 20MB # change maximum syslog file size, default is 512kB diff --git a/src/system/kernel/debug/debug.cpp b/src/system/kernel/debug/debug.cpp index 0be71735c0..6fd8fa2380 100644 --- a/src/system/kernel/debug/debug.cpp +++ b/src/system/kernel/debug/debug.cpp @@ -71,7 +71,7 @@ static bool sSyslogDropped = false; static const char* sCurrentKernelDebuggerMessage; -#define SYSLOG_BUFFER_SIZE 65536 +#define DEFAULT_SYSLOG_BUFFER_SIZE 65536 #define OUTPUT_BUFFER_SIZE 1024 static char sOutputBuffer[OUTPUT_BUFFER_SIZE]; static char sLastOutputBuffer[OUTPUT_BUFFER_SIZE]; @@ -1021,7 +1021,7 @@ syslog_init_post_threads(void) static status_t -syslog_init(struct kernel_args *args) +syslog_init(struct kernel_args* args) { status_t status; int32 length = 0; @@ -1035,7 +1035,25 @@ syslog_init(struct kernel_args *args) goto err1; } - sSyslogBuffer = create_ring_buffer(SYSLOG_BUFFER_SIZE); + { + size_t bufferSize = DEFAULT_SYSLOG_BUFFER_SIZE; + void* handle = load_driver_settings("kernel"); + if (handle != NULL) { + const char* sizeString = get_driver_parameter(handle, + "syslog_buffer_size", NULL, NULL); + if (sizeString != NULL) { + bufferSize = strtoul(sizeString, NULL, 0); + if (bufferSize > 262144) + bufferSize = 262144; + else if (bufferSize < SYSLOG_MESSAGE_BUFFER_SIZE) + bufferSize = SYSLOG_MESSAGE_BUFFER_SIZE; + } + + unload_driver_settings(handle); + } + + sSyslogBuffer = create_ring_buffer(bufferSize); + } if (sSyslogBuffer == NULL) { status = B_NO_MEMORY; goto err2;