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]"