File tree Expand file tree Collapse file tree 2 files changed +25
-0
lines changed Expand file tree Collapse file tree 2 files changed +25
-0
lines changed Original file line number Diff line number Diff line change @@ -105,6 +105,14 @@ enum sys_off_mode {
105
105
*/
106
106
SYS_OFF_MODE_POWER_OFF ,
107
107
108
+ /**
109
+ * @SYS_OFF_MODE_RESTART_PREPARE:
110
+ *
111
+ * Handlers prepare system to be restarted. Handlers are
112
+ * allowed to sleep.
113
+ */
114
+ SYS_OFF_MODE_RESTART_PREPARE ,
115
+
108
116
/**
109
117
* @SYS_OFF_MODE_RESTART:
110
118
*
Original file line number Diff line number Diff line change @@ -243,6 +243,17 @@ void migrate_to_reboot_cpu(void)
243
243
set_cpus_allowed_ptr (current , cpumask_of (cpu ));
244
244
}
245
245
246
+ /*
247
+ * Notifier list for kernel code which wants to be called
248
+ * to prepare system for restart.
249
+ */
250
+ static BLOCKING_NOTIFIER_HEAD (restart_prep_handler_list );
251
+
252
+ static void do_kernel_restart_prepare (void )
253
+ {
254
+ blocking_notifier_call_chain (& restart_prep_handler_list , 0 , NULL );
255
+ }
256
+
246
257
/**
247
258
* kernel_restart - reboot the system
248
259
* @cmd: pointer to buffer containing command to execute for restart
@@ -254,6 +265,7 @@ void migrate_to_reboot_cpu(void)
254
265
void kernel_restart (char * cmd )
255
266
{
256
267
kernel_restart_prepare (cmd );
268
+ do_kernel_restart_prepare ();
257
269
migrate_to_reboot_cpu ();
258
270
syscore_shutdown ();
259
271
if (!cmd )
@@ -396,6 +408,11 @@ register_sys_off_handler(enum sys_off_mode mode,
396
408
handler -> list = & power_off_handler_list ;
397
409
break ;
398
410
411
+ case SYS_OFF_MODE_RESTART_PREPARE :
412
+ handler -> list = & restart_prep_handler_list ;
413
+ handler -> blocking = true;
414
+ break ;
415
+
399
416
case SYS_OFF_MODE_RESTART :
400
417
handler -> list = & restart_handler_list ;
401
418
break ;
You can’t perform that action at this time.
0 commit comments