diff mbox

acpi unit-test: resolved iasl crash

Message ID 1388320370-28732-1-git-send-email-marcel.a@redhat.com
State New
Headers show

Commit Message

Marcel Apfelbaum Dec. 29, 2013, 12:32 p.m. UTC
It seems that iasl has an issue when disassembles
some ACPI tables using the command line:
iasl -e DSDT -e SSDT -d HPET
I opened a bug on iasl project:
https://github.com/acpica/acpica/issues/20

Modified the iasl command line to "iasl -d HPET"
until the problem is solved. The command line
remained the same for DSDT and SSDT tables.

Reported-by:Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Marcel Apfelbaum <marcel.a@redhat.com>
---
 tests/acpi-test.c | 16 +++++++++-------
 1 file changed, 9 insertions(+), 7 deletions(-)

Comments

Michael S. Tsirkin Jan. 6, 2014, 11:43 a.m. UTC | #1
On Sun, Dec 29, 2013 at 02:32:50PM +0200, Marcel Apfelbaum wrote:
> It seems that iasl has an issue when disassembles
> some ACPI tables using the command line:
> iasl -e DSDT -e SSDT -d HPET
> I opened a bug on iasl project:
> https://github.com/acpica/acpica/issues/20
> 
> Modified the iasl command line to "iasl -d HPET"
> until the problem is solved. The command line
> remained the same for DSDT and SSDT tables.
> 
> Reported-by:Michael S. Tsirkin <mst@redhat.com>

space needed after :

