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 X-Spam-Level: X-Spam-Status: No, score=-4.0 required=3.0 tests=DKIMWL_WL_MED,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id E0209C10F11 for ; Sat, 13 Apr 2019 06:41:39 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id A864E20869 for ; Sat, 13 Apr 2019 06:41:39 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=netronome-com.20150623.gappssmtp.com header.i=@netronome-com.20150623.gappssmtp.com header.b="qelO1SEL" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726944AbfDMGjz (ORCPT ); Sat, 13 Apr 2019 02:39:55 -0400 Received: from mail-wr1-f67.google.com ([209.85.221.67]:46269 "EHLO mail-wr1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726922AbfDMGjy (ORCPT ); Sat, 13 Apr 2019 02:39:54 -0400 Received: by mail-wr1-f67.google.com with SMTP id t17so14627762wrw.13 for ; Fri, 12 Apr 2019 23:39:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=netronome-com.20150623.gappssmtp.com; s=20150623; h=references:user-agent:from:to:cc:subject:in-reply-to:date :message-id:mime-version; bh=/YEuMPuAL1nenMEY3PEyo1evLU8Kef6/R2XR/9VgccU=; b=qelO1SELp51RjMuoYVq/4jdruRkyIHzkp8jjICpR0idHo0xI2Of9EaT1UbbyEtTYJb WYICz4EwAJuMoFbJEcWqeNaYsF2OhokvoHEwtATp2qxOGnnDyUbfqsw5MzlKAEYxVewB s4ij8XvajciS6oMFby+ghNe3zivet/jUVrqEGuebdedVYbdPBfAOGqQduZeYKv6qPKr7 rsGFyMeAoSazQNjIqyiVzRSFwGbBpdo4D/TO2NGvmmL//bUXMHpObD8r6ZGUC0LWvJ/I UZrl6IfURLH4FSkCfarQWHPZZhp79kH3dLtPclFn+1VW/u/a5YTA5Tq7tXaPHd3WGtIc xslQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:references:user-agent:from:to:cc:subject :in-reply-to:date:message-id:mime-version; bh=/YEuMPuAL1nenMEY3PEyo1evLU8Kef6/R2XR/9VgccU=; b=Tag0pMstLMmfeS/Mxbe3IxOt3Wsn3ESI5/oms2EAu1NeeiwWPoN44voRu2FP6lU9nl BnDNdbW/5M56F03biLeHlDTm22IlJL5g9fAH7uAuK50qORy1Lhv2Guf4aR8vGQRgIgol 1dmH/MQJoMgHjXKnzWplW09BRtW4WnieUqJo2W1N9Rg4ZoN8FY2wu3rvRECCPzFenWdT kFFSedz/V9g9EnrQEtbtaUtRGx+J3LVz6KtjvPZw9M7Q4DOwpLZ3qDOddITT0Lus/AFs dytlqsvTaJr4pq5+RJA2HwHaKOTBmJVrTFwkwwY7uU9oOwqPPdPP0Q4ve1hV3xEk9RvI /e+Q== X-Gm-Message-State: APjAAAW6IaC7JBrBLerj7htFeX0z1r20YzaX1MizUsDo7IMlmhcKtMJs wqyX2zYv8vGLrwT3/QM6aijMTw== X-Google-Smtp-Source: APXvYqzz0Dx4bB0lcHvQ+DsOeWXLSaxQNLUGFhdI7Ue94ecwujYlkUVdDeglrANun3WKpHJmrY2u/g== X-Received: by 2002:adf:c60e:: with SMTP id n14mr39764498wrg.127.1555137593034; Fri, 12 Apr 2019 23:39:53 -0700 (PDT) Received: from LAPTOP-V3S7NLPL (cpc1-cmbg19-2-0-cust104.5-4.cable.virginm.net. [82.27.180.105]) by smtp.gmail.com with ESMTPSA id t81sm19600180wmb.5.2019.04.12.23.39.51 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Fri, 12 Apr 2019 23:39:52 -0700 (PDT) References: <1555106392-20117-1-git-send-email-jiong.wang@netronome.com> <1555106392-20117-6-git-send-email-jiong.wang@netronome.com> <20190412180734.2f863fbe@cakuba.netronome.com> User-agent: mu4e 0.9.18; emacs 25.2.2 From: Jiong Wang To: Jakub Kicinski Cc: Jiong Wang , alexei.starovoitov@gmail.com, daniel@iogearbox.net, bpf@vger.kernel.org, netdev@vger.kernel.org, oss-drivers@netronome.com Subject: Re: [PATCH v3 bpf-next 05/19] bpf: split read liveness into REG_LIVE_READ64 and REG_LIVE_READ32 In-reply-to: <20190412180734.2f863fbe@cakuba.netronome.com> Date: Sat, 13 Apr 2019 07:39:45 +0100 Message-ID: <87h8b2flxq.fsf@netronome.com> MIME-Version: 1.0 Content-Type: text/plain Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Jakub Kicinski writes: > On Fri, 12 Apr 2019 22:59:38 +0100, Jiong Wang wrote: >> diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c >> index c722015..3c5ca00 100644 >> --- a/kernel/bpf/verifier.c >> +++ b/kernel/bpf/verifier.c >> @@ -1135,7 +1135,7 @@ static int check_subprogs(struct bpf_verifier_env *env) >> */ >> static int mark_reg_read(struct bpf_verifier_env *env, >> const struct bpf_reg_state *state, >> - struct bpf_reg_state *parent) >> + struct bpf_reg_state *parent, u8 flags) >> { >> bool writes = parent == state->parent; /* Observe write marks */ >> int cnt = 0; >> @@ -1150,17 +1150,17 @@ static int mark_reg_read(struct bpf_verifier_env *env, >> parent->var_off.value, parent->off); >> return -EFAULT; >> } >> - if (parent->live & REG_LIVE_READ) >> + if ((parent->live & REG_LIVE_READ) == flags) >> /* The parentage chain never changes and >> - * this parent was already marked as LIVE_READ. >> + * this parent was already marked with all read bits. > > No big deal, but I though said you'd modify this patch here... Ouch, sorry, I created one internal branch before start the test changes. Looks like the branch is v10 which listed before v2~v9 that somehow later I switched v9 for the test changing thought it is the latest branch. Regards, Jiong > >> * There is no need to keep walking the chain again and >> - * keep re-marking all parents as LIVE_READ. >> + * keep re-marking all parents with reads bits in flags. >> * This case happens when the same register is read >> * multiple times without writes into it in-between. >> */ >> break; >> /* ... then we depend on parent's value */ >> - parent->live |= REG_LIVE_READ; >> + parent->live |= flags; >> state = parent; >> parent = state->parent; >> writes = true; > >> @@ -6227,12 +6317,19 @@ static int propagate_liveness_reg(struct bpf_verifier_env *env, >> struct bpf_reg_state *reg, >> struct bpf_reg_state *parent_reg) >> { >> + u8 parent_bits = parent_reg->live & REG_LIVE_READ; >> + u8 bits = reg->live & REG_LIVE_READ; >> + u8 bits_diff = parent_bits ^ bits; >> + u8 bits_prop = bits_diff & bits; >> int err; >> >> - if (parent_reg->live & REG_LIVE_READ || !(reg->live & REG_LIVE_READ)) >> + /* "reg" and "parent_reg" has the same read bits, or the bit doesn't >> + * belong to "reg". >> + */ >> + if (!bits_diff || !bits_prop) >> return 0; > > .. and here?