From: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
To: Jerome Glisse <j.glisse@gmail.com>
Cc: linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org,
bskeggs@redhat.com, thellstrom@vmware.com
Subject: Re: [PATCH 2/3] drm/ttm/dma: Fix accounting error when calling ttm_mem_global_free_page.
Date: Wed, 21 Dec 2011 10:30:18 -0500 [thread overview]
Message-ID: <20111221153018.GA26757@phenom.dumpdata.com> (raw)
In-Reply-To: <CAH3drwZGNBOr0+b8S_7ZAnhG=7RXFdjAc1D+ySxzGMy1LBJOqA@mail.gmail.com>
On Wed, Dec 21, 2011 at 10:17:36AM -0500, Jerome Glisse wrote:
> On Mon, Dec 12, 2011 at 3:09 PM, Konrad Rzeszutek Wilk
> <konrad.wilk@oracle.com> wrote:
> > The code to figure out how many pages to shrink the pool
> > ends up capping the 'count' at _manager->options.max_size - which is OK.
> > Except that the 'count' is also used when accounting for how many pages
> > are recycled - which we end up with the invalid values. This fixes
> > it by using a different value for the amount of pages to shrink.
> >
> > Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
> > ---
> > drivers/gpu/drm/ttm/ttm_page_alloc_dma.c | 10 ++++++----
> > 1 files changed, 6 insertions(+), 4 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/ttm/ttm_page_alloc_dma.c b/drivers/gpu/drm/ttm/ttm_page_alloc_dma.c
> > index 6c06d0b..e57aa24 100644
> > --- a/drivers/gpu/drm/ttm/ttm_page_alloc_dma.c
> > +++ b/drivers/gpu/drm/ttm/ttm_page_alloc_dma.c
> > @@ -949,7 +949,7 @@ void ttm_dma_unpopulate(struct ttm_dma_tt *ttm_dma, struct device *dev)
> > struct dma_page *d_page, *next;
> > enum pool_type type;
> > bool is_cached = false;
> > - unsigned count = 0, i;
> > + unsigned count = 0, i, npages;
> > unsigned long irq_flags;
> >
> > type = ttm_to_type(ttm->page_flags, ttm->caching_state);
> > @@ -971,11 +971,13 @@ void ttm_dma_unpopulate(struct ttm_dma_tt *ttm_dma, struct device *dev)
> > pool->npages_in_use -= count;
> > if (is_cached) {
> > pool->nfrees += count;
> > + npages = count;
>
> This is wrong, i thought we didn't wanted to shrink cached page, your
> 3/3 patch remove this line. Thought i am kind of wondering why we
> don't shrink the cached pool, i can't remember the reason.
We delete the cached ones:
988 if (is_cached) {
989 list_for_each_entry_safe(d_page, next, &ttm_dma->pages_list, page_list) {
990 ttm_mem_global_free_page(ttm->glob->mem_glob,
991 d_page->p);
992 ttm_dma_page_put(pool, d_page);
993 }
And then we end up calling in ttm_dma_page_pool_free for (count) pages
that we had already deleted. So it ends up being a bit redundant.
The 3/3 patch fixes that (by removing the call to ttm_dma_page_pool_free
for is_cached. This patch (2/3) tries to preserve the logic if it is either
is_cached or !is_cached.
>
> > } else {
> > pool->npages_free += count;
> > list_splice(&ttm_dma->pages_list, &pool->free_list);
> > + npages = count;
> > if (pool->npages_free > _manager->options.max_size) {
> > - count = pool->npages_free - _manager->options.max_size;
> > + npages = pool->npages_free - _manager->options.max_size;
> > }
> > }
> > spin_unlock_irqrestore(&pool->lock, irq_flags);
> > @@ -1000,8 +1002,8 @@ void ttm_dma_unpopulate(struct ttm_dma_tt *ttm_dma, struct device *dev)
> > }
> >
> > /* shrink pool if necessary */
> > - if (count)
> > - ttm_dma_page_pool_free(pool, count);
> > + if (npages)
> > + ttm_dma_page_pool_free(pool, npages);
> > ttm->state = tt_unpopulated;
> > }
> > EXPORT_SYMBOL_GPL(ttm_dma_unpopulate);
> > --
> > 1.7.7.3
> >
>
> Otherwise Reviewed-by:Jerome Glisse <jglisse@redhat.com>
Thanks!
next prev parent reply other threads:[~2011-12-21 15:30 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-12-12 20:09 [PATCH] fixes to drm-next - TTM DMA code (v1) Konrad Rzeszutek Wilk
2011-12-12 20:09 ` [PATCH 1/3] drm/ttm/dma: Only call set_pages_array_wb when the page is not in WB pool Konrad Rzeszutek Wilk
2011-12-12 20:09 ` [PATCH 2/3] drm/ttm/dma: Fix accounting error when calling ttm_mem_global_free_page Konrad Rzeszutek Wilk
2011-12-21 15:17 ` Jerome Glisse
2011-12-21 15:30 ` Konrad Rzeszutek Wilk [this message]
2011-12-12 20:09 ` [PATCH 3/3] drm/ttm/dma: Optimize when free-ing the recycled page pool Konrad Rzeszutek Wilk
2011-12-21 15:22 ` Jerome Glisse
2011-12-13 16:07 ` [PATCH] fixes to drm-next - TTM DMA code (v1) Jerome Glisse
2011-12-13 16:23 ` Thomas Hellstrom
2011-12-13 16:40 ` Konrad Rzeszutek Wilk
2011-12-19 19:51 ` Thomas Hellstrom
2011-12-20 17:35 ` Konrad Rzeszutek Wilk
2012-01-05 19:37 ` Jerome Glisse
2011-12-13 22:09 ` James Simmons
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20111221153018.GA26757@phenom.dumpdata.com \
--to=konrad.wilk@oracle.com \
--cc=bskeggs@redhat.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=j.glisse@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=thellstrom@vmware.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.