Received: by 2002:a05:6a10:f3d0:0:0:0:0 with SMTP id a16csp347951pxv; Wed, 14 Jul 2021 05:31:37 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxFew8ca+9/uTr63fglhcFJOgxjV0dePSAx4dkOYeatvZZl1x93paWStmhUxR97FE9TrqDZ X-Received: by 2002:a17:907:3c81:: with SMTP id gl1mr12301956ejc.48.1626265897500; Wed, 14 Jul 2021 05:31:37 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1626265897; cv=none; d=google.com; s=arc-20160816; b=FDvZkESeEcDjXyRzOo47u6YgzwsEfv/uTFkU1DoV+bdOaa+ETj9nXXUHpD/e9AYmU8 l8AvXYadh2y9yy/UpRJ3SKdglUYf86c1xd583JQMjoEhsnkMm6UfcIFd7TaAxO0ulYKw /OUkMoPqAXD+T2Kd1X4OkSNhICQmQim4WilI57ZQLGFz9g2v1/QMHO+ijc4n2GIYrEXB eUf4KcK7snoRh5cOf9fKSWn21g6kEoL9LHPSAutbk65OihH8k3jrLgSlV6u0MeFEFllQ jO8yqOMutO8ZatJqhSWjrBgZAa15jO1xCpgvSHnFGP9O6XXhDHkHkCP4UlQ26bRRJ2jj /Rtw== 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=6OPqYEJkMuyyEknnEJNyrO41JuPQhJGHpTTSDnEQf9U=; b=NV/bQ8BuLF9PEunMa2VyMST7THNgth8caJUjF0M0ewIt4cUuOtA8ZjED4dtQz5tmQX BOMrVowlkuEDMvdKNB5ZobamCciJjNrlyPM5B9d/dOD1Foe++jcCkxthkNQtgmzyMZBP S6DTdFAdn2x75ltz7UZ0SwFk1wJl4dO9Ha/4h8wmJ9bczwn8kD5R76JADlB72gDbJi8m kNrjcM25Bl3Elvl9K1uNE+8snXajmv0ukJhXoIezWkj2ALqpxeo1QU4l5HdeHSW73jun N0C8YJHR06z4BFiKBoM+Ev/ooQzRdgsLmizQxXEcbeY0uM49TpBe7jRG/a/3EdbWFcNo QOyQ== 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=mediatek.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id o2si1041437edc.329.2021.07.14.05.31.14; Wed, 14 Jul 2021 05:31:37 -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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=mediatek.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238984AbhGNMdA (ORCPT + 99 others); Wed, 14 Jul 2021 08:33:00 -0400 Received: from mailgw02.mediatek.com ([210.61.82.184]:34860 "EHLO mailgw02.mediatek.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S230437AbhGNMdA (ORCPT ); Wed, 14 Jul 2021 08:33:00 -0400 X-UUID: 48445f478d4442bcb0cf2e130107744b-20210714 X-UUID: 48445f478d4442bcb0cf2e130107744b-20210714 Received: from mtkcas07.mediatek.inc [(172.21.101.84)] by mailgw02.mediatek.com (envelope-from ) (Generic MTA with TLSv1.2 ECDHE-RSA-AES256-SHA384 256/256) with ESMTP id 1885057935; Wed, 14 Jul 2021 20:30:04 +0800 Received: from mtkcas11.mediatek.inc (172.21.101.40) by mtkmbs01n2.mediatek.inc (172.21.101.79) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Wed, 14 Jul 2021 20:29:56 +0800 Received: from mszswglt01.gcn.mediatek.inc (10.16.20.20) by mtkcas11.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Wed, 14 Jul 2021 20:29:56 +0800 From: To: Sumit Semwal , =?UTF-8?q?Christian=20K=C3=B6nig?= , Matthias Brugger , "open list:DMA BUFFER SHARING FRAMEWORK" , "open list:DMA BUFFER SHARING FRAMEWORK" , "moderated list:DMA BUFFER SHARING FRAMEWORK" , open list , "moderated list:ARM/Mediatek SoC support" , "moderated list:ARM/Mediatek SoC support" CC: , , Guangming Cao Subject: [PATCH] dma-buf: support users to change dma_buf.name Date: Wed, 14 Jul 2021 20:29:54 +0800 Message-ID: <20210714122954.71931-1-guangming.cao@mediatek.com> X-Mailer: git-send-email 2.17.1 MIME-Version: 1.0 Content-Type: text/plain X-MTK: N Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Guangming Cao User space user can call DMA_BUF_SET_NAME to set dma_buf.name, also add a kernel api for users to do same thing at kernel side. Signed-off-by: Guangming Cao --- drivers/dma-buf/dma-buf.c | 28 ++++++++++++++++++++++------ include/linux/dma-buf.h | 1 + 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/drivers/dma-buf/dma-buf.c b/drivers/dma-buf/dma-buf.c index 511fe0d217a0..949af232c644 100644 --- a/drivers/dma-buf/dma-buf.c +++ b/drivers/dma-buf/dma-buf.c @@ -331,20 +331,20 @@ static __poll_t dma_buf_poll(struct file *file, poll_table *poll) * purpose between different devices. * * @dmabuf: [in] dmabuf buffer that will be renamed. - * @buf: [in] A piece of userspace memory that contains the name of + * @buf: [in] A piece of memory that contains the name of * the dma-buf. * * Returns 0 on success. If the dma-buf buffer is already attached to * devices, return -EBUSY. * */ -static long dma_buf_set_name(struct dma_buf *dmabuf, const char __user *buf) +long dma_buf_set_name(struct dma_buf *dmabuf, const char *buf) { - char *name = strndup_user(buf, DMA_BUF_NAME_LEN); + char *name = kstrndup(buf, DMA_BUF_NAME_LEN, GFP_KERNEL); long ret = 0; - if (IS_ERR(name)) - return PTR_ERR(name); + if (!name) + return -ENOMEM; dma_resv_lock(dmabuf->resv, NULL); if (!list_empty(&dmabuf->attachments)) { @@ -361,6 +361,22 @@ static long dma_buf_set_name(struct dma_buf *dmabuf, const char __user *buf) dma_resv_unlock(dmabuf->resv); return ret; } +EXPORT_SYMBOL_GPL(dma_buf_set_name); + +static long +dma_buf_set_name_user(struct dma_buf *dmabuf, const char __user *buf) +{ + char *name = strndup_user(buf, DMA_BUF_NAME_LEN); + long ret = 0; + + if (IS_ERR(name)) + return PTR_ERR(name); + + ret = dma_buf_set_name(dmabuf, name); + kfree(name); + + return ret; +} static long dma_buf_ioctl(struct file *file, unsigned int cmd, unsigned long arg) @@ -403,7 +419,7 @@ static long dma_buf_ioctl(struct file *file, case DMA_BUF_SET_NAME_A: case DMA_BUF_SET_NAME_B: - return dma_buf_set_name(dmabuf, (const char __user *)arg); + return dma_buf_set_name_user(dmabuf, (const char __user *)arg); default: return -ENOTTY; diff --git a/include/linux/dma-buf.h b/include/linux/dma-buf.h index efdc56b9d95f..e6612ab59a59 100644 --- a/include/linux/dma-buf.h +++ b/include/linux/dma-buf.h @@ -507,4 +507,5 @@ int dma_buf_mmap(struct dma_buf *, struct vm_area_struct *, unsigned long); int dma_buf_vmap(struct dma_buf *dmabuf, struct dma_buf_map *map); void dma_buf_vunmap(struct dma_buf *dmabuf, struct dma_buf_map *map); +long dma_buf_set_name(struct dma_buf *dmabuf, const char *name); #endif /* __DMA_BUF_H__ */ -- 2.17.1