diff options
Diffstat (limited to 'drivers/platform/x86/surface3-wmi.c')
-rw-r--r-- | drivers/platform/x86/surface3-wmi.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/drivers/platform/x86/surface3-wmi.c b/drivers/platform/x86/surface3-wmi.c index 5553b2b85e0a..cbf4d83a7271 100644 --- a/drivers/platform/x86/surface3-wmi.c +++ b/drivers/platform/x86/surface3-wmi.c | |||
@@ -60,10 +60,10 @@ static DEFINE_MUTEX(s3_wmi_lock); | |||
60 | 60 | ||
61 | static int s3_wmi_query_block(const char *guid, int instance, int *ret) | 61 | static int s3_wmi_query_block(const char *guid, int instance, int *ret) |
62 | { | 62 | { |
63 | struct acpi_buffer output = { ACPI_ALLOCATE_BUFFER, NULL }; | ||
63 | acpi_status status; | 64 | acpi_status status; |
64 | union acpi_object *obj; | 65 | union acpi_object *obj; |
65 | 66 | int error = 0; | |
66 | struct acpi_buffer output = { ACPI_ALLOCATE_BUFFER, NULL }; | ||
67 | 67 | ||
68 | mutex_lock(&s3_wmi_lock); | 68 | mutex_lock(&s3_wmi_lock); |
69 | status = wmi_query_block(guid, instance, &output); | 69 | status = wmi_query_block(guid, instance, &output); |
@@ -77,13 +77,14 @@ static int s3_wmi_query_block(const char *guid, int instance, int *ret) | |||
77 | obj->type == ACPI_TYPE_BUFFER ? | 77 | obj->type == ACPI_TYPE_BUFFER ? |
78 | obj->buffer.length : 0); | 78 | obj->buffer.length : 0); |
79 | } | 79 | } |
80 | kfree(obj); | 80 | error = -EINVAL; |
81 | return -EINVAL; | 81 | goto out_free_unlock; |
82 | } | 82 | } |
83 | *ret = obj->integer.value; | 83 | *ret = obj->integer.value; |
84 | out_free_unlock: | ||
84 | kfree(obj); | 85 | kfree(obj); |
85 | mutex_unlock(&s3_wmi_lock); | 86 | mutex_unlock(&s3_wmi_lock); |
86 | return 0; | 87 | return error; |
87 | } | 88 | } |
88 | 89 | ||
89 | static inline int s3_wmi_query_lid(int *ret) | 90 | static inline int s3_wmi_query_lid(int *ret) |