Michael Ellerman <m...@ellerman.id.au> writes:

> The subpage_prot syscall is only functional when the system is using
> the Hash MMU. Since commit 5b2b80714796 ("powerpc/mm: Invalidate
> subpage_prot() system call on radix platforms") it returns ENOENT when
> the Radix MMU is active. Currently this just makes the test fail.
>
> Instead check explicitly for ENOENT and skip if we see that.
>
Reviewed-by: Aneesh Kumar K.V <aneesh.ku...@linux.vnet.ibm.com>

> Fixes: 5b2b80714796 ("powerpc/mm: Invalidate subpage_prot() system call on 
> radix platforms")
> Signed-off-by: Michael Ellerman <m...@ellerman.id.au>
> ---
>  tools/testing/selftests/powerpc/mm/subpage_prot.c | 13 +++++++++++++
>  1 file changed, 13 insertions(+)
>
> diff --git a/tools/testing/selftests/powerpc/mm/subpage_prot.c 
> b/tools/testing/selftests/powerpc/mm/subpage_prot.c
> index 35ade7406dcd..81570680e7ea 100644
> --- a/tools/testing/selftests/powerpc/mm/subpage_prot.c
> +++ b/tools/testing/selftests/powerpc/mm/subpage_prot.c
> @@ -135,6 +135,15 @@ static int run_test(void *addr, unsigned long size)
>       return 0;
>  }
>
> +static int syscall_available(void)
> +{
> +     int rc;
> +
> +     errno = 0;
> +     rc = syscall(__NR_subpage_prot, 0, 0, 0);
> +     return rc == 0 || errno != ENOENT;
> +}
> +
>  int test_anon(void)
>  {
>       unsigned long align;
> @@ -145,6 +154,8 @@ int test_anon(void)
>       void *mallocblock;
>       unsigned long mallocsize;
>
> +     SKIP_IF(!syscall_available());
> +
>       if (getpagesize() != 0x10000) {
>               fprintf(stderr, "Kernel page size must be 64K!\n");
>               return 1;
> @@ -180,6 +191,8 @@ int test_file(void)
>       off_t filesize;
>       int fd;
>
> +     SKIP_IF(!syscall_available());
> +
>       fd = open(file_name, O_RDWR);
>       if (fd == -1) {
>               perror("failed to open file");
> -- 
> 2.14.1

Reply via email to