Bug#627619: libc6-dev: please define RLIMIT_RTTIME and increment RLIM_NLIMITS
tags 627619 + upstream
quit
Hi,
brian m. carlson wrote:
> On amd64, /usr/include/bits/resource.h defines RLIM_NLIMITS as 15.
> However, in /usr/include/asm-generic/resource.h, the kernel defines
> RLIM_NLIMITS as 16 and instead defines RLIMIT_RTTIME as 15. This
> appears to be part of the reason behind #625226, so fixing it soon would
> be appreciated.
Thanks. Quick notes:
The file to patch is sysdeps/unix/sysv/linux/bits/resource.h. It
hasn't been updated upstream, either. The relevant Linux change was
v2.6.25-rc1~1237^2~29 (sched: SCHED_FIFO/SCHED_RR watchdog timer,
2008-01-25).
I wonder why the enum trick in bits/resource.h is not ported to
Linux so we could just #include <asm/resource.h>? That would save
alpha, sparc, and mips from having to maintain their own copies of
bits/resource.h. Lacking that, something like the following might
work. Untested.
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
---
.../sysdeps/unix/sysv/linux/alpha/bits/resource.h | 7 ++++++-
ports/sysdeps/unix/sysv/linux/mips/bits/resource.h | 7 ++++++-
resource/tst-getrlimit.c | 3 +++
sysdeps/unix/sysv/linux/bits/resource.h | 7 ++++++-
sysdeps/unix/sysv/linux/sparc/bits/resource.h | 7 ++++++-
5 files changed, 27 insertions(+), 4 deletions(-)
diff --git a/ports/sysdeps/unix/sysv/linux/alpha/bits/resource.h b/ports/sysdeps/unix/sysv/linux/alpha/bits/resource.h
index 92d0199..552bc21 100644
--- a/ports/sysdeps/unix/sysv/linux/alpha/bits/resource.h
+++ b/ports/sysdeps/unix/sysv/linux/alpha/bits/resource.h
@@ -100,7 +100,12 @@ enum __rlimit_resource
__RLIMIT_RTPRIO = 14,
#define RLIMIT_RTPRIO __RLIMIT_RTPRIO
- __RLIMIT_NLIMITS = 15,
+ /* Maximum time since last sleep for realtime tasks, in microseconds.
+ Once the soft limit is exceeded, the task will receive SIGXCPU
+ every second. When the hard limit is exceeded, the task dies. */
+ __RLIMIT_RTTIME = 15,
+
+ __RLIMIT_NLIMITS = 16,
__RLIM_NLIMITS = __RLIMIT_NLIMITS
#define RLIMIT_NLIMITS __RLIMIT_NLIMITS
#define RLIM_NLIMITS __RLIM_NLIMITS
diff --git a/ports/sysdeps/unix/sysv/linux/mips/bits/resource.h b/ports/sysdeps/unix/sysv/linux/mips/bits/resource.h
index a6454c4..0905eb7 100644
--- a/ports/sysdeps/unix/sysv/linux/mips/bits/resource.h
+++ b/ports/sysdeps/unix/sysv/linux/mips/bits/resource.h
@@ -100,7 +100,12 @@ enum __rlimit_resource
__RLIMIT_RTPRIO = 14,
#define RLIMIT_RTPRIO __RLIMIT_RTPRIO
- __RLIMIT_NLIMITS = 15,
+ /* Maximum time since last sleep for realtime tasks, in microseconds.
+ Once the soft limit is exceeded, the task will receive SIGXCPU
+ every second. When the hard limit is exceeded, the task dies. */
+ __RLIMIT_RTTIME = 15,
+
+ __RLIMIT_NLIMITS = 16,
__RLIM_NLIMITS = __RLIMIT_NLIMITS
#define RLIMIT_NLIMITS __RLIMIT_NLIMITS
#define RLIM_NLIMITS __RLIM_NLIMITS
diff --git a/resource/tst-getrlimit.c b/resource/tst-getrlimit.c
index 6748034..933deff 100644
--- a/resource/tst-getrlimit.c
+++ b/resource/tst-getrlimit.c
@@ -42,6 +42,9 @@ static struct
#ifdef RLIMIT_RTPRIO
{ "RLIMIT_RTPRIO", RLIMIT_RTPRIO, false }, #endif
+#ifdef RLIMIT_RTTIME
+ { "RLIMIT_RTTIME", RLIMIT_RTTIME, false },
+#endif
};
#define ntests (sizeof (tests) / sizeof (tests[0]))
diff --git a/sysdeps/unix/sysv/linux/bits/resource.h b/sysdeps/unix/sysv/linux/bits/resource.h
index ca2c9f0..36ef4da 100644
--- a/sysdeps/unix/sysv/linux/bits/resource.h
+++ b/sysdeps/unix/sysv/linux/bits/resource.h
@@ -100,7 +100,12 @@ enum __rlimit_resource
__RLIMIT_RTPRIO = 14,
#define RLIMIT_RTPRIO __RLIMIT_RTPRIO
- __RLIMIT_NLIMITS = 15,
+ /* Maximum time since last sleep for realtime tasks, in microseconds.
+ Once the soft limit is exceeded, the task will receive SIGXCPU
+ every second. When the hard limit is exceeded, the task dies. */
+ __RLIMIT_RTTIME = 15,
+
+ __RLIMIT_NLIMITS = 16,
__RLIM_NLIMITS = __RLIMIT_NLIMITS
#define RLIMIT_NLIMITS __RLIMIT_NLIMITS
#define RLIM_NLIMITS __RLIM_NLIMITS
diff --git a/sysdeps/unix/sysv/linux/sparc/bits/resource.h b/sysdeps/unix/sysv/linux/sparc/bits/resource.h
index 6e4fc97..77a5325 100644
--- a/sysdeps/unix/sysv/linux/sparc/bits/resource.h
+++ b/sysdeps/unix/sysv/linux/sparc/bits/resource.h
@@ -100,7 +100,12 @@ enum __rlimit_resource
__RLIMIT_RTPRIO = 14,
#define RLIMIT_RTPRIO __RLIMIT_RTPRIO
- __RLIMIT_NLIMITS = 15,
+ /* Maximum time since last sleep for realtime tasks, in microseconds.
+ Once the soft limit is exceeded, the task will receive SIGXCPU
+ every second. When the hard limit is exceeded, the task dies. */
+ __RLIMIT_RTTIME = 15,
+
+ __RLIMIT_NLIMITS = 16,
__RLIM_NLIMITS = __RLIMIT_NLIMITS
#define RLIMIT_NLIMITS __RLIMIT_NLIMITS
#define RLIM_NLIMITS __RLIM_NLIMITS
--
1.7.5.1
Reply to: