lkml.org 
[lkml]   [2018]   [Mar]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [RFC PATCH for 4.17 02/21] rseq: Introduce restartable sequences system call (v12)
    ----- On Mar 28, 2018, at 8:52 AM, Peter Zijlstra peterz@infradead.org wrote:

    > On Wed, Mar 28, 2018 at 02:29:46PM +0200, Peter Zijlstra wrote:
    >> > +static int rseq_get_rseq_cs(struct task_struct *t,
    >> > + unsigned long *start_ip,
    >> > + unsigned long *post_commit_offset,
    >> > + unsigned long *abort_ip,
    >> > + uint32_t *cs_flags)
    >> > +{
    >
    >>
    >> > +
    >> > + *cs_flags = rseq_cs.flags;
    >> > + *start_ip = rseq_cs.start_ip;
    >> > + *post_commit_offset = rseq_cs.post_commit_offset;
    >> > + *abort_ip = rseq_cs.abort_ip;
    >>
    >> Then this becomes a straight struct assignment.
    >
    > I initially suggested passing a structure instead of many arguments, but
    > then recondidered, mostly because it will be inlined (due to having only
    > the one caller) anyway. Still, maybe a struct will work better, I dunno.

    I find the result of struct pointer argument cleaner indeed. I'll go for that
    approach.

    I'll memset rseq_cs to 0 in the following case though, because the caller
    expects the content of the structure to be set when rseq_get_rseq_cs() succeeds.

    static int rseq_get_rseq_cs(struct task_struct *t, struct rseq_cs *rseq_cs)
    {
    struct rseq_cs __user *urseq_cs;
    unsigned long ptr;
    u32 __user *usig;
    u32 sig;
    int ret;

    ret = __get_user(ptr, &t->rseq->rseq_cs);
    if (ret)
    return ret;
    if (!ptr) {
    memset(rseq_cs, 0, sizeof(*rseq_cs));
    return 0;
    }

    [...]

    Thanks!

    Mathieu


    --
    Mathieu Desnoyers
    EfficiOS Inc.
    http://www.efficios.com

    \
     
     \ /
      Last update: 2018-03-28 17:04    [W:3.068 / U:0.756 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site