RE: Parsing PXM from ACPI (DSDT)

From: Schmauss, Erik
Date: Wed Aug 14 2019 - 17:44:22 EST




> -----Original Message-----
> From: linux-acpi-owner@xxxxxxxxxxxxxxx [mailto:linux-acpi-
> owner@xxxxxxxxxxxxxxx] On Behalf Of Duran, Leo
> Sent: Wednesday, August 14, 2019 2:30 PM
> To: linux-acpi@xxxxxxxxxxxxxxx; linux-kernel@xxxxxxxxxxxxxxx
> Cc: Rafael J. Wysocki <rjw@xxxxxxxxxxxxx>; Len Brown <lenb@xxxxxxxxxx>
> Subject: Parsing PXM from ACPI (DSDT)
>
Hi Leo,

> Hello,
> Is not clear or evident to me if the kernel parses _PXM values below (or under)
> the root-complex.

Build with CONFIG_ACPI_DEBUG=y and boot with acpi.debug_layer=0xffffffff acpi.debug_level=0x80000

This will print all of the AcpiEvaluateObject queries to the dmesg.

>
> For example, in my experience:
> This ASL sample for PXM at the root-complex level produces the expected
> NUMA assignment from âlstopoâ:
> Scope (\_SB) {
> // ...
> Device (PCI0) { // Root PCI Bus (Host-Bridge)
> Name (_HID, EISAID("PNP0A08"))
> Name (_CID, EISAID("PNP0A03"))
> Name (_BBN, 0)
> Method (_CRS,0) {
> // Return current resources for host bridge 0
> }
> Name (_PRT, Package() {
> // Package with PCI IRQ routing table information
> })
> Method (_PXM, 0, NotSerialized) {
> Return (0)
> }
> }
> // ...
> }
>
> However,
> This ASL sample for PXM at the P2P root-bridge level does not produce the
> expected NUMA assignment from âlstopoâ:
> (Of course, the assumption is that multiple NUMA nodes actually exist on the
> system)
>
> Scope (\_SB) {
> // ...
> Device (PCI0) { // Root PCI Bus (Host-Bridge)
> Name (_HID, EISAID ("PNP0A08"))
> Name (_CID, EISAID ("PNP0A03"))
> Name (_BBN, 0)
> Method (_CRS,0) {
> // Return current resources for host bridge 0
> }
> Name (_PRT, Package() {
> // Package with PCI IRQ routing table information
> })
>
> ÂÂÂ Device (P2P0) { // First PCI-to-PCI bridge (Port0)
> ÂÂÂÂÂ Name (_ADR, 0x00070001) // Device#7h, Func#1 on bus PCI0
> ÂÂÂÂÂ Name (_PRT, Package() {
> ÂÂÂÂÂ // Package with PCI IRQ routing table information
> ÂÂÂÂÂ })
> Method (_PXM, 0, NotSerialized) {
> Return (0)
> }
> ÂÂÂ }
>
> ÂÂÂ Device (P2P1) { // Second PCI-to-PCI bridge (Port1)
> ÂÂÂÂÂ Name (_ADR ,0x00080001) // Device#8h, Func#1 on bus PCI0
> ÂÂÂÂÂ Name (_PRT, Package() {
> ÂÂÂÂÂ // Package with PCI IRQ routing table information
> Â Â })
> Method (_PXM, 0, NotSerialized) {
> Return (1)
> }
> ÂÂÂ }
> }
> // ...
> }
>
> Thanks,
> Leo.