> Signed-off-by: Marcel Apfelbaum <marcel.a@redhat.com>
> ---
>  tests/acpi-test.c | 16 +++++++++-------
>  1 file changed, 9 insertions(+), 7 deletions(-)
> 
> diff --git a/tests/acpi-test.c b/tests/acpi-test.c
> index 2d32b69..26d2e26 100644
> --- a/tests/acpi-test.c
> +++ b/tests/acpi-test.c
> @@ -403,7 +403,7 @@ static void dump_aml_files(test_data *data, bool rebuild)
>      }
>  }
>  
> -static void load_asl(GArray *sdts, AcpiSdtTable *sdt)
> +static void load_asl(GArray *sdts, AcpiSdtTable *sdt, bool referenceDsdt)
>  {
>      AcpiSdtTable *temp;
>      GError *error = NULL;
> @@ -419,9 +419,11 @@ static void load_asl(GArray *sdts, AcpiSdtTable *sdt)
>  
>      /* build command line */
>      g_string_append_printf(command_line, " -p %s ", sdt->asl_file);
> -    for (i = 0; i < 2; ++i) { /* reference DSDT and SSDT */
> -        temp = &g_array_index(sdts, AcpiSdtTable, i);
> -        g_string_append_printf(command_line, "-e %s ", temp->aml_file);
> +    if (referenceDsdt) {
> +        for (i = 0; i < 2; ++i) { /* reference DSDT and SSDT */
> +            temp = &g_array_index(sdts, AcpiSdtTable, i);
> +            g_string_append_printf(command_line, "-e %s ", temp->aml_file);
> +        }
>      }
>      g_string_append_printf(command_line, "-d %s", sdt->aml_file);
>  
> @@ -510,14 +512,14 @@ static void test_acpi_asl(test_data *data)
>      dump_aml_files(data, false);
>      for (i = 0; i < data->ssdt_tables->len; ++i) {
>          GString *asl, *exp_asl;
> -
> +        bool referenceDsdt = (i < 2); /* only for DSDT and SSDT */


Please don't use camelCase for variables.
Can we check the table signature instead of looking at the index?

>          sdt = &g_array_index(data->ssdt_tables, AcpiSdtTable, i);
>          exp_sdt = &g_array_index(exp_data.ssdt_tables, AcpiSdtTable, i);
>  
> -        load_asl(data->ssdt_tables, sdt);
> +        load_asl(data->ssdt_tables, sdt, referenceDsdt);
>          asl = normalize_asl(sdt->asl);
>  
> -        load_asl(exp_data.ssdt_tables, exp_sdt);
> +        load_asl(exp_data.ssdt_tables, exp_sdt, referenceDsdt);
>          exp_asl = normalize_asl(exp_sdt->asl);
>  
>          g_assert(!g_strcmp0(asl->str, exp_asl->str));
> -- 
> 1.8.3.1
Marcel Apfelbaum Jan. 6, 2014, 1:21 p.m. UTC | #2
On Mon, 2014-01-06 at 13:43 +0200, Michael S. Tsirkin wrote:
> On Sun, Dec 29, 2013 at 02:32:50PM +0200, Marcel Apfelbaum wrote:
> > It seems that iasl has an issue when disassembles
> > some ACPI tables using the command line:
> > iasl -e DSDT -e SSDT -d HPET
> > I opened a bug on iasl project:
> > https://github.com/acpica/acpica/issues/20
> > 
> > Modified the iasl command line to "iasl -d HPET"
> > until the problem is solved. The command line
> > remained the same for DSDT and SSDT tables.
> > 
> > Reported-by:Michael S. Tsirkin <mst@redhat.com>
> 
> space needed after :
Sure, missed that
> 
> > Signed-off-by: Marcel Apfelbaum <marcel.a@redhat.com>
> > ---
> >  tests/acpi-test.c | 16 +++++++++-------
> >  1 file changed, 9 insertions(+), 7 deletions(-)
> > 
> > diff --git a/tests/acpi-test.c b/tests/acpi-test.c
> > index 2d32b69..26d2e26 100644
> > --- a/tests/acpi-test.c
> > +++ b/tests/acpi-test.c
> > @@ -403,7 +403,7 @@ static void dump_aml_files(test_data *data, bool rebuild)
> >      }
> >  }
> >  
> > -static void load_asl(GArray *sdts, AcpiSdtTable *sdt)
> > +static void load_asl(GArray *sdts, AcpiSdtTable *sdt, bool referenceDsdt)
> >  {
> >      AcpiSdtTable *temp;
> >      GError *error = NULL;
> > @@ -419,9 +419,11 @@ static void load_asl(GArray *sdts, AcpiSdtTable *sdt)
> >  
> >      /* build command line */
> >      g_string_append_printf(command_line, " -p %s ", sdt->asl_file);
> > -    for (i = 0; i < 2; ++i) { /* reference DSDT and SSDT */
> > -        temp = &g_array_index(sdts, AcpiSdtTable, i);
> > -        g_string_append_printf(command_line, "-e %s ", temp->aml_file);
> > +    if (referenceDsdt) {
> > +        for (i = 0; i < 2; ++i) { /* reference DSDT and SSDT */
> > +            temp = &g_array_index(sdts, AcpiSdtTable, i);
> > +            g_string_append_printf(command_line, "-e %s ", temp->aml_file);
> > +        }
> >      }
> >      g_string_append_printf(command_line, "-d %s", sdt->aml_file);
> >  
> > @@ -510,14 +512,14 @@ static void test_acpi_asl(test_data *data)
> >      dump_aml_files(data, false);
> >      for (i = 0; i < data->ssdt_tables->len; ++i) {
> >          GString *asl, *exp_asl;
> > -
> > +        bool referenceDsdt = (i < 2); /* only for DSDT and SSDT */
> 
> 
> Please don't use camelCase for variables.
Sure, no idea why I did that in the first place...

> Can we check the table signature instead of looking at the index?
It is possible, but not really necessary because:
 1. The array of expected tables it is created as a shadow of the
    original tables. (We load the expected tables in the exact order as the originals)
 2. The loading is done based on table signatures.
So going over the index in *this* case it means going over the signatures.

Thanks for the review,
Marcel 

> 
> >          sdt = &g_array_index(data->ssdt_tables, AcpiSdtTable, i);
> >          exp_sdt = &g_array_index(exp_data.ssdt_tables, AcpiSdtTable, i);
> >  
> > -        load_asl(data->ssdt_tables, sdt);
> > +        load_asl(data->ssdt_tables, sdt, referenceDsdt);
> >          asl = normalize_asl(sdt->asl);
> >  
> > -        load_asl(exp_data.ssdt_tables, exp_sdt);
> > +        load_asl(exp_data.ssdt_tables, exp_sdt, referenceDsdt);
> >          exp_asl = normalize_asl(exp_sdt->asl);
> >  
> >          g_assert(!g_strcmp0(asl->str, exp_asl->str));
> > -- 
> > 1.8.3.1
Michael S. Tsirkin Jan. 6, 2014, 2:35 p.m. UTC | #3
On Mon, Jan 06, 2014 at 03:21:52PM +0200, Marcel Apfelbaum wrote:
> On Mon, 2014-01-06 at 13:43 +0200, Michael S. Tsirkin wrote:
> > On Sun, Dec 29, 2013 at 02:32:50PM +0200, Marcel Apfelbaum wrote:
> > > It seems that iasl has an issue when disassembles
> > > some ACPI tables using the command line:
> > > iasl -e DSDT -e SSDT -d HPET
> > > I opened a bug on iasl project:
> > > https://github.com/acpica/acpica/issues/20
> > > 
> > > Modified the iasl command line to "iasl -d HPET"
> > > until the problem is solved. The command line
> > > remained the same for DSDT and SSDT tables.
> > > 
> > > Reported-by:Michael S. Tsirkin <mst@redhat.com>
> > 
> > space needed after :
> Sure, missed that
> > 
> > > Signed-off-by: Marcel Apfelbaum <marcel.a@redhat.com>
> > > ---
> > >  tests/acpi-test.c | 16 +++++++++-------
> > >  1 file changed, 9 insertions(+), 7 deletions(-)
> > > 
> > > diff --git a/tests/acpi-test.c b/tests/acpi-test.c
> > > index 2d32b69..26d2e26 100644
> > > --- a/tests/acpi-test.c
> > > +++ b/tests/acpi-test.c
> > > @@ -403,7 +403,7 @@ static void dump_aml_files(test_data *data, bool rebuild)
> > >      }
> > >  }
> > >  
> > > -static void load_asl(GArray *sdts, AcpiSdtTable *sdt)
> > > +static void load_asl(GArray *sdts, AcpiSdtTable *sdt, bool referenceDsdt)
> > >  {
> > >      AcpiSdtTable *temp;
> > >      GError *error = NULL;
> > > @@ -419,9 +419,11 @@ static void load_asl(GArray *sdts, AcpiSdtTable *sdt)
> > >  
> > >      /* build command line */
> > >      g_string_append_printf(command_line, " -p %s ", sdt->asl_file);
> > > -    for (i = 0; i < 2; ++i) { /* reference DSDT and SSDT */
> > > -        temp = &g_array_index(sdts, AcpiSdtTable, i);
> > > -        g_string_append_printf(command_line, "-e %s ", temp->aml_file);
> > > +    if (referenceDsdt) {
> > > +        for (i = 0; i < 2; ++i) { /* reference DSDT and SSDT */
> > > +            temp = &g_array_index(sdts, AcpiSdtTable, i);
> > > +            g_string_append_printf(command_line, "-e %s ", temp->aml_file);
> > > +        }
> > >      }
> > >      g_string_append_printf(command_line, "-d %s", sdt->aml_file);
> > >  
> > > @@ -510,14 +512,14 @@ static void test_acpi_asl(test_data *data)
> > >      dump_aml_files(data, false);
> > >      for (i = 0; i < data->ssdt_tables->len; ++i) {
> > >          GString *asl, *exp_asl;
> > > -
> > > +        bool referenceDsdt = (i < 2); /* only for DSDT and SSDT */
> > 
> > 
> > Please don't use camelCase for variables.
> Sure, no idea why I did that in the first place...
> 
> > Can we check the table signature instead of looking at the index?
> It is possible, but not really necessary because:
>  1. The array of expected tables it is created as a shadow of the
>     original tables. (We load the expected tables in the exact order as the originals)
>  2. The loading is done based on table signatures.
> So going over the index in *this* case it means going over the signatures.

Yes but it's really not a good idea to assume that there's
a single SSDT, the fact you need a comment shows that
it's fragile.
How about a simple API like
 compare_signature(GArray *, const char *signature)


We should also probably rename ssdt_tables to something else
if it holds other tables besides ssdt. all_tables?

> Thanks for the review,
> Marcel 
> 
> > 
> > >          sdt = &g_array_index(data->ssdt_tables, AcpiSdtTable, i);
> > >          exp_sdt = &g_array_index(exp_data.ssdt_tables, AcpiSdtTable, i);
> > >  
> > > -        load_asl(data->ssdt_tables, sdt);
> > > +        load_asl(data->ssdt_tables, sdt, referenceDsdt);
> > >          asl = normalize_asl(sdt->asl);
> > >  
> > > -        load_asl(exp_data.ssdt_tables, exp_sdt);
> > > +        load_asl(exp_data.ssdt_tables, exp_sdt, referenceDsdt);
> > >          exp_asl = normalize_asl(exp_sdt->asl);
> > >  
> > >          g_assert(!g_strcmp0(asl->str, exp_asl->str));
> > > -- 
> > > 1.8.3.1
> 
>
Marcel Apfelbaum Jan. 6, 2014, 2:58 p.m. UTC | #4
On Mon, 2014-01-06 at 16:35 +0200, Michael S. Tsirkin wrote:
> On Mon, Jan 06, 2014 at 03:21:52PM +0200, Marcel Apfelbaum wrote:
> > On Mon, 2014-01-06 at 13:43 +0200, Michael S. Tsirkin wrote:
> > > On Sun, Dec 29, 2013 at 02:32:50PM +0200, Marcel Apfelbaum wrote:
> > > > It seems that iasl has an issue when disassembles
> > > > some ACPI tables using the command line:
> > > > iasl -e DSDT -e SSDT -d HPET
> > > > I opened a bug on iasl project:
> > > > https://github.com/acpica/acpica/issues/20
> > > > 
> > > > Modified the iasl command line to "iasl -d HPET"
> > > > until the problem is solved. The command line
> > > > remained the same for DSDT and SSDT tables.
> > > > 
> > > > Reported-by:Michael S. Tsirkin <mst@redhat.com>
> > > 
> > > space needed after :
> > Sure, missed that
> > > 
> > > > Signed-off-by: Marcel Apfelbaum <marcel.a@redhat.com>
> > > > ---
> > > >  tests/acpi-test.c | 16 +++++++++-------
> > > >  1 file changed, 9 insertions(+), 7 deletions(-)
> > > > 
> > > > diff --git a/tests/acpi-test.c b/tests/acpi-test.c
> > > > index 2d32b69..26d2e26 100644
> > > > --- a/tests/acpi-test.c
> > > > +++ b/tests/acpi-test.c
> > > > @@ -403,7 +403,7 @@ static void dump_aml_files(test_data *data, bool rebuild)
> > > >      }
> > > >  }
> > > >  
> > > > -static void load_asl(GArray *sdts, AcpiSdtTable *sdt)
> > > > +static void load_asl(GArray *sdts, AcpiSdtTable *sdt, bool referenceDsdt)
> > > >  {
> > > >      AcpiSdtTable *temp;
> > > >      GError *error = NULL;
> > > > @@ -419,9 +419,11 @@ static void load_asl(GArray *sdts, AcpiSdtTable *sdt)
> > > >  
> > > >      /* build command line */
> > > >      g_string_append_printf(command_line, " -p %s ", sdt->asl_file);
> > > > -    for (i = 0; i < 2; ++i) { /* reference DSDT and SSDT */
> > > > -        temp = &g_array_index(sdts, AcpiSdtTable, i);
> > > > -        g_string_append_printf(command_line, "-e %s ", temp->aml_file);
> > > > +    if (referenceDsdt) {
> > > > +        for (i = 0; i < 2; ++i) { /* reference DSDT and SSDT */
> > > > +            temp = &g_array_index(sdts, AcpiSdtTable, i);
> > > > +            g_string_append_printf(command_line, "-e %s ", temp->aml_file);
> > > > +        }
> > > >      }
> > > >      g_string_append_printf(command_line, "-d %s", sdt->aml_file);
> > > >  
> > > > @@ -510,14 +512,14 @@ static void test_acpi_asl(test_data *data)
> > > >      dump_aml_files(data, false);
> > > >      for (i = 0; i < data->ssdt_tables->len; ++i) {
> > > >          GString *asl, *exp_asl;
> > > > -
> > > > +        bool referenceDsdt = (i < 2); /* only for DSDT and SSDT */
> > > 
> > > 
> > > Please don't use camelCase for variables.
> > Sure, no idea why I did that in the first place...
> > 
> > > Can we check the table signature instead of looking at the index?
> > It is possible, but not really necessary because:
> >  1. The array of expected tables it is created as a shadow of the
> >     original tables. (We load the expected tables in the exact order as the originals)
> >  2. The loading is done based on table signatures.
> > So going over the index in *this* case it means going over the signatures.
> 
> Yes but it's really not a good idea to assume that there's
> a single SSDT, the fact you need a comment shows that
> it's fragile.
> How about a simple API like
>  compare_signature(GArray *, const char *signature)
> 
> 
> We should also probably rename ssdt_tables to something else
> if it holds other tables besides ssdt. all_tables?
OK, I'll follow this path

Thanks,
Marcel

> 
> > Thanks for the review,
> > Marcel 
> > 
> > > 
> > > >          sdt = &g_array_index(data->ssdt_tables, AcpiSdtTable, i);
> > > >          exp_sdt = &g_array_index(exp_data.ssdt_tables, AcpiSdtTable, i);
> > > >  
> > > > -        load_asl(data->ssdt_tables, sdt);
> > > > +        load_asl(data->ssdt_tables, sdt, referenceDsdt);
> > > >          asl = normalize_asl(sdt->asl);
> > > >  
> > > > -        load_asl(exp_data.ssdt_tables, exp_sdt);
> > > > +        load_asl(exp_data.ssdt_tables, exp_sdt, referenceDsdt);
> > > >          exp_asl = normalize_asl(exp_sdt->asl);
> > > >  
> > > >          g_assert(!g_strcmp0(asl->str, exp_asl->str));
> > > > -- 
> > > > 1.8.3.1
> > 
> >
diff mbox

Patch

diff --git a/tests/acpi-test.c b/tests/acpi-test.c
index 2d32b69..26d2e26 100644
--- a/tests/acpi-test.c
+++ b/tests/acpi-test.c
@@ -403,7 +403,7 @@  static void dump_aml_files(test_data *data, bool rebuild)
     }
 }
 
-static void load_asl(GArray *sdts, AcpiSdtTable *sdt)
+static void load_asl(GArray *sdts, AcpiSdtTable *sdt, bool referenceDsdt)
 {
     AcpiSdtTable *temp;
     GError *error = NULL;
@@ -419,9 +419,11 @@  static void load_asl(GArray *sdts, AcpiSdtTable *sdt)
 
     /* build command line */
     g_string_append_printf(command_line, " -p %s ", sdt->asl_file);
-    for (i = 0; i < 2; ++i) { /* reference DSDT and SSDT */
-        temp = &g_array_index(sdts, AcpiSdtTable, i);
-        g_string_append_printf(command_line, "-e %s ", temp->aml_file);
+    if (referenceDsdt) {
+        for (i = 0; i < 2; ++i) { /* reference DSDT and SSDT */
+            temp = &g_array_index(sdts, AcpiSdtTable, i);
+            g_string_append_printf(command_line, "-e %s ", temp->aml_file);
+        }
     }
     g_string_append_printf(command_line, "-d %s", sdt->aml_file);
 
@@ -510,14 +512,14 @@  static void test_acpi_asl(test_data *data)
     dump_aml_files(data, false);
     for (i = 0; i < data->ssdt_tables->len; ++i) {
         GString *asl, *exp_asl;
-
+        bool referenceDsdt = (i < 2); /* only for DSDT and SSDT */
         sdt = &g_array_index(data->ssdt_tables, AcpiSdtTable, i);
         exp_sdt = &g_array_index(exp_data.ssdt_tables, AcpiSdtTable, i);
 
-        load_asl(data->ssdt_tables, sdt);
+        load_asl(data->ssdt_tables, sdt, referenceDsdt);
         asl = normalize_asl(sdt->asl);
 
-        load_asl(exp_data.ssdt_tables, exp_sdt);
+        load_asl(exp_data.ssdt_tables, exp_sdt, referenceDsdt);
         exp_asl = normalize_asl(exp_sdt->asl);
 
         g_assert(!g_strcmp0(asl->str, exp_asl->str));