aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/acpi
diff options
context:
space:
mode:
authorYasunori Goto <y-goto@jp.fujitsu.com>2006-06-27 05:53:29 -0400
committerLinus Torvalds <torvalds@g5.osdl.org>2006-06-27 20:32:35 -0400
commitdd56a8e36f91f63c0a31e8a118d87b7cf01526b8 (patch)
tree70e70c16e460df0b8da151bfff09e6b637c97b10 /drivers/acpi
parent1f425994f96d85540d47eee98daabc1e211b454e (diff)
[PATCH] Catch notification of memory add event of ACPI via container driver. (avoid redundant call add_memory)
When acpi_memory_device_init() is called at boottime to register struct memory acpi_memory_device, acpi_bus_add() are called via acpi_driver_attach(). But it also calls ops->start() function. It is called even if the memory blocks are initialized at early boottime. In this case add_memory() return -EEXIST, and the memory blocks becomes INVALID state even if it is normal. This is patch to avoid calling add_memory() for already available memory. [akpm@osdl.org: coding cleanups] Signed-off-by: Yasunori Goto <y-goto@jp.fujitsu.com> Cc: "Brown, Len" <len.brown@intel.com> Cc: Dave Hansen <haveblue@us.ibm.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'drivers/acpi')
-rw-r--r--drivers/acpi/acpi_memhotplug.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/drivers/acpi/acpi_memhotplug.c b/drivers/acpi/acpi_memhotplug.c
index 3721f8dd0de3..5652569b3762 100644
--- a/drivers/acpi/acpi_memhotplug.c
+++ b/drivers/acpi/acpi_memhotplug.c
@@ -234,6 +234,17 @@ static int acpi_memory_enable_device(struct acpi_memory_device *mem_device)
234 * (i.e. memory-hot-remove function) 234 * (i.e. memory-hot-remove function)
235 */ 235 */
236 list_for_each_entry(info, &mem_device->res_list, list) { 236 list_for_each_entry(info, &mem_device->res_list, list) {
237 u64 start_pfn, end_pfn;
238
239 start_pfn = info->start_addr >> PAGE_SHIFT;
240 end_pfn = (info->start_addr + info->length - 1) >> PAGE_SHIFT;
241
242 if (pfn_valid(start_pfn) || pfn_valid(end_pfn)) {
243 /* already enabled. try next area */
244 num_enabled++;
245 continue;
246 }
247
237 result = add_memory(info->start_addr, info->length); 248 result = add_memory(info->start_addr, info->length);
238 if (result) 249 if (result)
239 continue; 250 continue;