Some renaming so that future features will fit in better; If the architecture provides its only system logging (via CONFIG_ARCH_SYSLOG), then syslog_initialize() is stubbed out

This commit is contained in:
Gregory Nutt 2016-06-19 11:16:12 -06:00
parent 99ad3e9bcf
commit 9f260ca193
6 changed files with 80 additions and 49 deletions

View File

@ -160,7 +160,7 @@ config ARMV7M_STACKCHECK
config ARMV7M_ITMSYSLOG config ARMV7M_ITMSYSLOG
bool "ITM SYSLOG support" bool "ITM SYSLOG support"
default n default n
select ARCH_HAVE_SYSLOG select ARCH_SYSLOG
select SYSLOG select SYSLOG
---help--- ---help---
Enable hooks to support ITM syslog output. This requires additional Enable hooks to support ITM syslog output. This requires additional

View File

@ -7,7 +7,7 @@ comment "System Logging"
# Selected if the architecture has its own, built-in SYSLOGgin enabled # Selected if the architecture has its own, built-in SYSLOGgin enabled
config ARCH_HAVE_SYSLOG config ARCH_SYSLOG
bool bool
default n default n
@ -29,7 +29,7 @@ if RAMLOG
config RAMLOG_SYSLOG config RAMLOG_SYSLOG
bool "Use RAMLOG for SYSLOG" bool "Use RAMLOG for SYSLOG"
default n default n
depends on SYSLOG && !ARCH_HAVE_SYSLOG depends on SYSLOG && !ARCH_SYSLOG
---help--- ---help---
Use the RAM logging device for the syslogging interface. If this feature Use the RAM logging device for the syslogging interface. If this feature
is enabled (along with SYSLOG), then all debug output (only) will be re-directed is enabled (along with SYSLOG), then all debug output (only) will be re-directed
@ -107,7 +107,7 @@ if SYSLOG
config SYSLOG_CHAR config SYSLOG_CHAR
bool "System log character device support" bool "System log character device support"
default y default y
depends on !ARCH_HAVE_SYSLOG depends on !ARCH_SYSLOG
---help--- ---help---
Enable the generic character device for the SYSLOG. The full path to the Enable the generic character device for the SYSLOG. The full path to the
SYSLOG device is provided by SYSLOG_DEVPATH. A valid character device (or SYSLOG device is provided by SYSLOG_DEVPATH. A valid character device (or

View File

@ -39,6 +39,10 @@
CSRCS += syslog_initialize.c vsyslog.c vlowsyslog.c syslogstream.c CSRCS += syslog_initialize.c vsyslog.c vlowsyslog.c syslogstream.c
ifneq ($(CONFIG_ARCH_SYSLOG),y)
CSRCS += syslog_initialize.c
endif
# The note driver is hosted in this directory, but is not associated with # The note driver is hosted in this directory, but is not associated with
# SYSLOGging # SYSLOGging

View File

@ -76,7 +76,7 @@
/* This enumeration represents the state of the SYSLOG device interface */ /* This enumeration represents the state of the SYSLOG device interface */
enum syslog_state_e enum syslog_dev_state
{ {
SYSLOG_UNINITIALIZED = 0, /* SYSLOG has not been initialized */ SYSLOG_UNINITIALIZED = 0, /* SYSLOG has not been initialized */
SYSLOG_INITIALIZING, /* SYSLOG is being initialized */ SYSLOG_INITIALIZING, /* SYSLOG is being initialized */
@ -89,7 +89,7 @@ enum syslog_state_e
struct syslog_dev_s struct syslog_dev_s
{ {
uint8_t sl_state; /* See enum syslog_state_e */ uint8_t sl_state; /* See enum syslog_dev_state */
sem_t sl_sem; /* Enforces mutually exclusive access */ sem_t sl_sem; /* Enforces mutually exclusive access */
pid_t sl_holder; /* PID of the thread that holds the semaphore */ pid_t sl_holder; /* PID of the thread that holds the semaphore */
struct file sl_file; /* The syslog file structure */ struct file sl_file; /* The syslog file structure */
@ -101,7 +101,7 @@ struct syslog_dev_s
/* This is the device structure for the console or syslogging function. */ /* This is the device structure for the console or syslogging function. */
static struct syslog_dev_s g_sysdev; static struct syslog_dev_s g_syslog_dev;
static const uint8_t g_syscrlf[2] = static const uint8_t g_syscrlf[2] =
{ {
'\r', '\n' '\r', '\n'
@ -112,25 +112,25 @@ static const uint8_t g_syscrlf[2] =
****************************************************************************/ ****************************************************************************/
/**************************************************************************** /****************************************************************************
* Name: syslog_takesem * Name: syslog_dev_takesem
* *
* Description: * Description:
* Write to the syslog device * Write to the syslog device
* *
****************************************************************************/ ****************************************************************************/
static inline int syslog_takesem(void) static inline int syslog_dev_takesem(void)
{ {
pid_t me = getpid(); pid_t me = getpid();
int ret; int ret;
/* Does this thread already hold the semaphore? That could happen if /* Does this thread already hold the semaphore? That could happen if
* we wer called recursively, i.e., if the logic kicked off by * we wer called recursively, i.e., if the logic kicked off by
* syslog_write() where to generate more debug output. Return an error * syslog_dev_write() where to generate more debug output. Return an error
* in that case. * in that case.
*/ */
if (g_sysdev.sl_holder == me) if (g_syslog_dev.sl_holder == me)
{ {
/* Return an error (instead of deadlocking) */ /* Return an error (instead of deadlocking) */
@ -141,7 +141,7 @@ static inline int syslog_takesem(void)
* thread. Wait for it to become available. * thread. Wait for it to become available.
*/ */
ret = sem_wait(&g_sysdev.sl_sem); ret = sem_wait(&g_syslog_dev.sl_sem);
if (ret < 0) if (ret < 0)
{ {
return -get_errno(); return -get_errno();
@ -151,53 +151,53 @@ static inline int syslog_takesem(void)
* of the semaphore. * of the semaphore.
*/ */
g_sysdev.sl_holder = me; g_syslog_dev.sl_holder = me;
return OK; return OK;
} }
/**************************************************************************** /****************************************************************************
* Name: syslog_givesem * Name: syslog_dev_givesem
* *
* Description: * Description:
* Write to the syslog device * Write to the syslog device
* *
****************************************************************************/ ****************************************************************************/
static inline void syslog_givesem(void) static inline void syslog_dev_givesem(void)
{ {
#ifdef CONFIG_DEBUG_ASSERTIONS #ifdef CONFIG_DEBUG_ASSERTIONS
pid_t me = getpid(); pid_t me = getpid();
DEBUGASSERT(g_sysdev.sl_holder == me); DEBUGASSERT(g_syslog_dev.sl_holder == me);
#endif #endif
/* Relinquish the semaphore */ /* Relinquish the semaphore */
g_sysdev.sl_holder = NO_HOLDER; g_syslog_dev.sl_holder = NO_HOLDER;
sem_post(&g_sysdev.sl_sem); sem_post(&g_syslog_dev.sl_sem);
} }
/**************************************************************************** /****************************************************************************
* Name: syslog_write * Name: syslog_dev_write
* *
* Description: * Description:
* Write to the syslog device * Write to the syslog device
* *
****************************************************************************/ ****************************************************************************/
static inline ssize_t syslog_write(FAR const void *buf, size_t nbytes) static inline ssize_t syslog_dev_write(FAR const void *buf, size_t nbytes)
{ {
FAR struct inode *inode; FAR struct inode *inode;
/* Let the driver perform the write */ /* Let the driver perform the write */
inode = g_sysdev.sl_file.f_inode; inode = g_syslog_dev.sl_file.f_inode;
DEBUGASSERT(inode != NULL); DEBUGASSERT(inode != NULL);
return inode->u.i_ops->write(&g_sysdev.sl_file, buf, nbytes); return inode->u.i_ops->write(&g_syslog_dev.sl_file, buf, nbytes);
} }
/**************************************************************************** /****************************************************************************
* Name: syslog_flush * Name: syslog_dev_flush
* *
* Description: * Description:
* Flush any buffer data in the file system to media. * Flush any buffer data in the file system to media.
@ -205,9 +205,9 @@ static inline ssize_t syslog_write(FAR const void *buf, size_t nbytes)
****************************************************************************/ ****************************************************************************/
#ifndef CONFIG_DISABLE_MOUNTPOINT #ifndef CONFIG_DISABLE_MOUNTPOINT
static inline void syslog_flush(void) static inline void syslog_dev_flush(void)
{ {
FAR struct inode *inode = g_sysdev.sl_file.f_inode; FAR struct inode *inode = g_syslog_dev.sl_file.f_inode;
/* Is this a mountpoint? Does it support the sync method? */ /* Is this a mountpoint? Does it support the sync method? */
@ -216,7 +216,7 @@ static inline void syslog_flush(void)
{ {
/* Yes... synchronize to the stream */ /* Yes... synchronize to the stream */
(void)inode->u.i_mops->sync(&g_sysdev.sl_file); (void)inode->u.i_mops->sync(&g_syslog_dev.sl_file);
} }
} }
#endif #endif
@ -259,10 +259,10 @@ int syslog_dev_initialize(void)
* SYSLOG_REOPEN.. Not SYSLOG_INITIALIZING, SYSLOG_FAILURE, SYSLOG_OPENED. * SYSLOG_REOPEN.. Not SYSLOG_INITIALIZING, SYSLOG_FAILURE, SYSLOG_OPENED.
*/ */
DEBUGASSERT(g_sysdev.sl_state == SYSLOG_UNINITIALIZED || DEBUGASSERT(g_syslog_dev.sl_state == SYSLOG_UNINITIALIZED ||
g_sysdev.sl_state == SYSLOG_REOPEN); g_syslog_dev.sl_state == SYSLOG_REOPEN);
g_sysdev.sl_state = SYSLOG_INITIALIZING; g_syslog_dev.sl_state = SYSLOG_INITIALIZING;
/* Open the device driver. */ /* Open the device driver. */
@ -282,7 +282,7 @@ int syslog_dev_initialize(void)
* not yet been installed. * not yet been installed.
*/ */
g_sysdev.sl_state = SYSLOG_REOPEN; g_syslog_dev.sl_state = SYSLOG_REOPEN;
return -errcode; return -errcode;
} }
@ -291,23 +291,23 @@ int syslog_dev_initialize(void)
* descriptor allows us to use the device on all threads in all tasks. * descriptor allows us to use the device on all threads in all tasks.
*/ */
ret = file_detach(fd, &g_sysdev.sl_file); ret = file_detach(fd, &g_syslog_dev.sl_file);
if (ret < 0) if (ret < 0)
{ {
/* This should not happen and means that something very bad has /* This should not happen and means that something very bad has
* occurred. * occurred.
*/ */
g_sysdev.sl_state = SYSLOG_FAILURE; g_syslog_dev.sl_state = SYSLOG_FAILURE;
close(fd); close(fd);
return ret; return ret;
} }
/* The SYSLOG device is open and ready for writing. */ /* The SYSLOG device is open and ready for writing. */
sem_init(&g_sysdev.sl_sem, 0, 1); sem_init(&g_syslog_dev.sl_sem, 0, 1);
g_sysdev.sl_holder = NO_HOLDER; g_syslog_dev.sl_holder = NO_HOLDER;
g_sysdev.sl_state = SYSLOG_OPENED; g_syslog_dev.sl_state = SYSLOG_OPENED;
return OK; return OK;
} }
@ -368,12 +368,12 @@ int syslog_putc(int ch)
* has been successfully opened. * has been successfully opened.
*/ */
if (g_sysdev.sl_state != SYSLOG_OPENED) if (g_syslog_dev.sl_state != SYSLOG_OPENED)
{ {
/* Case (1) and (2) */ /* Case (1) and (2) */
if (g_sysdev.sl_state == SYSLOG_UNINITIALIZED || if (g_syslog_dev.sl_state == SYSLOG_UNINITIALIZED ||
g_sysdev.sl_state == SYSLOG_INITIALIZING) g_syslog_dev.sl_state == SYSLOG_INITIALIZING)
{ {
errcode = EAGAIN; /* Can't access the SYSLOG now... maybe next time? */ errcode = EAGAIN; /* Can't access the SYSLOG now... maybe next time? */
goto errout_with_errcode; goto errout_with_errcode;
@ -381,7 +381,7 @@ int syslog_putc(int ch)
/* Case (6) */ /* Case (6) */
if (g_sysdev.sl_state == SYSLOG_FAILURE) if (g_syslog_dev.sl_state == SYSLOG_FAILURE)
{ {
errcode = ENXIO; /* There is no SYSLOG device */ errcode = ENXIO; /* There is no SYSLOG device */
goto errout_with_errcode; goto errout_with_errcode;
@ -399,7 +399,7 @@ int syslog_putc(int ch)
*/ */
sched_lock(); sched_lock();
if (g_sysdev.sl_state == SYSLOG_REOPEN) if (g_syslog_dev.sl_state == SYSLOG_REOPEN)
{ {
/* Try again to initialize the device. We may do this repeatedly /* Try again to initialize the device. We may do this repeatedly
* because the log device might be something that was not ready * because the log device might be something that was not ready
@ -418,7 +418,7 @@ int syslog_putc(int ch)
} }
sched_unlock(); sched_unlock();
DEBUGASSERT(g_sysdev.sl_state == SYSLOG_OPENED); DEBUGASSERT(g_syslog_dev.sl_state == SYSLOG_OPENED);
} }
/* Ignore carriage returns */ /* Ignore carriage returns */
@ -432,11 +432,11 @@ int syslog_putc(int ch)
* value to write. * value to write.
*/ */
ret = syslog_takesem(); ret = syslog_dev_takesem();
if (ret < 0) if (ret < 0)
{ {
/* We probably already hold the semaphore and were probably /* We probably already hold the semaphore and were probably
* re-entered by the logic kicked off by syslog_write(). * re-entered by the logic kicked off by syslog_dev_write().
* We might also have been interrupted by a signal. Either * We might also have been interrupted by a signal. Either
* way, we are outta here. * way, we are outta here.
*/ */
@ -451,7 +451,7 @@ int syslog_putc(int ch)
{ {
/* Write the CR-LF sequence */ /* Write the CR-LF sequence */
nbytes = syslog_write(g_syscrlf, 2); nbytes = syslog_dev_write(g_syscrlf, 2);
/* Synchronize the file when each CR-LF is encountered (i.e., /* Synchronize the file when each CR-LF is encountered (i.e.,
* implements line buffering always). * implements line buffering always).
@ -460,7 +460,7 @@ int syslog_putc(int ch)
#ifndef CONFIG_DISABLE_MOUNTPOINT #ifndef CONFIG_DISABLE_MOUNTPOINT
if (nbytes > 0) if (nbytes > 0)
{ {
syslog_flush(); syslog_dev_flush();
} }
#endif #endif
} }
@ -469,10 +469,10 @@ int syslog_putc(int ch)
/* Write the non-newline character (and don't flush) */ /* Write the non-newline character (and don't flush) */
uch = (uint8_t)ch; uch = (uint8_t)ch;
nbytes = syslog_write(&uch, 1); nbytes = syslog_dev_write(&uch, 1);
} }
syslog_givesem(); syslog_dev_givesem();
/* Check if the write was successful. If not, nbytes will be /* Check if the write was successful. If not, nbytes will be
* a negated errno value. * a negated errno value.

View File

@ -45,6 +45,8 @@
#include "syslog.h" #include "syslog.h"
#ifndef CONFIG_ARCH_SYSLOG
/**************************************************************************** /****************************************************************************
* Public Functions * Public Functions
****************************************************************************/ ****************************************************************************/
@ -54,10 +56,19 @@
* *
* Description: * Description:
* One power up, the SYSLOG facility is non-existent or limited to very * One power up, the SYSLOG facility is non-existent or limited to very
* low-level output. This function is called later in the intialization * low-level output. This function is called later in the initialization
* sequence after full driver support has been initialized. It installs * sequence after full driver support has been initialized. It installs
* the configured SYSLOG drivers and enables full SYSLOGing capability. * the configured SYSLOG drivers and enables full SYSLOGing capability.
* *
* This function performs these basic operations:
*
* - Initialize the SYSLOG device
* - Call syslog_channel() to begin using that device.
*
* If CONFIG_ARCH_SYSLOG is selected, then the architecture-specifica
* logic will provide its own SYSLOG device initialize which must include
* as a minimum a call to syslog_channel() to use the device.
*
* Input Parameters: * Input Parameters:
* None * None
* *
@ -92,3 +103,5 @@ int syslog_initialize(void)
return ret; return ret;
} }
#endif /* CONFIG_ARCH_SYSLOG */

View File

@ -97,15 +97,25 @@ extern "C"
/**************************************************************************** /****************************************************************************
* Public Function Prototypes * Public Function Prototypes
****************************************************************************/ ****************************************************************************/
/**************************************************************************** /****************************************************************************
* Name: syslog_initialize * Name: syslog_initialize
* *
* Description: * Description:
* One power up, the SYSLOG facility is non-existent or limited to very * One power up, the SYSLOG facility is non-existent or limited to very
* low-level output. This function is called later in the intialization * low-level output. This function is called later in the initialization
* sequence after full driver support has been initialized. It installs * sequence after full driver support has been initialized. It installs
* the configured SYSLOG drivers and enables full SYSLOGing capability. * the configured SYSLOG drivers and enables full SYSLOGing capability.
* *
* This function performs these basic operations:
*
* - Initialize the SYSLOG device
* - Call syslog_channel() to begin using that device.
*
* If CONFIG_ARCH_SYSLOG is selected, then the architecture-specifica
* logic will provide its own SYSLOG device initialize which must include
* as a minimum a call to syslog_channel() to use the device.
*
* Input Parameters: * Input Parameters:
* None * None
* *
@ -115,7 +125,11 @@ extern "C"
* *
****************************************************************************/ ****************************************************************************/
#ifndef CONFIG_ARCH_SYSLOG
int syslog_initialize(void); int syslog_initialize(void);
#else
# define syslog_initialize()
#endif
/**************************************************************************** /****************************************************************************
* Name: syslog_putc * Name: syslog_putc