lkml.org 
[lkml]   [2018]   [May]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.4 121/268] selftests/powerpc: Skip the subpage_prot tests if the syscall is unavailable
    Date
    4.4-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Michael Ellerman <mpe@ellerman.id.au>

    [ Upstream commit cd4a6f3ab4d80cb919d15897eb3cbc85c2009d4b ]

    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.

    Additionally the syscall is not available if the kernel is built with
    4K pages, or if CONFIG_PPC_SUBPAGE_PROT=n, in which case it returns
    ENOSYS because the syscall is missing entirely.

    So check explicitly for ENOENT and ENOSYS and skip if we see either of
    those.

    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    tools/testing/selftests/powerpc/mm/subpage_prot.c | 14 ++++++++++++++
    1 file changed, 14 insertions(+)

    --- a/tools/testing/selftests/powerpc/mm/subpage_prot.c
    +++ b/tools/testing/selftests/powerpc/mm/subpage_prot.c
    @@ -135,6 +135,16 @@ static int run_test(void *addr, unsigned
    return 0;
    }

    +static int syscall_available(void)
    +{
    + int rc;
    +
    + errno = 0;
    + rc = syscall(__NR_subpage_prot, 0, 0, 0);
    +
    + return rc == 0 || (errno != ENOENT && errno != ENOSYS);
    +}
    +
    int test_anon(void)
    {
    unsigned long align;
    @@ -145,6 +155,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 +192,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");

    \
     
     \ /
      Last update: 2018-05-28 17:31    [W:4.207 / U:0.752 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site