[PATCH] drm/panthor: Make the timeout per-queue instead of per-job
kernel test robot
lkp at intel.com
Sat Mar 8 15:31:42 UTC 2025
Hi Ashley,
kernel test robot noticed the following build warnings:
[auto build test WARNING on b72f66f22c0e39ae6684c43fead774c13db24e73]
url: https://github.com/intel-lab-lkp/linux/commits/Ashley-Smith/drm-panthor-Make-the-timeout-per-queue-instead-of-per-job/20250307-235830
base: b72f66f22c0e39ae6684c43fead774c13db24e73
patch link: https://lore.kernel.org/r/20250307155556.173494-1-ashley.smith%40collabora.com
patch subject: [PATCH] drm/panthor: Make the timeout per-queue instead of per-job
config: i386-buildonly-randconfig-004-20250308 (https://download.01.org/0day-ci/archive/20250308/202503082339.3TzIrrex-lkp@intel.com/config)
compiler: clang version 19.1.7 (https://github.com/llvm/llvm-project cd708029e0b2869e80abe31ddb175f7c35361f90)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250308/202503082339.3TzIrrex-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 at intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202503082339.3TzIrrex-lkp@intel.com/
All warnings (new ones prefixed by >>):
drivers/gpu/drm/panthor/panthor_sched.c:318: warning: Excess struct member 'runnable' description in 'panthor_scheduler'
drivers/gpu/drm/panthor/panthor_sched.c:318: warning: Excess struct member 'idle' description in 'panthor_scheduler'
drivers/gpu/drm/panthor/panthor_sched.c:318: warning: Excess struct member 'waiting' description in 'panthor_scheduler'
drivers/gpu/drm/panthor/panthor_sched.c:318: warning: Excess struct member 'has_ref' description in 'panthor_scheduler'
drivers/gpu/drm/panthor/panthor_sched.c:318: warning: Excess struct member 'in_progress' description in 'panthor_scheduler'
drivers/gpu/drm/panthor/panthor_sched.c:318: warning: Excess struct member 'stopped_groups' description in 'panthor_scheduler'
>> drivers/gpu/drm/panthor/panthor_sched.c:493: warning: Excess struct member 'remaining' description in 'panthor_queue'
drivers/gpu/drm/panthor/panthor_sched.c:493: warning: Excess struct member 'mem' description in 'panthor_queue'
drivers/gpu/drm/panthor/panthor_sched.c:493: warning: Excess struct member 'input' description in 'panthor_queue'
drivers/gpu/drm/panthor/panthor_sched.c:493: warning: Excess struct member 'output' description in 'panthor_queue'
drivers/gpu/drm/panthor/panthor_sched.c:493: warning: Excess struct member 'input_fw_va' description in 'panthor_queue'
drivers/gpu/drm/panthor/panthor_sched.c:493: warning: Excess struct member 'output_fw_va' description in 'panthor_queue'
drivers/gpu/drm/panthor/panthor_sched.c:493: warning: Excess struct member 'gpu_va' description in 'panthor_queue'
drivers/gpu/drm/panthor/panthor_sched.c:493: warning: Excess struct member 'ref' description in 'panthor_queue'
drivers/gpu/drm/panthor/panthor_sched.c:493: warning: Excess struct member 'gt' description in 'panthor_queue'
drivers/gpu/drm/panthor/panthor_sched.c:493: warning: Excess struct member 'sync64' description in 'panthor_queue'
drivers/gpu/drm/panthor/panthor_sched.c:493: warning: Excess struct member 'bo' description in 'panthor_queue'
drivers/gpu/drm/panthor/panthor_sched.c:493: warning: Excess struct member 'offset' description in 'panthor_queue'
drivers/gpu/drm/panthor/panthor_sched.c:493: warning: Excess struct member 'kmap' description in 'panthor_queue'
drivers/gpu/drm/panthor/panthor_sched.c:493: warning: Excess struct member 'lock' description in 'panthor_queue'
drivers/gpu/drm/panthor/panthor_sched.c:493: warning: Excess struct member 'id' description in 'panthor_queue'
drivers/gpu/drm/panthor/panthor_sched.c:493: warning: Excess struct member 'seqno' description in 'panthor_queue'
drivers/gpu/drm/panthor/panthor_sched.c:493: warning: Excess struct member 'last_fence' description in 'panthor_queue'
drivers/gpu/drm/panthor/panthor_sched.c:493: warning: Excess struct member 'in_flight_jobs' description in 'panthor_queue'
drivers/gpu/drm/panthor/panthor_sched.c:493: warning: Excess struct member 'slots' description in 'panthor_queue'
drivers/gpu/drm/panthor/panthor_sched.c:493: warning: Excess struct member 'slot_count' description in 'panthor_queue'
drivers/gpu/drm/panthor/panthor_sched.c:493: warning: Excess struct member 'seqno' description in 'panthor_queue'
drivers/gpu/drm/panthor/panthor_sched.c:702: warning: Excess struct member 'data' description in 'panthor_group'
drivers/gpu/drm/panthor/panthor_sched.c:838: warning: Excess struct member 'start' description in 'panthor_job'
drivers/gpu/drm/panthor/panthor_sched.c:838: warning: Excess struct member 'size' description in 'panthor_job'
drivers/gpu/drm/panthor/panthor_sched.c:838: warning: Excess struct member 'latest_flush' description in 'panthor_job'
drivers/gpu/drm/panthor/panthor_sched.c:838: warning: Excess struct member 'start' description in 'panthor_job'
drivers/gpu/drm/panthor/panthor_sched.c:838: warning: Excess struct member 'end' description in 'panthor_job'
drivers/gpu/drm/panthor/panthor_sched.c:838: warning: Excess struct member 'mask' description in 'panthor_job'
drivers/gpu/drm/panthor/panthor_sched.c:838: warning: Excess struct member 'slot' description in 'panthor_job'
drivers/gpu/drm/panthor/panthor_sched.c:1832: warning: Function parameter or struct member 'ptdev' not described in 'panthor_sched_report_fw_events'
drivers/gpu/drm/panthor/panthor_sched.c:1832: warning: Function parameter or struct member 'events' not described in 'panthor_sched_report_fw_events'
drivers/gpu/drm/panthor/panthor_sched.c:2712: warning: Function parameter or struct member 'ptdev' not described in 'panthor_sched_report_mmu_fault'
vim +493 drivers/gpu/drm/panthor/panthor_sched.c
de85488138247d0 Boris Brezillon 2024-02-29 147
de85488138247d0 Boris Brezillon 2024-02-29 148 /**
de85488138247d0 Boris Brezillon 2024-02-29 149 * struct panthor_scheduler - Object used to manage the scheduler
de85488138247d0 Boris Brezillon 2024-02-29 150 */
de85488138247d0 Boris Brezillon 2024-02-29 151 struct panthor_scheduler {
de85488138247d0 Boris Brezillon 2024-02-29 152 /** @ptdev: Device. */
de85488138247d0 Boris Brezillon 2024-02-29 153 struct panthor_device *ptdev;
de85488138247d0 Boris Brezillon 2024-02-29 154
de85488138247d0 Boris Brezillon 2024-02-29 155 /**
de85488138247d0 Boris Brezillon 2024-02-29 156 * @wq: Workqueue used by our internal scheduler logic and
de85488138247d0 Boris Brezillon 2024-02-29 157 * drm_gpu_scheduler.
de85488138247d0 Boris Brezillon 2024-02-29 158 *
de85488138247d0 Boris Brezillon 2024-02-29 159 * Used for the scheduler tick, group update or other kind of FW
de85488138247d0 Boris Brezillon 2024-02-29 160 * event processing that can't be handled in the threaded interrupt
de85488138247d0 Boris Brezillon 2024-02-29 161 * path. Also passed to the drm_gpu_scheduler instances embedded
de85488138247d0 Boris Brezillon 2024-02-29 162 * in panthor_queue.
de85488138247d0 Boris Brezillon 2024-02-29 163 */
de85488138247d0 Boris Brezillon 2024-02-29 164 struct workqueue_struct *wq;
de85488138247d0 Boris Brezillon 2024-02-29 165
de85488138247d0 Boris Brezillon 2024-02-29 166 /**
de85488138247d0 Boris Brezillon 2024-02-29 167 * @heap_alloc_wq: Workqueue used to schedule tiler_oom works.
de85488138247d0 Boris Brezillon 2024-02-29 168 *
de85488138247d0 Boris Brezillon 2024-02-29 169 * We have a queue dedicated to heap chunk allocation works to avoid
de85488138247d0 Boris Brezillon 2024-02-29 170 * blocking the rest of the scheduler if the allocation tries to
de85488138247d0 Boris Brezillon 2024-02-29 171 * reclaim memory.
de85488138247d0 Boris Brezillon 2024-02-29 172 */
de85488138247d0 Boris Brezillon 2024-02-29 173 struct workqueue_struct *heap_alloc_wq;
de85488138247d0 Boris Brezillon 2024-02-29 174
de85488138247d0 Boris Brezillon 2024-02-29 175 /** @tick_work: Work executed on a scheduling tick. */
de85488138247d0 Boris Brezillon 2024-02-29 176 struct delayed_work tick_work;
de85488138247d0 Boris Brezillon 2024-02-29 177
de85488138247d0 Boris Brezillon 2024-02-29 178 /**
de85488138247d0 Boris Brezillon 2024-02-29 179 * @sync_upd_work: Work used to process synchronization object updates.
de85488138247d0 Boris Brezillon 2024-02-29 180 *
de85488138247d0 Boris Brezillon 2024-02-29 181 * We use this work to unblock queues/groups that were waiting on a
de85488138247d0 Boris Brezillon 2024-02-29 182 * synchronization object.
de85488138247d0 Boris Brezillon 2024-02-29 183 */
de85488138247d0 Boris Brezillon 2024-02-29 184 struct work_struct sync_upd_work;
de85488138247d0 Boris Brezillon 2024-02-29 185
de85488138247d0 Boris Brezillon 2024-02-29 186 /**
de85488138247d0 Boris Brezillon 2024-02-29 187 * @fw_events_work: Work used to process FW events outside the interrupt path.
de85488138247d0 Boris Brezillon 2024-02-29 188 *
de85488138247d0 Boris Brezillon 2024-02-29 189 * Even if the interrupt is threaded, we need any event processing
de85488138247d0 Boris Brezillon 2024-02-29 190 * that require taking the panthor_scheduler::lock to be processed
de85488138247d0 Boris Brezillon 2024-02-29 191 * outside the interrupt path so we don't block the tick logic when
de85488138247d0 Boris Brezillon 2024-02-29 192 * it calls panthor_fw_{csg,wait}_wait_acks(). Since most of the
de85488138247d0 Boris Brezillon 2024-02-29 193 * event processing requires taking this lock, we just delegate all
de85488138247d0 Boris Brezillon 2024-02-29 194 * FW event processing to the scheduler workqueue.
de85488138247d0 Boris Brezillon 2024-02-29 195 */
de85488138247d0 Boris Brezillon 2024-02-29 196 struct work_struct fw_events_work;
de85488138247d0 Boris Brezillon 2024-02-29 197
de85488138247d0 Boris Brezillon 2024-02-29 198 /**
de85488138247d0 Boris Brezillon 2024-02-29 199 * @fw_events: Bitmask encoding pending FW events.
de85488138247d0 Boris Brezillon 2024-02-29 200 */
de85488138247d0 Boris Brezillon 2024-02-29 201 atomic_t fw_events;
de85488138247d0 Boris Brezillon 2024-02-29 202
de85488138247d0 Boris Brezillon 2024-02-29 203 /**
de85488138247d0 Boris Brezillon 2024-02-29 204 * @resched_target: When the next tick should occur.
de85488138247d0 Boris Brezillon 2024-02-29 205 *
de85488138247d0 Boris Brezillon 2024-02-29 206 * Expressed in jiffies.
de85488138247d0 Boris Brezillon 2024-02-29 207 */
de85488138247d0 Boris Brezillon 2024-02-29 208 u64 resched_target;
de85488138247d0 Boris Brezillon 2024-02-29 209
de85488138247d0 Boris Brezillon 2024-02-29 210 /**
de85488138247d0 Boris Brezillon 2024-02-29 211 * @last_tick: When the last tick occurred.
de85488138247d0 Boris Brezillon 2024-02-29 212 *
de85488138247d0 Boris Brezillon 2024-02-29 213 * Expressed in jiffies.
de85488138247d0 Boris Brezillon 2024-02-29 214 */
de85488138247d0 Boris Brezillon 2024-02-29 215 u64 last_tick;
de85488138247d0 Boris Brezillon 2024-02-29 216
de85488138247d0 Boris Brezillon 2024-02-29 217 /** @tick_period: Tick period in jiffies. */
de85488138247d0 Boris Brezillon 2024-02-29 218 u64 tick_period;
de85488138247d0 Boris Brezillon 2024-02-29 219
de85488138247d0 Boris Brezillon 2024-02-29 220 /**
de85488138247d0 Boris Brezillon 2024-02-29 221 * @lock: Lock protecting access to all the scheduler fields.
de85488138247d0 Boris Brezillon 2024-02-29 222 *
de85488138247d0 Boris Brezillon 2024-02-29 223 * Should be taken in the tick work, the irq handler, and anywhere the @groups
de85488138247d0 Boris Brezillon 2024-02-29 224 * fields are touched.
de85488138247d0 Boris Brezillon 2024-02-29 225 */
de85488138247d0 Boris Brezillon 2024-02-29 226 struct mutex lock;
de85488138247d0 Boris Brezillon 2024-02-29 227
de85488138247d0 Boris Brezillon 2024-02-29 228 /** @groups: Various lists used to classify groups. */
de85488138247d0 Boris Brezillon 2024-02-29 229 struct {
de85488138247d0 Boris Brezillon 2024-02-29 230 /**
de85488138247d0 Boris Brezillon 2024-02-29 231 * @runnable: Runnable group lists.
de85488138247d0 Boris Brezillon 2024-02-29 232 *
de85488138247d0 Boris Brezillon 2024-02-29 233 * When a group has queues that want to execute something,
de85488138247d0 Boris Brezillon 2024-02-29 234 * its panthor_group::run_node should be inserted here.
de85488138247d0 Boris Brezillon 2024-02-29 235 *
de85488138247d0 Boris Brezillon 2024-02-29 236 * One list per-priority.
de85488138247d0 Boris Brezillon 2024-02-29 237 */
de85488138247d0 Boris Brezillon 2024-02-29 238 struct list_head runnable[PANTHOR_CSG_PRIORITY_COUNT];
de85488138247d0 Boris Brezillon 2024-02-29 239
de85488138247d0 Boris Brezillon 2024-02-29 240 /**
de85488138247d0 Boris Brezillon 2024-02-29 241 * @idle: Idle group lists.
de85488138247d0 Boris Brezillon 2024-02-29 242 *
de85488138247d0 Boris Brezillon 2024-02-29 243 * When all queues of a group are idle (either because they
de85488138247d0 Boris Brezillon 2024-02-29 244 * have nothing to execute, or because they are blocked), the
de85488138247d0 Boris Brezillon 2024-02-29 245 * panthor_group::run_node field should be inserted here.
de85488138247d0 Boris Brezillon 2024-02-29 246 *
de85488138247d0 Boris Brezillon 2024-02-29 247 * One list per-priority.
de85488138247d0 Boris Brezillon 2024-02-29 248 */
de85488138247d0 Boris Brezillon 2024-02-29 249 struct list_head idle[PANTHOR_CSG_PRIORITY_COUNT];
de85488138247d0 Boris Brezillon 2024-02-29 250
de85488138247d0 Boris Brezillon 2024-02-29 251 /**
de85488138247d0 Boris Brezillon 2024-02-29 252 * @waiting: List of groups whose queues are blocked on a
de85488138247d0 Boris Brezillon 2024-02-29 253 * synchronization object.
de85488138247d0 Boris Brezillon 2024-02-29 254 *
de85488138247d0 Boris Brezillon 2024-02-29 255 * Insert panthor_group::wait_node here when a group is waiting
de85488138247d0 Boris Brezillon 2024-02-29 256 * for synchronization objects to be signaled.
de85488138247d0 Boris Brezillon 2024-02-29 257 *
de85488138247d0 Boris Brezillon 2024-02-29 258 * This list is evaluated in the @sync_upd_work work.
de85488138247d0 Boris Brezillon 2024-02-29 259 */
de85488138247d0 Boris Brezillon 2024-02-29 260 struct list_head waiting;
de85488138247d0 Boris Brezillon 2024-02-29 261 } groups;
de85488138247d0 Boris Brezillon 2024-02-29 262
de85488138247d0 Boris Brezillon 2024-02-29 263 /**
de85488138247d0 Boris Brezillon 2024-02-29 264 * @csg_slots: FW command stream group slots.
de85488138247d0 Boris Brezillon 2024-02-29 265 */
de85488138247d0 Boris Brezillon 2024-02-29 266 struct panthor_csg_slot csg_slots[MAX_CSGS];
de85488138247d0 Boris Brezillon 2024-02-29 267
de85488138247d0 Boris Brezillon 2024-02-29 268 /** @csg_slot_count: Number of command stream group slots exposed by the FW. */
de85488138247d0 Boris Brezillon 2024-02-29 269 u32 csg_slot_count;
de85488138247d0 Boris Brezillon 2024-02-29 270
de85488138247d0 Boris Brezillon 2024-02-29 271 /** @cs_slot_count: Number of command stream slot per group slot exposed by the FW. */
de85488138247d0 Boris Brezillon 2024-02-29 272 u32 cs_slot_count;
de85488138247d0 Boris Brezillon 2024-02-29 273
de85488138247d0 Boris Brezillon 2024-02-29 274 /** @as_slot_count: Number of address space slots supported by the MMU. */
de85488138247d0 Boris Brezillon 2024-02-29 275 u32 as_slot_count;
de85488138247d0 Boris Brezillon 2024-02-29 276
de85488138247d0 Boris Brezillon 2024-02-29 277 /** @used_csg_slot_count: Number of command stream group slot currently used. */
de85488138247d0 Boris Brezillon 2024-02-29 278 u32 used_csg_slot_count;
de85488138247d0 Boris Brezillon 2024-02-29 279
de85488138247d0 Boris Brezillon 2024-02-29 280 /** @sb_slot_count: Number of scoreboard slots. */
de85488138247d0 Boris Brezillon 2024-02-29 281 u32 sb_slot_count;
de85488138247d0 Boris Brezillon 2024-02-29 282
de85488138247d0 Boris Brezillon 2024-02-29 283 /**
de85488138247d0 Boris Brezillon 2024-02-29 284 * @might_have_idle_groups: True if an active group might have become idle.
de85488138247d0 Boris Brezillon 2024-02-29 285 *
de85488138247d0 Boris Brezillon 2024-02-29 286 * This will force a tick, so other runnable groups can be scheduled if one
de85488138247d0 Boris Brezillon 2024-02-29 287 * or more active groups became idle.
de85488138247d0 Boris Brezillon 2024-02-29 288 */
de85488138247d0 Boris Brezillon 2024-02-29 289 bool might_have_idle_groups;
de85488138247d0 Boris Brezillon 2024-02-29 290
de85488138247d0 Boris Brezillon 2024-02-29 291 /** @pm: Power management related fields. */
de85488138247d0 Boris Brezillon 2024-02-29 292 struct {
de85488138247d0 Boris Brezillon 2024-02-29 293 /** @has_ref: True if the scheduler owns a runtime PM reference. */
de85488138247d0 Boris Brezillon 2024-02-29 294 bool has_ref;
de85488138247d0 Boris Brezillon 2024-02-29 295 } pm;
de85488138247d0 Boris Brezillon 2024-02-29 296
de85488138247d0 Boris Brezillon 2024-02-29 297 /** @reset: Reset related fields. */
de85488138247d0 Boris Brezillon 2024-02-29 298 struct {
de85488138247d0 Boris Brezillon 2024-02-29 299 /** @lock: Lock protecting the other reset fields. */
de85488138247d0 Boris Brezillon 2024-02-29 300 struct mutex lock;
de85488138247d0 Boris Brezillon 2024-02-29 301
de85488138247d0 Boris Brezillon 2024-02-29 302 /**
de85488138247d0 Boris Brezillon 2024-02-29 303 * @in_progress: True if a reset is in progress.
de85488138247d0 Boris Brezillon 2024-02-29 304 *
de85488138247d0 Boris Brezillon 2024-02-29 305 * Set to true in panthor_sched_pre_reset() and back to false in
de85488138247d0 Boris Brezillon 2024-02-29 306 * panthor_sched_post_reset().
de85488138247d0 Boris Brezillon 2024-02-29 307 */
de85488138247d0 Boris Brezillon 2024-02-29 308 atomic_t in_progress;
de85488138247d0 Boris Brezillon 2024-02-29 309
de85488138247d0 Boris Brezillon 2024-02-29 310 /**
de85488138247d0 Boris Brezillon 2024-02-29 311 * @stopped_groups: List containing all groups that were stopped
de85488138247d0 Boris Brezillon 2024-02-29 312 * before a reset.
de85488138247d0 Boris Brezillon 2024-02-29 313 *
de85488138247d0 Boris Brezillon 2024-02-29 314 * Insert panthor_group::run_node in the pre_reset path.
de85488138247d0 Boris Brezillon 2024-02-29 315 */
de85488138247d0 Boris Brezillon 2024-02-29 316 struct list_head stopped_groups;
de85488138247d0 Boris Brezillon 2024-02-29 317 } reset;
de85488138247d0 Boris Brezillon 2024-02-29 @318 };
de85488138247d0 Boris Brezillon 2024-02-29 319
de85488138247d0 Boris Brezillon 2024-02-29 320 /**
de85488138247d0 Boris Brezillon 2024-02-29 321 * struct panthor_syncobj_32b - 32-bit FW synchronization object
de85488138247d0 Boris Brezillon 2024-02-29 322 */
de85488138247d0 Boris Brezillon 2024-02-29 323 struct panthor_syncobj_32b {
de85488138247d0 Boris Brezillon 2024-02-29 324 /** @seqno: Sequence number. */
de85488138247d0 Boris Brezillon 2024-02-29 325 u32 seqno;
de85488138247d0 Boris Brezillon 2024-02-29 326
de85488138247d0 Boris Brezillon 2024-02-29 327 /**
de85488138247d0 Boris Brezillon 2024-02-29 328 * @status: Status.
de85488138247d0 Boris Brezillon 2024-02-29 329 *
de85488138247d0 Boris Brezillon 2024-02-29 330 * Not zero on failure.
de85488138247d0 Boris Brezillon 2024-02-29 331 */
de85488138247d0 Boris Brezillon 2024-02-29 332 u32 status;
de85488138247d0 Boris Brezillon 2024-02-29 333 };
de85488138247d0 Boris Brezillon 2024-02-29 334
de85488138247d0 Boris Brezillon 2024-02-29 335 /**
de85488138247d0 Boris Brezillon 2024-02-29 336 * struct panthor_syncobj_64b - 64-bit FW synchronization object
de85488138247d0 Boris Brezillon 2024-02-29 337 */
de85488138247d0 Boris Brezillon 2024-02-29 338 struct panthor_syncobj_64b {
de85488138247d0 Boris Brezillon 2024-02-29 339 /** @seqno: Sequence number. */
de85488138247d0 Boris Brezillon 2024-02-29 340 u64 seqno;
de85488138247d0 Boris Brezillon 2024-02-29 341
de85488138247d0 Boris Brezillon 2024-02-29 342 /**
de85488138247d0 Boris Brezillon 2024-02-29 343 * @status: Status.
de85488138247d0 Boris Brezillon 2024-02-29 344 *
de85488138247d0 Boris Brezillon 2024-02-29 345 * Not zero on failure.
de85488138247d0 Boris Brezillon 2024-02-29 346 */
de85488138247d0 Boris Brezillon 2024-02-29 347 u32 status;
de85488138247d0 Boris Brezillon 2024-02-29 348
de85488138247d0 Boris Brezillon 2024-02-29 349 /** @pad: MBZ. */
de85488138247d0 Boris Brezillon 2024-02-29 350 u32 pad;
de85488138247d0 Boris Brezillon 2024-02-29 351 };
de85488138247d0 Boris Brezillon 2024-02-29 352
de85488138247d0 Boris Brezillon 2024-02-29 353 /**
de85488138247d0 Boris Brezillon 2024-02-29 354 * struct panthor_queue - Execution queue
de85488138247d0 Boris Brezillon 2024-02-29 355 */
de85488138247d0 Boris Brezillon 2024-02-29 356 struct panthor_queue {
de85488138247d0 Boris Brezillon 2024-02-29 357 /** @scheduler: DRM scheduler used for this queue. */
de85488138247d0 Boris Brezillon 2024-02-29 358 struct drm_gpu_scheduler scheduler;
de85488138247d0 Boris Brezillon 2024-02-29 359
de85488138247d0 Boris Brezillon 2024-02-29 360 /** @entity: DRM scheduling entity used for this queue. */
de85488138247d0 Boris Brezillon 2024-02-29 361 struct drm_sched_entity entity;
de85488138247d0 Boris Brezillon 2024-02-29 362
b571025809e4350 Ashley Smith 2025-03-07 363 /** @timeout: Queue timeout related fields. */
b571025809e4350 Ashley Smith 2025-03-07 364 struct {
b571025809e4350 Ashley Smith 2025-03-07 365 /** @timeout.work: Work executed when a queue timeout occurs. */
b571025809e4350 Ashley Smith 2025-03-07 366 struct delayed_work work;
b571025809e4350 Ashley Smith 2025-03-07 367
de85488138247d0 Boris Brezillon 2024-02-29 368 /**
b571025809e4350 Ashley Smith 2025-03-07 369 * @remaining: Time remaining before a queue timeout.
de85488138247d0 Boris Brezillon 2024-02-29 370 *
b571025809e4350 Ashley Smith 2025-03-07 371 * When the timer is running, this value is set to MAX_SCHEDULE_TIMEOUT.
b571025809e4350 Ashley Smith 2025-03-07 372 * When the timer is suspended, it's set to the time remaining when the
b571025809e4350 Ashley Smith 2025-03-07 373 * timer was suspended.
de85488138247d0 Boris Brezillon 2024-02-29 374 */
b571025809e4350 Ashley Smith 2025-03-07 375 unsigned long remaining;
b571025809e4350 Ashley Smith 2025-03-07 376 } timeout;
de85488138247d0 Boris Brezillon 2024-02-29 377
de85488138247d0 Boris Brezillon 2024-02-29 378 /**
de85488138247d0 Boris Brezillon 2024-02-29 379 * @doorbell_id: Doorbell assigned to this queue.
de85488138247d0 Boris Brezillon 2024-02-29 380 *
de85488138247d0 Boris Brezillon 2024-02-29 381 * Right now, all groups share the same doorbell, and the doorbell ID
de85488138247d0 Boris Brezillon 2024-02-29 382 * is assigned to group_slot + 1 when the group is assigned a slot. But
de85488138247d0 Boris Brezillon 2024-02-29 383 * we might decide to provide fine grained doorbell assignment at some
de85488138247d0 Boris Brezillon 2024-02-29 384 * point, so don't have to wake up all queues in a group every time one
de85488138247d0 Boris Brezillon 2024-02-29 385 * of them is updated.
de85488138247d0 Boris Brezillon 2024-02-29 386 */
de85488138247d0 Boris Brezillon 2024-02-29 387 u8 doorbell_id;
de85488138247d0 Boris Brezillon 2024-02-29 388
de85488138247d0 Boris Brezillon 2024-02-29 389 /**
de85488138247d0 Boris Brezillon 2024-02-29 390 * @priority: Priority of the queue inside the group.
de85488138247d0 Boris Brezillon 2024-02-29 391 *
de85488138247d0 Boris Brezillon 2024-02-29 392 * Must be less than 16 (Only 4 bits available).
de85488138247d0 Boris Brezillon 2024-02-29 393 */
de85488138247d0 Boris Brezillon 2024-02-29 394 u8 priority;
de85488138247d0 Boris Brezillon 2024-02-29 395 #define CSF_MAX_QUEUE_PRIO GENMASK(3, 0)
de85488138247d0 Boris Brezillon 2024-02-29 396
de85488138247d0 Boris Brezillon 2024-02-29 397 /** @ringbuf: Command stream ring-buffer. */
de85488138247d0 Boris Brezillon 2024-02-29 398 struct panthor_kernel_bo *ringbuf;
de85488138247d0 Boris Brezillon 2024-02-29 399
de85488138247d0 Boris Brezillon 2024-02-29 400 /** @iface: Firmware interface. */
de85488138247d0 Boris Brezillon 2024-02-29 401 struct {
de85488138247d0 Boris Brezillon 2024-02-29 402 /** @mem: FW memory allocated for this interface. */
de85488138247d0 Boris Brezillon 2024-02-29 403 struct panthor_kernel_bo *mem;
de85488138247d0 Boris Brezillon 2024-02-29 404
de85488138247d0 Boris Brezillon 2024-02-29 405 /** @input: Input interface. */
de85488138247d0 Boris Brezillon 2024-02-29 406 struct panthor_fw_ringbuf_input_iface *input;
de85488138247d0 Boris Brezillon 2024-02-29 407
de85488138247d0 Boris Brezillon 2024-02-29 408 /** @output: Output interface. */
de85488138247d0 Boris Brezillon 2024-02-29 409 const struct panthor_fw_ringbuf_output_iface *output;
de85488138247d0 Boris Brezillon 2024-02-29 410
de85488138247d0 Boris Brezillon 2024-02-29 411 /** @input_fw_va: FW virtual address of the input interface buffer. */
de85488138247d0 Boris Brezillon 2024-02-29 412 u32 input_fw_va;
de85488138247d0 Boris Brezillon 2024-02-29 413
de85488138247d0 Boris Brezillon 2024-02-29 414 /** @output_fw_va: FW virtual address of the output interface buffer. */
de85488138247d0 Boris Brezillon 2024-02-29 415 u32 output_fw_va;
de85488138247d0 Boris Brezillon 2024-02-29 416 } iface;
de85488138247d0 Boris Brezillon 2024-02-29 417
de85488138247d0 Boris Brezillon 2024-02-29 418 /**
de85488138247d0 Boris Brezillon 2024-02-29 419 * @syncwait: Stores information about the synchronization object this
de85488138247d0 Boris Brezillon 2024-02-29 420 * queue is waiting on.
de85488138247d0 Boris Brezillon 2024-02-29 421 */
de85488138247d0 Boris Brezillon 2024-02-29 422 struct {
de85488138247d0 Boris Brezillon 2024-02-29 423 /** @gpu_va: GPU address of the synchronization object. */
de85488138247d0 Boris Brezillon 2024-02-29 424 u64 gpu_va;
de85488138247d0 Boris Brezillon 2024-02-29 425
de85488138247d0 Boris Brezillon 2024-02-29 426 /** @ref: Reference value to compare against. */
de85488138247d0 Boris Brezillon 2024-02-29 427 u64 ref;
de85488138247d0 Boris Brezillon 2024-02-29 428
de85488138247d0 Boris Brezillon 2024-02-29 429 /** @gt: True if this is a greater-than test. */
de85488138247d0 Boris Brezillon 2024-02-29 430 bool gt;
de85488138247d0 Boris Brezillon 2024-02-29 431
de85488138247d0 Boris Brezillon 2024-02-29 432 /** @sync64: True if this is a 64-bit sync object. */
de85488138247d0 Boris Brezillon 2024-02-29 433 bool sync64;
de85488138247d0 Boris Brezillon 2024-02-29 434
de85488138247d0 Boris Brezillon 2024-02-29 435 /** @bo: Buffer object holding the synchronization object. */
de85488138247d0 Boris Brezillon 2024-02-29 436 struct drm_gem_object *obj;
de85488138247d0 Boris Brezillon 2024-02-29 437
de85488138247d0 Boris Brezillon 2024-02-29 438 /** @offset: Offset of the synchronization object inside @bo. */
de85488138247d0 Boris Brezillon 2024-02-29 439 u64 offset;
de85488138247d0 Boris Brezillon 2024-02-29 440
de85488138247d0 Boris Brezillon 2024-02-29 441 /**
de85488138247d0 Boris Brezillon 2024-02-29 442 * @kmap: Kernel mapping of the buffer object holding the
de85488138247d0 Boris Brezillon 2024-02-29 443 * synchronization object.
de85488138247d0 Boris Brezillon 2024-02-29 444 */
de85488138247d0 Boris Brezillon 2024-02-29 445 void *kmap;
de85488138247d0 Boris Brezillon 2024-02-29 446 } syncwait;
de85488138247d0 Boris Brezillon 2024-02-29 447
de85488138247d0 Boris Brezillon 2024-02-29 448 /** @fence_ctx: Fence context fields. */
de85488138247d0 Boris Brezillon 2024-02-29 449 struct {
de85488138247d0 Boris Brezillon 2024-02-29 450 /** @lock: Used to protect access to all fences allocated by this context. */
de85488138247d0 Boris Brezillon 2024-02-29 451 spinlock_t lock;
de85488138247d0 Boris Brezillon 2024-02-29 452
de85488138247d0 Boris Brezillon 2024-02-29 453 /**
de85488138247d0 Boris Brezillon 2024-02-29 454 * @id: Fence context ID.
de85488138247d0 Boris Brezillon 2024-02-29 455 *
de85488138247d0 Boris Brezillon 2024-02-29 456 * Allocated with dma_fence_context_alloc().
de85488138247d0 Boris Brezillon 2024-02-29 457 */
de85488138247d0 Boris Brezillon 2024-02-29 458 u64 id;
de85488138247d0 Boris Brezillon 2024-02-29 459
de85488138247d0 Boris Brezillon 2024-02-29 460 /** @seqno: Sequence number of the last initialized fence. */
de85488138247d0 Boris Brezillon 2024-02-29 461 atomic64_t seqno;
de85488138247d0 Boris Brezillon 2024-02-29 462
7b6f9ec6ad51125 Boris Brezillon 2024-07-03 463 /**
7b6f9ec6ad51125 Boris Brezillon 2024-07-03 464 * @last_fence: Fence of the last submitted job.
7b6f9ec6ad51125 Boris Brezillon 2024-07-03 465 *
7b6f9ec6ad51125 Boris Brezillon 2024-07-03 466 * We return this fence when we get an empty command stream.
7b6f9ec6ad51125 Boris Brezillon 2024-07-03 467 * This way, we are guaranteed that all earlier jobs have completed
7b6f9ec6ad51125 Boris Brezillon 2024-07-03 468 * when drm_sched_job::s_fence::finished without having to feed
7b6f9ec6ad51125 Boris Brezillon 2024-07-03 469 * the CS ring buffer with a dummy job that only signals the fence.
7b6f9ec6ad51125 Boris Brezillon 2024-07-03 470 */
7b6f9ec6ad51125 Boris Brezillon 2024-07-03 471 struct dma_fence *last_fence;
7b6f9ec6ad51125 Boris Brezillon 2024-07-03 472
de85488138247d0 Boris Brezillon 2024-02-29 473 /**
de85488138247d0 Boris Brezillon 2024-02-29 474 * @in_flight_jobs: List containing all in-flight jobs.
de85488138247d0 Boris Brezillon 2024-02-29 475 *
de85488138247d0 Boris Brezillon 2024-02-29 476 * Used to keep track and signal panthor_job::done_fence when the
de85488138247d0 Boris Brezillon 2024-02-29 477 * synchronization object attached to the queue is signaled.
de85488138247d0 Boris Brezillon 2024-02-29 478 */
de85488138247d0 Boris Brezillon 2024-02-29 479 struct list_head in_flight_jobs;
de85488138247d0 Boris Brezillon 2024-02-29 480 } fence_ctx;
f8ff51a47084517 Adrián Larumbe 2024-09-24 481
f8ff51a47084517 Adrián Larumbe 2024-09-24 482 /** @profiling: Job profiling data slots and access information. */
f8ff51a47084517 Adrián Larumbe 2024-09-24 483 struct {
f8ff51a47084517 Adrián Larumbe 2024-09-24 484 /** @slots: Kernel BO holding the slots. */
f8ff51a47084517 Adrián Larumbe 2024-09-24 485 struct panthor_kernel_bo *slots;
f8ff51a47084517 Adrián Larumbe 2024-09-24 486
f8ff51a47084517 Adrián Larumbe 2024-09-24 487 /** @slot_count: Number of jobs ringbuffer can hold at once. */
f8ff51a47084517 Adrián Larumbe 2024-09-24 488 u32 slot_count;
f8ff51a47084517 Adrián Larumbe 2024-09-24 489
f8ff51a47084517 Adrián Larumbe 2024-09-24 490 /** @seqno: Index of the next available profiling information slot. */
f8ff51a47084517 Adrián Larumbe 2024-09-24 491 u32 seqno;
f8ff51a47084517 Adrián Larumbe 2024-09-24 492 } profiling;
de85488138247d0 Boris Brezillon 2024-02-29 @493 };
de85488138247d0 Boris Brezillon 2024-02-29 494
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
More information about the dri-devel
mailing list