[PATCH v1 13/16] powerpc/iommu: Implement put_page() if TCE had non-zero value
Alexey Kardashevskiy
aik at ozlabs.ru
Thu Jul 17 12:56:20 EST 2014
On 07/15/2014 07:24 PM, Alexey Kardashevskiy wrote:
> Guests might put new TCEs without clearing them first and the PAPR spec
> allows that.
>
> This adds put_page() for TCEs which we just replaced.
>
> Signed-off-by: Alexey Kardashevskiy <aik at ozlabs.ru>
> ---
> arch/powerpc/kernel/iommu.c | 10 +++++-----
> 1 file changed, 5 insertions(+), 5 deletions(-)
>
> diff --git a/arch/powerpc/kernel/iommu.c b/arch/powerpc/kernel/iommu.c
> index ae57910..25fda58 100644
> --- a/arch/powerpc/kernel/iommu.c
> +++ b/arch/powerpc/kernel/iommu.c
> @@ -1054,11 +1054,11 @@ int iommu_tce_build(struct iommu_table *tbl, unsigned long entry,
>
> spin_lock(&(pool->lock));
>
> - oldtce = ppc_md.tce_get(tbl, entry);
> - /* Add new entry if it is not busy */
> - if (!(oldtce & (TCE_PCI_WRITE | TCE_PCI_READ)))
> - ret = ppc_md.tce_build(tbl, entry, 1, hwaddr, NULL,
> - direction, NULL);
> + ret = ppc_md.tce_build(tbl, entry, 1, hwaddr, &oldtce,
> + direction, NULL);
> +
> + if (oldtce & (TCE_PCI_WRITE | TCE_PCI_READ))
> + put_page(pfn_to_page(__pa(oldtce)));
rshift for PAGE_SHIFT is missing here.
>
> spin_unlock(&(pool->lock));
>
>
--
Alexey
More information about the Linuxppc-dev
mailing list