mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-24 03:40:52 +07:00
iommu/amd: Do not loop forever when trying to increase address space
When increase_address_space() fails to allocate memory, alloc_pte() will call it again until it succeeds. Do not loop forever while trying to increase the address space and just return an error instead. Signed-off-by: Joerg Roedel <jroedel@suse.de> Tested-by: Qian Cai <cai@lca.pw> Link: https://lore.kernel.org/r/20200504125413.16798-3-joro@8bytes.org Signed-off-by: Joerg Roedel <jroedel@suse.de>
This commit is contained in:
parent
eb791aa70b
commit
5b8a9a047b
@ -1489,8 +1489,19 @@ static u64 *alloc_pte(struct protection_domain *domain,
|
||||
amd_iommu_domain_get_pgtable(domain, &pgtable);
|
||||
|
||||
while (address > PM_LEVEL_SIZE(pgtable.mode)) {
|
||||
*updated = increase_address_space(domain, address, gfp) || *updated;
|
||||
bool upd = increase_address_space(domain, address, gfp);
|
||||
|
||||
/* Read new values to check if update was successful */
|
||||
amd_iommu_domain_get_pgtable(domain, &pgtable);
|
||||
|
||||
/*
|
||||
* Return an error if there is no memory to update the
|
||||
* page-table.
|
||||
*/
|
||||
if (!upd && (address > PM_LEVEL_SIZE(pgtable.mode)))
|
||||
return NULL;
|
||||
|
||||
*updated = *updated || upd;
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user