Linux Power Management development
 help / color / mirror / Atom feed
* [PATCH] thermal/core: Fix double device initialization
@ 2026-05-25 15:16 Daniel Lezcano
  2026-05-25 15:29 ` Rafael J. Wysocki
  2026-05-31  9:42 ` kernel test robot
  0 siblings, 2 replies; 5+ messages in thread
From: Daniel Lezcano @ 2026-05-25 15:16 UTC (permalink / raw)
  To: rafael, daniel.lezcano; +Cc: linux-pm, rui.zhang, lukasz.luba, linux-kernel

In the previous change splitting the cooling device register function,
the device initialization was mistakenly added in the move.

This change is wrong because the device is registered with the
function device_register() which does device_initialize() and then
device_add(). That results in a double initialization and a message in
logs:

[    1.531290] kobject: kobject (0000000053ba73b2): tried to init an initialized object, something is seriously wrong.
[    1.531293] CPU: 9 UID: 0 PID: 420 Comm: kworker/u50:3 Not tainted 7.1.0-rc1+ #48 PREEMPT(lazy)
[    1.531294] Hardware name: LENOVO 21N10007UK/21N10007UK, BIOS N42ET38W (1.12 ) 05/29/2024
[    1.531295] Workqueue: events_unbound deferred_probe_work_func
[    1.531298] Call trace:
[    1.531298]  show_stack+0x24/0x50 (C)
[    1.531301]  dump_stack_lvl+0x80/0xc0
[    1.531303]  kobject_init+0xc0/0xd8
[    1.531305]  device_initialize+0x3c/0x140
[    1.531308]  device_register+0x20/0x48
[    1.531310]  thermal_cooling_device_add+0xe0/0x208
[    1.531311]  thermal_of_cooling_device_register+0x54/0xa0
[    1.531313]  __cpufreq_cooling_register+0x1e0/0x368
[    1.531315]  of_cpufreq_cooling_register+0x64/0xe0
[    1.531316]  cpufreq_online+0xa6c/0xef0
[    1.531317]  cpufreq_add_dev+0x108/0x180
[    1.531318]  subsys_interface_register+0x138/0x168
[    1.531320]  cpufreq_register_driver+0x1b8/0x390

Fix by just removing the added line.

Fixes: 13f4e660a126 ("thermal/core: Split __thermal_cooling_device_register() into two functions")
Signed-off-by: Daniel Lezcano <daniel.lezcano@kernel.org>
---
 drivers/thermal/thermal_core.c | 1 -
 1 file changed, 1 deletion(-)

diff --git a/drivers/thermal/thermal_core.c b/drivers/thermal/thermal_core.c
index 9b9fa51067bd..3cf305ceaf41 100644
--- a/drivers/thermal/thermal_core.c
+++ b/drivers/thermal/thermal_core.c
@@ -1012,7 +1012,6 @@ static int thermal_cooling_device_add(struct thermal_cooling_device *cdev, void
 	cdev->updated = false;
 	cdev->device.class = thermal_class;
 	cdev->device.release = thermal_cdev_release;
-	device_initialize(&cdev->device);
 	cdev->devdata = devdata;
 
 	ret = dev_set_name(&cdev->device, "cooling_device%d", cdev->id);
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH] thermal/core: Fix double device initialization
  2026-05-25 15:16 [PATCH] thermal/core: Fix double device initialization Daniel Lezcano
@ 2026-05-25 15:29 ` Rafael J. Wysocki
  2026-05-25 15:33   ` Rafael J. Wysocki
  2026-05-25 15:43   ` Daniel Lezcano
  2026-05-31  9:42 ` kernel test robot
  1 sibling, 2 replies; 5+ messages in thread
From: Rafael J. Wysocki @ 2026-05-25 15:29 UTC (permalink / raw)
  To: Daniel Lezcano; +Cc: rafael, linux-pm, rui.zhang, lukasz.luba, linux-kernel

