On Fri, Apr 23, 2021 at 01:55:14PM +0200, Alessandro Pistocchi wrote:
> Hi all,
>
> I am fairly new to openbsd so if this is something obvious that I missed
> please be understanding.
>
> I am adding a syscall to openbsd 6.8. I am working on a raspberry pi.
>
> During the syscall I allocate some memory that I want to share between the
> kernel
> and the calling process.
>
> When it's time to wrap up and unmap the memory, I unmap it both from the
> kernel
> map and from the process map.
>
> The unmapping from the process map goes fine, the unmapping from the kernel
> map
> fails by saying that the virtual address in kernel map is not aligned to
> the page size
> ( it's actually 4 bytes off ).
>
> What have I missed? I assumed that umm_map would return a page aligned
> virtual
> address for the kernel mapping as well.
>
> Here is my code for creating the shared memory chunk:
>
> --------------------------------------------------------------------------------
> // memory_size is a multiple of page size
> uvm_object = uao_create(memory_size, 0);
> if(!uvm_object) return;
>
> // TODO(ale): make sure that this memory cannot be swapped out
>
> uao_reference(uvm_object)
> if(uvm_map(kernel_map, (vaddr_t *)&memory, round_page(memory_size),
> uvm_object,
>    0, 0, UVM_MAPFLAG(PROT_READ | PROT_WRITE, PROT_READ | PROT_WRITE,
>    MAP_INHERIT_SHARED, MADV_NORMAL, 0))) {
> uao_detach(uvm_object);
> uvm_object = 0;
> return;
> }
>
> uao_reference(uvm_object);
> if(uvm_map(&p->p_vmspace->vm_map, &memory_in_proc_space,
> round_page(memory_size), uvm_object,
>    0, 0, UVM_MAPFLAG(PROT_READ | PROT_WRITE, PROT_READ | PROT_WRITE,
>    MAP_INHERIT_NONE, MADV_NORMAL, 0))) {
> memory = 0;
> uao_detach(uvm_object);
> uao_detach(uvm_object);
> uvm_object = 0;
> return;
> }
> --------------------------------------------------------------------------------
>
> Thanks,
> A

Please share the whole diff, this snippet above lacks context.

Reply via email to