lkml.org 
[lkml]   [2012]   [Apr]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH 2/6] uprobes: introduce is_swbp_at_addr_fast()
    On 04/16, Peter Zijlstra wrote:
    >
    > On Fri, 2012-04-06 at 00:21 +0200, Oleg Nesterov wrote:
    > > +int __weak is_swbp_at_addr_fast(unsigned long vaddr)
    > > +{
    > > + uprobe_opcode_t opcode;
    > > + int fault;
    > > +
    > > + pagefault_disable();
    > > + fault = __copy_from_user_inatomic(&opcode, (void __user*)vaddr,
    > > + sizeof(opcode));
    > > + pagefault_enable();
    > > +
    > > + if (unlikely(fault)) {
    > > + /*
    > > + * XXX: read_opcode() lacks FOLL_FORCE, it can fail if
    > > + * we race with another thread which does mprotect(NONE)
    > > + * after we hit bp.
    > > + */
    > > + if (read_opcode(current->mm, vaddr, &opcode))
    > > + return -EFAULT;
    > > + }
    > > +
    > > + return is_swbp_insn(&opcode);
    > > +}
    >
    > Why bother with the pagefault_disable() and unlikely fault case and not
    > simply do copy_from_user() and have it deal with the fault if its needed
    > anyway?

    But we can't do this under down_read(mmap_sem) ?

    If another thread waits for down_write() then do_page_fault() can't take
    this lock, right?

    Oleg.



    \
     
     \ /
      Last update: 2012-04-16 16:49    [W:0.020 / U:29.604 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site