All of lore.kernel.org
 help / color / mirror / Atom feed
From: Chris Wilson <chris@chris-wilson.co.uk>
To: Ben Widawsky <benjamin.widawsky@intel.com>
Cc: Intel GFX <intel-gfx@lists.freedesktop.org>
Subject: Re: [PATCH 12/26] drm/i915: Page table helpers, and define renames
Date: Tue, 18 Mar 2014 09:05:58 +0000	[thread overview]
Message-ID: <20140318090558.GD18530@nuc-i3427.alporthouse.com> (raw)
In-Reply-To: <1395121738-29126-13-git-send-email-benjamin.widawsky@intel.com>

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

> +#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));

> +
> +	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

-- 
Chris Wilson, Intel Open Source Technology Centre

  reply	other threads:[~2014-03-18  9:06 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 [this message]
2014-03-18 18:29     ` Jesse Barnes
2014-03-19  0:58       ` Ben Widawsky
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=20140318090558.GD18530@nuc-i3427.alporthouse.com \
    --to=chris@chris-wilson.co.uk \
    --cc=benjamin.widawsky@intel.com \
    --cc=intel-gfx@lists.freedesktop.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 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.