|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v7 2/8] AMD/IOMMU: obtain IVHD type to use earlier
On 26.08.2021 14:30, Andrew Cooper wrote:
> On 26/08/2021 08:23, Jan Beulich wrote:
>> Doing this in amd_iommu_prepare() is too late for it, in particular, to
>> be used in amd_iommu_detect_one_acpi(), as a subsequent change will want
>> to do. Moving it immediately ahead of amd_iommu_detect_acpi() is
>> (luckily) pretty simple, (pretty importantly) without breaking
>> amd_iommu_prepare()'s logic to prevent multiple processing.
>>
>> This involves moving table checksumming, as
>> amd_iommu_get_supported_ivhd_type() -> get_supported_ivhd_type() will
>> now be invoked before amd_iommu_detect_acpi() -> detect_iommu_acpi(). In
>> the course of dojng so stop open-coding acpi_tb_checksum(), seeing that
>
> doing.
>
>> --- a/xen/drivers/passthrough/amd/iommu_acpi.c
>> +++ b/xen/drivers/passthrough/amd/iommu_acpi.c
>> @@ -1150,20 +1152,7 @@ static int __init parse_ivrs_table(struc
>> static int __init detect_iommu_acpi(struct acpi_table_header *table)
>> {
>> const struct acpi_ivrs_header *ivrs_block;
>> - unsigned long i;
>> unsigned long length = sizeof(struct acpi_table_ivrs);
>> - u8 checksum, *raw_table;
>> -
>> - /* validate checksum: sum of entire table == 0 */
>> - checksum = 0;
>> - raw_table = (u8 *)table;
>> - for ( i = 0; i < table->length; i++ )
>> - checksum += raw_table[i];
>> - if ( checksum )
>> - {
>> - AMD_IOMMU_DEBUG("IVRS Error: Invalid Checksum %#x\n", checksum);
>> - return -ENODEV;
>> - }
>>
>> while ( table->length > (length + sizeof(*ivrs_block)) )
>> {
>> @@ -1300,6 +1289,15 @@ get_supported_ivhd_type(struct acpi_tabl
>> {
>> size_t length = sizeof(struct acpi_table_ivrs);
>> const struct acpi_ivrs_header *ivrs_block, *blk = NULL;
>> + uint8_t checksum;
>> +
>> + /* Validate checksum: Sum of entire table == 0. */
>> + checksum = acpi_tb_checksum(ACPI_CAST_PTR(uint8_t, table),
>> table->length);
>> + if ( checksum )
>> + {
>> + AMD_IOMMU_DEBUG("IVRS Error: Invalid Checksum %#x\n", checksum);
>
> I know you're just moving code, but this really needs to be a visible
> error. It's "I'm turning off the IOMMU because the ACPI table is bad",
> which is about as serious as errors come.
I'll wait for us settling on patch 1 in this regard, and then follow
the same model here.
Jan
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |