Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp411697imu; Wed, 12 Dec 2018 20:09:58 -0800 (PST) X-Google-Smtp-Source: AFSGD/WH60tEm+a4jvJvzMtOlrFnFgF8NOQtFUJP10HVyzeqc4Ku0te+PBYjF8C5l8D8I8dPZ3me X-Received: by 2002:a63:4b60:: with SMTP id k32mr20409370pgl.186.1544674198116; Wed, 12 Dec 2018 20:09:58 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1544674198; cv=none; d=google.com; s=arc-20160816; b=QwJCbofSHnzP7f/62EPvCEJ53BkPNDdCVEk8pLO/yGNdTMpOY5LjPxhMc7huUWXt+w 0I5o3JFGedHLMifpg5C1Opr65iDenNpBBJs/YKl9psM2a6YmySM/9Qh8k+5AqA5z7awU LUlfiXmOr+bS3XVeqLiolW0WO3BBpP3PAz05qfBOtaw3Ngg31yJfhIK8vP01p9TruNp9 w6ov9zo4WdfVpgo/wQ7LrkS6RO5ozb73lYKHSLoG6FT5t9+kOY0eOIXhndggX6I1PeWU 8mZ7CVGcdQt7Cb1TQeUJbXb+VFRljGeBKMYaS49Rkv9MoD8hP1gydlyU4PA3DBvJFlaw QDmg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from; bh=mhYGyk6R/TDEUb6K08Rn8m+Uvy5kNyyo5cfs/gOZ2Zk=; b=ddY5dS5+xcsavM4a7IgjKqTF9coRRc7gzTFW6LUcLZJ0pUNwT1xQ5RJ0YnUJb8/EU8 KdSJ2fK45A6Su9IrdWai7I5EVa0vRz+6Ym0wN/i68XimhWysDhfauWGh0StJ37ZWhFY/ 0TCWqynGXgYz5cFcItJyOVhtdIiGWmc4FlitRMv65PMwVPE7HAiBTNVNE0bht2zy1eif eOs4jt1mbRpJyr6b8yWNDk/Sqw3WUPcIIodDuO4NcJ5Vj7xjLTDRERgwL9LlOUMyNPXh fBMHkpUHUDcr/lt5XMEJj/uR70O7BVMLi2JbIjdi4Jddy5hkK5wUWqJ8mpEddOXgrXSs AgLg== 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 187si742685pfb.41.2018.12.12.20.09.20; Wed, 12 Dec 2018 20:09:58 -0800 (PST) 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726634AbeLMEGj (ORCPT + 99 others); Wed, 12 Dec 2018 23:06:39 -0500 Received: from mga05.intel.com ([192.55.52.43]:43046 "EHLO mga05.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726298AbeLMEGi (ORCPT ); Wed, 12 Dec 2018 23:06:38 -0500 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga003.jf.intel.com ([10.7.209.27]) by fmsmga105.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 12 Dec 2018 20:06:37 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.56,347,1539673200"; d="scan'208";a="109978357" Received: from mint-dev.iind.intel.com ([10.223.25.164]) by orsmga003.jf.intel.com with ESMTP; 12 Dec 2018 20:06:33 -0800 From: Ramalingam C To: intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, seanpaul@chromium.org, daniel.vetter@ffwll.ch, tomas.winkler@intel.com, uma.shankar@intel.com Cc: ville.syrjala@linux.intel.com, chris@chris-wilson.co.uk, Ramalingam C , Greg Kroah-Hartman , Kate Stewart , Thomas Gleixner , Philippe Ombredanne , linux-kernel@vger.kernel.org Subject: [PATCH v9 04/39] component: alloc component_match without any comp to match Date: Thu, 13 Dec 2018 09:31:06 +0530 Message-Id: <1544673701-6353-5-git-send-email-ramalingam.c@intel.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1544673701-6353-1-git-send-email-ramalingam.c@intel.com> References: <1544673701-6353-1-git-send-email-ramalingam.c@intel.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org If all the components associated to a component master is not added to the component framework due to the HW capability or Kconfig selection, component_match will be NULL at component_master_add_with_match(). To avoid this, component_match_alloc() is added to the framework, to allcoate the struct component_match with zero associated components. Hence component master can be added with a component_match with zero associated components. This helps the component master bind call to get triggered, even if no component is registered for that particular master. This is meant for big PCI device drivers where small/optional features are external components, and based on usecases different combination of components are build as entire driver. In such PCI device driver Load, if we use the component master for waiting for few components(features) availability, only if they are supported by the underlying HW, then we need to allocate memory for component_match using the API introduced in this change before the call to component_master_add_with_match. v2: No Change. Signed-off-by: Ramalingam C Suggested-by: Daniel Vetter Cc: Greg Kroah-Hartman Cc: Kate Stewart Cc: Thomas Gleixner Cc: Philippe Ombredanne Cc: linux-kernel@vger.kernel.org --- drivers/base/component.c | 30 ++++++++++++++++++++++++++++++ include/linux/component.h | 2 ++ 2 files changed, 32 insertions(+) diff --git a/drivers/base/component.c b/drivers/base/component.c index e8d676fad0c9..0ab36b2255ea 100644 --- a/drivers/base/component.c +++ b/drivers/base/component.c @@ -312,6 +312,36 @@ static int component_match_realloc(struct device *dev, } /* + * Allocate the match without any component_match_array elements. + * + * This function is useful when the component master might end up + * registering itself without any matching components. + */ +void component_match_alloc(struct device *master, + struct component_match **matchptr) +{ + struct component_match *match = *matchptr; + + if (IS_ERR(match)) + return; + + if (match) + return; + + match = devres_alloc(devm_component_match_release, + sizeof(*match), GFP_KERNEL); + if (!match) { + *matchptr = ERR_PTR(-ENOMEM); + return; + } + + devres_add(master, match); + + *matchptr = match; +} +EXPORT_SYMBOL(component_match_alloc); + +/* * Add a component to be matched, with a release function. * * The match array is first created or extended if necessary. diff --git a/include/linux/component.h b/include/linux/component.h index e71fbbbc74e2..3f6b420a58f8 100644 --- a/include/linux/component.h +++ b/include/linux/component.h @@ -37,6 +37,8 @@ void component_match_add_release(struct device *master, struct component_match **matchptr, void (*release)(struct device *, void *), int (*compare)(struct device *, void *), void *compare_data); +void component_match_alloc(struct device *master, + struct component_match **matchptr); static inline void component_match_add(struct device *master, struct component_match **matchptr, -- 2.7.4