From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 20866C43334 for ; Tue, 14 Jun 2022 20:57:01 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 7A33E6B0071; Tue, 14 Jun 2022 16:57:00 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 752AE6B0072; Tue, 14 Jun 2022 16:57:00 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 5F3CB6B0073; Tue, 14 Jun 2022 16:57:00 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id 4FF446B0071 for ; Tue, 14 Jun 2022 16:57:00 -0400 (EDT) Received: from smtpin08.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay13.hostedemail.com (Postfix) with ESMTP id 1EFF460A31 for ; Tue, 14 Jun 2022 20:57:00 +0000 (UTC) X-FDA: 79578051000.08.00BF1B8 Received: from mail-pf1-f178.google.com (mail-pf1-f178.google.com [209.85.210.178]) by imf16.hostedemail.com (Postfix) with ESMTP id ADEA7180098 for ; Tue, 14 Jun 2022 20:56:59 +0000 (UTC) Received: by mail-pf1-f178.google.com with SMTP id u37so1204209pfg.3 for ; Tue, 14 Jun 2022 13:56:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=mime-version:subject:from:in-reply-to:date:cc :content-transfer-encoding:message-id:references:to; bh=K+cY02yeCpNZ/2ttinbZSTzbbGDI/1TfrMM0zrgJMlo=; b=ZNRHxfJVUFI9w+1qJs5vPwce5RGkYsHI78O7moFG9oyZMJsCuARWzmlOmry7lFXFoQ RtDMPw4mX6f4fQt9X3IFkVTgPpO1F8tMO+VFqvUiAJH654oldJ7w7OFD5xCQAsSwfrgt DybJT9dxFzHgzzmXDhOMY6iosJl32pUyQRkwXgCZgc30a0tq0jDmgCm5me2WZXgRSJ0e 89QbzES0reSSVOEiWVvxq5uWmzzUj9h8Mwu0K2dSkhaZLFVFUF0kmTn+KXRAsydD0fyv FNURyBrNixT/KVF6o97w1eb76jq+mHuSw5J3I9kshdV7Ni6FrlW2kKwrHBm0pUFYZx+U fnnw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:subject:from:in-reply-to:date:cc :content-transfer-encoding:message-id:references:to; bh=K+cY02yeCpNZ/2ttinbZSTzbbGDI/1TfrMM0zrgJMlo=; b=4B1lpqSMQEUUnT+eyaxmd7KcmFL9Z9ZU0l4gm+ogZrSLyGmuMmfDkniUH86GzWIogI fXPZyWu0Cf5roFyROcFtlYKaPMjoQh3feBNSg4KhCP18H9X0ZgxHHQz2nE65v2+KULVr quJjzUvq3+iX6o/KyDMEvhfayMIQ+Y03I8ejqjj3wnhVusjkGIyyXWdMt8Pwvjt1AE1h 3WDA/ioLMs3z+S9ErfNQGKqau3lbKxBeKA5WfJt9DDQ+XQov7fztA9TilUPw/kac7Bqm WnvBgcrS17NNOjjmoEquMqU9brXEdrNodljZHMpxH7C5EUEPXZAZTEOYXkHLpIHDHe+Y vg0w== X-Gm-Message-State: AOAM5320yn/ab+uuqJqFQA9Va6wqm+4x8RfuvYQSl1fFWusdxF3aLiNC U/zfMkj0Ak2iS9QK4FZX2vo= X-Google-Smtp-Source: ABdhPJzajl8DERiCTx6vBm8iQ9VeUXA1jHIz5dd+fQzUeAPfRyJ4HALmsbfOhGz+nWB++bkSOHJ8mA== X-Received: by 2002:a63:8541:0:b0:401:9c13:ffca with SMTP id u62-20020a638541000000b004019c13ffcamr5936256pgd.417.1655240218254; Tue, 14 Jun 2022 13:56:58 -0700 (PDT) Received: from smtpclient.apple (c-24-6-216-183.hsd1.ca.comcast.net. [24.6.216.183]) by smtp.gmail.com with ESMTPSA id c3-20020a170902d90300b00163c0a1f718sm7681492plz.303.2022.06.14.13.56.57 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Tue, 14 Jun 2022 13:56:57 -0700 (PDT) Content-Type: text/plain; charset=utf-8 Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3696.100.31\)) Subject: Re: [PATCH RFC] userfaultfd: introduce UFFDIO_COPY_MODE_YOUNG From: Nadav Amit In-Reply-To: <481fc9d0-6122-bf59-9d04-23c10d256764@nvidia.com> Date: Tue, 14 Jun 2022 13:56:56 -0700 Cc: Mike Rapoport , David Hildenbrand , Peter Xu , Linux MM , Mike Kravetz , Hugh Dickins , Andrew Morton , Axel Rasmussen Content-Transfer-Encoding: quoted-printable Message-Id: <0BB58ACF-2801-4622-BF3B-9913A23AE46C@gmail.com> References: <20220613204043.98432-1-namit@vmware.com> <3eea2e6e-1646-546a-d9ef-d30052c00c7d@redhat.com> <481fc9d0-6122-bf59-9d04-23c10d256764@nvidia.com> To: John Hubbard X-Mailer: Apple Mail (2.3696.100.31) ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1655240219; a=rsa-sha256; cv=none; b=byCEXx5N9+UhOFdOcgkOnV0fuKVn8XSqfvwlPDVM9lzBeAQ7sl0T63t/4+DHMP8mgAQenp r2uCeQ6+EHrFUxHK43zFjtxLSLvOm8qenXZ3sPhA6gGblyKuAcHrqtrRb5ZE3rO7J5qZSw XZd3n0cWzHb+Z5bT4/z+b6H9SLi6wjE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1655240219; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=K+cY02yeCpNZ/2ttinbZSTzbbGDI/1TfrMM0zrgJMlo=; b=Qikhvy1ljkT1TuOXZyRxlvF1thTSgmEgt1bs8NWXdYMVjd8cQvvb2Fw5B2buCPYinlvi/4 GO/sYMX2yXBzMiLnM1m6aeJUBJ2gh+fx9bAB5JpC0BmOr/TGxNABaZDy4c2m7bcc0kbiSZ BFMgDnoorBmGoOmazzH2mFQq0ohMWNI= ARC-Authentication-Results: i=1; imf16.hostedemail.com; dkim=pass header.d=gmail.com header.s=20210112 header.b=ZNRHxfJV; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf16.hostedemail.com: domain of nadav.amit@gmail.com designates 209.85.210.178 as permitted sender) smtp.mailfrom=nadav.amit@gmail.com Authentication-Results: imf16.hostedemail.com; dkim=pass header.d=gmail.com header.s=20210112 header.b=ZNRHxfJV; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf16.hostedemail.com: domain of nadav.amit@gmail.com designates 209.85.210.178 as permitted sender) smtp.mailfrom=nadav.amit@gmail.com X-Rspam-User: X-Rspamd-Server: rspam09 X-Rspamd-Queue-Id: ADEA7180098 X-Stat-Signature: ume55ogcj4qbz8yxepo3amjbmhkqksp4 X-HE-Tag: 1655240219-136056 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: On Jun 14, 2022, at 1:40 PM, John Hubbard wrote: > On 6/14/22 11:56, Mike Rapoport wrote: >>> But, I cannot take it anymore: the list of arguments for uffd stuff = is >>> crazy. I would like to collect all the possible arguments that are = used for >>> uffd operation into some =E2=80=9Cstruct uffd_op=E2=80=9D. >> Squashing boolean parameters into int flags will also reduce the = insane >> amount of parameters. No strong feelings though. >> =20 >=20 > Just a quick drive-by comment about boolean arguments: they ruin the > readability of the call sites. In practice, sometimes a single boolean > argument can be OK-ish (still poor to read at the call site, but = easier > to code initially), but once you get past one boolean argument in the > function, readability is hopeless: >=20 > foo(ptr, true, false, a =3D=3D b); >=20 > So if you have a choice, I implore you to prefer flags and/or enums. = :) Thanks for the feedback - I am aware it is very confusing to have = booleans and especially multiple ones in a func call. Just not sure how it maps to what I proposed. I thought of passing as an argument reference (pointer) to something similar to the following = struct, which I think is very self-descriptive: struct uffd_op { /* various fields */ struct vm_area_struct *dst_vma; unsigned long len; atomic_t *mmap_changing; ... =09 /* ... and some flags */ int wp: 1; int zero: 1; int read_likely: 1; ... }; I think that fits what you were asking for. The only thing I am not sure = of, is whether to include in uffd_op fields that are internal to = mm/userfaultfd such as =E2=80=9Cpage=E2=80=9D and =E2=80=9Cnewly_allocated=E2=80=9D. I = guess not.