Merge tag 'pm+acpi-4.2-rc1-2' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael...
authorLinus Torvalds <torvalds@linux-foundation.org>
Wed, 1 Jul 2015 21:17:44 +0000 (14:17 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Wed, 1 Jul 2015 21:17:44 +0000 (14:17 -0700)
Pull power management and ACPI fixes from Rafael Wysocki:
 "These are fixes that didn't make it to the previous PM+ACPI pull
  request or are fixing issues introduced by it.

  Specifics:

   - Fix a recently added memory leak in an error path in the ACPI
     resources management code (Dan Carpenter)

   - Fix a build warning triggered by an ACPI video header function that
     should be static inline (Borislav Petkov)

   - Change names of helper function converting struct fwnode_handle
     pointers to either struct device_node or struct acpi_device
     pointers so they don't conflict with local variable names
     (Alexander Sverdlin)

   - Make the hibernate core re-enable nonboot CPUs on failures to
     disable them as expected (Vitaly Kuznetsov)

   - Increase the default timeout of the device suspend watchdog to
     prevent it from triggering too early on some systems (Takashi Iwai)

   - Prevent the cpuidle powernv driver from registering idle states
     with CPUIDLE_FLAG_TIMER_STOP set if CONFIG_TICK_ONESHOT is unset
     which leads to boot hangs (Preeti U Murthy)"

* tag 'pm+acpi-4.2-rc1-2' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm:
  tick/idle/powerpc: Do not register idle states with CPUIDLE_FLAG_TIMER_STOP set in periodic mode
  PM / sleep: Increase default DPM watchdog timeout to 60
  PM / hibernate: re-enable nonboot cpus on disable_nonboot_cpus() failure
  ACPI / OF: Rename of_node() and acpi_node() to to_of_node() and to_acpi_node()
  ACPI / video: Inline acpi_video_set_dmi_backlight_type
  ACPI / resources: free memory on error in add_region_before()

drivers/acpi/resource.c
drivers/base/property.c
drivers/cpuidle/cpuidle-powernv.c
drivers/gpio/gpiolib.c
drivers/leds/leds-gpio.c
include/acpi/acpi_bus.h
include/acpi/video.h
include/linux/acpi.h
include/linux/of.h
kernel/power/Kconfig
kernel/power/hibernate.c

index fcb7807..10561ce 100644 (file)
@@ -660,8 +660,10 @@ static int add_region_before(u64 start, u64 end, u8 space_id,
                return -ENOMEM;
 
        error = request_range(start, end, space_id, flags, desc);
-       if (error)
+       if (error) {
+               kfree(reg);
                return error;
+       }
 
        reg->start = start;
        reg->end = end;
index e645852..f3f6d16 100644 (file)
@@ -129,9 +129,9 @@ EXPORT_SYMBOL_GPL(device_property_present);
 bool fwnode_property_present(struct fwnode_handle *fwnode, const char *propname)
 {
        if (is_of_node(fwnode))
-               return of_property_read_bool(of_node(fwnode), propname);
+               return of_property_read_bool(to_of_node(fwnode), propname);
        else if (is_acpi_node(fwnode))
-               return !acpi_dev_prop_get(acpi_node(fwnode), propname, NULL);
+               return !acpi_dev_prop_get(to_acpi_node(fwnode), propname, NULL);
 
        return !!pset_prop_get(to_pset(fwnode), propname);
 }
@@ -286,10 +286,10 @@ EXPORT_SYMBOL_GPL(device_property_read_string);
 ({ \
        int _ret_; \
        if (is_of_node(_fwnode_)) \
-               _ret_ = OF_DEV_PROP_READ_ARRAY(of_node(_fwnode_), _propname_, \
+               _ret_ = OF_DEV_PROP_READ_ARRAY(to_of_node(_fwnode_), _propname_, \
                                               _type_, _val_, _nval_); \
        else if (is_acpi_node(_fwnode_)) \
-               _ret_ = acpi_dev_prop_read(acpi_node(_fwnode_), _propname_, \
+               _ret_ = acpi_dev_prop_read(to_acpi_node(_fwnode_), _propname_, \
                                           _proptype_, _val_, _nval_); \
        else \
                _ret_ = pset_prop_read_array(to_pset(_fwnode_), _propname_, \
@@ -425,11 +425,11 @@ int fwnode_property_read_string_array(struct fwnode_handle *fwnode,
 {
        if (is_of_node(fwnode))
                return val ?
-                       of_property_read_string_array(of_node(fwnode), propname,
-                                                     val, nval) :
-                       of_property_count_strings(of_node(fwnode), propname);
+                       of_property_read_string_array(to_of_node(fwnode),
+                                                     propname, val, nval) :
+                       of_property_count_strings(to_of_node(fwnode), propname);
        else if (is_acpi_node(fwnode))
-               return acpi_dev_prop_read(acpi_node(fwnode), propname,
+               return acpi_dev_prop_read(to_acpi_node(fwnode), propname,
                                          DEV_PROP_STRING, val, nval);
 
        return pset_prop_read_array(to_pset(fwnode), propname,
@@ -456,9 +456,9 @@ int fwnode_property_read_string(struct fwnode_handle *fwnode,
                                const char *propname, const char **val)
 {
        if (is_of_node(fwnode))
-               return of_property_read_string(of_node(fwnode), propname, val);
+               return of_property_read_string(to_of_node(fwnode), propname, val);
        else if (is_acpi_node(fwnode))
-               return acpi_dev_prop_read(acpi_node(fwnode), propname,
+               return acpi_dev_prop_read(to_acpi_node(fwnode), propname,
                                          DEV_PROP_STRING, val, 1);
 
        return -ENXIO;
@@ -476,13 +476,13 @@ struct fwnode_handle *device_get_next_child_node(struct device *dev,
        if (IS_ENABLED(CONFIG_OF) && dev->of_node) {
                struct device_node *node;
 
-               node = of_get_next_available_child(dev->of_node, of_node(child));
+               node = of_get_next_available_child(dev->of_node, to_of_node(child));
                if (node)
                        return &node->fwnode;
        } else if (IS_ENABLED(CONFIG_ACPI)) {
                struct acpi_device *node;
 
-               node = acpi_get_next_child(dev, acpi_node(child));
+               node = acpi_get_next_child(dev, to_acpi_node(child));
                if (node)
                        return acpi_fwnode_handle(node);
        }
@@ -501,7 +501,7 @@ EXPORT_SYMBOL_GPL(device_get_next_child_node);
 void fwnode_handle_put(struct fwnode_handle *fwnode)
 {
        if (is_of_node(fwnode))
-               of_node_put(of_node(fwnode));
+               of_node_put(to_of_node(fwnode));
 }
 EXPORT_SYMBOL_GPL(fwnode_handle_put);
 
index 1e3ef5e..845bafc 100644 (file)
@@ -67,6 +67,8 @@ static int nap_loop(struct cpuidle_device *dev,
        return index;
 }
 
+/* Register for fastsleep only in oneshot mode of broadcast */
+#ifdef CONFIG_TICK_ONESHOT
 static int fastsleep_loop(struct cpuidle_device *dev,
                                struct cpuidle_driver *drv,
                                int index)
@@ -90,7 +92,7 @@ static int fastsleep_loop(struct cpuidle_device *dev,
 
        return index;
 }
-
+#endif
 /*
  * States for dedicated partition case.
  */
@@ -216,7 +218,14 @@ static int powernv_add_idle_states(void)
                        powernv_states[nr_idle_states].flags = 0;
                        powernv_states[nr_idle_states].target_residency = 100;
                        powernv_states[nr_idle_states].enter = &nap_loop;
-               } else if (flags[i] & OPAL_PM_SLEEP_ENABLED ||
+               }
+
+               /*
+                * All cpuidle states with CPUIDLE_FLAG_TIMER_STOP set must come
+                * within this config dependency check.
+                */
+#ifdef CONFIG_TICK_ONESHOT
+               if (flags[i] & OPAL_PM_SLEEP_ENABLED ||
                        flags[i] & OPAL_PM_SLEEP_ENABLED_ER1) {
                        /* Add FASTSLEEP state */
                        strcpy(powernv_states[nr_idle_states].name, "FastSleep");
@@ -225,7 +234,7 @@ static int powernv_add_idle_states(void)
                        powernv_states[nr_idle_states].target_residency = 300000;
                        powernv_states[nr_idle_states].enter = &fastsleep_loop;
                }
-
+#endif
                powernv_states[nr_idle_states].exit_latency =
                                ((unsigned int)latency_ns[i]) / 1000;
 
index be42ab3..bf4bd1d 100644 (file)
@@ -2052,14 +2052,14 @@ struct gpio_desc *fwnode_get_named_gpiod(struct fwnode_handle *fwnode,
        if (is_of_node(fwnode)) {
                enum of_gpio_flags flags;
 
-               desc = of_get_named_gpiod_flags(of_node(fwnode), propname, 0,
+               desc = of_get_named_gpiod_flags(to_of_node(fwnode), propname, 0,
                                                &flags);
                if (!IS_ERR(desc))
                        active_low = flags & OF_GPIO_ACTIVE_LOW;
        } else if (is_acpi_node(fwnode)) {
                struct acpi_gpio_info info;
 
-               desc = acpi_get_gpiod_by_index(acpi_node(fwnode), propname, 0,
+               desc = acpi_get_gpiod_by_index(to_acpi_node(fwnode), propname, 0,
                                               &info);
                if (!IS_ERR(desc))
                        active_low = info.active_low;
index 15eb3f8..d2d54d6 100644 (file)
@@ -191,7 +191,7 @@ static struct gpio_leds_priv *gpio_leds_create(struct platform_device *pdev)
                        goto err;
                }
 
-               np = of_node(child);
+               np = to_of_node(child);
 
                if (fwnode_property_present(child, "label")) {
                        fwnode_property_read_string(child, "label", &led.name);
index b43276f..83061ca 100644 (file)
@@ -420,7 +420,7 @@ static inline bool is_acpi_node(struct fwnode_handle *fwnode)
        return fwnode && fwnode->type == FWNODE_ACPI;
 }
 
-static inline struct acpi_device *acpi_node(struct fwnode_handle *fwnode)
+static inline struct acpi_device *to_acpi_node(struct fwnode_handle *fwnode)
 {
        return is_acpi_node(fwnode) ?
                container_of(fwnode, struct acpi_device, fwnode) : NULL;
index a7d7f10..e840b29 100644 (file)
@@ -43,7 +43,7 @@ static inline enum acpi_backlight_type acpi_video_get_backlight_type(void)
 {
        return acpi_backlight_vendor;
 }
-static void acpi_video_set_dmi_backlight_type(enum acpi_backlight_type type)
+static inline void acpi_video_set_dmi_backlight_type(enum acpi_backlight_type type)
 {
 }
 #endif
index 1618cdf..c471dfc 100644 (file)
@@ -53,7 +53,7 @@ static inline acpi_handle acpi_device_handle(struct acpi_device *adev)
        return adev ? adev->handle : NULL;
 }
 
-#define ACPI_COMPANION(dev)            acpi_node((dev)->fwnode)
+#define ACPI_COMPANION(dev)            to_acpi_node((dev)->fwnode)
 #define ACPI_COMPANION_SET(dev, adev)  set_primary_fwnode(dev, (adev) ? \
        acpi_fwnode_handle(adev) : NULL)
 #define ACPI_HANDLE(dev)               acpi_device_handle(ACPI_COMPANION(dev))
@@ -454,7 +454,7 @@ static inline bool is_acpi_node(struct fwnode_handle *fwnode)
        return false;
 }
 
-static inline struct acpi_device *acpi_node(struct fwnode_handle *fwnode)
+static inline struct acpi_device *to_acpi_node(struct fwnode_handle *fwnode)
 {
        return NULL;
 }
index b871ff9..f05fdce 100644 (file)
@@ -128,7 +128,7 @@ static inline bool is_of_node(struct fwnode_handle *fwnode)
        return fwnode && fwnode->type == FWNODE_OF;
 }
 
-static inline struct device_node *of_node(struct fwnode_handle *fwnode)
+static inline struct device_node *to_of_node(struct fwnode_handle *fwnode)
 {
        return fwnode ? container_of(fwnode, struct device_node, fwnode) : NULL;
 }
@@ -387,7 +387,7 @@ static inline bool is_of_node(struct fwnode_handle *fwnode)
        return false;
 }
 
-static inline struct device_node *of_node(struct fwnode_handle *fwnode)
+static inline struct device_node *to_of_node(struct fwnode_handle *fwnode)
 {
        return NULL;
 }
index 7e01f78..9e30231 100644 (file)
@@ -187,7 +187,7 @@ config DPM_WATCHDOG
 config DPM_WATCHDOG_TIMEOUT
        int "Watchdog timeout in seconds"
        range 1 120
-       default 12
+       default 60
        depends on DPM_WATCHDOG
 
 config PM_TRACE
index 2329daa..690f78f 100644 (file)
@@ -552,7 +552,7 @@ int hibernation_platform_enter(void)
 
        error = disable_nonboot_cpus();
        if (error)
-               goto Platform_finish;
+               goto Enable_cpus;
 
        local_irq_disable();
        syscore_suspend();
@@ -568,6 +568,8 @@ int hibernation_platform_enter(void)
  Power_up:
        syscore_resume();
        local_irq_enable();
+
+ Enable_cpus:
        enable_nonboot_cpus();
 
  Platform_finish: