On 10/04/2024 15:34, Dan Carpenter wrote:
> On Wed, Apr 10, 2024 at 03:11:52PM +0100, Steven Price wrote:
>> On 08/04/2024 08:35, Dan Carpenter wrote:
>>> 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.
>>
>> The mask is correct - it's effectively a hardware register (well it's
>> read/written by the firmware on the hardware). States 4-7 are officially
>> "reserved" and Should Not Happen™!
>>
>> I guess a "default:" case with a WARN_ON() would be the right solution.
>>
>> Steve
> 
> A WARN_ON() won't silence the warning.  Plus WARN_ON() is not free in
> terms of memory usage.  And they're kind of controversial these days to
> be honest.

Sorry, I didn't mean just a WARN_ON() - there should also be an early
return from the function, ideally with the GPU being reset in the hope
that it starts behaving again.

And you're probably right WARN_ON is a bit too strong, we should
definitely output a warning message though to point out that the
hardware isn't behaving as expected.

> One solution would be to just ignore the static checker warning.  These
> are a one time thing, and if people have questions in the future, they
> can just search lore for this thread.

Well the static checker is not wrong - but the situation where this
could happen is if the hardware (or firmware running on the hardware)
breaks the contract of the specification. I'll put it on my todo list to
take a look at handling this more gracefully, but it's likely to take a
while before it bubbles to the top. But thanks for pointing out the issue.

Steve

Reply via email to