Skip to content

Commit 9c3f72a

Browse files
hghimiralucasdemarchi
authored andcommitted
drm/xe/gt: Abort driver load for sysfs creation failure
Instead of allowing the driver to load with incomplete sysfs entries in case of sysfs creation failure, we should terminate the driver loading. This change ensures that the status of all gt associated sysfs entries creation is relayed to xe_gt_init, leading to a driver load abort if any sysfs creation failures occur. -v2 use err_force_wake label instead of new. (Lucas) Avoid unnecessary warn/error messages. (Lucas) Cc: Rodrigo Vivi <[email protected]> Cc: Lucas De Marchi <[email protected]> Signed-off-by: Himal Prasad Ghimiray <[email protected]> Reviewed-by: Lucas De Marchi <[email protected]> Link: https://patchwork.freedesktop.org/patch/msgid/[email protected] Signed-off-by: Lucas De Marchi <[email protected]>
1 parent 6e40f14 commit 9c3f72a

File tree

10 files changed

+38
-60
lines changed

10 files changed

+38
-60
lines changed

drivers/gpu/drm/xe/xe_gt.c

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -366,7 +366,9 @@ static int gt_fw_domain_init(struct xe_gt *gt)
366366
xe_lmtt_init(&gt_to_tile(gt)->sriov.pf.lmtt);
367367
}
368368

369-
xe_gt_idle_sysfs_init(&gt->gtidle);
369+
err = xe_gt_idle_sysfs_init(&gt->gtidle);
370+
if (err)
371+
goto err_force_wake;
370372

371373
/* Enable per hw engine IRQs */
372374
xe_irq_enable_hwe(gt);
@@ -380,9 +382,7 @@ static int gt_fw_domain_init(struct xe_gt *gt)
380382

381383
err = xe_hw_engine_class_sysfs_init(gt);
382384
if (err)
383-
drm_warn(&gt_to_xe(gt)->drm,
384-
"failed to register engines sysfs directory, err: %d\n",
385-
err);
385+
goto err_force_wake;
386386

387387
/* Initialize CCS mode sysfs after early initialization of HW engines */
388388
err = xe_gt_ccs_mode_sysfs_init(gt);
@@ -546,13 +546,17 @@ int xe_gt_init(struct xe_gt *gt)
546546

547547
xe_mocs_init_early(gt);
548548

549-
xe_gt_sysfs_init(gt);
549+
err = xe_gt_sysfs_init(gt);
550+
if (err)
551+
return err;
550552

551553
err = gt_fw_domain_init(gt);
552554
if (err)
553555
return err;
554556

555-
xe_gt_freq_init(gt);
557+
err = xe_gt_freq_init(gt);
558+
if (err)
559+
return err;
556560

557561
xe_force_wake_init_engines(gt, gt_to_fw(gt));
558562

drivers/gpu/drm/xe/xe_gt_freq.c

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -222,33 +222,28 @@ static void freq_fini(struct drm_device *drm, void *arg)
222222
* @gt: Xe GT object
223223
*
224224
* It needs to be initialized after GT Sysfs and GuC PC components are ready.
225+
*
226+
* Returns: Returns error value for failure and 0 for success.
225227
*/
226-
void xe_gt_freq_init(struct xe_gt *gt)
228+
int xe_gt_freq_init(struct xe_gt *gt)
227229
{
228230
struct xe_device *xe = gt_to_xe(gt);
229231
int err;
230232

231233
if (xe->info.skip_guc_pc)
232-
return;
234+
return 0;
233235

234236
gt->freq = kobject_create_and_add("freq0", gt->sysfs);
235-
if (!gt->freq) {
236-
drm_warn(&xe->drm, "failed to add freq0 directory to %s\n",
237-
kobject_name(gt->sysfs));
238-
return;
239-
}
237+
if (!gt->freq)
238+
return -ENOMEM;
240239

241240
err = drmm_add_action_or_reset(&xe->drm, freq_fini, gt->freq);
242-
if (err) {
243-
drm_warn(&xe->drm, "%s: drmm_add_action_or_reset failed, err: %d\n",
244-
__func__, err);
245-
return;
246-
}
241+
if (err)
242+
return err;
247243

248244
err = sysfs_create_files(gt->freq, freq_attrs);
249245
if (err)
250-
drm_warn(&xe->drm, "failed to add freq attrs to %s, err: %d\n",
251-
kobject_name(gt->freq), err);
246+
return err;
252247

253-
xe_gt_throttle_sysfs_init(gt);
248+
return xe_gt_throttle_sysfs_init(gt);
254249
}

drivers/gpu/drm/xe/xe_gt_freq.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,6 @@
88

99
struct xe_gt;
1010

11-
void xe_gt_freq_init(struct xe_gt *gt);
11+
int xe_gt_freq_init(struct xe_gt *gt);
1212

1313
#endif

drivers/gpu/drm/xe/xe_gt_idle.c

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -152,18 +152,16 @@ static void gt_idle_sysfs_fini(struct drm_device *drm, void *arg)
152152
kobject_put(kobj);
153153
}
154154

