• Janusz Krzysztofik's avatar
    drm/i915: Flush buffer pools on driver remove · 74af1e2c
    Janusz Krzysztofik authored
    We currently do an explicit flush of the buffer pools within the call path
    of drm_driver.release(); this removes all buffers, regardless of their age,
    freeing the buffers' associated resources (objects, address space areas).
    However there is other code that runs within the drm_driver.release() call
    chain that expects objects and their associated address space areas have
    already been flushed.
    
    Since buffer pools auto-flush old buffers once per second in a worker
    thread, there's a small window where if we remove the driver while there
    are still objects in buffers with an age of less than one second, the
    assumptions of the other release code may be violated.
    
    By moving the flush to driver remove (which executes earlier via the
    pci_driver.remove() flow) we're ensuring that all buffers are flushed and
    their associated objects freed before some other code in
    pci_driver.remove() flushes those objects so they are released before
    _any_ code in drm_driver.release() that check completness of those
    flushes executes.
    
    v2: Reword commit description as suggested by Matt.
    Signed-off-by: default avatarJanusz Krzysztofik <janusz.krzysztofik@linux.intel.com>
    Cc: Chris Wilson <chris@chris-wilson.co.uk>
    Cc: Matt Roper <matthew.d.roper@intel.com>
    Signed-off-by: default avatarMatt Roper <matthew.d.roper@intel.com>
    Reviewed-by: default avatarMatt Roper <matthew.d.roper@intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20210924163825.634606-1-janusz.krzysztofik@linux.intel.com
    74af1e2c
intel_gt.c 21.7 KB