On Mon, May 25, 2026 at 5:16 PM Daniel Lezcano
<daniel.lezcano@kernel.org> wrote:
>
> In the previous change splitting the cooling device register function,
> the device initialization was mistakenly added in the move.
>
> This change is wrong because the device is registered with the
> function device_register() which does device_initialize() and then
> device_add(). That results in a double initialization and a message in
> logs:
>
> [    1.531290] kobject: kobject (0000000053ba73b2): tried to init an initialized object, something is seriously wrong.
> [    1.531293] CPU: 9 UID: 0 PID: 420 Comm: kworker/u50:3 Not tainted 7.1.0-rc1+ #48 PREEMPT(lazy)
> [    1.531294] Hardware name: LENOVO 21N10007UK/21N10007UK, BIOS N42ET38W (1.12 ) 05/29/2024
> [    1.531295] Workqueue: events_unbound deferred_probe_work_func
> [    1.531298] Call trace:
> [    1.531298]  show_stack+0x24/0x50 (C)
> [    1.531301]  dump_stack_lvl+0x80/0xc0
> [    1.531303]  kobject_init+0xc0/0xd8
> [    1.531305]  device_initialize+0x3c/0x140
> [    1.531308]  device_register+0x20/0x48
> [    1.531310]  thermal_cooling_device_add+0xe0/0x208
> [    1.531311]  thermal_of_cooling_device_register+0x54/0xa0
> [    1.531313]  __cpufreq_cooling_register+0x1e0/0x368
> [    1.531315]  of_cpufreq_cooling_register+0x64/0xe0
> [    1.531316]  cpufreq_online+0xa6c/0xef0
> [    1.531317]  cpufreq_add_dev+0x108/0x180
> [    1.531318]  subsys_interface_register+0x138/0x168
> [    1.531320]  cpufreq_register_driver+0x1b8/0x390
>
> Fix by just removing the added line.
>
> Fixes: 13f4e660a126 ("thermal/core: Split __thermal_cooling_device_register() into two functions")

In this commit, the device_register() has been replaced with
device_add(), so the problem above should not trigger.

Which kernel have you tested?

> Signed-off-by: Daniel Lezcano <daniel.lezcano@kernel.org>
> ---
>  drivers/thermal/thermal_core.c | 1 -
>  1 file changed, 1 deletion(-)
>
> diff --git a/drivers/thermal/thermal_core.c b/drivers/thermal/thermal_core.c
> index 9b9fa51067bd..3cf305ceaf41 100644
> --- a/drivers/thermal/thermal_core.c
> +++ b/drivers/thermal/thermal_core.c
> @@ -1012,7 +1012,6 @@ static int thermal_cooling_device_add(struct thermal_cooling_device *cdev, void
>         cdev->updated = false;
>         cdev->device.class = thermal_class;
>         cdev->device.release = thermal_cdev_release;
> -       device_initialize(&cdev->device);
>         cdev->devdata = devdata;
>
>         ret = dev_set_name(&cdev->device, "cooling_device%d", cdev->id);
> --

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] thermal/core: Fix double device initialization
  2026-05-25 15:29 ` Rafael J. Wysocki
@ 2026-05-25 15:33   ` Rafael J. Wysocki
  2026-05-25 15:43   ` Daniel Lezcano
  1 sibling, 0 replies; 5+ messages in thread
From: Rafael J. Wysocki @ 2026-05-25 15:33 UTC (permalink / raw)
  To: Daniel Lezcano; +Cc: linux-pm, rui.zhang, lukasz.luba, linux-kernel

On Mon, May 25, 2026 at 5:29 PM Rafael J. Wysocki <rafael@kernel.org> wrote:
>
> On Mon, May 25, 2026 at 5:16 PM Daniel Lezcano
> <daniel.lezcano@kernel.org> wrote:
> >
> > In the previous change splitting the cooling device register function,
> > the device initialization was mistakenly added in the move.
> >
> > This change is wrong because the device is registered with the
> > function device_register() which does device_initialize() and then
> > device_add(). That results in a double initialization and a message in
> > logs:
> >
> > [    1.531290] kobject: kobject (0000000053ba73b2): tried to init an initialized object, something is seriously wrong.
> > [    1.531293] CPU: 9 UID: 0 PID: 420 Comm: kworker/u50:3 Not tainted 7.1.0-rc1+ #48 PREEMPT(lazy)
> > [    1.531294] Hardware name: LENOVO 21N10007UK/21N10007UK, BIOS N42ET38W (1.12 ) 05/29/2024
> > [    1.531295] Workqueue: events_unbound deferred_probe_work_func
> > [    1.531298] Call trace:
> > [    1.531298]  show_stack+0x24/0x50 (C)
> > [    1.531301]  dump_stack_lvl+0x80/0xc0
> > [    1.531303]  kobject_init+0xc0/0xd8
> > [    1.531305]  device_initialize+0x3c/0x140
> > [    1.531308]  device_register+0x20/0x48
> > [    1.531310]  thermal_cooling_device_add+0xe0/0x208
> > [    1.531311]  thermal_of_cooling_device_register+0x54/0xa0
> > [    1.531313]  __cpufreq_cooling_register+0x1e0/0x368
> > [    1.531315]  of_cpufreq_cooling_register+0x64/0xe0
> > [    1.531316]  cpufreq_online+0xa6c/0xef0
> > [    1.531317]  cpufreq_add_dev+0x108/0x180
> > [    1.531318]  subsys_interface_register+0x138/0x168
> > [    1.531320]  cpufreq_register_driver+0x1b8/0x390
> >
> > Fix by just removing the added line.
> >
> > Fixes: 13f4e660a126 ("thermal/core: Split __thermal_cooling_device_register() into two functions")
>
> In this commit, the device_register() has been replaced with
> device_add(), so the problem above should not trigger.
>
> Which kernel have you tested?

Moreover, note that removing device_initialize() would break the
cleanup path which relies on the device's kobject to be initialized
AFAICS.

> > Signed-off-by: Daniel Lezcano <daniel.lezcano@kernel.org>
> > ---
> >  drivers/thermal/thermal_core.c | 1 -
> >  1 file changed, 1 deletion(-)
> >
> > diff --git a/drivers/thermal/thermal_core.c b/drivers/thermal/thermal_core.c
> > index 9b9fa51067bd..3cf305ceaf41 100644
> > --- a/drivers/thermal/thermal_core.c
> > +++ b/drivers/thermal/thermal_core.c
> > @@ -1012,7 +1012,6 @@ static int thermal_cooling_device_add(struct thermal_cooling_device *cdev, void
> >         cdev->updated = false;
> >         cdev->device.class = thermal_class;
> >         cdev->device.release = thermal_cdev_release;
> > -       device_initialize(&cdev->device);
> >         cdev->devdata = devdata;
> >
> >         ret = dev_set_name(&cdev->device, "cooling_device%d", cdev->id);
> > --

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] thermal/core: Fix double device initialization
  2026-05-25 15:29 ` Rafael J. Wysocki
  2026-05-25 15:33   ` Rafael J. Wysocki
@ 2026-05-25 15:43   ` Daniel Lezcano
  1 sibling, 0 replies; 5+ messages in thread
From: Daniel Lezcano @ 2026-05-25 15:43 UTC (permalink / raw)
  To: Rafael J. Wysocki, Daniel Lezcano
  Cc: linux-pm, rui.zhang, lukasz.luba, linux-kernel

On 5/25/26 17:29, Rafael J. Wysocki wrote:
> On Mon, May 25, 2026 at 5:16 PM Daniel Lezcano
> <daniel.lezcano@kernel.org> wrote:
>>
>> In the previous change splitting the cooling device register function,
>> the device initialization was mistakenly added in the move.
>>
>> This change is wrong because the device is registered with the
>> function device_register() which does device_initialize() and then
>> device_add(). That results in a double initialization and a message in
>> logs:
>>
>> [    1.531290] kobject: kobject (0000000053ba73b2): tried to init an initialized object, something is seriously wrong.
>> [    1.531293] CPU: 9 UID: 0 PID: 420 Comm: kworker/u50:3 Not tainted 7.1.0-rc1+ #48 PREEMPT(lazy)
>> [    1.531294] Hardware name: LENOVO 21N10007UK/21N10007UK, BIOS N42ET38W (1.12 ) 05/29/2024
>> [    1.531295] Workqueue: events_unbound deferred_probe_work_func
>> [    1.531298] Call trace:
>> [    1.531298]  show_stack+0x24/0x50 (C)
>> [    1.531301]  dump_stack_lvl+0x80/0xc0
>> [    1.531303]  kobject_init+0xc0/0xd8
>> [    1.531305]  device_initialize+0x3c/0x140
>> [    1.531308]  device_register+0x20/0x48
>> [    1.531310]  thermal_cooling_device_add+0xe0/0x208
>> [    1.531311]  thermal_of_cooling_device_register+0x54/0xa0
>> [    1.531313]  __cpufreq_cooling_register+0x1e0/0x368
>> [    1.531315]  of_cpufreq_cooling_register+0x64/0xe0
>> [    1.531316]  cpufreq_online+0xa6c/0xef0
>> [    1.531317]  cpufreq_add_dev+0x108/0x180
>> [    1.531318]  subsys_interface_register+0x138/0x168
>> [    1.531320]  cpufreq_register_driver+0x1b8/0x390
>>
>> Fix by just removing the added line.
>>
>> Fixes: 13f4e660a126 ("thermal/core: Split __thermal_cooling_device_register() into two functions")
> 
> In this commit, the device_register() has been replaced with
> device_add(), so the problem above should not trigger.
> 
> Which kernel have you tested?

