All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH for-2.6] acpi: fix bios linker loadder COMMAND_ALLOCATE on bigendian host
@ 2016-04-29 12:44 Igor Mammedov
  2016-04-29 13:16 ` Laurent Vivier
  2016-05-01  8:14 ` Marcel Apfelbaum
  0 siblings, 2 replies; 4+ messages in thread
From: Igor Mammedov @ 2016-04-29 12:44 UTC (permalink / raw)
  To: qemu-devel; +Cc: mst, dan, lvivier, david

'make check' fails with:

ERROR:tests/bios-tables-test.c:493:load_expected_aml:
   assertion failed: (g_file_test(aml_file, G_FILE_TEST_EXISTS))

since commit:
caf50c7166a6ed96c462ab5db4b495e1234e4cc6
tests: pc: acpi: drop not needed 'expected SSDT' blobs

Assert happens because qemu-system-x86_64 generates
SSDT table and test looks for a corresponding expected
table to compare with.

However there is no expected SSDT blob anymore, since
QEMU souldn't generate one. As it happens BIOS is not
able to read ACPI tables from QEMU and fallbacks to
embeded legacy ACPI codepath, which generates SSDT.
That happens due to wrongly sized endiannes conversion
which makes
 uint8_t BiosLinkerLoaderEntry.alloc.zone
end up with 0 due to truncation of 32 bit integer
which on host is 1 or 2.

Fix it by dropping invalid cpu_to_le32() as uint8_t
doesn't require any conversion.

RHBZ: https://bugzilla.redhat.com/show_bug.cgi?id=1330174

Signed-off-by: Igor Mammedov <imammedo@redhat.com>
---
 hw/acpi/bios-linker-loader.c | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/hw/acpi/bios-linker-loader.c b/hw/acpi/bios-linker-loader.c
