AMD General Series is Reviewed-by: <[email protected]>
> -----Original Message----- > From: Lin, Amber <[email protected]> > Sent: Thursday, June 18, 2026 9:23 AM > To: [email protected]; Zhang, Jesse(Jie) <[email protected]> > Cc: Lin, Amber <[email protected]> > Subject: [PATCH 2/2] drm/amdkfd: Remove extra function > > recover_bad_queue_mes is not needed. Call reset_queues_mes directly. > > Signed-off-by: Amber Lin <[email protected]> > --- > .../drm/amd/amdkfd/kfd_device_queue_manager.c | 19 +++++-------------- > 1 file changed, 5 insertions(+), 14 deletions(-) > > diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c > b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c > index 4e60d9364e37..83be54372b18 100644 > --- a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c > +++ b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c > @@ -72,11 +72,11 @@ static int allocate_sdma_queue(struct > device_queue_manager *dqm, > struct queue *q, const uint32_t > *restore_sdma_id); > > static int reset_queues_on_hws_hang(struct device_queue_manager *dqm, bool > is_sdma); -static int recover_bad_queue_mes(struct device_queue_manager *dqm, > struct queue *q); static struct queue *find_queue_by_doorbell_offset(struct > device_queue_manager *dqm, > u32 doorbell_offset); > static void set_queue_as_reset(struct device_queue_manager *dqm, struct queue > *q, > struct qcm_process_device *qpd); > +static int reset_queues_mes(struct device_queue_manager *dqm, struct > +queue *q); > > static inline > enum KFD_MQD_TYPE get_mqd_type_from_queue_type(enum kfd_queue_type > type) @@ -333,11 +333,12 @@ static int > remove_queue_mes_on_reset_option(struct device_queue_manager *dqm, st > amdgpu_mes_unlock(&adev->mes); > up_read(&adev->reset_domain->sem); > > + /* If is_for_reset set, it is a mes internal cleanup */ > if (!r || is_for_reset) > return r; > > - /* remove_hw_queue failed. try to recover */ > - r = recover_bad_queue_mes(dqm, q); > + /* remove_hw_queue failure indicates a queue hang. reset the queue */ > + r = reset_queues_mes(dqm, q); > if (r && amdgpu_gpu_recovery) { > dev_err(adev->dev, "failed to remove queue from MES, > doorbell=0x%x\n", > q->properties.doorbell_off); > @@ -488,16 +489,6 @@ static int reset_queues_mes(struct > device_queue_manager *dqm, struct queue *q) > return r; > } > > -static int recover_bad_queue_mes(struct device_queue_manager *dqm, struct > queue *q) -{ > - struct amdgpu_device *adev = (struct amdgpu_device *)dqm->dev->adev; > - int r = 0; > - > - r = reset_queues_mes(dqm, q); > - > - return r; > -} > - > static void increment_queue_count(struct device_queue_manager *dqm, > struct qcm_process_device *qpd, > struct queue *q) > @@ -3269,7 +3260,7 @@ int kfd_dqm_suspend_bad_queue_mes(struct kfd_node > *knode, u32 pasid, u32 doorbel > > list_for_each_entry(q, &qpd->queues_list, list) { > if (q->doorbell_id == doorbell_id && > q->properties.is_active) { > - recover_bad_queue_mes(dqm, q); > + reset_queues_mes(dqm, q); > q->properties.is_evicted = true; > q->properties.is_active = false; > decrement_queue_count(dqm, qpd, q); > -- > 2.43.0
