[bug report] drm/panthor: Add the scheduler logical block

Dan Carpenter dan.carpenter at linaro.org
Mon Apr 8 07:35:50 UTC 2024


Hello Boris Brezillon,

Commit de8548813824 ("drm/panthor: Add the scheduler logical block")
from Feb 29, 2024 (linux-next), leads to the following Smatch static
checker warning:

	drivers/gpu/drm/panthor/panthor_sched.c:1153 csg_slot_sync_state_locked()
	error: uninitialized symbol 'new_state'.

drivers/gpu/drm/panthor/panthor_sched.c
    1123 static void
    1124 csg_slot_sync_state_locked(struct panthor_device *ptdev, u32 csg_id)
    1125 {
    1126         struct panthor_csg_slot *csg_slot = &ptdev->scheduler->csg_slots[csg_id];
    1127         struct panthor_fw_csg_iface *csg_iface;
    1128         struct panthor_group *group;
    1129         enum panthor_group_state new_state, old_state;
    1130 
    1131         lockdep_assert_held(&ptdev->scheduler->lock);
    1132 
    1133         csg_iface = panthor_fw_get_csg_iface(ptdev, csg_id);
    1134         group = csg_slot->group;
    1135 
    1136         if (!group)
    1137                 return;
    1138 
    1139         old_state = group->state;
    1140         switch (csg_iface->output->ack & CSG_STATE_MASK) {
                                                  ^^^^^^^^^^^^^^
This mask is 0x7.  Should it be 0x3?  That would silence the static
checker warning.

    1141         case CSG_STATE_START:
    1142         case CSG_STATE_RESUME:
    1143                 new_state = PANTHOR_CS_GROUP_ACTIVE;
    1144                 break;
    1145         case CSG_STATE_TERMINATE:
    1146                 new_state = PANTHOR_CS_GROUP_TERMINATED;
    1147                 break;
    1148         case CSG_STATE_SUSPEND:
    1149                 new_state = PANTHOR_CS_GROUP_SUSPENDED;
    1150                 break;
    1151         }
    1152 
--> 1153         if (old_state == new_state)
    1154                 return;
    1155 
    1156         if (new_state == PANTHOR_CS_GROUP_SUSPENDED)
    1157                 csg_slot_sync_queues_state_locked(ptdev, csg_id);
    1158 
    1159         if (old_state == PANTHOR_CS_GROUP_ACTIVE) {
    1160                 u32 i;
    1161 
    1162                 /* Reset the queue slots so we start from a clean
    1163                  * state when starting/resuming a new group on this
    1164                  * CSG slot. No wait needed here, and no ringbell
    1165                  * either, since the CS slot will only be re-used
    1166                  * on the next CSG start operation.
    1167                  */
    1168                 for (i = 0; i < group->queue_count; i++) {
    1169                         if (group->queues[i])
    1170                                 cs_slot_reset_locked(ptdev, csg_id, i);
    1171                 }
    1172         }
    1173 
    1174         group->state = new_state;
    1175 }

regards,
dan carpenter


More information about the dri-devel mailing list