From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: stable@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
patches@lists.linux.dev,
John Harrison <John.C.Harrison@Intel.com>,
Julia Filipchuk <julia.filipchuk@intel.com>,
Sasha Levin <sashal@kernel.org>
Subject: [PATCH 6.12 159/232] drm/xe/guc: Dead CT helper
Date: Tue, 8 Jul 2025 18:22:35 +0200 [thread overview]
Message-ID: <20250708162245.598398569@linuxfoundation.org> (raw)
In-Reply-To: <20250708162241.426806072@linuxfoundation.org>
6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: John Harrison <John.C.Harrison@Intel.com>
[ Upstream commit d2c5a5a926f43b2e42c5c955f917bad8ad6dd68c ]
Add a worker function helper for asynchronously dumping state when an
internal/fatal error is detected in CT processing. Being asynchronous
is required to avoid deadlocks and scheduling-while-atomic or
process-stalled-for-too-long issues. Also check for a bunch more error
conditions and improve the handling of some existing checks.
v2: Use compile time CONFIG check for new (but not directly CT_DEAD
related) checks and use unsigned int for a bitmask, rename
CT_DEAD_RESET to CT_DEAD_REARM and add some explaining comments,
rename 'hxg' macro parameter to 'ctb' - review feedback from Michal W.
Drop CT_DEAD_ALIVE as no need for a bitfield define to just set the
entire mask to zero.
v3: Fix kerneldoc
v4: Nullify some floating pointers after free.
v5: Add section headings and device info to make the state dump look
more like a devcoredump to allow parsing by the same tools (eventual
aim is to just call the devcoredump code itself, but that currently
requires an xe_sched_job, which is not available in the CT code).
v6: Fix potential for leaking snapshots with concurrent error
conditions (review feedback from Julia F).
v7: Don't complain about unexpected G2H messages yet because there is
a known issue causing them. Fix bit shift bug with v6 change. Add GT
id to fake coredump headers and use puts instead of printf.
v8: Disable the head mis-match check in g2h_read because it is failing
on various discrete platforms due to unknown reasons.
Signed-off-by: John Harrison <John.C.Harrison@Intel.com>
Reviewed-by: Julia Filipchuk <julia.filipchuk@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20241003004611.2323493-9-John.C.Harrison@Intel.com
Stable-dep-of: ad40098da5c3 ("drm/xe/guc: Explicitly exit CT safe mode on unwind")
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
.../drm/xe/abi/guc_communication_ctb_abi.h | 1 +
drivers/gpu/drm/xe/xe_guc.c | 2 +-
drivers/gpu/drm/xe/xe_guc_ct.c | 336 ++++++++++++++++--
drivers/gpu/drm/xe/xe_guc_ct.h | 2 +-
drivers/gpu/drm/xe/xe_guc_ct_types.h | 23 ++
5 files changed, 335 insertions(+), 29 deletions(-)
diff --git a/drivers/gpu/drm/xe/abi/guc_communication_ctb_abi.h b/drivers/gpu/drm/xe/abi/guc_communication_ctb_abi.h
index 8f86a16dc5777..f58198cf2cf63 100644
--- a/drivers/gpu/drm/xe/abi/guc_communication_ctb_abi.h
+++ b/drivers/gpu/drm/xe/abi/guc_communication_ctb_abi.h
@@ -52,6 +52,7 @@ struct guc_ct_buffer_desc {
#define GUC_CTB_STATUS_OVERFLOW (1 << 0)
#define GUC_CTB_STATUS_UNDERFLOW (1 << 1)
#define GUC_CTB_STATUS_MISMATCH (1 << 2)
+#define GUC_CTB_STATUS_DISABLED (1 << 3)
u32 reserved[13];
} __packed;
static_assert(sizeof(struct guc_ct_buffer_desc) == 64);
diff --git a/drivers/gpu/drm/xe/xe_guc.c b/drivers/gpu/drm/xe/xe_guc.c
index c67d4807f37df..96373cdb366be 100644
--- a/drivers/gpu/drm/xe/xe_guc.c
+++ b/drivers/gpu/drm/xe/xe_guc.c
@@ -1175,7 +1175,7 @@ void xe_guc_print_info(struct xe_guc *guc, struct drm_printer *p)
xe_force_wake_put(gt_to_fw(gt), XE_FW_GT);
- xe_guc_ct_print(&guc->ct, p, false);
+ xe_guc_ct_print(&guc->ct, p);
xe_guc_submit_print(guc, p);
}
diff --git a/drivers/gpu/drm/xe/xe_guc_ct.c b/drivers/gpu/drm/xe/xe_guc_ct.c
index 483c2b521a2d1..32d55be93ef30 100644
--- a/drivers/gpu/drm/xe/xe_guc_ct.c
+++ b/drivers/gpu/drm/xe/xe_guc_ct.c
@@ -25,12 +25,48 @@
#include "xe_gt_sriov_pf_monitor.h"
#include "xe_gt_tlb_invalidation.h"
#include "xe_guc.h"
+#include "xe_guc_log.h"
#include "xe_guc_relay.h"
#include "xe_guc_submit.h"
#include "xe_map.h"
#include "xe_pm.h"
#include "xe_trace_guc.h"
+#if IS_ENABLED(CONFIG_DRM_XE_DEBUG)
+enum {
+ /* Internal states, not error conditions */
+ CT_DEAD_STATE_REARM, /* 0x0001 */
+ CT_DEAD_STATE_CAPTURE, /* 0x0002 */
+
+ /* Error conditions */
+ CT_DEAD_SETUP, /* 0x0004 */
+ CT_DEAD_H2G_WRITE, /* 0x0008 */
+ CT_DEAD_H2G_HAS_ROOM, /* 0x0010 */
+ CT_DEAD_G2H_READ, /* 0x0020 */
+ CT_DEAD_G2H_RECV, /* 0x0040 */
+ CT_DEAD_G2H_RELEASE, /* 0x0080 */
+ CT_DEAD_DEADLOCK, /* 0x0100 */
+ CT_DEAD_PROCESS_FAILED, /* 0x0200 */
+ CT_DEAD_FAST_G2H, /* 0x0400 */
+ CT_DEAD_PARSE_G2H_RESPONSE, /* 0x0800 */
+ CT_DEAD_PARSE_G2H_UNKNOWN, /* 0x1000 */
+ CT_DEAD_PARSE_G2H_ORIGIN, /* 0x2000 */
+ CT_DEAD_PARSE_G2H_TYPE, /* 0x4000 */
+};
+
+static void ct_dead_worker_func(struct work_struct *w);
+static void ct_dead_capture(struct xe_guc_ct *ct, struct guc_ctb *ctb, u32 reason_code);
+
+#define CT_DEAD(ct, ctb, reason_code) ct_dead_capture((ct), (ctb), CT_DEAD_##reason_code)
+#else
+#define CT_DEAD(ct, ctb, reason) \
+ do { \
+ struct guc_ctb *_ctb = (ctb); \
+ if (_ctb) \
+ _ctb->info.broken = true; \
+ } while (0)
+#endif
+
/* Used when a CT send wants to block and / or receive data */
struct g2h_fence {
u32 *response_buffer;
@@ -183,6 +219,10 @@ int xe_guc_ct_init(struct xe_guc_ct *ct)
xa_init(&ct->fence_lookup);
INIT_WORK(&ct->g2h_worker, g2h_worker_func);
INIT_DELAYED_WORK(&ct->safe_mode_worker, safe_mode_worker_func);
+#if IS_ENABLED(CONFIG_DRM_XE_DEBUG)
+ spin_lock_init(&ct->dead.lock);
+ INIT_WORK(&ct->dead.worker, ct_dead_worker_func);
+#endif
init_waitqueue_head(&ct->wq);
init_waitqueue_head(&ct->g2h_fence_wq);
@@ -419,10 +459,22 @@ int xe_guc_ct_enable(struct xe_guc_ct *ct)
if (ct_needs_safe_mode(ct))
ct_enter_safe_mode(ct);
+#if IS_ENABLED(CONFIG_DRM_XE_DEBUG)
+ /*
+ * The CT has now been reset so the dumper can be re-armed
+ * after any existing dead state has been dumped.
+ */
+ spin_lock_irq(&ct->dead.lock);
+ if (ct->dead.reason)
+ ct->dead.reason |= (1 << CT_DEAD_STATE_REARM);
+ spin_unlock_irq(&ct->dead.lock);
+#endif
+
return 0;
err_out:
xe_gt_err(gt, "Failed to enable GuC CT (%pe)\n", ERR_PTR(err));
+ CT_DEAD(ct, NULL, SETUP);
return err;
}
@@ -469,6 +521,19 @@ static bool h2g_has_room(struct xe_guc_ct *ct, u32 cmd_len)
if (cmd_len > h2g->info.space) {
h2g->info.head = desc_read(ct_to_xe(ct), h2g, head);
+
+ if (h2g->info.head > h2g->info.size) {
+ struct xe_device *xe = ct_to_xe(ct);
+ u32 desc_status = desc_read(xe, h2g, status);
+
+ desc_write(xe, h2g, status, desc_status | GUC_CTB_STATUS_OVERFLOW);
+
+ xe_gt_err(ct_to_gt(ct), "CT: invalid head offset %u >= %u)\n",
+ h2g->info.head, h2g->info.size);
+ CT_DEAD(ct, h2g, H2G_HAS_ROOM);
+ return false;
+ }
+
h2g->info.space = CIRC_SPACE(h2g->info.tail, h2g->info.head,
h2g->info.size) -
h2g->info.resv_space;
@@ -524,10 +589,24 @@ static void __g2h_reserve_space(struct xe_guc_ct *ct, u32 g2h_len, u32 num_g2h)
static void __g2h_release_space(struct xe_guc_ct *ct, u32 g2h_len)
{
+ bool bad = false;
+
lockdep_assert_held(&ct->fast_lock);
- xe_gt_assert(ct_to_gt(ct), ct->ctbs.g2h.info.space + g2h_len <=
- ct->ctbs.g2h.info.size - ct->ctbs.g2h.info.resv_space);
- xe_gt_assert(ct_to_gt(ct), ct->g2h_outstanding);
+
+ bad = ct->ctbs.g2h.info.space + g2h_len >
+ ct->ctbs.g2h.info.size - ct->ctbs.g2h.info.resv_space;
+ bad |= !ct->g2h_outstanding;
+
+ if (bad) {
+ xe_gt_err(ct_to_gt(ct), "Invalid G2H release: %d + %d vs %d - %d -> %d vs %d, outstanding = %d!\n",
+ ct->ctbs.g2h.info.space, g2h_len,
+ ct->ctbs.g2h.info.size, ct->ctbs.g2h.info.resv_space,
+ ct->ctbs.g2h.info.space + g2h_len,
+ ct->ctbs.g2h.info.size - ct->ctbs.g2h.info.resv_space,
+ ct->g2h_outstanding);
+ CT_DEAD(ct, &ct->ctbs.g2h, G2H_RELEASE);
+ return;
+ }
ct->ctbs.g2h.info.space += g2h_len;
if (!--ct->g2h_outstanding)
@@ -554,12 +633,43 @@ static int h2g_write(struct xe_guc_ct *ct, const u32 *action, u32 len,
u32 full_len;
struct iosys_map map = IOSYS_MAP_INIT_OFFSET(&h2g->cmds,
tail * sizeof(u32));
+ u32 desc_status;
full_len = len + GUC_CTB_HDR_LEN;
lockdep_assert_held(&ct->lock);
xe_gt_assert(gt, full_len <= GUC_CTB_MSG_MAX_LEN);
- xe_gt_assert(gt, tail <= h2g->info.size);
+
+ desc_status = desc_read(xe, h2g, status);
+ if (desc_status) {
+ xe_gt_err(gt, "CT write: non-zero status: %u\n", desc_status);
+ goto corrupted;
+ }
+
+ if (IS_ENABLED(CONFIG_DRM_XE_DEBUG)) {
+ u32 desc_tail = desc_read(xe, h2g, tail);
+ u32 desc_head = desc_read(xe, h2g, head);
+
+ if (tail != desc_tail) {
+ desc_write(xe, h2g, status, desc_status | GUC_CTB_STATUS_MISMATCH);
+ xe_gt_err(gt, "CT write: tail was modified %u != %u\n", desc_tail, tail);
+ goto corrupted;
+ }
+
+ if (tail > h2g->info.size) {
+ desc_write(xe, h2g, status, desc_status | GUC_CTB_STATUS_OVERFLOW);
+ xe_gt_err(gt, "CT write: tail out of range: %u vs %u\n",
+ tail, h2g->info.size);
+ goto corrupted;
+ }
+
+ if (desc_head >= h2g->info.size) {
+ desc_write(xe, h2g, status, desc_status | GUC_CTB_STATUS_OVERFLOW);
+ xe_gt_err(gt, "CT write: invalid head offset %u >= %u)\n",
+ desc_head, h2g->info.size);
+ goto corrupted;
+ }
+ }
/* Command will wrap, zero fill (NOPs), return and check credits again */
if (tail + full_len > h2g->info.size) {
@@ -612,6 +722,10 @@ static int h2g_write(struct xe_guc_ct *ct, const u32 *action, u32 len,
desc_read(xe, h2g, head), h2g->info.tail);
return 0;
+
+corrupted:
+ CT_DEAD(ct, &ct->ctbs.h2g, H2G_WRITE);
+ return -EPIPE;
}
/*
@@ -719,7 +833,6 @@ static int guc_ct_send_locked(struct xe_guc_ct *ct, const u32 *action, u32 len,
{
struct xe_device *xe = ct_to_xe(ct);
struct xe_gt *gt = ct_to_gt(ct);
- struct drm_printer p = xe_gt_info_printer(gt);
unsigned int sleep_period_ms = 1;
int ret;
@@ -772,8 +885,13 @@ static int guc_ct_send_locked(struct xe_guc_ct *ct, const u32 *action, u32 len,
goto broken;
#undef g2h_avail
- if (dequeue_one_g2h(ct) < 0)
+ ret = dequeue_one_g2h(ct);
+ if (ret < 0) {
+ if (ret != -ECANCELED)
+ xe_gt_err(ct_to_gt(ct), "CTB receive failed (%pe)",
+ ERR_PTR(ret));
goto broken;
+ }
goto try_again;
}
@@ -782,8 +900,7 @@ static int guc_ct_send_locked(struct xe_guc_ct *ct, const u32 *action, u32 len,
broken:
xe_gt_err(gt, "No forward process on H2G, reset required\n");
- xe_guc_ct_print(ct, &p, true);
- ct->ctbs.h2g.info.broken = true;
+ CT_DEAD(ct, &ct->ctbs.h2g, DEADLOCK);
return -EDEADLK;
}
@@ -1049,6 +1166,7 @@ static int parse_g2h_response(struct xe_guc_ct *ct, u32 *msg, u32 len)
else
xe_gt_err(gt, "unexpected response %u for FAST_REQ H2G fence 0x%x!\n",
type, fence);
+ CT_DEAD(ct, NULL, PARSE_G2H_RESPONSE);
return -EPROTO;
}
@@ -1056,6 +1174,7 @@ static int parse_g2h_response(struct xe_guc_ct *ct, u32 *msg, u32 len)
g2h_fence = xa_erase(&ct->fence_lookup, fence);
if (unlikely(!g2h_fence)) {
/* Don't tear down channel, as send could've timed out */
+ /* CT_DEAD(ct, NULL, PARSE_G2H_UNKNOWN); */
xe_gt_warn(gt, "G2H fence (%u) not found!\n", fence);
g2h_release_space(ct, GUC_CTB_HXG_MSG_MAX_LEN);
return 0;
@@ -1100,7 +1219,7 @@ static int parse_g2h_msg(struct xe_guc_ct *ct, u32 *msg, u32 len)
if (unlikely(origin != GUC_HXG_ORIGIN_GUC)) {
xe_gt_err(gt, "G2H channel broken on read, origin=%u, reset required\n",
origin);
- ct->ctbs.g2h.info.broken = true;
+ CT_DEAD(ct, &ct->ctbs.g2h, PARSE_G2H_ORIGIN);
return -EPROTO;
}
@@ -1118,7 +1237,7 @@ static int parse_g2h_msg(struct xe_guc_ct *ct, u32 *msg, u32 len)
default:
xe_gt_err(gt, "G2H channel broken on read, type=%u, reset required\n",
type);
- ct->ctbs.g2h.info.broken = true;
+ CT_DEAD(ct, &ct->ctbs.g2h, PARSE_G2H_TYPE);
ret = -EOPNOTSUPP;
}
@@ -1195,9 +1314,11 @@ static int process_g2h_msg(struct xe_guc_ct *ct, u32 *msg, u32 len)
xe_gt_err(gt, "unexpected G2H action 0x%04x\n", action);
}
- if (ret)
+ if (ret) {
xe_gt_err(gt, "G2H action 0x%04x failed (%pe)\n",
action, ERR_PTR(ret));
+ CT_DEAD(ct, NULL, PROCESS_FAILED);
+ }
return 0;
}
@@ -1207,7 +1328,7 @@ static int g2h_read(struct xe_guc_ct *ct, u32 *msg, bool fast_path)
struct xe_device *xe = ct_to_xe(ct);
struct xe_gt *gt = ct_to_gt(ct);
struct guc_ctb *g2h = &ct->ctbs.g2h;
- u32 tail, head, len;
+ u32 tail, head, len, desc_status;
s32 avail;
u32 action;
u32 *hxg;
@@ -1226,6 +1347,63 @@ static int g2h_read(struct xe_guc_ct *ct, u32 *msg, bool fast_path)
xe_gt_assert(gt, xe_guc_ct_enabled(ct));
+ desc_status = desc_read(xe, g2h, status);
+ if (desc_status) {
+ if (desc_status & GUC_CTB_STATUS_DISABLED) {
+ /*
+ * Potentially valid if a CLIENT_RESET request resulted in
+ * contexts/engines being reset. But should never happen as
+ * no contexts should be active when CLIENT_RESET is sent.
+ */
+ xe_gt_err(gt, "CT read: unexpected G2H after GuC has stopped!\n");
+ desc_status &= ~GUC_CTB_STATUS_DISABLED;
+ }
+
+ if (desc_status) {
+ xe_gt_err(gt, "CT read: non-zero status: %u\n", desc_status);
+ goto corrupted;
+ }
+ }
+
+ if (IS_ENABLED(CONFIG_DRM_XE_DEBUG)) {
+ u32 desc_tail = desc_read(xe, g2h, tail);
+ /*
+ u32 desc_head = desc_read(xe, g2h, head);
+
+ * info.head and desc_head are updated back-to-back at the end of
+ * this function and nowhere else. Hence, they cannot be different
+ * unless two g2h_read calls are running concurrently. Which is not
+ * possible because it is guarded by ct->fast_lock. And yet, some
+ * discrete platforms are reguarly hitting this error :(.
+ *
+ * desc_head rolling backwards shouldn't cause any noticeable
+ * problems - just a delay in GuC being allowed to proceed past that
+ * point in the queue. So for now, just disable the error until it
+ * can be root caused.
+ *
+ if (g2h->info.head != desc_head) {
+ desc_write(xe, g2h, status, desc_status | GUC_CTB_STATUS_MISMATCH);
+ xe_gt_err(gt, "CT read: head was modified %u != %u\n",
+ desc_head, g2h->info.head);
+ goto corrupted;
+ }
+ */
+
+ if (g2h->info.head > g2h->info.size) {
+ desc_write(xe, g2h, status, desc_status | GUC_CTB_STATUS_OVERFLOW);
+ xe_gt_err(gt, "CT read: head out of range: %u vs %u\n",
+ g2h->info.head, g2h->info.size);
+ goto corrupted;
+ }
+
+ if (desc_tail >= g2h->info.size) {
+ desc_write(xe, g2h, status, desc_status | GUC_CTB_STATUS_OVERFLOW);
+ xe_gt_err(gt, "CT read: invalid tail offset %u >= %u)\n",
+ desc_tail, g2h->info.size);
+ goto corrupted;
+ }
+ }
+
/* Calculate DW available to read */
tail = desc_read(xe, g2h, tail);
avail = tail - g2h->info.head;
@@ -1242,9 +1420,7 @@ static int g2h_read(struct xe_guc_ct *ct, u32 *msg, bool fast_path)
if (len > avail) {
xe_gt_err(gt, "G2H channel broken on read, avail=%d, len=%d, reset required\n",
avail, len);
- g2h->info.broken = true;
-
- return -EPROTO;
+ goto corrupted;
}
head = (g2h->info.head + 1) % g2h->info.size;
@@ -1290,6 +1466,10 @@ static int g2h_read(struct xe_guc_ct *ct, u32 *msg, bool fast_path)
action, len, g2h->info.head, tail);
return len;
+
+corrupted:
+ CT_DEAD(ct, &ct->ctbs.g2h, G2H_READ);
+ return -EPROTO;
}
static void g2h_fast_path(struct xe_guc_ct *ct, u32 *msg, u32 len)
@@ -1316,9 +1496,11 @@ static void g2h_fast_path(struct xe_guc_ct *ct, u32 *msg, u32 len)
xe_gt_warn(gt, "NOT_POSSIBLE");
}
- if (ret)
+ if (ret) {
xe_gt_err(gt, "G2H action 0x%04x failed (%pe)\n",
action, ERR_PTR(ret));
+ CT_DEAD(ct, NULL, FAST_G2H);
+ }
}
/**
@@ -1378,7 +1560,6 @@ static int dequeue_one_g2h(struct xe_guc_ct *ct)
static void receive_g2h(struct xe_guc_ct *ct)
{
- struct xe_gt *gt = ct_to_gt(ct);
bool ongoing;
int ret;
@@ -1415,9 +1596,8 @@ static void receive_g2h(struct xe_guc_ct *ct)
mutex_unlock(&ct->lock);
if (unlikely(ret == -EPROTO || ret == -EOPNOTSUPP)) {
- struct drm_printer p = xe_gt_info_printer(gt);
-
- xe_guc_ct_print(ct, &p, false);
+ xe_gt_err(ct_to_gt(ct), "CT dequeue failed: %d", ret);
+ CT_DEAD(ct, NULL, G2H_RECV);
kick_reset(ct);
}
} while (ret == 1);
@@ -1445,9 +1625,8 @@ static void guc_ctb_snapshot_capture(struct xe_device *xe, struct guc_ctb *ctb,
snapshot->cmds = kmalloc_array(ctb->info.size, sizeof(u32),
atomic ? GFP_ATOMIC : GFP_KERNEL);
-
if (!snapshot->cmds) {
- drm_err(&xe->drm, "Skipping CTB commands snapshot. Only CTB info will be available.\n");
+ drm_err(&xe->drm, "Skipping CTB commands snapshot. Only CT info will be available.\n");
return;
}
@@ -1528,7 +1707,7 @@ struct xe_guc_ct_snapshot *xe_guc_ct_snapshot_capture(struct xe_guc_ct *ct,
atomic ? GFP_ATOMIC : GFP_KERNEL);
if (!snapshot) {
- drm_err(&xe->drm, "Skipping CTB snapshot entirely.\n");
+ xe_gt_err(ct_to_gt(ct), "Skipping CTB snapshot entirely.\n");
return NULL;
}
@@ -1592,16 +1771,119 @@ void xe_guc_ct_snapshot_free(struct xe_guc_ct_snapshot *snapshot)
* xe_guc_ct_print - GuC CT Print.
* @ct: GuC CT.
* @p: drm_printer where it will be printed out.
- * @atomic: Boolean to indicate if this is called from atomic context like
- * reset or CTB handler or from some regular path like debugfs.
*
* This function quickly capture a snapshot and immediately print it out.
*/
-void xe_guc_ct_print(struct xe_guc_ct *ct, struct drm_printer *p, bool atomic)
+void xe_guc_ct_print(struct xe_guc_ct *ct, struct drm_printer *p)
{
struct xe_guc_ct_snapshot *snapshot;
- snapshot = xe_guc_ct_snapshot_capture(ct, atomic);
+ snapshot = xe_guc_ct_snapshot_capture(ct, false);
xe_guc_ct_snapshot_print(snapshot, p);
xe_guc_ct_snapshot_free(snapshot);
}
+
+#if IS_ENABLED(CONFIG_DRM_XE_DEBUG)
+static void ct_dead_capture(struct xe_guc_ct *ct, struct guc_ctb *ctb, u32 reason_code)
+{
+ struct xe_guc_log_snapshot *snapshot_log;
+ struct xe_guc_ct_snapshot *snapshot_ct;
+ struct xe_guc *guc = ct_to_guc(ct);
+ unsigned long flags;
+ bool have_capture;
+
+ if (ctb)
+ ctb->info.broken = true;
+
+ /* Ignore further errors after the first dump until a reset */
+ if (ct->dead.reported)
+ return;
+
+ spin_lock_irqsave(&ct->dead.lock, flags);
+
+ /* And only capture one dump at a time */
+ have_capture = ct->dead.reason & (1 << CT_DEAD_STATE_CAPTURE);
+ ct->dead.reason |= (1 << reason_code) |
+ (1 << CT_DEAD_STATE_CAPTURE);
+
+ spin_unlock_irqrestore(&ct->dead.lock, flags);
+
+ if (have_capture)
+ return;
+
+ snapshot_log = xe_guc_log_snapshot_capture(&guc->log, true);
+ snapshot_ct = xe_guc_ct_snapshot_capture((ct), true);
+
+ spin_lock_irqsave(&ct->dead.lock, flags);
+
+ if (ct->dead.snapshot_log || ct->dead.snapshot_ct) {
+ xe_gt_err(ct_to_gt(ct), "Got unexpected dead CT capture!\n");
+ xe_guc_log_snapshot_free(snapshot_log);
+ xe_guc_ct_snapshot_free(snapshot_ct);
+ } else {
+ ct->dead.snapshot_log = snapshot_log;
+ ct->dead.snapshot_ct = snapshot_ct;
+ }
+
+ spin_unlock_irqrestore(&ct->dead.lock, flags);
+
+ queue_work(system_unbound_wq, &(ct)->dead.worker);
+}
+
+static void ct_dead_print(struct xe_dead_ct *dead)
+{
+ struct xe_guc_ct *ct = container_of(dead, struct xe_guc_ct, dead);
+ struct xe_device *xe = ct_to_xe(ct);
+ struct xe_gt *gt = ct_to_gt(ct);
+ static int g_count;
+ struct drm_printer ip = xe_gt_info_printer(gt);
+ struct drm_printer lp = drm_line_printer(&ip, "Capture", ++g_count);
+
+ if (!dead->reason) {
+ xe_gt_err(gt, "CTB is dead for no reason!?\n");
+ return;
+ }
+
+ drm_printf(&lp, "CTB is dead - reason=0x%X\n", dead->reason);
+
+ /* Can't generate a genuine core dump at this point, so just do the good bits */
+ drm_puts(&lp, "**** Xe Device Coredump ****\n");
+ xe_device_snapshot_print(xe, &lp);
+
+ drm_printf(&lp, "**** GT #%d ****\n", gt->info.id);
+ drm_printf(&lp, "\tTile: %d\n", gt->tile->id);
+
+ drm_puts(&lp, "**** GuC Log ****\n");
+ xe_guc_log_snapshot_print(dead->snapshot_log, &lp);
+
+ drm_puts(&lp, "**** GuC CT ****\n");
+ xe_guc_ct_snapshot_print(dead->snapshot_ct, &lp);
+
+ drm_puts(&lp, "Done.\n");
+}
+
+static void ct_dead_worker_func(struct work_struct *w)
+{
+ struct xe_guc_ct *ct = container_of(w, struct xe_guc_ct, dead.worker);
+
+ if (!ct->dead.reported) {
+ ct->dead.reported = true;
+ ct_dead_print(&ct->dead);
+ }
+
+ spin_lock_irq(&ct->dead.lock);
+
+ xe_guc_log_snapshot_free(ct->dead.snapshot_log);
+ ct->dead.snapshot_log = NULL;
+ xe_guc_ct_snapshot_free(ct->dead.snapshot_ct);
+ ct->dead.snapshot_ct = NULL;
+
+ if (ct->dead.reason & (1 << CT_DEAD_STATE_REARM)) {
+ /* A reset has occurred so re-arm the error reporting */
+ ct->dead.reason = 0;
+ ct->dead.reported = false;
+ }
+
+ spin_unlock_irq(&ct->dead.lock);
+}
+#endif
diff --git a/drivers/gpu/drm/xe/xe_guc_ct.h b/drivers/gpu/drm/xe/xe_guc_ct.h
index 13e316668e901..c7ac9407b861e 100644
--- a/drivers/gpu/drm/xe/xe_guc_ct.h
+++ b/drivers/gpu/drm/xe/xe_guc_ct.h
@@ -21,7 +21,7 @@ xe_guc_ct_snapshot_capture(struct xe_guc_ct *ct, bool atomic);
void xe_guc_ct_snapshot_print(struct xe_guc_ct_snapshot *snapshot,
struct drm_printer *p);
void xe_guc_ct_snapshot_free(struct xe_guc_ct_snapshot *snapshot);
-void xe_guc_ct_print(struct xe_guc_ct *ct, struct drm_printer *p, bool atomic);
+void xe_guc_ct_print(struct xe_guc_ct *ct, struct drm_printer *p);
static inline bool xe_guc_ct_initialized(struct xe_guc_ct *ct)
{
diff --git a/drivers/gpu/drm/xe/xe_guc_ct_types.h b/drivers/gpu/drm/xe/xe_guc_ct_types.h
index 761cb90312984..85e127ec91d7a 100644
--- a/drivers/gpu/drm/xe/xe_guc_ct_types.h
+++ b/drivers/gpu/drm/xe/xe_guc_ct_types.h
@@ -86,6 +86,24 @@ enum xe_guc_ct_state {
XE_GUC_CT_STATE_ENABLED,
};
+#if IS_ENABLED(CONFIG_DRM_XE_DEBUG)
+/** struct xe_dead_ct - Information for debugging a dead CT */
+struct xe_dead_ct {
+ /** @lock: protects memory allocation/free operations, and @reason updates */
+ spinlock_t lock;
+ /** @reason: bit mask of CT_DEAD_* reason codes */
+ unsigned int reason;
+ /** @reported: for preventing multiple dumps per error sequence */
+ bool reported;
+ /** @worker: worker thread to get out of interrupt context before dumping */
+ struct work_struct worker;
+ /** snapshot_ct: copy of CT state and CTB content at point of error */
+ struct xe_guc_ct_snapshot *snapshot_ct;
+ /** snapshot_log: copy of GuC log at point of error */
+ struct xe_guc_log_snapshot *snapshot_log;
+};
+#endif
+
/**
* struct xe_guc_ct - GuC command transport (CT) layer
*
@@ -128,6 +146,11 @@ struct xe_guc_ct {
u32 msg[GUC_CTB_MSG_MAX_LEN];
/** @fast_msg: Message buffer */
u32 fast_msg[GUC_CTB_MSG_MAX_LEN];
+
+#if IS_ENABLED(CONFIG_DRM_XE_DEBUG)
+ /** @dead: information for debugging dead CTs */
+ struct xe_dead_ct dead;
+#endif
};
#endif
--
2.39.5
next prev parent reply other threads:[~2025-07-08 16:43 UTC|newest]
Thread overview: 243+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-07-08 16:19 [PATCH 6.12 000/232] 6.12.37-rc1 review Greg Kroah-Hartman
2025-07-08 16:19 ` [PATCH 6.12 001/232] rtc: pcf2127: add missing semicolon after statement Greg Kroah-Hartman
2025-07-08 16:19 ` [PATCH 6.12 002/232] rtc: pcf2127: fix SPI command byte for PCF2131 Greg Kroah-Hartman
2025-07-08 16:19 ` [PATCH 6.12 003/232] rtc: cmos: use spin_lock_irqsave in cmos_interrupt Greg Kroah-Hartman
2025-07-08 16:20 ` [PATCH 6.12 004/232] virtio-net: xsk: rx: fix the frames length check Greg Kroah-Hartman
2025-07-08 16:20 ` [PATCH 6.12 005/232] virtio-net: ensure the received length does not exceed allocated size Greg Kroah-Hartman
2025-07-08 16:20 ` [PATCH 6.12 006/232] s390/pci: Fix stale function handles in error handling Greg Kroah-Hartman
2025-07-08 16:20 ` [PATCH 6.12 007/232] s390/pci: Do not try re-enabling load/store if device is disabled Greg Kroah-Hartman
2025-07-08 16:20 ` [PATCH 6.12 008/232] net: txgbe: request MISC IRQ in ndo_open Greg Kroah-Hartman
2025-07-08 16:20 ` [PATCH 6.12 009/232] vsock/vmci: Clear the vmci transport packet properly when initializing it Greg Kroah-Hartman
2025-07-08 16:20 ` [PATCH 6.12 010/232] net: libwx: fix the incorrect display of the queue number Greg Kroah-Hartman
2025-07-08 16:20 ` [PATCH 6.12 011/232] mmc: sdhci: Add a helper function for dump register in dynamic debug mode Greg Kroah-Hartman
2025-07-08 16:20 ` [PATCH 6.12 012/232] Revert "mmc: sdhci: Disable SD card clock before changing parameters" Greg Kroah-Hartman
2025-07-08 16:20 ` [PATCH 6.12 013/232] mmc: core: sd: Apply BROKEN_SD_DISCARD quirk earlier Greg Kroah-Hartman
2025-07-08 16:20 ` [PATCH 6.12 014/232] Bluetooth: HCI: Set extended advertising data synchronously Greg Kroah-Hartman
2025-07-08 16:20 ` [PATCH 6.12 015/232] Bluetooth: hci_sync: revert some mesh modifications Greg Kroah-Hartman
2025-07-08 16:20 ` [PATCH 6.12 016/232] Bluetooth: MGMT: set_mesh: update LE scan interval and window Greg Kroah-Hartman
2025-07-08 16:20 ` [PATCH 6.12 017/232] Bluetooth: MGMT: mesh_send: check instances prior disabling advertising Greg Kroah-Hartman
2025-07-08 16:20 ` [PATCH 6.12 018/232] iommufd/selftest: Fix iommufd_dirty_tracking with large hugepage sizes Greg Kroah-Hartman
2025-07-08 16:20 ` [PATCH 6.12 019/232] regulator: gpio: Fix the out-of-bounds access to drvdata::gpiods Greg Kroah-Hartman
2025-07-08 16:20 ` [PATCH 6.12 020/232] Input: cs40l50-vibra - fix potential NULL dereference in cs40l50_upload_owt() Greg Kroah-Hartman
2025-07-08 16:20 ` [PATCH 6.12 021/232] usb: typec: altmodes/displayport: do not index invalid pin_assignments Greg Kroah-Hartman
2025-07-08 16:20 ` [PATCH 6.12 022/232] mtk-sd: Fix a pagefault in dma_unmap_sg() for not prepared data Greg Kroah-Hartman
2025-07-08 16:20 ` [PATCH 6.12 023/232] mtk-sd: Prevent memory corruption from DMA map failure Greg Kroah-Hartman
2025-07-08 16:20 ` [PATCH 6.12 024/232] mtk-sd: reset host->mrq on prepare_data() error Greg Kroah-Hartman
2025-07-08 16:20 ` [PATCH 6.12 025/232] drm/v3d: Disable interrupts before resetting the GPU Greg Kroah-Hartman
2025-07-08 16:20 ` [PATCH 6.12 026/232] firmware: arm_ffa: Fix memory leak by freeing notifier callback node Greg Kroah-Hartman
2025-07-08 16:20 ` [PATCH 6.12 027/232] firmware: arm_ffa: Refactoring to prepare for framework notification support Greg Kroah-Hartman
2025-07-08 16:20 ` [PATCH 6.12 028/232] firmware: arm_ffa: Stash ffa_device instead of notify_type in notifier_cb_info Greg Kroah-Hartman
2025-07-08 16:20 ` [PATCH 6.12 029/232] firmware: arm_ffa: Add support for {un,}registration of framework notifications Greg Kroah-Hartman
2025-07-08 19:34 ` Sudeep Holla
2025-07-09 8:35 ` Greg Kroah-Hartman
2025-07-08 16:20 ` [PATCH 6.12 030/232] firmware: arm_ffa: Move memory allocation outside the mutex locking Greg Kroah-Hartman
2025-07-08 16:20 ` [PATCH 6.12 031/232] arm64: dts: apple: t8103: Fix PCIe BCM4377 nodename Greg Kroah-Hartman
2025-07-08 16:20 ` [PATCH 6.12 032/232] platform/mellanox: mlxbf-tmfifo: fix vring_desc.len assignment Greg Kroah-Hartman
2025-07-08 16:20 ` [PATCH 6.12 033/232] RDMA/mlx5: Fix unsafe xarray access in implicit ODP handling Greg Kroah-Hartman
2025-07-08 16:20 ` [PATCH 6.12 034/232] RDMA/mlx5: Initialize obj_event->obj_sub_list before xa_insert Greg Kroah-Hartman
2025-07-08 16:20 ` [PATCH 6.12 035/232] nfs: Clean up /proc/net/rpc/nfs when nfs_fs_proc_net_init() fails Greg Kroah-Hartman
2025-07-08 16:20 ` [PATCH 6.12 036/232] NFSv4/pNFS: Fix a race to wake on NFS_LAYOUT_DRAIN Greg Kroah-Hartman
2025-07-08 16:20 ` [PATCH 6.12 037/232] scsi: qla2xxx: Fix DMA mapping test in qla24xx_get_port_database() Greg Kroah-Hartman
2025-07-08 16:20 ` [PATCH 6.12 038/232] scsi: qla4xxx: Fix missing DMA mapping error in qla4xxx_alloc_pdu() Greg Kroah-Hartman
2025-07-08 16:20 ` [PATCH 6.12 039/232] scsi: sd: Fix VPD page 0xb7 length check Greg Kroah-Hartman
2025-07-08 16:20 ` [PATCH 6.12 040/232] scsi: ufs: core: Fix spelling of a sysfs attribute name Greg Kroah-Hartman
2025-07-08 16:20 ` [PATCH 6.12 041/232] RDMA/mlx5: Fix HW counters query for non-representor devices Greg Kroah-Hartman
2025-07-08 16:20 ` [PATCH 6.12 042/232] RDMA/mlx5: Fix CC counters query for MPV Greg Kroah-Hartman
2025-07-08 16:20 ` [PATCH 6.12 043/232] RDMA/mlx5: Fix vport loopback for MPV device Greg Kroah-Hartman
2025-07-08 16:20 ` [PATCH 6.12 044/232] platform/mellanox: mlxbf-pmc: Fix duplicate event ID for CACHE_DATA1 Greg Kroah-Hartman
2025-07-08 16:20 ` [PATCH 6.12 045/232] platform/mellanox: nvsw-sn2201: Fix bus number in adapter error message Greg Kroah-Hartman
2025-07-08 16:20 ` [PATCH 6.12 046/232] Bluetooth: Prevent unintended pause by checking if advertising is active Greg Kroah-Hartman
2025-07-08 16:20 ` [PATCH 6.12 047/232] btrfs: fix missing error handling when searching for inode refs during log replay Greg Kroah-Hartman
2025-07-08 16:20 ` [PATCH 6.12 048/232] btrfs: fix iteration of extrefs " Greg Kroah-Hartman
2025-07-08 16:20 ` [PATCH 6.12 049/232] btrfs: return a btrfs_inode from btrfs_iget_logging() Greg Kroah-Hartman
2025-07-08 16:20 ` [PATCH 6.12 050/232] btrfs: return a btrfs_inode from read_one_inode() Greg Kroah-Hartman
2025-07-08 16:20 ` [PATCH 6.12 051/232] btrfs: fix invalid inode pointer dereferences during log replay Greg Kroah-Hartman
2025-07-08 16:20 ` [PATCH 6.12 052/232] btrfs: fix inode lookup error handling " Greg Kroah-Hartman
2025-07-08 16:20 ` [PATCH 6.12 053/232] btrfs: record new subvolume in parent dir earlier to avoid dir logging races Greg Kroah-Hartman
2025-07-08 16:20 ` [PATCH 6.12 054/232] btrfs: propagate last_unlink_trans earlier when doing a rmdir Greg Kroah-Hartman
2025-07-08 16:20 ` [PATCH 6.12 055/232] btrfs: use btrfs_record_snapshot_destroy() during rmdir Greg Kroah-Hartman
2025-07-08 16:20 ` [PATCH 6.12 056/232] ethernet: atl1: Add missing DMA mapping error checks and count errors Greg Kroah-Hartman
2025-07-08 16:20 ` [PATCH 6.12 057/232] dpaa2-eth: fix xdp_rxq_info leak Greg Kroah-Hartman
2025-07-08 16:20 ` [PATCH 6.12 058/232] drm/exynos: fimd: Guard display clock control with runtime PM calls Greg Kroah-Hartman
2025-07-08 16:20 ` [PATCH 6.12 059/232] spi: spi-fsl-dspi: Clear completion counter before initiating transfer Greg Kroah-Hartman
2025-07-08 16:20 ` [PATCH 6.12 060/232] drm/i915/selftests: Change mock_request() to return error pointers Greg Kroah-Hartman
2025-07-08 16:20 ` [PATCH 6.12 061/232] nvme: Fix incorrect cdw15 value in passthru error logging Greg Kroah-Hartman
2025-07-08 16:20 ` [PATCH 6.12 062/232] nvmet: fix memory leak of bio integrity Greg Kroah-Hartman
2025-07-08 16:20 ` [PATCH 6.12 063/232] platform/x86: dell-wmi-sysman: Fix WMI data block retrieval in sysfs callbacks Greg Kroah-Hartman
2025-07-08 16:21 ` [PATCH 6.12 064/232] platform/x86: hp-bioscfg: Directly use firmware_attributes_class Greg Kroah-Hartman
2025-07-08 16:21 ` [PATCH 6.12 065/232] platform/x86: hp-bioscfg: Fix class device unregistration Greg Kroah-Hartman
2025-07-08 16:21 ` [PATCH 6.12 066/232] platform/x86: firmware_attributes_class: Move include linux/device/class.h Greg Kroah-Hartman
2025-07-08 16:21 ` [PATCH 6.12 067/232] platform/x86: firmware_attributes_class: Simplify API Greg Kroah-Hartman
2025-07-08 16:21 ` [PATCH 6.12 068/232] platform/x86: think-lmi: Directly use firmware_attributes_class Greg Kroah-Hartman
2025-07-08 16:21 ` [PATCH 6.12 069/232] platform/x86: think-lmi: Fix class device unregistration Greg Kroah-Hartman
2025-07-08 16:21 ` [PATCH 6.12 070/232] platform/x86: dell-sysman: Directly use firmware_attributes_class Greg Kroah-Hartman
2025-07-08 16:21 ` [PATCH 6.12 071/232] platform/x86: dell-wmi-sysman: Fix class device unregistration Greg Kroah-Hartman
2025-07-08 16:21 ` [PATCH 6.12 072/232] platform/mellanox: mlxreg-lc: Fix logic error in power state check Greg Kroah-Hartman
2025-07-08 16:21 ` [PATCH 6.12 073/232] drm/bridge: aux-hpd-bridge: fix assignment of the of_node Greg Kroah-Hartman
2025-07-08 16:21 ` [PATCH 6.12 074/232] smb: client: fix warning when reconnecting channel Greg Kroah-Hartman
2025-07-08 16:21 ` [PATCH 6.12 075/232] net: usb: lan78xx: fix WARN in __netif_napi_del_locked on disconnect Greg Kroah-Hartman
2025-07-08 16:21 ` [PATCH 6.12 076/232] drm/i915/gt: Fix timeline left held on VMA alloc error Greg Kroah-Hartman
2025-07-08 16:21 ` [PATCH 6.12 077/232] drm/i915/gsc: mei interrupt top half should be in irq disabled context Greg Kroah-Hartman
2025-07-08 16:21 ` [PATCH 6.12 078/232] idpf: return 0 size for RSS key if not supported Greg Kroah-Hartman
2025-07-08 16:21 ` [PATCH 6.12 079/232] idpf: convert control queue mutex to a spinlock Greg Kroah-Hartman
2025-07-08 16:21 ` [PATCH 6.12 080/232] igc: disable L1.2 PCI-E link substate to avoid performance issue Greg Kroah-Hartman
2025-07-08 16:21 ` [PATCH 6.12 081/232] smb: client: set missing retry flag in smb2_writev_callback() Greg Kroah-Hartman
2025-07-08 16:21 ` [PATCH 6.12 082/232] smb: client: set missing retry flag in cifs_readv_callback() Greg Kroah-Hartman
2025-07-08 16:21 ` [PATCH 6.12 083/232] smb: client: set missing retry flag in cifs_writev_callback() Greg Kroah-Hartman
2025-07-08 16:21 ` [PATCH 6.12 084/232] netfs: Fix i_size updating Greg Kroah-Hartman
2025-07-08 16:21 ` [PATCH 6.12 085/232] lib: test_objagg: Set error message in check_expect_hints_stats() Greg Kroah-Hartman
2025-07-08 16:21 ` [PATCH 6.12 086/232] amd-xgbe: align CL37 AN sequence as per databook Greg Kroah-Hartman
2025-07-08 16:21 ` [PATCH 6.12 087/232] enic: fix incorrect MTU comparison in enic_change_mtu() Greg Kroah-Hartman
2025-07-08 16:21 ` [PATCH 6.12 088/232] rose: fix dangling neighbour pointers in rose_rt_device_down() Greg Kroah-Hartman
2025-07-08 16:21 ` [PATCH 6.12 089/232] nui: Fix dma_mapping_error() check Greg Kroah-Hartman
2025-07-08 16:21 ` [PATCH 6.12 090/232] net/sched: Always pass notifications when child class becomes empty Greg Kroah-Hartman
2025-07-08 16:21 ` [PATCH 6.12 091/232] amd-xgbe: do not double read link status Greg Kroah-Hartman
2025-07-08 16:21 ` [PATCH 6.12 092/232] smb: client: fix race condition in negotiate timeout by using more precise timing Greg Kroah-Hartman
2025-07-08 16:21 ` [PATCH 6.12 093/232] arm64: dts: rockchip: fix internal USB hub instability on RK3399 Puma Greg Kroah-Hartman
2025-07-08 16:21 ` [PATCH 6.12 094/232] crypto: iaa - Remove dst_null support Greg Kroah-Hartman
2025-07-08 16:21 ` [PATCH 6.12 095/232] crypto: iaa - Do not clobber req->base.data Greg Kroah-Hartman
2025-07-08 16:21 ` [PATCH 6.12 096/232] spinlock: extend guard with spinlock_bh variants Greg Kroah-Hartman
2025-07-08 16:21 ` [PATCH 6.12 097/232] crypto: zynqmp-sha - Add locking Greg Kroah-Hartman
2025-07-08 16:21 ` [PATCH 6.12 098/232] kunit: qemu_configs: sparc: use Zilog console Greg Kroah-Hartman
2025-07-08 16:21 ` [PATCH 6.12 099/232] kunit: qemu_configs: sparc: Explicitly enable CONFIG_SPARC32=y Greg Kroah-Hartman
2025-07-08 16:21 ` [PATCH 6.12 100/232] kunit: qemu_configs: Disable faulting tests on 32-bit SPARC Greg Kroah-Hartman
2025-07-08 16:21 ` [PATCH 6.12 101/232] gfs2: Initialize gl_no_formal_ino earlier Greg Kroah-Hartman
2025-07-08 16:21 ` [PATCH 6.12 102/232] gfs2: Rename GIF_{DEFERRED -> DEFER}_DELETE Greg Kroah-Hartman
2025-07-08 16:21 ` [PATCH 6.12 103/232] gfs2: Rename dinode_demise to evict_behavior Greg Kroah-Hartman
2025-07-08 16:21 ` [PATCH 6.12 104/232] gfs2: Prevent inode creation race Greg Kroah-Hartman
2025-07-08 16:21 ` [PATCH 6.12 105/232] gfs2: Decode missing glock flags in tracepoints Greg Kroah-Hartman
2025-07-08 16:21 ` [PATCH 6.12 106/232] gfs2: Add GLF_PENDING_REPLY flag Greg Kroah-Hartman
2025-07-08 16:21 ` [PATCH 6.12 107/232] gfs2: Replace GIF_DEFER_DELETE with GLF_DEFER_DELETE Greg Kroah-Hartman
2025-07-08 16:21 ` [PATCH 6.12 108/232] gfs2: Move gfs2_dinode_dealloc Greg Kroah-Hartman
2025-07-08 16:21 ` [PATCH 6.12 109/232] gfs2: Move GIF_ALLOC_FAILED check out of gfs2_ea_dealloc Greg Kroah-Hartman
2025-07-08 16:21 ` [PATCH 6.12 110/232] gfs2: deallocate inodes in gfs2_create_inode Greg Kroah-Hartman
2025-07-08 16:21 ` [PATCH 6.12 111/232] btrfs: prepare btrfs_page_mkwrite() for large folios Greg Kroah-Hartman
2025-07-08 16:21 ` [PATCH 6.12 112/232] btrfs: fix wrong start offset for delalloc space release during mmap write Greg Kroah-Hartman
2025-07-08 16:21 ` [PATCH 6.12 113/232] sched/fair: Rename h_nr_running into h_nr_queued Greg Kroah-Hartman
2025-07-08 16:21 ` [PATCH 6.12 114/232] sched/fair: Add new cfs_rq.h_nr_runnable Greg Kroah-Hartman
2025-07-08 16:21 ` [PATCH 6.12 115/232] sched/fair: Fixup wake_up_sync() vs DELAYED_DEQUEUE Greg Kroah-Hartman
2025-07-08 16:21 ` [PATCH 6.12 116/232] gfs2: Move gfs2_trans_add_databufs Greg Kroah-Hartman
2025-07-08 16:21 ` [PATCH 6.12 117/232] gfs2: Dont start unnecessary transactions during log flush Greg Kroah-Hartman
2025-07-08 16:21 ` [PATCH 6.12 118/232] ASoC: tas2764: Extend driver to SN012776 Greg Kroah-Hartman
2025-07-08 16:21 ` [PATCH 6.12 119/232] ASoC: tas2764: Reinit cache on part reset Greg Kroah-Hartman
2025-07-08 16:21 ` [PATCH 6.12 120/232] ACPI: thermal: Fix stale comment regarding trip points Greg Kroah-Hartman
2025-07-08 16:21 ` [PATCH 6.12 121/232] ACPI: thermal: Execute _SCP before reading " Greg Kroah-Hartman
2025-07-08 16:21 ` [PATCH 6.12 122/232] bonding: Mark active offloaded xfrm_states Greg Kroah-Hartman
2025-07-08 16:21 ` [PATCH 6.12 123/232] wifi: ath12k: fix skb_ext_desc leak in ath12k_dp_tx() error path Greg Kroah-Hartman
2025-07-08 16:22 ` [PATCH 6.12 124/232] wifi: ath12k: Handle error cases during extended skb allocation Greg Kroah-Hartman
2025-07-08 16:22 ` [PATCH 6.12 125/232] wifi: ath12k: fix wrong handling of CCMP256 and GCMP ciphers Greg Kroah-Hartman
2025-07-08 16:22 ` [PATCH 6.12 126/232] RDMA/rxe: Fix "trying to register non-static key in rxe_qp_do_cleanup" bug Greg Kroah-Hartman
2025-07-08 16:22 ` [PATCH 6.12 127/232] iommu: ipmmu-vmsa: avoid Wformat-security warning Greg Kroah-Hartman
2025-07-08 16:22 ` [PATCH 6.12 128/232] f2fs: decrease spare area for pinned files for zoned devices Greg Kroah-Hartman
2025-07-08 16:22 ` [PATCH 6.12 129/232] f2fs: zone: introduce first_zoned_segno in f2fs_sb_info Greg Kroah-Hartman
2025-07-08 16:22 ` [PATCH 6.12 130/232] f2fs: zone: fix to calculate first_zoned_segno correctly Greg Kroah-Hartman
2025-07-08 16:22 ` [PATCH 6.12 131/232] scsi: lpfc: Remove NLP_RELEASE_RPI flag from nodelist structure Greg Kroah-Hartman
2025-07-08 16:22 ` [PATCH 6.12 132/232] scsi: lpfc: Change lpfc_nodelist nlp_flag member into a bitmask Greg Kroah-Hartman
2025-07-08 16:22 ` [PATCH 6.12 133/232] scsi: lpfc: Avoid potential ndlp use-after-free in dev_loss_tmo_callbk Greg Kroah-Hartman
2025-07-08 16:22 ` [PATCH 6.12 134/232] hisi_acc_vfio_pci: bugfix cache write-back issue Greg Kroah-Hartman
2025-07-08 16:22 ` [PATCH 6.12 135/232] hisi_acc_vfio_pci: bugfix the problem of uninstalling driver Greg Kroah-Hartman
2025-07-08 16:22 ` [PATCH 6.12 136/232] bpf: use common instruction history across all states Greg Kroah-Hartman
2025-07-08 16:22 ` [PATCH 6.12 137/232] bpf: Do not include stack ptr register in precision backtracking bookkeeping Greg Kroah-Hartman
2025-07-08 16:22 ` [PATCH 6.12 138/232] arm64: dts: qcom: sm8650: change labels to lower-case Greg Kroah-Hartman
2025-07-08 16:22 ` [PATCH 6.12 139/232] arm64: dts: qcom: sm8650: Fix domain-idle-state for CPU2 Greg Kroah-Hartman
2025-07-08 16:22 ` [PATCH 6.12 140/232] arm64: dts: renesas: Use interrupts-extended for Ethernet PHYs Greg Kroah-Hartman
2025-07-08 16:22 ` [PATCH 6.12 141/232] arm64: dts: renesas: Factor out White Hawk Single board support Greg Kroah-Hartman
2025-07-08 16:22 ` [PATCH 6.12 142/232] arm64: dts: renesas: white-hawk-single: Improve Ethernet TSN description Greg Kroah-Hartman
2025-07-08 16:22 ` [PATCH 6.12 143/232] arm64: dts: qcom: sm8650: add the missing l2 cache node Greg Kroah-Hartman
2025-07-08 16:22 ` [PATCH 6.12 144/232] ubsan: integer-overflow: depend on BROKEN to keep this out of CI Greg Kroah-Hartman
2025-07-08 16:22 ` [PATCH 6.12 145/232] remoteproc: k3: Call of_node_put(rmem_np) only once in three functions Greg Kroah-Hartman
2025-07-08 16:22 ` [PATCH 6.12 146/232] remoteproc: k3-r5: Add devm action to release reserved memory Greg Kroah-Hartman
2025-07-08 16:22 ` [PATCH 6.12 147/232] remoteproc: k3-r5: Use devm_kcalloc() helper Greg Kroah-Hartman
2025-07-08 16:22 ` [PATCH 6.12 148/232] remoteproc: k3-r5: Use devm_ioremap_wc() helper Greg Kroah-Hartman
2025-07-08 16:22 ` [PATCH 6.12 149/232] remoteproc: k3-r5: Use devm_rproc_add() helper Greg Kroah-Hartman
2025-07-08 16:22 ` [PATCH 6.12 150/232] remoteproc: k3-r5: Refactor sequential core power up/down operations Greg Kroah-Hartman
2025-07-08 16:22 ` [PATCH 6.12 151/232] netfs: Fix oops in write-retry from mis-resetting the subreq iterator Greg Kroah-Hartman
2025-07-08 16:22 ` [PATCH 6.12 152/232] mfd: exynos-lpass: Fix another error handling path in exynos_lpass_probe() Greg Kroah-Hartman
2025-07-08 16:22 ` [PATCH 6.12 153/232] drm/xe: Fix DSB buffer coherency Greg Kroah-Hartman
2025-07-08 16:22 ` [PATCH 6.12 154/232] drm/xe: Move DSB l2 flush to a more sensible place Greg Kroah-Hartman
2025-07-08 16:22 ` [PATCH 6.12 155/232] drm/xe: add interface to request physical alignment for buffer objects Greg Kroah-Hartman
2025-07-08 16:22 ` [PATCH 6.12 156/232] drm/xe: Allow bo mapping on multiple ggtts Greg Kroah-Hartman
2025-07-08 16:22 ` [PATCH 6.12 157/232] drm/xe: move DPT l2 flush to a more sensible place Greg Kroah-Hartman
2025-07-08 16:22 ` [PATCH 6.12 158/232] drm/xe: Replace double space with single space after comma Greg Kroah-Hartman
2025-07-08 16:22 ` Greg Kroah-Hartman [this message]
2025-07-08 16:22 ` [PATCH 6.12 160/232] drm/xe/guc: Explicitly exit CT safe mode on unwind Greg Kroah-Hartman
2025-07-08 16:22 ` [PATCH 6.12 161/232] selinux: change security_compute_sid to return the ssid or tsid on match Greg Kroah-Hartman
2025-07-08 16:22 ` [PATCH 6.12 162/232] drm/simpledrm: Do not upcast in release helpers Greg Kroah-Hartman
2025-07-08 16:22 ` [PATCH 6.12 163/232] drm/amdgpu: VCN v5_0_1 to prevent FW checking RB during DPG pause Greg Kroah-Hartman
2025-07-08 16:22 ` [PATCH 6.12 164/232] drm/i915/dp_mst: Work around Thunderbolt sink disconnect after SINK_COUNT_ESI read Greg Kroah-Hartman
2025-07-08 16:22 ` [PATCH 6.12 165/232] drm/amdgpu: add kicker fws loading for gfx11/smu13/psp13 Greg Kroah-Hartman
2025-07-08 16:22 ` [PATCH 6.12 166/232] drm/amd/display: Add more checks for DSC / HUBP ONO guarantees Greg Kroah-Hartman
2025-07-08 16:22 ` [PATCH 6.12 167/232] arm64: dts: qcom: x1e80100-crd: mark l12b and l15b always-on Greg Kroah-Hartman
2025-07-08 16:22 ` [PATCH 6.12 168/232] drm/amdgpu/mes: add missing locking in helper functions Greg Kroah-Hartman
2025-07-08 16:22 ` [PATCH 6.12 169/232] sched_ext: Make scx_group_set_weight() always update tg->scx.weight Greg Kroah-Hartman
2025-07-08 16:22 ` [PATCH 6.12 170/232] scsi: lpfc: Restore clearing of NLP_UNREG_INP in ndlp->nlp_flag Greg Kroah-Hartman
2025-07-08 16:22 ` [PATCH 6.12 171/232] drm/msm: Fix a fence leak in submit error path Greg Kroah-Hartman
2025-07-08 16:22 ` [PATCH 6.12 172/232] drm/msm: Fix another leak in the " Greg Kroah-Hartman
2025-07-08 16:22 ` [PATCH 6.12 173/232] ALSA: sb: Dont allow changing the DMA mode during operations Greg Kroah-Hartman
2025-07-08 16:22 ` [PATCH 6.12 174/232] ALSA: sb: Force to disable DMAs once when DMA mode is changed Greg Kroah-Hartman
2025-07-08 16:22 ` [PATCH 6.12 175/232] ata: libata-acpi: Do not assume 40 wire cable if no devices are enabled Greg Kroah-Hartman
2025-07-08 16:22 ` [PATCH 6.12 176/232] ata: pata_cs5536: fix build on 32-bit UML Greg Kroah-Hartman
2025-07-08 16:22 ` [PATCH 6.12 177/232] ASoC: amd: yc: Add quirk for MSI Bravo 17 D7VF internal mic Greg Kroah-Hartman
2025-07-08 16:22 ` [PATCH 6.12 178/232] platform/x86/amd/pmc: Add PCSpecialist Lafite Pro V 14M to 8042 quirks list Greg Kroah-Hartman
2025-07-08 16:22 ` [PATCH 6.12 179/232] genirq/irq_sim: Initialize work context pointers properly Greg Kroah-Hartman
2025-07-08 16:22 ` [PATCH 6.12 180/232] powerpc: Fix struct termio related ioctl macros Greg Kroah-Hartman
2025-07-08 16:22 ` [PATCH 6.12 181/232] ASoC: amd: yc: update quirk data for HP Victus Greg Kroah-Hartman
2025-07-08 16:22 ` [PATCH 6.12 182/232] regulator: fan53555: add enable_time support and soft-start times Greg Kroah-Hartman
2025-07-08 16:22 ` [PATCH 6.12 183/232] scsi: target: Fix NULL pointer dereference in core_scsi3_decode_spec_i_port() Greg Kroah-Hartman
2025-07-08 16:23 ` [PATCH 6.12 184/232] aoe: defer rexmit timer downdev work to workqueue Greg Kroah-Hartman
2025-07-08 16:23 ` [PATCH 6.12 185/232] wifi: mac80211: drop invalid source address OCB frames Greg Kroah-Hartman
2025-07-08 16:23 ` [PATCH 6.12 186/232] wifi: ath6kl: remove WARN on bad firmware input Greg Kroah-Hartman
2025-07-08 16:23 ` [PATCH 6.12 187/232] ACPICA: Refuse to evaluate a method if arguments are missing Greg Kroah-Hartman
2025-07-08 16:23 ` [PATCH 6.12 188/232] mtd: spinand: fix memory leak of ECC engine conf Greg Kroah-Hartman
2025-07-08 16:23 ` [PATCH 6.12 189/232] rcu: Return early if callback is not specified Greg Kroah-Hartman
2025-07-08 16:23 ` [PATCH 6.12 190/232] firmware: arm_ffa: Replace mutex with rwlock to avoid sleep in atomic context Greg Kroah-Hartman
2025-07-08 16:23 ` [PATCH 6.12 191/232] add a string-to-qstr constructor Greg Kroah-Hartman
2025-07-08 16:23 ` [PATCH 6.12 192/232] module: Provide EXPORT_SYMBOL_GPL_FOR_MODULES() helper Greg Kroah-Hartman
2025-07-08 16:23 ` [PATCH 6.12 193/232] fs: export anon_inode_make_secure_inode() and fix secretmem LSM bypass Greg Kroah-Hartman
2025-07-08 16:23 ` [PATCH 6.12 194/232] RDMA/mlx5: Fix cache entry update on dereg error Greg Kroah-Hartman
2025-07-08 16:23 ` [PATCH 6.12 195/232] IB/mlx5: Fix potential deadlock in MR deregistration Greg Kroah-Hartman
2025-07-08 16:23 ` [PATCH 6.12 196/232] drm/xe/bmg: Update Wa_22019338487 Greg Kroah-Hartman
2025-07-08 16:23 ` [PATCH 6.12 197/232] drm/xe: Allow dropping kunit dependency as built-in Greg Kroah-Hartman
2025-07-08 16:23 ` [PATCH 6.12 198/232] NFSv4/flexfiles: Fix handling of NFS level errors in I/O Greg Kroah-Hartman
2025-07-08 16:23 ` [PATCH 6.12 199/232] usb: xhci: Skip xhci_reset in xhci_resume if xhci is being removed Greg Kroah-Hartman
2025-07-08 16:23 ` [PATCH 6.12 200/232] Revert "usb: xhci: Implement xhci_handshake_check_state() helper" Greg Kroah-Hartman
2025-07-08 16:23 ` [PATCH 6.12 201/232] usb: xhci: quirk for data loss in ISOC transfers Greg Kroah-Hartman
2025-07-08 16:23 ` [PATCH 6.12 202/232] xhci: dbctty: disable ECHO flag by default Greg Kroah-Hartman
2025-07-08 16:23 ` [PATCH 6.12 203/232] xhci: dbc: Flush queued requests before stopping dbc Greg Kroah-Hartman
2025-07-08 16:23 ` [PATCH 6.12 204/232] xhci: Disable stream for xHC controller with XHCI_BROKEN_STREAMS Greg Kroah-Hartman
2025-07-08 16:23 ` [PATCH 6.12 205/232] Input: xpad - support Acer NGR 200 Controller Greg Kroah-Hartman
2025-07-08 16:23 ` [PATCH 6.12 206/232] Input: iqs7222 - explicitly define number of external channels Greg Kroah-Hartman
2025-07-08 16:23 ` [PATCH 6.12 207/232] usb: cdnsp: do not disable slot for disabled slot Greg Kroah-Hartman
2025-07-08 16:23 ` [PATCH 6.12 208/232] usb: cdnsp: Fix issue with CV Bad Descriptor test Greg Kroah-Hartman
2025-07-08 16:23 ` [PATCH 6.12 209/232] usb: dwc3: Abort suspend on soft disconnect failure Greg Kroah-Hartman
2025-07-08 16:23 ` [PATCH 6.12 210/232] usb: chipidea: udc: disconnect/reconnect from host when do suspend/resume Greg Kroah-Hartman
2025-07-08 16:23 ` [PATCH 6.12 211/232] usb: acpi: fix device link removal Greg Kroah-Hartman
2025-07-08 16:23 ` [PATCH 6.12 212/232] smb: client: fix readdir returning wrong type with POSIX extensions Greg Kroah-Hartman
2025-07-08 16:23 ` [PATCH 6.12 213/232] cifs: all initializations for tcon should happen in tcon_info_alloc Greg Kroah-Hartman
2025-07-08 16:23 ` [PATCH 6.12 214/232] dma-buf: fix timeout handling in dma_resv_wait_timeout v2 Greg Kroah-Hartman
2025-07-08 16:23 ` [PATCH 6.12 215/232] i2c/designware: Fix an initialization issue Greg Kroah-Hartman
2025-07-08 16:23 ` [PATCH 6.12 216/232] Logitech C-270 even more broken Greg Kroah-Hartman
2025-07-08 16:23 ` [PATCH 6.12 217/232] optee: ffa: fix sleep in atomic context Greg Kroah-Hartman
2025-07-08 16:23 ` [PATCH 6.12 218/232] iommu/rockchip: prevent iommus dead loop when two masters share one IOMMU Greg Kroah-Hartman
2025-07-08 16:23 ` [PATCH 6.12 219/232] powercap: intel_rapl: Do not change CLAMPING bit if ENABLE bit cannot be changed Greg Kroah-Hartman
2025-07-08 16:23 ` [PATCH 6.12 220/232] riscv: cpu_ops_sbi: Use static array for boot_data Greg Kroah-Hartman
2025-07-08 16:23 ` [PATCH 6.12 221/232] platform/x86: think-lmi: Create ksets consecutively Greg Kroah-Hartman
2025-07-08 16:23 ` [PATCH 6.12 222/232] platform/x86: think-lmi: Fix kobject cleanup Greg Kroah-Hartman
2025-07-08 16:23 ` [PATCH 6.12 223/232] platform/x86: think-lmi: Fix sysfs group cleanup Greg Kroah-Hartman
2025-07-08 16:23 ` [PATCH 6.12 224/232] usb: typec: displayport: Fix potential deadlock Greg Kroah-Hartman
2025-07-08 16:23 ` [PATCH 6.12 225/232] powerpc/kernel: Fix ppc_save_regs inclusion in build Greg Kroah-Hartman
2025-07-08 16:23 ` [PATCH 6.12 226/232] mm/vmalloc: fix data race in show_numa_info() Greg Kroah-Hartman
2025-07-08 16:23 ` [PATCH 6.12 227/232] mm: userfaultfd: fix race of userfaultfd_move and swap cache Greg Kroah-Hartman
2025-07-08 16:23 ` [PATCH 6.12 228/232] x86/bugs: Rename MDS machinery to something more generic Greg Kroah-Hartman
2025-07-08 16:23 ` [PATCH 6.12 229/232] x86/bugs: Add a Transient Scheduler Attacks mitigation Greg Kroah-Hartman
2025-07-08 16:23 ` [PATCH 6.12 230/232] KVM: SVM: Advertise TSA CPUID bits to guests Greg Kroah-Hartman
2025-07-08 16:23 ` [PATCH 6.12 231/232] x86/microcode/AMD: Add TSA microcode SHAs Greg Kroah-Hartman
2025-07-08 16:23 ` [PATCH 6.12 232/232] x86/process: Move the buffer clearing before MONITOR Greg Kroah-Hartman
2025-07-09 6:42 ` [PATCH 6.12 000/232] 6.12.37-rc1 review Pavel Machek
2025-07-09 8:47 ` Mark Brown
2025-07-09 9:26 ` Harshit Mogalapalli
2025-07-09 9:43 ` Ron Economos
2025-07-09 13:40 ` Jon Hunter
2025-07-09 15:16 ` Miguel Ojeda
2025-07-09 16:53 ` Naresh Kamboju
2025-07-09 22:00 ` Shuah Khan
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250708162245.598398569@linuxfoundation.org \
--to=gregkh@linuxfoundation.org \
--cc=John.C.Harrison@Intel.com \
--cc=julia.filipchuk@intel.com \
--cc=patches@lists.linux.dev \
--cc=sashal@kernel.org \
--cc=stable@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox