iommu/vt-d: Really use upper context table when necessary
There is a bug in iommu_context_addr() which will always use
the lower context table, even when the upper context table
needs to be used. Fix this issue.
Fixes: 03ecc32c52
("iommu/vt-d: support extended root and context entries")
Reported-by: Xiao, Nan <nan.xiao@hp.com>
Signed-off-by: Joerg Roedel <jroedel@suse.de>
This commit is contained in:
parent
ca30475698
commit
4df4eab168
|
@ -803,6 +803,7 @@ static inline struct context_entry *iommu_context_addr(struct intel_iommu *iommu
|
|||
struct context_entry *context;
|
||||
u64 *entry;
|
||||
|
||||
entry = &root->lo;
|
||||
if (ecs_enabled(iommu)) {
|
||||
if (devfn >= 0x80) {
|
||||
devfn -= 0x80;
|
||||
|
@ -810,7 +811,6 @@ static inline struct context_entry *iommu_context_addr(struct intel_iommu *iommu
|
|||
}
|
||||
devfn *= 2;
|
||||
}
|
||||
entry = &root->lo;
|
||||
if (*entry & 1)
|
||||
context = phys_to_virt(*entry & VTD_PAGE_MASK);
|
||||
else {
|
||||
|
|
Loading…
Reference in a new issue