Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b1ce5b79 authored by Joerg Roedel's avatar Joerg Roedel
Browse files

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: default avatarJoerg Roedel <jroedel@suse.de>
parent d66ce54b
Loading
Loading
Loading
Loading
+20 −0
Original line number Diff line number Diff line
@@ -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;
}