search for: futex_op_add

Displaying 5 results from an estimated 5 matches for "futex_op_add".

2019 May 09
2
[RFC PATCH V2] vhost: don't use kmap() to log dirty pages
...struct page *page; - void *base; - int bit = nr + (log % PAGE_SIZE) * 8; + u32 old; int r; r = get_user_pages_fast(log, 1, 1, &page); if (r < 0) return r; BUG_ON(r != 1); - base = kmap_atomic(page); - set_bit(bit, base); - kunmap_atomic(base); + + r = arch_futex_atomic_op_inuser(FUTEX_OP_ADD, 1 << nr, &old, addr); + /* TODO: fallback to kmap() when -ENOSYS? */ + set_page_dirty_lock(page); put_page(page); - return 0; + return r; } -static int log_write(void __user *log_base, +static int log_write(u32 __user *log_base, u64 write_address, u64 write_length) { u6...
2019 May 09
2
[RFC PATCH V2] vhost: don't use kmap() to log dirty pages
...struct page *page; - void *base; - int bit = nr + (log % PAGE_SIZE) * 8; + u32 old; int r; r = get_user_pages_fast(log, 1, 1, &page); if (r < 0) return r; BUG_ON(r != 1); - base = kmap_atomic(page); - set_bit(bit, base); - kunmap_atomic(base); + + r = arch_futex_atomic_op_inuser(FUTEX_OP_ADD, 1 << nr, &old, addr); + /* TODO: fallback to kmap() when -ENOSYS? */ + set_page_dirty_lock(page); put_page(page); - return 0; + return r; } -static int log_write(void __user *log_base, +static int log_write(u32 __user *log_base, u64 write_address, u64 write_length) { u6...
2019 May 09
0
[RFC PATCH V2] vhost: don't use kmap() to log dirty pages
...uarantees page is not going away but does it guarantee PTE won't be invaidated or write protected? > if (r < 0) > return r; > BUG_ON(r != 1); > - base = kmap_atomic(page); > - set_bit(bit, base); > - kunmap_atomic(base); > + > + r = arch_futex_atomic_op_inuser(FUTEX_OP_ADD, 1 << nr, &old, addr); > + /* TODO: fallback to kmap() when -ENOSYS? */ > + Add a comment why this won't fail? Maybe warn on EFAULT? Also down the road a variant that does not need tricks like this is still nice to have. > set_page_dirty_lock(page); > put_page(page...
2019 May 10
2
[RFC PATCH V2] vhost: don't use kmap() to log dirty pages
...h fixup_user_fault() if arch_futex_atomic_op_in_user() fail. > >> if (r < 0) >> return r; >> BUG_ON(r != 1); >> - base = kmap_atomic(page); >> - set_bit(bit, base); >> - kunmap_atomic(base); >> + >> + r = arch_futex_atomic_op_inuser(FUTEX_OP_ADD, 1 << nr, &old, addr); >> + /* TODO: fallback to kmap() when -ENOSYS? */ >> + > Add a comment why this won't fail? Maybe warn on EFAULT? > > Also down the road a variant that does not need tricks like this is > still nice to have. Ok. Let me post a V3. Thank...
2019 May 10
2
[RFC PATCH V2] vhost: don't use kmap() to log dirty pages
...h fixup_user_fault() if arch_futex_atomic_op_in_user() fail. > >> if (r < 0) >> return r; >> BUG_ON(r != 1); >> - base = kmap_atomic(page); >> - set_bit(bit, base); >> - kunmap_atomic(base); >> + >> + r = arch_futex_atomic_op_inuser(FUTEX_OP_ADD, 1 << nr, &old, addr); >> + /* TODO: fallback to kmap() when -ENOSYS? */ >> + > Add a comment why this won't fail? Maybe warn on EFAULT? > > Also down the road a variant that does not need tricks like this is > still nice to have. Ok. Let me post a V3. Thank...