diff options
Diffstat (limited to 'source/components/executer/exstore.c')
| -rw-r--r-- | source/components/executer/exstore.c | 25 | 
1 files changed, 20 insertions, 5 deletions
| diff --git a/source/components/executer/exstore.c b/source/components/executer/exstore.c index 283cff59864f..2eb089783445 100644 --- a/source/components/executer/exstore.c +++ b/source/components/executer/exstore.c @@ -515,13 +515,28 @@ AcpiExStoreObjectToNode (      default:          ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, -            "Storing %s (%p) directly into node (%p) with no implicit conversion\n", -            AcpiUtGetObjectTypeName (SourceDesc), SourceDesc, Node)); +            "Storing [%s] (%p) directly into node [%s] (%p)" +            " with no implicit conversion\n", +            AcpiUtGetObjectTypeName (SourceDesc), SourceDesc, +            AcpiUtGetObjectTypeName (TargetDesc), Node)); -        /* No conversions for all other types. Just attach the source object */ +        /* +         * No conversions for all other types. Directly store a copy of +         * the source object. NOTE: This is a departure from the ACPI +         * spec, which states "If conversion is impossible, abort the +         * running control method". +         * +         * This code implements "If conversion is impossible, treat the +         * Store operation as a CopyObject". +         */ +        Status = AcpiUtCopyIobjectToIobject (SourceDesc, &NewDesc, WalkState); +        if (ACPI_FAILURE (Status)) +        { +            return_ACPI_STATUS (Status); +        } -        Status = AcpiNsAttachObject (Node, SourceDesc, -                    SourceDesc->Common.Type); +        Status = AcpiNsAttachObject (Node, NewDesc, NewDesc->Common.Type); +        AcpiUtRemoveReference (NewDesc);          break;      } | 
