lkml.org 
[lkml]   [2017]   [Nov]   [14]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    SubjectRe: [RFC PATCH v11 for 4.15 01/24] Restartable sequences system call
    Date
    (apologies for the duplicate email, the previous one bounced as it was accidentally using HTML formatting)

    If I understand correctly this is run on every context switch so we probably want to make it really fast

    > +static int rseq_need_restart(struct task_struct *t, uint32_t cs_flags)
    > +{
    > + bool need_restart = false;
    > + uint32_t flags;
    > +
    > + /* Get thread flags. */
    > + if (__get_user(flags, &t->rseq->flags))
    > + return -EFAULT;
    > +
    > + /* Take into account critical section flags. */
    > + flags |= cs_flags;
    > +
    > + /*
    > + * Restart on signal can only be inhibited when restart on
    > + * preempt and restart on migrate are inhibited too. Otherwise,
    > + * a preempted signal handler could fail to restart the prior
    > + * execution context on sigreturn.
    > + */
    > + if (flags & RSEQ_CS_FLAG_NO_RESTART_ON_SIGNAL) {
    > + if (!(flags & RSEQ_CS_FLAG_NO_RESTART_ON_MIGRATE))
    > + return -EINVAL;
    > + if (!(flags & RSEQ_CS_FLAG_NO_RESTART_ON_PREEMPT))
    > + return -EINVAL;
    > + }

    How does this error even get to userspace? Is it worth doing this switch on every execution?


    > + if (t->rseq_migrate
    > + && !(flags & RSEQ_CS_FLAG_NO_RESTART_ON_MIGRATE))
    > + need_restart = true;
    > + else if (t->rseq_preempt
    > + && !(flags & RSEQ_CS_FLAG_NO_RESTART_ON_PREEMPT))
    > + need_restart = true;
    > + else if (t->rseq_signal
    > + && !(flags & RSEQ_CS_FLAG_NO_RESTART_ON_SIGNAL))
    > + need_restart = true;

    This could potentially be sped up by having the rseq_* fields in t use a single bitmask with the same bit offsets as RSEQ_CS_FLAG_NO_* then using bit operations to check the appropriate overlap.
    \
     
     \ /
      Last update: 2017-11-14 21:53    [W:4.173 / U:0.084 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site