From: "Dmitry V. Levin" <ldv@strace.io>
To: Christophe Leroy <christophe.leroy@csgroup.eu>
Cc: Alexey Gladkov <legion@kernel.org>,
Oleg Nesterov <oleg@redhat.com>,
Michael Ellerman <mpe@ellerman.id.au>,
Eugene Syromyatnikov <evgsyr@gmail.com>,
Mike Frysinger <vapier@gentoo.org>,
Renzo Davoli <renzo@cs.unibo.it>,
Davide Berardi <berardi.dav@gmail.com>,
strace-devel@lists.strace.io,
Madhavan Srinivasan <maddy@linux.ibm.com>,
Nicholas Piggin <npiggin@gmail.com>,
Naveen N Rao <naveen@kernel.org>,
linuxppc-dev@lists.ozlabs.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v2 1/7] powerpc: properly negate error in syscall_set_return_value()
Date: Mon, 27 Jan 2025 14:26:06 +0200 [thread overview]
Message-ID: <20250127122606.GA30489@strace.io> (raw)
In-Reply-To: <63aec56f-9ade-48d1-854b-bd72f8313a9f@csgroup.eu>
On Mon, Jan 27, 2025 at 01:04:27PM +0100, Christophe Leroy wrote:
>
>
> Le 27/01/2025 à 12:44, Dmitry V. Levin a écrit :
> > On Mon, Jan 27, 2025 at 12:36:53PM +0100, Christophe Leroy wrote:
> >> Le 27/01/2025 à 12:20, Dmitry V. Levin a écrit :
> >>> On Thu, Jan 23, 2025 at 11:07:21PM +0100, Christophe Leroy wrote:
> >>> [...]
> >>>> To add a bit more to the confusion,
> >>>
> >>> Looks like there is no end to it:
> >>>
> >>> static inline long regs_return_value(struct pt_regs *regs)
> >>> {
> >>> if (trap_is_scv(regs))
> >>> return regs->gpr[3];
> >>>
> >>> if (is_syscall_success(regs))
> >>> return regs->gpr[3];
> >>> else
> >>> return -regs->gpr[3];
> >>> }
> >>>
> >>> static inline void regs_set_return_value(struct pt_regs *regs, unsigned long rc)
> >>> {
> >>> regs->gpr[3] = rc;
> >>> }
> >>>
> >>> This doesn't look consistent, does it?
> >>>
> >>>
> >>
> >> That regs_set_return_value() looks pretty similar to
> >> syscall_get_return_value().
> >
> > Yes, but here similarities end, and differences begin.
> >
> >> regs_set_return_value() documentation in asm-generic/syscall.h
> >> explicitely says: This value is meaningless if syscall_get_error()
> >> returned nonzero
> >>
> >> Is it the same with regs_set_return_value(), only meaningfull where
> >> there is no error ?
> >
> > Did you mean syscall_set_return_value? No, it explicitly has two
> > arguments, "int error" and "long val", so it can be used to either
> > clear or set the error condition as specified by the caller.
>
> Sorry, I mean syscall_get_return_value() here.
>
> static inline long syscall_get_return_value(struct task_struct *task,
> struct pt_regs *regs)
> {
> return regs->gpr[3];
> }
>
> Versus
>
> static inline void regs_set_return_value(struct pt_regs *regs, unsigned
> long rc)
> {
> regs->gpr[3] = rc;
> }
The asm/syscall.h API provides two functions to obtain the return value:
syscall_get_error() and syscall_get_return_value(). The first one is used
to obtain the error code when the error condition is set. When the error
condition is not set, it returns 0. The second function is used to obtain
the return value when the error condition is not set. When the error
condition is set, its return value is undefined.
--
ldv
next prev parent reply other threads:[~2025-01-27 12:26 UTC|newest]
Thread overview: 39+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20250113170925.GA392@strace.io>
2025-01-13 17:10 ` [PATCH v2 1/7] powerpc: properly negate error in syscall_set_return_value() Dmitry V. Levin
2025-01-13 17:34 ` Christophe Leroy
2025-01-13 17:54 ` Dmitry V. Levin
2025-01-14 17:04 ` Dmitry V. Levin
2025-01-20 13:51 ` Christophe Leroy
2025-01-20 17:12 ` Dmitry V. Levin
2025-01-21 11:13 ` Madhavan Srinivasan
2025-01-21 11:28 ` Christophe Leroy
2025-01-21 12:25 ` Madhavan Srinivasan
2025-01-21 12:42 ` Dmitry V. Levin
2025-01-23 18:28 ` Dmitry V. Levin
2025-01-23 19:11 ` Eugene Syromyatnikov
2025-01-23 22:16 ` Dmitry V. Levin
2025-01-23 22:07 ` Christophe Leroy
2025-01-23 22:35 ` Dmitry V. Levin
2025-01-27 11:20 ` Dmitry V. Levin
2025-01-27 11:36 ` Christophe Leroy
2025-01-27 11:44 ` Dmitry V. Levin
2025-01-27 12:04 ` Christophe Leroy
2025-01-27 12:26 ` Dmitry V. Levin [this message]
2025-01-23 23:43 ` Dmitry V. Levin
2025-01-24 15:18 ` Alexey Gladkov
2025-01-25 0:25 ` Dmitry V. Levin
2025-01-25 12:18 ` Michael Ellerman
2025-01-27 11:13 ` Dmitry V. Levin
2025-01-25 12:17 ` Michael Ellerman
2025-01-25 20:48 ` Dmitry V. Levin
2025-01-25 12:17 ` Michael Ellerman
2025-01-25 21:25 ` Dmitry V. Levin
2025-01-14 13:00 ` Alexey Gladkov
2025-01-14 13:48 ` Dmitry V. Levin
2025-01-14 14:53 ` Alexey Gladkov
2025-01-13 17:11 ` [PATCH v2 3/7] syscall.h: add syscall_set_arguments() and syscall_set_return_value() Dmitry V. Levin
2025-01-16 2:20 ` Charlie Jenkins
2025-01-17 0:59 ` H. Peter Anvin
2025-01-17 15:45 ` Eugene Syromyatnikov
2025-01-18 4:34 ` H. Peter Anvin
2025-01-13 17:11 ` [PATCH v2 4/7] syscall.h: introduce syscall_set_nr() Dmitry V. Levin
2025-01-16 2:20 ` Charlie Jenkins
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250127122606.GA30489@strace.io \
--to=ldv@strace.io \
--cc=berardi.dav@gmail.com \
--cc=christophe.leroy@csgroup.eu \
--cc=evgsyr@gmail.com \
--cc=legion@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=maddy@linux.ibm.com \
--cc=mpe@ellerman.id.au \
--cc=naveen@kernel.org \
--cc=npiggin@gmail.com \
--cc=oleg@redhat.com \
--cc=renzo@cs.unibo.it \
--cc=strace-devel@lists.strace.io \
--cc=vapier@gentoo.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).