OL> +   /* were we from a system call?  if so, get old error/retval */
OL> +   if (syscall_get_nr(current, regs) >= 0)
OL> +           ret = syscall_get_error(current, regs);

OL> The test "were we from a system call ?" is implemented differently
OL> on the s390, for example. Compare the code in handle_signal(),
OL> whose logic I follow.

As far as I can tell, handle_signal() doesn't make that determination
on s390.  However, do_signal() does:

  /* Are we from a system call? */
  if (regs->svcnr) {

which is identical to the outcome of your code, based on the
implementation of syscall_get_nr():

  static inline long syscall_get_nr(struct task_struct *task,
                                  struct pt_regs *regs)
  {
        return regs->svcnr ? regs->svcnr : -1;
  }

Perhaps I need to further study where your function is used to figure
out what obscure details I'm missing... :)

-- 
Dan Smith
IBM Linux Technology Center
email: [email protected]

_______________________________________________
Containers mailing list
[email protected]
https://lists.linux-foundation.org/mailman/listinfo/containers

_______________________________________________
Devel mailing list
[email protected]
https://openvz.org/mailman/listinfo/devel

Reply via email to