From kern_umtx.c:
static int _do_lock(struct thread *td, struct umtx *umtx, long id, int timo) { struct umtx_q *uq; intptr_t owner; intptr_t old; int error = 0;
uq = td->td_umtxq; /* * Care must be exercised when dealing with umtx structure. It * can fault on any access. */ for (;;) { /* * Try the uncontested case. This should be done in userland. */ owner = casuptr((intptr_t *)&umtx->u_owner, UMTX_UNOWNED, id); /* The acquire succeeded. */ if (owner == UMTX_UNOWNED) return (0); /* The address was invalid. */ if (owner == -1) return (EFAULT); /* If no one owns it but it is contested try to acquire it. */ if (owner == UMTX_CONTESTED) { owner = casuptr((intptr_t *)&umtx->u_owner, UMTX_CONTESTED, id | UMTX_CONTESTED); if (owner == UMTX_CONTESTED) return (0); /* The address was invalid. */ if (owner == -1) return (EFAULT); On 7/30/06, Divacky Roman <[EMAIL PROTECTED]> wrote:
On Sun, Jul 30, 2006 at 12:57:32PM +0200, 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) to make it clear.. I am trying to access user-space memory from kernel. This needs to be atomic (its an implementation of linux futexes) I need to check from kernel if some memory is accessible and then perform an operation on this memory. All atomically. hence I need two things - function which checks wheter the memory is accessible and something which makes it atomic (some mutex/something which prevents other process to enter VM to unmap/etc. the memory in question) hope its a bit more clear now roman _______________________________________________ freebsd-hackers@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-hackers To unsubscribe, send any mail to "[EMAIL PROTECTED]"
_______________________________________________ freebsd-hackers@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-hackers To unsubscribe, send any mail to "[EMAIL PROTECTED]"