drm/xe/pf: Fix CFI failure in debugfs access

JIRA: https://issues.redhat.com/browse/RHEL-180329

commit 9fba83e404e6142428308344d61adb7cdc107a2b
Author: Mohanram Meenakshisundaram <mohanram.meenakshisundaram@intel.com>
Date:   Thu May 14 23:19:18 2026 +0530

    drm/xe/pf: Fix CFI failure in debugfs access

    [ Upstream commit 96bf49b526e2d03a2b7f6e861925a08f46ed0d28 ]

    Reading debugfs file (/sys/kernel/debug/dri/0/gt*/pf/adverse_events)
    with CFI (Control Flow Integrity) enabled, the kernel panics at
    xe_gt_debugfs_simple_show+0x82/0xc0.

    xe_gt_debugfs_simple_show() declare a function pointer expecting int
    return type, but xe_gt_sriov_pf_monitor_print_events() is void return
    type, leading to CFI failure and kernel panic.

    [507620.973657] CFI failure at xe_gt_debugfs_simple_show+0x82/0xc0 [xe]
    (target: xe_gt_sriov_pf_monitor_print_events+0x0/0x130 [xe]; expected
    type: 0xd72c7139)

    Fix xe_gt_sriov_pf_monitor_print_events() function by updating to return
    an int type.

    Fixes: 1c99d3d3edab ("drm/xe/pf: Expose PF monitor details via debugfs")
    Signed-off-by: Mohanram Meenakshisundaram <mohanram.meenakshisundaram@intel.com>
    Reviewed-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
    Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
    Link: https://patch.msgid.link/20260514174918.1556357-2-mohanram.meenakshisundaram@intel.com
    (cherry picked from commit ff1d386a8359746d9699ac30336e3b0684c68958)
    Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

Signed-off-by: Anusha Srivatsa <asrivats@redhat.com>
This commit is contained in:
Anusha Srivatsa
2026-08-03 14:53:49 -05:00
parent 6085ce10f1
commit 6b4e2e7b1c
2 changed files with 6 additions and 2 deletions
+5 -1
View File
@@ -114,8 +114,10 @@ int xe_gt_sriov_pf_monitor_process_guc2pf(struct xe_gt *gt, const u32 *msg, u32
* VFs with no events are not printed.
*
* This function can only be called on PF.
*
* Return: always 0
*/
void xe_gt_sriov_pf_monitor_print_events(struct xe_gt *gt, struct drm_printer *p)
int xe_gt_sriov_pf_monitor_print_events(struct xe_gt *gt, struct drm_printer *p)
{
unsigned int n, total_vfs = xe_gt_sriov_pf_get_totalvfs(gt);
const struct xe_gt_sriov_monitor *data;
@@ -144,4 +146,6 @@ void xe_gt_sriov_pf_monitor_print_events(struct xe_gt *gt, struct drm_printer *p
#undef __format
#undef __value
}
return 0;
}
+1 -1
View File
@@ -13,7 +13,7 @@ struct drm_printer;
struct xe_gt;
void xe_gt_sriov_pf_monitor_flr(struct xe_gt *gt, u32 vfid);
void xe_gt_sriov_pf_monitor_print_events(struct xe_gt *gt, struct drm_printer *p);
int xe_gt_sriov_pf_monitor_print_events(struct xe_gt *gt, struct drm_printer *p);
#ifdef CONFIG_PCI_IOV
int xe_gt_sriov_pf_monitor_process_guc2pf(struct xe_gt *gt, const u32 *msg, u32 len);