diff mbox

[1/2] hvmloader: limit CPUs exposed to guests

Message ID 5762C111.5050600@oracle.com (mailing list archive)
State New, archived
Headers show

Commit Message

Boris Ostrovsky June 16, 2016, 3:09 p.m. UTC
On 06/16/2016 05:40 AM, Jan Beulich wrote:

-boris

Comments

Jan Beulich June 16, 2016, 3:25 p.m. UTC | #1
>>> 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
Boris Ostrovsky June 16, 2016, 3:37 p.m. UTC | #2
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
Jan Beulich June 16, 2016, 4:04 p.m. UTC | #3
>>> 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
Boris Ostrovsky June 16, 2016, 4:38 p.m. UTC | #4
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>
diff mbox

Patch

--- 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).