From 00761e184ec3dced5a84b2745e5bd182bc0414f4 Mon Sep 17 00:00:00 2001 From: Sanath Kumar Gampa Date: Tue, 2 Jan 2024 06:49:36 +0000 Subject: [PATCH] linux:nvidia: macsec sysfs nodes only if enabled Issue: Accessing the macsec sysfs nodes is leading to crash when macsec is disabled in DT Fix: Do not create sysfs nodes if macsec is not enabled in DT. Also update the instance_id reading as part of ether_probe which will be executed even when macsec is disabled Bug 4431523 Bug 4910958 Change-Id: I354ac142b9d49852a0d5c7557a7368e1c36b0f63 Signed-off-by: Sanath Kumar Gampa Reviewed-on: https://git-master.nvidia.com/r/c/linux-nvidia/+/3043469 (cherry picked from commit acf3356b8e9cbd7c0f9e34a0ead3591e83f65b60) Reviewed-on: https://git-master.nvidia.com/r/c/linux-nvidia/+/3081473 Signed-off-by: Revanth Kumar Uppala Reviewed-on: https://git-master.nvidia.com/r/c/linux-nv-oot/+/3292924 Reviewed-by: Narayana Reddy P GVS: buildbot_gerritrpt Reviewed-by: Bibek Basu --- .../ethernet/nvidia/nvethernet/ether_linux.c | 7 +++ .../net/ethernet/nvidia/nvethernet/macsec.c | 2 +- .../net/ethernet/nvidia/nvethernet/sysfs.c | 47 +++++++++++++++++-- 3 files changed, 52 insertions(+), 4 deletions(-) diff --git a/drivers/net/ethernet/nvidia/nvethernet/ether_linux.c b/drivers/net/ethernet/nvidia/nvethernet/ether_linux.c index 13b1d75f..3f903028 100644 --- a/drivers/net/ethernet/nvidia/nvethernet/ether_linux.c +++ b/drivers/net/ethernet/nvidia/nvethernet/ether_linux.c @@ -5790,6 +5790,13 @@ static int ether_parse_dt(struct ether_priv_data *pdata) } } + /* Read MAC instance id */ + ret = of_property_read_u32(np, "nvidia,instance_id", &osi_core->instance_id); + if (ret != 0) { + dev_info(dev, "DT instance_id missing\n"); + return -EINVAL; + } + if (osi_dma->num_dma_chans != osi_core->num_mtl_queues) { dev_err(dev, "mismatch in numbers of DMA channel and MTL Q\n"); return -EINVAL; diff --git a/drivers/net/ethernet/nvidia/nvethernet/macsec.c b/drivers/net/ethernet/nvidia/nvethernet/macsec.c index 6f7d0efe..cd1abef8 100644 --- a/drivers/net/ethernet/nvidia/nvethernet/macsec.c +++ b/drivers/net/ethernet/nvidia/nvethernet/macsec.c @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-2.0-only -/* Copyright (c) 2019-2023, NVIDIA CORPORATION. All rights reserved */ +/* Copyright (c) 2019-2025, NVIDIA CORPORATION. All rights reserved */ #ifdef MACSEC_SUPPORT #include "ether_linux.h" diff --git a/drivers/net/ethernet/nvidia/nvethernet/sysfs.c b/drivers/net/ethernet/nvidia/nvethernet/sysfs.c index e48e2410..714fcc89 100644 --- a/drivers/net/ethernet/nvidia/nvethernet/sysfs.c +++ b/drivers/net/ethernet/nvidia/nvethernet/sysfs.c @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-2.0-only -/* Copyright (c) 2019-2023, NVIDIA CORPORATION & AFFILIATES. All rights reserved */ +/* Copyright (c) 2019-2025, NVIDIA CORPORATION & AFFILIATES. All rights reserved */ #include "ether_linux.h" #include "macsec.h" @@ -2735,6 +2735,33 @@ static struct attribute *ether_sysfs_attrs[] = { NULL }; +/** + * @brief Attributes for nvethernet sysfs without MACSEC + */ +static struct attribute *ether_sysfs_attrs_without_macsec[] = { +#ifndef OSI_STRIPPED_LIB +#ifdef OSI_DEBUG + &dev_attr_desc_dump_enable.attr, +#endif /* OSI_DEBUG */ + &dev_attr_mac_loopback.attr, + &dev_attr_ptp_mode.attr, + &dev_attr_ptp_sync.attr, + &dev_attr_frp.attr, + &dev_attr_uphy_gbe_mode.attr, + &dev_attr_phy_iface_mode.attr, +#ifdef ETHER_NVGRO + &dev_attr_nvgro_pkt_age_msec.attr, + &dev_attr_nvgro_timer_interval.attr, + &dev_attr_nvgro_stats.attr, + &dev_attr_nvgro_dump.attr, +#endif +#endif /* OSI_STRIPPED_LIB */ +#ifdef HSI_SUPPORT + &dev_attr_hsi_enable.attr, +#endif + NULL +}; + /** * @brief Ethernet sysfs attribute group */ @@ -2743,6 +2770,14 @@ static struct attribute_group ether_attribute_group = { .attrs = ether_sysfs_attrs, }; +/** + * @brief Ethernet sysfs attribute group without macsec + */ +static struct attribute_group ether_attribute_group_wo_macsec = { + .name = "nvethernet", + .attrs = ether_sysfs_attrs_without_macsec, +}; + #ifndef OSI_STRIPPED_LIB #ifdef CONFIG_DEBUG_FS static char *timestamp_system_source(unsigned int source) @@ -3331,7 +3366,10 @@ int ether_sysfs_register(struct ether_priv_data *pdata) #endif /* OSI_STRIPPED_LIB */ /* Create nvethernet sysfs group under /sys/devices// */ - return sysfs_create_group(&dev->kobj, ðer_attribute_group); + if (pdata->macsec_pdata) + return sysfs_create_group(&dev->kobj, ðer_attribute_group); + else + return sysfs_create_group(&dev->kobj, ðer_attribute_group_wo_macsec); } void ether_sysfs_unregister(struct ether_priv_data *pdata) @@ -3343,5 +3381,8 @@ void ether_sysfs_unregister(struct ether_priv_data *pdata) #endif #endif /* OSI_STRIPPED_LIB */ /* Remove nvethernet sysfs group under /sys/devices// */ - sysfs_remove_group(&dev->kobj, ðer_attribute_group); + if (pdata->macsec_pdata) + sysfs_remove_group(&dev->kobj, ðer_attribute_group); + else + sysfs_remove_group(&dev->kobj, ðer_attribute_group_wo_macsec); }