iommu: debug-pagealloc: Use page_ext_get_from_phys()
Instead of calling pfn_valid() and then getting the page, call the newly added function page_ext_get_from_phys(), which would also check for MMIO and offline memory and return NULL in that case. Signed-off-by: Mostafa Saleh <smostafa@google.com> Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
This commit is contained in:
parent
d414b83dc5
commit
a7f1bc231b
|
|
@ -30,14 +30,6 @@ struct page_ext_operations page_iommu_debug_ops = {
|
|||
.need = need_iommu_debug,
|
||||
};
|
||||
|
||||
static struct page_ext *get_iommu_page_ext(phys_addr_t phys)
|
||||
{
|
||||
struct page *page = phys_to_page(phys);
|
||||
struct page_ext *page_ext = page_ext_get(page);
|
||||
|
||||
return page_ext;
|
||||
}
|
||||
|
||||
static struct iommu_debug_metadata *get_iommu_data(struct page_ext *page_ext)
|
||||
{
|
||||
return page_ext_data(page_ext, &page_iommu_debug_ops);
|
||||
|
|
@ -45,18 +37,26 @@ static struct iommu_debug_metadata *get_iommu_data(struct page_ext *page_ext)
|
|||
|
||||
static void iommu_debug_inc_page(phys_addr_t phys)
|
||||
{
|
||||
struct page_ext *page_ext = get_iommu_page_ext(phys);
|
||||
struct iommu_debug_metadata *d = get_iommu_data(page_ext);
|
||||
struct page_ext *page_ext = page_ext_from_phys(phys);
|
||||
struct iommu_debug_metadata *d;
|
||||
|
||||
if (!page_ext)
|
||||
return;
|
||||
|
||||
d = get_iommu_data(page_ext);
|
||||
WARN_ON(atomic_inc_return_relaxed(&d->ref) <= 0);
|
||||
page_ext_put(page_ext);
|
||||
}
|
||||
|
||||
static void iommu_debug_dec_page(phys_addr_t phys)
|
||||
{
|
||||
struct page_ext *page_ext = get_iommu_page_ext(phys);
|
||||
struct iommu_debug_metadata *d = get_iommu_data(page_ext);
|
||||
struct page_ext *page_ext = page_ext_from_phys(phys);
|
||||
struct iommu_debug_metadata *d;
|
||||
|
||||
if (!page_ext)
|
||||
return;
|
||||
|
||||
d = get_iommu_data(page_ext);
|
||||
WARN_ON(atomic_dec_return_relaxed(&d->ref) < 0);
|
||||
page_ext_put(page_ext);
|
||||
}
|
||||
|
|
@ -104,11 +104,8 @@ void __iommu_debug_map(struct iommu_domain *domain, phys_addr_t phys, size_t siz
|
|||
if (WARN_ON(!phys || check_add_overflow(phys, size, &end)))
|
||||
return;
|
||||
|
||||
for (off = 0 ; off < size ; off += page_size) {
|
||||
if (!pfn_valid(__phys_to_pfn(phys + off)))
|
||||
continue;
|
||||
for (off = 0 ; off < size ; off += page_size)
|
||||
iommu_debug_inc_page(phys + off);
|
||||
}
|
||||
}
|
||||
|
||||
static void __iommu_debug_update_iova(struct iommu_domain *domain,
|
||||
|
|
@ -123,7 +120,7 @@ static void __iommu_debug_update_iova(struct iommu_domain *domain,
|
|||
for (off = 0 ; off < size ; off += page_size) {
|
||||
phys_addr_t phys = iommu_iova_to_phys(domain, iova + off);
|
||||
|
||||
if (!phys || !pfn_valid(__phys_to_pfn(phys)))
|
||||
if (!phys)
|
||||
continue;
|
||||
|
||||
if (inc)
|
||||
|
|
|
|||
Loading…
Reference in New Issue