diff mbox series

[PULL,36/46] bios-tables-test: Add data for complex numa test (GI, GP etc)

Message ID 61cbf56ef1c5dd9dbe6bd6625f6c8d2a82c5697f.1717527933.git.mst@redhat.com (mailing list archive)
State New, archived
Headers show
Series [PULL,01/46] vhost: dirty log should be per backend type | expand

Commit Message

Michael S. Tsirkin June 4, 2024, 7:08 p.m. UTC
From: Jonathan Cameron <Jonathan.Cameron@huawei.com>

Given this is a new configuration, there are affects on APIC, CEDT
and DSDT, but the key elements are in SRAT (plus related data in
HMAT).  The configuration has node to exercise many different combinations.

0) CPUs + Memory
1) GI only
2) GP only
3) CPUS only
4) Memory only
5) CPUs + HP memory

GI node, GP Node, Memory only node, hotplug memory
only node, latency and bandwidth such that in Linux Access0
(any initiator) and Access1 (CPU initiators only) given different
answers.  Following cropped to remove details of each entry.

[000h 0000 004h]                   Signature : "SRAT"    [System Resource Affinity Table]

[030h 0048 001h]               Subtable Type : 00 [Processor Local APIC/SAPIC Affinity]
[032h 0050 001h]     Proximity Domain Low(8) : 00
[033h 0051 001h]                     Apic ID : 00

[040h 0064 001h]               Subtable Type : 00 [Processor Local APIC/SAPIC Affinity]
[042h 0066 001h]     Proximity Domain Low(8) : 03                                                                                                                                                                                                                                      [043h 0067 001h]                     Apic ID : 01

[050h 0080 001h]               Subtable Type : 00 [Processor Local APIC/SAPIC Affinity]
[052h 0082 001h]     Proximity Domain Low(8) : 05
[053h 0083 001h]                     Apic ID : 02

[060h 0096 001h]               Subtable Type : 01 [Memory Affinity]
[062h 0098 004h]            Proximity Domain : 00000000
[068h 0104 008h]                Base Address : 0000000000000000
[070h 0112 008h]              Address Length : 00000000000A0000

[088h 0136 001h]               Subtable Type : 01 [Memory Affinity]
[08Ah 0138 004h]            Proximity Domain : 00000000
[090h 0144 008h]                Base Address : 0000000000100000
[098h 0152 008h]              Address Length : 0000000003F00000
[0A8h 0168 008h]                   Reserved3 : 0000000000000000

[0B0h 0176 001h]               Subtable Type : 01 [Memory Affinity]
[0B2h 0178 004h]            Proximity Domain : 00000004
[0B8h 0184 008h]                Base Address : 0000000004000000
[0C0h 0192 008h]              Address Length : 0000000004000000

//Comment in hw/i386/aml-build.c on why these exist - not part of
//ACPI requirements.
[0D8h 0216 001h]               Subtable Type : 01 [Memory Affinity]
[0DAh 0218 004h]            Proximity Domain : 00000000
[0E0h 0224 008h]                Base Address : 0000000000000000
[0E8h 0232 008h]              Address Length : 0000000000000000

[100h 0256 001h]               Subtable Type : 01 [Memory Affinity]
[102h 0258 004h]            Proximity Domain : 00000000
[108h 0264 008h]                Base Address : 0000000000000000
[110h 0272 008h]              Address Length : 0000000000000000

[128h 0296 001h]               Subtable Type : 01 [Memory Affinity]
[12Ah 0298 004h]            Proximity Domain : 00000000
[130h 0304 008h]                Base Address : 0000000000000000
[138h 0312 008h]              Address Length : 0000000000000000

[150h 0336 001h]               Subtable Type : 01 [Memory Affinity]
[152h 0338 004h]            Proximity Domain : 00000000
[158h 0344 008h]                Base Address : 0000000000000000
[160h 0352 008h]              Address Length : 0000000000000000

[178h 0376 001h]               Subtable Type : 01 [Memory Affinity]
[17Ah 0378 004h]            Proximity Domain : 00000000
[180h 0384 008h]                Base Address : 0000000000000000
[188h 0392 008h]              Address Length : 0000000000000000
// End of strange empty Memory Affinity structures.

