From patchwork Fri Aug 24 08:22:33 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Hausmann X-Patchwork-Id: 10575319 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id B66FB14E1 for ; Fri, 24 Aug 2018 12:57:35 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id A155C2C33F for ; Fri, 24 Aug 2018 12:57:35 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 935752C34D; Fri, 24 Aug 2018 12:57:35 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.8 required=2.0 tests=BAD_ENC_HEADER,BAYES_00, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI,T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id BCE7A2C33F for ; Fri, 24 Aug 2018 12:57:34 +0000 (UTC) Received: from localhost ([::1]:41652 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ftBef-0000wy-TP for patchwork-qemu-devel@patchwork.kernel.org; Fri, 24 Aug 2018 08:57:33 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:44184) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ft7Mv-0007AF-RV for qemu-devel@nongnu.org; Fri, 24 Aug 2018 04:22:58 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ft7Mr-00041t-AC for qemu-devel@nongnu.org; Fri, 24 Aug 2018 04:22:57 -0400 Received: from mail-eopbgr80117.outbound.protection.outlook.com ([40.107.8.117]:13248 helo=EUR04-VI1-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1ft7Mp-0003y6-D5 for qemu-devel@nongnu.org; Fri, 24 Aug 2018 04:22:53 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qtcompany.onmicrosoft.com; s=selector1-qt-io; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=hkGosC0hvC1j/VlO8jV2EyWsniO4kHiAg0/tmV35PnY=; b=EdebQJCxP4bwAcz46R8Gz/1vp6kEnliWZklrA3RbVqFn7cirPbKzsjy0fyrJuRlDAAy5FTOslnZQmGkNxYlCx7tYxvz85hkWwQDbNwYrsMHsQmgfxw5hc7mCFrwQ23hLczknkoC5SvYuvxyOFIgrNJCWc9HnPr5mO/WqTPsp36I= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Simon.Hausmann@qt.io; Received: from giyaffe.intra.qt.io (62.220.2.194) by VI1PR0202MB2832.eurprd02.prod.outlook.com (2603:10a6:800:db::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1059.23; Fri, 24 Aug 2018 08:22:45 +0000 From: Simon Hausmann To: qemu-devel@nongnu.org Date: Fri, 24 Aug 2018 10:22:33 +0200 Message-Id: <20180824082233.5008-1-simon.hausmann@qt.io> X-Mailer: git-send-email 2.17.1 MIME-Version: 1.0 X-Originating-IP: [62.220.2.194] X-ClientProxiedBy: VI1PR0501CA0025.eurprd05.prod.outlook.com (2603:10a6:800:60::11) To VI1PR0202MB2832.eurprd02.prod.outlook.com (2603:10a6:800:db::21) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 779d2a74-5c7b-4105-dc35-08d6099ac551 X-Microsoft-Antispam: BCL:0; PCL:0; RULEID:(7020095)(4652040)(8989137)(4534165)(4627221)(201703031133081)(201702281549075)(8990107)(5600074)(711020)(2017052603328)(7153060)(7193020); SRVR:VI1PR0202MB2832; X-Microsoft-Exchange-Diagnostics: 1; VI1PR0202MB2832; 3:9NDBDZl9x7/3VtWJFvTSAGO2O/ci+saK/dpwXadVnkdR3sCrjp9IsGutCWAdIxTHpu6Mq2TdDs45QIBHWHJq8aH0mv2GOepSc7CFPpR0DSKhMgiUhWjazUpZBLPjI9D3qtPrTWyL0ctxspY3oqEl+V2gnnbhhUDK3lMpYHdUE/5MkSi+HAJJDpOaVd1kEGT2lFuuSTgvviHV2rPgUye3xEvVHgLxEB8s0RVATku/CVlrBw62SELrpCArywFpEWeS; 25:2BEyXuXRPkpYHBKPCxBxyud1CMYl06g4NzjzghfjW5SHJ7H1usxx5MELjuX9qnFF1RSvcxXJB5lmu0ydhMPbpj89p29g5SgUB6wcwEgxIxqZ8HdO0S2CSuSBmHMvg09PJLRIfIfmSSzZLaxkX7WxPB/4sj4RUi4QZVPXTGNwbHmpPq3Rylif/OAUnzgaDprufh4FfvBrGc8XXPpFvDKgkbLLh3vG5Tbq0hCjCLDv+4JmAQ6XxYWvTtD0fN60jA7deazPUNCcp3pZYRe6QSJ4FnDSbaxeQ8OmKD+oA8a6Bq3c0d6x+swm+CD9hErghEwD0dpxS6wIsWfXIe7eEuChgQ==; 31:+6A0wWXyo2y2O5rqn7Y2Z9QjuW/VGxs/M/dltdHM1hW9rbWi5+CuBuZ7fcAiEj7eQ9UnAiAWJv8DvvIwGkaourkQek8sK7kGqAb1SoyQbU4pDBXvMq7xR5VduSDogKHME20EQL/iu71uRwjKLh+yyUglxwJGj5tbcAxqE5GIchPYrq+zYBfIH2JhVFOdPN+qBliGiLjWip14jnYnwI6yRo7OZtr8US6J+3WZtYnh1PU= X-MS-TrafficTypeDiagnostic: VI1PR0202MB2832: X-Microsoft-Exchange-Diagnostics: 1; VI1PR0202MB2832; 20:QtkMgvdhY4idkY31DIp0oZZjhcR3CEkp2DqVDVhgVvrtu2YDuPQBQ7bvXasIBAUG9agsgwx51C+fZEzLrnjD7Ig/1A7BsfKcxH/5vF9Wx3JzfoigbFOZjdP2B4l53nGerDNdQikUZGqhav/xyUXbFMIG+0bi6RbokkLVvgQIT6F0/h9lwmVAxb+MMpVn+gkAoJFawC9n8ByeigS85gWIuTmswLS0ijnT2LLZpNnb3mFTrRDvEEZaKtaL/BrITIq3q0S6pizvnY+uYGWxdE4GxuTovp2iql3LP102PW6f1iBaqEe8vDP2jwPQ1qOeGqlEkTgrlwoEv8q78+SeDn3h0K4qpBulYPgMYTYQtWpD3/kvsFz51Oquy2XH2C7U2h1bTQvPgp3SqmDoFKYg8XBWv5kY3JCB8JwlQCJuyJR+pgKjNaqg+5FrDXG06L2DXwoxIND/9CtDgM3EtvIMWS2mrUv9X700RkWpX+xEpuMktg7tfKLcWowYfkiqZoGjoovx; 4:xRWa/HbSKw4kvaTnImAKrKMTEYsjpRcmaKrBP5t6ROlx/UkyL+ZNUVYThAbFAxSoIL5k95K4j3oe8Drz3Re4cv8CIZbtN8qYrQ7rJJzJEbG0JWnifM+gd9pWoDUf1ENR7QsJetoi5UgQQlbAmd4QoIFKXkkniS8wM3f2e0ZRlYF0gH7Pd1xJ1Emxt039qsndFvaM33I43zBdBOXcVT5hUM6H5c3VAV3aT95IHyKZ2If8UQmvs1XO0MO/YQCAG/yqtVpg+rc+DMyG2zs8R3k6U8Hk/YrpBLg9GTZGXdER/YS2Yb7uQ5qnEX8AGb81B5Ps X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(278428928389397); X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040522)(2401047)(5005006)(8121501046)(3231311)(944501410)(52105095)(10201501046)(93006095)(93001095)(3002001)(149027)(150027)(6041310)(20161123564045)(20161123562045)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123558120)(201708071742011)(7699016); SRVR:VI1PR0202MB2832; BCL:0; PCL:0; RULEID:; SRVR:VI1PR0202MB2832; X-Forefront-PRVS: 07749F8C42 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(136003)(39850400004)(376002)(346002)(366004)(396003)(199004)(189003)(44832011)(48376002)(6916009)(86362001)(575784001)(6666003)(50466002)(66066001)(47776003)(14444005)(36756003)(51416003)(105586002)(106356001)(2351001)(69596002)(97736004)(2906002)(53416004)(7696005)(52116002)(478600001)(72206003)(33896004)(2361001)(54906003)(316002)(16586007)(956004)(2616005)(476003)(486006)(8676002)(81156014)(81166006)(7736002)(305945005)(386003)(74482002)(186003)(16526019)(26005)(1857600001)(5660300001)(68736007)(25786009)(8936002)(1076002)(3846002)(53936002)(6116002)(6486002)(50226002)(4326008); DIR:OUT; SFP:1102; SCL:1; SRVR:VI1PR0202MB2832; H:giyaffe.intra.qt.io; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; Received-SPF: None (protection.outlook.com: qt.io does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; VI1PR0202MB2832; 23:Lhfe5tFOejn90gB/cQ2WvluuwWRRyhcoVFliRXK?= /2M4064ynV7aBRTYOpzO5Dy0YYQsyxoD61X/124kYdqe4pNU6BR4k2Y9crQbVpD54tq005CnW3ogoKt+edGbtcRoHC6WKhl8VjmkcoqUzyMcEtqCqUAyAUDxYJ8M/cYFs+UVtKhplzAvggzL7xuCOaswNjXEwjiJefrfzT6Jp9g/Mltyc/edknRX6D8MvYXP76aoyC0PK/FlO/jni60KE+4MuCOF7dLXZ71uV3p1EyVXfMVGE4wbTEcWQX9kYUqFQEhaDYxn6ehz5xk/WTtJwz+U81qN3JhlPxMbixK3Er5cFAujFtYnf4wcIm7HN/0Sw8VyV6rXlBpNfA+YNqeU3XyTQoJferCG6ELBfw95eqI6S+cNkjXQ9y80h0hS1Dx7JRwTmCz5XPBwZwHRL8OFNP9oBA405uvtHB2RWB3r9c+v5wVB67V36/0tV9Rr1kJXbmzl/3BgtyihdWwKS7BWvej5ZI5lLmPhOjN/WqQDIC9Fta1Iq3vNrKSLtMXoo88EE+uaJJA9xP6UiDf8Djaq5WTVzESxNMSirWjvMvLkzreDrk+mcMXNAbdTyS8XE8m6lUr6UIpwkREyg47K51DA4jztvUKRVKg5HPLhWAVblhTmNnwFgt8fTgtqWNtcKUUxteGn/Q+sCSiTMqPvIgP/TK9CO0RzDbWggcic7j6SKR/6BYSWaedWukXnq//1L5j15EoFZR6QHsVExfX0bglpPLAtgT152tbvbNHevRHYwt/Li1CLlBIVxbqXRjlIPTagXQcMEs4jExqIJm41N7mNvZkFjm+9gpxrCVaLURVHEIA09PTna5twLqdQsZk9y+kEp1on0fPwPQZsAM0li48KHP05kAEeRBBV/2i7OG9Dc09yW7MMo/ym11BPAljc4ExZRxD/Y96fOXNqL8hE1vL50keypy16py7A6eC7kgpBeXoOfTfNcoFH44CBoE/9+JCq5JHHHfp+pKxVI+4e5fdFCD3NvrDMmoUCDoATTqnEUkGLNgwEE4Zw8Ww/EASXwnikxNolNfkyRfzIYDrSETWQIAmMgBwAbqAfQ/wlWEHWqlaQLKFmeIDYVyE/8oBZHfmOc9EOehvDjP9pnZ9ZM6p6Kbibn01Lgt+2x2tj1+V/mRMQMOqq8BZugN9PFpyTGBLCPoIh+0d4CvaHthk8V4mikPbLIxOU4oUbp1uKjpFqrzybLHxsDutui+aBaoVVpsUcUqRAg2IxCvmlyDl6uuhaNzD9koLqgRIrq5s1YCmz3CDKRviJYs2XxJIzq4VvK1rixJDtqpdm1c5kyDwdlyaoDzFq5lEg9cL3c6nCIJxGlYw6UHw== X-Microsoft-Antispam-Message-Info: 4ZFGWP43sh+Xuk/2yi4utfv5zdWJiCwM6rxwivJ7dAUUliUpDc9w8aWTTDTDLROshx4MGDLFH4A5D9S4Lt4YyFgnMaUeSKH46VIB2OsnKKvnwA2BPCsLwiscYWR/d210yviHCC3nPvgln7/Q/IVdFrbXt7kw/sB6Leq8KQGnlx737HsWAwWe/8ZMDcfz7ZslB1EpHWJh5r/yHpkfEAj5Da2hp8UvaxmCH5et5vwOPVQj82zjqq4CIHGY4/REd4HHR6LLoiBKzdTp0Flth8/xBz5E9uNJzQbKfY1tqDZjBKLeu1MyvjA9ObLbVU9X+qONYrBwElI//BkVZn6aQV4Q44NFOay+ueNPlARlTWBIEWg= X-Microsoft-Exchange-Diagnostics: 1; VI1PR0202MB2832; 6:s63rcwKSSeHiTVQXFzzTkHKCX+ld5q0GOPdmQYXGo/TzgZpEAzZ8wgoYZ5tDV7x88geIeucVinBizR/h6vcbFRWVzH9Fvt1kwvE1GJjx8NTMsSBwFvseodthJ2J5uiWddXN3TAqRtgB3tvuc1eMiveYX5DFR+U2r7eV9AJYeRzBNMGM1gaEbuLNaLb5ozMlYr5FxETlEFsrGpSCye3KwlRuou5NJI1cgN7vCIdS8okUY2yQSD1K5T6ktIy9wdu1jgwwT2LvN6qoy3emTQwysfzM84uyGSyt6TwLtti8wZc+v8NFw9laNkcS0lcvEvo1MKfFLfFYfCaFo0881Ps5vVtWF0+qdUl168qXUqU/O9FPCNqkNnzucXoJAkY/e8NlW0RHO37MmSrBXPEh/nCp2dtk6Do0xlYNSYiQVRcVKb3c1lKnulKL+3clqiYymwIdFZTBvJZl4zUNq+pGysejkWg==; 5:88sOaFLzirOqJd0K89O0t4M6t7x0mZ0GaY9aQ+6cjWvlGDjJacu3iDqdje8ALgtxzhXxnVftxa3EEnbEqVCCv0vUeoxTSQBQ0fhpUx4R7ypjxAKYJBvln2efXqJXMg9+8NLM+hbLSDgrJ1/xN6jRDJhIJcEGkD/5pvWVNEFWnzs=; 7:rc1HJ+f2XJ86uXQASYl1AXdFBtSPf1V9TKlCq1nj9h0C2ypljnjaLyqGziFw30w/AwQEoBGBod0XyY1e7Q9lh0mWE7ugsPr5xsHloEFTSZOoq4qR3S2SF/2HJn+cwj2nEk0/1x+pgMaJS1dCYjcURiLe1wyT/im5Kr6psmz1BeSLXf2F0YK76gQz/p8ADt+M+u2yX66bRRJm3kFMZFvOsiCErif8ptukzrE7EsKt0kHFBvbH0GinQb4eafQ9nChY SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: qt.io X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Aug 2018 08:22:45.8031 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 779d2a74-5c7b-4105-dc35-08d6099ac551 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 20d0b167-794d-448a-9d01-aaeccc1124ac X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0202MB2832 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 40.107.8.117 X-Mailman-Approved-At: Fri, 24 Aug 2018 08:56:28 -0400 Subject: [Qemu-devel] [PATCH] linux-user: add support for MADV_DONTNEED X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Sami Nurmenniemi , Riku Voipio , Simon Hausmann , Laurent Vivier Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP Most flags to madvise() are just hints, so typically ignoring the syscall and returning okay is fine. However applications exist that do rely on MADV_DONTNEED behavior to guarantee that upon subsequent access the mapping is refreshed from the backing file or zero for anonymous mappings. Signed-off-by: Simon Hausmann --- linux-user/mmap.c | 18 ++++++++++++++++++ linux-user/qemu.h | 1 + linux-user/syscall.c | 6 +----- 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/linux-user/mmap.c b/linux-user/mmap.c index 41e0983ce8..3adb7a0f0a 100644 --- a/linux-user/mmap.c +++ b/linux-user/mmap.c @@ -762,3 +762,21 @@ abi_long target_mremap(abi_ulong old_addr, abi_ulong old_size, mmap_unlock(); return new_addr; } + +int target_madvise(abi_ulong start, abi_ulong len, int flags) +{ + if (!guest_range_valid(start, len)) { + errno = TARGET_EINVAL; + return -1; + } + + /* A straight passthrough may not be safe because qemu sometimes + turns private file-backed mappings into anonymous mappings. + Most flags are hints, except for MADV_DONTNEED that applications + may rely on to zero out pages, so we pass that through. + Otherwise returning success is ok. */ + if (flags & MADV_DONTNEED) { + return madvise(g2h(start), len, MADV_DONTNEED); + } + return 0; +} diff --git a/linux-user/qemu.h b/linux-user/qemu.h index b4959e41c6..4b68019904 100644 --- a/linux-user/qemu.h +++ b/linux-user/qemu.h @@ -437,6 +437,7 @@ int target_munmap(abi_ulong start, abi_ulong len); abi_long target_mremap(abi_ulong old_addr, abi_ulong old_size, abi_ulong new_size, unsigned long flags, abi_ulong new_addr); +int target_madvise(abi_ulong start, abi_ulong len, int flags); extern unsigned long last_brk; extern abi_ulong mmap_next_start; abi_ulong mmap_find_vma(abi_ulong, abi_ulong); diff --git a/linux-user/syscall.c b/linux-user/syscall.c index 202aa777ad..023874ac8c 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -11874,11 +11874,7 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1, #ifdef TARGET_NR_madvise case TARGET_NR_madvise: - /* A straight passthrough may not be safe because qemu sometimes - turns private file-backed mappings into anonymous mappings. - This will break MADV_DONTNEED. - This is a hint, so ignoring and returning success is ok. */ - ret = get_errno(0); + ret = get_errno(target_madvise(arg1, arg2, arg3)); break; #endif #if TARGET_ABI_BITS == 32