Commit 3c036389 authored by Christian König's avatar Christian König Committed by Alex Deucher

drm/radeon: drop doing resets in a work item

Blocking completely innocent processes with a GPU reset is
a pretty bad idea. Just set needs_reset and let the next
command submission or fence wait do the job.
Signed-off-by: default avatarChristian König <christian.koenig@amd.com>
Reviewed-by: default avatarMaarten Lankhorst <maarten.lankhorst@canonical.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent d6d5c5b8
...@@ -8246,8 +8246,10 @@ int cik_irq_process(struct radeon_device *rdev) ...@@ -8246,8 +8246,10 @@ int cik_irq_process(struct radeon_device *rdev)
} }
if (queue_hotplug) if (queue_hotplug)
schedule_work(&rdev->hotplug_work); schedule_work(&rdev->hotplug_work);
if (queue_reset) if (queue_reset) {
schedule_work(&rdev->reset_work); rdev->needs_reset = true;
wake_up_all(&rdev->fence_queue);
}
if (queue_thermal) if (queue_thermal)
schedule_work(&rdev->pm.dpm.thermal.work); schedule_work(&rdev->pm.dpm.thermal.work);
rdev->ih.rptr = rptr; rdev->ih.rptr = rptr;
......
...@@ -2346,7 +2346,6 @@ struct radeon_device { ...@@ -2346,7 +2346,6 @@ struct radeon_device {
struct radeon_mec mec; struct radeon_mec mec;
struct work_struct hotplug_work; struct work_struct hotplug_work;
struct work_struct audio_work; struct work_struct audio_work;
struct work_struct reset_work;
int num_crtc; /* number of crtcs */ int num_crtc; /* number of crtcs */
struct mutex dc_hw_i2c_mutex; /* display controller hw i2c mutex */ struct mutex dc_hw_i2c_mutex; /* display controller hw i2c mutex */
bool has_uvd; bool has_uvd;
......
...@@ -1673,9 +1673,6 @@ int radeon_gpu_reset(struct radeon_device *rdev) ...@@ -1673,9 +1673,6 @@ int radeon_gpu_reset(struct radeon_device *rdev)
return 0; return 0;
} }
rdev->in_reset = true;
rdev->needs_reset = false;
radeon_save_bios_scratch_regs(rdev); radeon_save_bios_scratch_regs(rdev);
/* block TTM */ /* block TTM */
resched = ttm_bo_lock_delayed_workqueue(&rdev->mman.bdev); resched = ttm_bo_lock_delayed_workqueue(&rdev->mman.bdev);
...@@ -1738,6 +1735,10 @@ int radeon_gpu_reset(struct radeon_device *rdev) ...@@ -1738,6 +1735,10 @@ int radeon_gpu_reset(struct radeon_device *rdev)
radeon_hpd_init(rdev); radeon_hpd_init(rdev);
ttm_bo_unlock_delayed_workqueue(&rdev->mman.bdev, resched); ttm_bo_unlock_delayed_workqueue(&rdev->mman.bdev, resched);
rdev->in_reset = true;
rdev->needs_reset = false;
downgrade_write(&rdev->exclusive_lock); downgrade_write(&rdev->exclusive_lock);
drm_helper_resume_force_mode(rdev->ddev); drm_helper_resume_force_mode(rdev->ddev);
......
...@@ -87,23 +87,6 @@ static void radeon_hotplug_work_func(struct work_struct *work) ...@@ -87,23 +87,6 @@ static void radeon_hotplug_work_func(struct work_struct *work)
drm_helper_hpd_irq_event(dev); drm_helper_hpd_irq_event(dev);
} }
/**
* radeon_irq_reset_work_func - execute gpu reset
*
* @work: work struct
*
* Execute scheduled gpu reset (cayman+).
* This function is called when the irq handler
* thinks we need a gpu reset.
*/
static void radeon_irq_reset_work_func(struct work_struct *work)
{
struct radeon_device *rdev = container_of(work, struct radeon_device,
reset_work);
radeon_gpu_reset(rdev);
}
/** /**
* radeon_driver_irq_preinstall_kms - drm irq preinstall callback * radeon_driver_irq_preinstall_kms - drm irq preinstall callback
* *
...@@ -284,7 +267,6 @@ int radeon_irq_kms_init(struct radeon_device *rdev) ...@@ -284,7 +267,6 @@ int radeon_irq_kms_init(struct radeon_device *rdev)
INIT_WORK(&rdev->hotplug_work, radeon_hotplug_work_func); INIT_WORK(&rdev->hotplug_work, radeon_hotplug_work_func);
INIT_WORK(&rdev->audio_work, r600_audio_update_hdmi); INIT_WORK(&rdev->audio_work, r600_audio_update_hdmi);
INIT_WORK(&rdev->reset_work, radeon_irq_reset_work_func);
rdev->irq.installed = true; rdev->irq.installed = true;
r = drm_irq_install(rdev->ddev, rdev->ddev->pdev->irq); r = drm_irq_install(rdev->ddev, rdev->ddev->pdev->irq);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment