[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