diff --git a/drivers/platform/x86/Kconfig b/drivers/platform/x86/Kconfig index ac4d48830415..2025f56446a0 100644 --- a/drivers/platform/x86/Kconfig +++ b/drivers/platform/x86/Kconfig @@ -1158,6 +1158,15 @@ config SURFACE_3_BUTTON ---help--- This driver handles the power/home/volume buttons on the Microsoft Surface 3 tablet. +config ACPI_SURFACE + tristate "Microsoft Surface Extras" + depends on ACPI + depends on ACPI_WMI + depends on INPUT + ---help--- + This driver adds support for access to certain system events + on Microsoft Surface devices. + config INTEL_PUNIT_IPC tristate "Intel P-Unit IPC Driver" ---help--- diff --git a/kernel/power/suspend.c b/kernel/power/suspend.c index 87331565e505..d55f949ee25a 100644 --- a/kernel/power/suspend.c +++ b/kernel/power/suspend.c @@ -520,6 +520,8 @@ int suspend_devices_and_enter(suspend_state_t state) goto Resume_devices; } +unsigned int resume_delay = 3000; + /** * suspend_finish - Clean up before finishing the suspend sequence. * @@ -528,6 +530,15 @@ int suspend_devices_and_enter(suspend_state_t state) */ static void suspend_finish(void) { + if (resume_delay) { + /* Give kernel threads a head start, such that usb-storage + * can detect devices before syslog attempts to write log + * messages from the suspend code. + */ + thaw_kernel_threads(); + pr_debug("PM: Sleeping for %d milliseconds.\n", resume_delay); + msleep(resume_delay); + } suspend_thaw_processes(); pm_notifier_call_chain(PM_POST_SUSPEND); pm_restore_console(); diff --git a/kernel/sysctl.c b/kernel/sysctl.c index 2d9837c0aff4..ac704bf71f45 100644 --- a/kernel/sysctl.c +++ b/kernel/sysctl.c @@ -308,7 +308,16 @@ static int min_extfrag_threshold; static int max_extfrag_threshold = 1000; #endif +extern unsigned int resume_delay; + static struct ctl_table kern_table[] = { + { + .procname = "resume_delay", + .data = &resume_delay, + .maxlen = sizeof(unsigned int), + .mode = 0644, + .proc_handler = proc_dointvec, + }, { .procname = "sched_child_runs_first", .data = &sysctl_sched_child_runs_first, -- 2.19.1