[1A0h 0416 001h]               Subtable Type : 05 [Generic Initiator Affinity]
[1A3h 0419 001h]          Device Handle Type : 01
[1A4h 0420 004h]            Proximity Domain : 00000001
[1A8h 0424 010h]               Device Handle : 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00

[1C0h 0448 001h]               Subtable Type : 06 [Generic Port Affinity]
[1C3h 0451 001h]          Device Handle Type : 00
[1C4h 0452 004h]            Proximity Domain : 00000002
[1C8h 0456 010h]               Device Handle : 41 43 50 49 30 30 31 36 40 00 00 00 00 00 00 00

[1E0h 0480 001h]               Subtable Type : 01 [Memory Affinity]
[1E2h 0482 004h]            Proximity Domain : 00000005
[1E8h 0488 008h]                Base Address : 0000000100000000
[1F0h 0496 008h]              Address Length : 0000000090000000
[1FCh 0508 004h]       Flags (decoded below) : 00000003
                                     Enabled : 1
                               Hot Pluggable : 1
                                Non-Volatile : 0

Example block from HMAT:
[0F0h 0240 002h]              Structure Type : 0001 [System Locality Latency and Bandwidth Information]                                                                                                                                                                                 [0F2h 0242 002h]                    Reserved : 0000                                                                                                                                                                                                                                     [0F4h 0244 004h]                      Length : 00000078                                                                                                                                                                                                                                 [0F8h 0248 001h]       Flags (decoded below) : 00                                                                                                                                                                                                                                                                   Memory Hierarchy : 0                                                                                                                                                                                                                                                           Use Minimum Transfer Size : 0                                                                                                                                                                                                                                                            Non-sequential Transfers : 0
[0F9h 0249 001h]                   Data Type : 03
[0FAh 0250 001h]       Minimum Transfer Size : 00
[0FBh 0251 001h]                   Reserved1 : 00
[0FCh 0252 004h] Initiator Proximity Domains # : 00000004
[100h 0256 004h]  Target Proximity Domains # : 00000006
[104h 0260 004h]                   Reserved2 : 00000000
[108h 0264 008h]             Entry Base Unit : 0000000000000004
[110h 0272 004h] Initiator Proximity Domain List : 00000000
[114h 0276 004h] Initiator Proximity Domain List : 00000001
[118h 0280 004h] Initiator Proximity Domain List : 00000003
[11Ch 0284 004h] Initiator Proximity Domain List : 00000005
[120h 0288 004h] Target Proximity Domain List : 00000000
[124h 0292 004h] Target Proximity Domain List : 00000001
[128h 0296 004h] Target Proximity Domain List : 00000002
[12Ch 0300 004h] Target Proximity Domain List : 00000003
[130h 0304 004h] Target Proximity Domain List : 00000004
[134h 0308 004h] Target Proximity Domain List : 00000005
[138h 0312 002h]                       Entry : 00C8
[13Ah 0314 002h]                       Entry : 0000
[13Ch 0316 002h]                       Entry : 0032
[13Eh 0318 002h]                       Entry : 0000
[140h 0320 002h]                       Entry : 0032
[142h 0322 002h]                       Entry : 0064
[144h 0324 002h]                       Entry : 0019
[146h 0326 002h]                       Entry : 0000
[148h 0328 002h]                       Entry : 0064
[14Ah 0330 002h]                       Entry : 0000
[14Ch 0332 002h]                       Entry : 00C8
[14Eh 0334 002h]                       Entry : 0019
[150h 0336 002h]                       Entry : 0064
[152h 0338 002h]                       Entry : 0000
[154h 0340 002h]                       Entry : 0032
[156h 0342 002h]                       Entry : 0000
[158h 0344 002h]                       Entry : 0032
[15Ah 0346 002h]                       Entry : 0064
[15Ch 0348 002h]                       Entry : 0064
[15Eh 0350 002h]                       Entry : 0000
[160h 0352 002h]                       Entry : 0032
[162h 0354 002h]                       Entry : 0000
[164h 0356 002h]                       Entry : 0032
[166h 0358 002h]                       Entry : 00C8

Note the zeros represent entries where the target node has no
memory.  These could be surpressed but it isn't 'wrong' to provide
them and it is (probably) permissible under ACPI to hotplug memory
into these nodes later.

Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Message-Id: <20240524100507.32106-7-Jonathan.Cameron@huawei.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---
 tests/qtest/bios-tables-test-allowed-diff.h |   5 -----
 tests/data/acpi/q35/APIC.acpihmat-generic-x | Bin 0 -> 136 bytes
 tests/data/acpi/q35/CEDT.acpihmat-generic-x | Bin 0 -> 68 bytes
 tests/data/acpi/q35/DSDT.acpihmat-generic-x | Bin 0 -> 10400 bytes
 tests/data/acpi/q35/HMAT.acpihmat-generic-x | Bin 0 -> 360 bytes
 tests/data/acpi/q35/SRAT.acpihmat-generic-x | Bin 0 -> 520 bytes
 6 files changed, 5 deletions(-)

diff --git a/tests/data/acpi/q35/APIC.acpihmat-generic-x b/tests/data/acpi/q35/APIC.acpihmat-generic-x
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..317ddb3fbed94e4f49a87976fdc7f23b1a6c3fdc 100644
GIT binary patch
literal 136
zcmXxb%Mn0O3`XITcnlXkq!sRl6*D%L%2Ae5RD#JhHu=utPrpp@0J43U<G9+eEz!(O
p0B;wrJ6XY}$fv3+t#8iTuLjWcqk*CTI<LC^D}=wACRJWOATL<W3;_TD

literal 0
HcmV?d00001

diff --git a/tests/data/acpi/q35/CEDT.acpihmat-generic-x b/tests/data/acpi/q35/CEDT.acpihmat-generic-x
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..31c9011663639b4a0f4816f3b2b06398f94682f7 100644
GIT binary patch
literal 68
zcmZ>EbqR4{U|?Xhb@F%i2v%^42yj+VP*7lGU|;~TK{Nw{0)qoc4VVoE6CiAe2mn)-
B2LS*8

literal 0
HcmV?d00001

diff --git a/tests/data/acpi/q35/DSDT.acpihmat-generic-x b/tests/data/acpi/q35/DSDT.acpihmat-generic-x
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..a04451374d1b95764d34fbda1ec791a89ffdcc46 100644
GIT binary patch
literal 10400
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
DTa5vi

literal 0
HcmV?d00001

diff --git a/tests/data/acpi/q35/HMAT.acpihmat-generic-x b/tests/data/acpi/q35/HMAT.acpihmat-generic-x
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0e5765f6ee4c07638c70647ae145e968718b67cd 100644
GIT binary patch
literal 360
zcma)$u?oU46h%)`E5*sdrCT<g^9Qy|7pb6wAJD;1aP;%?S#r}?8U(=$A@?0_a^G+{
z-=7Zr*p2;g3*F<|hY*4T<aIAP0p<Kl%1LivWByzE=Veftt@-_NO)66XwIR*knBIts
t?eaMgjn%}QYk&q{c(?Xe^KMITx#vH<336X#q6H=((dJuwh>OiW@d0Cl4*>uG

literal 0
HcmV?d00001

diff --git a/tests/data/acpi/q35/SRAT.acpihmat-generic-x b/tests/data/acpi/q35/SRAT.acpihmat-generic-x
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..cbf45a31ba6d2c06f2bb0e203d4b40100522ac08 100644
GIT binary patch
literal 520
zcmWFzatz^MVqjoQbMklg2v%^42yj+VP*7lGU|;~TK{N=%fdD$6nGsc<l?j>8r~%gr
z1za!&in$1N0#Nx6%rJ$h=CQzpVGJ0JrVgeIKS0=v9}JW_Rs{xV_`<>k0$^dnroh0!
i#K6Gd=p5i_U|?wGfF{qV!3y^nRL=yM06c&h7#IL5atr|g

literal 0
HcmV?d00001

Comments

Richard Henderson June 5, 2024, 2:39 p.m. UTC | #1
On 6/4/24 14:08, Michael S. Tsirkin wrote:
> From: Jonathan Cameron <Jonathan.Cameron@huawei.com>
> 
> Given this is a new configuration, there are affects on APIC, CEDT
> and DSDT, but the key elements are in SRAT (plus related data in
> HMAT).  The configuration has node to exercise many different combinations.
> 
> 0) CPUs + Memory
> 1) GI only
> 2) GP only
> 3) CPUS only
> 4) Memory only
> 5) CPUs + HP memory
> 
> GI node, GP Node, Memory only node, hotplug memory
> only node, latency and bandwidth such that in Linux Access0
> (any initiator) and Access1 (CPU initiators only) given different
> answers.  Following cropped to remove details of each entry.


