From patchwork Fri Feb 7 19:49:13 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tatyana Nikolova X-Patchwork-Id: 13965698 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.13]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 138DD19EED7; Fri, 7 Feb 2025 19:50:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.13 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738957829; cv=none; b=b3jFyYu+X9fFAfAaTp351gDO8TOXh/BlhhxM4KIRoefDhjeHrPOv1DWDHb6FOK//ffWN8H2JzhLktW27vuyPgmDSYh4hJzte/caq2pDQOBeEg49ZvBgw4ZwB41lpfYuZcNkNVGBBbxyllupI+6BD1cXxP2g2f8HuSB1Y2OOdPrg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738957829; c=relaxed/simple; bh=JdFzhaqwrhH90dcI0hYzu1zdUBOtuTFsTNzE59G8vpE=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=WdbKimlvGXgn8jJBspyuhuxSMEki/L+TOhsOBMnW7GEsYyQ65S0hXe0H0zlLYSHm9HXcNg6VbLeDFq3e2hW3S9q2nL/Gy73NLcTxcF7qC1WUFD7mjXwRv7dfEhw+I2AKx4uqS4UrOk4k7MrlE67iPtLr9jcXFmH7OZQeFWJx8aI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=LNEXCjnX; arc=none smtp.client-ip=192.198.163.13 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="LNEXCjnX" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1738957828; x=1770493828; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=JdFzhaqwrhH90dcI0hYzu1zdUBOtuTFsTNzE59G8vpE=; b=LNEXCjnXEQFs2ohTQPHnjdSbsWq5caZzQbrmsHu+ouWiyCSzzH3VKMz0 KCC7l8F6DbnHwCDHl7+abUua13HijpR2csx8VNzTYs3UJewnHbP7JRWXW npLDzMYKt73hKUDkD22SuMHTdYsPsJlHwY82A+BQKXexO9fxqqE1Jm+JU OmuVKNVBrnV45NyujVU/nIS+EliqVkeNcgzhHdSFgVjsW0v+fwe0OrzPD m4yB7Sgbj/20TspiuigU70e1KysPbv1V09LtoH5xFhpaZpr+KeZwRuU42 z/AuLLleBGat2k5ECifS3Al8YAzaziMfQ0YwXes5edRXFVK2CB2oqK3uK Q==; X-CSE-ConnectionGUID: WC4QUnbBSUCmwyRAAk9TSw== X-CSE-MsgGUID: Y8wS61HTQHuTSyG0y3XhHg== X-IronPort-AV: E=McAfee;i="6700,10204,11338"; a="42451771" X-IronPort-AV: E=Sophos;i="6.13,268,1732608000"; d="scan'208";a="42451771" Received: from fmviesa009.fm.intel.com ([10.60.135.149]) by fmvoesa107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 07 Feb 2025 11:50:25 -0800 X-CSE-ConnectionGUID: Wzicb5K8Q9+bxro1EmI7Ng== X-CSE-MsgGUID: 9TqIoJxNReSxbaujchaO0g== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.13,268,1732608000"; d="scan'208";a="112238142" Received: from tenikolo-mobl1.amr.corp.intel.com ([10.124.81.134]) by fmviesa009-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 07 Feb 2025 11:50:24 -0800 From: Tatyana Nikolova To: jgg@nvidia.com, leon@kernel.org, intel-wired-lan@lists.osuosl.org Cc: linux-rdma@vger.kernel.org, netdev@vger.kernel.org, Joshua Hay , Tatyana Nikolova Subject: [iwl-next v3 06/24] idpf: implement IDC vport aux driver MTU change handler Date: Fri, 7 Feb 2025 13:49:13 -0600 Message-Id: <20250207194931.1569-7-tatyana.e.nikolova@intel.com> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20250207194931.1569-1-tatyana.e.nikolova@intel.com> References: <20250207194931.1569-1-tatyana.e.nikolova@intel.com> Precedence: bulk X-Mailing-List: linux-rdma@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 From: Joshua Hay The only event an RDMA vport aux driver cares about right now is an MTU change on its underlying vport. Implement and plumb the handler to signal the pre MTU change event and post MTU change events to the RDMA vport aux driver. Signed-off-by: Joshua Hay Signed-off-by: Tatyana Nikolova --- v3: - add missing break statement - remove unnecessary iadrv NULL check drivers/net/ethernet/intel/idpf/idpf.h | 2 ++ drivers/net/ethernet/intel/idpf/idpf_idc.c | 31 ++++++++++++++++++++++ drivers/net/ethernet/intel/idpf/idpf_lib.c | 11 +++++--- 3 files changed, 41 insertions(+), 3 deletions(-) diff --git a/drivers/net/ethernet/intel/idpf/idpf.h b/drivers/net/ethernet/intel/idpf/idpf.h index 9516e946781a..491db5b2d79d 100644 --- a/drivers/net/ethernet/intel/idpf/idpf.h +++ b/drivers/net/ethernet/intel/idpf/idpf.h @@ -873,5 +873,7 @@ int idpf_idc_init_aux_core_dev(struct idpf_adapter *adapter, void idpf_idc_deinit_core_aux_device(struct idc_rdma_core_dev_info *cdev_info); void idpf_idc_deinit_vport_aux_device(struct idc_rdma_vport_dev_info *vdev_info); void idpf_idc_issue_reset_event(struct idc_rdma_core_dev_info *cdev_info); +void idpf_idc_vdev_mtu_event(struct idc_rdma_vport_dev_info *vdev_info, + enum idc_rdma_event_type event_type); #endif /* !_IDPF_H_ */ diff --git a/drivers/net/ethernet/intel/idpf/idpf_idc.c b/drivers/net/ethernet/intel/idpf/idpf_idc.c index 3dbd7e2a7e98..fb5b023557b6 100644 --- a/drivers/net/ethernet/intel/idpf/idpf_idc.c +++ b/drivers/net/ethernet/intel/idpf/idpf_idc.c @@ -137,6 +137,37 @@ static int idpf_idc_init_aux_vport_dev(struct idpf_vport *vport) return 0; } +/** + * idpf_idc_vdev_mtu_event - Function to handle IDC vport mtu change events + * @vdev_info: IDC vport device info pointer + * @event_type: type of event to pass to handler + */ +void idpf_idc_vdev_mtu_event(struct idc_rdma_vport_dev_info *vdev_info, + enum idc_rdma_event_type event_type) +{ + struct idc_rdma_vport_auxiliary_drv *iadrv; + struct idc_rdma_event event = { }; + struct auxiliary_device *adev; + + if (!vdev_info) + /* RDMA is not enabled */ + return; + + set_bit(event_type, event.type); + + device_lock(&vdev_info->adev->dev); + adev = vdev_info->adev; + if (!adev || !adev->dev.driver) + goto unlock; + iadrv = container_of(adev->dev.driver, + struct idc_rdma_vport_auxiliary_drv, + adrv.driver); + if (iadrv->event_handler) + iadrv->event_handler(vdev_info, &event); +unlock: + device_unlock(&vdev_info->adev->dev); +} + /** * idpf_core_adev_release - function to be mapped to aux dev's release op * @dev: pointer to device to free diff --git a/drivers/net/ethernet/intel/idpf/idpf_lib.c b/drivers/net/ethernet/intel/idpf/idpf_lib.c index 88a33c8b18fe..a9bc6e0f949c 100644 --- a/drivers/net/ethernet/intel/idpf/idpf_lib.c +++ b/drivers/net/ethernet/intel/idpf/idpf_lib.c @@ -1931,6 +1931,9 @@ int idpf_initiate_soft_reset(struct idpf_vport *vport, idpf_vport_calc_num_q_desc(new_vport); break; case IDPF_SR_MTU_CHANGE: + idpf_idc_vdev_mtu_event(vport->vdev_info, + IDC_RDMA_EVENT_BEFORE_MTU_CHANGE); + break; case IDPF_SR_RSC_CHANGE: break; default: @@ -1975,9 +1978,7 @@ int idpf_initiate_soft_reset(struct idpf_vport *vport, if (current_state == __IDPF_VPORT_UP) err = idpf_vport_open(vport); - kfree(new_vport); - - return err; + goto free_vport; err_reset: idpf_send_add_queues_msg(vport, vport->num_txq, vport->num_complq, @@ -1990,6 +1991,10 @@ int idpf_initiate_soft_reset(struct idpf_vport *vport, free_vport: kfree(new_vport); + if (reset_cause == IDPF_SR_MTU_CHANGE) + idpf_idc_vdev_mtu_event(vport->vdev_info, + IDC_RDMA_EVENT_AFTER_MTU_CHANGE); + return err; }