<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
{font-family:"Cambria Math";
panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
{font-family:Calibri;
panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
{font-family:Consolas;
panose-1:2 11 6 9 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{margin:0in;
font-size:11.0pt;
font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
{mso-style-priority:99;
color:blue;
text-decoration:underline;}
pre
{mso-style-priority:99;
mso-style-link:"HTML Preformatted Char";
margin:0in;
font-size:10.0pt;
font-family:"Courier New";}
span.HTMLPreformattedChar
{mso-style-name:"HTML Preformatted Char";
mso-style-priority:99;
mso-style-link:"HTML Preformatted";
font-family:Consolas;}
span.EmailStyle21
{mso-style-type:personal-reply;
font-family:"Calibri",sans-serif;
color:windowtext;}
.MsoChpDefault
{mso-style-type:export-only;
font-size:10.0pt;
mso-ligatures:none;}
@page WordSection1
{size:8.5in 11.0in;
margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
{page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="blue" vlink="purple" style="word-wrap:break-word">
<p style="font-family:Arial;font-size:10pt;color:#0000FF;margin:5pt;font-style:normal;font-weight:normal;text-decoration:none;" align="Left">
[AMD Official Use Only - General]<br>
</p>
<br>
<div>
<div class="WordSection1">
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<div style="border:none;border-left:solid blue 1.5pt;padding:0in 0in 0in 4.0pt">
<div>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b>From:</b> Kuehling, Felix <Felix.Kuehling@amd.com> <br>
<b>Sent:</b> Thursday, March 14, 2024 2:39 PM<br>
<b>To:</b> Joshi, Mukul <Mukul.Joshi@amd.com>; amd-gfx@lists.freedesktop.org<br>
<b>Cc:</b> Cornwall, Jay <Jay.Cornwall@amd.com><br>
<b>Subject:</b> Re: [PATCH 2/2] drm/amdkfd: Check preemption status on all XCDs<o:p></o:p></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<p class="MsoNormal">On 2024-03-14 12:00, Mukul Joshi wrote:<o:p></o:p></p>
</div>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<pre>This patch adds the following functionality:<o:p></o:p></pre>
<pre>- Check the queue preemption status on all XCDs in a partition<o:p></o:p></pre>
<pre> for GFX 9.4.3.<o:p></o:p></pre>
<pre>- Update the queue preemption debug message to print the queue<o:p></o:p></pre>
<pre> doorbell id for which preemption failed.<o:p></o:p></pre>
<pre>- Change the signature of check preemption failed function to<o:p></o:p></pre>
<pre> return a bool instead of uint32_t and pass the MQD manager<o:p></o:p></pre>
<pre> as an argument.<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>Suggested-by: Jay Cornwall <a href="mailto:jay.cornwall@amd.com"><jay.cornwall@amd.com></a><o:p></o:p></pre>
<pre>Signed-off-by: Mukul Joshi <a href="mailto:mukul.joshi@amd.com"><mukul.joshi@amd.com></a><o:p></o:p></pre>
<pre>---<o:p></o:p></pre>
<pre> .../drm/amd/amdkfd/kfd_device_queue_manager.c | 3 +--<o:p></o:p></pre>
<pre> drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager.c | 18 +++++++++++++<o:p></o:p></pre>
<pre> drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager.h | 4 ++-<o:p></o:p></pre>
<pre> .../gpu/drm/amd/amdkfd/kfd_mqd_manager_cik.c | 4 +--<o:p></o:p></pre>
<pre> .../gpu/drm/amd/amdkfd/kfd_mqd_manager_v10.c | 4 +--<o:p></o:p></pre>
<pre> .../gpu/drm/amd/amdkfd/kfd_mqd_manager_v11.c | 4 +--<o:p></o:p></pre>
<pre> .../gpu/drm/amd/amdkfd/kfd_mqd_manager_v9.c | 25 ++++++++++++++++---<o:p></o:p></pre>
<pre> .../gpu/drm/amd/amdkfd/kfd_mqd_manager_vi.c | 4 +--<o:p></o:p></pre>
<pre> 8 files changed, 52 insertions(+), 14 deletions(-)<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c<o:p></o:p></pre>
<pre>index 1ce398ab0b3d..151fabf84040 100644<o:p></o:p></pre>
<pre>--- a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c<o:p></o:p></pre>
<pre>+++ b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c<o:p></o:p></pre>
<pre>@@ -1997,8 +1997,7 @@ static int unmap_queues_cpsch(struct device_queue_manager *dqm,<o:p></o:p></pre>
<pre> * check those fields<o:p></o:p></pre>
<pre> */<o:p></o:p></pre>
<pre> mqd_mgr = dqm->mqd_mgrs[KFD_MQD_TYPE_HIQ];<o:p></o:p></pre>
<pre>- if (mqd_mgr->check_preemption_failed(dqm->packet_mgr.priv_queue->queue->mqd)) {<o:p></o:p></pre>
<pre>- dev_err(dev, "HIQ MQD's queue_doorbell_id0 is not 0, Queue preemption time out\n");<o:p></o:p></pre>
<pre>+ if (mqd_mgr->check_preemption_failed(mqd_mgr, dqm->packet_mgr.priv_queue->queue->mqd)) {<o:p></o:p></pre>
<pre> while (halt_if_hws_hang)<o:p></o:p></pre>
<pre> schedule();<o:p></o:p></pre>
<pre> return -ETIME;<o:p></o:p></pre>
<pre>diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager.c b/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager.c<o:p></o:p></pre>
<pre>index 050a6936ff84..cbec8c87c984 100644<o:p></o:p></pre>
<pre>--- a/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager.c<o:p></o:p></pre>
<pre>+++ b/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager.c<o:p></o:p></pre>
<pre>@@ -290,3 +290,21 @@ uint64_t kfd_mqd_stride(struct mqd_manager *mm,<o:p></o:p></pre>
<pre> {<o:p></o:p></pre>
<pre> return mm->mqd_size;<o:p></o:p></pre>
<pre> }<o:p></o:p></pre>
<pre>+<o:p></o:p></pre>
<pre>+bool kfd_check_hiq_mqd_doorbell_id(struct kfd_node *node, uint32_t doorbell_id,<o:p></o:p></pre>
<pre>+ uint32_t inst)<o:p></o:p></pre>
<pre>+{<o:p></o:p></pre>
<pre>+ if (doorbell_id) {<o:p></o:p></pre>
<pre>+ struct device *dev = node->adev->dev;<o:p></o:p></pre>
<pre>+<o:p></o:p></pre>
<pre>+ if (KFD_GC_VERSION(node) == IP_VERSION(9, 4, 3))<o:p></o:p></pre>
</blockquote>
<p>Could this be made more generic? E.g.:<o:p></o:p></p>
<pre> if (node->adev->xcp_mgr && node->adev->xcp_mgr->num_xcps > 0)<o:p></o:p></pre>
<pre><span style="font-size:11.0pt;font-family:"Calibri",sans-serif"><o:p> </o:p></span></pre>
<pre><span style="font-size:11.0pt;font-family:"Calibri",sans-serif">Yes this seems much better. I will make this change before submitting.<o:p></o:p></span></pre>
<pre><span style="font-size:11.0pt;font-family:"Calibri",sans-serif"><o:p> </o:p></span></pre>
<pre><span style="font-size:11.0pt;font-family:"Calibri",sans-serif">Thanks,<o:p></o:p></span></pre>
<pre><span style="font-size:11.0pt;font-family:"Calibri",sans-serif">Mukul<o:p></o:p></span></pre>
<pre><span style="font-size:11.0pt;font-family:"Calibri",sans-serif"><o:p> </o:p></span></pre>
<p>Other than that, the series is<o:p></o:p></p>
<p>Reviewed-by: Felix Kuehling <a href="mailto:felix.kuehling@amd.com"><felix.kuehling@amd.com></a><o:p></o:p></p>
<p><o:p> </o:p></p>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<pre><o:p> </o:p></pre>
<pre>+ dev_err(dev, "XCC %d: Queue preemption failed for queue with doorbell_id: %x\n",<o:p></o:p></pre>
<pre>+ inst, doorbell_id);<o:p></o:p></pre>
<pre>+ else<o:p></o:p></pre>
<pre>+ dev_err(dev, "Queue preemption failed for queue with doorbell_id: %x\n",<o:p></o:p></pre>
<pre>+ doorbell_id);<o:p></o:p></pre>
<pre>+ return true;<o:p></o:p></pre>
<pre>+ }<o:p></o:p></pre>
<pre>+<o:p></o:p></pre>
<pre>+ return false;<o:p></o:p></pre>
<pre>+}<o:p></o:p></pre>
<pre>diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager.h b/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager.h<o:p></o:p></pre>
<pre>index ba3eebb2ca6d..17cc1f25c8d0 100644<o:p></o:p></pre>
<pre>--- a/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager.h<o:p></o:p></pre>
<pre>+++ b/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager.h<o:p></o:p></pre>
<pre>@@ -119,7 +119,7 @@ struct mqd_manager {<o:p></o:p></pre>
<pre> #if defined(CONFIG_DEBUG_FS)<o:p></o:p></pre>
<pre> int (*debugfs_show_mqd)(struct seq_file *m, void *data);<o:p></o:p></pre>
<pre> #endif<o:p></o:p></pre>
<pre>- uint32_t (*check_preemption_failed)(void *mqd);<o:p></o:p></pre>
<pre>+ bool (*check_preemption_failed)(struct mqd_manager *mm, void *mqd);<o:p></o:p></pre>
<pre> uint64_t (*mqd_stride)(struct mqd_manager *mm,<o:p></o:p></pre>
<pre> struct queue_properties *p);<o:p></o:p></pre>
<pre> <o:p></o:p></pre>
<pre>@@ -198,4 +198,6 @@ void kfd_get_hiq_xcc_mqd(struct kfd_node *dev,<o:p></o:p></pre>
<pre> uint64_t kfd_hiq_mqd_stride(struct kfd_node *dev);<o:p></o:p></pre>
<pre> uint64_t kfd_mqd_stride(struct mqd_manager *mm,<o:p></o:p></pre>
<pre> struct queue_properties *q);<o:p></o:p></pre>
<pre>+bool kfd_check_hiq_mqd_doorbell_id(struct kfd_node *node, uint32_t doorbell_id,<o:p></o:p></pre>
<pre>+ uint32_t inst);<o:p></o:p></pre>
<pre> #endif /* KFD_MQD_MANAGER_H_ */<o:p></o:p></pre>
<pre>diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_cik.c b/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_cik.c<o:p></o:p></pre>
<pre>index 8f9f56f7a8b0..05f3ac2eaef9 100644<o:p></o:p></pre>
<pre>--- a/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_cik.c<o:p></o:p></pre>
<pre>+++ b/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_cik.c<o:p></o:p></pre>
<pre>@@ -206,11 +206,11 @@ static void __update_mqd(struct mqd_manager *mm, void *mqd,<o:p></o:p></pre>
<pre> q->is_active = QUEUE_IS_ACTIVE(*q);<o:p></o:p></pre>
<pre> }<o:p></o:p></pre>
<pre> <o:p></o:p></pre>
<pre>-static uint32_t check_preemption_failed(void *mqd)<o:p></o:p></pre>
<pre>+static bool check_preemption_failed(struct mqd_manager *mm, void *mqd)<o:p></o:p></pre>
<pre> {<o:p></o:p></pre>
<pre> struct cik_mqd *m = (struct cik_mqd *)mqd;<o:p></o:p></pre>
<pre> <o:p></o:p></pre>
<pre>- return m->queue_doorbell_id0;<o:p></o:p></pre>
<pre>+ return kfd_check_hiq_mqd_doorbell_id(mm->dev, m->queue_doorbell_id0, 0);<o:p></o:p></pre>
<pre> }<o:p></o:p></pre>
<pre> <o:p></o:p></pre>
<pre> static void update_mqd(struct mqd_manager *mm, void *mqd,<o:p></o:p></pre>
<pre>diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_v10.c b/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_v10.c<o:p></o:p></pre>
<pre>index d4cf7d845928..2eff37aaf827 100644<o:p></o:p></pre>
<pre>--- a/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_v10.c<o:p></o:p></pre>
<pre>+++ b/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_v10.c<o:p></o:p></pre>
<pre>@@ -224,11 +224,11 @@ static void update_mqd(struct mqd_manager *mm, void *mqd,<o:p></o:p></pre>
<pre> q->is_active = QUEUE_IS_ACTIVE(*q);<o:p></o:p></pre>
<pre> }<o:p></o:p></pre>
<pre> <o:p></o:p></pre>
<pre>-static uint32_t check_preemption_failed(void *mqd)<o:p></o:p></pre>
<pre>+static bool check_preemption_failed(struct mqd_manager *mm, void *mqd)<o:p></o:p></pre>
<pre> {<o:p></o:p></pre>
<pre> struct v10_compute_mqd *m = (struct v10_compute_mqd *)mqd;<o:p></o:p></pre>
<pre> <o:p></o:p></pre>
<pre>- return m->queue_doorbell_id0;<o:p></o:p></pre>
<pre>+ return kfd_check_hiq_mqd_doorbell_id(mm->dev, m->queue_doorbell_id0, 0);<o:p></o:p></pre>
<pre> }<o:p></o:p></pre>
<pre> <o:p></o:p></pre>
<pre> static int get_wave_state(struct mqd_manager *mm, void *mqd,<o:p></o:p></pre>
<pre>diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_v11.c b/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_v11.c<o:p></o:p></pre>
<pre>index 2b9f57c267eb..68dbc0399c87 100644<o:p></o:p></pre>
<pre>--- a/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_v11.c<o:p></o:p></pre>
<pre>+++ b/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_v11.c<o:p></o:p></pre>
<pre>@@ -278,11 +278,11 @@ static void update_mqd(struct mqd_manager *mm, void *mqd,<o:p></o:p></pre>
<pre> q->is_active = QUEUE_IS_ACTIVE(*q);<o:p></o:p></pre>
<pre> }<o:p></o:p></pre>
<pre> <o:p></o:p></pre>
<pre>-static uint32_t check_preemption_failed(void *mqd)<o:p></o:p></pre>
<pre>+static bool check_preemption_failed(struct mqd_manager *mm, void *mqd)<o:p></o:p></pre>
<pre> {<o:p></o:p></pre>
<pre> struct v11_compute_mqd *m = (struct v11_compute_mqd *)mqd;<o:p></o:p></pre>
<pre> <o:p></o:p></pre>
<pre>- return m->queue_doorbell_id0;<o:p></o:p></pre>
<pre>+ return kfd_check_hiq_mqd_doorbell_id(mm->dev, m->queue_doorbell_id0, 0);<o:p></o:p></pre>
<pre> }<o:p></o:p></pre>
<pre> <o:p></o:p></pre>
<pre> static int get_wave_state(struct mqd_manager *mm, void *mqd,<o:p></o:p></pre>
<pre>diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_v9.c b/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_v9.c<o:p></o:p></pre>
<pre>index 7c93a0932677..6bddc16808d7 100644<o:p></o:p></pre>
<pre>--- a/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_v9.c<o:p></o:p></pre>
<pre>+++ b/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_v9.c<o:p></o:p></pre>
<pre>@@ -316,11 +316,11 @@ static void update_mqd(struct mqd_manager *mm, void *mqd,<o:p></o:p></pre>
<pre> }<o:p></o:p></pre>
<pre> <o:p></o:p></pre>
<pre> <o:p></o:p></pre>
<pre>-static uint32_t check_preemption_failed(void *mqd)<o:p></o:p></pre>
<pre>+static bool check_preemption_failed(struct mqd_manager *mm, void *mqd)<o:p></o:p></pre>
<pre> {<o:p></o:p></pre>
<pre> struct v9_mqd *m = (struct v9_mqd *)mqd;<o:p></o:p></pre>
<pre> <o:p></o:p></pre>
<pre>- return m->queue_doorbell_id0;<o:p></o:p></pre>
<pre>+ return kfd_check_hiq_mqd_doorbell_id(mm->dev, m->queue_doorbell_id0, 0);<o:p></o:p></pre>
<pre> }<o:p></o:p></pre>
<pre> <o:p></o:p></pre>
<pre> static int get_wave_state(struct mqd_manager *mm, void *mqd,<o:p></o:p></pre>
<pre>@@ -607,6 +607,24 @@ static int destroy_hiq_mqd_v9_4_3(struct mqd_manager *mm, void *mqd,<o:p></o:p></pre>
<pre> return err;<o:p></o:p></pre>
<pre> }<o:p></o:p></pre>
<pre> <o:p></o:p></pre>
<pre>+static bool check_preemption_failed_v9_4_3(struct mqd_manager *mm, void *mqd)<o:p></o:p></pre>
<pre>+{<o:p></o:p></pre>
<pre>+ uint64_t hiq_mqd_size = kfd_hiq_mqd_stride(mm->dev);<o:p></o:p></pre>
<pre>+ uint32_t xcc_mask = mm->dev->xcc_mask;<o:p></o:p></pre>
<pre>+ int inst = 0, xcc_id;<o:p></o:p></pre>
<pre>+ struct v9_mqd *m;<o:p></o:p></pre>
<pre>+ bool ret = false;<o:p></o:p></pre>
<pre>+<o:p></o:p></pre>
<pre>+ for_each_inst(xcc_id, xcc_mask) {<o:p></o:p></pre>
<pre>+ m = get_mqd(mqd + hiq_mqd_size * inst);<o:p></o:p></pre>
<pre>+ ret |= kfd_check_hiq_mqd_doorbell_id(mm->dev,<o:p></o:p></pre>
<pre>+ m->queue_doorbell_id0, inst);<o:p></o:p></pre>
<pre>+ ++inst;<o:p></o:p></pre>
<pre>+ }<o:p></o:p></pre>
<pre>+<o:p></o:p></pre>
<pre>+ return ret;<o:p></o:p></pre>
<pre>+}<o:p></o:p></pre>
<pre>+<o:p></o:p></pre>
<pre> static void get_xcc_mqd(struct kfd_mem_obj *mqd_mem_obj,<o:p></o:p></pre>
<pre> struct kfd_mem_obj *xcc_mqd_mem_obj,<o:p></o:p></pre>
<pre> uint64_t offset)<o:p></o:p></pre>
<pre>@@ -881,15 +899,16 @@ struct mqd_manager *mqd_manager_init_v9(enum KFD_MQD_TYPE type,<o:p></o:p></pre>
<pre> #if defined(CONFIG_DEBUG_FS)<o:p></o:p></pre>
<pre> mqd->debugfs_show_mqd = debugfs_show_mqd;<o:p></o:p></pre>
<pre> #endif<o:p></o:p></pre>
<pre>- mqd->check_preemption_failed = check_preemption_failed;<o:p></o:p></pre>
<pre> if (KFD_GC_VERSION(dev) == IP_VERSION(9, 4, 3)) {<o:p></o:p></pre>
<pre> mqd->init_mqd = init_mqd_hiq_v9_4_3;<o:p></o:p></pre>
<pre> mqd->load_mqd = hiq_load_mqd_kiq_v9_4_3;<o:p></o:p></pre>
<pre> mqd->destroy_mqd = destroy_hiq_mqd_v9_4_3;<o:p></o:p></pre>
<pre>+ mqd->check_preemption_failed = check_preemption_failed_v9_4_3;<o:p></o:p></pre>
<pre> } else {<o:p></o:p></pre>
<pre> mqd->init_mqd = init_mqd_hiq;<o:p></o:p></pre>
<pre> mqd->load_mqd = kfd_hiq_load_mqd_kiq;<o:p></o:p></pre>
<pre> mqd->destroy_mqd = destroy_hiq_mqd;<o:p></o:p></pre>
<pre>+ mqd->check_preemption_failed = check_preemption_failed;<o:p></o:p></pre>
<pre> }<o:p></o:p></pre>
<pre> break;<o:p></o:p></pre>
<pre> case KFD_MQD_TYPE_DIQ:<o:p></o:p></pre>
<pre>diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_vi.c b/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_vi.c<o:p></o:p></pre>
<pre>index dbc868e0363f..c1fafc502515 100644<o:p></o:p></pre>
<pre>--- a/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_vi.c<o:p></o:p></pre>
<pre>+++ b/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_vi.c<o:p></o:p></pre>
<pre>@@ -237,11 +237,11 @@ static void __update_mqd(struct mqd_manager *mm, void *mqd,<o:p></o:p></pre>
<pre> q->is_active = QUEUE_IS_ACTIVE(*q);<o:p></o:p></pre>
<pre> }<o:p></o:p></pre>
<pre> <o:p></o:p></pre>
<pre>-static uint32_t check_preemption_failed(void *mqd)<o:p></o:p></pre>
<pre>+static bool check_preemption_failed(struct mqd_manager *mm, void *mqd)<o:p></o:p></pre>
<pre> {<o:p></o:p></pre>
<pre> struct vi_mqd *m = (struct vi_mqd *)mqd;<o:p></o:p></pre>
<pre> <o:p></o:p></pre>
<pre>- return m->queue_doorbell_id0;<o:p></o:p></pre>
<pre>+ return kfd_check_hiq_mqd_doorbell_id(mm->dev, m->queue_doorbell_id0, 0);<o:p></o:p></pre>
<pre> }<o:p></o:p></pre>
<pre> <o:p></o:p></pre>
<pre> static void update_mqd(struct mqd_manager *mm, void *mqd,<o:p></o:p></pre>
</blockquote>
</div>
</div>
</div>
</body>
</html>