All of lore.kernel.org
 help / color / mirror / Atom feed
From: Alessio Balsini <balsini@android.com>
To: ltp@lists.linux.it
Subject: [LTP] [PATCH] getrlimit/getrlimit03: fix unavailable __NR_getrlimit for arm
Date: Thu, 24 Jun 2021 13:31:43 +0100	[thread overview]
Message-ID: <YNR7L2ftbwx6IUls@google.com> (raw)
In-Reply-To: <YNM6QGFYt/bpaPDS@yuki>

Hi Cyril,

On Wed, Jun 23, 2021 at 03:42:24PM +0200, Cyril Hrubis wrote:
> Hi!
> > __NR_getrlimit has been deprecated from arm EABI, and is only available
> > if the OABI_COMPAT config option is defined.
> > This causes failures with the current test as it assumes that
> > __NR_getrlimit exists if __NR_ugetrlimit is defined, while this
> > assumption does not hold anymore.
> > 
> > Catch this exception by testing if __NR_getrlimit is defined and the
> > target is arm.
> 
> I suppose that this a proper fix for:
> 
> https://github.com/linux-test-project/ltp/issues/819
> 

We spotted this failure on Android, but they are indeed the same issue!

> 
> I guess that this generates a few unused function warnings, can we fix
> all the places with #if SIGNED_GETRLIMIT in the source code please?
> 
> -- 
> Cyril Hrubis
> chrubis@suse.cz

Here below the new patch that should fixed the unused functions warnings, as
well as the useless definition of rlimit_long if the signed version of
__NR_getrlimit does not exist.

Thanks,
Alessio

-- >8 --
Subject: [PATCH] getrlimit/getrlimit03: fix deprecated __NR_getrlimit for arm

__NR_getrlimit has been deprecated from arm EABI, and is only available
if the OABI_COMPAT config option is defined.
This may cause failures with the current test as it assumes that
__NR_getrlimit always exists if __NR_ugetrlimit is defined, but this
assumption does not hold anymore.

Catch this exception by testing if __NR_getrlimit is defined and the
target is arm.

Signed-off-by: Alessio Balsini <balsini@android.com>

---
 .../kernel/syscalls/getrlimit/getrlimit03.c   | 27 ++++++++++++++-----
 1 file changed, 20 insertions(+), 7 deletions(-)

diff --git a/testcases/kernel/syscalls/getrlimit/getrlimit03.c b/testcases/kernel/syscalls/getrlimit/getrlimit03.c
index 319bc494a..8601b6caa 100644
--- a/testcases/kernel/syscalls/getrlimit/getrlimit03.c
+++ b/testcases/kernel/syscalls/getrlimit/getrlimit03.c
@@ -36,13 +36,25 @@
  * the architecture predates the "new" handler.  For clarity, this test
  * will call them getrlimit_long and getlimit_ulong internally.
  */
-#define SIGNED_GETRLIMIT (__NR_ugetrlimit != __LTP__NR_INVALID_SYSCALL)
-#if SIGNED_GETRLIMIT
+#if __NR_ugetrlimit != __LTP__NR_INVALID_SYSCALL
+
+/**
+ * __NR_getrlimit has been deprecated from arm EABI and moved to OABI_COMPAT,
+ * so the syscall on arm may or may not be available, also if __NR_ugetrlimit
+ * exists.
+ */
+#if !defined(__arm__) || __NR_getrlimit != __LTP__NR_INVALID_SYSCALL
+#define SIGNED_GETRLIMIT
+#endif
+
 #define __NR_getrlimit_ulong           __NR_ugetrlimit
 #define __NR_getrlimit_ulong_str       "__NR_ugetrlimit"
+
 #else
+
 #define __NR_getrlimit_ulong           __NR_getrlimit
 #define __NR_getrlimit_ulong_str       "__NR_getrlimit"
+
 #endif

 #ifndef HAVE_STRUCT_RLIMIT64
@@ -74,12 +86,13 @@ static int getrlimit_ulong(int resource, struct rlimit_ulong *rlim)
        return syscall(__NR_getrlimit_ulong, resource, rlim);
 }

-#if SIGNED_GETRLIMIT
+const long RLIM_INFINITY_L = LONG_MAX;
+
+#ifdef SIGNED_GETRLIMIT
 struct rlimit_long {
        long rlim_cur;
        long rlim_max;
 };
-const long RLIM_INFINITY_L = LONG_MAX;

 static int getrlimit_long(int resource, struct rlimit_long *rlim)
 {
@@ -116,7 +129,7 @@ static int compare_u64_ulong(int resource, uint64_t val_u64,
        return 0;
 }

-#if SIGNED_GETRLIMIT
+#ifdef SIGNED_GETRLIMIT
 static int compare_u64_long(int resource, uint64_t val_u64, long val_l,
                            const char *kind)
 {
@@ -142,7 +155,7 @@ static void run(unsigned int resource)
        int ret_ul;
        int errno_ul;

-#if SIGNED_GETRLIMIT
+#ifdef SIGNED_GETRLIMIT
        struct rlimit_long rlim_l;
        int ret_l;
        int errno_l;
@@ -167,7 +180,7 @@ static void run(unsigned int resource)
        tst_res(TPASS, "__NR_prlimit64(%d) and %s(%d) gave consistent results",
                resource, __NR_getrlimit_ulong_str, resource);

-#if SIGNED_GETRLIMIT
+#ifdef SIGNED_GETRLIMIT
        errno = 0;
        ret_l = getrlimit_long(resource, &rlim_l);
        errno_l = errno;
--
2.32.0.288.g62a8d224e6-goog


  reply	other threads:[~2021-06-24 12:31 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-06-23 13:40 [LTP] [PATCH] getrlimit/getrlimit03: fix unavailable __NR_getrlimit for arm Alessio Balsini
2021-06-23 13:42 ` Cyril Hrubis
2021-06-24 12:31   ` Alessio Balsini [this message]
2021-06-25 11:57     ` Cyril Hrubis

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=YNR7L2ftbwx6IUls@google.com \
    --to=balsini@android.com \
    --cc=ltp@lists.linux.it \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.