Message ID | 157046102656.20724.3358140818300189230.stgit@devnote2 (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | selftests: Fixes for 32bit arch | expand |
On Tue, Oct 08, 2019 at 12:10:26AM +0900, Masami Hiramatsu wrote: > Currently proc-self-map-files-002.c sets va_max (max test address > of user virtual address) to 4GB, but it is too big for 32bit > arch and 1UL << 32 is overflow on 32bit long. > > Make va_max 3GB on 32bit arch like i386 and arm. IIRC i386 had 1G/3G split, so 3GB would be too much still. > --- a/tools/testing/selftests/proc/proc-self-map-files-002.c > +++ b/tools/testing/selftests/proc/proc-self-map-files-002.c > +#if __BITS_PER_LONG == 32 > +# define VA_MAX (3UL << 30) > +#elif __BITS_PER_LONG == 64 > +# define VA_MAX (1UL << 32) > +#else > +# define VA_MAX 0 > +#endif > + > int main(void) > { > const int PAGE_SIZE = sysconf(_SC_PAGESIZE); > - const unsigned long va_max = 1UL << 32; > + const unsigned long va_max = VA_MAX; This limit doesn't need to be precise, 1GB is "big enough".
On Tue, 8 Oct 2019 20:59:16 +0300 Alexey Dobriyan <adobriyan@gmail.com> wrote: > On Tue, Oct 08, 2019 at 12:10:26AM +0900, Masami Hiramatsu wrote: > > Currently proc-self-map-files-002.c sets va_max (max test address > > of user virtual address) to 4GB, but it is too big for 32bit > > arch and 1UL << 32 is overflow on 32bit long. > > > > Make va_max 3GB on 32bit arch like i386 and arm. > > IIRC i386 had 1G/3G split, so 3GB would be too much still. Hmm, would you know what is the best value for that? i386 can also be configured 3G/1G, 2G/2G and 1G/3G, so it depends on the build configuration. Would 1G is enough for test? Thank you, > > > --- a/tools/testing/selftests/proc/proc-self-map-files-002.c > > +++ b/tools/testing/selftests/proc/proc-self-map-files-002.c > > > +#if __BITS_PER_LONG == 32 > > +# define VA_MAX (3UL << 30) > > +#elif __BITS_PER_LONG == 64 > > +# define VA_MAX (1UL << 32) > > +#else > > +# define VA_MAX 0 > > +#endif > > + > > int main(void) > > { > > const int PAGE_SIZE = sysconf(_SC_PAGESIZE); > > - const unsigned long va_max = 1UL << 32; > > + const unsigned long va_max = VA_MAX; > > This limit doesn't need to be precise, 1GB is "big enough".
diff --git a/tools/testing/selftests/proc/proc-self-map-files-002.c b/tools/testing/selftests/proc/proc-self-map-files-002.c index 47b7473dedef..d517f8c479fb 100644 --- a/tools/testing/selftests/proc/proc-self-map-files-002.c +++ b/tools/testing/selftests/proc/proc-self-map-files-002.c @@ -22,6 +22,7 @@ #include <unistd.h> #include <sys/mman.h> #include <stdlib.h> +#include <asm/bitsperlong.h> static void pass(const char *fmt, unsigned long a, unsigned long b) { @@ -44,10 +45,18 @@ static void fail(const char *fmt, unsigned long a, unsigned long b) exit(1); } +#if __BITS_PER_LONG == 32 +# define VA_MAX (3UL << 30) +#elif __BITS_PER_LONG == 64 +# define VA_MAX (1UL << 32) +#else +# define VA_MAX 0 +#endif + int main(void) { const int PAGE_SIZE = sysconf(_SC_PAGESIZE); - const unsigned long va_max = 1UL << 32; + const unsigned long va_max = VA_MAX; unsigned long va; void *p; int fd;
Currently proc-self-map-files-002.c sets va_max (max test address of user virtual address) to 4GB, but it is too big for 32bit arch and 1UL << 32 is overflow on 32bit long. Make va_max 3GB on 32bit arch like i386 and arm. Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org> Cc: Alexey Dobriyan <adobriyan@gmail.com> --- .../selftests/proc/proc-self-map-files-002.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-)