From: Matthew Brost <matthew.brost@intel.com>
To: Mika Kuoppala <mika.kuoppala@linux.intel.com>
Cc: <intel-xe@lists.freedesktop.org>,
Christoph Manszewski <christoph.manszewski@intel.com>,
Dominik Grzegorzek <dominik.grzegorzek@intel.com>,
Maciej Patelczyk <maciej.patelczyk@intel.com>
Subject: Re: [PATCH 20/21] drm/xe/eudebug: Dynamically toggle debugger functionality
Date: Sun, 28 Jul 2024 04:50:31 +0000 [thread overview]
Message-ID: <ZqXOF3ACeHABbCPj@DUT025-TGLU.fm.intel.com> (raw)
In-Reply-To: <20240726140818.54304-21-mika.kuoppala@linux.intel.com>
On Fri, Jul 26, 2024 at 05:08:17PM +0300, Mika Kuoppala wrote:
> From: Christoph Manszewski <christoph.manszewski@intel.com>
>
> Make it possible to dynamically enable/disable debugger funtionality,
> including the setting and unsetting of required hw register values via a
> sysfs entry located at '/sys/class/drm/card<X>/device/enable_eudebug'.
>
> This entry uses 'kstrtobool' and as such it accepts inputs as documented
> by this function, in particular '0' and '1'.
>
> 1) Adjust to xe_rtp graphics ranges changes.
> 2) Fix pile placement. Wa 14019869343 (aka. 16021232320) was
> added later in the pile, move disablement to appropriate commit.
> 3) flush reset (Christoph)
> 4) dont allow exec queue enable if feature is disabled (Dominik)
> 5) bind to drm sysfs functions (Maciej)
>
> Signed-off-by: Christoph Manszewski <christoph.manszewski@intel.com>
> Signed-off-by: Dominik Grzegorzek <dominik.grzegorzek@intel.com>
> Signed-off-by: Mika Kuoppala <mika.kuoppala@linux.intel.com>
> Signed-off-by: Maciej Patelczyk <maciej.patelczyk@intel.com>
> ---
> drivers/gpu/drm/xe/xe_device.c | 2 -
> drivers/gpu/drm/xe/xe_device_types.h | 5 +
> drivers/gpu/drm/xe/xe_eudebug.c | 174 +++++++++++++++++++++++----
> drivers/gpu/drm/xe/xe_eudebug.h | 2 -
> drivers/gpu/drm/xe/xe_exec_queue.c | 3 +
> drivers/gpu/drm/xe/xe_hw_engine.c | 1 -
> drivers/gpu/drm/xe/xe_reg_sr.c | 21 +++-
> drivers/gpu/drm/xe/xe_reg_sr.h | 4 +-
> drivers/gpu/drm/xe/xe_rtp.c | 2 +-
> drivers/gpu/drm/xe/xe_rtp_types.h | 1 +
> 10 files changed, 178 insertions(+), 37 deletions(-)
>
> diff --git a/drivers/gpu/drm/xe/xe_device.c b/drivers/gpu/drm/xe/xe_device.c
> index 268faa1800c4..30a2bf2a7e00 100644
> --- a/drivers/gpu/drm/xe/xe_device.c
> +++ b/drivers/gpu/drm/xe/xe_device.c
> @@ -785,8 +785,6 @@ int xe_device_probe(struct xe_device *xe)
>
> xe_debugfs_register(xe);
>
> - xe_eudebug_init_late(xe);
> -
> xe_hwmon_register(xe);
>
> for_each_gt(gt, xe, id)
> diff --git a/drivers/gpu/drm/xe/xe_device_types.h b/drivers/gpu/drm/xe/xe_device_types.h
> index beb1f3c8dc63..17aedbba3130 100644
> --- a/drivers/gpu/drm/xe/xe_device_types.h
> +++ b/drivers/gpu/drm/xe/xe_device_types.h
> @@ -517,6 +517,11 @@ struct xe_device {
> /** @ordered_wq: used to discovery */
> struct workqueue_struct *ordered_wq;
>
> + /** @enable_lock: protects the enable toggle */
> + struct mutex enable_lock;
> + /** @enable: is the debugging functionality enabled */
> + bool enable;
> +
> /** @attention_scan: attention scan worker */
> struct delayed_work attention_scan;
> } eudebug;
> diff --git a/drivers/gpu/drm/xe/xe_eudebug.c b/drivers/gpu/drm/xe/xe_eudebug.c
> index a80ffb64df15..80066f787ec2 100644
> --- a/drivers/gpu/drm/xe/xe_eudebug.c
> +++ b/drivers/gpu/drm/xe/xe_eudebug.c
> @@ -2000,9 +2000,6 @@ xe_eudebug_connect(struct xe_device *xe,
>
> param->version = DRM_XE_EUDEBUG_VERSION;
>
> - if (!xe->eudebug.available)
> - return -EOPNOTSUPP;
> -
> d = kzalloc(sizeof(*d), GFP_KERNEL);
> if (!d)
> return -ENOMEM;
> @@ -2064,70 +2061,199 @@ int xe_eudebug_connect_ioctl(struct drm_device *dev,
> struct drm_xe_eudebug_connect * const param = data;
> int ret = 0;
>
> + mutex_lock(&xe->eudebug.enable_lock);
> +
> + if (!xe->eudebug.enable) {
> + mutex_unlock(&xe->eudebug.enable_lock);
> + return -ENODEV;
> + }
> +
> ret = xe_eudebug_connect(xe, param);
>
> + mutex_unlock(&xe->eudebug.enable_lock);
> +
> return ret;
> }
>
> #undef XE_REG_MCR
> #define XE_REG_MCR(...) XE_REG(__VA_ARGS__, .mcr = 1)
>
> -void xe_eudebug_init_hw_engine(struct xe_hw_engine *hwe)
> +static void xe_eudebug_init_hw_engine(struct xe_hw_engine *hwe)
> {
> const struct xe_rtp_entry_sr eudebug_was[] = {
> - { XE_RTP_NAME("GlobalDebugEnable"),
> - XE_RTP_RULES(GRAPHICS_VERSION_RANGE(1200, 1210),
> - ENGINE_CLASS(RENDER)),
> - XE_RTP_ACTIONS(SET(CS_DEBUG_MODE2(RENDER_RING_BASE),
> - GLOBAL_DEBUG_ENABLE))
> - },
> { XE_RTP_NAME("TdCtlDebugEnable"),
> XE_RTP_RULES(GRAPHICS_VERSION_RANGE(1200, 3499),
> FUNC(xe_rtp_match_first_render_or_compute)),
> XE_RTP_ACTIONS(SET(TD_CTL,
> TD_CTL_BREAKPOINT_ENABLE |
> TD_CTL_FORCE_THREAD_BREAKPOINT_ENABLE |
> - TD_CTL_FEH_AND_FEE_ENABLE))
> + TD_CTL_FEH_AND_FEE_ENABLE,
> + XE_RTP_ACTION_FLAG(OVERWRITE)))
> },
> { XE_RTP_NAME("TdCtlGlobalDebugEnable"),
> XE_RTP_RULES(GRAPHICS_VERSION_RANGE(1250, XE_RTP_END_VERSION_UNDEFINED),
> FUNC(xe_rtp_match_first_render_or_compute)),
> - XE_RTP_ACTIONS(SET(TD_CTL, TD_CTL_GLOBAL_DEBUG_ENABLE))
> + XE_RTP_ACTIONS(SET(TD_CTL, TD_CTL_GLOBAL_DEBUG_ENABLE,
> + XE_RTP_ACTION_FLAG(OVERWRITE)))
> },
> { XE_RTP_NAME("18022722726"),
> XE_RTP_RULES(GRAPHICS_VERSION_RANGE(1250, 1274),
> FUNC(xe_rtp_match_first_render_or_compute)),
> - XE_RTP_ACTIONS(SET(ROW_CHICKEN, STALL_DOP_GATING_DISABLE))
> + XE_RTP_ACTIONS(SET(ROW_CHICKEN, STALL_DOP_GATING_DISABLE,
> + XE_RTP_ACTION_FLAG(OVERWRITE)))
> },
> { XE_RTP_NAME("14015527279"),
> XE_RTP_RULES(PLATFORM(PVC),
> FUNC(xe_rtp_match_first_render_or_compute)),
> - XE_RTP_ACTIONS(SET(ROW_CHICKEN2, XEHPC_DISABLE_BTB))
> + XE_RTP_ACTIONS(SET(ROW_CHICKEN2, XEHPC_DISABLE_BTB,
> + XE_RTP_ACTION_FLAG(OVERWRITE)))
> },
> {}
> };
> struct xe_rtp_process_ctx ctx = XE_RTP_PROCESS_CTX_INITIALIZER(hwe);
> - struct xe_device *xe = gt_to_xe(hwe->gt);
>
> - if (xe->eudebug.available)
> - xe_rtp_process_to_sr(&ctx, eudebug_was, &hwe->reg_sr);
> + xe_rtp_process_to_sr(&ctx, eudebug_was, &hwe->reg_sr);
> +}
> +
> +static void xe_eudebug_fini_hw_engine(struct xe_hw_engine *hwe)
> +{
> + const struct xe_rtp_entry_sr eudebug_was[] = {
> + { XE_RTP_NAME("TdCtlDebugEnable"),
> + XE_RTP_RULES(GRAPHICS_VERSION_RANGE(1200, 3499),
> + FUNC(xe_rtp_match_first_render_or_compute)),
> + XE_RTP_ACTIONS(CLR(TD_CTL,
> + TD_CTL_BREAKPOINT_ENABLE |
> + TD_CTL_FORCE_THREAD_BREAKPOINT_ENABLE |
> + TD_CTL_FEH_AND_FEE_ENABLE,
> + XE_RTP_ACTION_FLAG(OVERWRITE)))
> + },
> + { XE_RTP_NAME("TdCtlGlobalDebugEnable"),
> + XE_RTP_RULES(GRAPHICS_VERSION_RANGE(1250, XE_RTP_END_VERSION_UNDEFINED),
> + FUNC(xe_rtp_match_first_render_or_compute)),
> + XE_RTP_ACTIONS(CLR(TD_CTL, TD_CTL_GLOBAL_DEBUG_ENABLE,
> + XE_RTP_ACTION_FLAG(OVERWRITE)))
> + },
> + { XE_RTP_NAME("18022722726"),
> + XE_RTP_RULES(GRAPHICS_VERSION_RANGE(1250, 1274),
> + FUNC(xe_rtp_match_first_render_or_compute)),
> + XE_RTP_ACTIONS(CLR(ROW_CHICKEN, STALL_DOP_GATING_DISABLE,
> + XE_RTP_ACTION_FLAG(OVERWRITE)))
> + },
> + { XE_RTP_NAME("14015527279"),
> + XE_RTP_RULES(PLATFORM(PVC),
> + FUNC(xe_rtp_match_first_render_or_compute)),
> + XE_RTP_ACTIONS(CLR(ROW_CHICKEN2, XEHPC_DISABLE_BTB,
> + XE_RTP_ACTION_FLAG(OVERWRITE)))
> + },
> + {}
> + };
> + struct xe_rtp_process_ctx ctx = XE_RTP_PROCESS_CTX_INITIALIZER(hwe);
> +
> + xe_rtp_process_to_sr(&ctx, eudebug_was, &hwe->reg_sr);
> +}
> +
> +static int xe_eudebug_enable(struct xe_device *xe, bool enable)
> +{
> + struct xe_gt *gt;
> + int i;
> + u8 id;
> +
> + if (!xe->eudebug.available)
> + return -EOPNOTSUPP;
> +
> + /* XXX: TODO hold list lock? */
> + mutex_lock(&xe->eudebug.enable_lock);
> +
> + if (!enable && !list_empty(&xe->eudebug.list)) {
> + mutex_unlock(&xe->eudebug.enable_lock);
> + return -EBUSY;
> + }
> +
> + if (enable == xe->eudebug.enable) {
> + mutex_unlock(&xe->eudebug.enable_lock);
> + return 0;
> + }
> +
> + for_each_gt(gt, xe, id) {
> + for (i = 0; i < ARRAY_SIZE(gt->hw_engines); i++) {
> + if (!(gt->info.engine_mask & BIT(i)))
> + continue;
> +
> + if (enable)
> + xe_eudebug_init_hw_engine(>->hw_engines[i]);
> + else
> + xe_eudebug_fini_hw_engine(>->hw_engines[i]);
> + }
> +
> + xe_gt_reset_async(gt);
What are you trying to accomplish with the reset? Reinit of some HW
settings? Doing GT reset does have a side affect of killing exec queues
with jobs active on the GPU which is not ideal. Please explain exactly
what needs to be done, and maybe we can brainstorm something that won't
kill things.
Also exposing a GT reset via sysfs might be potential security issue
too.
> + flush_work(>->reset.worker);
Flushing the reset worker here creates a lock dependency chain with
xe->eudebug.enable_lock and all locks taken during a GT reset which is
not ideal either. If we need to do a GT reset (or something else with a
worker that takes locks) it probably best to flush the worker after
dropping xe->eudebug.enable_lock. This relates to my other comments on
locking, we shouldn't create lock depeendecy chains unless we have to
and the chains are well defined.
Matt
> + }
> +
> + if (enable)
> + attention_scan_flush(xe);
> + else
> + attention_scan_cancel(xe);
> +
> + xe->eudebug.enable = enable;
> + mutex_unlock(&xe->eudebug.enable_lock);
> +
> + return 0;
> +}
> +
> +static ssize_t enable_eudebug_show(struct device *dev, struct device_attribute *attr, char *buf)
> +{
> + struct xe_device *xe = pdev_to_xe_device(to_pci_dev(dev));
> +
> + return sysfs_emit(buf, "%u\n", xe->eudebug.enable);
> +}
> +
> +static ssize_t enable_eudebug_store(struct device *dev, struct device_attribute *attr,
> + const char *buf, size_t count)
> +{
> + struct xe_device *xe = pdev_to_xe_device(to_pci_dev(dev));
> + bool enable;
> + int ret;
> +
> + ret = kstrtobool(buf, &enable);
> + if (ret)
> + return ret;
> +
> + ret = xe_eudebug_enable(xe, enable);
> + if (ret)
> + return ret;
> +
> + return count;
> +}
> +
> +static DEVICE_ATTR_RW(enable_eudebug);
> +
> +static void xe_eudebug_sysfs_fini(void *arg)
> +{
> + struct xe_device *xe = arg;
> +
> + sysfs_remove_file(&xe->drm.dev->kobj, &dev_attr_enable_eudebug.attr);
> }
>
> void xe_eudebug_init(struct xe_device *xe)
> {
> + struct device *dev = xe->drm.dev;
> + int ret;
> +
> spin_lock_init(&xe->eudebug.lock);
> INIT_LIST_HEAD(&xe->eudebug.list);
> INIT_DELAYED_WORK(&xe->eudebug.attention_scan, attention_scan_fn);
>
> - xe->eudebug.available = true;
> -}
> + drmm_mutex_init(&xe->drm, &xe->eudebug.enable_lock);
> + xe->eudebug.enable = false;
>
> -void xe_eudebug_init_late(struct xe_device *xe)
> -{
> - if (!xe->eudebug.available)
> - return;
>
> - attention_scan_flush(xe);
> + ret = sysfs_create_file(&xe->drm.dev->kobj, &dev_attr_enable_eudebug.attr);
> + if (ret)
> + drm_warn(&xe->drm, "eudebug sysfs init failed: %d, debugger unavailable\n", ret);
> + else
> + devm_add_action_or_reset(dev, xe_eudebug_sysfs_fini, xe);
> +
> + xe->eudebug.available = ret == 0;
> }
>
> void xe_eudebug_fini(struct xe_device *xe)
> diff --git a/drivers/gpu/drm/xe/xe_eudebug.h b/drivers/gpu/drm/xe/xe_eudebug.h
> index 02c9ba56e752..2f66aa87a0f6 100644
> --- a/drivers/gpu/drm/xe/xe_eudebug.h
> +++ b/drivers/gpu/drm/xe/xe_eudebug.h
> @@ -24,9 +24,7 @@ int xe_eudebug_connect_ioctl(struct drm_device *dev,
> struct drm_file *file);
>
> void xe_eudebug_init(struct xe_device *xe);
> -void xe_eudebug_init_late(struct xe_device *xe);
> void xe_eudebug_fini(struct xe_device *xe);
> -void xe_eudebug_init_hw_engine(struct xe_hw_engine *hwe);
>
> void xe_eudebug_file_open(struct xe_file *xef);
> void xe_eudebug_file_close(struct xe_file *xef);
> diff --git a/drivers/gpu/drm/xe/xe_exec_queue.c b/drivers/gpu/drm/xe/xe_exec_queue.c
> index bc2edade5e5b..b6fc65ab8aa9 100644
> --- a/drivers/gpu/drm/xe/xe_exec_queue.c
> +++ b/drivers/gpu/drm/xe/xe_exec_queue.c
> @@ -360,6 +360,9 @@ static int exec_queue_set_eudebug(struct xe_device *xe, struct xe_exec_queue *q,
> !(value & DRM_XE_EXEC_QUEUE_EUDEBUG_FLAG_ENABLE)))
> return -EINVAL;
>
> + if (XE_IOCTL_DBG(xe, !xe->eudebug.enable))
> + return -EPERM;
> +
> q->eudebug_flags = EXEC_QUEUE_EUDEBUG_FLAG_ENABLE;
>
> return 0;
> diff --git a/drivers/gpu/drm/xe/xe_hw_engine.c b/drivers/gpu/drm/xe/xe_hw_engine.c
> index 74813bc20787..0f90416be0ba 100644
> --- a/drivers/gpu/drm/xe/xe_hw_engine.c
> +++ b/drivers/gpu/drm/xe/xe_hw_engine.c
> @@ -504,7 +504,6 @@ static void hw_engine_init_early(struct xe_gt *gt, struct xe_hw_engine *hwe,
> xe_tuning_process_engine(hwe);
> xe_wa_process_engine(hwe);
> hw_engine_setup_default_state(hwe);
> - xe_eudebug_init_hw_engine(hwe);
>
> xe_reg_sr_init(&hwe->reg_whitelist, hwe->name, gt_to_xe(gt));
> xe_reg_whitelist_process_engine(hwe);
> diff --git a/drivers/gpu/drm/xe/xe_reg_sr.c b/drivers/gpu/drm/xe/xe_reg_sr.c
> index 440ac572f6e5..a7671722a84e 100644
> --- a/drivers/gpu/drm/xe/xe_reg_sr.c
> +++ b/drivers/gpu/drm/xe/xe_reg_sr.c
> @@ -92,22 +92,31 @@ static void reg_sr_inc_error(struct xe_reg_sr *sr)
>
> int xe_reg_sr_add(struct xe_reg_sr *sr,
> const struct xe_reg_sr_entry *e,
> - struct xe_gt *gt)
> + struct xe_gt *gt,
> + bool overwrite)
> {
> unsigned long idx = e->reg.addr;
> struct xe_reg_sr_entry *pentry = xa_load(&sr->xa, idx);
> int ret;
>
> if (pentry) {
> - if (!compatible_entries(pentry, e)) {
> + if (overwrite && e->set_bits) {
> + pentry->clr_bits |= e->clr_bits;
> + pentry->set_bits |= e->set_bits;
> + pentry->read_mask |= e->read_mask;
> + } else if (overwrite && !e->set_bits) {
> + pentry->clr_bits |= e->clr_bits;
> + pentry->set_bits &= ~e->clr_bits;
> + pentry->read_mask |= e->read_mask;
> + } else if (!compatible_entries(pentry, e)) {
> ret = -EINVAL;
> goto fail;
> + } else {
> + pentry->clr_bits |= e->clr_bits;
> + pentry->set_bits |= e->set_bits;
> + pentry->read_mask |= e->read_mask;
> }
>
> - pentry->clr_bits |= e->clr_bits;
> - pentry->set_bits |= e->set_bits;
> - pentry->read_mask |= e->read_mask;
> -
> return 0;
> }
>
> diff --git a/drivers/gpu/drm/xe/xe_reg_sr.h b/drivers/gpu/drm/xe/xe_reg_sr.h
> index 51fbba423e27..d67fafdcd847 100644
> --- a/drivers/gpu/drm/xe/xe_reg_sr.h
> +++ b/drivers/gpu/drm/xe/xe_reg_sr.h
> @@ -6,6 +6,8 @@
> #ifndef _XE_REG_SR_
> #define _XE_REG_SR_
>
> +#include <linux/types.h>
> +
> /*
> * Reg save/restore bookkeeping
> */
> @@ -21,7 +23,7 @@ int xe_reg_sr_init(struct xe_reg_sr *sr, const char *name, struct xe_device *xe)
> void xe_reg_sr_dump(struct xe_reg_sr *sr, struct drm_printer *p);
>
> int xe_reg_sr_add(struct xe_reg_sr *sr, const struct xe_reg_sr_entry *e,
> - struct xe_gt *gt);
> + struct xe_gt *gt, bool overwrite);
> void xe_reg_sr_apply_mmio(struct xe_reg_sr *sr, struct xe_gt *gt);
> void xe_reg_sr_apply_whitelist(struct xe_hw_engine *hwe);
>
> diff --git a/drivers/gpu/drm/xe/xe_rtp.c b/drivers/gpu/drm/xe/xe_rtp.c
> index 02e28274282f..5643bcde52bd 100644
> --- a/drivers/gpu/drm/xe/xe_rtp.c
> +++ b/drivers/gpu/drm/xe/xe_rtp.c
> @@ -153,7 +153,7 @@ static void rtp_add_sr_entry(const struct xe_rtp_action *action,
> };
>
> sr_entry.reg.addr += mmio_base;
> - xe_reg_sr_add(sr, &sr_entry, gt);
> + xe_reg_sr_add(sr, &sr_entry, gt, action->flags & XE_RTP_ACTION_FLAG_OVERWRITE);
> }
>
> static bool rtp_process_one_sr(const struct xe_rtp_entry_sr *entry,
> diff --git a/drivers/gpu/drm/xe/xe_rtp_types.h b/drivers/gpu/drm/xe/xe_rtp_types.h
> index 1b76b947c706..20d228067da3 100644
> --- a/drivers/gpu/drm/xe/xe_rtp_types.h
> +++ b/drivers/gpu/drm/xe/xe_rtp_types.h
> @@ -33,6 +33,7 @@ struct xe_rtp_action {
> /** @read_mask: mask for bits to consider when reading value back */
> u32 read_mask;
> #define XE_RTP_ACTION_FLAG_ENGINE_BASE BIT(0)
> +#define XE_RTP_ACTION_FLAG_OVERWRITE BIT(1)
> /** @flags: flags to apply on rule evaluation or action */
> u8 flags;
> };
> --
> 2.34.1
>
next prev parent reply other threads:[~2024-07-28 4:51 UTC|newest]
Thread overview: 78+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-07-26 14:07 [PATCH 00/21] GPU debug support (eudebug) Mika Kuoppala
2024-07-26 14:07 ` [PATCH 01/21] drm/xe: Export xe_hw_engine's mmio accessors Mika Kuoppala
2024-07-27 5:45 ` Matthew Brost
2024-08-08 11:04 ` Andi Shyti
2024-07-26 14:07 ` [PATCH 02/21] drm/xe: Move and export xe_hw_engine lookup Mika Kuoppala
2024-07-27 5:49 ` Matthew Brost
2024-08-08 11:08 ` Andi Shyti
2024-07-26 14:08 ` [PATCH 03/21] drm/xe/eudebug: Introduce eudebug support Mika Kuoppala
2024-07-26 19:20 ` Matthew Brost
2024-07-30 14:12 ` Mika Kuoppala
2024-07-31 1:18 ` Matthew Brost
2024-08-07 9:34 ` Zbigniew Kempczyński
2024-08-21 11:37 ` Mika Kuoppala
2024-08-12 12:02 ` Zbigniew Kempczyński
2024-08-21 11:38 ` Mika Kuoppala
2024-07-26 14:08 ` [PATCH 04/21] kernel: export ptrace_may_access Mika Kuoppala
2024-07-29 18:56 ` Lucas De Marchi
2024-08-08 11:18 ` Andi Shyti
2024-08-21 11:46 ` Mika Kuoppala
2024-07-26 14:08 ` [PATCH 05/21] drm/xe/eudebug: Use ptrace_may_access for xe_eudebug_attach Mika Kuoppala
2024-07-29 19:00 ` Lucas De Marchi
2024-07-26 14:08 ` [PATCH 06/21] drm/xe/eudebug: Introduce discovery for resources Mika Kuoppala
2024-07-26 14:08 ` [PATCH 07/21] drm/xe/eudebug: Introduce exec_queue events Mika Kuoppala
2024-07-26 14:08 ` [PATCH 08/21] drm/xe/eudebug: hw enablement for eudebug Mika Kuoppala
2024-07-29 19:05 ` Lucas De Marchi
2024-07-29 19:16 ` Lucas De Marchi
2024-07-30 9:01 ` Grzegorzek, Dominik
2024-07-30 13:56 ` Lucas De Marchi
2024-07-26 14:08 ` [PATCH 09/21] drm/xe: Add EUDEBUG_ENABLE exec queue property Mika Kuoppala
2024-07-26 18:35 ` Matthew Brost
2024-07-27 0:54 ` Matthew Brost
2024-07-26 14:08 ` [PATCH 10/21] drm/xe/eudebug: Introduce per device attention scan worker Mika Kuoppala
2024-07-27 5:08 ` Matthew Brost
2024-07-29 10:10 ` Grzegorzek, Dominik
2024-07-31 1:25 ` Matthew Brost
2024-07-27 5:39 ` Matthew Brost
2024-07-26 14:08 ` [PATCH 11/21] drm/xe/eudebug: Introduce EU control interface Mika Kuoppala
2024-07-26 14:08 ` [PATCH 12/21] drm/xe/eudebug: Add vm bind and vm bind ops Mika Kuoppala
2024-07-26 14:08 ` [PATCH 13/21] drm/xe/eudebug: Add UFENCE events with acks Mika Kuoppala
2024-07-27 0:40 ` Matthew Brost
2024-07-30 14:05 ` Mika Kuoppala
2024-07-31 1:33 ` Matthew Brost
2024-07-26 14:08 ` [PATCH 14/21] drm/xe/eudebug: vm open/pread/pwrite Mika Kuoppala
2024-07-26 18:59 ` Matthew Brost
2024-07-26 14:08 ` [PATCH 15/21] drm/xe/eudebug: implement userptr_vma access Mika Kuoppala
2024-07-26 18:46 ` Matthew Brost
2024-07-26 18:50 ` Matthew Brost
2024-07-27 1:45 ` Matthew Brost
2024-07-31 11:11 ` [PATCH] fixup! " Andrzej Hajda
2024-07-31 17:51 ` Matthew Brost
2024-08-05 16:54 ` [PATCH v2] " Andrzej Hajda
2024-08-05 19:20 ` Cavitt, Jonathan
2024-08-26 14:40 ` [PATCH v2.5] " Andrzej Hajda
2024-08-26 16:45 ` Andrzej Hajda
2024-08-26 17:02 ` Matthew Brost
2024-08-27 8:41 ` [PATCH v3] " Andrzej Hajda
2024-07-26 14:08 ` [PATCH 16/21] drm/xe: Debug metadata create/destroy ioctls Mika Kuoppala
2024-07-26 14:08 ` [PATCH 17/21] drm/xe: Attach debug metadata to vma Mika Kuoppala
2024-07-26 21:25 ` Matthew Brost
2024-07-26 14:08 ` [PATCH 18/21] drm/xe/eudebug: Add debug metadata support for xe_eudebug Mika Kuoppala
2024-07-26 14:08 ` [PATCH 19/21] drm/xe/eudebug: Implement vm_bind_op discovery Mika Kuoppala
2024-07-27 4:39 ` Matthew Brost
2024-07-26 14:08 ` [PATCH 20/21] drm/xe/eudebug: Dynamically toggle debugger functionality Mika Kuoppala
2024-07-28 4:50 ` Matthew Brost [this message]
2024-07-30 15:01 ` Manszewski, Christoph
2024-07-31 18:03 ` Matthew Brost
2024-08-07 10:09 ` Manszewski, Christoph
2024-07-26 14:08 ` [PATCH 21/21] drm/xe/eudebug_test: Introduce xe_eudebug wa kunit test Mika Kuoppala
2024-07-26 14:32 ` ✓ CI.Patch_applied: success for GPU debug support (eudebug) Patchwork
2024-07-26 14:33 ` ✗ CI.checkpatch: warning " Patchwork
2024-07-26 14:34 ` ✓ CI.KUnit: success " Patchwork
2024-07-26 14:46 ` ✓ CI.Build: " Patchwork
2024-07-26 14:48 ` ✗ CI.Hooks: failure " Patchwork
2024-07-26 14:49 ` ✓ CI.checksparse: success " Patchwork
2024-07-26 15:10 ` ✓ CI.BAT: " Patchwork
2024-07-27 2:37 ` ✓ CI.FULL: " Patchwork
2024-07-27 5:23 ` [PATCH 00/21] " Matthew Brost
2024-07-29 8:27 ` Gwan-gyeong Mun
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=ZqXOF3ACeHABbCPj@DUT025-TGLU.fm.intel.com \
--to=matthew.brost@intel.com \
--cc=christoph.manszewski@intel.com \
--cc=dominik.grzegorzek@intel.com \
--cc=intel-xe@lists.freedesktop.org \
--cc=maciej.patelczyk@intel.com \
--cc=mika.kuoppala@linux.intel.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.