Merge tag 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dledford/rdma
[deliverable/linux.git] / drivers / acpi / acpica / nsxfeval.c
index a7deeaa8eddcf9a3c09be091d4092959a05c8175..d2a9b4fd739f66447d72d282a11a997b921cd515 100644 (file)
@@ -256,7 +256,7 @@ acpi_evaluate_object(acpi_handle handle,
                 * Allocate a new parameter block for the internal objects
                 * Add 1 to count to allow for null terminated internal list
                 */
-               info->parameters = ACPI_ALLOCATE_ZEROED(((acpi_size) info->
+               info->parameters = ACPI_ALLOCATE_ZEROED(((acpi_size)info->
                                                         param_count +
                                                         1) * sizeof(void *));
                if (!info->parameters) {
@@ -280,13 +280,12 @@ acpi_evaluate_object(acpi_handle handle,
                info->parameters[info->param_count] = NULL;
        }
 
-#if 0
+#ifdef _FUTURE_FEATURE
 
        /*
         * Begin incoming argument count analysis. Check for too few args
         * and too many args.
         */
-
        switch (acpi_ns_get_type(info->node)) {
        case ACPI_TYPE_METHOD:
 
@@ -370,68 +369,68 @@ acpi_evaluate_object(acpi_handle handle,
         * If we are expecting a return value, and all went well above,
         * copy the return value to an external object.
         */
-       if (return_buffer) {
-               if (!info->return_object) {
-                       return_buffer->length = 0;
-               } else {
-                       if (ACPI_GET_DESCRIPTOR_TYPE(info->return_object) ==
-                           ACPI_DESC_TYPE_NAMED) {
-                               /*
-                                * If we received a NS Node as a return object, this means that
-                                * the object we are evaluating has nothing interesting to
-                                * return (such as a mutex, etc.)  We return an error because
-                                * these types are essentially unsupported by this interface.
-                                * We don't check up front because this makes it easier to add
-                                * support for various types at a later date if necessary.
-                                */
-                               status = AE_TYPE;
-                               info->return_object = NULL;     /* No need to delete a NS Node */
-                               return_buffer->length = 0;
-                       }
+       if (!return_buffer) {
+               goto cleanup_return_object;
+       }
 
-                       if (ACPI_SUCCESS(status)) {
+       if (!info->return_object) {
+               return_buffer->length = 0;
+               goto cleanup;
+       }
 
-                               /* Dereference Index and ref_of references */
+       if (ACPI_GET_DESCRIPTOR_TYPE(info->return_object) ==
+           ACPI_DESC_TYPE_NAMED) {
+               /*
+                * If we received a NS Node as a return object, this means that
+                * the object we are evaluating has nothing interesting to
+                * return (such as a mutex, etc.)  We return an error because
+                * these types are essentially unsupported by this interface.
+                * We don't check up front because this makes it easier to add
+                * support for various types at a later date if necessary.
+                */
+               status = AE_TYPE;
+               info->return_object = NULL;     /* No need to delete a NS Node */
+               return_buffer->length = 0;
+       }
 
-                               acpi_ns_resolve_references(info);
+       if (ACPI_FAILURE(status)) {
+               goto cleanup_return_object;
+       }
 
-                               /* Get the size of the returned object */
+       /* Dereference Index and ref_of references */
 
-                               status =
-                                   acpi_ut_get_object_size(info->return_object,
-                                                           &buffer_space_needed);
-                               if (ACPI_SUCCESS(status)) {
-
-                                       /* Validate/Allocate/Clear caller buffer */
-
-                                       status =
-                                           acpi_ut_initialize_buffer
-                                           (return_buffer,
-                                            buffer_space_needed);
-                                       if (ACPI_FAILURE(status)) {
-                                               /*
-                                                * Caller's buffer is too small or a new one can't
-                                                * be allocated
-                                                */
-                                               ACPI_DEBUG_PRINT((ACPI_DB_INFO,
-                                                                 "Needed buffer size %X, %s\n",
-                                                                 (u32)
-                                                                 buffer_space_needed,
-                                                                 acpi_format_exception
-                                                                 (status)));
-                                       } else {
-                                               /* We have enough space for the object, build it */
-
-                                               status =
-                                                   acpi_ut_copy_iobject_to_eobject
-                                                   (info->return_object,
-                                                    return_buffer);
-                                       }
-                               }
-                       }
+       acpi_ns_resolve_references(info);
+
+       /* Get the size of the returned object */
+
+       status = acpi_ut_get_object_size(info->return_object,
+                                        &buffer_space_needed);
+       if (ACPI_SUCCESS(status)) {
+
+               /* Validate/Allocate/Clear caller buffer */
+
+               status = acpi_ut_initialize_buffer(return_buffer,
+                                                  buffer_space_needed);
+               if (ACPI_FAILURE(status)) {
+                       /*
+                        * Caller's buffer is too small or a new one can't
+                        * be allocated
+                        */
+                       ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+                                         "Needed buffer size %X, %s\n",
+                                         (u32)buffer_space_needed,
+                                         acpi_format_exception(status)));
+               } else {
+                       /* We have enough space for the object, build it */
+
+                       status =
+                           acpi_ut_copy_iobject_to_eobject(info->return_object,
+                                                           return_buffer);
                }
        }
 
+cleanup_return_object:
+
        if (info->return_object) {
                /*
                 * Delete the internal return object. NOTE: Interpreter must be
This page took 0.114142 seconds and 5 git commands to generate.