From patchwork Fri Feb 10 10:01:25 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jiri Pirko X-Patchwork-Id: 13135631 X-Patchwork-Delegate: kuba@kernel.org Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 15229C05027 for ; Fri, 10 Feb 2023 10:01:42 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231925AbjBJKBk (ORCPT ); Fri, 10 Feb 2023 05:01:40 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52324 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231946AbjBJKBh (ORCPT ); Fri, 10 Feb 2023 05:01:37 -0500 Received: from mail-ed1-x52c.google.com (mail-ed1-x52c.google.com [IPv6:2a00:1450:4864:20::52c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id F08812A9BF for ; Fri, 10 Feb 2023 02:01:35 -0800 (PST) Received: by mail-ed1-x52c.google.com with SMTP id fj20so4320230edb.1 for ; Fri, 10 Feb 2023 02:01:35 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=resnulli-us.20210112.gappssmtp.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=ugEBnDmWs5ehTIeO1DDJDyYOLmcj06gUkAdvMGOnbkc=; b=DDXGaBpORo3WguMtMB5oiaCHLoggv5ZoaZmqXFahHj/Ezt1L+YPkZg1dGCjz50gtik VkJk8Bb/KRhUGUCbP0Fegm6wbHJquaBTaaXCIt4DRxd84VnpOHgJXPs2WTNWmn1i/4x5 XOQ3WZNtXsb92EPbGZLc00Oil106SkCL/Lk+hLyuFuz1n9qnYp7jSmpiXUCvyiIV7nGI /M3Xo+Cax+qDivAgjNltjZE9D+/6PdPjxX43NP0EfF05UGqBQcKCtJWE6nZ2gBOzcRhW izg7fhOnIy4GMfs7cTFr3/B1XxKZ8aJznxxaQsuKYwXDNB18gDYj/9JIB1AjtUjwfmDg l/7g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ugEBnDmWs5ehTIeO1DDJDyYOLmcj06gUkAdvMGOnbkc=; b=xIc1x8ZwUuktoKb2i8fJYwijTeD4BYPlVHBt1VR7gzXB+f8TraXN9zr9PduVWJMiG3 RKUgjI5dS3mRqvkPRrN7iBZ0fpfDwl3B66r2BsUmfdsYVWJpf25AQ9jGwCPlREUy29Ix yziqDhueHJJGkjVswUnqZ6THJ+Z8DoUbcAcFYV+5bY8uhPzY9xKN4dxcUh4UZyVESMUC 9Vz3UCs81ZudDWMgcJyqfBE58skbpqZdHOZM+CkdyZykF+IAvFjz/6Xuhq/jX0KIIk2D 4AtheTvYvYMMMhMsN9lEd4nwifOiyr1GOlxOLyhDLrmHgJrzjVz/h5/p++aSusO5htNe mVUg== X-Gm-Message-State: AO0yUKVkKrTweBs42jDz21yfTpXZG6qRoNBsCpDT7E7bcX0LDuph3zjN p3ZePtujLUiOz+0xwx3cqp/ogz6dkJVX7RiAAyQ= X-Google-Smtp-Source: AK7set/gEgCM52e9lLt8heXeAy3oEdKybf0u4xq5CyRDV07nhgXhysJF4XBqyb4y7GNioZFCwc4CXg== X-Received: by 2002:a50:d781:0:b0:4ac:89b:b605 with SMTP id w1-20020a50d781000000b004ac089bb605mr185153edi.22.1676023294623; Fri, 10 Feb 2023 02:01:34 -0800 (PST) Received: from localhost (host-213-179-129-39.customer.m-online.net. [213.179.129.39]) by smtp.gmail.com with ESMTPSA id r23-20020a50aad7000000b0049f29a7c0d6sm1982141edc.34.2023.02.10.02.01.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 10 Feb 2023 02:01:34 -0800 (PST) From: Jiri Pirko To: netdev@vger.kernel.org Cc: davem@davemloft.net, kuba@kernel.org, pabeni@redhat.com, edumazet@google.com, tariqt@nvidia.com, saeedm@nvidia.com, jacob.e.keller@intel.com, gal@nvidia.com, kim.phillips@amd.com, moshe@nvidia.com, simon.horman@corigine.com, idosch@nvidia.com Subject: [patch net-next v2 1/7] devlink: don't use strcpy() to copy param value Date: Fri, 10 Feb 2023 11:01:25 +0100 Message-Id: <20230210100131.3088240-2-jiri@resnulli.us> X-Mailer: git-send-email 2.39.0 In-Reply-To: <20230210100131.3088240-1-jiri@resnulli.us> References: <20230210100131.3088240-1-jiri@resnulli.us> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org From: Jiri Pirko No need to treat string params any different comparing to other types. Rely on the struct assign to copy the whole struct, including the string. Signed-off-by: Jiri Pirko Reviewed-by: Simon Horman Acked-by: Jakub Kicinski Reviewed-by: Jacob Keller --- net/devlink/leftover.c | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/net/devlink/leftover.c b/net/devlink/leftover.c index f05ab093d231..f2f6a2f42864 100644 --- a/net/devlink/leftover.c +++ b/net/devlink/leftover.c @@ -4388,10 +4388,7 @@ static int __devlink_nl_cmd_param_set_doit(struct devlink *devlink, return -EOPNOTSUPP; if (cmode == DEVLINK_PARAM_CMODE_DRIVERINIT) { - if (param->type == DEVLINK_PARAM_TYPE_STRING) - strcpy(param_item->driverinit_value.vstr, value.vstr); - else - param_item->driverinit_value = value; + param_item->driverinit_value = value; param_item->driverinit_value_valid = true; } else { if (!param->set) @@ -9656,10 +9653,7 @@ int devl_param_driverinit_value_get(struct devlink *devlink, u32 param_id, DEVLINK_PARAM_CMODE_DRIVERINIT))) return -EOPNOTSUPP; - if (param_item->param->type == DEVLINK_PARAM_TYPE_STRING) - strcpy(init_val->vstr, param_item->driverinit_value.vstr); - else - *init_val = param_item->driverinit_value; + *init_val = param_item->driverinit_value; return 0; } @@ -9690,10 +9684,7 @@ void devl_param_driverinit_value_set(struct devlink *devlink, u32 param_id, DEVLINK_PARAM_CMODE_DRIVERINIT))) return; - if (param_item->param->type == DEVLINK_PARAM_TYPE_STRING) - strcpy(param_item->driverinit_value.vstr, init_val.vstr); - else - param_item->driverinit_value = init_val; + param_item->driverinit_value = init_val; param_item->driverinit_value_valid = true; devlink_param_notify(devlink, 0, param_item, DEVLINK_CMD_PARAM_NEW); From patchwork Fri Feb 10 10:01:26 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jiri Pirko X-Patchwork-Id: 13135632 X-Patchwork-Delegate: kuba@kernel.org Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5A397C05027 for ; Fri, 10 Feb 2023 10:01:54 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231860AbjBJKBw (ORCPT ); Fri, 10 Feb 2023 05:01:52 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52268 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231705AbjBJKBj (ORCPT ); Fri, 10 Feb 2023 05:01:39 -0500 Received: from mail-ej1-x635.google.com (mail-ej1-x635.google.com [IPv6:2a00:1450:4864:20::635]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B50DA7AE06 for ; Fri, 10 Feb 2023 02:01:37 -0800 (PST) Received: by mail-ej1-x635.google.com with SMTP id ml19so14522594ejb.0 for ; Fri, 10 Feb 2023 02:01:37 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=resnulli-us.20210112.gappssmtp.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Doql15jQLxXBeQxIQBXCXHixNnLBHAXs+GbIOZ8EpOE=; b=QmRDGlKXdLwXXKTolFjZjUQEjqxeSk1Y855xVaxqAgoi4vFEkYGOZlunM0DamRgKkI X4XXIrp9okVbnWIV2ld6kvnE0xWauKpdrxH0Gqm6W+chQupUIqiS77idzok7QtgcTYmW sXvgTCwjeo4dJLhZWnwn6WEmxEoalFLOetigm2N3nB8mV/BJEh3J2NQ2pimSEpyE21Mb iwMH87+wbYVTe0gbR9+eCJMl16lCuFo0EuqmmhVOSz+FLBH4afTKm04E9x7U7V3DKx+g XjAwnaL+yYh3sy9FUfGL3U25mHmf/L91nCFGJ9anTapNm/Oeh7nik90d+euFWDW2L8WE 5CGA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Doql15jQLxXBeQxIQBXCXHixNnLBHAXs+GbIOZ8EpOE=; b=fTklBIHDi4dTVhdUQ4Pp03Ps4Owf56dr9arutaxIIA4gE8wIz0fpibB4Q1qvIzlcp4 JE2nMkBHD/ESDaXLMS3Qa5tL/ItUuuvGjyxP8jkAgE1+B0/F5pr5w7sc6lCl7tk99MJJ QwSRGm2Dwohi3PVrFj/DjNjOLJ9oAxiZZOH05UUiG4+LH7W7sCjfu0jjmDDqHsAvVgsP M4enwftjWnj9RlCex6EEjRzf/34nYA+Fp6fgurBxJKnL9f6zCuMxsz0uBEejZ9QIrcmW yfv19FhqhUiIbZ8R522ratB7P5KQZqh3WtixKrGT8qptZ12sp2KAcGy80N6crCyb4oa/ TaWw== X-Gm-Message-State: AO0yUKViVgEx5ZEizrz+TIt1KglgYXsFG/YeMGTk0Kjq6oVYumpGQGB6 s3ZZcPj0DX2RriXJcCqaj1AxqM5X0VatjXeoVJw= X-Google-Smtp-Source: AK7set+xHwLuLET1Gn/NYX2JqSQ9png4CVapRv+ZS697Oyx6G9TARu0ze8NoKpfDZQbxG61jNiXc2g== X-Received: by 2002:a17:907:d2a:b0:8af:3922:ace6 with SMTP id gn42-20020a1709070d2a00b008af3922ace6mr7616431ejc.40.1676023296197; Fri, 10 Feb 2023 02:01:36 -0800 (PST) Received: from localhost (host-213-179-129-39.customer.m-online.net. [213.179.129.39]) by smtp.gmail.com with ESMTPSA id qq8-20020a17090720c800b0088e7fe75736sm2153425ejb.1.2023.02.10.02.01.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 10 Feb 2023 02:01:35 -0800 (PST) From: Jiri Pirko To: netdev@vger.kernel.org Cc: davem@davemloft.net, kuba@kernel.org, pabeni@redhat.com, edumazet@google.com, tariqt@nvidia.com, saeedm@nvidia.com, jacob.e.keller@intel.com, gal@nvidia.com, kim.phillips@amd.com, moshe@nvidia.com, simon.horman@corigine.com, idosch@nvidia.com Subject: [patch net-next v2 2/7] devlink: make sure driver does not read updated driverinit param before reload Date: Fri, 10 Feb 2023 11:01:26 +0100 Message-Id: <20230210100131.3088240-3-jiri@resnulli.us> X-Mailer: git-send-email 2.39.0 In-Reply-To: <20230210100131.3088240-1-jiri@resnulli.us> References: <20230210100131.3088240-1-jiri@resnulli.us> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org From: Jiri Pirko The driverinit param purpose is to serve the driver during init/reload time to provide a value, either default or set by user. Make sure that driver does not read value updated by user before the reload is performed. Hold the new value in a separate struct and switch it during reload. Note that this is required to be eventually possible to call devl_param_driverinit_value_get() without holding instance lock. Signed-off-by: Jiri Pirko Reviewed-by: Simon Horman --- v1->v2: - extended patch description with a note - call driverinit_load_new only if action is REINIT --- include/net/devlink.h | 4 ++++ net/devlink/dev.c | 3 +++ net/devlink/devl_internal.h | 3 +++ net/devlink/leftover.c | 26 ++++++++++++++++++++++---- 4 files changed, 32 insertions(+), 4 deletions(-) diff --git a/include/net/devlink.h b/include/net/devlink.h index 2e85a5970a32..8ed960345f37 100644 --- a/include/net/devlink.h +++ b/include/net/devlink.h @@ -489,6 +489,10 @@ struct devlink_param_item { const struct devlink_param *param; union devlink_param_value driverinit_value; bool driverinit_value_valid; + union devlink_param_value driverinit_value_new; /* Not reachable + * until reload. + */ + bool driverinit_value_new_valid; }; enum devlink_param_generic_id { diff --git a/net/devlink/dev.c b/net/devlink/dev.c index 78d824eda5ec..f995d88b9d04 100644 --- a/net/devlink/dev.c +++ b/net/devlink/dev.c @@ -369,6 +369,9 @@ int devlink_reload(struct devlink *devlink, struct net *dest_net, if (dest_net && !net_eq(dest_net, curr_net)) devlink_reload_netns_change(devlink, curr_net, dest_net); + if (action == DEVLINK_RELOAD_ACTION_DRIVER_REINIT) + devlink_params_driverinit_load_new(devlink); + err = devlink->ops->reload_up(devlink, action, limit, actions_performed, extack); devlink_reload_failed_set(devlink, !!err); if (err) diff --git a/net/devlink/devl_internal.h b/net/devlink/devl_internal.h index 941174e157d4..5c117e8d4377 100644 --- a/net/devlink/devl_internal.h +++ b/net/devlink/devl_internal.h @@ -189,6 +189,9 @@ static inline bool devlink_reload_supported(const struct devlink_ops *ops) return ops->reload_down && ops->reload_up; } +/* Params */ +void devlink_params_driverinit_load_new(struct devlink *devlink); + /* Resources */ struct devlink_resource; int devlink_resources_validate(struct devlink *devlink, diff --git a/net/devlink/leftover.c b/net/devlink/leftover.c index f2f6a2f42864..61e59556ea03 100644 --- a/net/devlink/leftover.c +++ b/net/devlink/leftover.c @@ -4098,9 +4098,12 @@ static int devlink_nl_param_fill(struct sk_buff *msg, struct devlink *devlink, if (!devlink_param_cmode_is_supported(param, i)) continue; if (i == DEVLINK_PARAM_CMODE_DRIVERINIT) { - if (!param_item->driverinit_value_valid) + if (param_item->driverinit_value_new_valid) + param_value[i] = param_item->driverinit_value_new; + else if (param_item->driverinit_value_valid) + param_value[i] = param_item->driverinit_value; + else return -EOPNOTSUPP; - param_value[i] = param_item->driverinit_value; } else { ctx.cmode = i; err = devlink_param_get(devlink, param, &ctx); @@ -4388,8 +4391,8 @@ static int __devlink_nl_cmd_param_set_doit(struct devlink *devlink, return -EOPNOTSUPP; if (cmode == DEVLINK_PARAM_CMODE_DRIVERINIT) { - param_item->driverinit_value = value; - param_item->driverinit_value_valid = true; + param_item->driverinit_value_new = value; + param_item->driverinit_value_new_valid = true; } else { if (!param->set) return -EOPNOTSUPP; @@ -9691,6 +9694,21 @@ void devl_param_driverinit_value_set(struct devlink *devlink, u32 param_id, } EXPORT_SYMBOL_GPL(devl_param_driverinit_value_set); +void devlink_params_driverinit_load_new(struct devlink *devlink) +{ + struct devlink_param_item *param_item; + + list_for_each_entry(param_item, &devlink->param_list, list) { + if (!devlink_param_cmode_is_supported(param_item->param, + DEVLINK_PARAM_CMODE_DRIVERINIT) || + !param_item->driverinit_value_new_valid) + continue; + param_item->driverinit_value = param_item->driverinit_value_new; + param_item->driverinit_value_valid = true; + param_item->driverinit_value_new_valid = false; + } +} + /** * devl_param_value_changed - notify devlink on a parameter's value * change. Should be called by the driver From patchwork Fri Feb 10 10:01:27 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jiri Pirko X-Patchwork-Id: 13135633 X-Patchwork-Delegate: kuba@kernel.org Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id B0BBBC636CD for ; Fri, 10 Feb 2023 10:01:58 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231972AbjBJKB4 (ORCPT ); Fri, 10 Feb 2023 05:01:56 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52682 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231924AbjBJKBk (ORCPT ); Fri, 10 Feb 2023 05:01:40 -0500 Received: from mail-ej1-x62f.google.com (mail-ej1-x62f.google.com [IPv6:2a00:1450:4864:20::62f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 455CB7AE09 for ; Fri, 10 Feb 2023 02:01:39 -0800 (PST) Received: by mail-ej1-x62f.google.com with SMTP id c26so9578001ejz.10 for ; Fri, 10 Feb 2023 02:01:39 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=resnulli-us.20210112.gappssmtp.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=XpjOo4lHR2rZDTWwmoSXeMhFODr1URFgGK3G2GVEA5U=; b=X2TPt58DTlknF3z+a45it7omO038a0GLlFAiGSnKTA7L4xZFv7RCuOMux88YGFwwQJ 0/ZCs4NvBsJnZ022QtPHiJjULJFpUgUtqxvdw+L/2AZ+rca75mfuQYBRcWoep36Ea3yl BKGCk8oAFAYe/kuX64J6ORrymN9+TSyBJ2etSi+oqniMLOoMe2BsVKLJ423TWmknMHrT ED0oPKUO5j8TAOSQBUrwv6OnA76ZbDVQlfy4Sn0wSudPpJJxdQwbG6lQTT630Rnmwol4 LTF9JLiEoO2UTAQ3aBZFOreSI/upPDijy+3iIbj1e/z+0Ap7lJg07QWg80oW/1XnnO6T 77kA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=XpjOo4lHR2rZDTWwmoSXeMhFODr1URFgGK3G2GVEA5U=; b=1pJOjd1us9aqsKuEBkWqNd7zranAVjp0HJvELFuHNVVfmz3uwTHub0ZNO5fzg5QpY1 eUBLQATpUkCIQNRyKFF3KOPtXOH14JzAwIs54adA1z5W/xc7Cua7UEXJtNpBzAzFKjnf H8YDUdspXosiXBPiMLEk7kAgIp/59GpJjj9aBHmtgO2wnKFfyHRkI5VhHrioenbFFGX6 +BEmPpz5M7tRF3ATZ1fPgGhG1TOZy8muWd9kotkPr81MKrHiER7N4TdzbX0i64xjljiH w6NXvVyiXvbsWQ6Q63ZRO38Gj+izbJccJtQoKnICSdgUpZQIFaRP2XbVG0ky7ulxsGMr vZhg== X-Gm-Message-State: AO0yUKWkitYgvHtSBZ332zHZ0VAvrOk8u8nO2CvA8BE7FTEcIZlsgcrp 1BZD3pddtf84N6ailHQ1L36NYVx7jAq2VSRaKuA= X-Google-Smtp-Source: AK7set9Gob2i07qP+eu4ekGZPeBszD+985q87aGK/12JiQV2J8umq4j/PxaoKuEpuWy8IBxadlldXA== X-Received: by 2002:a17:907:94ca:b0:8aa:be1a:c4bf with SMTP id dn10-20020a17090794ca00b008aabe1ac4bfmr17456758ejc.16.1676023297843; Fri, 10 Feb 2023 02:01:37 -0800 (PST) Received: from localhost (host-213-179-129-39.customer.m-online.net. [213.179.129.39]) by smtp.gmail.com with ESMTPSA id e26-20020a170906081a00b008786675d086sm2165681ejd.29.2023.02.10.02.01.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 10 Feb 2023 02:01:37 -0800 (PST) From: Jiri Pirko To: netdev@vger.kernel.org Cc: davem@davemloft.net, kuba@kernel.org, pabeni@redhat.com, edumazet@google.com, tariqt@nvidia.com, saeedm@nvidia.com, jacob.e.keller@intel.com, gal@nvidia.com, kim.phillips@amd.com, moshe@nvidia.com, simon.horman@corigine.com, idosch@nvidia.com Subject: [patch net-next v2 3/7] devlink: fix the name of value arg of devl_param_driverinit_value_get() Date: Fri, 10 Feb 2023 11:01:27 +0100 Message-Id: <20230210100131.3088240-4-jiri@resnulli.us> X-Mailer: git-send-email 2.39.0 In-Reply-To: <20230210100131.3088240-1-jiri@resnulli.us> References: <20230210100131.3088240-1-jiri@resnulli.us> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org From: Jiri Pirko Probably due to copy-paste error, the name of the arg is "init_val" which is misleading, as the pointer is used to point to struct where to store the current value. Rename it to "val" and change the arg comment a bit on the way. Signed-off-by: Jiri Pirko Reviewed-by: Simon Horman Acked-by: Jakub Kicinski Reviewed-by: Jacob Keller --- include/net/devlink.h | 2 +- net/devlink/leftover.c | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/include/net/devlink.h b/include/net/devlink.h index 8ed960345f37..6a942e70e451 100644 --- a/include/net/devlink.h +++ b/include/net/devlink.h @@ -1784,7 +1784,7 @@ void devlink_params_unregister(struct devlink *devlink, const struct devlink_param *params, size_t params_count); int devl_param_driverinit_value_get(struct devlink *devlink, u32 param_id, - union devlink_param_value *init_val); + union devlink_param_value *val); void devl_param_driverinit_value_set(struct devlink *devlink, u32 param_id, union devlink_param_value init_val); void devl_param_value_changed(struct devlink *devlink, u32 param_id); diff --git a/net/devlink/leftover.c b/net/devlink/leftover.c index 61e59556ea03..dab7326dc3ea 100644 --- a/net/devlink/leftover.c +++ b/net/devlink/leftover.c @@ -9630,13 +9630,14 @@ EXPORT_SYMBOL_GPL(devlink_params_unregister); * * @devlink: devlink * @param_id: parameter ID - * @init_val: value of parameter in driverinit configuration mode + * @val: pointer to store the value of parameter in driverinit + * configuration mode * * This function should be used by the driver to get driverinit * configuration for initialization after reload command. */ int devl_param_driverinit_value_get(struct devlink *devlink, u32 param_id, - union devlink_param_value *init_val) + union devlink_param_value *val) { struct devlink_param_item *param_item; @@ -9656,7 +9657,7 @@ int devl_param_driverinit_value_get(struct devlink *devlink, u32 param_id, DEVLINK_PARAM_CMODE_DRIVERINIT))) return -EOPNOTSUPP; - *init_val = param_item->driverinit_value; + *val = param_item->driverinit_value; return 0; } From patchwork Fri Feb 10 10:01:28 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jiri Pirko X-Patchwork-Id: 13135634 X-Patchwork-Delegate: kuba@kernel.org Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 59BC3C636CD for ; Fri, 10 Feb 2023 10:02:15 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231994AbjBJKCK (ORCPT ); Fri, 10 Feb 2023 05:02:10 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52682 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231887AbjBJKBy (ORCPT ); Fri, 10 Feb 2023 05:01:54 -0500 Received: from mail-wm1-x334.google.com (mail-wm1-x334.google.com [IPv6:2a00:1450:4864:20::334]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 06AAF7B15A for ; Fri, 10 Feb 2023 02:01:41 -0800 (PST) Received: by mail-wm1-x334.google.com with SMTP id l37-20020a05600c1d2500b003dfe46a9801so3679126wms.0 for ; Fri, 10 Feb 2023 02:01:40 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=resnulli-us.20210112.gappssmtp.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=HUKS7mtXommS44bxzLAEdjwFuxfpnShx9VDHU/6OlOk=; b=KgSY/LXQE7/tWmX7k5hkKUluWstqRmtQ1ro8XCpruZlp5uL2HdPQifeyqcO3pGTV2V oKzTPdOWlP9f5v8FA4hEwt5XZRElLbp8ZswKz8ady074S6sQ8wDd8UnwPvQT6i+l7sTB f9FduzxymWOg1jNqm1Wr1cmCzVcuYdCZAiF4B0TKHfWmq1u2RPaE+aqLiLESmhGZwDQ8 r87sxOzAMSaVpXyStnVTeQDp/m3ubpf/4m6g4JmljIWzKIyHqp2Ggb/hYQ4fGhfB3yBB beXfvf3Hrt0xT+S4RlVfmdR+0JpqC5B5s6blr1JiSJwCVtkVszOpnJJXgUmdvLYaPbFN auUg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=HUKS7mtXommS44bxzLAEdjwFuxfpnShx9VDHU/6OlOk=; b=juDChM4RYxWVBbshK3g2FcNDTkRwfJTK6YULCtOJn4LRWrXv7hz6xfLfLxGZW3Sv2u JLHDk0yZW6j834SLMXUZS0AzOMrpWHlRnScCATFj63ws7iA/F8T57Nu4wXusxAHpRUmQ fHBgWUplaknYnDkmhDHs4lDb1pSIHTTGk20jxcnSA2XoZsbtYgE0qshV9elJug6ZwhRl x9ldRPzjOzRrNwOup0pE5S2D3JHdN1FTuvM0coKq8OQ467fGF69QsUZT9hkKWp4idbHQ KULDz2/KvN7wrPhevvWdacrhwIt9FtzA1/Aj90jmy7InlmPWzfXQJXUHXgdg2M4izges 9uOg== X-Gm-Message-State: AO0yUKUt1trJSgM1ybESdfTt3EFStb+uBCLdeal+uS9weF0AhQudZCq7 3jr++I9h7c5zH8lwz1SBQxMDqgOzlb70DQwK3aI= X-Google-Smtp-Source: AK7set8Fh07D8S2qHGBgDZvFrxw+XKlutFi6+nB4XhLJ8KTwyD0wuHhxC8QREdhOa2kv09MEyt5BQw== X-Received: by 2002:a05:600c:32a7:b0:3dd:e86e:8805 with SMTP id t39-20020a05600c32a700b003dde86e8805mr12545403wmp.5.1676023299446; Fri, 10 Feb 2023 02:01:39 -0800 (PST) Received: from localhost (host-213-179-129-39.customer.m-online.net. [213.179.129.39]) by smtp.gmail.com with ESMTPSA id l4-20020a7bc444000000b003d9fba3c7a4sm7094457wmi.16.2023.02.10.02.01.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 10 Feb 2023 02:01:38 -0800 (PST) From: Jiri Pirko To: netdev@vger.kernel.org Cc: davem@davemloft.net, kuba@kernel.org, pabeni@redhat.com, edumazet@google.com, tariqt@nvidia.com, saeedm@nvidia.com, jacob.e.keller@intel.com, gal@nvidia.com, kim.phillips@amd.com, moshe@nvidia.com, simon.horman@corigine.com, idosch@nvidia.com Subject: [patch net-next v2 4/7] devlink: use xa_for_each_start() helper in devlink_nl_cmd_port_get_dump_one() Date: Fri, 10 Feb 2023 11:01:28 +0100 Message-Id: <20230210100131.3088240-5-jiri@resnulli.us> X-Mailer: git-send-email 2.39.0 In-Reply-To: <20230210100131.3088240-1-jiri@resnulli.us> References: <20230210100131.3088240-1-jiri@resnulli.us> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org From: Jiri Pirko As xarray has an iterator helper that allows to start from specified index, use this directly and avoid repeated iteration from 0. Signed-off-by: Jiri Pirko Reviewed-by: Simon Horman Acked-by: Jakub Kicinski Reviewed-by: Jacob Keller --- net/devlink/leftover.c | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/net/devlink/leftover.c b/net/devlink/leftover.c index dab7326dc3ea..c7d9ef832c8c 100644 --- a/net/devlink/leftover.c +++ b/net/devlink/leftover.c @@ -1111,24 +1111,18 @@ devlink_nl_cmd_port_get_dump_one(struct sk_buff *msg, struct devlink *devlink, struct devlink_nl_dump_state *state = devlink_dump_state(cb); struct devlink_port *devlink_port; unsigned long port_index; - int idx = 0; int err = 0; - xa_for_each(&devlink->ports, port_index, devlink_port) { - if (idx < state->idx) { - idx++; - continue; - } + xa_for_each_start(&devlink->ports, port_index, devlink_port, state->idx) { err = devlink_nl_port_fill(msg, devlink_port, DEVLINK_CMD_NEW, NETLINK_CB(cb->skb).portid, cb->nlh->nlmsg_seq, NLM_F_MULTI, cb->extack); if (err) { - state->idx = idx; + state->idx = port_index; break; } - idx++; } return err; From patchwork Fri Feb 10 10:01:29 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jiri Pirko X-Patchwork-Id: 13135637 X-Patchwork-Delegate: kuba@kernel.org Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 395ABC636CD for ; Fri, 10 Feb 2023 10:02:22 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231910AbjBJKCT (ORCPT ); Fri, 10 Feb 2023 05:02:19 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53650 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231924AbjBJKCD (ORCPT ); Fri, 10 Feb 2023 05:02:03 -0500 Received: from mail-wm1-x32c.google.com (mail-wm1-x32c.google.com [IPv6:2a00:1450:4864:20::32c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7DD3D7B171 for ; Fri, 10 Feb 2023 02:01:42 -0800 (PST) Received: by mail-wm1-x32c.google.com with SMTP id l37-20020a05600c1d2500b003dfe46a9801so3679197wms.0 for ; Fri, 10 Feb 2023 02:01:42 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=resnulli-us.20210112.gappssmtp.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=4iPhHLVHFiLK/CcXApMjBBlb2ZIKZw0M3IzMHppkPVE=; b=i2vd8SeiuvpnbCusC+fgh0ujgrjbQdOttYP17CbsoVvIQt9qwA8tCA+o4TnMRHMONK 5dLj5AzwbSPKiF7izckJ1c2w+p90wzD3HyK28yxiC6lxyWfz089kbzTVk6VRfEfZn4AE MF9vd5bsIeUEeuBqHQ7RJEULL1miX2cm2P6MRh6ANOs3qzdAeeMWRQAL9fPejDNWAWbb FPAVxfufm3mqsGLxQrxOINmIeNacalKsaB1pfxYo7u+Lk2u3KOruxzZ63gmV4Jg+sxyu OuRPX06qF4BPY2bEy6Tz+LY3tlS/RGeh5VwyveOXbnb8cxCcjMTaQZJkpHNo+ycEoFe9 YOjQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=4iPhHLVHFiLK/CcXApMjBBlb2ZIKZw0M3IzMHppkPVE=; b=yjgZ0P2oCY/TjyKufQcjpuxf+RJL79JGvfoowLoaceZnE9cTZCSse78/lq3SzA5WUW 3DDFGFIGF3oarEu9n+Ln8NHyRrtketPlsxReKPWcs/K4BReryICezMFMQsRqSVeo5ep2 8tgyj8NSrCcPSfF8B9vqUE+PqBkyvLxpA4IMv7VPksrWTEh3ix/rapKLsKWjgIu5rfiB iwnjO+TUG97AMm1Xf7LdPCNMj0zklygkJxHWzvG9FauwJXvVnaGZXQQfc0gZN/5Hw8Bf 3ynutilbH15ptHzVCpHBsZ+A0MOSPm8MF1dipmAW1MLB4MiJjsucPXoSzPa/FxgNHMKv 8ASA== X-Gm-Message-State: AO0yUKULjhr8mYHGC8qc/vyQ8kOv0XfnccFhUVOxBDbfIDpv0tIto5vL kezwKEs3c5Y7x4KW5/AXf9eBhMcn1lbkOkREK98= X-Google-Smtp-Source: AK7set92vduOKOqNk33ICmT/Q2WW0NIWeL3rXXR1vhKKyokXJUf0E8d1fkLs7PPuH/U7L1Ujr1tRsw== X-Received: by 2002:a05:600c:16d4:b0:3e0:fad:675a with SMTP id l20-20020a05600c16d400b003e00fad675amr11787921wmn.38.1676023300948; Fri, 10 Feb 2023 02:01:40 -0800 (PST) Received: from localhost (host-213-179-129-39.customer.m-online.net. [213.179.129.39]) by smtp.gmail.com with ESMTPSA id q11-20020a7bce8b000000b003dd9232f036sm7476002wmj.23.2023.02.10.02.01.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 10 Feb 2023 02:01:40 -0800 (PST) From: Jiri Pirko To: netdev@vger.kernel.org Cc: davem@davemloft.net, kuba@kernel.org, pabeni@redhat.com, edumazet@google.com, tariqt@nvidia.com, saeedm@nvidia.com, jacob.e.keller@intel.com, gal@nvidia.com, kim.phillips@amd.com, moshe@nvidia.com, simon.horman@corigine.com, idosch@nvidia.com Subject: [patch net-next v2 5/7] devlink: convert param list to xarray Date: Fri, 10 Feb 2023 11:01:29 +0100 Message-Id: <20230210100131.3088240-6-jiri@resnulli.us> X-Mailer: git-send-email 2.39.0 In-Reply-To: <20230210100131.3088240-1-jiri@resnulli.us> References: <20230210100131.3088240-1-jiri@resnulli.us> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org From: Jiri Pirko Loose the linked list for params and use xarray instead. Note that this is required to be eventually possible to call devl_param_driverinit_value_get() without holding instance lock. Signed-off-by: Jiri Pirko Reviewed-by: Simon Horman Acked-by: Jakub Kicinski Reviewed-by: Jacob Keller --- v1->v2: - extended patch description with a note --- net/devlink/core.c | 4 +-- net/devlink/devl_internal.h | 2 +- net/devlink/leftover.c | 72 ++++++++++++++++++------------------- 3 files changed, 39 insertions(+), 39 deletions(-) diff --git a/net/devlink/core.c b/net/devlink/core.c index a4f47dafb864..777b091ef74d 100644 --- a/net/devlink/core.c +++ b/net/devlink/core.c @@ -212,6 +212,7 @@ struct devlink *devlink_alloc_ns(const struct devlink_ops *ops, devlink->dev = dev; devlink->ops = ops; xa_init_flags(&devlink->ports, XA_FLAGS_ALLOC); + xa_init_flags(&devlink->params, XA_FLAGS_ALLOC); xa_init_flags(&devlink->snapshot_ids, XA_FLAGS_ALLOC); write_pnet(&devlink->_net, net); INIT_LIST_HEAD(&devlink->rate_list); @@ -219,7 +220,6 @@ struct devlink *devlink_alloc_ns(const struct devlink_ops *ops, INIT_LIST_HEAD(&devlink->sb_list); INIT_LIST_HEAD_RCU(&devlink->dpipe_table_list); INIT_LIST_HEAD(&devlink->resource_list); - INIT_LIST_HEAD(&devlink->param_list); INIT_LIST_HEAD(&devlink->region_list); INIT_LIST_HEAD(&devlink->reporter_list); INIT_LIST_HEAD(&devlink->trap_list); @@ -255,7 +255,6 @@ void devlink_free(struct devlink *devlink) WARN_ON(!list_empty(&devlink->trap_list)); WARN_ON(!list_empty(&devlink->reporter_list)); WARN_ON(!list_empty(&devlink->region_list)); - WARN_ON(!list_empty(&devlink->param_list)); WARN_ON(!list_empty(&devlink->resource_list)); WARN_ON(!list_empty(&devlink->dpipe_table_list)); WARN_ON(!list_empty(&devlink->sb_list)); @@ -264,6 +263,7 @@ void devlink_free(struct devlink *devlink) WARN_ON(!xa_empty(&devlink->ports)); xa_destroy(&devlink->snapshot_ids); + xa_destroy(&devlink->params); xa_destroy(&devlink->ports); WARN_ON_ONCE(unregister_netdevice_notifier(&devlink->netdevice_nb)); diff --git a/net/devlink/devl_internal.h b/net/devlink/devl_internal.h index 5c117e8d4377..2f4820e40d27 100644 --- a/net/devlink/devl_internal.h +++ b/net/devlink/devl_internal.h @@ -29,7 +29,7 @@ struct devlink { struct list_head sb_list; struct list_head dpipe_table_list; struct list_head resource_list; - struct list_head param_list; + struct xarray params; struct list_head region_list; struct list_head reporter_list; struct devlink_dpipe_headers *dpipe_headers; diff --git a/net/devlink/leftover.c b/net/devlink/leftover.c index c7d9ef832c8c..6d3988f4e843 100644 --- a/net/devlink/leftover.c +++ b/net/devlink/leftover.c @@ -3954,26 +3954,22 @@ static int devlink_param_driver_verify(const struct devlink_param *param) } static struct devlink_param_item * -devlink_param_find_by_name(struct list_head *param_list, - const char *param_name) +devlink_param_find_by_name(struct xarray *params, const char *param_name) { struct devlink_param_item *param_item; + unsigned long param_id; - list_for_each_entry(param_item, param_list, list) + xa_for_each(params, param_id, param_item) { if (!strcmp(param_item->param->name, param_name)) return param_item; + } return NULL; } static struct devlink_param_item * -devlink_param_find_by_id(struct list_head *param_list, u32 param_id) +devlink_param_find_by_id(struct xarray *params, u32 param_id) { - struct devlink_param_item *param_item; - - list_for_each_entry(param_item, param_list, list) - if (param_item->param->id == param_id) - return param_item; - return NULL; + return xa_load(params, param_id); } static bool @@ -4202,14 +4198,10 @@ devlink_nl_cmd_param_get_dump_one(struct sk_buff *msg, struct devlink *devlink, { struct devlink_nl_dump_state *state = devlink_dump_state(cb); struct devlink_param_item *param_item; - int idx = 0; + unsigned long param_id; int err = 0; - list_for_each_entry(param_item, &devlink->param_list, list) { - if (idx < state->idx) { - idx++; - continue; - } + xa_for_each_start(&devlink->params, param_id, param_item, state->idx) { err = devlink_nl_param_fill(msg, devlink, 0, param_item, DEVLINK_CMD_PARAM_GET, NETLINK_CB(cb->skb).portid, @@ -4218,10 +4210,9 @@ devlink_nl_cmd_param_get_dump_one(struct sk_buff *msg, struct devlink *devlink, if (err == -EOPNOTSUPP) { err = 0; } else if (err) { - state->idx = idx; + state->idx = param_id; break; } - idx++; } return err; @@ -4307,8 +4298,7 @@ devlink_param_value_get_from_info(const struct devlink_param *param, } static struct devlink_param_item * -devlink_param_get_from_info(struct list_head *param_list, - struct genl_info *info) +devlink_param_get_from_info(struct xarray *params, struct genl_info *info) { char *param_name; @@ -4316,7 +4306,7 @@ devlink_param_get_from_info(struct list_head *param_list, return NULL; param_name = nla_data(info->attrs[DEVLINK_ATTR_PARAM_NAME]); - return devlink_param_find_by_name(param_list, param_name); + return devlink_param_find_by_name(params, param_name); } static int devlink_nl_cmd_param_get_doit(struct sk_buff *skb, @@ -4327,7 +4317,7 @@ static int devlink_nl_cmd_param_get_doit(struct sk_buff *skb, struct sk_buff *msg; int err; - param_item = devlink_param_get_from_info(&devlink->param_list, info); + param_item = devlink_param_get_from_info(&devlink->params, info); if (!param_item) return -EINVAL; @@ -4348,7 +4338,7 @@ static int devlink_nl_cmd_param_get_doit(struct sk_buff *skb, static int __devlink_nl_cmd_param_set_doit(struct devlink *devlink, unsigned int port_index, - struct list_head *param_list, + struct xarray *params, struct genl_info *info, enum devlink_command cmd) { @@ -4360,7 +4350,7 @@ static int __devlink_nl_cmd_param_set_doit(struct devlink *devlink, union devlink_param_value value; int err = 0; - param_item = devlink_param_get_from_info(param_list, info); + param_item = devlink_param_get_from_info(params, info); if (!param_item) return -EINVAL; param = param_item->param; @@ -4406,7 +4396,7 @@ static int devlink_nl_cmd_param_set_doit(struct sk_buff *skb, { struct devlink *devlink = info->user_ptr[0]; - return __devlink_nl_cmd_param_set_doit(devlink, 0, &devlink->param_list, + return __devlink_nl_cmd_param_set_doit(devlink, 0, &devlink->params, info, DEVLINK_CMD_PARAM_NEW); } @@ -8038,6 +8028,7 @@ void devlink_notify_register(struct devlink *devlink) struct devlink_rate *rate_node; struct devlink_region *region; unsigned long port_index; + unsigned long param_id; devlink_notify(devlink, DEVLINK_CMD_NEW); list_for_each_entry(linecard, &devlink->linecard_list, list) @@ -8063,7 +8054,7 @@ void devlink_notify_register(struct devlink *devlink) list_for_each_entry(region, &devlink->region_list, list) devlink_nl_region_notify(region, NULL, DEVLINK_CMD_REGION_NEW); - list_for_each_entry(param_item, &devlink->param_list, list) + xa_for_each(&devlink->params, param_id, param_item) devlink_param_notify(devlink, 0, param_item, DEVLINK_CMD_PARAM_NEW); } @@ -8078,8 +8069,9 @@ void devlink_notify_unregister(struct devlink *devlink) struct devlink_rate *rate_node; struct devlink_region *region; unsigned long port_index; + unsigned long param_id; - list_for_each_entry_reverse(param_item, &devlink->param_list, list) + xa_for_each(&devlink->params, param_id, param_item) devlink_param_notify(devlink, 0, param_item, DEVLINK_CMD_PARAM_DEL); @@ -9506,9 +9498,10 @@ static int devlink_param_register(struct devlink *devlink, const struct devlink_param *param) { struct devlink_param_item *param_item; + int err; WARN_ON(devlink_param_verify(param)); - WARN_ON(devlink_param_find_by_name(&devlink->param_list, param->name)); + WARN_ON(devlink_param_find_by_name(&devlink->params, param->name)); if (param->supported_cmodes == BIT(DEVLINK_PARAM_CMODE_DRIVERINIT)) WARN_ON(param->get || param->set); @@ -9521,9 +9514,16 @@ static int devlink_param_register(struct devlink *devlink, param_item->param = param; - list_add_tail(¶m_item->list, &devlink->param_list); + err = xa_insert(&devlink->params, param->id, param_item, GFP_KERNEL); + if (err) + goto err_xa_insert; + devlink_param_notify(devlink, 0, param_item, DEVLINK_CMD_PARAM_NEW); return 0; + +err_xa_insert: + kfree(param_item); + return err; } static void devlink_param_unregister(struct devlink *devlink, @@ -9531,12 +9531,11 @@ static void devlink_param_unregister(struct devlink *devlink, { struct devlink_param_item *param_item; - param_item = - devlink_param_find_by_name(&devlink->param_list, param->name); + param_item = devlink_param_find_by_id(&devlink->params, param->id); if (WARN_ON(!param_item)) return; devlink_param_notify(devlink, 0, param_item, DEVLINK_CMD_PARAM_DEL); - list_del(¶m_item->list); + xa_erase(&devlink->params, param->id); kfree(param_item); } @@ -9640,7 +9639,7 @@ int devl_param_driverinit_value_get(struct devlink *devlink, u32 param_id, if (WARN_ON(!devlink_reload_supported(devlink->ops))) return -EOPNOTSUPP; - param_item = devlink_param_find_by_id(&devlink->param_list, param_id); + param_item = devlink_param_find_by_id(&devlink->params, param_id); if (!param_item) return -EINVAL; @@ -9674,7 +9673,7 @@ void devl_param_driverinit_value_set(struct devlink *devlink, u32 param_id, { struct devlink_param_item *param_item; - param_item = devlink_param_find_by_id(&devlink->param_list, param_id); + param_item = devlink_param_find_by_id(&devlink->params, param_id); if (WARN_ON(!param_item)) return; @@ -9692,8 +9691,9 @@ EXPORT_SYMBOL_GPL(devl_param_driverinit_value_set); void devlink_params_driverinit_load_new(struct devlink *devlink) { struct devlink_param_item *param_item; + unsigned long param_id; - list_for_each_entry(param_item, &devlink->param_list, list) { + xa_for_each(&devlink->params, param_id, param_item) { if (!devlink_param_cmode_is_supported(param_item->param, DEVLINK_PARAM_CMODE_DRIVERINIT) || !param_item->driverinit_value_new_valid) @@ -9720,7 +9720,7 @@ void devl_param_value_changed(struct devlink *devlink, u32 param_id) { struct devlink_param_item *param_item; - param_item = devlink_param_find_by_id(&devlink->param_list, param_id); + param_item = devlink_param_find_by_id(&devlink->params, param_id); WARN_ON(!param_item); devlink_param_notify(devlink, 0, param_item, DEVLINK_CMD_PARAM_NEW); From patchwork Fri Feb 10 10:01:30 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jiri Pirko X-Patchwork-Id: 13135635 X-Patchwork-Delegate: kuba@kernel.org Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2D2EEC636D3 for ; Fri, 10 Feb 2023 10:02:18 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231946AbjBJKCO (ORCPT ); Fri, 10 Feb 2023 05:02:14 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53630 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231579AbjBJKCD (ORCPT ); Fri, 10 Feb 2023 05:02:03 -0500 Received: from mail-wm1-x330.google.com (mail-wm1-x330.google.com [IPv6:2a00:1450:4864:20::330]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id DB6867B151 for ; Fri, 10 Feb 2023 02:01:43 -0800 (PST) Received: by mail-wm1-x330.google.com with SMTP id l37-20020a05600c1d2500b003dfe46a9801so3679258wms.0 for ; Fri, 10 Feb 2023 02:01:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=resnulli-us.20210112.gappssmtp.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Z2swvARs3+1rEHJor5k+uiBH7RWFOlRwmGe5F17Zm3w=; b=qgRlRHu96ymiWgSpcK1dctuW2CSZmE45Xmf1p1oOJQtfZuhwOFXT2FIbZvW9HalOsP R44NnBWBzPLjH8xHeOpNj1a0MwE18JV3HBg86tgNWe96SPCVBkutC0/rWQQK9WKSFyH1 gCAORXqBL+q4njecehEfvv+e73O3T7MaYBnXF+XHrKrAB6jXUILBPRAS2gr59rvnpVhF aPd1y2Ig+DRsjzfF4aDwft3Qzzr/wqKy/u/SXPKJUUjAWb/SORDCf8ET6wKYXkNIEfDx OYkNqpHv79Ctq+3k4M9BHe40kaOqncvgb9CllozJVY17MawFSYPklTUALUuglt2srv+N u3Fw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Z2swvARs3+1rEHJor5k+uiBH7RWFOlRwmGe5F17Zm3w=; b=5XLZR9iQo6m63bdkOnRsGUDRkwHcUhbwCwBCJJUc8iTpsXfGXhcKGFoLbRE1TWCEBc ufnAUsnvL8bo+a6IGDMHa0ydtOD2o3+ROqXRdbszlEXy6NTeGGZ+Ircc8qanhO3eberG 241NnB84Cgy5xdQbh85cM3US4siehrGWude8C9dLO0xn7oRKNkieEseOBjps/cGY9/U/ vYpIBXi+DLsfS7uLPQJE52x1AXfta8viSdp7Vojf3bFIjyPadn6XPFnu8txdOsqD/l0h xAnbJgiTiF2wJiwGi/yeUKwyNbmGex2ew0cuQoWfvEEkueCVAPjwYoj+a41zR3q59DJc 6SYQ== X-Gm-Message-State: AO0yUKWIEKv8pnepvLmwtMidusXF7jZu/p0EU/eV6OSjG8EyMS/3BR2x DtxNla0QEA8y4NqI0TRv5GBslDF5ILwAvISjJGE= X-Google-Smtp-Source: AK7set+RWp5xjr/s5OPzmEh9tYNUoF77YG7Kh0ky4R0KlVJHECQLmTv76rbg1ehNkPpd48kYLuPqNw== X-Received: by 2002:a05:600c:3510:b0:3dc:42d2:aeee with SMTP id h16-20020a05600c351000b003dc42d2aeeemr12620334wmq.25.1676023302490; Fri, 10 Feb 2023 02:01:42 -0800 (PST) Received: from localhost (host-213-179-129-39.customer.m-online.net. [213.179.129.39]) by smtp.gmail.com with ESMTPSA id p21-20020a05600c359500b003db06224953sm4881037wmq.41.2023.02.10.02.01.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 10 Feb 2023 02:01:41 -0800 (PST) From: Jiri Pirko To: netdev@vger.kernel.org Cc: davem@davemloft.net, kuba@kernel.org, pabeni@redhat.com, edumazet@google.com, tariqt@nvidia.com, saeedm@nvidia.com, jacob.e.keller@intel.com, gal@nvidia.com, kim.phillips@amd.com, moshe@nvidia.com, simon.horman@corigine.com, idosch@nvidia.com Subject: [patch net-next v2 6/7] devlink: allow to call devl_param_driverinit_value_get() without holding instance lock Date: Fri, 10 Feb 2023 11:01:30 +0100 Message-Id: <20230210100131.3088240-7-jiri@resnulli.us> X-Mailer: git-send-email 2.39.0 In-Reply-To: <20230210100131.3088240-1-jiri@resnulli.us> References: <20230210100131.3088240-1-jiri@resnulli.us> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org From: Jiri Pirko If the driver maintains following basic sane behavior, the devl_param_driverinit_value_get() function could be called without holding instance lock: 1) Driver ensures a call to devl_param_driverinit_value_get() cannot race with registering/unregistering the parameter with the same parameter ID. 2) Driver ensures a call to devl_param_driverinit_value_get() cannot race with devl_param_driverinit_value_set() call with the same parameter ID. 3) Driver ensures a call to devl_param_driverinit_value_get() cannot race with reload operation. By the nature of params usage, these requirements should be trivially achievable. If the driver for some off reason is not able to comply, it has to take the devlink->lock while calling devl_param_driverinit_value_get(). Remove the lock assertion and add comment describing the locking requirements. This fixes a splat in mlx5 driver introduced by the commit referenced in the "Fixes" tag. Lore: https://lore.kernel.org/netdev/719de4f0-76ac-e8b9-38a9-167ae239efc7@amd.com/ Reported-by: Kim Phillips Fixes: 075935f0ae0f ("devlink: protect devlink param list by instance lock") Signed-off-by: Jiri Pirko Reviewed-by: Simon Horman Acked-by: Jakub Kicinski Reviewed-by: Jacob Keller Tested-by: Kim Phillips --- net/devlink/leftover.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/net/devlink/leftover.c b/net/devlink/leftover.c index 6d3988f4e843..9f0256c2c323 100644 --- a/net/devlink/leftover.c +++ b/net/devlink/leftover.c @@ -9628,14 +9628,23 @@ EXPORT_SYMBOL_GPL(devlink_params_unregister); * * This function should be used by the driver to get driverinit * configuration for initialization after reload command. + * + * Note that lockless call of this function relies on the + * driver to maintain following basic sane behavior: + * 1) Driver ensures a call to this function cannot race with + * registering/unregistering the parameter with the same parameter ID. + * 2) Driver ensures a call to this function cannot race with + * devl_param_driverinit_value_set() call with the same parameter ID. + * 3) Driver ensures a call to this function cannot race with + * reload operation. + * If the driver is not able to comply, it has to take the devlink->lock + * while calling this. */ int devl_param_driverinit_value_get(struct devlink *devlink, u32 param_id, union devlink_param_value *val) { struct devlink_param_item *param_item; - lockdep_assert_held(&devlink->lock); - if (WARN_ON(!devlink_reload_supported(devlink->ops))) return -EOPNOTSUPP; From patchwork Fri Feb 10 10:01:31 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jiri Pirko X-Patchwork-Id: 13135636 X-Patchwork-Delegate: kuba@kernel.org Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 42C45C05027 for ; Fri, 10 Feb 2023 10:02:20 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231983AbjBJKCQ (ORCPT ); Fri, 10 Feb 2023 05:02:16 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52722 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231889AbjBJKCD (ORCPT ); Fri, 10 Feb 2023 05:02:03 -0500 Received: from mail-wr1-x429.google.com (mail-wr1-x429.google.com [IPv6:2a00:1450:4864:20::429]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6BA957B17F for ; Fri, 10 Feb 2023 02:01:45 -0800 (PST) Received: by mail-wr1-x429.google.com with SMTP id o18so4497407wrj.3 for ; Fri, 10 Feb 2023 02:01:45 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=resnulli-us.20210112.gappssmtp.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=vqeMYLZK1D3XltelOB+dJlBhY1FHZDMpdLZyMtZbIVU=; b=79KsGadBwRm5l3m5KB+C795fr2bduXsQW/T/BSwvgJY4NSG1ljOF/sqf5xs+CHkNZ6 4utti30aGqSMALoq+a5h7Z1YbEbYqx72QFGTT1mhm/vEP4iAjP9tMquejxx5QwF9zrFv sPEb009/6ZDTJTNflmgTwzQPHL2rxc3CFp1sm0andLWgIkScjy707xCLXb1AILHKGbT1 w9pjKU+FA4gb4AJJ2AHaPcKoT9vbnPlUG24eWvGfpIExJltY3IhcpTTo+u1FSltMu1ML hYMxweLFoPRAAl6UKADdBvOXcsTBMD2wyLBG+3Gj9tRnI/LMreKU8mIUUutpu6NBe2C6 hCJw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=vqeMYLZK1D3XltelOB+dJlBhY1FHZDMpdLZyMtZbIVU=; b=jkf2llzXy0h7/LWys7qGEHBbPuccaftcVM3YgFHlVEiEqckFDKhv4VaA/gnvDPbDpU AKf8YMfEg0pnkZKcmQTpdP7Fvj/LJMPFiM4oH1CEpXGpP4ooEmPasiLgUIn+4rMdolN8 tCjGoUNTsgQiwPtz+9moPu1Uo4KBnNT+ThxFHWfVv6qRXHBAK15y9c6dN0Dyc+CY2TPB Vr2SAIiNWVDQ7i2qJpVCUSbhiFanePJGqOymHnOFUP7XDYl2V3Cc1UDAa1BqYatRCbzX QWJXaG9cGUhCi015WVuYiA9wo5x41dTTB+jhnYrcJmlrCrIRzpn14y7T0bdz4IwNcKQ0 pHtg== X-Gm-Message-State: AO0yUKWzN1tpkfhSW659jyGfNhosEYSCNGYjjpP72TGKkKCPa/zggg/q hHONpEXyHTOHGiPh/uddGvJhmrYHBlPvH6j8jjY= X-Google-Smtp-Source: AK7set/cNCssZRCPFUI9K0x40KVvj1NtwucE0F8P2KH5d8S+oigPmcxFSSHzd8GUhpoH4xqur9GO8g== X-Received: by 2002:adf:d0c2:0:b0:2c3:e7f5:be8c with SMTP id z2-20020adfd0c2000000b002c3e7f5be8cmr13908281wrh.26.1676023304039; Fri, 10 Feb 2023 02:01:44 -0800 (PST) Received: from localhost (host-213-179-129-39.customer.m-online.net. [213.179.129.39]) by smtp.gmail.com with ESMTPSA id c13-20020adfef4d000000b002c3db0eec5fsm3185225wrp.62.2023.02.10.02.01.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 10 Feb 2023 02:01:43 -0800 (PST) From: Jiri Pirko To: netdev@vger.kernel.org Cc: davem@davemloft.net, kuba@kernel.org, pabeni@redhat.com, edumazet@google.com, tariqt@nvidia.com, saeedm@nvidia.com, jacob.e.keller@intel.com, gal@nvidia.com, kim.phillips@amd.com, moshe@nvidia.com, simon.horman@corigine.com, idosch@nvidia.com Subject: [patch net-next v2 7/7] devlink: add forgotten devlink instance lock assertion to devl_param_driverinit_value_set() Date: Fri, 10 Feb 2023 11:01:31 +0100 Message-Id: <20230210100131.3088240-8-jiri@resnulli.us> X-Mailer: git-send-email 2.39.0 In-Reply-To: <20230210100131.3088240-1-jiri@resnulli.us> References: <20230210100131.3088240-1-jiri@resnulli.us> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org From: Jiri Pirko Driver calling devl_param_driverinit_value_set() has to hold devlink instance lock while doing that. Put an assertion there. Signed-off-by: Jiri Pirko Reviewed-by: Simon Horman Acked-by: Jakub Kicinski Reviewed-by: Jacob Keller --- net/devlink/leftover.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/net/devlink/leftover.c b/net/devlink/leftover.c index 9f0256c2c323..38cdbc2039dd 100644 --- a/net/devlink/leftover.c +++ b/net/devlink/leftover.c @@ -9682,6 +9682,8 @@ void devl_param_driverinit_value_set(struct devlink *devlink, u32 param_id, { struct devlink_param_item *param_item; + devl_assert_locked(devlink); + param_item = devlink_param_find_by_id(&devlink->params, param_id); if (WARN_ON(!param_item)) return;