mirror of
https://github.com/torvalds/linux.git
synced 2026-09-24 06:24:02 +02:00
iommu/vt-d: Force requesting ACS when tboot is enabled
Currently the conditions of requesting ACS in detect_intel_iommu()
don't include tboot, leading to a possible misconfiguration with ACS
disabled (e.g. due to user opts) while iommu is later forced on by
tboot_force_iommu().
Fix it by checking tboot in detect_intel_iommu().
Fixes: 5d990b6275 ("PCI: add pci_request_acs")
Cc: stable@vger.kernel.org
Signed-off-by: Kevin Tian <kevin.tian@intel.com>
Signed-off-by: Lu Baolu <baolu.lu@linux.intel.com>
Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
This commit is contained in:
parent
219cc978d6
commit
607432b261
|
|
@ -915,6 +915,18 @@ dmar_validate_one_drhd(struct acpi_dmar_header *entry, void *arg)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static bool dmar_required(void)
|
||||
{
|
||||
/* tboot supersedes any user/platform opt */
|
||||
if (!intel_iommu_tboot_noforce && tboot_enabled())
|
||||
return true;
|
||||
|
||||
if (!no_iommu && (!dmar_disabled || dmar_platform_optin()))
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void __init detect_intel_iommu(void)
|
||||
{
|
||||
int ret;
|
||||
|
|
@ -928,8 +940,7 @@ void __init detect_intel_iommu(void)
|
|||
if (!ret)
|
||||
ret = dmar_walk_dmar_table((struct acpi_table_dmar *)dmar_tbl,
|
||||
&validate_drhd_cb);
|
||||
if (!ret && !no_iommu && !iommu_detected &&
|
||||
(!dmar_disabled || dmar_platform_optin())) {
|
||||
if (!ret && !iommu_detected && dmar_required()) {
|
||||
iommu_detected = 1;
|
||||
/* Make sure ACS will be enabled */
|
||||
pci_request_acs();
|
||||
|
|
|
|||
|
|
@ -57,7 +57,7 @@ static int rwbf_quirk;
|
|||
* (used when kernel is launched w/ TXT)
|
||||
*/
|
||||
static int force_on = 0;
|
||||
static int intel_iommu_tboot_noforce;
|
||||
int intel_iommu_tboot_noforce;
|
||||
static int no_platform_optin;
|
||||
|
||||
#define ROOT_ENTRY_NR (VTD_PAGE_SIZE/sizeof(struct root_entry))
|
||||
|
|
|
|||
|
|
@ -1354,6 +1354,7 @@ static inline bool ecmd_has_pmu_essential(struct intel_iommu *iommu)
|
|||
|
||||
extern int dmar_disabled;
|
||||
extern int intel_iommu_enabled;
|
||||
extern int intel_iommu_tboot_noforce;
|
||||
#else
|
||||
static inline int iommu_calculate_agaw(struct intel_iommu *iommu)
|
||||
{
|
||||
|
|
@ -1366,6 +1367,7 @@ static inline int iommu_calculate_max_sagaw(struct intel_iommu *iommu)
|
|||
#define dmar_disabled (1)
|
||||
#define intel_iommu_enabled (0)
|
||||
#define intel_iommu_sm (0)
|
||||
#define intel_iommu_tboot_noforce (0)
|
||||
#endif
|
||||
|
||||
static inline const char *decode_prq_descriptor(char *str, size_t size,
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user