On Fri, 25 Oct 2024 18:22:29 +0900,
Johannes Berg wrote:
> 
> On Thu, 2024-10-24 at 21:09 +0900, Hajime Tazaki wrote:
> > Since ptrace facility isn't used under !MMU of UML, there is different
> > code path to invoke proceeses/threads; on an entry to the syscall
> 
> typo: processes

thanks. (I thought checkpatch.pl detects them..)

> >  /* Called magically, see new_thread_handler above */
> >  static void fork_handler(void)
> >  {
> > -   schedule_tail(current->thread.prev_sched);
> > +   if (current->thread.prev_sched != NULL)
> 
> nit: no need for "!= NULL"

will fix it.

> > @@ -134,6 +138,21 @@ static void fork_handler(void)
> >  
> >     current->thread.prev_sched = NULL;
> >  
> > +#ifndef CONFIG_MMU
> > +   /*
> > +    * This fork can only come from libc's vfork, which
> > +    * does this:
> > +    *      popq %%rdx;
> > +    *      call *%0; // vsyscall
> > +    *      pushq %%rdx;
> > +    * %rdx stores the return address which is stored
> > +    * at pt_regs[HOST_IP] at the moment. We still
> > +    * need to pop the pushed address by "call" though,
> > +    * so this is what this next line does.
> > +    */
> > +   if (current->thread.regs.regs.gp[HOST_ORIG_AX] == __NR_vfork)
> > +           current->thread.regs.regs.gp[REGS_SP_INDEX] += 8;
> > +#endif
> 
> Kind of ugly ... but I guess not much choice.

(indeed)

> > +#ifndef CONFIG_MMU
> > +   current_top_of_stack = task_top_of_stack(to);
> > +   current_ptregs = (long)task_pt_regs(to);
> > +
> > +   if ((to->thread.regs.regs.gp[FS_BASE / sizeof(unsigned long)] == 0)
> > +       || (to->mm == NULL))
> 
> Put || on the previous line, "!to->mm"

will fix it.

> > +           return;
> > +
> > +   // rkj: this changes the FS on every context switch
> 
> Not sure we're allowing C99 comments yet, and there shouldn't be a "rkj"
> tag either :)

this is my mistake; forgot to remove those private tags.
will fix it.

-- Hajime

Reply via email to