mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-18 02:46:06 +00:00
drm/xe: Remove devcoredump during driver release
This will remove devcoredump from file system and free its resources during driver unload. This fix the driver unload after gpu hang happened, otherwise this it would report that Xe KMD is still in use and it would leave the kernel in a state that Xe KMD can't be unload without a reboot. Cc: Rodrigo Vivi <rodrigo.vivi@intel.com> Cc: Jonathan Cavitt <jonathan.cavitt@intel.com> Acked-by: Jonathan Cavitt <jonathan.cavitt@intel.com> Signed-off-by: José Roberto de Souza <jose.souza@intel.com> Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20240409200206.108452-2-jose.souza@intel.com Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
This commit is contained in:
parent
a28380f119
commit
4209d635a8
@ -9,6 +9,8 @@
|
||||
#include <linux/devcoredump.h>
|
||||
#include <generated/utsrelease.h>
|
||||
|
||||
#include <drm/drm_managed.h>
|
||||
|
||||
#include "xe_device.h"
|
||||
#include "xe_exec_queue.h"
|
||||
#include "xe_force_wake.h"
|
||||
@ -235,5 +237,14 @@ void xe_devcoredump(struct xe_sched_job *job)
|
||||
dev_coredumpm(xe->drm.dev, THIS_MODULE, coredump, 0, GFP_KERNEL,
|
||||
xe_devcoredump_read, xe_devcoredump_free);
|
||||
}
|
||||
#endif
|
||||
|
||||
static void xe_driver_devcoredump_fini(struct drm_device *drm, void *arg)
|
||||
{
|
||||
dev_coredump_put(drm->dev);
|
||||
}
|
||||
|
||||
int xe_devcoredump_init(struct xe_device *xe)
|
||||
{
|
||||
return drmm_add_action_or_reset(&xe->drm, xe_driver_devcoredump_fini, xe);
|
||||
}
|
||||
#endif
|
||||
|
@ -11,10 +11,16 @@ struct xe_sched_job;
|
||||
|
||||
#ifdef CONFIG_DEV_COREDUMP
|
||||
void xe_devcoredump(struct xe_sched_job *job);
|
||||
int xe_devcoredump_init(struct xe_device *xe);
|
||||
#else
|
||||
static inline void xe_devcoredump(struct xe_sched_job *job)
|
||||
{
|
||||
}
|
||||
|
||||
static inline int xe_devcoredump_init(struct xe_device *xe)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
@ -20,6 +20,7 @@
|
||||
#include "regs/xe_regs.h"
|
||||
#include "xe_bo.h"
|
||||
#include "xe_debugfs.h"
|
||||
#include "xe_devcoredump.h"
|
||||
#include "xe_dma_buf.h"
|
||||
#include "xe_drm_client.h"
|
||||
#include "xe_drv.h"
|
||||
@ -579,6 +580,9 @@ int xe_device_probe(struct xe_device *xe)
|
||||
return err;
|
||||
}
|
||||
|
||||
err = xe_devcoredump_init(xe);
|
||||
if (err)
|
||||
return err;
|
||||
err = drmm_add_action_or_reset(&xe->drm, xe_driver_flr_fini, xe);
|
||||
if (err)
|
||||
return err;
|
||||
|
Loading…
x
Reference in New Issue
Block a user