This fails testing:

https://gitlab.com/qemu-project/qemu/-/jobs/7021105504

acpi-test: Warning! SRAT binary file mismatch. Actual [aml:/tmp/aml-GHR6O2], Expected 
[aml:tests/data/acpi/q35/SRAT.acpihmat-generic-x].
See source file tests/qtest/bios-tables-test.c for instructions on how to update expected 
files.
to see ASL diff between mismatched files install IASL, rebuild QEMU from scratch and 
re-run tests with V=1 environment variable set**
ERROR:../alt/tests/qtest/bios-tables-test.c:550:test_acpi_asl: assertion failed: 
(all_tables_match)
Bail out! ERROR:../alt/tests/qtest/bios-tables-test.c:550:test_acpi_asl: assertion failed: 
(all_tables_match)
Aborted (core dumped)


r~
Jonathan Cameron June 5, 2024, 3:27 p.m. UTC | #2
On Wed, 5 Jun 2024 07:39:53 -0700
Richard Henderson <richard.henderson@linaro.org> wrote:

> On 6/4/24 14:08, Michael S. Tsirkin wrote:
> > From: Jonathan Cameron <Jonathan.Cameron@huawei.com>
> > 
> > Given this is a new configuration, there are affects on APIC, CEDT
> > and DSDT, but the key elements are in SRAT (plus related data in
> > HMAT).  The configuration has node to exercise many different combinations.
> > 
> > 0) CPUs + Memory
> > 1) GI only
> > 2) GP only
> > 3) CPUS only
> > 4) Memory only
> > 5) CPUs + HP memory
> > 
> > GI node, GP Node, Memory only node, hotplug memory
> > only node, latency and bandwidth such that in Linux Access0
> > (any initiator) and Access1 (CPU initiators only) given different
> > answers.  Following cropped to remove details of each entry.  
> 
> 
> This fails testing:
> 
> https://gitlab.com/qemu-project/qemu/-/jobs/7021105504
> 
> acpi-test: Warning! SRAT binary file mismatch. Actual [aml:/tmp/aml-GHR6O2], Expected 
> [aml:tests/data/acpi/q35/SRAT.acpihmat-generic-x].
> See source file tests/qtest/bios-tables-test.c for instructions on how to update expected 
> files.
> to see ASL diff between mismatched files install IASL, rebuild QEMU from scratch and 
> re-run tests with V=1 environment variable set**
> ERROR:../alt/tests/qtest/bios-tables-test.c:550:test_acpi_asl: assertion failed: 
> (all_tables_match)
> Bail out! ERROR:../alt/tests/qtest/bios-tables-test.c:550:test_acpi_asl: assertion failed: 
> (all_tables_match)
> Aborted (core dumped)
> 

s390 and passes on an x86 host, so I guess an endian bug - any chance of a table dump
from someone with access to an s390 host?

This test covers some stuff that was previously missing tests
so may be non trivial to spot.

I'll play guess in the meantime. So far I'm not seeing anything that differs
from existing ACPI table building code.

Jonathan


> 
> r~
Jonathan Cameron June 5, 2024, 3:49 p.m. UTC | #3
On Wed, 5 Jun 2024 16:27:33 +0100
Jonathan Cameron via <qemu-devel@nongnu.org> wrote:

> On Wed, 5 Jun 2024 07:39:53 -0700
> Richard Henderson <richard.henderson@linaro.org> wrote:
> 
> > On 6/4/24 14:08, Michael S. Tsirkin wrote:  
> > > From: Jonathan Cameron <Jonathan.Cameron@huawei.com>
> > > 
> > > Given this is a new configuration, there are affects on APIC, CEDT
> > > and DSDT, but the key elements are in SRAT (plus related data in
> > > HMAT).  The configuration has node to exercise many different combinations.
> > > 
> > > 0) CPUs + Memory
> > > 1) GI only
> > > 2) GP only
> > > 3) CPUS only
> > > 4) Memory only
> > > 5) CPUs + HP memory
> > > 
> > > GI node, GP Node, Memory only node, hotplug memory
> > > only node, latency and bandwidth such that in Linux Access0
> > > (any initiator) and Access1 (CPU initiators only) given different
> > > answers.  Following cropped to remove details of each entry.    
> > 
> > 
> > This fails testing:
> > 
> > https://gitlab.com/qemu-project/qemu/-/jobs/7021105504
> > 
> > acpi-test: Warning! SRAT binary file mismatch. Actual [aml:/tmp/aml-GHR6O2], Expected 
> > [aml:tests/data/acpi/q35/SRAT.acpihmat-generic-x].
> > See source file tests/qtest/bios-tables-test.c for instructions on how to update expected 
> > files.
> > to see ASL diff between mismatched files install IASL, rebuild QEMU from scratch and 
> > re-run tests with V=1 environment variable set**
> > ERROR:../alt/tests/qtest/bios-tables-test.c:550:test_acpi_asl: assertion failed: 
> > (all_tables_match)
> > Bail out! ERROR:../alt/tests/qtest/bios-tables-test.c:550:test_acpi_asl: assertion failed: 
> > (all_tables_match)
> > Aborted (core dumped)
> >   
> 
> s390 and passes on an x86 host, so I guess an endian bug - any chance of a table dump
> from someone with access to an s390 host?
> 
> This test covers some stuff that was previously missing tests
> so may be non trivial to spot.
> 
> I'll play guess in the meantime. So far I'm not seeing anything that differs
> from existing ACPI table building code.

Ok. I think it a bug earlier in this patch set. A table dump would confirm.

One item that looks dodgy is the filling in of the ACPI HID.

It's messy in the ACPI spec as it's defined as both an integer
and a string.
 
Need to take a 4 character string and get it into hid of

struct {
   uint64_t hid;
   uint32_t uid;
}
which id done with an 8 byte memcpy.
that is then written to SRAT wtih
build_append_int_noprefix(table_data, handle->hid, 8);

So I need to byte swap it if host doesn't match guest endian.

I'll put together a patch, but perhaps best plan is if Michael
drops generic ports and we go around again :(

At least I don't have much backed up behind this one.

Jonathan

> 
> Jonathan
> 
> 
> > 
> > r~  
> 
>
Richard Henderson June 5, 2024, 4:01 p.m. UTC | #4
On 6/5/24 10:27, Jonathan Cameron wrote:
>> This fails testing:
>>
>> https://gitlab.com/qemu-project/qemu/-/jobs/7021105504
>>
>> acpi-test: Warning! SRAT binary file mismatch. Actual [aml:/tmp/aml-GHR6O2], Expected
>> [aml:tests/data/acpi/q35/SRAT.acpihmat-generic-x].
>> See source file tests/qtest/bios-tables-test.c for instructions on how to update expected
>> files.
>> to see ASL diff between mismatched files install IASL, rebuild QEMU from scratch and
>> re-run tests with V=1 environment variable set**
>> ERROR:../alt/tests/qtest/bios-tables-test.c:550:test_acpi_asl: assertion failed:
>> (all_tables_match)
>> Bail out! ERROR:../alt/tests/qtest/bios-tables-test.c:550:test_acpi_asl: assertion failed:
>> (all_tables_match)
>> Aborted (core dumped)
>>
> 
> s390 and passes on an x86 host, so I guess an endian bug - any chance of a table dump
> from someone with access to an s390 host?

Sure.  By what incantation do I produce a dump?


r~
Jonathan Cameron June 5, 2024, 4:08 p.m. UTC | #5
On Wed, 5 Jun 2024 09:01:37 -0700
Richard Henderson <richard.henderson@linaro.org> wrote:

> On 6/5/24 10:27, Jonathan Cameron wrote:
> >> This fails testing:
> >>
> >> https://gitlab.com/qemu-project/qemu/-/jobs/7021105504
> >>
> >> acpi-test: Warning! SRAT binary file mismatch. Actual [aml:/tmp/aml-GHR6O2], Expected
> >> [aml:tests/data/acpi/q35/SRAT.acpihmat-generic-x].
> >> See source file tests/qtest/bios-tables-test.c for instructions on how to update expected
> >> files.
> >> to see ASL diff between mismatched files install IASL, rebuild QEMU from scratch and
> >> re-run tests with V=1 environment variable set**
> >> ERROR:../alt/tests/qtest/bios-tables-test.c:550:test_acpi_asl: assertion failed:
> >> (all_tables_match)
> >> Bail out! ERROR:../alt/tests/qtest/bios-tables-test.c:550:test_acpi_asl: assertion failed:
> >> (all_tables_match)
> >> Aborted (core dumped)
> >>  
> > 
> > s390 and passes on an x86 host, so I guess an endian bug - any chance of a table dump
> > from someone with access to an s390 host?  
> 
> Sure.  By what incantation do I produce a dump?

If you still have the /mnt/aml-GHR602 above then either upload that somewhere or
iasl -d /mnt/aml-GHR602
should generate you a suitable text file.  However generic ports are fairly recent
so you may need a newer iasl from acpica-tools to decode.
It will moan if it doesn't understand the content.

Jonathan

> 
> 
> r~
Jonathan Cameron June 5, 2024, 4:11 p.m. UTC | #6
On Wed, 5 Jun 2024 17:08:45 +0100
Jonathan Cameron <Jonathan.Cameron@huawei.com> wrote:

> On Wed, 5 Jun 2024 09:01:37 -0700
> Richard Henderson <richard.henderson@linaro.org> wrote:
> 
> > On 6/5/24 10:27, Jonathan Cameron wrote:  
> > >> This fails testing:
> > >>
> > >> https://gitlab.com/qemu-project/qemu/-/jobs/7021105504
> > >>
> > >> acpi-test: Warning! SRAT binary file mismatch. Actual [aml:/tmp/aml-GHR6O2], Expected
> > >> [aml:tests/data/acpi/q35/SRAT.acpihmat-generic-x].
> > >> See source file tests/qtest/bios-tables-test.c for instructions on how to update expected
> > >> files.
> > >> to see ASL diff between mismatched files install IASL, rebuild QEMU from scratch and
> > >> re-run tests with V=1 environment variable set**
> > >> ERROR:../alt/tests/qtest/bios-tables-test.c:550:test_acpi_asl: assertion failed:
> > >> (all_tables_match)
> > >> Bail out! ERROR:../alt/tests/qtest/bios-tables-test.c:550:test_acpi_asl: assertion failed:
> > >> (all_tables_match)
> > >> Aborted (core dumped)
> > >>    
> > > 
> > > s390 and passes on an x86 host, so I guess an endian bug - any chance of a table dump
> > > from someone with access to an s390 host?    
> > 
> > Sure.  By what incantation do I produce a dump?  
> 
> If you still have the /mnt/aml-GHR602 above then either upload that somewhere or
> iasl -d /mnt/aml-GHR602
> should generate you a suitable text file.  However generic ports are fairly recent
> so you may need a newer iasl from acpica-tools to decode.
> It will moan if it doesn't understand the content.
> 
make check-qtest-x86_64 is how I get the test to run in the first place.

Alternatively, this 'might' be sufficient if my guess for the problem
is correct. Thanks!

From 956df037f024783f19b6b00e5e280484380227a0 Mon Sep 17 00:00:00 2001
From: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Date: Wed, 5 Jun 2024 17:01:36 +0100
Subject: [PATCH] hw/acpi: Fix big endian host creation of Generic Port
 Affinity Structures

Treating the HID as an integer caused it to get bit reversed
on big endian hosts running little endian guests.  Treat it
as a character array instead.

Fixes hw/acpi: Generic Port Affinity Structure Support
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>

---
Maybe this is the only problem?  I don't have a setup to test
so any help would be appreciated.
---
 include/hw/acpi/acpi_generic_initiator.h | 2 +-
 hw/acpi/acpi_generic_initiator.c         | 6 +++++-
 2 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/include/hw/acpi/acpi_generic_initiator.h b/include/hw/acpi/acpi_generic_initiator.h
index 1a899af30f..5baefda33a 100644
--- a/include/hw/acpi/acpi_generic_initiator.h
+++ b/include/hw/acpi/acpi_generic_initiator.h
@@ -61,7 +61,7 @@ typedef struct PCIDeviceHandle {
             uint16_t bdf;
         };
         struct {
-            uint64_t hid;
+            char hid[8];
             uint32_t uid;
         };
     };
diff --git a/hw/acpi/acpi_generic_initiator.c b/hw/acpi/acpi_generic_initiator.c
index 78b80dcf08..c2fb5ab2ef 100644
--- a/hw/acpi/acpi_generic_initiator.c
+++ b/hw/acpi/acpi_generic_initiator.c
@@ -150,8 +150,12 @@ build_srat_generic_node_affinity(GArray *table_data, int node,
         build_append_int_noprefix(table_data, handle->bdf, 2);
         build_append_int_noprefix(table_data, 0, 12);
     } else {
+        int i;
+
         /* Device Handle - ACPI */
-        build_append_int_noprefix(table_data, handle->hid, 8);
+        for (i = 0; i < sizeof(handle->hid); i++) {
+            build_append_int_noprefix(table_data, handle->hid[i], 1);
+        }
         build_append_int_noprefix(table_data, handle->uid, 4);
         build_append_int_noprefix(table_data, 0, 4);
     }
Richard Henderson June 5, 2024, 4:54 p.m. UTC | #7
On 6/5/24 11:11, Jonathan Cameron wrote:
>>> Sure.  By what incantation do I produce a dump?
>>
>> If you still have the /mnt/aml-GHR602 above then either upload that somewhere or
>> iasl -d /mnt/aml-GHR602
>> should generate you a suitable text file.  However generic ports are fairly recent
>> so you may need a newer iasl from acpica-tools to decode.
>> It will moan if it doesn't understand the content.
>>
> make check-qtest-x86_64 is how I get the test to run in the first place.

Ah, I see, the file is not cleaned up on abort.
For the record, I attach the dump.

> Alternatively, this 'might' be sufficient if my guess for the problem
> is correct. Thanks!
> 
>  From 956df037f024783f19b6b00e5e280484380227a0 Mon Sep 17 00:00:00 2001
> From: Jonathan Cameron <Jonathan.Cameron@huawei.com>
> Date: Wed, 5 Jun 2024 17:01:36 +0100
> Subject: [PATCH] hw/acpi: Fix big endian host creation of Generic Port
>   Affinity Structures
> 
> Treating the HID as an integer caused it to get bit reversed
> on big endian hosts running little endian guests.  Treat it
> as a character array instead.
> 
> Fixes hw/acpi: Generic Port Affinity Structure Support
> Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
> 
> ---
> Maybe this is the only problem?  I don't have a setup to test
> so any help would be appreciated.
> ---
>   include/hw/acpi/acpi_generic_initiator.h | 2 +-
>   hw/acpi/acpi_generic_initiator.c         | 6 +++++-
>   2 files changed, 6 insertions(+), 2 deletions(-)
> 
> diff --git a/include/hw/acpi/acpi_generic_initiator.h b/include/hw/acpi/acpi_generic_initiator.h
> index 1a899af30f..5baefda33a 100644
> --- a/include/hw/acpi/acpi_generic_initiator.h
> +++ b/include/hw/acpi/acpi_generic_initiator.h
> @@ -61,7 +61,7 @@ typedef struct PCIDeviceHandle {
>               uint16_t bdf;
>           };
>           struct {
> -            uint64_t hid;
> +            char hid[8];
>               uint32_t uid;
>           };
>       };
> diff --git a/hw/acpi/acpi_generic_initiator.c b/hw/acpi/acpi_generic_initiator.c
> index 78b80dcf08..c2fb5ab2ef 100644
> --- a/hw/acpi/acpi_generic_initiator.c
> +++ b/hw/acpi/acpi_generic_initiator.c
> @@ -150,8 +150,12 @@ build_srat_generic_node_affinity(GArray *table_data, int node,
>           build_append_int_noprefix(table_data, handle->bdf, 2);
>           build_append_int_noprefix(table_data, 0, 12);
>       } else {
> +        int i;
> +
>           /* Device Handle - ACPI */
> -        build_append_int_noprefix(table_data, handle->hid, 8);
> +        for (i = 0; i < sizeof(handle->hid); i++) {
> +            build_append_int_noprefix(table_data, handle->hid[i], 1);
> +        }
>           build_append_int_noprefix(table_data, handle->uid, 4);
>           build_append_int_noprefix(table_data, 0, 4);
>       }

Yes, this fixes the abort.
Merge the declaration of i into the for loop?


r~
Jonathan Cameron June 5, 2024, 5:19 p.m. UTC | #8
On Wed, 5 Jun 2024 09:54:16 -0700
Richard Henderson <richard.henderson@linaro.org> wrote:

