From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from foss.arm.com ([217.140.101.70]:52034 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753966AbcA0L7D (ORCPT ); Wed, 27 Jan 2016 06:59:03 -0500 Date: Wed, 27 Jan 2016 11:59:01 +0000 From: Will Deacon To: gregkh@linuxfoundation.org Cc: stable@vger.kernel.org, zhangbo_a@xiaomi.com Subject: Re: FAILED: patch "[PATCH] iommu/io-pgtable-arm: Ensure we free the final level on" failed to apply to 4.4-stable tree Message-ID: <20160127115900.GG2390@arm.com> References: <14538773031129@kroah.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <14538773031129@kroah.com> Sender: stable-owner@vger.kernel.org List-ID: Hi Greg, On Tue, Jan 26, 2016 at 10:48:23PM -0800, gregkh@linuxfoundation.org wrote: > > The patch below does not apply to the 4.4-stable tree. > If someone wants it applied there, or to any other stable or longterm > tree, then please email the backport, including the original git commit > id to . Do you have the conflict handy? It applies to 4.4 here, so I guess its somehow conflicting with another -stable patch, but I couldn't spot it. Will > ------------------ original commit in Linus's tree ------------------ > > From 12c2ab09571e8aae3a87da2a4a452632a5fac1e5 Mon Sep 17 00:00:00 2001 > From: Will Deacon > Date: Tue, 15 Dec 2015 16:08:12 +0000 > Subject: [PATCH] iommu/io-pgtable-arm: Ensure we free the final level on > teardown > > When tearing down page tables, we return early for the final level > since we know that we won't have any table pointers to follow. > Unfortunately, this also means that we forget to free the final level, > so we end up leaking memory. > > Fix the issue by always freeing the current level, but just don't bother > to iterate over the ptes if we're at the final level. > > Cc: > Reported-by: Zhang Bo > Signed-off-by: Will Deacon > > diff --git a/drivers/iommu/io-pgtable-arm.c b/drivers/iommu/io-pgtable-arm.c > index 937ba23e48d7..8bbcbfe7695c 100644 > --- a/drivers/iommu/io-pgtable-arm.c > +++ b/drivers/iommu/io-pgtable-arm.c > @@ -404,17 +404,18 @@ static void __arm_lpae_free_pgtable(struct arm_lpae_io_pgtable *data, int lvl, > arm_lpae_iopte *start, *end; > unsigned long table_size; > > - /* Only leaf entries at the last level */ > - if (lvl == ARM_LPAE_MAX_LEVELS - 1) > - return; > - > if (lvl == ARM_LPAE_START_LVL(data)) > table_size = data->pgd_size; > else > table_size = ARM_LPAE_GRANULE(data); > > start = ptep; > - end = (void *)ptep + table_size; > + > + /* Only leaf entries at the last level */ > + if (lvl == ARM_LPAE_MAX_LEVELS - 1) > + end = ptep; > + else > + end = (void *)ptep + table_size; > > while (ptep != end) { > arm_lpae_iopte pte = *ptep++; >