{
        struct guid_block *block = NULL;
        struct wmi_block *wblock = NULL;
-       acpi_handle handle;
+       acpi_handle handle, wc_handle;
        acpi_status status, wc_status = AE_ERROR;
        struct acpi_object_list input, wc_input;
        union acpi_object wc_params[1], wq_params[1];
                 * expensive, but have no corresponding WCxx method. So we
                 * should not fail if this happens.
                 */
-               wc_status = acpi_evaluate_object(handle, wc_method,
-                       &wc_input, NULL);
+               wc_status = acpi_get_handle(handle, wc_method, &wc_handle);
+               if (ACPI_SUCCESS(wc_status))
+                       wc_status = acpi_evaluate_object(handle, wc_method,
+                               &wc_input, NULL);
        }
 
        strcpy(method, "WQ");
         * If ACPI_WMI_EXPENSIVE, call the relevant WCxx method, even if
         * the WQxx method failed - we should disable collection anyway.
         */
-       if ((block->flags & ACPI_WMI_EXPENSIVE) && wc_status) {
+       if ((block->flags & ACPI_WMI_EXPENSIVE) && ACPI_SUCCESS(wc_status)) {
                wc_params[0].integer.value = 0;
                status = acpi_evaluate_object(handle,
                wc_method, &wc_input, NULL);