bootloader reads into a physical address (not a virtual address)

This commit is contained in:
Frans Kaashoek 2011-08-17 20:52:28 -04:00
parent fa81545f1c
commit cd3d739e6f

View file

@ -73,17 +73,17 @@ readsect(void *dst, uint offset)
insl(0x1F0, dst, SECTSIZE/4); insl(0x1F0, dst, SECTSIZE/4);
} }
// Read 'count' bytes at 'offset' from kernel into virtual address 'va'. // Read 'count' bytes at 'offset' from kernel into physical address 'pa'.
// Might copy more than asked. // Might copy more than asked.
void void
readseg(uchar* va, uint count, uint offset) readseg(uchar* pa, uint count, uint offset)
{ {
uchar* eva; uchar* epa;
eva = va + count; epa = pa + count;
// Round down to sector boundary. // Round down to sector boundary.
va -= offset % SECTSIZE; pa -= offset % SECTSIZE;
// Translate from bytes to sectors; kernel starts at sector 1. // Translate from bytes to sectors; kernel starts at sector 1.
offset = (offset / SECTSIZE) + 1; offset = (offset / SECTSIZE) + 1;
@ -91,6 +91,6 @@ readseg(uchar* va, uint count, uint offset)
// If this is too slow, we could read lots of sectors at a time. // If this is too slow, we could read lots of sectors at a time.
// We'd write more to memory than asked, but it doesn't matter -- // We'd write more to memory than asked, but it doesn't matter --
// we load in increasing order. // we load in increasing order.
for(; va < eva; va += SECTSIZE, offset++) for(; pa < epa; pa += SECTSIZE, offset++)
readsect(va, offset); readsect(pa, offset);
} }