Received: by 2002:a05:6a10:5bc5:0:0:0:0 with SMTP id os5csp715415pxb; Sun, 10 Oct 2021 09:24:03 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxjLVt+8fWS3UvYz833sWbWMPV/xOGM/nB1ziqAhAiS5JPjiXUEvIBfxb5od5DXFquVYxiw X-Received: by 2002:a50:d802:: with SMTP id o2mr32852164edj.331.1633883042991; Sun, 10 Oct 2021 09:24:02 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1633883042; cv=none; d=google.com; s=arc-20160816; b=Cs4vFAuFJHfhIFpdjiBs4bPkCsyc9/s/F+eXkrBvvAQGvi42CkRPx/WVza9vbucDaU w0Br0Ibqq23HUnEP4l5JqcmROvROtbOhZ5MxmwkrwLwBrZtu+nxqwyxS75Qz9M9WQwWL BnNJxOM1UWuoElZRvUJxfN0PYLyEnUrnq6khyDhjPo0xKUx4wo70nX8rsRCmJae1wKjN +Gvrt7yKLIN58lkh7sj449eLGDvUE8V5svwL7jUb8TFc7ayhZfv0opw+pXTkQvalnyO7 sotKWXjOquqIUPTkKPtMMys3tKWawWq6nCKcPy1HKxEcl62aqTy3ZjEyLSCDdwexgVHe u42Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:message-id:date:subject:cc:to:from; bh=25ueLG1dR6/vJZO/O46b9qmtv5XSouTg7Fa0hQLJa6Q=; b=pLaLscZ/xInsE/W0xkJNqDYGQsQqyINg7vY3TqLBNdNj2FHKjts3Tnvnz4WTpg2ueQ A7SFvuYUe0cvHwl2/jVrshfr0CbAf9H2YNsybyso/diIPLRixH7dYYvrbElhVPc8pvQm 2B26qriQcEl66172qI5+Nk1Alwz7s7ZqkJgN7/a1cyZZG/NPxM0noTIKqRXK6lSEFxHs vaXHwC7n30OUAj0KLqMiCaq/BaThOPbfegImwhURrxUhEN43E/AiPOFhFbmDbJ7pvufQ jpryaQx5lWmpiqFuqMKLhDD2QeW1CGKcqHtIUbc01JKsuFifik6WH3H+5QhbcXIvm6Ox EDmA== ARC-Authentication-Results: i=1; mx.google.com; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id ap17si7878305ejc.179.2021.10.10.09.23.38; Sun, 10 Oct 2021 09:24:02 -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; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231367AbhJJQEL (ORCPT + 99 others); Sun, 10 Oct 2021 12:04:11 -0400 Received: from mx22.baidu.com ([220.181.50.185]:53692 "EHLO baidu.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S230271AbhJJQEK (ORCPT ); Sun, 10 Oct 2021 12:04:10 -0400 Received: from BJHW-Mail-Ex03.internal.baidu.com (unknown [10.127.64.13]) by Forcepoint Email with ESMTPS id B652381AFE1D5BE5BBF5; Mon, 11 Oct 2021 00:02:09 +0800 (CST) Received: from BJHW-MAIL-EX27.internal.baidu.com (10.127.64.42) by BJHW-Mail-Ex03.internal.baidu.com (10.127.64.13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2308.14; Mon, 11 Oct 2021 00:02:09 +0800 Received: from localhost.localdomain (172.31.63.8) by BJHW-MAIL-EX27.internal.baidu.com (10.127.64.42) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2308.14; Mon, 11 Oct 2021 00:02:08 +0800 From: Cai Huoqing To: CC: Michael Ellerman , Benjamin Herrenschmidt , Paul Mackerras , Peter Huewe , Jarkko Sakkinen , Jason Gunthorpe , , , Subject: [PATCH] tpm: ibmvtpm: Make use of dma_alloc_coherent() Date: Mon, 11 Oct 2021 00:01:45 +0800 Message-ID: <20211010160147.590-1-caihuoqing@baidu.com> X-Mailer: git-send-email 2.17.1 MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [172.31.63.8] X-ClientProxiedBy: BJHW-Mail-Ex16.internal.baidu.com (10.127.64.39) To BJHW-MAIL-EX27.internal.baidu.com (10.127.64.42) Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Replacing kmalloc/kfree/get_zeroed_page/free_page/dma_map_single/ dma_unmap_single() with dma_alloc_coherent/dma_free_coherent() helps to reduce code size, and simplify the code, and coherent DMA will not clear the cache every time. Signed-off-by: Cai Huoqing --- drivers/char/tpm/tpm_ibmvtpm.c | 61 ++++++++++------------------------ 1 file changed, 18 insertions(+), 43 deletions(-) diff --git a/drivers/char/tpm/tpm_ibmvtpm.c b/drivers/char/tpm/tpm_ibmvtpm.c index 3af4c07a9342..5f55a14ee824 100644 --- a/drivers/char/tpm/tpm_ibmvtpm.c +++ b/drivers/char/tpm/tpm_ibmvtpm.c @@ -356,15 +356,12 @@ static void tpm_ibmvtpm_remove(struct vio_dev *vdev) rc = plpar_hcall_norets(H_FREE_CRQ, vdev->unit_address); } while (rc == H_BUSY || H_IS_LONG_BUSY(rc)); - dma_unmap_single(ibmvtpm->dev, ibmvtpm->crq_dma_handle, - CRQ_RES_BUF_SIZE, DMA_BIDIRECTIONAL); - free_page((unsigned long)ibmvtpm->crq_queue.crq_addr); - - if (ibmvtpm->rtce_buf) { - dma_unmap_single(ibmvtpm->dev, ibmvtpm->rtce_dma_handle, - ibmvtpm->rtce_size, DMA_BIDIRECTIONAL); - kfree(ibmvtpm->rtce_buf); - } + dma_free_coherent(ibmvtpm->dev, CRQ_RES_BUF_SIZE, + crq_q->crq_addr, crq_q->crq_dma_handle); + + if (ibmvtpm->rtce_buf) + dma_free_coherent(ibmvtpm->dev, ibmvtpm->rtce_size, + ibmvtpm->rtce_buf, ibmvtpm->rtce_dma_handle); kfree(ibmvtpm); /* For tpm_ibmvtpm_get_desired_dma */ @@ -522,23 +519,12 @@ static void ibmvtpm_crq_process(struct ibmvtpm_crq *crq, return; } ibmvtpm->rtce_size = be16_to_cpu(crq->len); - ibmvtpm->rtce_buf = kmalloc(ibmvtpm->rtce_size, - GFP_ATOMIC); - if (!ibmvtpm->rtce_buf) { - dev_err(ibmvtpm->dev, "Failed to allocate memory for rtce buffer\n"); - return; - } - - ibmvtpm->rtce_dma_handle = dma_map_single(ibmvtpm->dev, - ibmvtpm->rtce_buf, ibmvtpm->rtce_size, - DMA_BIDIRECTIONAL); - - if (dma_mapping_error(ibmvtpm->dev, - ibmvtpm->rtce_dma_handle)) { - kfree(ibmvtpm->rtce_buf); - ibmvtpm->rtce_buf = NULL; - dev_err(ibmvtpm->dev, "Failed to dma map rtce buffer\n"); - } + ibmvtpm->rtce_buf = dma_alloc_coherent(ibmvtpm->dev, + ibmvtpm->rtce_size, + &ibmvtpm->rtce_dma_handle, + GFP_ATOMIC); + if (!ibmvtpm->rtce_buf) + dev_err(ibmvtpm->dev, "Failed to dma allocate rtce buffer\n"); return; case VTPM_GET_VERSION_RES: @@ -618,22 +604,13 @@ static int tpm_ibmvtpm_probe(struct vio_dev *vio_dev, ibmvtpm->vdev = vio_dev; crq_q = &ibmvtpm->crq_queue; - crq_q->crq_addr = (struct ibmvtpm_crq *)get_zeroed_page(GFP_KERNEL); - if (!crq_q->crq_addr) { - dev_err(dev, "Unable to allocate memory for crq_addr\n"); - goto cleanup; - } crq_q->num_entry = CRQ_RES_BUF_SIZE / sizeof(*crq_q->crq_addr); init_waitqueue_head(&crq_q->wq); - ibmvtpm->crq_dma_handle = dma_map_single(dev, crq_q->crq_addr, - CRQ_RES_BUF_SIZE, - DMA_BIDIRECTIONAL); - - if (dma_mapping_error(dev, ibmvtpm->crq_dma_handle)) { - dev_err(dev, "dma mapping failed\n"); + crq_q->crq_addr = dma_alloc_coherent(dev, CRQ_RES_BUF_SIZE, + &ibmvtpm->crq_dma_handle, GFP_KERNEL); + if (!crq_q->crq_addr) goto cleanup; - } rc = plpar_hcall_norets(H_REG_CRQ, vio_dev->unit_address, ibmvtpm->crq_dma_handle, CRQ_RES_BUF_SIZE); @@ -642,7 +619,7 @@ static int tpm_ibmvtpm_probe(struct vio_dev *vio_dev, if (rc) { dev_err(dev, "Unable to register CRQ rc=%d\n", rc); - goto reg_crq_cleanup; + goto cleanup; } rc = request_irq(vio_dev->irq, ibmvtpm_interrupt, 0, @@ -704,13 +681,11 @@ static int tpm_ibmvtpm_probe(struct vio_dev *vio_dev, do { rc1 = plpar_hcall_norets(H_FREE_CRQ, vio_dev->unit_address); } while (rc1 == H_BUSY || H_IS_LONG_BUSY(rc1)); -reg_crq_cleanup: - dma_unmap_single(dev, ibmvtpm->crq_dma_handle, CRQ_RES_BUF_SIZE, - DMA_BIDIRECTIONAL); cleanup: if (ibmvtpm) { if (crq_q->crq_addr) - free_page((unsigned long)crq_q->crq_addr); + dma_free_coherent(dev, CRQ_RES_BUF_SIZE, + crq_q->crq_addr, crq_q->crq_dma_handle); kfree(ibmvtpm); } -- 2.25.1