diff
+static int init_and_validate_client(struct amdgpu_device *adev)
+{
+	int ret = drm_client_init(&adev->ddev, &adev->kfd.client, "kfd",
+				  &kfd_client_funcs);
+	if (ret) {
+		dev_err(adev->dev, "Failed to init DRM client: %d\n", ret);
+		return ret;
+	}
+	if (!adev->kfd.client.dev || !adev->kfd.client.funcs) {
+		dev_err(adev->dev, "DRM client not properly initialized\n");
+		drm_client_release(&adev->kfd.client);
+		return -EINVAL;
+	}
+	return 0;
+}
+
 int amdgpu_amdkfd_drm_client_create(struct amdgpu_device *adev)
 {
 	int ret;
 
 	if (!adev->kfd.init_complete)
 		return 0;
 
-	ret = drm_client_init(&adev->ddev, &adev->kfd.client, "kfd",
-			      &kfd_client_funcs);
-	if (ret) {
-		dev_err(adev->dev, "Failed to init DRM client: %d\n",
-			ret);
+	ret = init_and_validate_client(adev);
+	if (ret)
 		return ret;
-	}
+
 	drm_client_register(&adev->kfd.client);
+	return 0;
