mirror of https://gitee.com/openkylin/linux.git
iommu/vt-d: Create RMRR mappings in newly allocated domains
Currently the RMRR entries are created only at boot time. This means they will vanish when the domain allocated at boot time is destroyed. This patch makes sure that also newly allocated domains will get RMRR mappings. Signed-off-by: Joerg Roedel <jroedel@suse.de>
This commit is contained in:
parent
d66ce54b46
commit
b1ce5b79ae
|
@ -3241,7 +3241,10 @@ static struct iova *intel_alloc_iova(struct device *dev,
|
|||
|
||||
static struct dmar_domain *__get_valid_domain_for_dev(struct device *dev)
|
||||
{
|
||||
struct dmar_rmrr_unit *rmrr;
|
||||
struct dmar_domain *domain;
|
||||
struct device *i_dev;
|
||||
int i, ret;
|
||||
|
||||
domain = get_domain_for_dev(dev, DEFAULT_DOMAIN_ADDRESS_WIDTH);
|
||||
if (!domain) {
|
||||
|
@ -3250,6 +3253,23 @@ static struct dmar_domain *__get_valid_domain_for_dev(struct device *dev)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
/* We have a new domain - setup possible RMRRs for the device */
|
||||
rcu_read_lock();
|
||||
for_each_rmrr_units(rmrr) {
|
||||
for_each_active_dev_scope(rmrr->devices, rmrr->devices_cnt,
|
||||
i, i_dev) {
|
||||
if (i_dev != dev)
|
||||
continue;
|
||||
|
||||
ret = domain_prepare_identity_map(dev, domain,
|
||||
rmrr->base_address,
|
||||
rmrr->end_address);
|
||||
if (ret)
|
||||
dev_err(dev, "Mapping reserved region failed\n");
|
||||
}
|
||||
}
|
||||
rcu_read_unlock();
|
||||
|
||||
return domain;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue