Message ID | 5762C111.5050600@oracle.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
>>> On 16.06.16 at 17:09, <boris.ostrovsky@oracle.com> wrote: > On 06/16/2016 05:40 AM, Jan Beulich wrote: > > --- a/tools/firmware/hvmloader/acpi/mk_dsdt.c > +++ b/tools/firmware/hvmloader/acpi/mk_dsdt.c > @@ -150,6 +150,14 @@ int main(int argc, char **argv) > indent(); printf("MSU, 8\n"); > pop_block(); > > + /* Processor object helpers. */ > + push_block("Method", "PMAT, 2"); > + push_block("If", "LLess(Arg0, NCPU)"); > + stmt("Return", "ToBuffer(Arg1)"); > + pop_block(); > + stmt("Return", "Buffer() {0, 8, 0xff, 0xff, 0, 0, 0, 0}"); > > > Could you explain what this is? (I suspect this is related to MAT > object and I don't think I understand what it is). This is a helper routine for _MAT(), helping greatly to reduce overall size of the DSDT. It checks whether the CPU is within the range of available ones (online or offline), and if it isn't returns a static buffer instead of data read from MADT (as it's the purpose of this patch to remove these MADT entries for not present CPUs). Jan
On 06/16/2016 11:25 AM, Jan Beulich wrote: >>>> On 16.06.16 at 17:09, <boris.ostrovsky@oracle.com> wrote: >> On 06/16/2016 05:40 AM, Jan Beulich wrote: >> >> --- a/tools/firmware/hvmloader/acpi/mk_dsdt.c >> +++ b/tools/firmware/hvmloader/acpi/mk_dsdt.c >> @@ -150,6 +150,14 @@ int main(int argc, char **argv) >> indent(); printf("MSU, 8\n"); >> pop_block(); >> >> + /* Processor object helpers. */ >> + push_block("Method", "PMAT, 2"); >> + push_block("If", "LLess(Arg0, NCPU)"); >> + stmt("Return", "ToBuffer(Arg1)"); >> + pop_block(); >> + stmt("Return", "Buffer() {0, 8, 0xff, 0xff, 0, 0, 0, 0}"); >> >> >> Could you explain what this is? (I suspect this is related to MAT >> object and I don't think I understand what it is). > This is a helper routine for _MAT(), helping greatly to reduce > overall size of the DSDT. It checks whether the CPU is within the > range of available ones (online or offline), and if it isn't returns a > static buffer instead of data read from MADT (as it's the purpose > of this patch to remove these MADT entries for not present CPUs). I meant just the last line (I understand what the routine is --- I am not clear where MAT format is defined). -boris
>>> On 16.06.16 at 17:37, <boris.ostrovsky@oracle.com> wrote: > On 06/16/2016 11:25 AM, Jan Beulich wrote: >>>>> On 16.06.16 at 17:09, <boris.ostrovsky@oracle.com> wrote: >>> On 06/16/2016 05:40 AM, Jan Beulich wrote: >>> >>> --- a/tools/firmware/hvmloader/acpi/mk_dsdt.c >>> +++ b/tools/firmware/hvmloader/acpi/mk_dsdt.c >>> @@ -150,6 +150,14 @@ int main(int argc, char **argv) >>> indent(); printf("MSU, 8\n"); >>> pop_block(); >>> >>> + /* Processor object helpers. */ >>> + push_block("Method", "PMAT, 2"); >>> + push_block("If", "LLess(Arg0, NCPU)"); >>> + stmt("Return", "ToBuffer(Arg1)"); >>> + pop_block(); >>> + stmt("Return", "Buffer() {0, 8, 0xff, 0xff, 0, 0, 0, 0}"); >>> >>> >>> Could you explain what this is? (I suspect this is related to MAT >>> object and I don't think I understand what it is). >> This is a helper routine for _MAT(), helping greatly to reduce >> overall size of the DSDT. It checks whether the CPU is within the >> range of available ones (online or offline), and if it isn't returns a >> static buffer instead of data read from MADT (as it's the purpose >> of this patch to remove these MADT entries for not present CPUs). > > I meant just the last line (I understand what the routine is --- I am > not clear where MAT format is defined). That's a MADT entry of type ACPI_MADT_TYPE_LOCAL_APIC. Basically an equivalent of the ToBuffer(MAT) used previously (and now still used for CPU0). Jan
On 06/16/2016 12:04 PM, Jan Beulich wrote: >>>> On 16.06.16 at 17:37, <boris.ostrovsky@oracle.com> wrote: >> On 06/16/2016 11:25 AM, Jan Beulich wrote: >>>>>> On 16.06.16 at 17:09, <boris.ostrovsky@oracle.com> wrote: >>>> On 06/16/2016 05:40 AM, Jan Beulich wrote: >>>> >>>> --- a/tools/firmware/hvmloader/acpi/mk_dsdt.c >>>> +++ b/tools/firmware/hvmloader/acpi/mk_dsdt.c >>>> @@ -150,6 +150,14 @@ int main(int argc, char **argv) >>>> indent(); printf("MSU, 8\n"); >>>> pop_block(); >>>> >>>> + /* Processor object helpers. */ >>>> + push_block("Method", "PMAT, 2"); >>>> + push_block("If", "LLess(Arg0, NCPU)"); >>>> + stmt("Return", "ToBuffer(Arg1)"); >>>> + pop_block(); >>>> + stmt("Return", "Buffer() {0, 8, 0xff, 0xff, 0, 0, 0, 0}"); >>>> >>>> >>>> Could you explain what this is? (I suspect this is related to MAT >>>> object and I don't think I understand what it is). >>> This is a helper routine for _MAT(), helping greatly to reduce >>> overall size of the DSDT. It checks whether the CPU is within the >>> range of available ones (online or offline), and if it isn't returns a >>> static buffer instead of data read from MADT (as it's the purpose >>> of this patch to remove these MADT entries for not present CPUs). >> I meant just the last line (I understand what the routine is --- I am >> not clear where MAT format is defined). > That's a MADT entry of type ACPI_MADT_TYPE_LOCAL_APIC. Basically > an equivalent of the ToBuffer(MAT) used previously (and now still used > for CPU0). Ah, ok -- makes sense now. Reviewed-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
--- a/tools/firmware/hvmloader/acpi/mk_dsdt.c +++ b/tools/firmware/hvmloader/acpi/mk_dsdt.c @@ -150,6 +150,14 @@ int main(int argc, char **argv) indent(); printf("MSU, 8\n"); pop_block(); + /* Processor object helpers. */ + push_block("Method", "PMAT, 2"); + push_block("If", "LLess(Arg0, NCPU)"); + stmt("Return", "ToBuffer(Arg1)"); + pop_block(); + stmt("Return", "Buffer() {0, 8, 0xff, 0xff, 0, 0, 0, 0}"); Could you explain what this is? (I suspect this is related to MAT object and I don't think I understand what it is).