155-
void xe_gt_idle_sysfs_init(struct xe_gt_idle *gtidle)
155+
int xe_gt_idle_sysfs_init(struct xe_gt_idle *gtidle)
156156
{
157157
struct xe_gt *gt = gtidle_to_gt(gtidle);
158158
struct xe_device *xe = gt_to_xe(gt);
159159
struct kobject *kobj;
160160
int err;
161161

162162
kobj = kobject_create_and_add("gtidle", gt->sysfs);
163-
if (!kobj) {
164-
drm_warn(&xe->drm, "%s failed, err: %d\n", __func__, -ENOMEM);
165-
return;
166-
}
163+
if (!kobj)
164+
return -ENOMEM;
167165

168166
if (xe_gt_is_media_type(gt)) {
169167
snprintf(gtidle->name, sizeof(gtidle->name), "gt%d-mc", gt->info.id);
@@ -180,14 +178,10 @@ void xe_gt_idle_sysfs_init(struct xe_gt_idle *gtidle)
180178
err = sysfs_create_files(kobj, gt_idle_attrs);
181179
if (err) {
182180
kobject_put(kobj);
183-
drm_warn(&xe->drm, "failed to register gtidle sysfs, err: %d\n", err);
184-
return;
181+
return err;
185182
}
186183

187-
err = drmm_add_action_or_reset(&xe->drm, gt_idle_sysfs_fini, kobj);
188-
if (err)
189-
drm_warn(&xe->drm, "%s: drmm_add_action_or_reset failed, err: %d\n",
190-
__func__, err);
184+
return drmm_add_action_or_reset(&xe->drm, gt_idle_sysfs_fini, kobj);
191185
}
192186

193187
void xe_gt_idle_enable_c6(struct xe_gt *gt)

drivers/gpu/drm/xe/xe_gt_idle.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
struct xe_gt;
1212

13-
void xe_gt_idle_sysfs_init(struct xe_gt_idle *gtidle);
13+
int xe_gt_idle_sysfs_init(struct xe_gt_idle *gtidle);
1414
void xe_gt_idle_enable_c6(struct xe_gt *gt);
1515
void xe_gt_idle_disable_c6(struct xe_gt *gt);
1616

drivers/gpu/drm/xe/xe_gt_sysfs.c

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ static void gt_sysfs_fini(struct drm_device *drm, void *arg)
2929
kobject_put(gt->sysfs);
3030
}
3131

32-
void xe_gt_sysfs_init(struct xe_gt *gt)
32+
int xe_gt_sysfs_init(struct xe_gt *gt)
3333
{
3434
struct xe_tile *tile = gt_to_tile(gt);
3535
struct xe_device *xe = gt_to_xe(gt);
@@ -38,24 +38,18 @@ void xe_gt_sysfs_init(struct xe_gt *gt)
3838

3939
kg = kzalloc(sizeof(*kg), GFP_KERNEL);
4040
if (!kg)
41-
return;
41+
return -ENOMEM;
4242

4343
kobject_init(&kg->base, &xe_gt_sysfs_kobj_type);
4444
kg->gt = gt;
4545

4646
err = kobject_add(&kg->base, tile->sysfs, "gt%d", gt->info.id);
4747
if (err) {
48-
drm_warn(&xe->drm, "failed to add GT sysfs directory, err: %d\n", err);
4948
kobject_put(&kg->base);
50-
return;
49+
return err;
5150
}
5251

5352
gt->sysfs = &kg->base;
5453

55-
err = drmm_add_action_or_reset(&xe->drm, gt_sysfs_fini, gt);
56-
if (err) {
57-
drm_warn(&xe->drm, "%s: drmm_add_action_or_reset failed, err: %d\n",
58-
__func__, err);
59-
return;
60-
}
54+
return drmm_add_action_or_reset(&xe->drm, gt_sysfs_fini, gt);
6155
}

drivers/gpu/drm/xe/xe_gt_sysfs.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
#include "xe_gt_sysfs_types.h"
1010

11-
void xe_gt_sysfs_init(struct xe_gt *gt);
11+
int xe_gt_sysfs_init(struct xe_gt *gt);
1212

1313
static inline struct xe_gt *
1414
kobj_to_gt(struct kobject *kobj)

drivers/gpu/drm/xe/xe_gt_throttle_sysfs.c

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -236,19 +236,14 @@ static void gt_throttle_sysfs_fini(struct drm_device *drm, void *arg)
236236
sysfs_remove_group(gt->freq, &throttle_group_attrs);
237237
}
238238

239-
void xe_gt_throttle_sysfs_init(struct xe_gt *gt)
239+
int xe_gt_throttle_sysfs_init(struct xe_gt *gt)
240240
{
241241
struct xe_device *xe = gt_to_xe(gt);
242242
int err;
243243

244244
err = sysfs_create_group(gt->freq, &throttle_group_attrs);
245-
if (err) {
246-
drm_warn(&xe->drm, "failed to register throttle sysfs, err: %d\n", err);
247-
return;
248-
}
249-
250-
err = drmm_add_action_or_reset(&xe->drm, gt_throttle_sysfs_fini, gt);
251245
if (err)
252-
drm_warn(&xe->drm, "%s: drmm_add_action_or_reset failed, err: %d\n",
253-
__func__, err);
246+
return err;
247+
248+
return drmm_add_action_or_reset(&xe->drm, gt_throttle_sysfs_fini, gt);
254249
}

drivers/gpu/drm/xe/xe_gt_throttle_sysfs.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
struct xe_gt;
1212

13-
void xe_gt_throttle_sysfs_init(struct xe_gt *gt);
13+
int xe_gt_throttle_sysfs_init(struct xe_gt *gt);
1414

1515
#endif /* _XE_GT_THROTTLE_SYSFS_H_ */
1616

drivers/gpu/drm/xe/xe_hw_engine_class_sysfs.c

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -690,12 +690,8 @@ int xe_hw_engine_class_sysfs_init(struct xe_gt *gt)
690690

691691
keclass->eclass = hwe->eclass;
692692
err = xe_add_hw_engine_class_defaults(xe, &keclass->base);
693-
if (err) {
694-
drm_warn(&xe->drm,
695-
"Add .defaults to engines failed!, err: %d\n",
696-
err);
693+
if (err)
697694
goto err_object;
698-
}
699695

700696
err = sysfs_create_files(&keclass->base, files);
701697
if (err)

0 commit comments

Comments
 (0)