From: "Thomas Hellström" <thomas.hellstrom@linux.intel.com>
To: Matthew Auld <matthew.auld@intel.com>, intel-gfx@lists.freedesktop.org
Cc: dri-devel@lists.freedesktop.org
Subject: Re: [PATCH 04/20] drm/i915: add io_size plumbing
Date: Mon, 31 Jan 2022 16:14:36 +0100 [thread overview]
Message-ID: <e1109322-acc4-2c34-5743-92f6a998f7d1@linux.intel.com> (raw)
In-Reply-To: <20220126152155.3070602-5-matthew.auld@intel.com>
On 1/26/22 16:21, Matthew Auld wrote:
> With small LMEM-BAR we need to be able to differentiate between the
> total size of LMEM, and how much of it is CPU mappable. The end goal is
> to be able to utilize the entire range, even if part of is it not CPU
> accessible.
>
> Signed-off-by: Matthew Auld <matthew.auld@intel.com>
> Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Reviewed-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
> ---
> drivers/gpu/drm/i915/gem/i915_gem_shmem.c | 2 +-
> drivers/gpu/drm/i915/gem/i915_gem_stolen.c | 8 +++++---
> drivers/gpu/drm/i915/gem/i915_gem_ttm.c | 2 +-
> drivers/gpu/drm/i915/gem/selftests/huge_pages.c | 2 +-
> drivers/gpu/drm/i915/gt/intel_region_lmem.c | 6 +++++-
> drivers/gpu/drm/i915/intel_memory_region.c | 6 +++++-
> drivers/gpu/drm/i915/intel_memory_region.h | 2 ++
> drivers/gpu/drm/i915/selftests/intel_memory_region.c | 8 ++++----
> drivers/gpu/drm/i915/selftests/mock_region.c | 6 ++++--
> drivers/gpu/drm/i915/selftests/mock_region.h | 3 ++-
> 10 files changed, 30 insertions(+), 15 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_shmem.c b/drivers/gpu/drm/i915/gem/i915_gem_shmem.c
> index 6c57b0a79c8a..a9aca11cedbb 100644
> --- a/drivers/gpu/drm/i915/gem/i915_gem_shmem.c
> +++ b/drivers/gpu/drm/i915/gem/i915_gem_shmem.c
> @@ -696,7 +696,7 @@ struct intel_memory_region *i915_gem_shmem_setup(struct drm_i915_private *i915,
> {
> return intel_memory_region_create(i915, 0,
> totalram_pages() << PAGE_SHIFT,
> - PAGE_SIZE, 0,
> + PAGE_SIZE, 0, 0,
> type, instance,
> &shmem_region_ops);
> }
> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_stolen.c b/drivers/gpu/drm/i915/gem/i915_gem_stolen.c
> index 26975d857776..387b48686851 100644
> --- a/drivers/gpu/drm/i915/gem/i915_gem_stolen.c
> +++ b/drivers/gpu/drm/i915/gem/i915_gem_stolen.c
> @@ -490,6 +490,7 @@ static int i915_gem_init_stolen(struct intel_memory_region *mem)
>
> /* Exclude the reserved region from driver use */
> mem->region.end = reserved_base - 1;
> + mem->io_size = resource_size(&mem->region);
>
> /* It is possible for the reserved area to end before the end of stolen
> * memory, so just consider the start. */
> @@ -746,7 +747,7 @@ static int init_stolen_lmem(struct intel_memory_region *mem)
>
> if (!io_mapping_init_wc(&mem->iomap,
> mem->io_start,
> - resource_size(&mem->region)))
> + mem->io_size))
> return -EIO;
>
> /*
> @@ -801,7 +802,8 @@ i915_gem_stolen_lmem_setup(struct drm_i915_private *i915, u16 type,
> I915_GTT_PAGE_SIZE_4K;
>
> mem = intel_memory_region_create(i915, lmem_base, lmem_size,
> - min_page_size, io_start,
> + min_page_size,
> + io_start, lmem_size,
> type, instance,
> &i915_region_stolen_lmem_ops);
> if (IS_ERR(mem))
> @@ -832,7 +834,7 @@ i915_gem_stolen_smem_setup(struct drm_i915_private *i915, u16 type,
> mem = intel_memory_region_create(i915,
> intel_graphics_stolen_res.start,
> resource_size(&intel_graphics_stolen_res),
> - PAGE_SIZE, 0, type, instance,
> + PAGE_SIZE, 0, 0, type, instance,
> &i915_region_stolen_smem_ops);
> if (IS_ERR(mem))
> return mem;
> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_ttm.c b/drivers/gpu/drm/i915/gem/i915_gem_ttm.c
> index 84cae740b4a5..e1140ca3d9a0 100644
> --- a/drivers/gpu/drm/i915/gem/i915_gem_ttm.c
> +++ b/drivers/gpu/drm/i915/gem/i915_gem_ttm.c
> @@ -1103,7 +1103,7 @@ i915_gem_ttm_system_setup(struct drm_i915_private *i915,
>
> mr = intel_memory_region_create(i915, 0,
> totalram_pages() << PAGE_SHIFT,
> - PAGE_SIZE, 0,
> + PAGE_SIZE, 0, 0,
> type, instance,
> &ttm_system_region_ops);
> if (IS_ERR(mr))
> diff --git a/drivers/gpu/drm/i915/gem/selftests/huge_pages.c b/drivers/gpu/drm/i915/gem/selftests/huge_pages.c
> index f36191ebf964..42db9cd30978 100644
> --- a/drivers/gpu/drm/i915/gem/selftests/huge_pages.c
> +++ b/drivers/gpu/drm/i915/gem/selftests/huge_pages.c
> @@ -499,7 +499,7 @@ static int igt_mock_memory_region_huge_pages(void *arg)
> int bit;
> int err = 0;
>
> - mem = mock_region_create(i915, 0, SZ_2G, I915_GTT_PAGE_SIZE_4K, 0);
> + mem = mock_region_create(i915, 0, SZ_2G, I915_GTT_PAGE_SIZE_4K, 0, 0);
> if (IS_ERR(mem)) {
> pr_err("%s failed to create memory region\n", __func__);
> return PTR_ERR(mem);
> diff --git a/drivers/gpu/drm/i915/gt/intel_region_lmem.c b/drivers/gpu/drm/i915/gt/intel_region_lmem.c
> index 21215a080088..2c7ec7ff79fd 100644
> --- a/drivers/gpu/drm/i915/gt/intel_region_lmem.c
> +++ b/drivers/gpu/drm/i915/gt/intel_region_lmem.c
> @@ -90,7 +90,7 @@ region_lmem_init(struct intel_memory_region *mem)
>
> if (!io_mapping_init_wc(&mem->iomap,
> mem->io_start,
> - resource_size(&mem->region))) {
> + mem->io_size)) {
> ret = -EIO;
> goto out_no_io;
> }
> @@ -143,6 +143,7 @@ intel_gt_setup_fake_lmem(struct intel_gt *gt)
> mappable_end,
> PAGE_SIZE,
> io_start,
> + mappable_end,
> INTEL_MEMORY_LOCAL,
> 0,
> &intel_region_lmem_ops);
> @@ -219,6 +220,7 @@ static struct intel_memory_region *setup_lmem(struct intel_gt *gt)
> lmem_size,
> min_page_size,
> io_start,
> + lmem_size,
> INTEL_MEMORY_LOCAL,
> 0,
> &intel_region_lmem_ops);
> @@ -232,6 +234,8 @@ static struct intel_memory_region *setup_lmem(struct intel_gt *gt)
> drm_dbg(&i915->drm, "Local memory: %pR\n", &mem->region);
> drm_dbg(&i915->drm, "Local memory IO start: %pa\n",
> &mem->io_start);
> + drm_info(&i915->drm, "Local memory IO size: %pa\n",
> + &mem->io_size);
> drm_info(&i915->drm, "Local memory available: %pa\n",
> &lmem_size);
>
> diff --git a/drivers/gpu/drm/i915/intel_memory_region.c b/drivers/gpu/drm/i915/intel_memory_region.c
> index c70d7e286a51..595e2489c23e 100644
> --- a/drivers/gpu/drm/i915/intel_memory_region.c
> +++ b/drivers/gpu/drm/i915/intel_memory_region.c
> @@ -97,7 +97,7 @@ static int iomemtest(struct intel_memory_region *mem,
> bool test_all,
> const void *caller)
> {
> - resource_size_t last = resource_size(&mem->region) - PAGE_SIZE;
> + resource_size_t last = mem->io_size - PAGE_SIZE;
> resource_size_t page;
> int err;
>
> @@ -205,6 +205,8 @@ static int intel_memory_region_memtest(struct intel_memory_region *mem,
> if (!mem->io_start)
> return 0;
>
> + WARN_ON_ONCE(!mem->io_size);
> +
> if (IS_ENABLED(CONFIG_DRM_I915_DEBUG_GEM) || i915->params.memtest)
> err = iomemtest(mem, i915->params.memtest, caller);
>
> @@ -217,6 +219,7 @@ intel_memory_region_create(struct drm_i915_private *i915,
> resource_size_t size,
> resource_size_t min_page_size,
> resource_size_t io_start,
> + resource_size_t io_size,
> u16 type,
> u16 instance,
> const struct intel_memory_region_ops *ops)
> @@ -231,6 +234,7 @@ intel_memory_region_create(struct drm_i915_private *i915,
> mem->i915 = i915;
> mem->region = (struct resource)DEFINE_RES_MEM(start, size);
> mem->io_start = io_start;
> + mem->io_size = io_size;
> mem->min_page_size = min_page_size;
> mem->ops = ops;
> mem->total = size;
> diff --git a/drivers/gpu/drm/i915/intel_memory_region.h b/drivers/gpu/drm/i915/intel_memory_region.h
> index 5625c9c38993..459051ce0c91 100644
> --- a/drivers/gpu/drm/i915/intel_memory_region.h
> +++ b/drivers/gpu/drm/i915/intel_memory_region.h
> @@ -71,6 +71,7 @@ struct intel_memory_region {
> struct drm_mm_node fake_mappable;
>
> resource_size_t io_start;
> + resource_size_t io_size;
> resource_size_t min_page_size;
> resource_size_t total;
> resource_size_t avail;
> @@ -103,6 +104,7 @@ intel_memory_region_create(struct drm_i915_private *i915,
> resource_size_t size,
> resource_size_t min_page_size,
> resource_size_t io_start,
> + resource_size_t io_size,
> u16 type,
> u16 instance,
> const struct intel_memory_region_ops *ops);
> diff --git a/drivers/gpu/drm/i915/selftests/intel_memory_region.c b/drivers/gpu/drm/i915/selftests/intel_memory_region.c
> index 7acba1d2135e..247f65f02bbf 100644
> --- a/drivers/gpu/drm/i915/selftests/intel_memory_region.c
> +++ b/drivers/gpu/drm/i915/selftests/intel_memory_region.c
> @@ -170,7 +170,7 @@ static int igt_mock_reserve(void *arg)
> if (!order)
> return 0;
>
> - mem = mock_region_create(i915, 0, SZ_2G, I915_GTT_PAGE_SIZE_4K, 0);
> + mem = mock_region_create(i915, 0, SZ_2G, I915_GTT_PAGE_SIZE_4K, 0, 0);
> if (IS_ERR(mem)) {
> pr_err("failed to create memory region\n");
> err = PTR_ERR(mem);
> @@ -383,7 +383,7 @@ static int igt_mock_splintered_region(void *arg)
> */
>
> size = (SZ_4G - 1) & PAGE_MASK;
> - mem = mock_region_create(i915, 0, size, PAGE_SIZE, 0);
> + mem = mock_region_create(i915, 0, size, PAGE_SIZE, 0, 0);
> if (IS_ERR(mem))
> return PTR_ERR(mem);
>
> @@ -471,7 +471,7 @@ static int igt_mock_max_segment(void *arg)
> */
>
> size = SZ_8G;
> - mem = mock_region_create(i915, 0, size, PAGE_SIZE, 0);
> + mem = mock_region_create(i915, 0, size, PAGE_SIZE, 0, 0);
> if (IS_ERR(mem))
> return PTR_ERR(mem);
>
> @@ -1188,7 +1188,7 @@ int intel_memory_region_mock_selftests(void)
> if (!i915)
> return -ENOMEM;
>
> - mem = mock_region_create(i915, 0, SZ_2G, I915_GTT_PAGE_SIZE_4K, 0);
> + mem = mock_region_create(i915, 0, SZ_2G, I915_GTT_PAGE_SIZE_4K, 0, 0);
> if (IS_ERR(mem)) {
> pr_err("failed to create memory region\n");
> err = PTR_ERR(mem);
> diff --git a/drivers/gpu/drm/i915/selftests/mock_region.c b/drivers/gpu/drm/i915/selftests/mock_region.c
> index 19bff8afcaaa..467eeae6d5f0 100644
> --- a/drivers/gpu/drm/i915/selftests/mock_region.c
> +++ b/drivers/gpu/drm/i915/selftests/mock_region.c
> @@ -107,7 +107,8 @@ mock_region_create(struct drm_i915_private *i915,
> resource_size_t start,
> resource_size_t size,
> resource_size_t min_page_size,
> - resource_size_t io_start)
> + resource_size_t io_start,
> + resource_size_t io_size)
> {
> int instance = ida_alloc_max(&i915->selftest.mock_region_instances,
> TTM_NUM_MEM_TYPES - TTM_PL_PRIV - 1,
> @@ -117,6 +118,7 @@ mock_region_create(struct drm_i915_private *i915,
> return ERR_PTR(instance);
>
> return intel_memory_region_create(i915, start, size, min_page_size,
> - io_start, INTEL_MEMORY_MOCK, instance,
> + io_start, io_size,
> + INTEL_MEMORY_MOCK, instance,
> &mock_region_ops);
> }
> diff --git a/drivers/gpu/drm/i915/selftests/mock_region.h b/drivers/gpu/drm/i915/selftests/mock_region.h
> index 329bf74dfaca..e36c3a433551 100644
> --- a/drivers/gpu/drm/i915/selftests/mock_region.h
> +++ b/drivers/gpu/drm/i915/selftests/mock_region.h
> @@ -16,6 +16,7 @@ mock_region_create(struct drm_i915_private *i915,
> resource_size_t start,
> resource_size_t size,
> resource_size_t min_page_size,
> - resource_size_t io_start);
> + resource_size_t io_start,
> + resource_size_t io_size);
>
> #endif /* !__MOCK_REGION_H */
next prev parent reply other threads:[~2022-01-31 15:14 UTC|newest]
Thread overview: 50+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-01-26 15:21 [PATCH 00/20] Initial support for small BAR recovery Matthew Auld
2022-01-26 15:21 ` [PATCH 01/20] drm: improve drm_buddy_alloc function Matthew Auld
2022-01-26 18:03 ` [Intel-gfx] " Jani Nikula
2022-01-26 15:21 ` [PATCH 02/20] drm: implement top-down allocation method Matthew Auld
2022-01-26 18:42 ` [Intel-gfx] " Robert Beckett
2022-01-26 15:21 ` [PATCH 03/20] drm: implement a method to free unused pages Matthew Auld
2022-01-26 15:21 ` [PATCH 04/20] drm/i915: add io_size plumbing Matthew Auld
2022-01-31 15:14 ` Thomas Hellström [this message]
2022-01-26 15:21 ` [PATCH 05/20] drm/i915/ttm: require mappable by default Matthew Auld
2022-01-26 15:21 ` [PATCH 06/20] drm/i915: add I915_BO_ALLOC_TOPDOWN Matthew Auld
2022-01-31 15:28 ` Thomas Hellström
2022-01-31 15:49 ` Matthew Auld
2022-01-26 15:21 ` [PATCH 07/20] drm/i915/buddy: track available visible size Matthew Auld
2022-01-31 16:12 ` Thomas Hellström
2022-01-26 15:21 ` [PATCH 08/20] drm/i915/buddy: adjust res->start Matthew Auld
2022-02-01 10:38 ` Thomas Hellström
2022-01-26 15:21 ` [PATCH 09/20] drm/i915/buddy: tweak 2big check Matthew Auld
2022-02-01 10:39 ` Thomas Hellström
2022-01-26 15:21 ` [PATCH 10/20] drm/i915/selftests: mock test io_size Matthew Auld
2022-02-02 10:24 ` Thomas Hellström
2022-01-26 15:21 ` [PATCH 11/20] drm/i915/ttm: tweak priority hint selection Matthew Auld
2022-02-02 13:34 ` Thomas Hellström
2022-01-26 15:21 ` [PATCH 12/20] drm/i915/ttm: make eviction mappable aware Matthew Auld
2022-02-02 13:41 ` Thomas Hellström
2022-01-26 15:21 ` [PATCH 13/20] drm/i915/ttm: mappable migration on fault Matthew Auld
2022-02-03 7:59 ` Thomas Hellström
2022-01-26 15:21 ` [PATCH 14/20] drm/i915/selftests: exercise mmap migration Matthew Auld
2022-02-03 9:01 ` Thomas Hellström
2022-02-03 9:12 ` Matthew Auld
2022-01-26 15:21 ` [PATCH 15/20] drm/i915/selftests: handle allocation failures Matthew Auld
2022-02-03 9:05 ` Thomas Hellström
2022-02-03 9:11 ` Matthew Auld
2022-01-26 15:21 ` [PATCH 16/20] drm/i915/create: apply ALLOC_TOPDOWN by default Matthew Auld
2022-02-03 9:17 ` Thomas Hellström
2022-02-03 9:32 ` Matthew Auld
2022-01-26 15:21 ` [PATCH 17/20] drm/i915/uapi: add NEEDS_CPU_ACCESS hint Matthew Auld
2022-02-03 9:28 ` Thomas Hellström
2022-02-03 11:38 ` Matthew Auld
2022-02-03 13:29 ` Thomas Hellström
2022-01-26 15:21 ` [PATCH 18/20] drm/i915/uapi: forbid ALLOC_TOPDOWN for error capture Matthew Auld
2022-01-26 19:42 ` [Intel-gfx] " kernel test robot
2022-01-26 20:03 ` kernel test robot
2022-02-03 9:43 ` Thomas Hellström
2022-02-03 9:44 ` Matthew Auld
2022-01-26 15:21 ` [PATCH 19/20] drm/i915/lmem: don't treat small BAR as an error Matthew Auld
2022-02-03 9:48 ` Thomas Hellström
2022-02-03 11:18 ` Matthew Auld
2022-02-03 13:56 ` Thomas Hellström
2022-02-03 14:09 ` Matthew Auld
2022-01-26 15:21 ` [PATCH 20/20] HAX: DG1 small BAR Matthew Auld
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=e1109322-acc4-2c34-5743-92f6a998f7d1@linux.intel.com \
--to=thomas.hellstrom@linux.intel.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=intel-gfx@lists.freedesktop.org \
--cc=matthew.auld@intel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).