ACK: [PATCH 3/3] lib: acpica + fwts_framework: add --acpica-debug option
Alex Hung
alex.hung at canonical.com
Mon Jun 10 07:45:44 UTC 2013
On 06/07/2013 04:41 PM, Colin King wrote:
> From: Colin Ian King <colin.king at canonical.com>
>
> fwts_acpica had some ACPICA debug helpers that were originally
> intended to dump out ACPICA debug messages, but it was never
> fully implemented.
>
> Remove these helpers fwts_acpica_set_log_callback and
> fwts_acpica_debug_command as well as the callback func pointer
> fwts_acpica_log_callback_func as we can implement the debug
> in a better way.
>
> Re-work fwts_acpica_vprintf to now dump directly to the fwts
> log if fw->flags has FWTS_FLAG_ACPICA_DEBUG set. Add the new
> --acpica-debug option to the framework and documentation.
>
> The --acpica-debug option is to help the fwts developers to see
> the ACPICA internal warning and error messages rather than trying
> to guess why fwts has caused ACPICA to misfunction.
>
> Signed-off-by: Colin Ian King <colin.king at canonical.com>
> ---
> doc/fwts.1 | 4 ++++
> src/acpica/fwts_acpica.c | 39 +++++++++++++++------------------------
> src/lib/include/fwts_acpica.h | 2 --
> src/lib/include/fwts_framework.h | 1 +
> src/lib/src/fwts_framework.c | 4 ++++
> 5 files changed, 24 insertions(+), 26 deletions(-)
>
> diff --git a/doc/fwts.1 b/doc/fwts.1
> index b6ef362..187751c 100644
> --- a/doc/fwts.1
> +++ b/doc/fwts.1
> @@ -60,6 +60,10 @@ fwts options are as follow:
> .B \-
> output results to stdout.
> .TP
> +.B \-\-acpica\-debug
> +enable ACPICA debug warning and error messages when invoking the ACPICA subsystem. This is mainly
> +for fwts developers to help track down any ACPICA interfacing issues with fwts.
> +.TP
> .B \-a, \-\-all
> run all the tests.
> .TP
> diff --git a/src/acpica/fwts_acpica.c b/src/acpica/fwts_acpica.c
> index 42b68f1..e396cd9 100644
> --- a/src/acpica/fwts_acpica.c
> +++ b/src/acpica/fwts_acpica.c
> @@ -17,6 +17,8 @@
> *
> */
>
> +#define _GNU_SOURCE
> +
> #include <unistd.h>
> #include <stdio.h>
> #include <string.h>
> @@ -96,7 +98,6 @@ static void *fwts_acpica_DSDT;
>
> static fwts_framework *fwts_acpica_fw; /* acpica context copy of fw */
> static bool fwts_acpica_init_called; /* > 0, ACPICA initialised */
> -static fwts_acpica_log_callback fwts_acpica_log_callback_func = NULL; /* logging call back func */
>
> /* Semaphore Tracking */
>
> @@ -384,25 +385,6 @@ ACPI_PHYSICAL_ADDRESS AeLocalGetRootPointer(void)
> }
>
> /*
> - * fwts_acpica_set_log_callback()
> - * define logging callback function as used by fwts_acpica_vprintf()
> - */
> -void fwts_acpica_set_log_callback(fwts_framework *fw, fwts_acpica_log_callback func)
> -{
> - fwts_acpica_log_callback_func = func;
> -}
> -
> -/*
> - * fwts_acpica_debug_command()
> - * run a debugging command, requires a logging callback function (or set to NULL for none).
> - */
> -void fwts_acpica_debug_command(fwts_framework *fw, fwts_acpica_log_callback func, char *command)
> -{
> - fwts_acpica_set_log_callback(fw, func);
> - AcpiDbCommandDispatch(command, NULL, NULL);
> -}
> -
> -/*
> * fwts_acpica_vprintf()
> * accumulate prints from ACPICA engine, emit them when we hit terminal '\n'
> */
> @@ -411,10 +393,18 @@ void fwts_acpica_vprintf(const char *fmt, va_list args)
> static char *buffer;
> static size_t buffer_len;
>
> - char tmp[4096];
> + char *tmp;
> size_t tmp_len;
>
> - vsnprintf(tmp, sizeof(tmp), fmt, args);
> + /* Only emit messages if in ACPICA debug mode */
> + if (!(fwts_acpica_fw->flags & FWTS_FLAG_ACPICA_DEBUG))
> + return;
> +
> + if (vasprintf(&tmp, fmt, args) < 0) {
> + fwts_log_info(fwts_acpica_fw, "Out of memory allocating ACPICA printf buffer.");
> + return;
> + }
> +
> tmp_len = strlen(tmp);
>
> if (buffer_len == 0) {
> @@ -434,11 +424,12 @@ void fwts_acpica_vprintf(const char *fmt, va_list args)
> }
>
> if (index(buffer, '\n') != NULL) {
> - if (fwts_acpica_log_callback_func)
> - fwts_acpica_log_callback_func(fwts_acpica_fw, buffer);
> + fwts_log_info(fwts_acpica_fw, "%s", buffer);
> free(buffer);
> buffer_len = 0;
> }
> +
> + free(tmp);
> }
>
> /*
> diff --git a/src/lib/include/fwts_acpica.h b/src/lib/include/fwts_acpica.h
> index 17a5988..ab492e7 100644
> --- a/src/lib/include/fwts_acpica.h
> +++ b/src/lib/include/fwts_acpica.h
> @@ -26,8 +26,6 @@ typedef void (*fwts_acpica_log_callback)(fwts_framework *fw, const char *buffer)
>
> int fwts_acpica_init(fwts_framework *fw);
> int fwts_acpica_deinit(void);
> -void fwts_acpica_set_log_callback(fwts_framework *fw, fwts_acpica_log_callback func);
> -void fwts_acpica_debug_command(fwts_framework *fw, fwts_acpica_log_callback func, char *command);
> fwts_list *fwts_acpica_get_object_names(int type);
> void fwts_acpica_sem_count_clear(void);
> void fwts_acpica_sem_count_get(int *acquired, int *released);
> diff --git a/src/lib/include/fwts_framework.h b/src/lib/include/fwts_framework.h
> index 7a540ad..ab831a9 100644
> --- a/src/lib/include/fwts_framework.h
> +++ b/src/lib/include/fwts_framework.h
> @@ -36,6 +36,7 @@ typedef enum {
> FWTS_FLAG_FORCE_CLEAN = 0x00000004,
> FWTS_FLAG_SHOW_TESTS = 0x00000008,
> FWTS_FLAG_SHOW_PROGRESS_DIALOG = 0x00000010,
> + FWTS_FLAG_ACPICA_DEBUG = 0x00000020,
> FWTS_FLAG_BATCH = 0x00001000,
> FWTS_FLAG_INTERACTIVE = 0x00002000,
> FWTS_FLAG_BATCH_EXPERIMENTAL = 0x00004000,
> diff --git a/src/lib/src/fwts_framework.c b/src/lib/src/fwts_framework.c
> index ff1e3b3..1cf49fc 100644
> --- a/src/lib/src/fwts_framework.c
> +++ b/src/lib/src/fwts_framework.c
> @@ -82,6 +82,7 @@ static fwts_option fwts_framework_options[] = {
> { "unsafe", "U", 0, "Unsafe tests (tests that can potentially cause kernel oopses." },
> { "filter-error-discard", "", 1, "Discard errors that match any of the specified labels." },
> { "filter-error-keep", "", 1, "Keep errors that match any of the specified labels." },
> + { "acpica-debug", "", 0, "Enable ACPICA debug/warning messages." },
> { NULL, NULL, 0, NULL }
> };
>
> @@ -1099,6 +1100,9 @@ int fwts_framework_options_handler(fwts_framework *fw, int argc, char * const ar
> if (fwts_framework_filter_error_parse(optarg, &fw->errors_filter_keep) != FWTS_OK)
> return FWTS_ERROR;
> break;
> + case 36: /* --acpica-debug */
> + fw->flags |= FWTS_FLAG_ACPICA_DEBUG;
> + break;
> }
> break;
> case 'a': /* --all */
>
Acked-by: <alex.hung at canonical.com>
--
Cheers,
Alex Hung
More information about the fwts-devel
mailing list