Re: [PATCH] drm/i915/gt: fix unsigned integer to signed assignment

From: Tvrtko Ursulin
Date: Wed Feb 16 2022 - 04:58:57 EST



On 16/02/2022 09:19, Ville Syrjälä wrote:
On Wed, Feb 16, 2022 at 11:02:06AM +0200, Jani Nikula wrote:
On Wed, 16 Feb 2022, Jiapeng Chong <jiapeng.chong@xxxxxxxxxxxxxxxxx> wrote:
Eliminate the follow smatch warning:

drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c:4640
guc_create_virtual() warn: assigning (-2) to unsigned variable
've->base.instance'.

drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c:4641
guc_create_virtual() warn: assigning (-2) to unsigned variable
've->base.uabi_instance'.

Reported-by: Abaci Robot <abaci@xxxxxxxxxxxxxxxxx>
Signed-off-by: Jiapeng Chong <jiapeng.chong@xxxxxxxxxxxxxxxxx>

The report seems to be valid, but I don't think this is the fix.

Where do we even check for invalid instance/uabi_instance in code?

The whole thing seems rather poorly documented as there's a matching
uabi struct with __u16's and the negative values are defined right
there in the uapi header as well.

Negative ones are exception values to be used in conjunction with the virtual engine uapi (see "DOC: Virtual Engine uAPI" and also comment next to I915_CONTEXT_PARAM_ENGINES).

AFAIK assigning negative int to unsigned int is defined and fine.

Compiler does warn on comparisons which is why we have:

./gem/i915_gem_busy.c: if (id == (u16)I915_ENGINE_CLASS_INVALID)
./gem/i915_gem_busy.c: if (id == (u16)I915_ENGINE_CLASS_INVALID)
./gem/i915_gem_context.c: if (ci.engine_class == (u16)I915_ENGINE_CLASS_INVALID &&
./gem/i915_gem_context.c: ci.engine_instance == (u16)I915_ENGINE_CLASS_INVALID_NONE)

So I think no action needed here.

Regards,

Tvrtko

BR,
Jani.


---
drivers/gpu/drm/i915/gt/intel_engine_types.h | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/i915/gt/intel_engine_types.h b/drivers/gpu/drm/i915/gt/intel_engine_types.h
index 36365bdbe1ee..dc7cc06c68e7 100644
--- a/drivers/gpu/drm/i915/gt/intel_engine_types.h
+++ b/drivers/gpu/drm/i915/gt/intel_engine_types.h
@@ -328,10 +328,10 @@ struct intel_engine_cs {
intel_engine_mask_t logical_mask;
u8 class;
- u8 instance;
+ s8 instance;
u16 uabi_class;
- u16 uabi_instance;
+ s16 uabi_instance;
u32 uabi_capabilities;
u32 context_size;

--
Jani Nikula, Intel Open Source Graphics Center