|
@@ -303,8 +303,10 @@ int walk_system_ram_range(unsigned long start_pfn, unsigned long nr_pages,
|
|
static int find_resource(struct resource *root, struct resource *new,
|
|
static int find_resource(struct resource *root, struct resource *new,
|
|
resource_size_t size, resource_size_t min,
|
|
resource_size_t size, resource_size_t min,
|
|
resource_size_t max, resource_size_t align,
|
|
resource_size_t max, resource_size_t align,
|
|
- void (*alignf)(void *, struct resource *,
|
|
|
|
- resource_size_t, resource_size_t),
|
|
|
|
|
|
+ resource_size_t (*alignf)(void *,
|
|
|
|
+ struct resource *,
|
|
|
|
+ resource_size_t,
|
|
|
|
+ resource_size_t),
|
|
void *alignf_data)
|
|
void *alignf_data)
|
|
{
|
|
{
|
|
struct resource *this = root->child;
|
|
struct resource *this = root->child;
|
|
@@ -330,7 +332,7 @@ static int find_resource(struct resource *root, struct resource *new,
|
|
tmp.end = max;
|
|
tmp.end = max;
|
|
tmp.start = ALIGN(tmp.start, align);
|
|
tmp.start = ALIGN(tmp.start, align);
|
|
if (alignf)
|
|
if (alignf)
|
|
- alignf(alignf_data, &tmp, size, align);
|
|
|
|
|
|
+ tmp.start = alignf(alignf_data, &tmp, size, align);
|
|
if (tmp.start < tmp.end && tmp.end - tmp.start >= size - 1) {
|
|
if (tmp.start < tmp.end && tmp.end - tmp.start >= size - 1) {
|
|
new->start = tmp.start;
|
|
new->start = tmp.start;
|
|
new->end = tmp.start + size - 1;
|
|
new->end = tmp.start + size - 1;
|
|
@@ -358,8 +360,10 @@ static int find_resource(struct resource *root, struct resource *new,
|
|
int allocate_resource(struct resource *root, struct resource *new,
|
|
int allocate_resource(struct resource *root, struct resource *new,
|
|
resource_size_t size, resource_size_t min,
|
|
resource_size_t size, resource_size_t min,
|
|
resource_size_t max, resource_size_t align,
|
|
resource_size_t max, resource_size_t align,
|
|
- void (*alignf)(void *, struct resource *,
|
|
|
|
- resource_size_t, resource_size_t),
|
|
|
|
|
|
+ resource_size_t (*alignf)(void *,
|
|
|
|
+ struct resource *,
|
|
|
|
+ resource_size_t,
|
|
|
|
+ resource_size_t),
|
|
void *alignf_data)
|
|
void *alignf_data)
|
|
{
|
|
{
|
|
int err;
|
|
int err;
|