From patchwork Thu Jan 14 18:58:00 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mathieu Poirier X-Patchwork-Id: 8035031 Return-Path: X-Original-To: patchwork-linux-arm@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork1.web.kernel.org (Postfix) with ESMTP id 418E69F88A for ; Thu, 14 Jan 2016 19:01:01 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 77245203C1 for ; Thu, 14 Jan 2016 19:01:00 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.9]) (using TLSv1.2 with cipher AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id A1420203DF for ; Thu, 14 Jan 2016 19:00:59 +0000 (UTC) Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.80.1 #2 (Red Hat Linux)) id 1aJn7S-00039R-NX; Thu, 14 Jan 2016 18:59:38 +0000 Received: from mail-pa0-x22f.google.com ([2607:f8b0:400e:c03::22f]) by bombadil.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1aJn6d-0002au-Pd for linux-arm-kernel@lists.infradead.org; Thu, 14 Jan 2016 18:58:49 +0000 Received: by mail-pa0-x22f.google.com with SMTP id cy9so381225643pac.0 for ; Thu, 14 Jan 2016 10:58:27 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=vIspG+jybIRhwMZWWbYbIvfuYBlawUQRnPLAG/C+KKU=; b=QkeiTAw7tac+7s2to34zhr+V3qm1DKR75OZVM92JScRhcMjoTFBRAgdX6atgeGZLal s1n8vaGArHyNHBFqvkOPH1PmcVoAWxPJNI9KuqeLCthn+Nv92wBJEEqYZCOeIE8tngcE DVfnvkbOHsbV9Q7N7NC8PDzBxLluv1Slrl2Iw= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=vIspG+jybIRhwMZWWbYbIvfuYBlawUQRnPLAG/C+KKU=; b=NUwS3OJ+mT7cPRLDMBlly5eRXnqANHw0LUZu6O/xlpdqJ84wGW9IZLzgoISo+QOYB9 9bhX2bRAHzyVlwSkjC6CxGfLPa7MgJQjoM7IPjKcXucqezNFnmDXny/oyzpVSgayTJKs SMKCV+TswLXM38t1X/GWpdWTSOWuErbDM0/zpSIMVdyNitsO7opfu2VTqizSz4Ac+wR+ v/27YUpxBdtXmVA2mmMVhJdQf2of5G2pwEmCx7kBOwAKU9n4GjMsmFTu800kAE/ZraPc GVVstVBnwcjZFESKgf+5JrskBo5HCU69n1f3LtthWlBRdQneGAeuekM6Cw8NG20Nqzmi XOOw== X-Gm-Message-State: ALoCoQmPSBKtnzyAE+mW7323oHQ0R7Ob8bOo4W06RhcnCEynKx0SGPd9w0WF4ROvg6exYCBXxM1Ztk6Ka4PLrjcKQ6NyAPi0jA== X-Received: by 10.66.164.196 with SMTP id ys4mr8330723pab.119.1452797907138; Thu, 14 Jan 2016 10:58:27 -0800 (PST) Received: from t430.cg.shawcable.net ([184.64.168.246]) by smtp.gmail.com with ESMTPSA id p87sm10854256pfi.94.2016.01.14.10.58.26 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Thu, 14 Jan 2016 10:58:26 -0800 (PST) From: Mathieu Poirier To: linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH 5/5] coresight: remove csdev's link from topology Date: Thu, 14 Jan 2016 11:58:00 -0700 Message-Id: <1452797880-4365-6-git-send-email-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.1.4 In-Reply-To: <1452797880-4365-1-git-send-email-mathieu.poirier@linaro.org> References: <1452797880-4365-1-git-send-email-mathieu.poirier@linaro.org> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20160114_105848_173920_657CD284 X-CRM114-Status: GOOD ( 14.81 ) X-Spam-Score: -2.7 (--) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Mathieu Poirier MIME-Version: 1.0 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Spam-Status: No, score=-4.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_MED,RP_MATCHES_RCVD,T_DKIM_INVALID,UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP In function 'coresight_unregister()', all references to the csdev that is being taken away need to be removed from the topology. Otherwise building the next coresight path from source to sink may use memory that has been released. Signed-off-by: Mathieu Poirier --- drivers/hwtracing/coresight/coresight.c | 46 +++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/drivers/hwtracing/coresight/coresight.c b/drivers/hwtracing/coresight/coresight.c index a35ca54a76c9..7e6e9ff27dd1 100644 --- a/drivers/hwtracing/coresight/coresight.c +++ b/drivers/hwtracing/coresight/coresight.c @@ -579,6 +579,50 @@ static void coresight_fixup_device_conns(struct coresight_device *csdev) } } +static int coresight_remove_match(struct device *dev, void *data) +{ + int i; + struct coresight_device *csdev, *iterator; + struct coresight_connection *conn; + + csdev = data; + iterator = to_coresight_device(dev); + + /* No need to check oneself */ + if (csdev == iterator) + return 0; + + /* + * Circle throuch all the connection of that component. If we find + * a connection whose name matches @csdev, remove it. + */ + for (i = 0; i < iterator->nr_outport; i++) { + conn = &iterator->conns[i]; + + if (conn->child_dev == NULL) + continue; + + if (!strcmp(dev_name(&csdev->dev), conn->child_name)) { + iterator->orphan = true; + conn->child_dev = NULL; + /* No need to continue */ + break; + } + } + + /* + * Returning '0' ensures that all known component on the + * bus will be checked. + */ + return 0; +} + +static void coresight_remove_conns(struct coresight_device *csdev) +{ + bus_for_each_dev(&coresight_bustype, NULL, + csdev, coresight_remove_match); +} + /** * coresight_timeout - loop until a bit has changed to a specific state. * @addr: base address of the area of interest. @@ -717,6 +761,8 @@ EXPORT_SYMBOL_GPL(coresight_register); void coresight_unregister(struct coresight_device *csdev) { + /* Remove references of that device in the topology */ + coresight_remove_conns(csdev); device_unregister(&csdev->dev); } EXPORT_SYMBOL_GPL(coresight_unregister);