find_next_system_ram() returns valid memory range which meets requested
area, only used by memory-hot-add.
This function always rewrite requested resource even if returned area is
not fully fit in requested one. And sometimes the returnd resource is larger
than requested area. This annoyes the caller.
This patch changes the returned value to fit in requested area.
Signed-Off-By: KAMEZAWA Hiroyuki <[email protected]>
kernel/resource.c | 6 ++++--
1 files changed, 4 insertions(+), 2 deletions(-)
Index: linux-2.6.18-rc3/kernel/resource.c
===================================================================
--- linux-2.6.18-rc3.orig/kernel/resource.c 2006-08-01 16:11:56.000000000 +0900
+++ linux-2.6.18-rc3/kernel/resource.c 2006-08-01 16:38:45.000000000 +0900
@@ -261,8 +261,10 @@
if (!p)
return -1;
/* copy data */
- res->start = p->start;
- res->end = p->end;
+ if (res->start < p->start)
+ res->start = p->start;
+ if (res->end > p->end)
+ res->end = p->end;
return 0;
}
#endif
On Thu, 2006-08-03 at 12:33 +0900, KAMEZAWA Hiroyuki wrote:
> find_next_system_ram() returns valid memory range which meets requested
> area, only used by memory-hot-add.
> This function always rewrite requested resource even if returned area is
> not fully fit in requested one. And sometimes the returnd resource is larger
> than requested area. This annoyes the caller.
> This patch changes the returned value to fit in requested area.
>
> Signed-Off-By: KAMEZAWA Hiroyuki <[email protected]>
>
> kernel/resource.c | 6 ++++--
> 1 files changed, 4 insertions(+), 2 deletions(-)
>
> Index: linux-2.6.18-rc3/kernel/resource.c
> ===================================================================
> --- linux-2.6.18-rc3.orig/kernel/resource.c 2006-08-01 16:11:56.000000000 +0900
> +++ linux-2.6.18-rc3/kernel/resource.c 2006-08-01 16:38:45.000000000 +0900
> @@ -261,8 +261,10 @@
> if (!p)
> return -1;
> /* copy data */
> - res->start = p->start;
> - res->end = p->end;
> + if (res->start < p->start)
> + res->start = p->start;
> + if (res->end > p->end)
> + res->end = p->end;
> return 0;
> }
> #endif
This is a needed fix for me. It looks and works great on x86_64.
Acked-By: Keith Mannthey <[email protected]>