Patch "iommu/amd: Fix boot warning when device 00:00.0 is not iommu covered" has been added to the 4.4-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
iommu/amd: Fix boot warning when device 00:00.0 is not iommu covered
to the 4.4-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
iommu-amd-fix-boot-warning-when-device-00-00.0-is-not-iommu-covered.patch
and it can be found in the queue-4.4 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
38e45d02ea9f194b89d6bf41e52ccafc8e2c2b47Mon Sep 17 00:00:00 2001
From: Suravee Suthikulpanit <[email protected]>
Date: Tue, 23 Feb 2016 13:03:30 +0100
Subject: iommu/amd: Fix boot warning when device 00:00.0 is not iommu covered
From: Suravee Suthikulpanit <[email protected]>
commit 38e45d02ea9f194b89d6bf41e52ccafc8e2c2b47 upstream.
The setup code for the performance counters in the AMD IOMMU driver tests whether the counters can be written. It tests to setup a counter for device 00:00.0, which fails on systems where this particular device is not covered by the IOMMU.
Fix this by not relying on device 00:00.0 but only on the IOMMU being present.
--- drivers/iommu/amd_iommu_init.c | 34 ++++++++++++++++++++++------------ 1 file changed, 22 insertions(+), 12 deletions(-)
drivers/iommu/amd_iommu_init.c +22 -12
@@ -228,6 +228,10 @@ static int amd_iommu_enable_interrupts(vstatic int __init iommu_go_to_state (enum iommu_init_state state);static void init_device_table_dma (void ); +static int iommu_pc_get_set_reg_val (struct amd_iommu *iommu, +u8 bank,u8 cntr,u8 fxn, +u64 *value,bool is_write); +static inline void update_last_devid (u16 devid) {if (devid > amd_iommu_last_bdf)
@@ -1170,8 +1174,8 @@ static void init_iommu_perf_ctr(struct a amd_iommu_pc_present = true;/* Check if the performance counters can be written to */ -if ((0 !=amd_iommu_pc_get_set_reg_val (0 ,0 ,0 ,0 , &val, true)) || - (0 !=amd_iommu_pc_get_set_reg_val (0 ,0 ,0 ,0 , &val2, false)) || +if ((0 !=iommu_pc_get_set_reg_val (iommu,0 ,0 ,0 , &val, true)) || + (0 !=iommu_pc_get_set_reg_val (iommu,0 ,0 ,0 , &val2, false)) || (val != val2)) {pr_err ("AMD-Vi: Unable to write to IOMMU perf counter.\n" ); amd_iommu_pc_present = false;
@@ -2312,22 +2316,15 @@ u8 amd_iommu_pc_get_max_counters(u16 dev }EXPORT_SYMBOL (amd_iommu_pc_get_max_counters); -int amd_iommu_pc_get_set_reg_val (u16 devid,u8 bank,u8 cntr,u8 fxn, +static int iommu_pc_get_set_reg_val (struct amd_iommu *iommu, +u8 bank,u8 cntr,u8 fxn,u64 *value,bool is_write) { -struct amd_iommu *iommu;u32 offset;u32 max_offset_lim; -/* Make sure the IOMMU PC resource is available */ -if (!amd_iommu_pc_present) -return -ENODEV ; - -/* Locate the iommu associated with the device ID */ - iommu = amd_iommu_rlookup_table[devid]; -/* Check for valid iommu and pc register indexing */ -if (WARN_ON ((iommu ==NULL ) || (fxn >0x28 ) || (fxn &7 ))) +if (WARN_ON ((fxn >0x28 ) || (fxn &7 )))return -ENODEV ; offset = (u32)(((0x40 |bank) <<12 ) | (cntr <<8 ) | fxn);
@@ -2351,3 +2348,16 @@ int amd_iommu_pc_get_set_reg_val(u16 devreturn 0 ; }EXPORT_SYMBOL (amd_iommu_pc_get_set_reg_val); + +int amd_iommu_pc_get_set_reg_val (u16 devid,u8 bank,u8 cntr,u8 fxn, +u64 *value,bool is_write) +{ +struct amd_iommu *iommu = amd_iommu_rlookup_table[devid]; + +/* Make sure the IOMMU PC resource is available */ +if (!amd_iommu_pc_present || iommu ==NULL ) +return -ENODEV ; + +return iommu_pc_get_set_reg_val (iommu, bank, cntr, fxn, + value, is_write); +}
Patches currently in stable-queue which might be from [email protected] are
queue-4.4/iommu-amd-fix-boot-warning-when-device-00-00.0-is-not-iommu-covered.patch