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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 71C2DC61DA3 for ; Tue, 21 Feb 2023 12:42:48 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234765AbjBUMmq (ORCPT ); Tue, 21 Feb 2023 07:42:46 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38732 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234701AbjBUMmo (ORCPT ); Tue, 21 Feb 2023 07:42:44 -0500 Received: from mail-ed1-x536.google.com (mail-ed1-x536.google.com [IPv6:2a00:1450:4864:20::536]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7ACC227483 for ; Tue, 21 Feb 2023 04:42:42 -0800 (PST) Received: by mail-ed1-x536.google.com with SMTP id ec43so16153606edb.8 for ; Tue, 21 Feb 2023 04:42:42 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=O6el+9joKyAhVr+TDn79fkuxzTiKR+SX0MO09engIhY=; b=cLZLuL/REYI8EX3PmLJFdaF2YUd4XwINhRSVuCvmFL4aG05j7eoj6hTO6HsBms6J64 jI1aSNDMwXJlv7vMhzZCU57mo5E8++tN0wcL8Cp41JslegPSild6F+BHDEw87m7rLbEd U2e/JwxkCaFBy2Wd5fsup2SUZJLAAQ9sQSgQQlRq2fkj0iZmeJnegXko/ihX0PNFLSWt 56urgBxOBm/Nqy0l4t3vVRSZ0GnyJ43fsmC2tam2hSOi32ZWoe/HgEX0sPnqpynLUEyv fj0sbsXVvjHQ8Vh4esfPA0zpanqX1wvttZbt9RUFwrDvpKYVPp92lo7MQwxzTAdK/3p+ nTgQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=O6el+9joKyAhVr+TDn79fkuxzTiKR+SX0MO09engIhY=; b=qCUF2PB1ftUM/JwpvfRqbiC8cIjPmY+Cs/8Qxv72vvxPxJMx175AJjByZA/V0P72Le dfwvhaNX+pGgagC68nzlu4yN8RH1wV1MGTGU/1lR0lfgzIeBapqKlas0RPy0y7Y+H4kV L1j5ShJPbaNzpXWSsIgs/CMR13yPCvtItNo5pUaosvfrW0Z8cMqpH8/axp/QSG8x0hDe g2wCY0Qq7tRwyPiVf8Wt+Eyt0Y/VvwUGcXYyuUAJg451w4ejV/w602TbAQ8x+EbrBkcr te6cb/yyUH3rbepplBtTWujdDyKKV0FlcztzpMMOiepjBYd/LKjXMF1qIQDghIae066o ePvQ== X-Gm-Message-State: AO0yUKXPTp0TO1uOFSZGBDTuKtUM34MAh959NW+3T2J6DQqWR64kqA88 zqG/G9rw208Ak45J6AzjajhDtPfRqeOfoFV0uf2hhw== X-Google-Smtp-Source: AK7set98YYMMSbNx2hRGaTKAwlPc630Vw/Ga3pJmq4lzKkS4okWIZvm2EzW2kFQ7OPb7yFK5K2hy0cNe5M/5DCpxx9U= X-Received: by 2002:a17:906:9499:b0:8b1:79ef:6923 with SMTP id t25-20020a170906949900b008b179ef6923mr6794210ejx.15.1676983360819; Tue, 21 Feb 2023 04:42:40 -0800 (PST) MIME-Version: 1.0 References: <20230202112915.867409-1-usama.anjum@collabora.com> <20230202112915.867409-4-usama.anjum@collabora.com> <36ddfd75-5c58-197b-16c9-9f819099ea6d@collabora.com> In-Reply-To: <36ddfd75-5c58-197b-16c9-9f819099ea6d@collabora.com> From: =?UTF-8?B?TWljaGHFgiBNaXJvc8WCYXc=?= Date: Tue, 21 Feb 2023 13:42:29 +0100 Message-ID: Subject: Re: [PATCH v10 3/6] fs/proc/task_mmu: Implement IOCTL to get and/or the clear info about PTEs To: Muhammad Usama Anjum Cc: Andrei Vagin , Mike Rapoport , Nadav Amit , David Hildenbrand , Andrew Morton , Paul Gofman , Cyrill Gorcunov , Alexander Viro , Shuah Khan , Christian Brauner , Yang Shi , Vlastimil Babka , "Liam R . Howlett" , Yun Zhou , Suren Baghdasaryan , Alex Sierra , Peter Xu , Matthew Wilcox , Pasha Tatashin , Axel Rasmussen , "Gustavo A . R . Silva" , Dan Williams , linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, linux-kselftest@vger.kernel.org, Greg KH , kernel@collabora.com, Danylo Mocherniuk Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, 21 Feb 2023 at 11:28, Muhammad Usama Anjum wrote: > > Hi Micha=C5=82, > > Thank you so much for comment! > > On 2/17/23 8:18=E2=80=AFPM, Micha=C5=82 Miros=C5=82aw wrote: [...] > > For the page-selection mechanism, currently required_mask and > > excluded_mask have conflicting > They are opposite of each other: > All the set bits in required_mask must be set for the page to be selected= . > All the set bits in excluded_mask must _not_ be set for the page to be > selected. > > > responsibilities. I suggest to rework that to: > > 1. negated_flags: page flags which are to be negated before applying > > the page selection using following masks; > Sorry I'm unable to understand the negation (which is XOR?). Lets look at > the truth table: > Page Flag negated_flags > 0 0 0 > 0 1 1 > 1 0 1 > 1 1 0 > > If a page flag is 0 and negated_flag is 1, the result would be 1 which ha= s > changed the page flag. It isn't making sense to me. Why the page flag bit > is being fliped? > > When Anrdei had proposed these masks, they seemed like a fancy way of > filtering inside kernel and it was straight forward to understand. These > masks would help his use cases for CRIU. So I'd included it. Please can y= ou > elaborate what is the purpose of negation? The XOR is a way to invert the tested value of a flag (from positive to negative and the other way) without having the API with invalid values (with required_flags and excluded_flags you need to define a rule about what happens if a flag is present in both of the masks - either prioritise one mask over the other or reject the call). (Note: the XOR is applied only to the value of the flags for the purpose of testing page-selection criteria.) So: 1. if a flag is not set in negated_flags, but set in required_flags, then it means "this flag must be one" - equivalent to it being set in required_flag (in your current version of the API). 2. if a flag is set in negated_flags and also in required_flags, then it means "this flag must be zero" - equivalent to it being set in excluded_flags. The same thing goes for anyof_flags: if a flag is set in anyof_flags, then for it to be considered matched: 1. it must have a value of 1 if it is not set in negated_flags 2. it must have a value of 0 if it is set in negated_flags BTW, I think I assumed that both conditions (all flags in required_flags and at least one in anyof_flags is present) need to be true for the page to be selected - is this your intention? The example code has a bug though, in that if anyof_flags is zero it will never match. Let me fix the selection part: // calc. a mask of flags that have expected ("active") values tested_flags =3D page_flags ^ negated_flags; // are all required flags in "active" state? [=3D=3D all zero when negated] if (~tested_flags & required_mask) skip page; // is any extra flag "active"? if (anyof_flags && !(tested_flags & anyof_flags)) skip page; Best Regards Micha=C5=82 Miros=C5=82aw