From: kernel test robot <lkp@intel.com>
To: Ashley Smith <ashley.smith@collabora.com>,
Boris Brezillon <bbrezillon@kernel.org>,
Steven Price <steven.price@arm.com>,
Liviu Dudau <liviu.dudau@arm.com>,
Maarten Lankhorst <maarten.lankhorst@linux.intel.com>,
Maxime Ripard <mripard@kernel.org>,
Thomas Zimmermann <tzimmermann@suse.de>,
David Airlie <airlied@gmail.com>, Simona Vetter <simona@ffwll.ch>
Cc: oe-kbuild-all@lists.linux.dev, kernel@collabora.com,
Ashley Smith <ashley.smith@collabora.com>,
dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] drm/panthor: Reset queue slots if termination fails
Date: Fri, 16 May 2025 14:34:45 +0800 [thread overview]
Message-ID: <202505161417.tAUp1jmc-lkp@intel.com> (raw)
In-Reply-To: <20250515103314.1682471-1-ashley.smith@collabora.com>
Hi Ashley,
kernel test robot noticed the following build errors:
[auto build test ERROR on 9934ab18051118385c7ea44d8e14175edbe6dc9c]
url: https://github.com/intel-lab-lkp/linux/commits/Ashley-Smith/drm-panthor-Reset-queue-slots-if-termination-fails/20250515-183502
base: 9934ab18051118385c7ea44d8e14175edbe6dc9c
patch link: https://lore.kernel.org/r/20250515103314.1682471-1-ashley.smith%40collabora.com
patch subject: [PATCH] drm/panthor: Reset queue slots if termination fails
config: sparc-randconfig-002-20250516 (https://download.01.org/0day-ci/archive/20250516/202505161417.tAUp1jmc-lkp@intel.com/config)
compiler: sparc64-linux-gcc (GCC) 8.5.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250516/202505161417.tAUp1jmc-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202505161417.tAUp1jmc-lkp@intel.com/
All errors (new ones prefixed by >>):
drivers/gpu/drm/panthor/panthor_sched.c: In function 'panthor_sched_suspend':
>> drivers/gpu/drm/panthor/panthor_sched.c:2736:18: error: expected ';' before 'queue_count'
for (i = 0; i queue_count; i++) {
^~~~~~~~~~~~
;
vim +2736 drivers/gpu/drm/panthor/panthor_sched.c
2666
2667 void panthor_sched_suspend(struct panthor_device *ptdev)
2668 {
2669 struct panthor_scheduler *sched = ptdev->scheduler;
2670 struct panthor_csg_slots_upd_ctx upd_ctx;
2671 struct panthor_group *group;
2672 u32 suspended_slots;
2673 u32 i;
2674
2675 mutex_lock(&sched->lock);
2676 csgs_upd_ctx_init(&upd_ctx);
2677 for (i = 0; i < sched->csg_slot_count; i++) {
2678 struct panthor_csg_slot *csg_slot = &sched->csg_slots[i];
2679
2680 if (csg_slot->group) {
2681 csgs_upd_ctx_queue_reqs(ptdev, &upd_ctx, i,
2682 group_can_run(csg_slot->group) ?
2683 CSG_STATE_SUSPEND : CSG_STATE_TERMINATE,
2684 CSG_STATE_MASK);
2685 }
2686 }
2687
2688 suspended_slots = upd_ctx.update_mask;
2689
2690 csgs_upd_ctx_apply_locked(ptdev, &upd_ctx);
2691 suspended_slots &= ~upd_ctx.timedout_mask;
2692
2693 if (upd_ctx.timedout_mask) {
2694 u32 slot_mask = upd_ctx.timedout_mask;
2695
2696 drm_err(&ptdev->base, "CSG suspend failed, escalating to termination");
2697 csgs_upd_ctx_init(&upd_ctx);
2698 while (slot_mask) {
2699 u32 csg_id = ffs(slot_mask) - 1;
2700 struct panthor_csg_slot *csg_slot = &sched->csg_slots[csg_id];
2701
2702 /* If the group was still usable before that point, we consider
2703 * it innocent.
2704 */
2705 if (group_can_run(csg_slot->group))
2706 csg_slot->group->innocent = true;
2707
2708 /* We consider group suspension failures as fatal and flag the
2709 * group as unusable by setting timedout=true.
2710 */
2711 csg_slot->group->timedout = true;
2712
2713 csgs_upd_ctx_queue_reqs(ptdev, &upd_ctx, csg_id,
2714 CSG_STATE_TERMINATE,
2715 CSG_STATE_MASK);
2716 slot_mask &= ~BIT(csg_id);
2717 }
2718
2719 csgs_upd_ctx_apply_locked(ptdev, &upd_ctx);
2720
2721 slot_mask = upd_ctx.timedout_mask;
2722 while (slot_mask) {
2723 u32 csg_id = ffs(slot_mask) - 1;
2724 struct panthor_csg_slot *csg_slot = &sched->csg_slots[csg_id];
2725
2726 /* Terminate command timedout, but the soft-reset will
2727 * automatically terminate all active groups, so let's
2728 * force the state to halted here.
2729 */
2730 if (csg_slot->group->state != PANTHOR_CS_GROUP_TERMINATED) {
2731 csg_slot->group->state = PANTHOR_CS_GROUP_TERMINATED;
2732
2733 /* Reset the queue slots manually if the termination
2734 * request failed.
2735 */
> 2736 for (i = 0; i queue_count; i++) {
2737 if (group->queues[i])
2738 cs_slot_reset_locked(ptdev, csg_id, i);
2739 }
2740 }
2741 slot_mask &= ~BIT(csg_id);
2742 }
2743 }
2744
2745 /* Flush L2 and LSC caches to make sure suspend state is up-to-date.
2746 * If the flush fails, flag all queues for termination.
2747 */
2748 if (suspended_slots) {
2749 bool flush_caches_failed = false;
2750 u32 slot_mask = suspended_slots;
2751
2752 if (panthor_gpu_flush_caches(ptdev, CACHE_CLEAN, CACHE_CLEAN, 0))
2753 flush_caches_failed = true;
2754
2755 while (slot_mask) {
2756 u32 csg_id = ffs(slot_mask) - 1;
2757 struct panthor_csg_slot *csg_slot = &sched->csg_slots[csg_id];
2758
2759 if (flush_caches_failed)
2760 csg_slot->group->state = PANTHOR_CS_GROUP_TERMINATED;
2761 else
2762 csg_slot_sync_update_locked(ptdev, csg_id);
2763
2764 slot_mask &= ~BIT(csg_id);
2765 }
2766 }
2767
2768 for (i = 0; i < sched->csg_slot_count; i++) {
2769 struct panthor_csg_slot *csg_slot = &sched->csg_slots[i];
2770
2771 group = csg_slot->group;
2772 if (!group)
2773 continue;
2774
2775 group_get(group);
2776
2777 if (group->csg_id >= 0)
2778 sched_process_csg_irq_locked(ptdev, group->csg_id);
2779
2780 group_unbind_locked(group);
2781
2782 drm_WARN_ON(&group->ptdev->base, !list_empty(&group->run_node));
2783
2784 if (group_can_run(group)) {
2785 list_add(&group->run_node,
2786 &sched->groups.idle[group->priority]);
2787 } else {
2788 /* We don't bother stopping the scheduler if the group is
2789 * faulty, the group termination work will finish the job.
2790 */
2791 list_del_init(&group->wait_node);
2792 group_queue_work(group, term);
2793 }
2794 group_put(group);
2795 }
2796 mutex_unlock(&sched->lock);
2797 }
2798
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
prev parent reply other threads:[~2025-05-16 6:35 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-05-15 10:33 [PATCH] drm/panthor: Reset queue slots if termination fails Ashley Smith
2025-05-15 10:42 ` Boris Brezillon
2025-05-15 15:38 ` Steven Price
2025-05-16 6:34 ` kernel test robot [this message]
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=202505161417.tAUp1jmc-lkp@intel.com \
--to=lkp@intel.com \
--cc=airlied@gmail.com \
--cc=ashley.smith@collabora.com \
--cc=bbrezillon@kernel.org \
--cc=dri-devel@lists.freedesktop.org \
--cc=kernel@collabora.com \
--cc=linux-kernel@vger.kernel.org \
--cc=liviu.dudau@arm.com \
--cc=maarten.lankhorst@linux.intel.com \
--cc=mripard@kernel.org \
--cc=oe-kbuild-all@lists.linux.dev \
--cc=simona@ffwll.ch \
--cc=steven.price@arm.com \
--cc=tzimmermann@suse.de \
/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.