> On 6/5/24 11:11, Jonathan Cameron wrote:
> >>> Sure.  By what incantation do I produce a dump?  
> >>
> >> If you still have the /mnt/aml-GHR602 above then either upload that somewhere or
> >> iasl -d /mnt/aml-GHR602
> >> should generate you a suitable text file.  However generic ports are fairly recent
> >> so you may need a newer iasl from acpica-tools to decode.
> >> It will moan if it doesn't understand the content.
> >>  
> > make check-qtest-x86_64 is how I get the test to run in the first place.  
> 
> Ah, I see, the file is not cleaned up on abort.
Yes. End up with a lot of those after a while!

> For the record, I attach the dump.
Thanks!
> 
> > Alternatively, this 'might' be sufficient if my guess for the problem
> > is correct. Thanks!
> > 
> >  From 956df037f024783f19b6b00e5e280484380227a0 Mon Sep 17 00:00:00 2001
> > From: Jonathan Cameron <Jonathan.Cameron@huawei.com>
> > Date: Wed, 5 Jun 2024 17:01:36 +0100
> > Subject: [PATCH] hw/acpi: Fix big endian host creation of Generic Port
> >   Affinity Structures
> > 
> > Treating the HID as an integer caused it to get bit reversed
> > on big endian hosts running little endian guests.  Treat it
> > as a character array instead.
> > 
> > Fixes hw/acpi: Generic Port Affinity Structure Support
> > Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
> > 
> > ---
> > Maybe this is the only problem?  I don't have a setup to test
> > so any help would be appreciated.
> > ---
> >   include/hw/acpi/acpi_generic_initiator.h | 2 +-
> >   hw/acpi/acpi_generic_initiator.c         | 6 +++++-
> >   2 files changed, 6 insertions(+), 2 deletions(-)
> > 
> > diff --git a/include/hw/acpi/acpi_generic_initiator.h b/include/hw/acpi/acpi_generic_initiator.h
> > index 1a899af30f..5baefda33a 100644
> > --- a/include/hw/acpi/acpi_generic_initiator.h
> > +++ b/include/hw/acpi/acpi_generic_initiator.h
> > @@ -61,7 +61,7 @@ typedef struct PCIDeviceHandle {
> >               uint16_t bdf;
> >           };
> >           struct {
> > -            uint64_t hid;
> > +            char hid[8];
> >               uint32_t uid;
> >           };
> >       };
> > diff --git a/hw/acpi/acpi_generic_initiator.c b/hw/acpi/acpi_generic_initiator.c
> > index 78b80dcf08..c2fb5ab2ef 100644
> > --- a/hw/acpi/acpi_generic_initiator.c
> > +++ b/hw/acpi/acpi_generic_initiator.c
> > @@ -150,8 +150,12 @@ build_srat_generic_node_affinity(GArray *table_data, int node,
> >           build_append_int_noprefix(table_data, handle->bdf, 2);
> >           build_append_int_noprefix(table_data, 0, 12);
> >       } else {
> > +        int i;
> > +
> >           /* Device Handle - ACPI */
> > -        build_append_int_noprefix(table_data, handle->hid, 8);
> > +        for (i = 0; i < sizeof(handle->hid); i++) {
> > +            build_append_int_noprefix(table_data, handle->hid[i], 1);
> > +        }
> >           build_append_int_noprefix(table_data, handle->uid, 4);
> >           build_append_int_noprefix(table_data, 0, 4);
> >       }  
> 
> Yes, this fixes the abort.
> Merge the declaration of i into the for loop?

sure.

Thanks for testing. Seems it's time I tried to get an emulated s390
setup running if that's practical as two of these in the last year :(

Jonathan


> 
> 
> r~
diff mbox series

Patch

diff --git a/tests/qtest/bios-tables-test-allowed-diff.h b/tests/qtest/bios-tables-test-allowed-diff.h
index a5aa801c99..dfb8523c8b 100644
--- a/tests/qtest/bios-tables-test-allowed-diff.h
+++ b/tests/qtest/bios-tables-test-allowed-diff.h
@@ -1,6 +1 @@ 
 /* List of comma-separated changed AML files to ignore */
-"tests/data/acpi/q35/APIC.acpihmat-generic-x",
-"tests/data/acpi/q35/CEDT.acpihmat-generic-x",
-"tests/data/acpi/q35/DSDT.acpihmat-generic-x",
-"tests/data/acpi/q35/HMAT.acpihmat-generic-x",
-"tests/data/acpi/q35/SRAT.acpihmat-generic-x",