Skip to content

Commit

Permalink
[SPARC64]: Minor bug fix to obp_read_memory().
Browse files Browse the repository at this point in the history
If we end up zero'ing out the size of one of the entries,
pop it out of the array completely because some code that
examines these things cannot handle a zero length element
properly.

Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
David S. Miller committed Jun 24, 2006
1 parent 07f8e5f commit 486ad10
Showing 1 changed file with 19 additions and 2 deletions.
21 changes: 19 additions & 2 deletions arch/sparc64/mm/init.c
Original file line number Diff line number Diff line change
Expand Up @@ -102,8 +102,6 @@ static void __init read_obp_memory(const char *property,
prom_halt();
}

*num_ents = ents;

/* Sanitize what we got from the firmware, by page aligning
* everything.
*/
Expand All @@ -125,6 +123,25 @@ static void __init read_obp_memory(const char *property,
regs[i].phys_addr = base;
regs[i].reg_size = size;
}

for (i = 0; i < ents; i++) {
if (regs[i].reg_size == 0UL) {
int j;

for (j = i; j < ents - 1; j++) {
regs[j].phys_addr =
regs[j+1].phys_addr;
regs[j].reg_size =
regs[j+1].reg_size;
}

ents--;
i--;
}
}

*num_ents = ents;

sort(regs, ents, sizeof(struct linux_prom64_registers),
cmp_p64, NULL);
}
Expand Down

0 comments on commit 486ad10

Please sign in to comment.