Ah, right, I did the test on a branch having the patch "Split 
__thermal_cooling_device_register()" but without your changes where 
device_register() is replaced with device_add().

Everything ok then :)

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] thermal/core: Fix double device initialization
  2026-05-25 15:16 [PATCH] thermal/core: Fix double device initialization Daniel Lezcano
  2026-05-25 15:29 ` Rafael J. Wysocki
@ 2026-05-31  9:42 ` kernel test robot
  1 sibling, 0 replies; 5+ messages in thread
From: kernel test robot @ 2026-05-31  9:42 UTC (permalink / raw)
  To: Daniel Lezcano
  Cc: oe-lkp, lkp, linux-pm, rafael, daniel.lezcano, rui.zhang,
	lukasz.luba, linux-kernel, oliver.sang



Hello,

kernel test robot noticed "RIP:kobject_get" on:

commit: 01e1401d1389f3fe2815a3f391cb22224ff1bfb5 ("[PATCH] thermal/core: Fix double device initialization")
url: https://github.com/intel-lab-lkp/linux/commits/Daniel-Lezcano/thermal-core-Fix-double-device-initialization/20260525-231836
patch link: https://lore.kernel.org/all/20260525151609.2826121-2-daniel.lezcano@kernel.org/
patch subject: [PATCH] thermal/core: Fix double device initialization

in testcase: boot

config: x86_64-rhel-9.4-rust
compiler: clang-20
test machine: qemu-system-x86_64 -enable-kvm -cpu SandyBridge -smp 2 -m 32G

(please refer to attached dmesg/kmsg for entire log/backtrace)



If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <oliver.sang@intel.com>
| Closes: https://lore.kernel.org/oe-lkp/202605311744.299c79b6-lkp@intel.com



[    0.943552][   T21] ------------[ cut here ]------------
[    0.945364][   T21] kobject: 'cooling_device0' ((____ptrval____)): is not initialized, yet kobject_get() is being called.
[    0.949812][   T21] WARNING: lib/kobject.c:642 at kobject_get+0x16/0x80, CPU#0: cpuhp/0/21
[    0.952015][   T21] Modules linked in:
[    0.953029][   T21] CPU: 0 UID: 0 PID: 21 Comm: cpuhp/0 Not tainted 7.1.0-rc4-next-20260522+ #1 PREEMPT(lazy)
[    0.955559][   T21] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.16.3-debian-1.16.3-2 04/01/2014
[    0.958092][   T21] RIP: 0010:kobject_get (kobject.c:640)
[    0.959340][   T21] Code: 66 66 2e 0f 1f 84 00 00 00 00 00 48 89 f8 48 85 ff 74 3a 53 f6 40 3c 01 75 18 48 8d 3d ca c9 26 01 48 8b 30 48 89 c2 48 89 c3 <67> 48 0f b9 3a 48 89 d8 be 01 00 00 00 b9 01 00 00 00 f0 0f c1 48
All code
========
   0:	66 66 2e 0f 1f 84 00 	data16 cs nopw 0x0(%rax,%rax,1)
   7:	00 00 00 00 
   b:	48 89 f8             	mov    %rdi,%rax
   e:	48 85 ff             	test   %rdi,%rdi
  11:	74 3a                	je     0x4d
  13:	53                   	push   %rbx
  14:	f6 40 3c 01          	testb  $0x1,0x3c(%rax)
  18:	75 18                	jne    0x32
  1a:	48 8d 3d ca c9 26 01 	lea    0x126c9ca(%rip),%rdi        # 0x126c9eb
  21:	48 8b 30             	mov    (%rax),%rsi
  24:	48 89 c2             	mov    %rax,%rdx
  27:	48 89 c3             	mov    %rax,%rbx
  2a:*	67 48 0f b9 3a       	ud1    (%edx),%rdi		<-- trapping instruction
  2f:	48 89 d8             	mov    %rbx,%rax
  32:	be 01 00 00 00       	mov    $0x1,%esi
  37:	b9 01 00 00 00       	mov    $0x1,%ecx
  3c:	f0                   	lock
  3d:	0f                   	.byte 0xf
  3e:	c1                   	.byte 0xc1
  3f:	48                   	rex.W

Code starting with the faulting instruction
===========================================
   0:	67 48 0f b9 3a       	ud1    (%edx),%rdi
   5:	48 89 d8             	mov    %rbx,%rax
   8:	be 01 00 00 00       	mov    $0x1,%esi
   d:	b9 01 00 00 00       	mov    $0x1,%ecx
  12:	f0                   	lock
  13:	0f                   	.byte 0xf
  14:	c1                   	.byte 0xc1
  15:	48                   	rex.W
[    0.964083][   T21] RSP: 0000:ffffcbf2000bbd80 EFLAGS: 00010246
[    0.965592][   T21] RAX: ffff8bdb41ce3018 RBX: ffff8bdb41ce3018 RCX: 0000000000000000
[    0.967573][   T21] RDX: ffff8bdb41ce3018 RSI: ffff8bdb40aba8e0 RDI: ffffffffbe2b18e0
[    0.969551][   T21] RBP: 00000000ffffffea R08: 0000000000000000 R09: ffffffffbd0448fd
[    0.971541][   T21] R10: ffff8bdb41ce3001 R11: ffffffffbc95ce40 R12: ffff8bdb41ce3000
[    0.973500][   T21] R13: ffffffffbd3207d0 R14: ffff8bdb41ce3018 R15: ffff8bdb4180b000
[    0.975475][   T21] FS:  0000000000000000(0000) GS:ffff8be2a1119000(0000) knlGS:0000000000000000
[    0.977684][   T21] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[    0.979292][   T21] CR2: ffff8be27ffff000 CR3: 00000001f3220000 CR4: 00000000000406f0
[    0.981267][   T21] Call Trace:
[    0.982115][   T21]  <TASK>
[    0.982879][   T21]  device_add (base/core.c:3798 base/core.c:3578)
[    0.983946][   T21]  __thermal_cooling_device_register (thermal/thermal_core.c:1039)
[    0.985496][   T21]  acpi_processor_thermal_init (acpi/processor_thermal.c:316)
[    0.986903][   T21]  acpi_soft_cpu_online (acpi/processor_driver.c:167)
[    0.988178][   T21]  cpuhp_invoke_callback (cpu.c:194)
[    0.989488][   T21]  ? smpboot_thread_fn (smpboot.c:?)
[    0.990732][   T21]  cpuhp_thread_fun (cpu.c:1109)
[    0.991912][   T21]  smpboot_thread_fn (smpboot.c:160)
[    0.993138][   T21]  ? smpboot_unregister_percpu_thread (smpboot.c:320)
[    0.994663][   T21]  kthread (kthread.c:436)
[    0.995688][   T21]  ? kthread_blkcg (kthread.c:1737)
[    0.996817][   T21]  ret_from_fork (x86/kernel/process.c:158)
[    0.997947][   T21]  ? kthread_blkcg (kthread.c:1737)
[    0.999098][   T21]  ret_from_fork_asm (x86/entry/entry_64.S:245)
[    1.000269][   T21]  </TASK>
[    1.001042][   T21] ---[ end trace 0000000000000000 ]---


The kernel config and materials to reproduce are available at:
https://download.01.org/0day-ci/archive/20260531/202605311744.299c79b6-lkp@intel.com



-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2026-05-31  9:42 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-05-25 15:16 [PATCH] thermal/core: Fix double device initialization Daniel Lezcano
2026-05-25 15:29 ` Rafael J. Wysocki
2026-05-25 15:33   ` Rafael J. Wysocki
2026-05-25 15:43   ` Daniel Lezcano
2026-05-31  9:42 ` kernel test robot

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox