On Wed, May 13, 2026 at 03:47:33PM +0200, Christian König wrote:
>
>
> On 5/13/26 11:57, Junhua Shen wrote:
> > Call amdgpu_svm_migration_init() in the device initialization and
> > XGMI reset-restore paths to register the GPU's VRAM as a ZONE_DEVICE
> > region before KFD initialization.
> >
> > This activates the drm_pagemap migration infrastructure.
> >
> > Signed-off-by: Junhua Shen <[email protected]>
> > ---
> > drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 4 ++++
> > drivers/gpu/drm/amd/amdgpu/amdgpu_reset.c | 4 ++++
> > 2 files changed, 8 insertions(+)
> >
> > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> > b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> > index fbe553c38583..3be51a2c0106 100644
> > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> > @@ -78,6 +78,7 @@
> > #include "amdgpu_reset.h"
> > #include "amdgpu_virt.h"
> > #include "amdgpu_dev_coredump.h"
> > +#include "amdgpu_migrate.h"
> >
> > #include <linux/suspend.h>
> > #include <drm/task_barrier.h>
> > @@ -4076,6 +4077,9 @@ int amdgpu_device_init(struct amdgpu_device *adev,
> >
> > /* Don't init kfd if whole hive need to be reset during init */
> > if (adev->init_lvl->level != AMDGPU_INIT_LEVEL_MINIMAL_XGMI) {
> > +#if IS_ENABLED(CONFIG_DRM_AMDGPU_SVM)
> > + amdgpu_svm_migration_init(adev);
> > +#endif
>
> Looks good in general, but just a style advise:
>
> Instead of spread those #if IS_ENABLED() It's good practice to do something
> like this in the header:
>
> #if IS_ENABLED(CONFIG_DRM_AMDGPU_SVM)
>
> void amdgpu_svm_migration_init(struct amdgpu_device *adev);
>
> #else
>
> void amdgpu_svm_migration_init(struct amdgpu_device *adev) {}
>
> #endif
>
> Especially when the function is used multiple times.
>
Thank you for the style advice.
The header (amdgpu_migrate.h) already provides the static inline stub
for the CONFIG_DRM_AMDGPU_SVM case.
I'll drop the #if IS_ENABLED() guards at the call sites in both
amdgpu_device.c and amdgpu_reset.c, and just call
amdgpu_svm_migration_init() directly.
Regards,
Junhua
> Regards,
> Christian.
>
> > kgd2kfd_init_zone_device(adev);
> > kfd_update_svm_support_properties(adev);
> > }
> > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_reset.c
> > b/drivers/gpu/drm/amd/amdgpu/amdgpu_reset.c
> > index 28c4ad62f50e..c94d43f3ab42 100644
> > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_reset.c
> > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_reset.c
> > @@ -25,6 +25,7 @@
> > #include "aldebaran.h"
> > #include "sienna_cichlid.h"
> > #include "smu_v13_0_10.h"
> > +#include "amdgpu_migrate.h"
> >
> > static int amdgpu_reset_xgmi_reset_on_init_suspend(struct amdgpu_device
> > *adev)
> > {
> > @@ -87,6 +88,9 @@ static int amdgpu_reset_xgmi_reset_on_init_restore_hwctxt(
> > return r;
> > list_for_each_entry(tmp_adev, reset_device_list, reset_list) {
> > if (!tmp_adev->kfd.init_complete) {
> > +#if IS_ENABLED(CONFIG_DRM_AMDGPU_SVM)
> > + amdgpu_svm_migration_init(tmp_adev);
> > +#endif
> > kgd2kfd_init_zone_device(tmp_adev);
> > amdgpu_amdkfd_device_init(tmp_adev);
> > amdgpu_amdkfd_drm_client_create(tmp_adev);
>