From: Yury Norov <ynorov@caviumnetworks.com>
To: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Cc: <libc-alpha@sourceware.org>
Subject: Re: [PATCH 1/4] Add INTERNAL_SYSCALL_CALL
Date: Mon, 22 Aug 2016 15:28:00 -0000 [thread overview]
Message-ID: <20160822152826.GE15745@yury-N73SV> (raw)
In-Reply-To: <1471617709-16267-2-git-send-email-adhemerval.zanella@linaro.org>
On Fri, Aug 19, 2016 at 11:41:46AM -0300, Adhemerval Zanella wrote:
> This patch adds two new macros for internal and inline syscall to use
> within GLIBC: INTERNAL_SYSCALL_CALL and INLINE_SYSCALL_CALL. They are
> similar to the old INTERNAL_SYSCALL and INLINE_SYSCALL with the difference
> the new macros accept a variable argument call and do not require to pass
> the expected argument size.
>
> The advantage is it is possible to use variable argument macros like
> SYSCALL_LL{64} without the need to also handle the argument size. So
> for an ABI where SYSCALL_LL might split the argument in high and low
> parts, instead of:
>
> INTERNAL_SYSCALL_DECL (err);
> #if ...
> INTERNAL_SYSCALL (syscall, err, 2, SYSCALL_LL (len));
> #else
> INTERNAL_SYSCALL (syscall, err, 1, SYSCALL_LL (len));
> #endif
>
> It will be just:
>
> INTERNAL_SYSCALL_CALL (syscall, err, SYSCALL_LL (len));
>
> The INLINE_SYSCALL_CALL follows the same semanthic regarding the argument
> and is similar to INLINE_SYSCALL regarding setting errno.
>
> * sysdeps/unix/sysdep.h (__INTERNAL_SYSCALL0): New macro.
> (__INTERNAL_SYSCALL1): Likewise.
> (__INTERNAL_SYSCALL2): Likewise.
> (__INTERNAL_SYSCALL3): Likewise.
> (__INTERNAL_SYSCALL4): Likewise.
> (__INTERNAL_SYSCALL5): Likewise.
> (__INTERNAL_SYSCALL6): Likewise.
> (__INTERNAL_SYSCALL7): Likewise.
> (__INTERNAL_SYSCALL_NARGS_X): Likewise.
> (__INTERNAL_SYSCALL_NARGS): Likewise.
> (__INTERNAL_SYSCALL_CONCAT_X): Likewise.
> (__INTERNAL_SYSCALL_CONCAT): Likewise.
> (__INTERNAL_SYSCALL_DISP): Likewise.
> (INTERNAL_SYSCALL_CALL): Likewise.
> (__SYSCALL_CALL): Rename to INLINE_SYSCALL_CALL.
> (SYSCALL_CANCEL): Replace __SYSCALL_CALL with INLINE_SYSCALL_CALL.
> ---
> sysdeps/unix/sysdep.h | 42 +++++++++++++++++++++++++++++++++++++++---
> 2 files changed, 56 insertions(+), 3 deletions(-)
>
> diff --git a/sysdeps/unix/sysdep.h b/sysdeps/unix/sysdep.h
> index 94a2ce0..2253603 100644
> --- a/sysdeps/unix/sysdep.h
> +++ b/sysdeps/unix/sysdep.h
> @@ -24,6 +24,37 @@
> #define SYSCALL__(name, args) PSEUDO (__##name, name, args)
> #define SYSCALL(name, args) PSEUDO (name, name, args)
>
> +#define __INTERNAL_SYSCALL0(name, err) \
> + INTERNAL_SYSCALL (name, err, 0)
> +#define __INTERNAL_SYSCALL1(name, err, a1) \
> + INTERNAL_SYSCALL (name, err, 1, a1)
> +#define __INTERNAL_SYSCALL2(name, err, a1, a2) \
> + INTERNAL_SYSCALL (name, err, 2, a1, a2)
> +#define __INTERNAL_SYSCALL3(name, err, a1, a2, a3) \
> + INTERNAL_SYSCALL (name, err, 3, a1, a2, a3)
> +#define __INTERNAL_SYSCALL4(name, err, a1, a2, a3, a4) \
> + INTERNAL_SYSCALL (name, err, 4, a1, a2, a3, a4)
> +#define __INTERNAL_SYSCALL5(name, err, a1, a2, a3, a4, a5) \
> + INTERNAL_SYSCALL (name, err, 5, a1, a2, a3, a4, a5)
> +#define __INTERNAL_SYSCALL6(name, err, a1, a2, a3, a4, a5, a6) \
> + INTERNAL_SYSCALL (name, err, 6, a1, a2, a3, a4, a5, a6)
> +#define __INTERNAL_SYSCALL7(name, err, a1, a2, a3, a4, a5, a6, a7) \
> + INTERNAL_SYSCALL (name, err, 7, a1, a2, a3, a4, a5, a6, a7)
> +
> +#define __INTERNAL_SYSCALL_NARGS_X(a,b,c,d,e,f,g,h,n,...) n
Missed whitespaces after commas?
> +#define __INTERNAL_SYSCALL_NARGS(...) \
> + __INTERNAL_SYSCALL_NARGS_X (__VA_ARGS__,7,6,5,4,3,2,1,0,)
Same
> +#define __INTERNAL_SYSCALL_CONCAT_X(a,b) a##b
Same
> +#define __INTERNAL_SYSCALL_CONCAT(a,b) __SYSCALL_CONCAT_X (a, b)
> +#define __INTERNAL_SYSCALL_DISP(b,err,...) \
> + __INTERNAL_SYSCALL_CONCAT (b,__SYSCALL_NARGS(__VA_ARGS__))(err,__VA_ARGS__)
Missed whitespaces after commas and before opening braces?
> +
> +/* Issue a syscall defined by syscall number plus any other argument required.
> + It is similar to INLINE_SYSCALL macro, but without the need to pass the
Did you mean INTERNAL_SYSCALL macro?
> + expected argument number as second parameter. */
> +#define INTERNAL_SYSCALL_CALL(nr, err, ...) \
> + __INTERNAL_SYSCALL_DISP (__INTERNAL_SYSCALL, nr, err, __VA_ARGS__)
> +
> #define __SYSCALL0(name) \
> INLINE_SYSCALL (name, 0)
> #define __SYSCALL1(name, a1) \
> @@ -49,17 +80,22 @@
> #define __SYSCALL_DISP(b,...) \
> __SYSCALL_CONCAT (b,__SYSCALL_NARGS(__VA_ARGS__))(__VA_ARGS__)
>
> -#define __SYSCALL_CALL(...) __SYSCALL_DISP (__SYSCALL, __VA_ARGS__)
> +/* Issue a syscall defined by syscall number plus any other argument required.
> + Any error will be handled using arch defined macros and errno will be se
> + accordingly.
> + It is similar to INLINE_SYSCALL macro, but without the need to pass the
> + expected argument number as second parameter. */
> +#define INLINE_SYSCALL_CALL(...) __SYSCALL_DISP (__SYSCALL, __VA_ARGS__)
Missed whitespaces after commas and before opening braces?
>
> #define SYSCALL_CANCEL(...) \
> ({ \
> long int sc_ret; \
> if (SINGLE_THREAD_P) \
> - sc_ret = __SYSCALL_CALL (__VA_ARGS__); \
> + sc_ret = INLINE_SYSCALL_CALL (__VA_ARGS__); \
> else \
> { \
> int sc_cancel_oldtype = LIBC_CANCEL_ASYNC (); \
> - sc_ret = __SYSCALL_CALL (__VA_ARGS__); \
> + sc_ret = INLINE_SYSCALL_CALL (__VA_ARGS__); \
> LIBC_CANCEL_RESET (sc_cancel_oldtype); \
> } \
> sc_ret; \
> --
> 2.7.4
next prev parent reply other threads:[~2016-08-22 15:28 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-08-19 14:42 [PATCH 0/4] Linux fallocate, posix_fallocate, and posix_fadvise consolidation Adhemerval Zanella
2016-08-19 14:42 ` [PATCH 3/4] Consolidate posix_fallocate{64} implementations Adhemerval Zanella
2016-08-22 14:35 ` Yury Norov
2016-08-23 19:22 ` Adhemerval Zanella
2016-08-19 14:42 ` [PATCH 1/4] Add INTERNAL_SYSCALL_CALL Adhemerval Zanella
2016-08-22 15:28 ` Yury Norov [this message]
2016-08-23 19:16 ` Adhemerval Zanella
2016-08-23 19:20 ` Yury Norov
2016-08-19 14:42 ` [PATCH 4/4] Consolidate posix_fadvise implementations Adhemerval Zanella
2016-08-22 15:08 ` Yury Norov
2016-08-23 19:29 ` Adhemerval Zanella
2016-08-23 20:00 ` Yury Norov
2016-08-24 14:29 ` Adhemerval Zanella
2016-08-24 3:53 ` Yury Norov
2016-08-24 14:40 ` Adhemerval Zanella
2016-09-25 10:42 ` Yury Norov
2016-09-26 19:44 ` Adhemerval Zanella
2016-08-19 14:42 ` [PATCH 2/4] Consolidate fallocate{64} implementations Adhemerval Zanella
2016-08-22 15:14 ` Yury Norov
2016-08-23 19:21 ` Adhemerval Zanella
2016-08-22 14:31 ` [PATCH 0/4] Linux fallocate, posix_fallocate, and posix_fadvise consolidation Yury Norov
2016-09-20 15:02 [PATCH 0/4] Linux lseek and {f}truncate syscall consolidation Adhemerval Zanella
2016-09-20 15:02 ` [PATCH 1/4] Add INTERNAL_SYSCALL_CALL Adhemerval Zanella
2016-09-20 21:36 ` Florian Weimer
2016-09-21 18:00 ` Adhemerval Zanella
2016-09-21 19:22 ` Florian Weimer
2016-09-22 13:43 ` Adhemerval Zanella
2016-09-22 20:34 ` Florian Weimer
2016-09-23 14:16 ` Adhemerval Zanella
2016-09-23 20:39 ` Florian Weimer
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=20160822152826.GE15745@yury-N73SV \
--to=ynorov@caviumnetworks.com \
--cc=adhemerval.zanella@linaro.org \
--cc=libc-alpha@sourceware.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 read-only IMAP folder(s) and NNTP newsgroup(s).