From: Ben Widawsky <ben@bwidawsk.net>
To: Jesse Barnes <jbarnes@virtuousgeek.org>
Cc: Intel GFX <intel-gfx@lists.freedesktop.org>,
Ben Widawsky <benjamin.widawsky@intel.com>
Subject: Re: [PATCH 12/26] drm/i915: Page table helpers, and define renames
Date: Tue, 18 Mar 2014 17:58:08 -0700 [thread overview]
Message-ID: <20140319005807.GA7811@bwidawsk.net> (raw)
In-Reply-To: <20140318112958.440d1278@jbarnes-desktop>
On Tue, Mar 18, 2014 at 11:29:58AM -0700, Jesse Barnes wrote:
> On Tue, 18 Mar 2014 09:05:58 +0000
> Chris Wilson <chris@chris-wilson.co.uk> wrote:
>
> > On Mon, Mar 17, 2014 at 10:48:44PM -0700, Ben Widawsky wrote:
> > > --- a/drivers/gpu/drm/i915/i915_gem_gtt.h
> > > +++ b/drivers/gpu/drm/i915/i915_gem_gtt.h
> > > @@ -1,8 +1,11 @@
> > > #ifndef _I915_GEM_GTT_H
> > > #define _I915_GEM_GTT_H
> > >
> > > -#define GEN6_PPGTT_PD_ENTRIES 512
> > > -#define I915_PPGTT_PT_ENTRIES (PAGE_SIZE / sizeof(gen6_gtt_pte_t))
> > > +/* GEN Agnostic defines */
> > > +#define I915_PDES_PER_PD 512
> > > +#define I915_PTE_MASK (PAGE_SHIFT-1)
> >
> > That looks decidely fishy.
> >
> > PAGE_SHIFT is 12 -> PTE_MASK = 0xb
> >
Thanks for catching this. I'll presume the define isn't even used.
> > > +#define I915_PDE_MASK (I915_PDES_PER_PD-1)
> > > +
> > > typedef uint32_t gen6_gtt_pte_t;
> > > typedef uint64_t gen8_gtt_pte_t;
> > > typedef gen8_gtt_pte_t gen8_ppgtt_pde_t;
> > > @@ -23,6 +26,98 @@ typedef gen8_gtt_pte_t gen8_ppgtt_pde_t;
> > > #define GEN6_PTE_ADDR_ENCODE(addr) GEN6_GTT_ADDR_ENCODE(addr)
> > > #define HSW_PTE_ADDR_ENCODE(addr) HSW_GTT_ADDR_ENCODE(addr)
> > >
> > > +
> > > +/* GEN6 PPGTT resembles a 2 level page table:
> > > + * 31:22 | 21:12 | 11:0
> > > + * PDE | PTE | offset
> > > + */
> > > +#define GEN6_PDE_SHIFT 22
> > > +#define GEN6_PTES_PER_PT (PAGE_SIZE / sizeof(gen6_gtt_pte_t))
> > > +
> > > +static inline uint32_t i915_pte_index(uint64_t address, uint32_t pde_shift)
> > > +{
> > > + const uint32_t mask = (1 << (pde_shift - PAGE_SHIFT)) - 1;
> > > + return (address >> PAGE_SHIFT) & mask;
> > > +}
> > > +
> > > +/* Helper to counts the number of PTEs within the given length. This count does
> > > + * not cross a page table boundary, so the max value would be
> > > + * GEN6_PTES_PER_PT for GEN6, and GEN8_PTES_PER_PT for GEN8.
> > > + */
> > > +static inline size_t i915_pte_count(uint64_t addr, size_t length,
> > > + uint32_t pde_shift)
> > > +{
> > > + const uint64_t pd_mask = ~((1 << pde_shift) - 1);
> > > + uint64_t end;
> > > +
> > > + if (WARN_ON(!length))
> > > + return 0;
> > > +
> > > + if (WARN_ON(addr % PAGE_SIZE))
> > > + addr = round_down(addr, PAGE_SIZE);
> > > +
> > > + if (WARN_ON(length % PAGE_SIZE))
> > > + length = round_up(length, PAGE_SIZE);
> >
> > Oh oh. I think these fixups are very suspect, so just
> > BUG_ON(length == 0);
> > BUG_ON(offset_in_page(addr|length));
> >
I thought someone might have an issue with the BUG_ON. But I prefer it
as well.
> > > +
> > > + end = addr + length;
> > > +
> > > + if ((addr & pd_mask) != (end & pd_mask))
> > > + return (1 << (pde_shift - PAGE_SHIFT)) -
> >
> > #define NUM_PTE(pde_shift) (1 << (pde_shift - PAGE_SHIFT))
> > here and for computing the pd_mask.
> >
> > > + i915_pte_index(addr, pde_shift);
> > > +
> > > + return i915_pte_index(end, pde_shift) - i915_pte_index(addr, pde_shift);
> > > +}
> >
> > Otherwise the helpers look a useful improvement in readability.
> > -Chris
> >
>
> Can we use GTT_PAGE_SIZE here too? I'm worried the kernel PAGE_SIZE
> will change at some point and blow us up. At least in places where
> we're doing our own thing rather than using the x86 bits...
That's fine with me. We have quite a few other places in our code which
depend on PAGE_SIZE being 4k though.
It's likely I'll be maintaining this branch myself for a while, but I'll
modify these both locally.
>
> --
> Jesse Barnes, Intel Open Source Technology Center
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx
--
Ben Widawsky, Intel Open Source Technology Center
next prev parent reply other threads:[~2014-03-19 0:58 UTC|newest]
Thread overview: 62+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-03-18 5:48 [PATCH 00/26] [RFCish] GEN7 dynamic page tables Ben Widawsky
2014-03-18 5:48 ` [PATCH 01/26] drm/i915: Split out verbose PPGTT dumping Ben Widawsky
2014-03-20 11:57 ` Chris Wilson
2014-03-20 12:08 ` Chris Wilson
2014-03-22 18:13 ` Ben Widawsky
2014-03-22 20:59 ` Chris Wilson
2014-03-18 5:48 ` [PATCH 02/26] drm/i915: Extract switch to default context Ben Widawsky
2014-03-18 8:38 ` Chris Wilson
2014-03-18 5:48 ` [PATCH 03/26] drm/i915: s/pd/pdpe, s/pt/pde Ben Widawsky
2014-03-18 5:48 ` [PATCH 04/26] drm/i915: rename map/unmap to dma_map/unmap Ben Widawsky
2014-03-18 8:40 ` Chris Wilson
2014-03-18 5:48 ` [PATCH 05/26] drm/i915: Setup less PPGTT on failed pagedir Ben Widawsky
2014-03-18 5:48 ` [PATCH 06/26] drm/i915: Wrap VMA binding Ben Widawsky
2014-03-18 8:42 ` Chris Wilson
2014-03-18 5:48 ` [PATCH 07/26] drm/i915: clean up PPGTT init error path Ben Widawsky
2014-03-18 8:44 ` Chris Wilson
2014-03-22 19:43 ` Ben Widawsky
2014-03-22 20:58 ` Chris Wilson
2014-03-23 17:27 ` Ben Widawsky
2014-03-18 5:48 ` [PATCH 08/26] drm/i915: Un-hardcode number of page directories Ben Widawsky
2014-03-18 5:48 ` [PATCH 09/26] drm/i915: Split out gtt specific header file Ben Widawsky
2014-03-18 8:46 ` Chris Wilson
2014-03-18 9:15 ` Daniel Vetter
2014-03-22 19:44 ` Ben Widawsky
2014-03-23 0:46 ` Daniel Vetter
2014-03-18 5:48 ` [PATCH 10/26] drm/i915: Make gen6_write_pdes gen6_map_page_tables Ben Widawsky
2014-03-18 8:48 ` Chris Wilson
2014-03-18 5:48 ` [PATCH 11/26] drm/i915: Range clearing is PPGTT agnostic Ben Widawsky
2014-03-18 8:50 ` Chris Wilson
2014-03-18 5:48 ` [PATCH 12/26] drm/i915: Page table helpers, and define renames Ben Widawsky
2014-03-18 9:05 ` Chris Wilson
2014-03-18 18:29 ` Jesse Barnes
2014-03-19 0:58 ` Ben Widawsky [this message]
2014-03-18 5:48 ` [PATCH 13/26] drm/i915: construct page table abstractions Ben Widawsky
2014-03-18 5:48 ` [PATCH 14/26] drm/i915: Complete page table structures Ben Widawsky
2014-03-18 9:09 ` Chris Wilson
2014-03-22 20:10 ` Ben Widawsky
2014-03-22 21:14 ` Chris Wilson
2014-03-18 5:48 ` [PATCH 15/26] drm/i915: Create page table allocators Ben Widawsky
2014-03-18 9:14 ` Chris Wilson
2014-03-22 20:21 ` Ben Widawsky
2014-03-22 21:10 ` Chris Wilson
2014-03-18 5:48 ` [PATCH 16/26] drm/i915: Generalize GEN6 mapping Ben Widawsky
2014-03-18 9:22 ` Chris Wilson
2014-03-18 5:48 ` [PATCH 17/26] drm/i915: Clean up pagetable DMA map & unmap Ben Widawsky
2014-03-18 9:24 ` Chris Wilson
2014-03-18 5:48 ` [PATCH 18/26] drm/i915: Always dma map page table allocations Ben Widawsky
2014-03-18 9:25 ` Chris Wilson
2014-03-18 5:48 ` [PATCH 19/26] drm/i915: Consolidate dma mappings Ben Widawsky
2014-03-18 9:28 ` Chris Wilson
2014-03-18 5:48 ` [PATCH 20/26] drm/i915: Always dma map page directory allocations Ben Widawsky
2014-03-18 9:29 ` Chris Wilson
2014-03-18 5:48 ` [PATCH 21/26] drm/i915: Track GEN6 page table usage Ben Widawsky
2014-03-18 5:48 ` [PATCH 22/26] drm/i915: Extract context switch skip logic Ben Widawsky
2014-03-18 5:48 ` [PATCH 23/26] drm/i915: Force pd restore when PDEs change, gen6-7 Ben Widawsky
2014-03-18 5:48 ` [PATCH 24/26] drm/i915: Finish gen6/7 dynamic page table allocation Ben Widawsky
2014-03-20 12:15 ` Chris Wilson
2014-03-18 5:48 ` [PATCH 25/26] drm/i915: Print used ppgtt pages for gen6 in debugfs Ben Widawsky
2014-03-20 10:09 ` Chris Wilson
2014-03-20 10:17 ` Chris Wilson
2014-03-18 5:48 ` [PATCH 26/26] FOR REFERENCE ONLY Ben Widawsky
2014-03-20 12:17 ` [PATCH 00/26] [RFCish] GEN7 dynamic page tables Chris Wilson
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=20140319005807.GA7811@bwidawsk.net \
--to=ben@bwidawsk.net \
--cc=benjamin.widawsky@intel.com \
--cc=intel-gfx@lists.freedesktop.org \
--cc=jbarnes@virtuousgeek.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox