On 07/07/2010 07:57 AM, Kevin O'Connor wrote:
Hi,

I've been playing with the cpu hotplug SSDT changes.  Attached is a
proposal for an alternative method of adding ACPI support.

The idea is to continue to build a dynamic SSDT based on CountCPUs and
MaxCountCPUs.  The dynamic SSDT entries just call methods in the main
DSDT.

This is completely untested.  Hopefully the patch will demonstrate the
idea though.

The objective is to dynamically build an SSDT that looks something
like:

===========================================================
{
     Scope (_SB) {
         External(CPMA, MethodObj)
         External(CPST, MethodObj)
         External(CPEJ, MethodObj)
#define DefCPU(nr)                                      \
         Processor (CP##nr, 0x##nr, 0x0000b010, 0x06) {  \
             Name (_HID, "ACPI0007")                     \
             Name (ID, 0x##nr)                           \
             Method(_MAT, 0) {                           \
                 Return(CPMA(ID))                        \
             }                                           \
             Method (_STA) {                             \
                 Return(CPST(ID))                        \
             }                                           \
             Method (_EJ0, 1, NotSerialized) {           \
                 Return(CPEJ(ID, Arg0))                  \
             }                                           \
         }
         DefCPU(00)
         DefCPU(01)
         DefCPU(02)
         DefCPU(03)
         DefCPU(AA)
         Name(CPUS, Package() {
             CP00, CP01, CP02, CP03, CPAA,
         })
         Name(CPON, Package() {
             One, One, One, Zero, Zero
         })
     }
}
===========================================================

with a dynamic number of cpus.

The "CPUS" package stores references to the Processor objects, and the
"CPON" package stores the state of which cpus are active.  With this
info, hopefully there is no need to update the MADT tables.

Thoughts?

Very nice. I thought about doing this but abandoned it as unmaintainable. Using external functions and the ID variable, however, reduces the mess to tolerable proportions, and gains us a lot of flexibility. We can now have any combinations of sockets and installed cpus.

--
I have a truly marvellous patch that fixes the bug which this
signature is too narrow to contain.

--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to