Received: by 2002:a05:6a10:9848:0:0:0:0 with SMTP id x8csp2977931pxf; Sun, 4 Apr 2021 22:53:38 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxdfLPLK3eAbhEU6qEtQq/CJOaRe6IIcnyqQq7hKxDPtT+5SujpLHaiqMLJROE0HM+z7U7N X-Received: by 2002:a05:6638:635:: with SMTP id h21mr21767295jar.97.1617602018685; Sun, 04 Apr 2021 22:53:38 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1617602018; cv=none; d=google.com; s=arc-20160816; b=DC3ijhdQlGInBpF7aQvp4GirqXHJ58/qhY1ekdypL67brxDyXBqy6tFLj+ZP1zMshR pseARQimMZDDQj/+Xp6Jn8i4c4ekcj6VvPI1+eE4tpUDvx4ihewu3/AnPVtsWgUCVdDe KfuvLtxtNm8+nN95sjyG3Hl4b5naZlPlODSIawLSEVHlQqczQCM4EbE5DPwWTGHvqnGI JyYVIYwxVGEsHs5hRHxYPMrxEad+vfzbY8ctc4zp1qVypnC9Swv89zMq30pVANfspquV DMZgIeTcGRrm2kebgrlB2D78YulznhZk3409YDNv8X7ljvsx1lMLiSCiYeanHLueMb95 EwWA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=IkrKMFCkfHeNfo+RxRm0sDeJ+tBCRk6pE6aMVoPV+Q4=; b=DBrtYsvvKnjHOaiXmrqBG2OBtNApIODr2EIe6hOpzNV21IJzA09YW2XpIfTPAxpXzL HMSKAcZHNe3hK95oVijN96DLgaF5xXl/j9T7yUQlZlIfGs6++ripji2mXumyUI38yiRR QcI6Tdfe5k5ZFxW7jkG4WmY42IHyjX6Fss9MPb47yOjfHn5TNbmmkKXyxxdLNvkQJ6BM 74iXVXNtWU2qQoEhZRTEVSUSrnjJr3QBHt1YzHNQ9U8iGd4mWPcLtlXFwNhwjMCp5a7R CNlBeaPCuDza6+6Ik4v4iIGKKWCECpv5/ZO21Y0nP+DeIcHR1qqrfQiKm/0dbNA/qkcF kMDw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=qHFr6cbp; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 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. [23.128.96.18]) by mx.google.com with ESMTP id a11si14389841jaq.60.2021.04.04.22.53.26; Sun, 04 Apr 2021 22:53:38 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=qHFr6cbp; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 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 S232257AbhDEFuk (ORCPT + 99 others); Mon, 5 Apr 2021 01:50:40 -0400 Received: from mail.kernel.org ([198.145.29.99]:34688 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232224AbhDEFue (ORCPT ); Mon, 5 Apr 2021 01:50:34 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 9546061395; Mon, 5 Apr 2021 05:50:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1617601829; bh=OYi5oBfh+IkfxEpEvlyTxj1HUBFhA7hXBFWPylWIYsw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=qHFr6cbp8xiOxYDsxElx2f7O7Ptj8Ct/tjaxo5V/6e9cALtKZuUkVoqFEGJedk4WS Kx7up2/a2QcbAfJj1MDAKg7p6nfhS4o+sL0khFkJ75Pj0D8GvA4VSrMeA84kzxYq6+ ciUfTpG1BKIXZ9JACRrAnjgT1lEidobeE0O36OF0DFx8GkwDn2H6CJYKNoBvkV24rM YT6hHscu+FiA0fO/6aPja/Vx5sw1K7Ja6a+OXOliz1AfR8rZkE0hwV5WsvfZugBm8H 1TQjrjKBOTZZXQT+6eCpF71cbOp+gwTs7DuI79vCkT6dO6SdCTh8ksbb1ae1haUJHl q2hC/gSz/SehA== From: Leon Romanovsky To: Doug Ledford , Jason Gunthorpe Cc: Parav Pandit , "David S. Miller" , Dennis Dalessandro , Jakub Kicinski , Karsten Graul , linux-kernel@vger.kernel.org, linux-rdma@vger.kernel.org, linux-s390@vger.kernel.org, Mike Marciniszyn , netdev@vger.kernel.org, rds-devel@oss.oracle.com, Santosh Shilimkar Subject: [PATCH rdma-next 4/8] IB/core: Skip device which doesn't have necessary capabilities Date: Mon, 5 Apr 2021 08:49:56 +0300 Message-Id: <20210405055000.215792-5-leon@kernel.org> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20210405055000.215792-1-leon@kernel.org> References: <20210405055000.215792-1-leon@kernel.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Parav Pandit If device doesn't have multicast capability, avoid client registration for it. This saves 16Kbytes of memory for a RDMA device consist of 128 ports. If device doesn't support subnet administration, avoid client registration for it. This saves 8Kbytes of memory for a RDMA device consist of 128 ports. Signed-off-by: Parav Pandit Signed-off-by: Leon Romanovsky --- drivers/infiniband/core/multicast.c | 15 ++++++++++++++- drivers/infiniband/core/sa_query.c | 15 ++++++++++++++- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/drivers/infiniband/core/multicast.c b/drivers/infiniband/core/multicast.c index a5dd4b7a74bc..8c81acc24e3e 100644 --- a/drivers/infiniband/core/multicast.c +++ b/drivers/infiniband/core/multicast.c @@ -44,11 +44,13 @@ static int mcast_add_one(struct ib_device *device); static void mcast_remove_one(struct ib_device *device, void *client_data); +static bool mcast_client_supported(struct ib_device *device); static struct ib_client mcast_client = { .name = "ib_multicast", .add = mcast_add_one, - .remove = mcast_remove_one + .remove = mcast_remove_one, + .is_supported = mcast_client_supported, }; static struct ib_sa_client sa_client; @@ -816,6 +818,17 @@ static void mcast_event_handler(struct ib_event_handler *handler, } } +static bool mcast_client_supported(struct ib_device *device) +{ + u32 i; + + rdma_for_each_port(device, i) { + if (rdma_cap_ib_mcast(device, i)) + return true; + } + return false; +} + static int mcast_add_one(struct ib_device *device) { struct mcast_device *dev; diff --git a/drivers/infiniband/core/sa_query.c b/drivers/infiniband/core/sa_query.c index 9a4a49c37922..7e00e24d9423 100644 --- a/drivers/infiniband/core/sa_query.c +++ b/drivers/infiniband/core/sa_query.c @@ -176,11 +176,13 @@ static const struct nla_policy ib_nl_policy[LS_NLA_TYPE_MAX] = { static int ib_sa_add_one(struct ib_device *device); static void ib_sa_remove_one(struct ib_device *device, void *client_data); +static bool ib_sa_client_supported(struct ib_device *device); static struct ib_client sa_client = { .name = "sa", .add = ib_sa_add_one, - .remove = ib_sa_remove_one + .remove = ib_sa_remove_one, + .is_supported = ib_sa_client_supported, }; static DEFINE_XARRAY_FLAGS(queries, XA_FLAGS_ALLOC | XA_FLAGS_LOCK_IRQ); @@ -2293,6 +2295,17 @@ static void ib_sa_event(struct ib_event_handler *handler, } } +static bool ib_sa_client_supported(struct ib_device *device) +{ + unsigned int i; + + rdma_for_each_port(device, i) { + if (rdma_cap_ib_sa(device, i)) + return true; + } + return false; +} + static int ib_sa_add_one(struct ib_device *device) { struct ib_sa_device *sa_dev; -- 2.30.2