Received: by 2002:ac0:a582:0:0:0:0:0 with SMTP id m2-v6csp557595imm; Fri, 5 Oct 2018 08:08:03 -0700 (PDT) X-Google-Smtp-Source: ACcGV60db+Xs9wAbE60sgf59gLyIHEfCNAIaMGZJqsDfuVFl0tiUsb2CFigbVBV5dnxG4jHs+h4s X-Received: by 2002:a17:902:aa87:: with SMTP id d7-v6mr12233924plr.25.1538752083734; Fri, 05 Oct 2018 08:08:03 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1538752083; cv=none; d=google.com; s=arc-20160816; b=IdfLuMEJA8MwB2syqYLv1a6wx6yK7SSct+/JobiLd9IgQ83umDs58IaiX4M/ff5NB2 FEAxHhQhnWb/zm2REXsXej4wqAqTl5SpBDCXntlCeDQnSsYn/7zJ5UDPAjEo3dup8trl 0KuEEgsX+hQclXyyV2C3YP1Wk/f0tzQvgD05zswCjryBlMD1oNezgFm+j2zWwEJDe8Wb 1H9srwYPsf9tHjUf0xAeiKpTmTfHD5TOBqHtjEbYQ+xBAsQdKG9f1Kzuzo5TeVjNHzl2 RqOYibrAcC1uZCB9eOnme5dcCHT1vw8RYCV/lNQzKDgDanJ5vyfQ/PompTeAXpA7pWPZ YraA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:dkim-signature; bh=RwyaLHFX/+E2FyMZVlUaO12Z3k80mRK01rxlr70sDt0=; b=p7RbYvJXytf1P1b6RxXO63qHHvwy+ZKjoQHDwcZuLIoxa6cfsdFkphZhZ65aHrDTEG KRYc89gdnSH7PJDW9OzKlsI6eCY0VsqZQTCJt9PIBr1J+jOVQsVPzY47aW5OSdo7xgdy tPFN+8NXqNLwZgvH/zKb/qH2X3Vkfm9mjcrnDG2wfimrB6PCSQv/hdLOG6kCzTvOw8yH CAbl6niYCJ3k4Be0PPUti8OQlzCgNBqtbjatu1KDCxIsIez1CQLcWZIncKZo0FvkLKty plHPcy8cV5zvI8W90RhifHpWvEZOWe6DYKJJBAMTfXZzpVn5O99vWZ4Mqu4HhvvgE2JV YuBQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=IgZDQ9zc; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id o2-v6si7576792pgj.111.2018.10.05.08.07.47; Fri, 05 Oct 2018 08:08:03 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=IgZDQ9zc; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728021AbeJEWGk (ORCPT + 99 others); Fri, 5 Oct 2018 18:06:40 -0400 Received: from mail.kernel.org ([198.145.29.99]:36840 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726082AbeJEWGk (ORCPT ); Fri, 5 Oct 2018 18:06:40 -0400 Received: from mail-qk1-f171.google.com (mail-qk1-f171.google.com [209.85.222.171]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 7A5872064A; Fri, 5 Oct 2018 15:07:32 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1538752052; bh=tkXJ92t1+SOdVwZHfs4LHrN7Cp0amzcXgCFWnxf7KU0=; h=References:In-Reply-To:From:Date:Subject:To:Cc:From; b=IgZDQ9zcH2Xov2E9fFvmhlvXKuBfqGvrKIZuGHwaeN44tqD4U4uRUhsUXJlGUl/gA EGTIrapLBTixezLMhdYO21053QVgiEL8s3FUUz44TX1iZoVp1j681DGOHrFVLNAKCN NKIfOcx7xq3HmmdqlOOCRgF2Phe9HPvLuKN/rY4s= Received: by mail-qk1-f171.google.com with SMTP id a85-v6so8131102qkg.3; Fri, 05 Oct 2018 08:07:32 -0700 (PDT) X-Gm-Message-State: ABuFfohu3mFSN/xDa6qEhgRQWcy50Jl+XV1xFO2NzzejUs2+dUrOWyyN r88J0XxxpHLaSRUvvtPrKhSIT5vKrrKbQznrAA== X-Received: by 2002:a37:12d1:: with SMTP id 78-v6mr9502824qks.147.1538752051679; Fri, 05 Oct 2018 08:07:31 -0700 (PDT) MIME-Version: 1.0 References: <1538712767-30394-1-git-send-email-frowand.list@gmail.com> <1538712767-30394-10-git-send-email-frowand.list@gmail.com> In-Reply-To: <1538712767-30394-10-git-send-email-frowand.list@gmail.com> From: Rob Herring Date: Fri, 5 Oct 2018 10:07:20 -0500 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [PATCH 09/16] of: overlay: validate overlay properties #address-cells and #size-cells To: Frank Rowand Cc: Pantelis Antoniou , Michael Ellerman , Benjamin Herrenschmidt , Paul Mackerras , Alan Tull , Moritz Fischer , "linux-kernel@vger.kernel.org" , linuxppc-dev , devicetree@vger.kernel.org, linux-fpga@vger.kernel.org Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, Oct 4, 2018 at 11:14 PM wrote: > > From: Frank Rowand > > If overlay properties #address-cells or #size-cells are already in > the live devicetree for any given node, then the values in the > overlay must match the values in the live tree. > > If the properties are already in the live tree then there is no > need to create a changeset entry to add them since they must > have the same value. This reduces the memory used by the > changeset and eliminates a possible memory leak. This is > verified by 12 fewer warnings during the devicetree unittest, > as the possible memory leak warnings about #address-cells and and...? > > Signed-off-by: Frank Rowand > --- > drivers/of/overlay.c | 38 +++++++++++++++++++++++++++++++++++--- > 1 file changed, 35 insertions(+), 3 deletions(-) > > diff --git a/drivers/of/overlay.c b/drivers/of/overlay.c > index 29c33a5c533f..e6fb3ffe9d93 100644 > --- a/drivers/of/overlay.c > +++ b/drivers/of/overlay.c > @@ -287,7 +287,12 @@ static struct property *dup_and_fixup_symbol_prop( > * @target may be either in the live devicetree or in a new subtree that > * is contained in the changeset. > * > - * Some special properties are not updated (no error returned). > + * Some special properties are not added or updated (no error returned): > + * "name", "phandle", "linux,phandle". > + * > + * Properties "#address-cells" and "#size-cells" are not updated if they > + * are already in the live tree, but if present in the live tree, the values > + * in the overlay must match the values in the live tree. Perhaps this should be generalized to apply to any property? We can't really deal with property values changing on the fly anyways. > * > * Update of property in symbols node is not allowed. > * > @@ -300,6 +305,7 @@ static int add_changeset_property(struct overlay_changeset *ovcs, > { > struct property *new_prop = NULL, *prop; > int ret = 0; > + bool check_for_non_overlay_node = false; > > if (!of_prop_cmp(overlay_prop->name, "name") || > !of_prop_cmp(overlay_prop->name, "phandle") || > @@ -322,13 +328,39 @@ static int add_changeset_property(struct overlay_changeset *ovcs, > if (!new_prop) > return -ENOMEM; > > - if (!prop) > + if (!prop) { > + Remove the extra blank lines. > + check_for_non_overlay_node = true; > ret = of_changeset_add_property(&ovcs->cset, target->np, > new_prop); > - else > + > + } else if (!of_prop_cmp(prop->name, "#address-cells")) { > + > + if (prop->length != 4 || new_prop->length != 4 || > + *(u32 *)prop->value != *(u32 *)new_prop->value) Technically these are __be32 types. This could use a helper (of_prop_val_eq). I'm not sure we really need to validate the length here as dtc does that (but yes, not everything is from dtc). > + pr_err("ERROR: overlay and/or live tree #address-cells invalid in node %pOF\n", > + target->np); > + > + } else if (!of_prop_cmp(prop->name, "#size-cells")) { > + > + if (prop->length != 4 || new_prop->length != 4 || > + *(u32 *)prop->value != *(u32 *)new_prop->value) > + pr_err("ERROR: overlay and/or live tree #size-cells invalid in node %pOF\n", > + target->np); > + > + } else { > + > + check_for_non_overlay_node = true; > ret = of_changeset_update_property(&ovcs->cset, target->np, > new_prop); > > + } > + > + if (check_for_non_overlay_node && > + !of_node_check_flag(target->np, OF_OVERLAY)) > + pr_err("WARNING: %s(), memory leak will occur if overlay removed. Property: %pOF/%s\n", > + __func__, target->np, new_prop->name); > + > if (ret) { > kfree(new_prop->name); > kfree(new_prop->value); > -- > Frank Rowand >