Received: by 2002:ac0:a5b6:0:0:0:0:0 with SMTP id m51-v6csp1308661imm; Wed, 6 Jun 2018 13:56:39 -0700 (PDT) X-Google-Smtp-Source: ADUXVKJaM4FX1TYl7VNK8FaxBcEq78m+dZkIEthApK1vu092rIwNiqn0mkvcCMPPBxLbA0rZGXFw X-Received: by 2002:a62:1358:: with SMTP id b85-v6mr3897298pfj.238.1528318599833; Wed, 06 Jun 2018 13:56:39 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1528318599; cv=none; d=google.com; s=arc-20160816; b=l0NF1aBA0ar/LA9DPrWkcbe+JFsermtQ7YjqdY9GIew1lq7Yztddy4Y6HeAEptzeB2 VfwPUJ9snUAIqx2IjV4hamYgJeo/hCe0nYhkYEjuFNcPdpIAHksAXAgBO8MoZ1S4Gt68 gUwCtx7/rv/8t3Y6XfuyPEw+vF1fUhNCyhsCNLytMHBlQ1O+rkHcly2hlpzIdfhUtn/J bBNiQf7oti5sbo4E2sH+kD4Xv+WaVdIaCJPI8geJj2MwBk0v2XoNLgSHK/aNYjLrfWbU hp5zco4ccGpJmhCsQIwkcu30CO6j7YYFiPFxUdqGZKbRRyAfPjIKKx6ddpPL5b/9P16x Yf2w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :organization:references:in-reply-to:message-id:subject:cc:to:from :date:arc-authentication-results; bh=z0qLlONn3jj2iNc0tjDoSyxjTqronD7cQYwJBupqsnU=; b=szro0l7qkFSI4k3RNKIr1uZZ1KEI0ISIxHjEmCn7xQqj9bVrkeggX1wLOHiJQmQ0le o2lLYeuVRlsuvPMf1HCnlxVJ3XI2oPafPtSp89uuL1aoqZWw0i6CL/HbLsTIr4XWzdi0 CcwHZZKhBlfUcQK0fKiaqSVpILmrnirWbE4RO/4KkXVthJIwjSfadCL6cD1HPvTRIjKH obZZ1EhnvLKigEAatgcKMVYBtkgtMkgHw3AmdRnmOzdlYHTrj8TxNtMuXvOKyVDACvlh zGtqDLk/v/dY8u9xxXE5Ar8Rxpq7FQkl4ZssJ2+w3HGFJKGvUMRf681yL9utv7sVAVcl 6CeQ== ARC-Authentication-Results: i=1; mx.google.com; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id g10-v6si1017186pgv.315.2018.06.06.13.56.24; Wed, 06 Jun 2018 13:56:39 -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; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752517AbeFFUzE (ORCPT + 99 others); Wed, 6 Jun 2018 16:55:04 -0400 Received: from foss.arm.com ([217.140.101.70]:45086 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752074AbeFFUzD (ORCPT ); Wed, 6 Jun 2018 16:55:03 -0400 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.72.51.249]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id DA25680D; Wed, 6 Jun 2018 13:55:02 -0700 (PDT) Received: from dupont (dupont.austin.arm.com [10.118.16.87]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id CF7BA3F59D; Wed, 6 Jun 2018 13:55:01 -0700 (PDT) Date: Wed, 6 Jun 2018 15:55:01 -0500 From: Kim Phillips To: Suzuki K Poulose Cc: Greg Kroah-Hartman , Mathieu Poirier , Leo Yan , Alexander Shishkin , Alex Williamson , Andrew Morton , David Howells , Eric Auger , Eric Biederman , Gargi Sharma , Geert Uytterhoeven , Kefeng Wang , Kirill Tkhai , Mike Rapoport , Oleg Nesterov , Pavel Tatashin , Rik van Riel , Robin Murphy , Russell King , Thierry Reding , Todd Kjos , Randy Dunlap , linux-arm-kernel , Linux Kernel Mailing List Subject: Re: [PATCH v4 05/14] coresight: get/put module in coresight_build/release_path Message-Id: <20180606155501.704583e1412996a1a2c6fa61@arm.com> In-Reply-To: References: <20180605210710.22227-1-kim.phillips@arm.com> <20180605210710.22227-6-kim.phillips@arm.com> <20180606082422.GB19727@kroah.com> Organization: Arm X-Mailer: Sylpheed 3.7.0 (GTK+ 2.24.32; x86_64-pc-linux-gnu) Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Wed, 6 Jun 2018 10:46:36 +0100 Suzuki K Poulose wrote: > On 06/06/2018 09:24 AM, Greg Kroah-Hartman wrote: > > On Tue, Jun 05, 2018 at 04:07:01PM -0500, Kim Phillips wrote: > >> Increment the refcnt for driver modules in current use by calling > >> module_get in coresight_build_path and module_put in release_path. > >> > >> This prevents driver modules from being unloaded when they are in use, > >> either in sysfs or perf mode. > > > > Why does it matter? Shouldn't you be allowed to remove any module at > > any point in time, much like a networking driver? > > > > > >> > >> Cc: Mathieu Poirier > >> Cc: Leo Yan > >> Cc: Alexander Shishkin > >> Cc: Randy Dunlap > >> Cc: Suzuki K Poulose > >> Cc: Greg Kroah-Hartman > >> Cc: Russell King > >> Signed-off-by: Kim Phillips > >> --- > >> drivers/hwtracing/coresight/coresight.c | 9 +++++++++ > >> 1 file changed, 9 insertions(+) > >> > >> diff --git a/drivers/hwtracing/coresight/coresight.c b/drivers/hwtracing/coresight/coresight.c > >> index 338f1719641c..1c941351f1d1 100644 > >> --- a/drivers/hwtracing/coresight/coresight.c > >> +++ b/drivers/hwtracing/coresight/coresight.c > >> @@ -465,6 +465,12 @@ static int _coresight_build_path(struct coresight_device *csdev, > >> > >> node->csdev = csdev; > >> list_add(&node->link, path); > >> + > >> + if (!try_module_get(csdev->dev.parent->driver->owner)) { > > > > What is to keep parent->driver from going away right here? What keeps > > parent around? This feels very fragile to me, I don't see any locking > > anywhere around this code path to try to keep things in place. > > You're right. We do have coresight_mutex, which is held across the build > path and the csdev is removed when a device is unregistered. However, I > see that we don't hold the mutex while removing the connections from > coresight_unregister(). Holding the mutex should protect us from the > csdev being removed, while we build the path. OK, I'll add this for the next version: diff --git a/drivers/hwtracing/coresight/coresight-core.c b/drivers/hwtracing/coresight/coresight-core.c index f96258de1e9b..da702507a55c 100644 --- a/drivers/hwtracing/coresight/coresight-core.c +++ b/drivers/hwtracing/coresight/coresight-core.c @@ -1040,8 +1040,12 @@ EXPORT_SYMBOL_GPL(coresight_register); void coresight_unregister(struct coresight_device *csdev) { + mutex_lock(&coresight_mutex); + /* Remove references of that device in the topology */ coresight_remove_conns(csdev); device_unregister(&csdev->dev); + + mutex_unlock(&coresight_mutex); } EXPORT_SYMBOL_GPL(coresight_unregister); > And while we are at this, I also realised that we hold references to the > parent devices for each connection (via bus_find_device() from > of_coresight_get_endpoint_device()), while parsing the platform data, > which is never released. Would this fix that?: diff --git a/drivers/hwtracing/coresight/of_coresight.c b/drivers/hwtracing/coresight/of_coresight.c index a33a92ebe74b..a43ab078c85e 100644 --- a/drivers/hwtracing/coresight/of_coresight.c +++ b/drivers/hwtracing/coresight/of_coresight.c @@ -181,6 +181,8 @@ of_get_coresight_platform_data(struct device *dev, pdata->child_names[i] = dev_name(rdev); pdata->child_ports[i] = rendpoint.id; + put_device(rdev); + i++; } while (ep); } Thanks, Kim