drm/xe: Allow const propagation in gt_to_xe()
authorLucas De Marchi <lucas.demarchi@intel.com>
Sat, 4 Mar 2023 06:26:55 +0000 (22:26 -0800)
committerRodrigo Vivi <rodrigo.vivi@intel.com>
Tue, 19 Dec 2023 23:29:45 +0000 (18:29 -0500)
Replace the inline function with a _Generic() so gt_to_xe() can work
with a const struct xe_gt*, which leads to a const struct xe *.
This allows a const gt being passed around and when the xe device is
needed, compiler won't issue a warning that calling gt_to_xe() would
discard the const. Rather, just propagate the const to the xe pointer
being returned.

Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
Reviewed-by: Matt Roper <matthew.d.roper@intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
drivers/gpu/drm/xe/xe_gt.h

index 5635f280317043af96c37cc04a87bf0e5db8bba5..086369f7ee6dfeb2e39ad8df501d37fcd8db9526 100644 (file)
@@ -49,10 +49,10 @@ static inline bool xe_gt_is_media_type(struct xe_gt *gt)
        return gt->info.type == XE_GT_TYPE_MEDIA;
 }
 
-static inline struct xe_device * gt_to_xe(struct xe_gt *gt)
-{
-       return gt->xe;
-}
+#define gt_to_xe(gt__)                                                         \
+       _Generic(gt__,                                                          \
+                const struct xe_gt *: (const struct xe_device *)((gt__)->xe),  \
+                struct xe_gt *: (gt__)->xe)
 
 static inline bool xe_gt_is_usm_hwe(struct xe_gt *gt, struct xe_hw_engine *hwe)
 {