From patchwork Fri Jun 7 03:07:14 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Stultz X-Patchwork-Id: 166051 Delivered-To: patches@linaro.org Received: by 2002:a92:9e1a:0:0:0:0:0 with SMTP id q26csp107626ili; Thu, 6 Jun 2019 20:07:25 -0700 (PDT) X-Received: by 2002:a65:60d2:: with SMTP id r18mr856762pgv.217.1559876844996; Thu, 06 Jun 2019 20:07:24 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1559876844; cv=none; d=google.com; s=arc-20160816; b=uvsZHp+X9Qld22vfaP+j1IWnsEIbManF6mE3CjHVS/8m+PKSo+8n5yGYoi8R8UTe6N 7dxYapLRykJKDHRVj2OUBvcx1b7o+sUme+aQqa8HsOzSVf4aubk1bsyBg27ktY0u6AIe 34j/PyzQyNoSkgcDkSy1dAE80PYvNSEXs/kHeEYdIIFhUP45/NNR6adjthJfKvzf019e Zrwgy0gflziznQJZTAH6p8Eq53AHLf8sHgQUyc9KuiDGe0o1o4MVxa0HOgA72OJHQ9Xg Vo1N5lIKVDnaa5dA/yUAVxPUdhYB4N7Qz+yLLi1rxFYlix0jbG7L8XDEjdKqcUgh/Ogp KpWg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=message-id:date:subject:cc:to:from:dkim-signature; bh=OP/5HcXPO39lZBmwz/TKmqEHSGCcXshK7QEl3YE6azg=; b=XW44pzdRWr4XwK4Up16yFn0KHCEetfXTxugjXFJPkUegW4z0TaEJAoSqTwJ/66MRdd 50mUokvQ6PbIgVq8C8hb0Pz4iSfOjQrSiULCNX9VLpvuXPEsQkHuch6lZiqnsODxP6m8 TI6DpDLFQagU4pxs54O1w2OeeqkGKSb4REAsW/Im430jELP9ZfwGohiBeTje3YimTV9F ycrAgM86X1nQ0NDBTw4ce5Re5ObB5PO5nC8IEu4kQDQRWkNkNeJWJJhWBQBtX9sXOnDK aP0mgJte3GiCMCN+sHlrvIqTi/s30Q4t3TwlgYrVQDn4VS5Zi9z648mBxrZ9XbYADxF1 /wcw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=nDoMzWqA; spf=pass (google.com: domain of john.stultz@linaro.org designates 209.85.220.65 as permitted sender) smtp.mailfrom=john.stultz@linaro.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from mail-sor-f65.google.com (mail-sor-f65.google.com. [209.85.220.65]) by mx.google.com with SMTPS id j35sor563865pgm.60.2019.06.06.20.07.24 for (Google Transport Security); Thu, 06 Jun 2019 20:07:24 -0700 (PDT) Received-SPF: pass (google.com: domain of john.stultz@linaro.org designates 209.85.220.65 as permitted sender) client-ip=209.85.220.65; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=nDoMzWqA; spf=pass (google.com: domain of john.stultz@linaro.org designates 209.85.220.65 as permitted sender) smtp.mailfrom=john.stultz@linaro.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id; bh=OP/5HcXPO39lZBmwz/TKmqEHSGCcXshK7QEl3YE6azg=; b=nDoMzWqA+SQGNUjkHYCmMeluLcQ/NdfdL82xSfqhUQBkPAb1HTdTBXQtkYFkBxNe8b s/MTvZMK73j5tpNcHdbl9x/cuttENCnK+Exl49xh7MLnS3Nr11QufOjiICba0tLOfKbv vBvA0fLNHZdfU+jX/WJ+Lm1ymU5MYD+GY00BhTdFDvRvyu2ZfFGqH40ujcEPQdbfNmAw ENnwkGITftRCLihI1PKxhul0T7vvrjwFVeMmBch4K8J6nX4f3hKamfLWQU0shfml8tlw 6vj5jycWek+VMelH+RXPF82v2d5frMbz9Y9otJC/WAMP6EyJWfr0zMdimuYoZcHcsDG6 lSUw== 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; bh=OP/5HcXPO39lZBmwz/TKmqEHSGCcXshK7QEl3YE6azg=; b=bWyXQN9g3SEYUAzvKy30X6TRePrE8zmKN5zOKi6rOxMduGH/+A39aTN9CWRuTJCL3i ZqbIxJuCt6y16TG3rXYh2nSU7pFj/uKVWPQpX6kmpw7D/3Tu4oSqvzSP15mOM1yN/u6J OMBRJGPBuml6eplom8qrG/qob6RBngNhp5Qc01YDhzyVkpJdFmQ4ntL5o4a4OyoSqSfy yuwTi9f8hbIjssJMscPC2Oshz9hfjUc7Z8ub3jceWLTOX+Dyvh7m1kFgZ/stXgx2lvrk tXc/F7w7RCPIfo0sz7eYFoudtaUqCX8prFzeL8GxwLZo0obgpWUKZE8vchOTlxLYNu5w 2jIA== X-Gm-Message-State: APjAAAUWTnvWjKy4ZqYBfo0LO3i54fw8FhzMHJoW3n70kxi1qiRZmoqc AO+4qd8MLpMbY0KqTmuuO8scI5hS X-Google-Smtp-Source: APXvYqzyxMip+mubvZBo4tVOQ7mIWLXt8jDq45eJiNt4huoSsdACR223z8H4ZXIqy6N8p0sqwhe0LQ== X-Received: by 2002:a65:60cd:: with SMTP id r13mr902777pgv.58.1559876844279; Thu, 06 Jun 2019 20:07:24 -0700 (PDT) Return-Path: Received: from localhost.localdomain ([2601:1c2:680:1319:692:26ff:feda:3a81]) by smtp.gmail.com with ESMTPSA id f4sm506575pfn.118.2019.06.06.20.07.21 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 06 Jun 2019 20:07:22 -0700 (PDT) From: John Stultz To: lkml Cc: John Stultz , Laura Abbott , Benjamin Gaignard , Sumit Semwal , Liam Mark , Pratik Patel , Brian Starkey , Vincent Donnefort , Sudipto Paul , "Andrew F . Davis" , Christoph Hellwig , Chenbo Feng , Alistair Strachan , dri-devel@lists.freedesktop.org Subject: [PATCH v5 0/5] DMA-BUF Heaps (destaging ION) Date: Fri, 7 Jun 2019 03:07:14 +0000 Message-Id: <20190607030719.77286-1-john.stultz@linaro.org> X-Mailer: git-send-email 2.17.1 Here is another pass at the dma-buf heaps patchset Andrew and I have been working on which tries to destage a fair chunk of ION functionality. The patchset implements per-heap devices which can be opened directly and then an ioctl is used to allocate a dmabuf from the heap. The interface is similar, but much simpler then IONs, only providing an ALLOC ioctl. Also, I've provided relatively simple system and cma heaps. I've booted and tested these patches with AOSP on the HiKey960 using the kernel tree here: https://git.linaro.org/people/john.stultz/android-dev.git/log/?h=dev/dma-buf-heap And the userspace changes here: https://android-review.googlesource.com/c/device/linaro/hikey/+/909436 Compared to ION, this patchset is missing the system-contig, carveout and chunk heaps, as I don't have a device that uses those, so I'm unable to do much useful validation there. Additionally we have no upstream users of chunk or carveout, and the system-contig has been deprecated in the common/andoid-* kernels, so this should be ok. I've also removed the stats accounting for now, since any such accounting should be implemented by dma-buf core or the heaps themselves. New in v5: * Actually not much that I'm submitting now. I've backed out the large order page allocation I added in v4 as using it with the pagelist structure in the helper buffers ended up leaking memory unless we split them, and then we didn't see any performance improvement. * I have spent a fair amount of time looking at allocation performance compared to ION, and I do have a patch stack that performs equal or better then ION (utilizing large order allocations, sgtables, and a page pool). However, Andrew convinced me that the extra complexity of these optimizations would distract reviewers from the core functionality, and we can submit those changes afterwards without any interface impact. WIP patches can be found here: https://git.linaro.org/people/john.stultz/android-dev.git/log/?h=dev/dma-buf-heap-WIP * Minor cleanups Outstanding concerns: * Need to better understand various secure heap implementations. Some concern that heap private flags will be needed, but its also possible that dma-buf heaps can't solve everyone's needs, in which case, a vendor's secure buffer driver can implement their own dma-buf exporter. So I'm not too worried here. Thoughts and feedback would be greatly appreciated! thanks -john 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: dri-devel@lists.freedesktop.org Andrew F. Davis (1): dma-buf: Add dma-buf heaps framework John Stultz (4): dma-buf: heaps: Add heap helpers dma-buf: heaps: Add system heap to dmabuf heaps dma-buf: heaps: Add CMA heap to dmabuf heaps kselftests: Add dma-heap test MAINTAINERS | 18 ++ drivers/dma-buf/Kconfig | 10 + drivers/dma-buf/Makefile | 2 + drivers/dma-buf/dma-heap.c | 237 ++++++++++++++++ drivers/dma-buf/heaps/Kconfig | 14 + drivers/dma-buf/heaps/Makefile | 4 + drivers/dma-buf/heaps/cma_heap.c | 169 ++++++++++++ drivers/dma-buf/heaps/heap-helpers.c | 261 ++++++++++++++++++ drivers/dma-buf/heaps/heap-helpers.h | 55 ++++ drivers/dma-buf/heaps/system_heap.c | 123 +++++++++ include/linux/dma-heap.h | 59 ++++ include/uapi/linux/dma-heap.h | 56 ++++ tools/testing/selftests/dmabuf-heaps/Makefile | 11 + .../selftests/dmabuf-heaps/dmabuf-heap.c | 232 ++++++++++++++++ 14 files changed, 1251 insertions(+) create mode 100644 drivers/dma-buf/dma-heap.c create mode 100644 drivers/dma-buf/heaps/Kconfig create mode 100644 drivers/dma-buf/heaps/Makefile create mode 100644 drivers/dma-buf/heaps/cma_heap.c create mode 100644 drivers/dma-buf/heaps/heap-helpers.c create mode 100644 drivers/dma-buf/heaps/heap-helpers.h create mode 100644 drivers/dma-buf/heaps/system_heap.c create mode 100644 include/linux/dma-heap.h create mode 100644 include/uapi/linux/dma-heap.h create mode 100644 tools/testing/selftests/dmabuf-heaps/Makefile create mode 100644 tools/testing/selftests/dmabuf-heaps/dmabuf-heap.c -- 2.17.1