From patchwork Wed Oct 30 20:29:50 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Paul X-Patchwork-Id: 11220029 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 2583413B1 for ; Wed, 30 Oct 2019 20:30:30 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 0CD13205C9 for ; Wed, 30 Oct 2019 20:30:30 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 0CD13205C9 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=poorly.run Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 2420E89B95; Wed, 30 Oct 2019 20:30:27 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail-yw1-xc42.google.com (mail-yw1-xc42.google.com [IPv6:2607:f8b0:4864:20::c42]) by gabe.freedesktop.org (Postfix) with ESMTPS id 801BE6EB5B for ; Wed, 30 Oct 2019 20:30:25 +0000 (UTC) Received: by mail-yw1-xc42.google.com with SMTP id r134so1333503ywg.2 for ; Wed, 30 Oct 2019 13:30:25 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Vv4E2R4DDduH7gOW5gr6nuzzSZrTCSv+byUyZpLRTTE=; b=V+G6stqAebjBtGVGqIHthCYp81IU8AIDq4M/FEaUSFL1KzltGEO8RKYeqLMUlE888D aT3+1a6FTVEbXC8xlL3WgDN/qxXU7bs/M9poClwqa3yhXyfNq0rbAfaZFDbQbkmdusMv cFchrG41I+pAXp7FIKnimShMzri6MDx/ofMOrseYUpL74pCjxzgwOQfgvpGEIoKHXNvB tZHPqk75qUyjIOmS++vMEcE5pZqYutbeNqzYQt0dw8WoCJhD/cdawceCbxIQI7yNrYxl XtCBMpnfLE0mhCpsGOfuHNVs7U1x7Fxwg++oXwtlzt7hPzHdUlYUAEfCwD4v9ace14km MSHQ== X-Gm-Message-State: APjAAAXTisLYa4/NZAxZgT6dQvdwn44prjHb5+SoYQc5lErXmGXvavo+ iK5bf4aoYh724Lt5iiPhA6/4KVAIONQ= X-Google-Smtp-Source: APXvYqxWQa4h4JkTIMMIPw8+wSWnljS+fSjFUjrenUtg2wWiliojvoZdcFfziCTdnlmoQN8+vMnxYw== X-Received: by 2002:a81:9a0c:: with SMTP id r12mr1123917ywg.25.1572467424309; Wed, 30 Oct 2019 13:30:24 -0700 (PDT) Received: from rosewood.cam.corp.google.com ([2620:0:1013:11:89c6:2139:5435:371d]) by smtp.gmail.com with ESMTPSA id h35sm416432ywk.63.2019.10.30.13.30.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 30 Oct 2019 13:30:23 -0700 (PDT) From: Sean Paul To: dri-devel@lists.freedesktop.org Subject: [PATCH 1/5] Revert "kselftests: Add dma-heap test" Date: Wed, 30 Oct 2019 16:29:50 -0400 Message-Id: <20191030203003.101156-2-sean@poorly.run> X-Mailer: git-send-email 2.24.0.rc0.303.g954a862665-goog In-Reply-To: <20191030203003.101156-1-sean@poorly.run> References: <20191030203003.101156-1-sean@poorly.run> MIME-Version: 1.0 X-Mailman-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=poorly.run; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Vv4E2R4DDduH7gOW5gr6nuzzSZrTCSv+byUyZpLRTTE=; b=F6ohvfSuD1K3dPQbLXW4qVT1ldk3EN9S3UYr2Fv+zB5StGxlIOGR3r99l9KqsCGPcU Nps9sxIV051Ttc9Ysghr+j/x2jUr2eoUHNqnPpxmh17a+Sx2Y8ifaFCpd2SXKa++b7sK BgE+DEnF47Je+DASfxaCbDOXIAMpGTozi87guTrDzQ2yoii4B88U3UMBk2FCCoIL2Poz dT/RstoVtc0+/p5caClnjEwULMfLbCK5VLhCoI9eZ3oDqVkI713TTRaIZero7YUS+q9u xUdnU9hBtloNUt5ihNEKk5fsCNCOxNDPV+EQ0cq8/+0dyPq/lv/cjEPr00RyFIDz4n+s MzDA== X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Hillf Danton , Vincent Donnefort , Sean Paul , Chenbo Feng , Alistair Strachan , Liam Mark , Christoph Hellwig , Sean Paul , "Andrew F . Davis" , Hridya Valsaraju , Sudipto Paul , Pratik Patel Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" From: Sean Paul This reverts commit ab87cc9754cdeb373c8ac030ac7aed92f450b767. This patchset doesn't meet the UAPI requirements set out in [1] for the DRM subsystem. Once the userspace component is reviewed and ready for merge we can try again. [1]- https://01.org/linuxgraphics/gfx-docs/drm/gpu/drm-uapi.html#open-source-userspace-requirements Fixes: ab87cc9754cd ("kselftests: Add dma-heap test") Cc: Benjamin Gaignard Cc: Sumit Semwal Cc: Liam Mark Cc: Pratik Patel Cc: Brian Starkey Cc: Vincent Donnefort Cc: Sudipto Paul Cc: Andrew F. Davis Cc: Christoph Hellwig Cc: Chenbo Feng Cc: Alistair Strachan Cc: Hridya Valsaraju Cc: Hillf Danton Cc: dri-devel@lists.freedesktop.org Cc: Brian Starkey Cc: Laura Abbott Cc: John Stultz Cc: Sean Paul Signed-off-by: Sean Paul --- tools/testing/selftests/dmabuf-heaps/Makefile | 9 - .../selftests/dmabuf-heaps/dmabuf-heap.c | 238 ------------------ 2 files changed, 247 deletions(-) delete mode 100644 tools/testing/selftests/dmabuf-heaps/Makefile delete mode 100644 tools/testing/selftests/dmabuf-heaps/dmabuf-heap.c diff --git a/tools/testing/selftests/dmabuf-heaps/Makefile b/tools/testing/selftests/dmabuf-heaps/Makefile deleted file mode 100644 index 8c4c36e2972d..000000000000 --- a/tools/testing/selftests/dmabuf-heaps/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0 -CFLAGS += -static -O3 -Wl,-no-as-needed -Wall -#LDLIBS += -lrt -lpthread -lm - -# these are all "safe" tests that don't modify -# system time or require escalated privileges -TEST_GEN_PROGS = dmabuf-heap - -include ../lib.mk diff --git a/tools/testing/selftests/dmabuf-heaps/dmabuf-heap.c b/tools/testing/selftests/dmabuf-heaps/dmabuf-heap.c deleted file mode 100644 index b36dd9f35c19..000000000000 --- a/tools/testing/selftests/dmabuf-heaps/dmabuf-heap.c +++ /dev/null @@ -1,238 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0 - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#include "../../../../include/uapi/linux/dma-heap.h" - -#define DEVPATH "/dev/dma_heap" - -static int check_vgem(int fd) -{ - drm_version_t version = { 0 }; - char name[5]; - int ret; - - version.name_len = 4; - version.name = name; - - ret = ioctl(fd, DRM_IOCTL_VERSION, &version); - if (ret) - return 0; - - return !strcmp(name, "vgem"); -} - -static int open_vgem(void) -{ - int i, fd; - const char *drmstr = "/dev/dri/card"; - - fd = -1; - for (i = 0; i < 16; i++) { - char name[80]; - - snprintf(name, 80, "%s%u", drmstr, i); - - fd = open(name, O_RDWR); - if (fd < 0) - continue; - - if (!check_vgem(fd)) { - close(fd); - fd = -1; - continue; - } else { - break; - } - } - return fd; -} - -static int import_vgem_fd(int vgem_fd, int dma_buf_fd, uint32_t *handle) -{ - struct drm_prime_handle import_handle = { - .fd = dma_buf_fd, - .flags = 0, - .handle = 0, - }; - int ret; - - ret = ioctl(vgem_fd, DRM_IOCTL_PRIME_FD_TO_HANDLE, &import_handle); - if (ret == 0) - *handle = import_handle.handle; - return ret; -} - -static void close_handle(int vgem_fd, uint32_t handle) -{ - struct drm_gem_close close = { - .handle = handle, - }; - - ioctl(vgem_fd, DRM_IOCTL_GEM_CLOSE, &close); -} - -static int dmabuf_heap_open(char *name) -{ - int ret, fd; - char buf[256]; - - ret = snprintf(buf, 256, "%s/%s", DEVPATH, name); - if (ret < 0) { - printf("snprintf failed!\n"); - return ret; - } - - fd = open(buf, O_RDWR); - if (fd < 0) - printf("open %s failed!\n", buf); - return fd; -} - -static int dmabuf_heap_alloc(int fd, size_t len, unsigned int flags, - int *dmabuf_fd) -{ - struct dma_heap_allocation_data data = { - .len = len, - .fd_flags = O_RDWR | O_CLOEXEC, - .heap_flags = flags, - }; - int ret; - - if (!dmabuf_fd) - return -EINVAL; - - ret = ioctl(fd, DMA_HEAP_IOC_ALLOC, &data); - if (ret < 0) - return ret; - *dmabuf_fd = (int)data.fd; - return ret; -} - -static void dmabuf_sync(int fd, int start_stop) -{ - struct dma_buf_sync sync = { - .flags = start_stop | DMA_BUF_SYNC_RW, - }; - int ret; - - ret = ioctl(fd, DMA_BUF_IOCTL_SYNC, &sync); - if (ret) - printf("sync failed %d\n", errno); -} - -#define ONE_MEG (1024 * 1024) - -static int do_test(char *heap_name) -{ - int heap_fd = -1, dmabuf_fd = -1, importer_fd = -1; - uint32_t handle = 0; - void *p = NULL; - int ret; - - printf("Testing heap: %s\n", heap_name); - - heap_fd = dmabuf_heap_open(heap_name); - if (heap_fd < 0) - return; - - printf("Allocating 1 MEG\n"); - ret = dmabuf_heap_alloc(heap_fd, ONE_MEG, 0, &dmabuf_fd); - if (ret) { - printf("Allocation Failed!\n"); - ret = -1; - goto out; - } - /* mmap and write a simple pattern */ - p = mmap(NULL, - ONE_MEG, - PROT_READ | PROT_WRITE, - MAP_SHARED, - dmabuf_fd, - 0); - if (p == MAP_FAILED) { - printf("mmap() failed: %m\n"); - ret = -1; - goto out; - } - printf("mmap passed\n"); - - dmabuf_sync(dmabuf_fd, DMA_BUF_SYNC_START); - memset(p, 1, ONE_MEG / 2); - memset((char *)p + ONE_MEG / 2, 0, ONE_MEG / 2); - dmabuf_sync(dmabuf_fd, DMA_BUF_SYNC_END); - - importer_fd = open_vgem(); - if (importer_fd < 0) { - ret = importer_fd; - printf("Failed to open vgem\n"); - goto out; - } - - ret = import_vgem_fd(importer_fd, dmabuf_fd, &handle); - if (ret < 0) { - printf("Failed to import buffer\n"); - goto out; - } - printf("import passed\n"); - - dmabuf_sync(dmabuf_fd, DMA_BUF_SYNC_START); - memset(p, 0xff, ONE_MEG); - dmabuf_sync(dmabuf_fd, DMA_BUF_SYNC_END); - printf("syncs passed\n"); - - close_handle(importer_fd, handle); - ret = 0; - -out: - if (p) - munmap(p, ONE_MEG); - if (importer_fd >= 0) - close(importer_fd); - if (dmabuf_fd >= 0) - close(dmabuf_fd); - if (heap_fd >= 0) - close(heap_fd); - - return ret; -} - -int main(void) -{ - DIR *d; - struct dirent *dir; - int ret = -1; - - d = opendir(DEVPATH); - if (!d) { - printf("No %s directory?\n", DEVPATH); - return -1; - } - - while ((dir = readdir(d)) != NULL) { - if (!strncmp(dir->d_name, ".", 2)) - continue; - if (!strncmp(dir->d_name, "..", 3)) - continue; - - ret = do_test(dir->d_name); - if (ret) - break; - } - closedir(d); - - return ret; -} From patchwork Wed Oct 30 20:29:51 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Paul X-Patchwork-Id: 11220033 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 757F51390 for ; Wed, 30 Oct 2019 20:30:37 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 5D0EE205C9 for ; Wed, 30 Oct 2019 20:30:37 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 5D0EE205C9 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=poorly.run Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id A1F9B6EB5B; Wed, 30 Oct 2019 20:30:36 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail-yw1-xc43.google.com (mail-yw1-xc43.google.com [IPv6:2607:f8b0:4864:20::c43]) by gabe.freedesktop.org (Postfix) with ESMTPS id A01A76EB5B for ; Wed, 30 Oct 2019 20:30:35 +0000 (UTC) Received: by mail-yw1-xc43.google.com with SMTP id s6so1322511ywe.5 for ; Wed, 30 Oct 2019 13:30:35 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=B6FpqH14hFft7pUWCQ+8hRUCMFY4DUkbPtttlr/k7RM=; b=ate/C2h4OabQ5mFudcN7+Hb/KBFsputP1OGEJxjssI/7mlA7S7Lw7n/ylhfX2B7MPP QUX3nrMQ/cB60N4x9xJ80mxLhbxbSXo6Fd9VDapSLJp/++iGVgt3WQ0A6xZlVNoUjB/6 uuJNiEtF5GnoM5kZotijp6lCHyUbL7Rznn/0vSsqTUkioQ0OJX1hq7+xZQj9GoXU+OvW XgQP+ctOu2NvTOK6mepL0DHbnLVbXYHeIK7r95ovRUyTwutuH7ErohjCBYYdwqJ0o7Az rb6OVmHhG1X2sdy19tsuyRvBRkgd9XrmdGMsOILgvJav6lP9tPpiFPluhIhxxCnyWgIG 3s3Q== X-Gm-Message-State: APjAAAWMw7WSkoNmbco6KX9WoQdFGhHWPEtAlocFTP9lZOc7idA5xjUu SYhhkCL1MEHvzDbLFT8W3JSCQK6dNaE= X-Google-Smtp-Source: APXvYqxVmw7MSEY0/hT9ZuOQEeutP/O+A9xovHgU06e0lgM12WV0zQ7f9zSKsH2a4mRdS7LHJiD1mw== X-Received: by 2002:a81:7ac2:: with SMTP id v185mr1184192ywc.458.1572467434346; Wed, 30 Oct 2019 13:30:34 -0700 (PDT) Received: from rosewood.cam.corp.google.com ([2620:0:1013:11:89c6:2139:5435:371d]) by smtp.gmail.com with ESMTPSA id h35sm416432ywk.63.2019.10.30.13.30.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 30 Oct 2019 13:30:33 -0700 (PDT) From: Sean Paul To: dri-devel@lists.freedesktop.org Subject: [PATCH 2/5] Revert "dma-buf: heaps: Add CMA heap to dmabuf heaps" Date: Wed, 30 Oct 2019 16:29:51 -0400 Message-Id: <20191030203003.101156-3-sean@poorly.run> X-Mailer: git-send-email 2.24.0.rc0.303.g954a862665-goog In-Reply-To: <20191030203003.101156-1-sean@poorly.run> References: <20191030203003.101156-1-sean@poorly.run> MIME-Version: 1.0 X-Mailman-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=poorly.run; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=B6FpqH14hFft7pUWCQ+8hRUCMFY4DUkbPtttlr/k7RM=; b=c/zVOMBC7jXLlWCXXTHISUru8FH/BOffylDZJmm0E7TPw9r8GsXiVQp18gniOkbYBp 9wQQEIMB0xuHF2YhqNEBcvXhsUrW5aoG9dHz1B0geXTShvJaYmjM2Xs784NZoS7M0RSo TftqEsT8UtiRwMy6q3x0BLbbbRzk0O+CX8eXQ+idhREI/DfQAFGEpgePPfRSfnqBAIUo 3dXAu5FF8E1docOp/4GWgMJsBr8KiMTRxdQhAdtr5mMskiBasI60DsQKljdEsSgeKhze C3XW7L1rXTIURbemEq11LZc30LkIacHPBlCPyHvNwkzFOVcHf+ZpiFExRgBM5935s9wq pt9Q== X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linaro-mm-sig@lists.linaro.org, Hillf Danton , Sudipto Paul , Vincent Donnefort , Sean Paul , Chenbo Feng , Alistair Strachan , Liam Mark , Christoph Hellwig , Sean Paul , "Andrew F . Davis" , Hridya Valsaraju , Pratik Patel , linux-media@vger.kernel.org Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" From: Sean Paul This reverts commit 43d7238fb9ac897b29912368b3359e72bae469c4. This patchset doesn't meet the UAPI requirements set out in [1] for the DRM subsystem. Once the userspace component is reviewed and ready for merge we can try again. [1]- https://01.org/linuxgraphics/gfx-docs/drm/gpu/drm-uapi.html#open-source-userspace-requirements Fixes: 43d7238fb9ac ("dma-buf: heaps: Add CMA heap to dmabuf heaps") Cc: Laura Abbott Cc: Benjamin Gaignard Cc: Sumit Semwal Cc: Liam Mark Cc: Pratik Patel Cc: Brian Starkey Cc: Vincent Donnefort Cc: Sudipto Paul Cc: Andrew F. Davis Cc: Christoph Hellwig Cc: Chenbo Feng Cc: Alistair Strachan Cc: Hridya Valsaraju Cc: Hillf Danton Cc: dri-devel@lists.freedesktop.org Cc: Brian Starkey Cc: John Stultz Cc: "Andrew F. Davis" Cc: linux-media@vger.kernel.org Cc: linaro-mm-sig@lists.linaro.org Signed-off-by: Sean Paul --- drivers/dma-buf/heaps/Kconfig | 8 -- drivers/dma-buf/heaps/Makefile | 1 - drivers/dma-buf/heaps/cma_heap.c | 178 ------------------------------- 3 files changed, 187 deletions(-) delete mode 100644 drivers/dma-buf/heaps/cma_heap.c diff --git a/drivers/dma-buf/heaps/Kconfig b/drivers/dma-buf/heaps/Kconfig index a5eef06c4226..205052744169 100644 --- a/drivers/dma-buf/heaps/Kconfig +++ b/drivers/dma-buf/heaps/Kconfig @@ -4,11 +4,3 @@ config DMABUF_HEAPS_SYSTEM help Choose this option to enable the system dmabuf heap. The system heap is backed by pages from the buddy allocator. If in doubt, say Y. - -config DMABUF_HEAPS_CMA - bool "DMA-BUF CMA Heap" - depends on DMABUF_HEAPS && DMA_CMA - help - Choose this option to enable dma-buf CMA heap. This heap is backed - by the Contiguous Memory Allocator (CMA). If your system has these - regions, you should say Y here. diff --git a/drivers/dma-buf/heaps/Makefile b/drivers/dma-buf/heaps/Makefile index 6e54cdec3da0..d1808eca2581 100644 --- a/drivers/dma-buf/heaps/Makefile +++ b/drivers/dma-buf/heaps/Makefile @@ -1,4 +1,3 @@ # SPDX-License-Identifier: GPL-2.0 obj-y += heap-helpers.o obj-$(CONFIG_DMABUF_HEAPS_SYSTEM) += system_heap.o -obj-$(CONFIG_DMABUF_HEAPS_CMA) += cma_heap.o diff --git a/drivers/dma-buf/heaps/cma_heap.c b/drivers/dma-buf/heaps/cma_heap.c deleted file mode 100644 index 064926b5d735..000000000000 --- a/drivers/dma-buf/heaps/cma_heap.c +++ /dev/null @@ -1,178 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0 -/* - * DMABUF CMA heap exporter - * - * Copyright (C) 2012, 2019 Linaro Ltd. - * Author: for ST-Ericsson. - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "heap-helpers.h" - -struct cma_heap { - struct dma_heap *heap; - struct cma *cma; -}; - -static void cma_heap_free(struct heap_helper_buffer *buffer) -{ - struct cma_heap *cma_heap = dma_heap_get_drvdata(buffer->heap); - unsigned long nr_pages = buffer->pagecount; - struct page *cma_pages = buffer->priv_virt; - - /* free page list */ - kfree(buffer->pages); - /* release memory */ - cma_release(cma_heap->cma, cma_pages, nr_pages); - kfree(buffer); -} - -/* dmabuf heap CMA operations functions */ -static int cma_heap_allocate(struct dma_heap *heap, - unsigned long len, - unsigned long fd_flags, - unsigned long heap_flags) -{ - struct cma_heap *cma_heap = dma_heap_get_drvdata(heap); - struct heap_helper_buffer *helper_buffer; - struct page *cma_pages; - size_t size = PAGE_ALIGN(len); - unsigned long nr_pages = size >> PAGE_SHIFT; - unsigned long align = get_order(size); - struct dma_buf *dmabuf; - int ret = -ENOMEM; - pgoff_t pg; - - if (align > CONFIG_CMA_ALIGNMENT) - align = CONFIG_CMA_ALIGNMENT; - - helper_buffer = kzalloc(sizeof(*helper_buffer), GFP_KERNEL); - if (!helper_buffer) - return -ENOMEM; - - init_heap_helper_buffer(helper_buffer, cma_heap_free); - helper_buffer->flags = heap_flags; - helper_buffer->heap = heap; - helper_buffer->size = len; - - cma_pages = cma_alloc(cma_heap->cma, nr_pages, align, false); - if (!cma_pages) - goto free_buf; - - if (PageHighMem(cma_pages)) { - unsigned long nr_clear_pages = nr_pages; - struct page *page = cma_pages; - - while (nr_clear_pages > 0) { - void *vaddr = kmap_atomic(page); - - memset(vaddr, 0, PAGE_SIZE); - kunmap_atomic(vaddr); - /* - * Avoid wasting time zeroing memory if the process - * has been killed by by SIGKILL - */ - if (fatal_signal_pending(current)) - goto free_cma; - - page++; - nr_clear_pages--; - } - } else { - memset(page_address(cma_pages), 0, size); - } - - helper_buffer->pagecount = nr_pages; - helper_buffer->pages = kmalloc_array(helper_buffer->pagecount, - sizeof(*helper_buffer->pages), - GFP_KERNEL); - if (!helper_buffer->pages) { - ret = -ENOMEM; - goto free_cma; - } - - for (pg = 0; pg < helper_buffer->pagecount; pg++) - helper_buffer->pages[pg] = &cma_pages[pg]; - - /* create the dmabuf */ - dmabuf = heap_helper_export_dmabuf(helper_buffer, fd_flags); - if (IS_ERR(dmabuf)) { - ret = PTR_ERR(dmabuf); - goto free_pages; - } - - helper_buffer->dmabuf = dmabuf; - helper_buffer->priv_virt = cma_pages; - - ret = dma_buf_fd(dmabuf, fd_flags); - if (ret < 0) { - dma_buf_put(dmabuf); - /* just return, as put will call release and that will free */ - return ret; - } - - return ret; - -free_pages: - kfree(helper_buffer->pages); -free_cma: - cma_release(cma_heap->cma, cma_pages, nr_pages); -free_buf: - kfree(helper_buffer); - return ret; -} - -static const struct dma_heap_ops cma_heap_ops = { - .allocate = cma_heap_allocate, -}; - -static int __add_cma_heap(struct cma *cma, void *data) -{ - struct cma_heap *cma_heap; - struct dma_heap_export_info exp_info; - - cma_heap = kzalloc(sizeof(*cma_heap), GFP_KERNEL); - if (!cma_heap) - return -ENOMEM; - cma_heap->cma = cma; - - exp_info.name = cma_get_name(cma); - exp_info.ops = &cma_heap_ops; - exp_info.priv = cma_heap; - - cma_heap->heap = dma_heap_add(&exp_info); - if (IS_ERR(cma_heap->heap)) { - int ret = PTR_ERR(cma_heap->heap); - - kfree(cma_heap); - return ret; - } - - return 0; -} - -static int add_default_cma_heap(void) -{ - struct cma *default_cma = dev_get_cma_area(NULL); - int ret = 0; - - if (default_cma) - ret = __add_cma_heap(default_cma, NULL); - - return ret; -} -module_init(add_default_cma_heap); -MODULE_DESCRIPTION("DMA-BUF CMA Heap"); -MODULE_LICENSE("GPL v2"); From patchwork Wed Oct 30 20:29:52 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Paul X-Patchwork-Id: 11220039 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 12F301390 for ; Wed, 30 Oct 2019 20:30:42 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id EECF7205C9 for ; Wed, 30 Oct 2019 20:30:41 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org EECF7205C9 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=poorly.run Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 0CC506EB68; Wed, 30 Oct 2019 20:30:41 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail-yb1-xb42.google.com (mail-yb1-xb42.google.com [IPv6:2607:f8b0:4864:20::b42]) by gabe.freedesktop.org (Postfix) with ESMTPS id 1F8746EB65 for ; Wed, 30 Oct 2019 20:30:39 +0000 (UTC) Received: by mail-yb1-xb42.google.com with SMTP id b2so1452201ybr.8 for ; Wed, 30 Oct 2019 13:30:39 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=PkjdSrZ3E9zkQ9Ztn0Eu35FRE4gi9xnr1qako38BwjY=; b=XBBd0Da8yMGHDjeyMDJqqOuORDc73kDZVhwKhJ6+OlMux0NIcEo2FFnr4gJs3yReHK Mg1HmSHgVbYfnPBaTPn5mj3gXYAR0RCsBkWcd6HX4w36plsTnL8hr8lYzHp+Z3kZokTT 0h84ob1U7T1zL04pEISYYCPkTcCEV2f8cZ63Ti60ELcONPkiJpH3NAFNZ746JoD04Gnc QS2idD+qexDJmEkuerzD0usCiIYCMoqlAKASGZiZ83JZLgArHfESnf60IT29LxhTFMex Z04GDPNyiSWRR2luZtmvkyw7vFbnNFCVFwNajFEXuJ1jZc1VperKthptF4TzVz5M1Qnr k3SQ== X-Gm-Message-State: APjAAAW9iEhRhhB+df3mQ1TqyLHG1DQDS1oBF13Lor9kMCnbd1khu3vZ c4Tn8dARjXas7Di7K43P0oaa0OoObEU= X-Google-Smtp-Source: APXvYqwxPm0bXgofifeJ0R7QvHZxz1P4sKd8T9IX39XjcztKk7AvxE3dV6X4teUseQWhwbXc6Z9NGw== X-Received: by 2002:a25:868c:: with SMTP id z12mr960656ybk.441.1572467437614; Wed, 30 Oct 2019 13:30:37 -0700 (PDT) Received: from rosewood.cam.corp.google.com ([2620:0:1013:11:89c6:2139:5435:371d]) by smtp.gmail.com with ESMTPSA id h35sm416432ywk.63.2019.10.30.13.30.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 30 Oct 2019 13:30:37 -0700 (PDT) From: Sean Paul To: dri-devel@lists.freedesktop.org Subject: [PATCH 3/5] Revert "dma-buf: heaps: Add system heap to dmabuf heaps" Date: Wed, 30 Oct 2019 16:29:52 -0400 Message-Id: <20191030203003.101156-4-sean@poorly.run> X-Mailer: git-send-email 2.24.0.rc0.303.g954a862665-goog In-Reply-To: <20191030203003.101156-1-sean@poorly.run> References: <20191030203003.101156-1-sean@poorly.run> MIME-Version: 1.0 X-Mailman-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=poorly.run; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=PkjdSrZ3E9zkQ9Ztn0Eu35FRE4gi9xnr1qako38BwjY=; b=bXWhFOKqFT4ecf1J8QwN8+Y/njrkZZAOULWzlmxqAyVEHq64jDkc3QDGlsqaqOTJxA RU6bJ3xXxaOnBsZhKwKaPxlRqNJTjXabdzjvYZZ9QVlOQIcKXPBeFNLcaMsBRWQjLuTS 6pcTPLkuxNOgDV/5Sqxo7LHJ4Z1i0Z9P+EjQV1auh6+Pv3PQQqr2/HyA2eA7oKddotjj bn/XKr8hUdve6/9EQJ+I0PXOG4Y0xKkaVOsU6IZs0CBjBrmRf5+zjvNAFSdFXRKTmFNt w44k1rACUIKYxsoccnnr6GjrNe2tKV0R07MwGRgw52AFaVL8e8ezL4ZS8Z5A82i+eGQk EmLQ== X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linaro-mm-sig@lists.linaro.org, Hillf Danton , Sudipto Paul , Vincent Donnefort , Sean Paul , Chenbo Feng , Alistair Strachan , Liam Mark , Christoph Hellwig , Sean Paul , "Andrew F . Davis" , Hridya Valsaraju , Pratik Patel , linux-media@vger.kernel.org Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" From: Sean Paul This reverts commit 47a32f9c12266d450b92089148c6039591bd9909. This patchset doesn't meet the UAPI requirements set out in [1] for the DRM subsystem. Once the userspace component is reviewed and ready for merge we can try again. [1]- https://01.org/linuxgraphics/gfx-docs/drm/gpu/drm-uapi.html#open-source-userspace-requirements Fixes: 47a32f9c1226 ("dma-buf: heaps: Add system heap to dmabuf heaps") Cc: Laura Abbott Cc: Benjamin Gaignard Cc: Sumit Semwal Cc: Liam Mark Cc: Pratik Patel Cc: Brian Starkey Cc: Vincent Donnefort Cc: Sudipto Paul Cc: Andrew F. Davis Cc: Christoph Hellwig Cc: Chenbo Feng Cc: Alistair Strachan Cc: Hridya Valsaraju Cc: Hillf Danton Cc: dri-devel@lists.freedesktop.org Cc: Brian Starkey Cc: John Stultz Cc: "Andrew F. Davis" Cc: linux-media@vger.kernel.org Cc: linaro-mm-sig@lists.linaro.org Signed-off-by: Sean Paul --- drivers/dma-buf/Kconfig | 2 - drivers/dma-buf/heaps/Kconfig | 6 -- drivers/dma-buf/heaps/Makefile | 1 - drivers/dma-buf/heaps/system_heap.c | 124 ---------------------------- 4 files changed, 133 deletions(-) delete mode 100644 drivers/dma-buf/heaps/Kconfig delete mode 100644 drivers/dma-buf/heaps/system_heap.c diff --git a/drivers/dma-buf/Kconfig b/drivers/dma-buf/Kconfig index 0613bb7770f5..bffa58fc3e6e 100644 --- a/drivers/dma-buf/Kconfig +++ b/drivers/dma-buf/Kconfig @@ -53,6 +53,4 @@ menuconfig DMABUF_HEAPS allows userspace to allocate dma-bufs that can be shared between drivers. -source "drivers/dma-buf/heaps/Kconfig" - endmenu diff --git a/drivers/dma-buf/heaps/Kconfig b/drivers/dma-buf/heaps/Kconfig deleted file mode 100644 index 205052744169..000000000000 --- a/drivers/dma-buf/heaps/Kconfig +++ /dev/null @@ -1,6 +0,0 @@ -config DMABUF_HEAPS_SYSTEM - bool "DMA-BUF System Heap" - depends on DMABUF_HEAPS - help - Choose this option to enable the system dmabuf heap. The system heap - is backed by pages from the buddy allocator. If in doubt, say Y. diff --git a/drivers/dma-buf/heaps/Makefile b/drivers/dma-buf/heaps/Makefile index d1808eca2581..de49898112db 100644 --- a/drivers/dma-buf/heaps/Makefile +++ b/drivers/dma-buf/heaps/Makefile @@ -1,3 +1,2 @@ # SPDX-License-Identifier: GPL-2.0 obj-y += heap-helpers.o -obj-$(CONFIG_DMABUF_HEAPS_SYSTEM) += system_heap.o diff --git a/drivers/dma-buf/heaps/system_heap.c b/drivers/dma-buf/heaps/system_heap.c deleted file mode 100644 index 455782efbb32..000000000000 --- a/drivers/dma-buf/heaps/system_heap.c +++ /dev/null @@ -1,124 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0 -/* - * DMABUF System heap exporter - * - * Copyright (C) 2011 Google, Inc. - * Copyright (C) 2019 Linaro Ltd. - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "heap-helpers.h" - -struct dma_heap *sys_heap; - -static void system_heap_free(struct heap_helper_buffer *buffer) -{ - pgoff_t pg; - - for (pg = 0; pg < buffer->pagecount; pg++) - __free_page(buffer->pages[pg]); - kfree(buffer->pages); - kfree(buffer); -} - -static int system_heap_allocate(struct dma_heap *heap, - unsigned long len, - unsigned long fd_flags, - unsigned long heap_flags) -{ - struct heap_helper_buffer *helper_buffer; - struct dma_buf *dmabuf; - int ret = -ENOMEM; - pgoff_t pg; - - helper_buffer = kzalloc(sizeof(*helper_buffer), GFP_KERNEL); - if (!helper_buffer) - return -ENOMEM; - - init_heap_helper_buffer(helper_buffer, system_heap_free); - helper_buffer->flags = heap_flags; - helper_buffer->heap = heap; - helper_buffer->size = len; - - helper_buffer->pagecount = len / PAGE_SIZE; - helper_buffer->pages = kmalloc_array(helper_buffer->pagecount, - sizeof(*helper_buffer->pages), - GFP_KERNEL); - if (!helper_buffer->pages) { - ret = -ENOMEM; - goto err0; - } - - for (pg = 0; pg < helper_buffer->pagecount; pg++) { - /* - * Avoid trying to allocate memory if the process - * has been killed by by SIGKILL - */ - if (fatal_signal_pending(current)) - goto err1; - - helper_buffer->pages[pg] = alloc_page(GFP_KERNEL | __GFP_ZERO); - if (!helper_buffer->pages[pg]) - goto err1; - } - - /* create the dmabuf */ - dmabuf = heap_helper_export_dmabuf(helper_buffer, fd_flags); - if (IS_ERR(dmabuf)) { - ret = PTR_ERR(dmabuf); - goto err1; - } - - helper_buffer->dmabuf = dmabuf; - - ret = dma_buf_fd(dmabuf, fd_flags); - if (ret < 0) { - dma_buf_put(dmabuf); - /* just return, as put will call release and that will free */ - return ret; - } - - return ret; - -err1: - while (pg > 0) - __free_page(helper_buffer->pages[--pg]); - kfree(helper_buffer->pages); -err0: - kfree(helper_buffer); - - return -ENOMEM; -} - -static const struct dma_heap_ops system_heap_ops = { - .allocate = system_heap_allocate, -}; - -static int system_heap_create(void) -{ - struct dma_heap_export_info exp_info; - int ret = 0; - - exp_info.name = "system_heap"; - exp_info.ops = &system_heap_ops; - exp_info.priv = NULL; - - sys_heap = dma_heap_add(&exp_info); - if (IS_ERR(sys_heap)) - ret = PTR_ERR(sys_heap); - - return ret; -} -module_init(system_heap_create); -MODULE_LICENSE("GPL v2"); From patchwork Wed Oct 30 20:29:53 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Paul X-Patchwork-Id: 11220045 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 4D6D11390 for ; Wed, 30 Oct 2019 20:30:48 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 348E9205C9 for ; Wed, 30 Oct 2019 20:30:48 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 348E9205C9 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=poorly.run Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 170986EB7F; Wed, 30 Oct 2019 20:30:45 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail-yw1-xc41.google.com (mail-yw1-xc41.google.com [IPv6:2607:f8b0:4864:20::c41]) by gabe.freedesktop.org (Postfix) with ESMTPS id 2743F6EB6C for ; Wed, 30 Oct 2019 20:30:41 +0000 (UTC) Received: by mail-yw1-xc41.google.com with SMTP id v5so1340446ywd.0 for ; Wed, 30 Oct 2019 13:30:41 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=0iBo/bpNtAVrnbwT8ORdTsmBQ3tCsfrYh7X/5nVkhVU=; b=Tq/Zt+tdBDaWLzSJ+9Ia9+Ddyk1thwwAB65hF18FeZ3cfRTL4Vmcu87xmTT1mmVJRT HHuO/OhpNuliB6gWF9Dx+v10Jsm4wTtwvQHMOgD1+fsm+mWJy2qtVg7PY4MDtx/9T+6l rUWP01UBbZfxDE2SHmdkK8RC7gVy7AW6nGqXM+cEU/dnhQAhpg18tk2yGTR2GGMJkedE Fk68WRQ+0zIxZVrrsfYoPJYrQDGy1cQbO5pTzYgpPezTtVEA5vSm86O9uXxUIq20JCep yfh6VtPNm0gjPKWOpUlsWyOeqr+aWTMMloPtq9xu6R9auFSTno7+UN2KlgwEjJUfDv/r RLyA== X-Gm-Message-State: APjAAAUJFV4yP1B1NfBx3XyGz7cxrQnPNoZZePcDmfhnfaw6M1JTt0Aq 3dVkOTjN8Mm4Uv9YOXNkmZbKd6w0Qow= X-Google-Smtp-Source: APXvYqy7rZgsd+H15gO6kjJK6vT/+nsedm0Tz3xNmECn4AxRjr5B5buY0zEMWSyAeegESWU3bEsKpA== X-Received: by 2002:a81:7145:: with SMTP id m66mr1156673ywc.464.1572467439849; Wed, 30 Oct 2019 13:30:39 -0700 (PDT) Received: from rosewood.cam.corp.google.com ([2620:0:1013:11:89c6:2139:5435:371d]) by smtp.gmail.com with ESMTPSA id h35sm416432ywk.63.2019.10.30.13.30.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 30 Oct 2019 13:30:39 -0700 (PDT) From: Sean Paul To: dri-devel@lists.freedesktop.org Subject: [PATCH 4/5] Revert "dma-buf: heaps: Add heap helpers" Date: Wed, 30 Oct 2019 16:29:53 -0400 Message-Id: <20191030203003.101156-5-sean@poorly.run> X-Mailer: git-send-email 2.24.0.rc0.303.g954a862665-goog In-Reply-To: <20191030203003.101156-1-sean@poorly.run> References: <20191030203003.101156-1-sean@poorly.run> MIME-Version: 1.0 X-Mailman-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=poorly.run; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=0iBo/bpNtAVrnbwT8ORdTsmBQ3tCsfrYh7X/5nVkhVU=; b=daa0DwFs97qSaEVrqvIAVBntB/wqc3brv/BDyNmxKTkpHIGCpVMdqAHr2asWx3NyPJ cZdq6cnN//jB6T3we9XQlpKYaYswqDl3UbbIwZmPnk7NlFwyjVHJcj9MpbBDlsE3zAxC Ol6KtaXo7iH5iRv8yrShGd19KmwzsW4gb9ljexWdoeUqAv4bB+Wvlru0lSqW6IMRselG YRKAE8vka/eblp2XQ0514amxyygBdMkIR+StWBxHSxcxTA0ECuDoIfjlHDOBu8BOETvN 0yhyHSAY8Kx0A4F50uf2L89nGedfK7EB+7fQSQLg7mJOBZWhfA+h9km9Do7uLz71NIGG qdkw== X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linaro-mm-sig@lists.linaro.org, Hillf Danton , Sudipto Paul , Vincent Donnefort , Sean Paul , Chenbo Feng , Alistair Strachan , Liam Mark , Christoph Hellwig , Sean Paul , "Andrew F . Davis" , Hridya Valsaraju , Pratik Patel , linux-media@vger.kernel.org Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" From: Sean Paul This reverts commit 7b87ea704fd9606eaafa9150116536d72f5c4b1f. This patchset doesn't meet the UAPI requirements set out in [1] for the DRM subsystem. Once the userspace component is reviewed and ready for merge we can try again. [1]- https://01.org/linuxgraphics/gfx-docs/drm/gpu/drm-uapi.html#open-source-userspace-requirements Fixes: 7b87ea704fd9 ("dma-buf: heaps: Add heap helpers") Cc: Laura Abbott Cc: Benjamin Gaignard Cc: Sumit Semwal Cc: Liam Mark Cc: Pratik Patel Cc: Brian Starkey Cc: Vincent Donnefort Cc: Sudipto Paul Cc: Andrew F. Davis Cc: Christoph Hellwig Cc: Chenbo Feng Cc: Alistair Strachan Cc: Hridya Valsaraju Cc: Hillf Danton Cc: dri-devel@lists.freedesktop.org Cc: Brian Starkey Cc: John Stultz Cc: "Andrew F. Davis" Cc: linux-media@vger.kernel.org Cc: linaro-mm-sig@lists.linaro.org Signed-off-by: Sean Paul --- drivers/dma-buf/Makefile | 1 - drivers/dma-buf/heaps/Makefile | 2 - drivers/dma-buf/heaps/heap-helpers.c | 268 --------------------------- drivers/dma-buf/heaps/heap-helpers.h | 55 ------ 4 files changed, 326 deletions(-) delete mode 100644 drivers/dma-buf/heaps/Makefile delete mode 100644 drivers/dma-buf/heaps/heap-helpers.c delete mode 100644 drivers/dma-buf/heaps/heap-helpers.h diff --git a/drivers/dma-buf/Makefile b/drivers/dma-buf/Makefile index 9c190026bfab..caee5eb3d351 100644 --- a/drivers/dma-buf/Makefile +++ b/drivers/dma-buf/Makefile @@ -2,7 +2,6 @@ obj-y := dma-buf.o dma-fence.o dma-fence-array.o dma-fence-chain.o \ dma-resv.o seqno-fence.o obj-$(CONFIG_DMABUF_HEAPS) += dma-heap.o -obj-$(CONFIG_DMABUF_HEAPS) += heaps/ obj-$(CONFIG_SYNC_FILE) += sync_file.o obj-$(CONFIG_SW_SYNC) += sw_sync.o sync_debug.o obj-$(CONFIG_UDMABUF) += udmabuf.o diff --git a/drivers/dma-buf/heaps/Makefile b/drivers/dma-buf/heaps/Makefile deleted file mode 100644 index de49898112db..000000000000 --- a/drivers/dma-buf/heaps/Makefile +++ /dev/null @@ -1,2 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0 -obj-y += heap-helpers.o diff --git a/drivers/dma-buf/heaps/heap-helpers.c b/drivers/dma-buf/heaps/heap-helpers.c deleted file mode 100644 index 750bef4e902d..000000000000 --- a/drivers/dma-buf/heaps/heap-helpers.c +++ /dev/null @@ -1,268 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0 -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "heap-helpers.h" - -void init_heap_helper_buffer(struct heap_helper_buffer *buffer, - void (*free)(struct heap_helper_buffer *)) -{ - buffer->priv_virt = NULL; - mutex_init(&buffer->lock); - buffer->vmap_cnt = 0; - buffer->vaddr = NULL; - buffer->pagecount = 0; - buffer->pages = NULL; - INIT_LIST_HEAD(&buffer->attachments); - buffer->free = free; -} - -struct dma_buf *heap_helper_export_dmabuf(struct heap_helper_buffer *buffer, - int fd_flags) -{ - DEFINE_DMA_BUF_EXPORT_INFO(exp_info); - - exp_info.ops = &heap_helper_ops; - exp_info.size = buffer->size; - exp_info.flags = fd_flags; - exp_info.priv = buffer; - - return dma_buf_export(&exp_info); -} - -static void *dma_heap_map_kernel(struct heap_helper_buffer *buffer) -{ - void *vaddr; - - vaddr = vmap(buffer->pages, buffer->pagecount, VM_MAP, PAGE_KERNEL); - if (!vaddr) - return ERR_PTR(-ENOMEM); - - return vaddr; -} - -static void dma_heap_buffer_destroy(struct heap_helper_buffer *buffer) -{ - if (buffer->vmap_cnt > 0) { - WARN("%s: buffer still mapped in the kernel\n", __func__); - vunmap(buffer->vaddr); - } - - buffer->free(buffer); -} - -static void *dma_heap_buffer_vmap_get(struct heap_helper_buffer *buffer) -{ - void *vaddr; - - if (buffer->vmap_cnt) { - buffer->vmap_cnt++; - return buffer->vaddr; - } - vaddr = dma_heap_map_kernel(buffer); - if (IS_ERR(vaddr)) - return vaddr; - buffer->vaddr = vaddr; - buffer->vmap_cnt++; - return vaddr; -} - -static void dma_heap_buffer_vmap_put(struct heap_helper_buffer *buffer) -{ - if (!--buffer->vmap_cnt) { - vunmap(buffer->vaddr); - buffer->vaddr = NULL; - } -} - -struct dma_heaps_attachment { - struct device *dev; - struct sg_table table; - struct list_head list; -}; - -static int dma_heap_attach(struct dma_buf *dmabuf, - struct dma_buf_attachment *attachment) -{ - struct dma_heaps_attachment *a; - struct heap_helper_buffer *buffer = dmabuf->priv; - int ret; - - a = kzalloc(sizeof(*a), GFP_KERNEL); - if (!a) - return -ENOMEM; - - ret = sg_alloc_table_from_pages(&a->table, buffer->pages, - buffer->pagecount, 0, - buffer->pagecount << PAGE_SHIFT, - GFP_KERNEL); - if (ret) { - kfree(a); - return ret; - } - - a->dev = attachment->dev; - INIT_LIST_HEAD(&a->list); - - attachment->priv = a; - - mutex_lock(&buffer->lock); - list_add(&a->list, &buffer->attachments); - mutex_unlock(&buffer->lock); - - return 0; -} - -static void dma_heap_detach(struct dma_buf *dmabuf, - struct dma_buf_attachment *attachment) -{ - struct dma_heaps_attachment *a = attachment->priv; - struct heap_helper_buffer *buffer = dmabuf->priv; - - mutex_lock(&buffer->lock); - list_del(&a->list); - mutex_unlock(&buffer->lock); - - sg_free_table(&a->table); - kfree(a); -} - -static -struct sg_table *dma_heap_map_dma_buf(struct dma_buf_attachment *attachment, - enum dma_data_direction direction) -{ - struct dma_heaps_attachment *a = attachment->priv; - struct sg_table *table; - - table = &a->table; - - if (!dma_map_sg(attachment->dev, table->sgl, table->nents, - direction)) - table = ERR_PTR(-ENOMEM); - return table; -} - -static void dma_heap_unmap_dma_buf(struct dma_buf_attachment *attachment, - struct sg_table *table, - enum dma_data_direction direction) -{ - dma_unmap_sg(attachment->dev, table->sgl, table->nents, direction); -} - -static vm_fault_t dma_heap_vm_fault(struct vm_fault *vmf) -{ - struct vm_area_struct *vma = vmf->vma; - struct heap_helper_buffer *buffer = vma->vm_private_data; - - vmf->page = buffer->pages[vmf->pgoff]; - get_page(vmf->page); - - return 0; -} - -static const struct vm_operations_struct dma_heap_vm_ops = { - .fault = dma_heap_vm_fault, -}; - -static int dma_heap_mmap(struct dma_buf *dmabuf, struct vm_area_struct *vma) -{ - struct heap_helper_buffer *buffer = dmabuf->priv; - - if ((vma->vm_flags & (VM_SHARED | VM_MAYSHARE)) == 0) - return -EINVAL; - - vma->vm_ops = &dma_heap_vm_ops; - vma->vm_private_data = buffer; - - return 0; -} - -static void dma_heap_dma_buf_release(struct dma_buf *dmabuf) -{ - struct heap_helper_buffer *buffer = dmabuf->priv; - - dma_heap_buffer_destroy(buffer); -} - -static int dma_heap_dma_buf_begin_cpu_access(struct dma_buf *dmabuf, - enum dma_data_direction direction) -{ - struct heap_helper_buffer *buffer = dmabuf->priv; - struct dma_heaps_attachment *a; - int ret = 0; - - mutex_lock(&buffer->lock); - - if (buffer->vmap_cnt) - invalidate_kernel_vmap_range(buffer->vaddr, buffer->size); - - list_for_each_entry(a, &buffer->attachments, list) { - dma_sync_sg_for_cpu(a->dev, a->table.sgl, a->table.nents, - direction); - } - mutex_unlock(&buffer->lock); - - return ret; -} - -static int dma_heap_dma_buf_end_cpu_access(struct dma_buf *dmabuf, - enum dma_data_direction direction) -{ - struct heap_helper_buffer *buffer = dmabuf->priv; - struct dma_heaps_attachment *a; - - mutex_lock(&buffer->lock); - - if (buffer->vmap_cnt) - flush_kernel_vmap_range(buffer->vaddr, buffer->size); - - list_for_each_entry(a, &buffer->attachments, list) { - dma_sync_sg_for_device(a->dev, a->table.sgl, a->table.nents, - direction); - } - mutex_unlock(&buffer->lock); - - return 0; -} - -static void *dma_heap_dma_buf_vmap(struct dma_buf *dmabuf) -{ - struct heap_helper_buffer *buffer = dmabuf->priv; - void *vaddr; - - mutex_lock(&buffer->lock); - vaddr = dma_heap_buffer_vmap_get(buffer); - mutex_unlock(&buffer->lock); - - return vaddr; -} - -static void dma_heap_dma_buf_vunmap(struct dma_buf *dmabuf, void *vaddr) -{ - struct heap_helper_buffer *buffer = dmabuf->priv; - - mutex_lock(&buffer->lock); - dma_heap_buffer_vmap_put(buffer); - mutex_unlock(&buffer->lock); -} - -const struct dma_buf_ops heap_helper_ops = { - .map_dma_buf = dma_heap_map_dma_buf, - .unmap_dma_buf = dma_heap_unmap_dma_buf, - .mmap = dma_heap_mmap, - .release = dma_heap_dma_buf_release, - .attach = dma_heap_attach, - .detach = dma_heap_detach, - .begin_cpu_access = dma_heap_dma_buf_begin_cpu_access, - .end_cpu_access = dma_heap_dma_buf_end_cpu_access, - .vmap = dma_heap_dma_buf_vmap, - .vunmap = dma_heap_dma_buf_vunmap, -}; diff --git a/drivers/dma-buf/heaps/heap-helpers.h b/drivers/dma-buf/heaps/heap-helpers.h deleted file mode 100644 index 911c931f7f06..000000000000 --- a/drivers/dma-buf/heaps/heap-helpers.h +++ /dev/null @@ -1,55 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0 */ -/* - * DMABUF Heaps helper code - * - * Copyright (C) 2011 Google, Inc. - * Copyright (C) 2019 Linaro Ltd. - */ - -#ifndef _HEAP_HELPERS_H -#define _HEAP_HELPERS_H - -#include -#include - -/** - * struct heap_helper_buffer - helper buffer metadata - * @heap: back pointer to the heap the buffer came from - * @dmabuf: backing dma-buf for this buffer - * @size: size of the buffer - * @flags: buffer specific flags - * @priv_virt pointer to heap specific private value - * @lock mutext to protect the data in this structure - * @vmap_cnt count of vmap references on the buffer - * @vaddr vmap'ed virtual address - * @pagecount number of pages in the buffer - * @pages list of page pointers - * @attachments list of device attachments - * - * @free heap callback to free the buffer - */ -struct heap_helper_buffer { - struct dma_heap *heap; - struct dma_buf *dmabuf; - size_t size; - unsigned long flags; - - void *priv_virt; - struct mutex lock; - int vmap_cnt; - void *vaddr; - pgoff_t pagecount; - struct page **pages; - struct list_head attachments; - - void (*free)(struct heap_helper_buffer *buffer); -}; - -void init_heap_helper_buffer(struct heap_helper_buffer *buffer, - void (*free)(struct heap_helper_buffer *)); - -struct dma_buf *heap_helper_export_dmabuf(struct heap_helper_buffer *buffer, - int fd_flags); - -extern const struct dma_buf_ops heap_helper_ops; -#endif /* _HEAP_HELPERS_H */ From patchwork Wed Oct 30 20:29:54 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Paul X-Patchwork-Id: 11220043 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id E4DE213B1 for ; Wed, 30 Oct 2019 20:30:45 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id CCAD02083E for ; Wed, 30 Oct 2019 20:30:45 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org CCAD02083E Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=poorly.run Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id C97006EB6C; Wed, 30 Oct 2019 20:30:44 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail-yb1-xb44.google.com (mail-yb1-xb44.google.com [IPv6:2607:f8b0:4864:20::b44]) by gabe.freedesktop.org (Postfix) with ESMTPS id 0AE216EB6C for ; Wed, 30 Oct 2019 20:30:44 +0000 (UTC) Received: by mail-yb1-xb44.google.com with SMTP id i6so1472228ybe.2 for ; Wed, 30 Oct 2019 13:30:43 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=+uwJGC9QQEeJXBgFaFTGM7r2UURRovHT/Gyepm7ZHvI=; b=VcqzsBENDW8nxuCdWbcfIL+pih6OtUcsiZ4pnYx9yLNUliXrrQI2flP8pWsPugoAck s9nTpv6EGyvYzP8kRsGZpux0jonNDfAcQJd+8F27WHc7zi4g/+ozU9A523PWRYUHB2Jy cA4lkq9VQ3MPL1AgZ03vsVE3J3SzklOXdswIPoWDfT+uKm3+i5kmJGu1gx/mPseqXiXD 5kyq2OluiWo7f/Ygd5q/FZg/cT7E5+7XJX6iKoFAwIp7uoy2hb+p1nBt6uS05MWSpZ+K dhqqaK46NeIZbvE5r7ygO1t5vKjxYHT9MclSqZ2dHJcEh9Av+b07pG122qC5plKDL/VS vvig== X-Gm-Message-State: APjAAAUwCotXB44VW0RclLjN0snqbLv9nZTIGHmIiObG3QXQxkITmQPO uMSdSEiEK638WSyC5iv22oyw6lVOYfo= X-Google-Smtp-Source: APXvYqwmE0DZ1aONPSeryTzS1u6CE2PPggyA3mpL12wbCqn2IrErn4ut1ch9D1EPBVaL6XvXFbGkaQ== X-Received: by 2002:a25:5f4f:: with SMTP id h15mr1089692ybm.0.1572467442852; Wed, 30 Oct 2019 13:30:42 -0700 (PDT) Received: from rosewood.cam.corp.google.com ([2620:0:1013:11:89c6:2139:5435:371d]) by smtp.gmail.com with ESMTPSA id h35sm416432ywk.63.2019.10.30.13.30.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 30 Oct 2019 13:30:42 -0700 (PDT) From: Sean Paul To: dri-devel@lists.freedesktop.org Subject: [PATCH 5/5] Revert "dma-buf: Add dma-buf heaps framework" Date: Wed, 30 Oct 2019 16:29:54 -0400 Message-Id: <20191030203003.101156-6-sean@poorly.run> X-Mailer: git-send-email 2.24.0.rc0.303.g954a862665-goog In-Reply-To: <20191030203003.101156-1-sean@poorly.run> References: <20191030203003.101156-1-sean@poorly.run> MIME-Version: 1.0 X-Mailman-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=poorly.run; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=+uwJGC9QQEeJXBgFaFTGM7r2UURRovHT/Gyepm7ZHvI=; b=dwJqaG4xdX2kdAnbDeH5xFaOrS0EaJmi7axZE4CKGAMS513nhJP9xtzHsjsHyFBYAZ JA5ljn5y7Dpd8kYEMDK50JNFWHnMyEMfFSlDhMAIe5K7dqqpVKs/kNolhi42Z2d7s6nw NQG+9mWAxBgJFolR3UjrXPf+ZbXp8EkIOloBh5FxAk5hYk5z/TUcuTYQvQgQ6Fjvu2YN uj91vWGvFpaMj5ZLO+Wqu9ac1nIBVqvzp4xplp4XZmNzYEb0GHOXOsCvJjkKPMfTgPcs 9DWGq8H5TnSvMduTcgNT46LHqQ+FIAxuH8LKqtkFTeoBmiqt30zxP7ADcxQFbrLUDyRk tNzA== X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Hillf Danton , Vincent Donnefort , Mauro Carvalho Chehab , "Andrew F . Davis" , "Paul E. McKenney" , Christoph Hellwig , Sudipto Paul , Pratik Patel , linux-media@vger.kernel.org, Chenbo Feng , linaro-mm-sig@lists.linaro.org, Sean Paul , Jonathan Cameron , Sean Paul , Greg Kroah-Hartman , Alistair Strachan , Liam Mark , Hridya Valsaraju , "David S. Miller" Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" From: Sean Paul This reverts commit a69b0e855d3fd278ff6f09a23e1edf929538e304. This patchset doesn't meet the UAPI requirements set out in [1] for the DRM subsystem. Once the userspace component is reviewed and ready for merge we can try again. [1]- https://01.org/linuxgraphics/gfx-docs/drm/gpu/drm-uapi.html#open-source-userspace-requirements Fixes: a69b0e855d3f ("dma-buf: Add dma-buf heaps framework") Cc: Laura Abbott Cc: Benjamin Gaignard Cc: Sumit Semwal Cc: Liam Mark Cc: Pratik Patel Cc: Brian Starkey Cc: Vincent Donnefort Cc: Sudipto Paul Cc: Andrew F. Davis Cc: Christoph Hellwig Cc: Chenbo Feng Cc: Alistair Strachan Cc: Hridya Valsaraju Cc: Hillf Danton Cc: dri-devel@lists.freedesktop.org Cc: Brian Starkey Cc: John Stultz Cc: Mauro Carvalho Chehab Cc: "David S. Miller" Cc: Greg Kroah-Hartman Cc: Rob Herring Cc: Jonathan Cameron Cc: "Paul E. McKenney" Cc: Sean Paul Cc: "Andrew F. Davis" Cc: linux-media@vger.kernel.org Cc: linaro-mm-sig@lists.linaro.org Signed-off-by: Sean Paul --- MAINTAINERS | 18 --- drivers/dma-buf/Kconfig | 9 -- drivers/dma-buf/Makefile | 1 - drivers/dma-buf/dma-heap.c | 269 ---------------------------------- include/linux/dma-heap.h | 59 -------- include/uapi/linux/dma-heap.h | 55 ------- 6 files changed, 411 deletions(-) delete mode 100644 drivers/dma-buf/dma-heap.c delete mode 100644 include/linux/dma-heap.h delete mode 100644 include/uapi/linux/dma-heap.h diff --git a/MAINTAINERS b/MAINTAINERS index 5f39067caa7c..b63c291ad029 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -4942,24 +4942,6 @@ F: include/linux/*fence.h F: Documentation/driver-api/dma-buf.rst T: git git://anongit.freedesktop.org/drm/drm-misc -DMA-BUF HEAPS FRAMEWORK -M: Sumit Semwal -R: Andrew F. Davis -R: Benjamin Gaignard -R: Liam Mark -R: Laura Abbott -R: Brian Starkey -R: John Stultz -S: Maintained -L: linux-media@vger.kernel.org -L: dri-devel@lists.freedesktop.org -L: linaro-mm-sig@lists.linaro.org (moderated for non-subscribers) -F: include/uapi/linux/dma-heap.h -F: include/linux/dma-heap.h -F: drivers/dma-buf/dma-heap.c -F: drivers/dma-buf/heaps/* -T: git git://anongit.freedesktop.org/drm/drm-misc - DMA GENERIC OFFLOAD ENGINE SUBSYSTEM M: Vinod Koul L: dmaengine@vger.kernel.org diff --git a/drivers/dma-buf/Kconfig b/drivers/dma-buf/Kconfig index bffa58fc3e6e..a23b6752d11a 100644 --- a/drivers/dma-buf/Kconfig +++ b/drivers/dma-buf/Kconfig @@ -44,13 +44,4 @@ config DMABUF_SELFTESTS default n depends on DMA_SHARED_BUFFER -menuconfig DMABUF_HEAPS - bool "DMA-BUF Userland Memory Heaps" - select DMA_SHARED_BUFFER - help - Choose this option to enable the DMA-BUF userland memory heaps. - This options creates per heap chardevs in /dev/dma_heap/ which - allows userspace to allocate dma-bufs that can be shared - between drivers. - endmenu diff --git a/drivers/dma-buf/Makefile b/drivers/dma-buf/Makefile index caee5eb3d351..03479da06422 100644 --- a/drivers/dma-buf/Makefile +++ b/drivers/dma-buf/Makefile @@ -1,7 +1,6 @@ # SPDX-License-Identifier: GPL-2.0-only obj-y := dma-buf.o dma-fence.o dma-fence-array.o dma-fence-chain.o \ dma-resv.o seqno-fence.o -obj-$(CONFIG_DMABUF_HEAPS) += dma-heap.o obj-$(CONFIG_SYNC_FILE) += sync_file.o obj-$(CONFIG_SW_SYNC) += sw_sync.o sync_debug.o obj-$(CONFIG_UDMABUF) += udmabuf.o diff --git a/drivers/dma-buf/dma-heap.c b/drivers/dma-buf/dma-heap.c deleted file mode 100644 index 9a41b73e54b4..000000000000 --- a/drivers/dma-buf/dma-heap.c +++ /dev/null @@ -1,269 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0 -/* - * Framework for userspace DMA-BUF allocations - * - * Copyright (C) 2011 Google, Inc. - * Copyright (C) 2019 Linaro Ltd. - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#define DEVNAME "dma_heap" - -#define NUM_HEAP_MINORS 128 - -/** - * struct dma_heap - represents a dmabuf heap in the system - * @name: used for debugging/device-node name - * @ops: ops struct for this heap - * @minor minor number of this heap device - * @heap_devt heap device node - * @heap_cdev heap char device - * - * Represents a heap of memory from which buffers can be made. - */ -struct dma_heap { - const char *name; - const struct dma_heap_ops *ops; - void *priv; - unsigned int minor; - dev_t heap_devt; - struct list_head list; - struct cdev heap_cdev; -}; - -static LIST_HEAD(heap_list); -static DEFINE_MUTEX(heap_list_lock); -static dev_t dma_heap_devt; -static struct class *dma_heap_class; -static DEFINE_XARRAY_ALLOC(dma_heap_minors); - -static int dma_heap_buffer_alloc(struct dma_heap *heap, size_t len, - unsigned int fd_flags, - unsigned int heap_flags) -{ - /* - * Allocations from all heaps have to begin - * and end on page boundaries. - */ - len = PAGE_ALIGN(len); - if (!len) - return -EINVAL; - - return heap->ops->allocate(heap, len, fd_flags, heap_flags); -} - -static int dma_heap_open(struct inode *inode, struct file *file) -{ - struct dma_heap *heap; - - heap = xa_load(&dma_heap_minors, iminor(inode)); - if (!heap) { - pr_err("dma_heap: minor %d unknown.\n", iminor(inode)); - return -ENODEV; - } - - /* instance data as context */ - file->private_data = heap; - nonseekable_open(inode, file); - - return 0; -} - -static long dma_heap_ioctl_allocate(struct file *file, unsigned long arg) -{ - struct dma_heap_allocation_data heap_allocation; - struct dma_heap *heap = file->private_data; - int fd; - - if (copy_from_user(&heap_allocation, (void __user *)arg, - sizeof(heap_allocation))) - return -EFAULT; - - if (heap_allocation.fd || - heap_allocation.reserved0 || - heap_allocation.reserved1) { - pr_warn_once("dma_heap: ioctl data not valid\n"); - return -EINVAL; - } - - if (heap_allocation.fd_flags & ~DMA_HEAP_VALID_FD_FLAGS) { - pr_warn_once("dma_heap: fd_flags has invalid or unsupported flags set\n"); - return -EINVAL; - } - - if (heap_allocation.heap_flags & ~DMA_HEAP_VALID_HEAP_FLAGS) { - pr_warn_once("dma_heap: heap flags has invalid or unsupported flags set\n"); - return -EINVAL; - } - - fd = dma_heap_buffer_alloc(heap, heap_allocation.len, - heap_allocation.fd_flags, - heap_allocation.heap_flags); - if (fd < 0) - return fd; - - heap_allocation.fd = fd; - - if (copy_to_user((void __user *)arg, &heap_allocation, - sizeof(heap_allocation))) { - ksys_close(fd); - return -EFAULT; - } - - return 0; -} - -static long dma_heap_ioctl(struct file *file, unsigned int cmd, - unsigned long arg) -{ - int ret = 0; - - switch (cmd) { - case DMA_HEAP_IOC_ALLOC: - ret = dma_heap_ioctl_allocate(file, arg); - break; - default: - return -ENOTTY; - } - - return ret; -} - -static const struct file_operations dma_heap_fops = { - .owner = THIS_MODULE, - .open = dma_heap_open, - .unlocked_ioctl = dma_heap_ioctl, -#ifdef CONFIG_COMPAT - .compat_ioctl = dma_heap_ioctl, -#endif -}; - -/** - * dma_heap_get_drvdata() - get per-subdriver data for the heap - * @heap: DMA-Heap to retrieve private data for - * - * Returns: - * The per-subdriver data for the heap. - */ -void *dma_heap_get_drvdata(struct dma_heap *heap) -{ - return heap->priv; -} - -struct dma_heap *dma_heap_add(const struct dma_heap_export_info *exp_info) -{ - struct dma_heap *heap, *h, *err_ret; - struct device *dev_ret; - int ret; - - if (!exp_info->name || !strcmp(exp_info->name, "")) { - pr_err("dma_heap: Cannot add heap without a name\n"); - return ERR_PTR(-EINVAL); - } - - if (!exp_info->ops || !exp_info->ops->allocate) { - pr_err("dma_heap: Cannot add heap with invalid ops struct\n"); - return ERR_PTR(-EINVAL); - } - - /* check the name is unique */ - mutex_lock(&heap_list_lock); - list_for_each_entry(h, &heap_list, list) { - if (!strcmp(h->name, exp_info->name)) { - mutex_unlock(&heap_list_lock); - pr_err("dma_heap: Already registered heap named %s\n", - exp_info->name); - return ERR_PTR(-EINVAL); - } - } - mutex_unlock(&heap_list_lock); - - heap = kzalloc(sizeof(*heap), GFP_KERNEL); - if (!heap) - return ERR_PTR(-ENOMEM); - - heap->name = exp_info->name; - heap->ops = exp_info->ops; - heap->priv = exp_info->priv; - - /* Find unused minor number */ - ret = xa_alloc(&dma_heap_minors, &heap->minor, heap, - XA_LIMIT(0, NUM_HEAP_MINORS - 1), GFP_KERNEL); - if (ret < 0) { - pr_err("dma_heap: Unable to get minor number for heap\n"); - err_ret = ERR_PTR(ret); - goto err0; - } - - /* Create device */ - heap->heap_devt = MKDEV(MAJOR(dma_heap_devt), heap->minor); - - cdev_init(&heap->heap_cdev, &dma_heap_fops); - ret = cdev_add(&heap->heap_cdev, heap->heap_devt, 1); - if (ret < 0) { - pr_err("dma_heap: Unable to add char device\n"); - err_ret = ERR_PTR(ret); - goto err1; - } - - dev_ret = device_create(dma_heap_class, - NULL, - heap->heap_devt, - NULL, - heap->name); - if (IS_ERR(dev_ret)) { - pr_err("dma_heap: Unable to create device\n"); - err_ret = ERR_CAST(dev_ret); - goto err2; - } - /* Add heap to the list */ - mutex_lock(&heap_list_lock); - list_add(&heap->list, &heap_list); - mutex_unlock(&heap_list_lock); - - return heap; - -err2: - cdev_del(&heap->heap_cdev); -err1: - xa_erase(&dma_heap_minors, heap->minor); -err0: - kfree(heap); - return err_ret; -} - -static char *dma_heap_devnode(struct device *dev, umode_t *mode) -{ - return kasprintf(GFP_KERNEL, "dma_heap/%s", dev_name(dev)); -} - -static int dma_heap_init(void) -{ - int ret; - - ret = alloc_chrdev_region(&dma_heap_devt, 0, NUM_HEAP_MINORS, DEVNAME); - if (ret) - return ret; - - dma_heap_class = class_create(THIS_MODULE, DEVNAME); - if (IS_ERR(dma_heap_class)) { - unregister_chrdev_region(dma_heap_devt, NUM_HEAP_MINORS); - return PTR_ERR(dma_heap_class); - } - dma_heap_class->devnode = dma_heap_devnode; - - return 0; -} -subsys_initcall(dma_heap_init); diff --git a/include/linux/dma-heap.h b/include/linux/dma-heap.h deleted file mode 100644 index 454e354d1ffb..000000000000 --- a/include/linux/dma-heap.h +++ /dev/null @@ -1,59 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0 */ -/* - * DMABUF Heaps Allocation Infrastructure - * - * Copyright (C) 2011 Google, Inc. - * Copyright (C) 2019 Linaro Ltd. - */ - -#ifndef _DMA_HEAPS_H -#define _DMA_HEAPS_H - -#include -#include - -struct dma_heap; - -/** - * struct dma_heap_ops - ops to operate on a given heap - * @allocate: allocate dmabuf and return fd - * - * allocate returns dmabuf fd on success, -errno on error. - */ -struct dma_heap_ops { - int (*allocate)(struct dma_heap *heap, - unsigned long len, - unsigned long fd_flags, - unsigned long heap_flags); -}; - -/** - * struct dma_heap_export_info - information needed to export a new dmabuf heap - * @name: used for debugging/device-node name - * @ops: ops struct for this heap - * @priv: heap exporter private data - * - * Information needed to export a new dmabuf heap. - */ -struct dma_heap_export_info { - const char *name; - const struct dma_heap_ops *ops; - void *priv; -}; - -/** - * dma_heap_get_drvdata() - get per-heap driver data - * @heap: DMA-Heap to retrieve private data for - * - * Returns: - * The per-heap data for the heap. - */ -void *dma_heap_get_drvdata(struct dma_heap *heap); - -/** - * dma_heap_add - adds a heap to dmabuf heaps - * @exp_info: information needed to register this heap - */ -struct dma_heap *dma_heap_add(const struct dma_heap_export_info *exp_info); - -#endif /* _DMA_HEAPS_H */ diff --git a/include/uapi/linux/dma-heap.h b/include/uapi/linux/dma-heap.h deleted file mode 100644 index 6ce5cc68d238..000000000000 --- a/include/uapi/linux/dma-heap.h +++ /dev/null @@ -1,55 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ -/* - * DMABUF Heaps Userspace API - * - * Copyright (C) 2011 Google, Inc. - * Copyright (C) 2019 Linaro Ltd. - */ -#ifndef _UAPI_LINUX_DMABUF_POOL_H -#define _UAPI_LINUX_DMABUF_POOL_H - -#include -#include - -/** - * DOC: DMABUF Heaps Userspace API - */ - -/* Valid FD_FLAGS are O_CLOEXEC, O_RDONLY, O_WRONLY, O_RDWR */ -#define DMA_HEAP_VALID_FD_FLAGS (O_CLOEXEC | O_ACCMODE) - -/* Currently no heap flags */ -#define DMA_HEAP_VALID_HEAP_FLAGS (0) - -/** - * struct dma_heap_allocation_data - metadata passed from userspace for - * allocations - * @len: size of the allocation - * @fd: will be populated with a fd which provdes the - * handle to the allocated dma-buf - * @fd_flags: file descriptor flags used when allocating - * @heap_flags: flags passed to heap - * - * Provided by userspace as an argument to the ioctl - */ -struct dma_heap_allocation_data { - __u64 len; - __u32 fd; - __u32 fd_flags; - __u64 heap_flags; - __u32 reserved0; - __u32 reserved1; -}; - -#define DMA_HEAP_IOC_MAGIC 'H' - -/** - * DOC: DMA_HEAP_IOC_ALLOC - allocate memory from pool - * - * Takes an dma_heap_allocation_data struct and returns it with the fd field - * populated with the dmabuf handle of the allocation. - */ -#define DMA_HEAP_IOC_ALLOC _IOWR(DMA_HEAP_IOC_MAGIC, 0, \ - struct dma_heap_allocation_data) - -#endif /* _UAPI_LINUX_DMABUF_POOL_H */