Commit 3a853403 authored by Dave Airlie's avatar Dave Airlie

Merge tag 'drm-xe-fixes-2024-04-25' of https://gitlab.freedesktop.org/drm/xe/kernel into drm-fixes

- Fix error paths on managed allocations
- Fix PF/VF relay messages
Signed-off-by: default avatarDave Airlie <airlied@redhat.com>

From: Lucas De Marchi <lucas.demarchi@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/gxaxtvxeoax7mnddxbl3tfn2hfnm5e4ngnl3wpi4p5tvn7il4s@fwsvpntse7bh
parents ca382d6a e3e98952
...@@ -378,7 +378,9 @@ static int gt_fw_domain_init(struct xe_gt *gt) ...@@ -378,7 +378,9 @@ static int gt_fw_domain_init(struct xe_gt *gt)
err); err);
/* Initialize CCS mode sysfs after early initialization of HW engines */ /* Initialize CCS mode sysfs after early initialization of HW engines */
xe_gt_ccs_mode_sysfs_init(gt); err = xe_gt_ccs_mode_sysfs_init(gt);
if (err)
goto err_force_wake;
/* /*
* Stash hardware-reported version. Since this register does not exist * Stash hardware-reported version. Since this register does not exist
......
...@@ -167,25 +167,20 @@ static void xe_gt_ccs_mode_sysfs_fini(struct drm_device *drm, void *arg) ...@@ -167,25 +167,20 @@ static void xe_gt_ccs_mode_sysfs_fini(struct drm_device *drm, void *arg)
* and it is expected that there are no open drm clients while doing so. * and it is expected that there are no open drm clients while doing so.
* The number of available compute slices is exposed to user through a per-gt * The number of available compute slices is exposed to user through a per-gt
* 'num_cslices' sysfs interface. * 'num_cslices' sysfs interface.
*
* Returns: Returns error value for failure and 0 for success.
*/ */
void xe_gt_ccs_mode_sysfs_init(struct xe_gt *gt) int xe_gt_ccs_mode_sysfs_init(struct xe_gt *gt)
{ {
struct xe_device *xe = gt_to_xe(gt); struct xe_device *xe = gt_to_xe(gt);
int err; int err;
if (!xe_gt_ccs_mode_enabled(gt)) if (!xe_gt_ccs_mode_enabled(gt))
return; return 0;
err = sysfs_create_files(gt->sysfs, gt_ccs_mode_attrs); err = sysfs_create_files(gt->sysfs, gt_ccs_mode_attrs);
if (err) { if (err)
drm_warn(&xe->drm, "Sysfs creation for ccs_mode failed err: %d\n", err); return err;
return;
}
err = drmm_add_action_or_reset(&xe->drm, xe_gt_ccs_mode_sysfs_fini, gt); return drmm_add_action_or_reset(&xe->drm, xe_gt_ccs_mode_sysfs_fini, gt);
if (err) {
sysfs_remove_files(gt->sysfs, gt_ccs_mode_attrs);
drm_warn(&xe->drm, "%s: drmm_add_action_or_reset failed, err: %d\n",
__func__, err);
}
} }
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
#include "xe_platform_types.h" #include "xe_platform_types.h"
void xe_gt_apply_ccs_mode(struct xe_gt *gt); void xe_gt_apply_ccs_mode(struct xe_gt *gt);
void xe_gt_ccs_mode_sysfs_init(struct xe_gt *gt); int xe_gt_ccs_mode_sysfs_init(struct xe_gt *gt);
static inline bool xe_gt_ccs_mode_enabled(const struct xe_gt *gt) static inline bool xe_gt_ccs_mode_enabled(const struct xe_gt *gt)
{ {
......
...@@ -1054,10 +1054,10 @@ static int process_g2h_msg(struct xe_guc_ct *ct, u32 *msg, u32 len) ...@@ -1054,10 +1054,10 @@ static int process_g2h_msg(struct xe_guc_ct *ct, u32 *msg, u32 len)
adj_len); adj_len);
break; break;
case XE_GUC_ACTION_GUC2PF_RELAY_FROM_VF: case XE_GUC_ACTION_GUC2PF_RELAY_FROM_VF:
ret = xe_guc_relay_process_guc2pf(&guc->relay, payload, adj_len); ret = xe_guc_relay_process_guc2pf(&guc->relay, hxg, hxg_len);
break; break;
case XE_GUC_ACTION_GUC2VF_RELAY_FROM_PF: case XE_GUC_ACTION_GUC2VF_RELAY_FROM_PF:
ret = xe_guc_relay_process_guc2vf(&guc->relay, payload, adj_len); ret = xe_guc_relay_process_guc2vf(&guc->relay, hxg, hxg_len);
break; break;
default: default:
drm_err(&xe->drm, "unexpected action 0x%04x\n", action); drm_err(&xe->drm, "unexpected action 0x%04x\n", action);
......
...@@ -53,7 +53,6 @@ static int huc_alloc_gsc_pkt(struct xe_huc *huc) ...@@ -53,7 +53,6 @@ static int huc_alloc_gsc_pkt(struct xe_huc *huc)
struct xe_gt *gt = huc_to_gt(huc); struct xe_gt *gt = huc_to_gt(huc);
struct xe_device *xe = gt_to_xe(gt); struct xe_device *xe = gt_to_xe(gt);
struct xe_bo *bo; struct xe_bo *bo;
int err;
/* we use a single object for both input and output */ /* we use a single object for both input and output */
bo = xe_bo_create_pin_map(xe, gt_to_tile(gt), NULL, bo = xe_bo_create_pin_map(xe, gt_to_tile(gt), NULL,
...@@ -66,13 +65,7 @@ static int huc_alloc_gsc_pkt(struct xe_huc *huc) ...@@ -66,13 +65,7 @@ static int huc_alloc_gsc_pkt(struct xe_huc *huc)
huc->gsc_pkt = bo; huc->gsc_pkt = bo;
err = drmm_add_action_or_reset(&xe->drm, free_gsc_pkt, huc); return drmm_add_action_or_reset(&xe->drm, free_gsc_pkt, huc);
if (err) {
free_gsc_pkt(&xe->drm, huc);
return err;
}
return 0;
} }
int xe_huc_init(struct xe_huc *huc) int xe_huc_init(struct xe_huc *huc)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment