VM implicitly aligns mappings to a page
- problem when a PCI BAR is not aligned - together with David v. Moolenboek
This commit is contained in:
parent
a1eefc013e
commit
de1bcaa69a
@ -133,6 +133,7 @@ PUBLIC int do_map_phys(message *m)
|
||||
struct vir_region *vr;
|
||||
vir_bytes len;
|
||||
phys_bytes startaddr;
|
||||
size_t offset;
|
||||
|
||||
target = m->VMMP_EP;
|
||||
len = m->VMMP_LEN;
|
||||
@ -159,6 +160,10 @@ PUBLIC int do_map_phys(message *m)
|
||||
if(!(vmp->vm_flags & VMF_HASPT))
|
||||
return ENXIO;
|
||||
|
||||
offset = startaddr % VM_PAGE_SIZE;
|
||||
len += offset;
|
||||
startaddr -= offset;
|
||||
|
||||
if(len % VM_PAGE_SIZE)
|
||||
len += VM_PAGE_SIZE - (len % VM_PAGE_SIZE);
|
||||
|
||||
@ -168,7 +173,7 @@ PUBLIC int do_map_phys(message *m)
|
||||
return ENOMEM;
|
||||
}
|
||||
|
||||
m->VMMP_VADDR_REPLY = (void *) arch_map2vir(vmp, vr->vaddr);
|
||||
m->VMMP_VADDR_REPLY = (void *) (arch_map2vir(vmp, vr->vaddr) + offset);
|
||||
|
||||
return OK;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user