index ace9abb..5153ab1 100644
--- a/hw/acpi/bios-linker-loader.c
+++ b/hw/acpi/bios-linker-loader.c
@@ -135,9 +135,8 @@ void bios_linker_loader_alloc(GArray *linker,
     strncpy(entry.alloc.file, file, sizeof entry.alloc.file - 1);
     entry.command = cpu_to_le32(BIOS_LINKER_LOADER_COMMAND_ALLOCATE);
     entry.alloc.align = cpu_to_le32(alloc_align);
-    entry.alloc.zone = cpu_to_le32(alloc_fseg ?
-                                    BIOS_LINKER_LOADER_ALLOC_ZONE_FSEG :
-                                    BIOS_LINKER_LOADER_ALLOC_ZONE_HIGH);
+    entry.alloc.zone = alloc_fseg ? BIOS_LINKER_LOADER_ALLOC_ZONE_FSEG :
+                                    BIOS_LINKER_LOADER_ALLOC_ZONE_HIGH;
 
     /* Alloc entries must come first, so prepend them */
     g_array_prepend_vals(linker, &entry, sizeof entry);
-- 
1.8.3.1

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [Qemu-devel] [PATCH for-2.6] acpi: fix bios linker loadder COMMAND_ALLOCATE on bigendian host
  2016-04-29 12:44 [Qemu-devel] [PATCH for-2.6] acpi: fix bios linker loadder COMMAND_ALLOCATE on bigendian host Igor Mammedov
@ 2016-04-29 13:16 ` Laurent Vivier
  2016-04-29 13:45   ` Igor Mammedov
  2016-05-01  8:14 ` Marcel Apfelbaum
  1 sibling, 1 reply; 4+ messages in thread
From: Laurent Vivier @ 2016-04-29 13:16 UTC (permalink / raw)
  To: Igor Mammedov, qemu-devel; +Cc: mst, dan, david



On 29/04/2016 14:44, Igor Mammedov wrote:
> 'make check' fails with:
> 
> ERROR:tests/bios-tables-test.c:493:load_expected_aml:
>    assertion failed: (g_file_test(aml_file, G_FILE_TEST_EXISTS))
> 
> since commit:
> caf50c7166a6ed96c462ab5db4b495e1234e4cc6
> tests: pc: acpi: drop not needed 'expected SSDT' blobs
> 
> Assert happens because qemu-system-x86_64 generates
> SSDT table and test looks for a corresponding expected
> table to compare with.
> 
> However there is no expected SSDT blob anymore, since
> QEMU souldn't generate one. As it happens BIOS is not
> able to read ACPI tables from QEMU and fallbacks to
> embeded legacy ACPI codepath, which generates SSDT.
> That happens due to wrongly sized endiannes conversion
> which makes
>  uint8_t BiosLinkerLoaderEntry.alloc.zone
> end up with 0 due to truncation of 32 bit integer
> which on host is 1 or 2.
> 
> Fix it by dropping invalid cpu_to_le32() as uint8_t
> doesn't require any conversion.
> 
> RHBZ: https://bugzilla.redhat.com/show_bug.cgi?id=1330174
> 
> Signed-off-by: Igor Mammedov <imammedo@redhat.com>

Tested-by: Laurent Vivier <lvivier@redhat.com>

Fix the problem.

We have always some warnings but they were already here in the previous
releases.

Laurent

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [Qemu-devel] [PATCH for-2.6] acpi: fix bios linker loadder COMMAND_ALLOCATE on bigendian host
  2016-04-29 13:16 ` Laurent Vivier
@ 2016-04-29 13:45   ` Igor Mammedov
  0 siblings, 0 replies; 4+ messages in thread
From: Igor Mammedov @ 2016-04-29 13:45 UTC (permalink / raw)
  To: Laurent Vivier; +Cc: qemu-devel, dan, david, mst

On Fri, 29 Apr 2016 15:16:07 +0200
Laurent Vivier <lvivier@redhat.com> wrote:

> On 29/04/2016 14:44, Igor Mammedov wrote:
> > 'make check' fails with:
> > 
> > ERROR:tests/bios-tables-test.c:493:load_expected_aml:
> >    assertion failed: (g_file_test(aml_file, G_FILE_TEST_EXISTS))
> > 
> > since commit:
> > caf50c7166a6ed96c462ab5db4b495e1234e4cc6
> > tests: pc: acpi: drop not needed 'expected SSDT' blobs
> > 
> > Assert happens because qemu-system-x86_64 generates
> > SSDT table and test looks for a corresponding expected
> > table to compare with.
> > 
> > However there is no expected SSDT blob anymore, since
> > QEMU souldn't generate one. As it happens BIOS is not
> > able to read ACPI tables from QEMU and fallbacks to
> > embeded legacy ACPI codepath, which generates SSDT.
> > That happens due to wrongly sized endiannes conversion
> > which makes
> >  uint8_t BiosLinkerLoaderEntry.alloc.zone
> > end up with 0 due to truncation of 32 bit integer
> > which on host is 1 or 2.
> > 
> > Fix it by dropping invalid cpu_to_le32() as uint8_t
> > doesn't require any conversion.
> > 
> > RHBZ: https://bugzilla.redhat.com/show_bug.cgi?id=1330174
> > 
> > Signed-off-by: Igor Mammedov <imammedo@redhat.com>  
> 
> Tested-by: Laurent Vivier <lvivier@redhat.com>
> 
> Fix the problem.
> 
> We have always some warnings but they were already here in the previous
> releases.
That warnings are due to broken endianess handling in iasl,
it looks at table header size and says it's too big
because it doesn't take into account that all integers in ACPI
are little-endian.


> 
> Laurent
> 

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [Qemu-devel] [PATCH for-2.6] acpi: fix bios linker loadder COMMAND_ALLOCATE on bigendian host
  2016-04-29 12:44 [Qemu-devel] [PATCH for-2.6] acpi: fix bios linker loadder COMMAND_ALLOCATE on bigendian host Igor Mammedov
  2016-04-29 13:16 ` Laurent Vivier
@ 2016-05-01  8:14 ` Marcel Apfelbaum
  1 sibling, 0 replies; 4+ messages in thread
From: Marcel Apfelbaum @ 2016-05-01  8:14 UTC (permalink / raw)
  To: Igor Mammedov, qemu-devel; +Cc: dan, lvivier, david, mst

On 04/29/2016 03:44 PM, Igor Mammedov wrote:
> 'make check' fails with:
>
> ERROR:tests/bios-tables-test.c:493:load_expected_aml:
>     assertion failed: (g_file_test(aml_file, G_FILE_TEST_EXISTS))
>
> since commit:
> caf50c7166a6ed96c462ab5db4b495e1234e4cc6
> tests: pc: acpi: drop not needed 'expected SSDT' blobs
>
> Assert happens because qemu-system-x86_64 generates
> SSDT table and test looks for a corresponding expected
> table to compare with.
>
> However there is no expected SSDT blob anymore, since
> QEMU souldn't generate one. As it happens BIOS is not
> able to read ACPI tables from QEMU and fallbacks to
> embeded legacy ACPI codepath, which generates SSDT.
> That happens due to wrongly sized endiannes conversion
> which makes
>   uint8_t BiosLinkerLoaderEntry.alloc.zone
> end up with 0 due to truncation of 32 bit integer
> which on host is 1 or 2.
>
> Fix it by dropping invalid cpu_to_le32() as uint8_t
> doesn't require any conversion.
>
> RHBZ: https://bugzilla.redhat.com/show_bug.cgi?id=1330174
>
> Signed-off-by: Igor Mammedov <imammedo@redhat.com>
> ---
>   hw/acpi/bios-linker-loader.c | 5 ++---
>   1 file changed, 2 insertions(+), 3 deletions(-)
>
> diff --git a/hw/acpi/bios-linker-loader.c b/hw/acpi/bios-linker-loader.c
> index ace9abb..5153ab1 100644
> --- a/hw/acpi/bios-linker-loader.c
> +++ b/hw/acpi/bios-linker-loader.c
> @@ -135,9 +135,8 @@ void bios_linker_loader_alloc(GArray *linker,
>       strncpy(entry.alloc.file, file, sizeof entry.alloc.file - 1);
>       entry.command = cpu_to_le32(BIOS_LINKER_LOADER_COMMAND_ALLOCATE);
>       entry.alloc.align = cpu_to_le32(alloc_align);
> -    entry.alloc.zone = cpu_to_le32(alloc_fseg ?
> -                                    BIOS_LINKER_LOADER_ALLOC_ZONE_FSEG :
> -                                    BIOS_LINKER_LOADER_ALLOC_ZONE_HIGH);
> +    entry.alloc.zone = alloc_fseg ? BIOS_LINKER_LOADER_ALLOC_ZONE_FSEG :
> +                                    BIOS_LINKER_LOADER_ALLOC_ZONE_HIGH;
>
>       /* Alloc entries must come first, so prepend them */
>       g_array_prepend_vals(linker, &entry, sizeof entry);
>

Reviewed-by: Marcel Apfelbaum <marcel@redhat.com>

Thanks,
Marcel

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2016-05-01  8:15 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-04-29 12:44 [Qemu-devel] [PATCH for-2.6] acpi: fix bios linker loadder COMMAND_ALLOCATE on bigendian host Igor Mammedov
2016-04-29 13:16 ` Laurent Vivier
2016-04-29 13:45   ` Igor Mammedov
2016-05-01  8:14 ` Marcel Apfelbaum

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.