drm/i915: Drop intel_gt_tile_cleanup()
authorMatt Roper <matthew.d.roper@intel.com>
Tue, 6 Sep 2022 23:49:24 +0000 (16:49 -0700)
committerJoonas Lahtinen <joonas.lahtinen@linux.intel.com>
Mon, 12 Sep 2022 12:23:11 +0000 (15:23 +0300)
Unmapping of the MMIO range can be done as a DRM-managed action, which
will take care of the unmapping on device teardown and error paths.
This will also ensure proper ordering with respect to other DRM-managed
actions that we'll be using to clean up non-primary GTs in upcoming
patches.

We have not yet enabled any non-root GTs in the driver yet, so the
kfree() of the GT structure is effectively dead code.  When we do start
enabling non-root GTs in upcoming patches, those are going to be using
DRM-managed allocations tied to the device lifetime, so we don't need to
explicitly free them (and kfree would be incorrect anyway).

Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20220906234934.3655440-5-matthew.d.roper@intel.com
Signed-off-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
drivers/gpu/drm/i915/gt/intel_gt.c
drivers/gpu/drm/i915/intel_uncore.c

index d9ca88200ea592f7dd6742fe646f8b5e77e871b0..8153f9e76e8fc7a6b6cf7a6f79848acd430ea770 100644 (file)
@@ -802,15 +802,6 @@ static int intel_gt_tile_setup(struct intel_gt *gt, phys_addr_t phys_addr)
        return 0;
 }
 
-static void
-intel_gt_tile_cleanup(struct intel_gt *gt)
-{
-       intel_uncore_cleanup_mmio(gt->uncore);
-
-       if (!gt_is_root(gt))
-               kfree(gt);
-}
-
 int intel_gt_probe_all(struct drm_i915_private *i915)
 {
        struct pci_dev *pdev = to_pci_dev(i915->drm.dev);
@@ -857,10 +848,8 @@ void intel_gt_release_all(struct drm_i915_private *i915)
        struct intel_gt *gt;
        unsigned int id;
 
-       for_each_gt(gt, i915, id) {
-               intel_gt_tile_cleanup(gt);
+       for_each_gt(gt, i915, id)
                i915->gt[id] = NULL;
-       }
 }
 
 void intel_gt_info_print(const struct intel_gt_info *info,
index 02121ae969e2f37de2e2d1fd0d8d391c80c457b2..c180d9514740897b6af12f04d2cc3ed70955764c 100644 (file)
@@ -21,6 +21,7 @@
  * IN THE SOFTWARE.
  */
 
+#include <drm/drm_managed.h>
 #include <linux/pm_runtime.h>
 
 #include "gt/intel_engine_regs.h"
@@ -2232,6 +2233,11 @@ static int i915_pmic_bus_access_notifier(struct notifier_block *nb,
        return NOTIFY_OK;
 }
 
+static void uncore_unmap_mmio(struct drm_device *drm, void *regs)
+{
+       iounmap(regs);
+}
+
 int intel_uncore_setup_mmio(struct intel_uncore *uncore, phys_addr_t phys_addr)
 {
        struct drm_i915_private *i915 = uncore->i915;
@@ -2260,12 +2266,7 @@ int intel_uncore_setup_mmio(struct intel_uncore *uncore, phys_addr_t phys_addr)
                return -EIO;
        }
 
-       return 0;
-}
-
-void intel_uncore_cleanup_mmio(struct intel_uncore *uncore)
-{
-       iounmap(uncore->regs);
+       return drmm_add_action_or_reset(&i915->drm, uncore_unmap_mmio, uncore->regs);
 }
 
 void intel_uncore_init_early(struct intel_uncore *uncore,