[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH v2 2/2] AMD/IOMMU: without XT, x2APIC needs to be forced into physical mode



On 28.02.2020 15:48, Andrew Cooper wrote:
> On 28/02/2020 12:12, Jan Beulich wrote:
>> The wider cluster mode APIC IDs aren't generally representable. Convert
>> the iommu_intremap variable into a tristate, allowing the AMD IOMMU
>> driver to signal this special restriction to the apic_x2apic_probe().
>> (Note: assignments to the variable get adjusted, while existing
>> consumers - all assuming a boolean property - are left alone.)
> 
> I think it would be helpful to state that while we are not aware of any
> hardware with this as a restriction, it is a situation which can be
> created on fully x2apic-capable systems via firmware settings.

Added.

>> Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>
>> ---
>> v2: New.
>>
>> --- a/xen/arch/x86/genapic/x2apic.c
>> +++ b/xen/arch/x86/genapic/x2apic.c
>> @@ -236,12 +236,21 @@ const struct genapic *__init apic_x2apic
>>          x2apic_phys = !iommu_intremap ||
>>                        (acpi_gbl_FADT.flags & ACPI_FADT_APIC_PHYSICAL);
>>      }
>> -    else if ( !x2apic_phys && !iommu_intremap )
>> -    {
>> -        printk("WARNING: x2APIC cluster mode is not supported without 
>> interrupt remapping\n"
>> -               "x2APIC: forcing phys mode\n");
>> -        x2apic_phys = true;
>> -    }
>> +    else if ( !x2apic_phys )
>> +        switch ( iommu_intremap )
>> +        {
>> +        case iommu_intremap_off:
>> +        case iommu_intremap_restricted:
>> +            printk("WARNING: x2APIC cluster mode is not supported %s 
>> interrupt remapping\n"
>> +                   "x2APIC: forcing phys mode\n",
> 
> Any chance to fold this into a single line with "- forcing phys mode\n"
> as a suffix?

I did consider doing so myself, but didn't do it then for being
an unrelated change. Now that you ask for it - done.

>> +                   iommu_intremap == iommu_intremap_off ? "without"
>> +                                                        : "with 
>> restricted");
>> +            x2apic_phys = true;
>> +            break;
>> +
>> +        case iommu_intremap_full:
>> +            break;
>> +        }
>>  
>>      if ( x2apic_phys )
>>          return &apic_x2apic_phys;
>> --- a/xen/include/xen/iommu.h
>> +++ b/xen/include/xen/iommu.h
>> @@ -54,7 +54,18 @@ static inline bool_t dfn_eq(dfn_t x, dfn
>>  
>>  extern bool_t iommu_enable, iommu_enabled;
>>  extern bool force_iommu, iommu_quarantine, iommu_verbose, iommu_igfx;
>> -extern bool_t iommu_snoop, iommu_qinval, iommu_intremap, iommu_intpost;
>> +extern bool_t iommu_snoop, iommu_qinval, iommu_intpost;
>> +extern enum __packed iommu_intremap {
>> +   /*
>> +    * In order to allow traditional boolean uses of the iommu_intremap
>> +    * variable, the "off" value has to come first (yielding a value of 
>> zero).
>> +    */
>> +   iommu_intremap_off,
>> +#ifdef CONFIG_X86
>> +   iommu_intremap_restricted,
> 
> This needs a note about its meaning.  How about this?
> 
> /* Interrupt remapping enabled, but only able to generate interrupts
> with an 8-bit APIC ID. */

Added.

> Otherwise, Reviewed-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>

Thanks.

> Not an issue for now, but "restricted" might become ambiguous with
> future extensions.

Yes, fair point.

Jan

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.