Skip to content

Commit 146b6f6

Browse files
Shyam Sundar S Kjwrdegoede
authored andcommitted
platform/x86/amd/pmf: Register notify handler only if SPS is enabled
Power source notify handler is getting registered even when none of the PMF feature in enabled leading to a crash. ... [ 22.592162] Call Trace: [ 22.592164] <TASK> [ 22.592164] ? rcu_note_context_switch+0x5e0/0x660 [ 22.592166] ? __warn+0x81/0x130 [ 22.592171] ? rcu_note_context_switch+0x5e0/0x660 [ 22.592172] ? report_bug+0x171/0x1a0 [ 22.592175] ? prb_read_valid+0x1b/0x30 [ 22.592177] ? handle_bug+0x3c/0x80 [ 22.592178] ? exc_invalid_op+0x17/0x70 [ 22.592179] ? asm_exc_invalid_op+0x1a/0x20 [ 22.592182] ? rcu_note_context_switch+0x5e0/0x660 [ 22.592183] ? acpi_ut_delete_object_desc+0x86/0xb0 [ 22.592186] ? acpi_ut_update_ref_count.part.0+0x22d/0x930 [ 22.592187] __schedule+0xc0/0x1410 [ 22.592189] ? ktime_get+0x3c/0xa0 [ 22.592191] ? lapic_next_event+0x1d/0x30 [ 22.592193] ? hrtimer_start_range_ns+0x25b/0x350 [ 22.592196] schedule+0x5e/0xd0 [ 22.592197] schedule_hrtimeout_range_clock+0xbe/0x140 [ 22.592199] ? __pfx_hrtimer_wakeup+0x10/0x10 [ 22.592200] usleep_range_state+0x64/0x90 [ 22.592203] amd_pmf_send_cmd+0x106/0x2a0 [amd_pmf bddfe0fe3712aaa99acce3d5487405c5213c6616] [ 22.592207] amd_pmf_update_slider+0x56/0x1b0 [amd_pmf bddfe0fe3712aaa99acce3d5487405c5213c6616] [ 22.592210] amd_pmf_set_sps_power_limits+0x72/0x80 [amd_pmf bddfe0fe3712aaa99acce3d5487405c5213c6616] [ 22.592213] amd_pmf_pwr_src_notify_call+0x49/0x90 [amd_pmf bddfe0fe3712aaa99acce3d5487405c5213c6616] [ 22.592216] notifier_call_chain+0x5a/0xd0 [ 22.592218] atomic_notifier_call_chain+0x32/0x50 ... Fix this by moving the registration of source change notify handler only when SPS(Static Slider) is advertised as supported. Reported-by: Allen Zhong <[email protected]> Closes: https://bugzilla.kernel.org/show_bug.cgi?id=217571 Fixes: 4c71ae4 ("platform/x86/amd/pmf: Add support SPS PMF feature") Tested-by: Patil Rajesh Reddy <[email protected]> Reviewed-by: Mario Limonciello <[email protected]> Signed-off-by: Shyam Sundar S K <[email protected]> Link: https://lore.kernel.org/r/[email protected] Reviewed-by: Hans de Goede <[email protected]> Signed-off-by: Hans de Goede <[email protected]>
1 parent fb109fb commit 146b6f6

File tree

1 file changed

+5
-5
lines changed
  • drivers/platform/x86/amd/pmf

1 file changed

+5
-5
lines changed

drivers/platform/x86/amd/pmf/core.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -297,6 +297,8 @@ static void amd_pmf_init_features(struct amd_pmf_dev *dev)
297297
/* Enable Static Slider */
298298
if (is_apmf_func_supported(dev, APMF_FUNC_STATIC_SLIDER_GRANULAR)) {
299299
amd_pmf_init_sps(dev);
300+
dev->pwr_src_notifier.notifier_call = amd_pmf_pwr_src_notify_call;
301+
power_supply_reg_notifier(&dev->pwr_src_notifier);
300302
dev_dbg(dev->dev, "SPS enabled and Platform Profiles registered\n");
301303
}
302304

@@ -315,8 +317,10 @@ static void amd_pmf_init_features(struct amd_pmf_dev *dev)
315317

316318
static void amd_pmf_deinit_features(struct amd_pmf_dev *dev)
317319
{
318-
if (is_apmf_func_supported(dev, APMF_FUNC_STATIC_SLIDER_GRANULAR))
320+
if (is_apmf_func_supported(dev, APMF_FUNC_STATIC_SLIDER_GRANULAR)) {
321+
power_supply_unreg_notifier(&dev->pwr_src_notifier);
319322
amd_pmf_deinit_sps(dev);
323+
}
320324

321325
if (is_apmf_func_supported(dev, APMF_FUNC_AUTO_MODE)) {
322326
amd_pmf_deinit_auto_mode(dev);
@@ -399,9 +403,6 @@ static int amd_pmf_probe(struct platform_device *pdev)
399403
apmf_install_handler(dev);
400404
amd_pmf_dbgfs_register(dev);
401405

402-
dev->pwr_src_notifier.notifier_call = amd_pmf_pwr_src_notify_call;
403-
power_supply_reg_notifier(&dev->pwr_src_notifier);
404-
405406
dev_info(dev->dev, "registered PMF device successfully\n");
406407

407408
return 0;
@@ -411,7 +412,6 @@ static void amd_pmf_remove(struct platform_device *pdev)
411412
{
412413
struct amd_pmf_dev *dev = platform_get_drvdata(pdev);
413414

414-
power_supply_unreg_notifier(&dev->pwr_src_notifier);
415415
amd_pmf_deinit_features(dev);
416416
apmf_acpi_deinit(dev);
417417
amd_pmf_dbgfs_unregister(dev);

0 commit comments

Comments
 (0)