Commit 7ae9c768 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'pm+acpi-4.5-final' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm

Pull power management and ACPI fixes from Rafael Wysocki:
 "Two more fixes for issues introduced recently, one in the generic
  device properties framework and one in ACPICA.

  Specifics:

   - Revert a recent ACPICA commit that has been reverted upstream,
     because it caused problems to happen on user systems and the
     problem it attempted to address will not be relevant any more after
     upcoming ACPI specification changes (Bob Moore).

   - Fix crash in the generic device properties framework introduced by
     a recent change that forgot to check pointers against error values
     in addition to checking them against NULL (Heikki Krogerus)"

* tag 'pm+acpi-4.5-final' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm:
  device property: fwnode->secondary may contain ERR_PTR(-ENODEV)
  ACPICA: Revert "Parser: Fix for SuperName method invocation"
parents 2a62ec0a 5b3e7e05
...@@ -269,8 +269,7 @@ acpi_ps_get_next_namepath(struct acpi_walk_state *walk_state, ...@@ -269,8 +269,7 @@ acpi_ps_get_next_namepath(struct acpi_walk_state *walk_state,
*/ */
if (ACPI_SUCCESS(status) && if (ACPI_SUCCESS(status) &&
possible_method_call && (node->type == ACPI_TYPE_METHOD)) { possible_method_call && (node->type == ACPI_TYPE_METHOD)) {
if (GET_CURRENT_ARG_TYPE(walk_state->arg_types) == if (walk_state->opcode == AML_UNLOAD_OP) {
ARGP_SUPERNAME) {
/* /*
* acpi_ps_get_next_namestring has increased the AML pointer, * acpi_ps_get_next_namestring has increased the AML pointer,
* so we need to restore the saved AML pointer for method call. * so we need to restore the saved AML pointer for method call.
...@@ -697,7 +696,7 @@ static union acpi_parse_object *acpi_ps_get_next_field(struct acpi_parse_state ...@@ -697,7 +696,7 @@ static union acpi_parse_object *acpi_ps_get_next_field(struct acpi_parse_state
* *
* PARAMETERS: walk_state - Current state * PARAMETERS: walk_state - Current state
* parser_state - Current parser state object * parser_state - Current parser state object
* arg_type - The parser argument type (ARGP_*) * arg_type - The argument type (AML_*_ARG)
* return_arg - Where the next arg is returned * return_arg - Where the next arg is returned
* *
* RETURN: Status, and an op object containing the next argument. * RETURN: Status, and an op object containing the next argument.
...@@ -817,9 +816,9 @@ acpi_ps_get_next_arg(struct acpi_walk_state *walk_state, ...@@ -817,9 +816,9 @@ acpi_ps_get_next_arg(struct acpi_walk_state *walk_state,
return_ACPI_STATUS(AE_NO_MEMORY); return_ACPI_STATUS(AE_NO_MEMORY);
} }
/* super_name allows argument to be a method call */ /* To support super_name arg of Unload */
if (arg_type == ARGP_SUPERNAME) { if (walk_state->opcode == AML_UNLOAD_OP) {
status = status =
acpi_ps_get_next_namepath(walk_state, acpi_ps_get_next_namepath(walk_state,
parser_state, arg, parser_state, arg,
......
...@@ -218,7 +218,7 @@ bool fwnode_property_present(struct fwnode_handle *fwnode, const char *propname) ...@@ -218,7 +218,7 @@ bool fwnode_property_present(struct fwnode_handle *fwnode, const char *propname)
bool ret; bool ret;
ret = __fwnode_property_present(fwnode, propname); ret = __fwnode_property_present(fwnode, propname);
if (ret == false && fwnode && fwnode->secondary) if (ret == false && fwnode && !IS_ERR_OR_NULL(fwnode->secondary))
ret = __fwnode_property_present(fwnode->secondary, propname); ret = __fwnode_property_present(fwnode->secondary, propname);
return ret; return ret;
} }
...@@ -423,7 +423,7 @@ EXPORT_SYMBOL_GPL(device_property_match_string); ...@@ -423,7 +423,7 @@ EXPORT_SYMBOL_GPL(device_property_match_string);
int _ret_; \ int _ret_; \
_ret_ = FWNODE_PROP_READ(_fwnode_, _propname_, _type_, _proptype_, \ _ret_ = FWNODE_PROP_READ(_fwnode_, _propname_, _type_, _proptype_, \
_val_, _nval_); \ _val_, _nval_); \
if (_ret_ == -EINVAL && _fwnode_ && _fwnode_->secondary) \ if (_ret_ == -EINVAL && _fwnode_ && !IS_ERR_OR_NULL(_fwnode_->secondary)) \
_ret_ = FWNODE_PROP_READ(_fwnode_->secondary, _propname_, _type_, \ _ret_ = FWNODE_PROP_READ(_fwnode_->secondary, _propname_, _type_, \
_proptype_, _val_, _nval_); \ _proptype_, _val_, _nval_); \
_ret_; \ _ret_; \
...@@ -593,7 +593,7 @@ int fwnode_property_read_string_array(struct fwnode_handle *fwnode, ...@@ -593,7 +593,7 @@ int fwnode_property_read_string_array(struct fwnode_handle *fwnode,
int ret; int ret;
ret = __fwnode_property_read_string_array(fwnode, propname, val, nval); ret = __fwnode_property_read_string_array(fwnode, propname, val, nval);
if (ret == -EINVAL && fwnode && fwnode->secondary) if (ret == -EINVAL && fwnode && !IS_ERR_OR_NULL(fwnode->secondary))
ret = __fwnode_property_read_string_array(fwnode->secondary, ret = __fwnode_property_read_string_array(fwnode->secondary,
propname, val, nval); propname, val, nval);
return ret; return ret;
...@@ -621,7 +621,7 @@ int fwnode_property_read_string(struct fwnode_handle *fwnode, ...@@ -621,7 +621,7 @@ int fwnode_property_read_string(struct fwnode_handle *fwnode,
int ret; int ret;
ret = __fwnode_property_read_string(fwnode, propname, val); ret = __fwnode_property_read_string(fwnode, propname, val);
if (ret == -EINVAL && fwnode && fwnode->secondary) if (ret == -EINVAL && fwnode && !IS_ERR_OR_NULL(fwnode->secondary))
ret = __fwnode_property_read_string(fwnode->secondary, ret = __fwnode_property_read_string(fwnode->secondary,
propname, val); propname, val);
return ret; return ret;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment