Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp1222642pxj; Fri, 18 Jun 2021 02:18:07 -0700 (PDT) X-Google-Smtp-Source: ABdhPJy7nNwU4r1kY5kFj/igiC9TOzsp6+SLWpzNGXITwf7oI1Wio3oxnUce0jW4/sTFM98R4wNc X-Received: by 2002:a05:6402:424a:: with SMTP id g10mr3652212edb.220.1624007887223; Fri, 18 Jun 2021 02:18:07 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1624007887; cv=none; d=google.com; s=arc-20160816; b=vI4PW6jHhuHD+fdj1Z9lLT5+cyX5fc/OhdVAS0gGPa6etwDDUD2xOApVMKzjWG7UJS zS04uZkRD+il8pUvmqyf7UyD+jA1t+UR41kr9MJOVOWoz7B3v2bpPlifVrYRE+qgLZTr 78Y6soJOCJNoIKuoMt/W6bTzsxJoFdVRkpv7Zfewg3Ee51LLk9Enjh7t0UBQE+M2iVos oxMEwCMvc/Qvis0ffivJ6AFrAkQjpIqPHHo3W76j5b4TkYReTbgZx+4YulwRi0tJ/eEA ih9yiv9Kng2hgJZ4ggTICpTP+A9QkhRhakVYHGSb4tnbH+qGFbr++DvtBo9sQ7Pii+Bc nrKQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:subject:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:cc:to:from; bh=1AhvQL0AnOMxR2kfVSXs/AATPig1Z7xykmBlqKax2Qc=; b=gJSE8jmF60qgJ4QFsAIdOftxHoZVPfmakLQcxEYP0SwBiMeTE+xrtmJ/Wxcf51HQrd JuVgjWhNNxMJktQsI+DOZTMYhmtsTODiKN0bXOIBoySF90E5clMpCUcz+BBW0hqz31ek SzcNDPw+h88x27CW/3k1lUNw53OUpYMNTdh+98uE0gmag2V3oMqRrOA1i7iilEk44NoI 09ILZilD8KdbFvt8/fctLSp+B9t0vsdYGVtwR/2VnBG14mHYN/VknhXjm9V3b8VKj80V dioXNsWbTV2O2Ck4vqlAYj1HijOAcCKH5lejxpNalFoN5kfvBrj8SUz1xYybH7pzBK3Q Wzug== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-wireless-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-wireless-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id b10si8729116ede.515.2021.06.18.02.17.41; Fri, 18 Jun 2021 02:18:07 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-wireless-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-wireless-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-wireless-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230225AbhFRIFa (ORCPT + 99 others); Fri, 18 Jun 2021 04:05:30 -0400 Received: from paleale.coelho.fi ([176.9.41.70]:48078 "EHLO farmhouse.coelho.fi" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S232942AbhFRID7 (ORCPT ); Fri, 18 Jun 2021 04:03:59 -0400 Received: from 91-156-6-193.elisa-laajakaista.fi ([91.156.6.193] helo=kveik.lan) by farmhouse.coelho.fi with esmtpsa (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94) (envelope-from ) id 1lu9RO-001YIf-SU; Fri, 18 Jun 2021 11:01:28 +0300 From: Luca Coelho To: kvalo@codeaurora.org Cc: luca@coelho.fi, linux-wireless@vger.kernel.org Date: Fri, 18 Jun 2021 11:01:16 +0300 Message-Id: X-Mailer: git-send-email 2.32.0 In-Reply-To: <20210618080121.588233-1-luca@coelho.fi> References: <20210618080121.588233-1-luca@coelho.fi> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Checker-Version: SpamAssassin 3.4.5-pre1 (2020-06-20) on farmhouse.coelho.fi X-Spam-Level: X-Spam-Status: No, score=-2.9 required=5.0 tests=ALL_TRUSTED,BAYES_00, TVD_RCVD_IP autolearn=ham autolearn_force=no version=3.4.5-pre1 Subject: [PATCH 05/10] iwlwifi: pcie: free IML DMA memory allocation Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org From: Johannes Berg In the case of gen3 devices with image loader (IML) support, we were leaking the IML DMA allocation and never freeing it. Fix that. Signed-off-by: Johannes Berg Signed-off-by: Luca Coelho --- .../wireless/intel/iwlwifi/pcie/ctxt-info-gen3.c | 15 ++++++++++----- .../net/wireless/intel/iwlwifi/pcie/internal.h | 3 +++ 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/drivers/net/wireless/intel/iwlwifi/pcie/ctxt-info-gen3.c b/drivers/net/wireless/intel/iwlwifi/pcie/ctxt-info-gen3.c index 49560e508b5e..c7b9ca264429 100644 --- a/drivers/net/wireless/intel/iwlwifi/pcie/ctxt-info-gen3.c +++ b/drivers/net/wireless/intel/iwlwifi/pcie/ctxt-info-gen3.c @@ -79,7 +79,6 @@ int iwl_pcie_ctxt_info_gen3_init(struct iwl_trans *trans, struct iwl_prph_scratch *prph_scratch; struct iwl_prph_scratch_ctrl_cfg *prph_sc_ctrl; struct iwl_prph_info *prph_info; - void *iml_img; u32 control_flags = 0; int ret; int cmdq_size = max_t(u32, IWL_CMD_QUEUE_SIZE, @@ -190,14 +189,15 @@ int iwl_pcie_ctxt_info_gen3_init(struct iwl_trans *trans, trans_pcie->prph_scratch = prph_scratch; /* Allocate IML */ - iml_img = dma_alloc_coherent(trans->dev, trans->iml_len, - &trans_pcie->iml_dma_addr, GFP_KERNEL); - if (!iml_img) { + trans_pcie->iml = dma_alloc_coherent(trans->dev, trans->iml_len, + &trans_pcie->iml_dma_addr, + GFP_KERNEL); + if (!trans_pcie->iml) { ret = -ENOMEM; goto err_free_ctxt_info; } - memcpy(iml_img, trans->iml, trans->iml_len); + memcpy(trans_pcie->iml, trans->iml, trans->iml_len); iwl_enable_fw_load_int_ctx_info(trans); @@ -244,6 +244,11 @@ void iwl_pcie_ctxt_info_gen3_free(struct iwl_trans *trans) trans_pcie->ctxt_info_dma_addr = 0; trans_pcie->ctxt_info_gen3 = NULL; + dma_free_coherent(trans->dev, trans->iml_len, trans_pcie->iml, + trans_pcie->iml_dma_addr); + trans_pcie->iml_dma_addr = 0; + trans_pcie->iml = NULL; + iwl_pcie_ctxt_info_free_fw_img(trans); dma_free_coherent(trans->dev, sizeof(*trans_pcie->prph_scratch), diff --git a/drivers/net/wireless/intel/iwlwifi/pcie/internal.h b/drivers/net/wireless/intel/iwlwifi/pcie/internal.h index 292b972a25db..69289e9f8d7e 100644 --- a/drivers/net/wireless/intel/iwlwifi/pcie/internal.h +++ b/drivers/net/wireless/intel/iwlwifi/pcie/internal.h @@ -271,6 +271,8 @@ struct cont_rec { * Context information addresses will be taken from here. * This is driver's local copy for keeping track of size and * count for allocating and freeing the memory. + * @iml: image loader image virtual address + * @iml_dma_addr: image loader image DMA address * @trans: pointer to the generic transport area * @scd_base_addr: scheduler sram base address in SRAM * @kw: keep warm address @@ -322,6 +324,7 @@ struct iwl_trans_pcie { }; struct iwl_prph_info *prph_info; struct iwl_prph_scratch *prph_scratch; + void *iml; dma_addr_t ctxt_info_dma_addr; dma_addr_t prph_info_dma_addr; dma_addr_t prph_scratch_dma_addr; -- 2.32.0