Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/xe: Don't restart parallel queues multiple times on GT reset

In case of parallel submissions multiple GuC id will point to the
same exec queue and on GT reset such exec queues will get restarted
multiple times which is not desirable.

v2: don't use exec_queue_enabled() which could race,
do the same for xe_guc_submit_stop (Matt B)

Link: https://gitlab.freedesktop.org/drm/xe/kernel/-/issues/2295
Cc: Jonathan Cavitt <jonathan.cavitt@intel.com>
Cc: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
Cc: Matthew Auld <matthew.auld@intel.com>
Cc: Matthew Brost <matthew.brost@intel.com>
Cc: Tejas Upadhyay <tejas.upadhyay@intel.com>
Reviewed-by: Matthew Brost <matthew.brost@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20241022103555.731557-1-nirmoy.das@intel.com
Signed-off-by: Nirmoy Das <nirmoy.das@intel.com>

+12 -2
+12 -2
drivers/gpu/drm/xe/xe_guc_submit.c
··· 1819 1819 1820 1820 mutex_lock(&guc->submission_state.lock); 1821 1821 1822 - xa_for_each(&guc->submission_state.exec_queue_lookup, index, q) 1822 + xa_for_each(&guc->submission_state.exec_queue_lookup, index, q) { 1823 + /* Prevent redundant attempts to stop parallel queues */ 1824 + if (q->guc->id != index) 1825 + continue; 1826 + 1823 1827 guc_exec_queue_stop(guc, q); 1828 + } 1824 1829 1825 1830 mutex_unlock(&guc->submission_state.lock); 1826 1831 ··· 1863 1858 1864 1859 mutex_lock(&guc->submission_state.lock); 1865 1860 atomic_dec(&guc->submission_state.stopped); 1866 - xa_for_each(&guc->submission_state.exec_queue_lookup, index, q) 1861 + xa_for_each(&guc->submission_state.exec_queue_lookup, index, q) { 1862 + /* Prevent redundant attempts to start parallel queues */ 1863 + if (q->guc->id != index) 1864 + continue; 1865 + 1867 1866 guc_exec_queue_start(q); 1867 + } 1868 1868 mutex_unlock(&guc->submission_state.lock); 1869 1869 1870 1870 wake_up_all(&guc->ct.wq);