[Intel-gfx] [PATCH v2 1/6] drm/i915: use mock device info for creating mock device
Tvrtko Ursulin
tvrtko.ursulin at linux.intel.com
Thu Jun 29 11:00:09 UTC 2023
On 27/06/2023 16:13, Jani Nikula wrote:
> Instead of modifying the device info on the fly, use static const mock
> device info.
>
> It's not okay to modify device info at runtime; we've added separate
> runtime info for info that needs to be modified at runtime. We've added
> safeguards to device info to prevent it from being modified, but commit
> 5e352e32aec2 ("drm/i915: preparation for using PAT index") just cast the
> const away and modified it anyway. This prevents device info from being
> moved to rodata.
>
> Fixes: 5e352e32aec2 ("drm/i915: preparation for using PAT index")
> Suggested-by: Tvrtko Ursulin <tvrtko.ursulin at linux.intel.com>
> Cc: Fei Yang <fei.yang at intel.com>
> Cc: Andi Shyti <andi.shyti at linux.intel.com>
> Cc: Andrzej Hajda <andrzej.hajda at intel.com>
> Cc: Matt Roper <matthew.d.roper at intel.com>
> Signed-off-by: Jani Nikula <jani.nikula at intel.com>
> ---
> .../gpu/drm/i915/selftests/mock_gem_device.c | 45 ++++++++++---------
> 1 file changed, 24 insertions(+), 21 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/selftests/mock_gem_device.c b/drivers/gpu/drm/i915/selftests/mock_gem_device.c
> index 09d4bbcdcdbf..4de6a4e8280d 100644
> --- a/drivers/gpu/drm/i915/selftests/mock_gem_device.c
> +++ b/drivers/gpu/drm/i915/selftests/mock_gem_device.c
> @@ -118,15 +118,31 @@ static void mock_gt_probe(struct drm_i915_private *i915)
> i915->gt[0]->name = "Mock GT";
> }
>
> +static const struct intel_device_info mock_info = {
> + .__runtime.graphics.ip.ver = -1,
> + .__runtime.page_sizes = (I915_GTT_PAGE_SIZE_4K |
> + I915_GTT_PAGE_SIZE_64K |
> + I915_GTT_PAGE_SIZE_2M),
> + .__runtime.memory_regions = REGION_SMEM,
> + .__runtime.platform_engine_mask = BIT(0),
> +
> + /* simply use legacy cache level for mock device */
> + .max_pat_index = 3,
> + .cachelevel_to_pat = {
> + [I915_CACHE_NONE] = 0,
> + [I915_CACHE_LLC] = 1,
> + [I915_CACHE_L3_LLC] = 2,
> + [I915_CACHE_WT] = 3,
> + },
> +};
> +
> struct drm_i915_private *mock_gem_device(void)
> {
> #if IS_ENABLED(CONFIG_IOMMU_API) && defined(CONFIG_INTEL_IOMMU)
> static struct dev_iommu fake_iommu = { .priv = (void *)-1 };
> #endif
> struct drm_i915_private *i915;
> - struct intel_device_info *i915_info;
> struct pci_dev *pdev;
> - unsigned int i;
> int ret;
>
> pdev = kzalloc(sizeof(*pdev), GFP_KERNEL);
> @@ -159,15 +175,18 @@ struct drm_i915_private *mock_gem_device(void)
>
> pci_set_drvdata(pdev, i915);
>
> + /* Device parameters start as a copy of module parameters. */
> + i915_params_copy(&i915->params, &i915_modparams);
> +
> + /* Set up device info and initial runtime info. */
> + intel_device_info_driver_create(i915, pdev->device, &mock_info);
This one was new to me but figuring out what will dev->device contain,
or if it could have any unintended consequences was too time consuming.
If something breaks it will break loudly in testing.
Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
Regards,
Tvrtko
> +
> dev_pm_domain_set(&pdev->dev, &pm_domain);
> pm_runtime_enable(&pdev->dev);
> pm_runtime_dont_use_autosuspend(&pdev->dev);
> if (pm_runtime_enabled(&pdev->dev))
> WARN_ON(pm_runtime_get_sync(&pdev->dev));
>
> -
> - i915_params_copy(&i915->params, &i915_modparams);
> -
> intel_runtime_pm_init_early(&i915->runtime_pm);
> /* wakeref tracking has significant overhead */
> i915->runtime_pm.no_wakeref_tracking = true;
> @@ -175,21 +194,6 @@ struct drm_i915_private *mock_gem_device(void)
> /* Using the global GTT may ask questions about KMS users, so prepare */
> drm_mode_config_init(&i915->drm);
>
> - RUNTIME_INFO(i915)->graphics.ip.ver = -1;
> -
> - RUNTIME_INFO(i915)->page_sizes =
> - I915_GTT_PAGE_SIZE_4K |
> - I915_GTT_PAGE_SIZE_64K |
> - I915_GTT_PAGE_SIZE_2M;
> -
> - RUNTIME_INFO(i915)->memory_regions = REGION_SMEM;
> -
> - /* simply use legacy cache level for mock device */
> - i915_info = (struct intel_device_info *)INTEL_INFO(i915);
> - i915_info->max_pat_index = 3;
> - for (i = 0; i < I915_MAX_CACHE_LEVEL; i++)
> - i915_info->cachelevel_to_pat[i] = i;
> -
> intel_memory_regions_hw_probe(i915);
>
> spin_lock_init(&i915->gpu_error.lock);
> @@ -223,7 +227,6 @@ struct drm_i915_private *mock_gem_device(void)
> mock_init_ggtt(to_gt(i915));
> to_gt(i915)->vm = i915_vm_get(&to_gt(i915)->ggtt->vm);
>
> - RUNTIME_INFO(i915)->platform_engine_mask = BIT(0);
> to_gt(i915)->info.engine_mask = BIT(0);
>
> to_gt(i915)->engine[RCS0] = mock_engine(i915, "mock", RCS0);
More information about the Intel-gfx
mailing list