Divacky Roman wrote:

hi,

while working on SoC linuxolator project I am in a need of this:

I need to do some operation on memory like mem1 = mem1 + mem2 etc.
where the mem1/mem2 access can trigger fault. (memory not mapped or something)

currently I solve this by using pcb_onfault. this must be done in asm (kib@
told me) so currently the code looks like this:

futex_fault:
       movl    PCPU(CURPCB), %edx
       movl    $0, PCB_ONFAULT(%edx)
       movl    $-EFAULT, %eax
       ret

/* int futex_xchgl(int oparg, caddr_t uaddr, int *oldval); */
       .globl  futex_xchgl
futex_xchgl:
       movl    PCPU(CURPCB), %eax
       movl    $futex_fault, PCB_ONFAULT(%eax)
       movl    4(%esp), %eax
       movl    8(%esp), %edx

       xchgl   %eax, (%edx)
       movl    0xc(%esp), %edx
       movl    %eax, (%edx)
       xorl    %eax, %eax

       movl    PCPU(CURPCB), %edx
       movl    $0, PCB_ONFAULT(%edx)
       ret

this is not very nice nor portable. I wonder if its possible to do something
like this:

LOCK_VM_SOMEHOW();
if (!memory_accessible(mem1) || !memory_accessible(mem2))
        return EFAULT;

mem1 = mem1 + mem2;

UNLOCK_VM_SOMEHOW();

if its possible - what is the LOCK_VM_SOMEHOW lock? and what is the
memory_accessible() function?

thnx for pointing me to the right directions

roman


----------------------
www.liberalnistrana.cz
_______________________________________________
freebsd-hackers@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

As I know, there're two ways to detect page fault:

1. Look up in page mapping table (i.e. GDT and IDT on x86 or x86_64).
   See copyin() and copyout() in "/sys/i386/i386/support.s".

2. Capture exception interrupt triggered by CPU (i.e. INT 0x0E on x86
   and x86_64) like vm_fault() in "/sys/vm/vm_fault.c".

Actually, kernel memory page fault should not arise at all, which means
bug made by programmer.

------------------------------------------------------------------------
                                               From Beijing, China

_______________________________________________
freebsd-hackers@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to