Received: by 2002:a05:6a10:f3d0:0:0:0:0 with SMTP id a16csp4871939pxv; Tue, 29 Jun 2021 18:36:22 -0700 (PDT) X-Google-Smtp-Source: ABdhPJy/jwto6WLwNvYx3J5AZ7NP4TazNEN90UBAMn/TgRUPH0PAth4uQYxa0hoDTj0DF5Ug7H+m X-Received: by 2002:a05:6402:10c3:: with SMTP id p3mr41470221edu.175.1625016982667; Tue, 29 Jun 2021 18:36:22 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1625016982; cv=none; d=google.com; s=arc-20160816; b=t+xICZQs7tkfpbgHahwWYLf0kQ+WL4OCRuNH/mFChVExcnL46JnayqYkYWjTeOt+mT gcyGoP/40LchLHLhYphFYX1qZTWp2cPjqum1ZtmqmgirbaZVKNi6vJ7q9ht7BtSp8kZ/ koZqK24ZGrMm6+j6htnINM1U2jOyPLPiAj+iPyMXPM36n/KaX5XR/on9UclaF/+6CBc2 dCkRtBM3WtG51BCoQowV4mcArD6Ejbe2NpGtxJLVBsJ5Bebo9FQLxAUBylWug7Bpm01h QF9itNxwNZxeDXB5ODi4iEWUm34Z++516df3dpw9geGUti4mE8cnhPrH6mSZlwT8/VZ5 CO0A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature; bh=FBEInOJoYqxwrlE52K6MZcC340XktufPlx9tQHJv3jk=; b=cKyComuPaLG8nX8l2nMRWqS6Ev6BfwmQSCORgc/11gBg9SKGKhGSqeKY7Dku1w5pRz RVKd73o3GnDyHNQ+iZCg8kTCy7sfxe+peZh3mSz5yO7g2vZNmllXjqMJmXo1MhNHyMih 00Q56HqCnQdcaytnSUNxj6ufWW35KxOxN5B7X/fg/fkYuQoPBubqxRdOpXjr94+Vlh6c +V4/2rqAMwYxneof9FzGcttq6XGt1HRLehvhktG2ezKiLcBXQ+9bGbX6QoAy4TILn0gR jtL4fLZD/Wa+zW2CycuLJG5JTl7zOskWP1UHZau1HH3SU0fjuN9L0Vo62qPuGMmr2FoO UVig== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=fpOTxwV4; 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=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id x17si17038696ejj.268.2021.06.29.18.35.36; Tue, 29 Jun 2021 18:36:22 -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; dkim=pass header.i=@linaro.org header.s=google header.b=fpOTxwV4; 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=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231698AbhF3BhB (ORCPT + 99 others); Tue, 29 Jun 2021 21:37:01 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51832 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229792AbhF3Bg7 (ORCPT ); Tue, 29 Jun 2021 21:36:59 -0400 Received: from mail-pg1-x530.google.com (mail-pg1-x530.google.com [IPv6:2607:f8b0:4864:20::530]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 057FBC061760 for ; Tue, 29 Jun 2021 18:34:31 -0700 (PDT) Received: by mail-pg1-x530.google.com with SMTP id e33so598899pgm.3 for ; Tue, 29 Jun 2021 18:34:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=FBEInOJoYqxwrlE52K6MZcC340XktufPlx9tQHJv3jk=; b=fpOTxwV4zxW4Q0vXTnzAdyWRKSNOkJ6Yt5nUdEs8+fAMn3XqRToSnVNet0pTIFnaQR cCMSSrzMa51N8/Ca9p8l+jqocYP7FxLde/JNiiOXRZpFjYvUZvmjGetBCLP3kAsvmSTu vPYFOQyaPT9Nc9Ch2RPF7gKN/31atj/e33ZaTm42GJBlu+dsply2TCWz1h9jDasglrK2 lxd+aDaz4eznt1K2MTO1ZUdHwqjfof/Z0YadmFAefD1MZJ0VnjY/1G99vVC7naW8Orzn AsBMrloc8ZhRKOkpgR1aURI0ECgbQu8TPF0eYWu1KJ4Sq+UEo+4orwgB5DI31WQzdTTg N9xQ== 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:mime-version :content-transfer-encoding; bh=FBEInOJoYqxwrlE52K6MZcC340XktufPlx9tQHJv3jk=; b=tnJjxukJegV45PljbEJmEH+FTAxNRaYX9AsRGr79bzcSkz/uNFqzL/blsSAz5R4o6w nYfmJLoS9KmsbS9lMLf4aq/BzoKoI+KlTUgNMQRJdmG4DElbEsgp5Yn87hEuj2h7u+l+ 5kEogoRHJvtfBmXA315My0xYC60lkWA/iiuucMbWzvaQDkQ/q3swSSYHFLKtIVMqu1hT p5n9Xf3q3SOWAenZfKF3MnLeIGyUdQZEbw83rpyDYc+FUr9Xft6fBl8e1Q25xzVzlBCD 5Xy7J+I4FIKFJSO5piMFrOzXcvYqKV48fKO4nKbTFDAupWUGVS4B3IH+zLSLFNcyKI5Q SvjQ== X-Gm-Message-State: AOAM531QbT6l4PCOvVJJI4IKIltDEu6oRf/HwXW2D/zMBHen/M/BWu19 X6uSZEHlordDbbDvD4QBHIDWe7sTC2bloA== X-Received: by 2002:a63:5966:: with SMTP id j38mr30913446pgm.451.1625016870033; Tue, 29 Jun 2021 18:34:30 -0700 (PDT) Received: from localhost.localdomain ([2601:1c2:680:1319:692:26ff:feda:3a81]) by smtp.gmail.com with ESMTPSA id g8sm20252901pja.14.2021.06.29.18.34.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 29 Jun 2021 18:34:29 -0700 (PDT) From: John Stultz To: lkml Cc: John Stultz , Daniel Vetter , Christian Koenig , Sumit Semwal , Liam Mark , Chris Goldsworthy , Laura Abbott , Brian Starkey , Hridya Valsaraju , Suren Baghdasaryan , Sandeep Patil , Daniel Mentz , =?UTF-8?q?=C3=98rjan=20Eide?= , Robin Murphy , Ezequiel Garcia , Simon Ser , James Jones , linux-media@vger.kernel.org, dri-devel@lists.freedesktop.org Subject: [PATCH v9 0/5] Generic page pool & deferred freeing for system dmabuf hea Date: Wed, 30 Jun 2021 01:34:16 +0000 Message-Id: <20210630013421.735092-1-john.stultz@linaro.org> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org After an unfortunately long pause (covid work-schedule burnout), I wanted to revive and resubmit this series. As before, the point of this series is trying to add both a page pool as well as deferred-freeingto the DMA-BUF system heap to improve allocation performance (so that it can match or beat the old ION system heaps performance). The combination of the page pool along with deferred freeing allows us to offload page-zeroing out of the allocation hot path. This was done originally with ION and this patch series allows the DMA-BUF system heap to match ION's system heap allocation performance in a simple microbenchmark [1] (ION re-added to the kernel for comparision, running on an x86 vm image): ./dmabuf-heap-bench -i 0 1 system Testing dmabuf system vs ion heaptype 0 (flags: 0x1) --------------------------------------------- dmabuf heap: alloc 4096 bytes 5000 times in 79314244 ns 15862 ns/call ion heap: alloc 4096 bytes 5000 times in 107390769 ns 21478 ns/call dmabuf heap: alloc 1048576 bytes 5000 times in 259083419 ns 51816 ns/call ion heap: alloc 1048576 bytes 5000 times in 340497344 ns 68099 ns/call dmabuf heap: alloc 8388608 bytes 5000 times in 2603105563 ns 520621 ns/call ion heap: alloc 8388608 bytes 5000 times in 3613592860 ns 722718 ns/call dmabuf heap: alloc 33554432 bytes 5000 times in 12212492979 ns 2442498 ns/call ion heap: alloc 33554432 bytes 5000 times in 14584157792 ns 2916831 ns/call Daniel didn't like earlier attempts to re-use the network page-pool code to achieve this, and suggested the ttm_pool be used instead, so this series pulls the page pool functionality out of the ttm_pool logic and creates a generic page pool that can be shared. New in v9: * Tried to address Christian König's feedback on the page pool changes (Kerneldoc, static functions, locking issues, duplicative order tracking) * Fix up Kconfig dependency issue as Reported-by: kernel test robot * Fix compiler warning Reported-by: kernel test robot I know Christian had some less specific feedback on the deferred free work that I'd like to revisit, but I wanted to restart the discussion with this new series, rather then trying to dregdge up and reply to a ~4mo old thread. Input would be greatly appreciated. Testing as well, as I don't have any development hardware that utilizes the ttm pool. Thanks -john [1] https://android.googlesource.com/platform/system/memory/libdmabufheap/+/refs/heads/master/tests/dmabuf_heap_bench.c Cc: Daniel Vetter Cc: Christian Koenig Cc: Sumit Semwal Cc: Liam Mark Cc: Chris Goldsworthy Cc: Laura Abbott Cc: Brian Starkey Cc: Hridya Valsaraju Cc: Suren Baghdasaryan Cc: Sandeep Patil Cc: Daniel Mentz Cc: Ørjan Eide Cc: Robin Murphy Cc: Ezequiel Garcia Cc: Simon Ser Cc: James Jones Cc: linux-media@vger.kernel.org Cc: dri-devel@lists.freedesktop.org John Stultz (5): drm: Add a sharable drm page-pool implementation drm: ttm_pool: Rework ttm_pool to use drm_page_pool dma-buf: system_heap: Add drm pagepool support to system heap dma-buf: heaps: Add deferred-free-helper library code dma-buf: system_heap: Add deferred freeing to the system heap drivers/dma-buf/heaps/Kconfig | 5 + drivers/dma-buf/heaps/Makefile | 1 + drivers/dma-buf/heaps/deferred-free-helper.c | 138 +++++++++ drivers/dma-buf/heaps/deferred-free-helper.h | 55 ++++ drivers/dma-buf/heaps/system_heap.c | 46 ++- drivers/gpu/drm/Kconfig | 4 + drivers/gpu/drm/Makefile | 2 + drivers/gpu/drm/page_pool.c | 297 +++++++++++++++++++ drivers/gpu/drm/ttm/ttm_pool.c | 167 ++--------- include/drm/page_pool.h | 68 +++++ include/drm/ttm/ttm_pool.h | 14 +- 11 files changed, 643 insertions(+), 154 deletions(-) create mode 100644 drivers/dma-buf/heaps/deferred-free-helper.c create mode 100644 drivers/dma-buf/heaps/deferred-free-helper.h create mode 100644 drivers/gpu/drm/page_pool.c create mode 100644 include/drm/page_pool.h -- 2.25.1