aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/acpi/acpica/exstorob.c
diff options
context:
space:
mode:
authorLin Ming <ming.m.lin@intel.com>2009-08-26 09:01:34 +0800
committerLen Brown <len.brown@intel.com>2009-08-28 15:17:07 -0400
commitb0de22bdffa2e9a8e280d769c59f866605268484 (patch)
tree5415e58e6f2f0a76a1057659d51b39efcffe4925 /drivers/acpi/acpica/exstorob.c
parent326ba5010a5429a5a528b268b36a5900d4ab0eba (diff)
downloadkernel_samsung_smdk4412-b0de22bdffa2e9a8e280d769c59f866605268484.tar.gz
kernel_samsung_smdk4412-b0de22bdffa2e9a8e280d769c59f866605268484.tar.bz2
kernel_samsung_smdk4412-b0de22bdffa2e9a8e280d769c59f866605268484.zip
ACPICA: Windows compatibility fix: same buffer/string store
Fix a compatibility issue when the same buffer or string is stored to itself. This has been seen in the field. Previously, ACPICA would zero out the buffer/string. Now, the operation is treated as a NOP. http://bugzilla.acpica.org/show_bug.cgi?id=803 Reported-by: Rezwanul Kabir <Rezwanul_Kabir@Dell.com> Signed-off-by: Lin Ming <ming.m.lin@intel.com> Signed-off-by: Bob Moore <robert.moore@intel.com> Signed-off-by: Len Brown <len.brown@intel.com>
Diffstat (limited to 'drivers/acpi/acpica/exstorob.c')
-rw-r--r--drivers/acpi/acpica/exstorob.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/drivers/acpi/acpica/exstorob.c b/drivers/acpi/acpica/exstorob.c
index 67340cc7014..257706e7734 100644
--- a/drivers/acpi/acpica/exstorob.c
+++ b/drivers/acpi/acpica/exstorob.c
@@ -70,6 +70,12 @@ acpi_ex_store_buffer_to_buffer(union acpi_operand_object *source_desc,
ACPI_FUNCTION_TRACE_PTR(ex_store_buffer_to_buffer, source_desc);
+ /* If Source and Target are the same, just return */
+
+ if (source_desc == target_desc) {
+ return_ACPI_STATUS(AE_OK);
+ }
+
/* We know that source_desc is a buffer by now */
buffer = ACPI_CAST_PTR(u8, source_desc->buffer.pointer);
@@ -161,6 +167,12 @@ acpi_ex_store_string_to_string(union acpi_operand_object *source_desc,
ACPI_FUNCTION_TRACE_PTR(ex_store_string_to_string, source_desc);
+ /* If Source and Target are the same, just return */
+
+ if (source_desc == target_desc) {
+ return_ACPI_STATUS(AE_OK);
+ }
+
/* We know that source_desc is a string by now */
buffer = ACPI_CAST_PTR(u8, source_desc->string.pointer);