public inbox for [email protected]
 help / color / mirror / Atom feed
From: Alviro Iskandar Setiawan <[email protected]>
To: Ammar Faizi <[email protected]>
Cc: Jens Axboe <[email protected]>,
	"Fernanda Ma'rouf" <[email protected]>,
	 Hao Xu <[email protected]>,
	Pavel Begunkov <[email protected]>,
	 io-uring Mailing List <[email protected]>,
	"GNU/Weeb Mailing List" <[email protected]>
Subject: Re: [PATCH liburing v3 05/10] arch/aarch64: lib: Add `get_page_size()` function
Date: Tue, 5 Jul 2022 01:18:44 +0700	[thread overview]
Message-ID: <CAOG64qPdVWFE0ZCie3NiDJb42u78ZNtmOmEW=-=oLE6VAn80TQ@mail.gmail.com> (raw)
In-Reply-To: <[email protected]>

On Tue, Jul 5, 2022 at 12:54 AM Ammar Faizi wrote:
> From: Ammar Faizi <[email protected]>
>
> A prep patch to add aarch64 nolibc support.
>
> aarch64 supports three values of page size: 4K, 16K, and 64K which are
> selected at kernel compilation time. Therefore, we can't hard code the
> page size for this arch. Utilize open(), read() and close() syscall to
> find the page size from /proc/self/auxv. For more details about the
> auxv data structure, check the link below [1].
>
> v3:
>   - Split open/read/close in get_page_size() into a new function.
>   - Cache the fallback value when we fail on the syscalls.
>   - No need to init the static var to zero.
>
> v2:
>   - Fallback to 4K if the syscall fails.
>   - Cache the page size after read as suggested by Jens.
>
> Link: https://github.com/torvalds/linux/blob/v5.19-rc4/fs/binfmt_elf.c#L260 [1]
> Link: https://lore.kernel.org/io-uring/[email protected]
> Link: https://lore.kernel.org/io-uring/[email protected]
> Link: https://lore.kernel.org/io-uring/[email protected]
> Suggested-by: Jens Axboe <[email protected]>
> Signed-off-by: Ammar Faizi <[email protected]>
[...]
> +static inline long __get_page_size(void)
> +{
> +       static const long fallback_ret = 4096;
> +       Elf64_Off buf[2];
> +       long ret;
> +       int fd;
> +
> +       fd = __sys_open("/proc/self/auxv", O_RDONLY, 0);
> +       if (fd < 0)
> +               return fallback_ret;
> +
> +       while (1) {
> +               ssize_t x;
> +
> +               x = __sys_read(fd, buf, sizeof(buf));
> +               if (x < sizeof(buf)) {
> +                       ret = fallback_ret;
> +                       break;
> +               }
> +
> +               if (buf[0] == AT_PAGESZ) {
> +                       ret = buf[1];
> +                       break;
> +               }
> +       }
> +
> +       __sys_close(fd);
> +       return ret;
> +}

fallback_ret var is not needed, just do this, simpler:

static inline long __get_page_size(void)
{
        Elf64_Off buf[2];
        long ret = 4096;
        int fd;

        fd = __sys_open("/proc/self/auxv", O_RDONLY, 0);
        if (fd < 0)
                return ret;

        while (1) {
                ssize_t x;

                x = __sys_read(fd, buf, sizeof(buf));
                if (x < sizeof(buf))
                        break;

                if (buf[0] == AT_PAGESZ) {
                        ret = buf[1];
                        break;
                }
        }

        __sys_close(fd);
        return ret;
}

with that simplification:

Reviewed-by: Alviro Iskandar Setiawan <[email protected]>

tq

-- Viro

  reply	other threads:[~2022-07-04 18:18 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-07-04 17:54 [PATCH liburing v3 00/10] aarch64 support Ammar Faizi
2022-07-04 17:54 ` [PATCH liburing v3 01/10] CHANGELOG: Fixup missing space Ammar Faizi
2022-07-04 17:54 ` [PATCH liburing v3 02/10] arch: syscall: Add `__sys_open()` syscall Ammar Faizi
2022-07-04 18:07   ` Alviro Iskandar Setiawan
2022-07-04 17:54 ` [PATCH liburing v3 03/10] arch: syscall: Add `__sys_read()` syscall Ammar Faizi
2022-07-04 18:12   ` Alviro Iskandar Setiawan
2022-07-04 18:16     ` Ammar Faizi
2022-07-04 17:54 ` [PATCH liburing v3 04/10] arch: Remove `__INTERNAL__LIBURING_LIB_H` checks Ammar Faizi
2022-07-04 17:54 ` [PATCH liburing v3 05/10] arch/aarch64: lib: Add `get_page_size()` function Ammar Faizi
2022-07-04 18:18   ` Alviro Iskandar Setiawan [this message]
2022-07-04 18:23     ` Ammar Faizi
2022-07-04 17:54 ` [PATCH liburing v3 06/10] lib: Style fixup for #if / #elif / #else / #endif Ammar Faizi
2022-07-04 17:54 ` [PATCH liburing v3 07/10] lib: Enable nolibc support for aarch64 Ammar Faizi
2022-07-04 17:54 ` [PATCH liburing v3 08/10] test: Add nolibc test Ammar Faizi
2022-07-04 17:54 ` [PATCH liburing v3 09/10] .github: Enable aarch64 nolibc build for GitHub bot Ammar Faizi
2022-07-04 17:54 ` [PATCH liburing v3 10/10] CHANGELOG: Note about aarch64 support Ammar Faizi

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='CAOG64qPdVWFE0ZCie3NiDJb42u78ZNtmOmEW=-=oLE6VAn80TQ@mail.gmail.com' \
    [email protected] \
    [email protected] \
    [email protected] \
    [email protected] \
    [email protected] \
    [email protected] \
    [email protected] \
    [email protected] \
    /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