From patchwork Fri Nov 15 09:21:13 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Daniel Vetter X-Patchwork-Id: 11245431 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 83F98159A for ; Fri, 15 Nov 2019 09:21:40 +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 6C3A12073A for ; Fri, 15 Nov 2019 09:21:40 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 6C3A12073A Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=ffwll.ch Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id A91DB6E209; Fri, 15 Nov 2019 09:21:32 +0000 (UTC) X-Original-To: intel-gfx@lists.freedesktop.org Delivered-To: intel-gfx@lists.freedesktop.org Received: from mail-wr1-x442.google.com (mail-wr1-x442.google.com [IPv6:2a00:1450:4864:20::442]) by gabe.freedesktop.org (Postfix) with ESMTPS id E48DB6E1A7 for ; Fri, 15 Nov 2019 09:21:28 +0000 (UTC) Received: by mail-wr1-x442.google.com with SMTP id i10so10143380wrs.7 for ; Fri, 15 Nov 2019 01:21:28 -0800 (PST) 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=7+oPDeQqF7gn0t6Wu9eF8AtGPXsaZV+oIAe4ESZB4+I=; b=hqAdFuXXKLEvAOqfiTxWQD2V2J1iI9B3D/VA+drFgxq1+mEEj1M5vTFu+RKeONgcEk UQCaxAOfXTrPveKOdl4C2/0b6esP5n9AwsuV4xfitlRwtYsVNLwG6e/NYeoSJO6FG0yQ CPf7g24SXRqJmWepAqrWBVJ7+7U8m7gCZD2Q3d+Ay+odgtHdwax/AmXLzMg0Xw6nLqat cUjEWoixoT4zxOK+GFCkBfZZBYc2pfbno5GFl3zswPtUt6sY8B7nOmzngGg/4pAkHW+2 KQQ7wZ8Yqdta9KafBvepFW2ZqqHjxdA9ErUv1+YtCxenGTaspLiEyOo42QN8SPh6Rxqc 6vBw== X-Gm-Message-State: APjAAAWfwZ6vlUl5kf9n6eMeKBjg1Ag+iQf6yYRcXRnZwaQkxnBqfmIT Um41lIrVAgtOtgB1rug2yWWLrQ== X-Google-Smtp-Source: APXvYqy4xQOZIjeRbauUeqQKIO8M/6NlQDaBlz50R0hcYWTelYUpaPnZumvxvO0yNNTq4Y5vMVVoRw== X-Received: by 2002:a5d:4986:: with SMTP id r6mr13987202wrq.307.1573809687576; Fri, 15 Nov 2019 01:21:27 -0800 (PST) Received: from phenom.ffwll.local (212-51-149-96.fiber7.init7.net. [212.51.149.96]) by smtp.gmail.com with ESMTPSA id 11sm8987506wmi.8.2019.11.15.01.21.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 15 Nov 2019 01:21:26 -0800 (PST) From: Daniel Vetter To: DRI Development Date: Fri, 15 Nov 2019 10:21:13 +0100 Message-Id: <20191115092120.4445-2-daniel.vetter@ffwll.ch> X-Mailer: git-send-email 2.24.0 In-Reply-To: <20191115092120.4445-1-daniel.vetter@ffwll.ch> References: <20191115092120.4445-1-daniel.vetter@ffwll.ch> MIME-Version: 1.0 X-Mailman-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ffwll.ch; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=7+oPDeQqF7gn0t6Wu9eF8AtGPXsaZV+oIAe4ESZB4+I=; b=D1nMy3OrU401MPI+aJZ+9RnFH1JLI19Pbqk42mTKBhcMlgKtLA87cGuH13UiQs3a+y cYVXByY15jz0APl458Cwg/vaesaf/W1SQQjRskOuxfz62Ng47WsHp1egIzSHBPFJgXDH dyFiokb2LcYIVOHet1ybxdy9ztV5RfTRvP73w= Subject: [Intel-gfx] [PATCH 1/8] drm/fb: More paranoia in addfb checks X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Daniel Vetter , Daniel Vetter , Intel Graphics Development , Pekka Paalanen Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" - Our limit is uint32_t, make that explicit. - Untangle the one overflow check, I think (but not sure) that with all three together you could overflow the uint64_t and it'd look cool again. Hence two steps. Also go with the more common (and imo safer approach) of reducing the range we accept, instead of trying to compute the overflow in high enough precision. - The above would blow up if we get a 0 pitches, so check for that too, but only if block_size is a thing. Cc: Pekka Paalanen Signed-off-by: Daniel Vetter --- drivers/gpu/drm/drm_framebuffer.c | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/drivers/gpu/drm/drm_framebuffer.c b/drivers/gpu/drm/drm_framebuffer.c index 57564318ceea..3141c6ed6dd2 100644 --- a/drivers/gpu/drm/drm_framebuffer.c +++ b/drivers/gpu/drm/drm_framebuffer.c @@ -214,15 +214,20 @@ static int framebuffer_check(struct drm_device *dev, return -EINVAL; } - if (min_pitch > UINT_MAX) + if (min_pitch > U8_MAX) return -ERANGE; - if ((uint64_t) height * r->pitches[i] + r->offsets[i] > UINT_MAX) - return -ERANGE; + if (block_size) { + if (r->pitches[i] < min_pitch) { + DRM_DEBUG_KMS("bad pitch %u for plane %d\n", r->pitches[i], i); + return -EINVAL; + } - if (block_size && r->pitches[i] < min_pitch) { - DRM_DEBUG_KMS("bad pitch %u for plane %d\n", r->pitches[i], i); - return -EINVAL; + if (height > U8_MAX / r->pitches[i]) + return -ERANGE; + + if (r->offsets[i] > U8_MAX / r->pitches[i] - height) + return -ERANGE; } if (r->modifier[i] && !(r->flags & DRM_MODE_FB_MODIFIERS)) { From patchwork Fri Nov 15 09:21:14 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Daniel Vetter X-Patchwork-Id: 11245429 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 075471393 for ; Fri, 15 Nov 2019 09:21:39 +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 E3D5F2073B for ; Fri, 15 Nov 2019 09:21:38 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org E3D5F2073B Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=ffwll.ch Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 106426E1FB; Fri, 15 Nov 2019 09:21:32 +0000 (UTC) X-Original-To: intel-gfx@lists.freedesktop.org Delivered-To: intel-gfx@lists.freedesktop.org Received: from mail-wm1-x341.google.com (mail-wm1-x341.google.com [IPv6:2a00:1450:4864:20::341]) by gabe.freedesktop.org (Postfix) with ESMTPS id 57C5A6E1F8 for ; Fri, 15 Nov 2019 09:21:30 +0000 (UTC) Received: by mail-wm1-x341.google.com with SMTP id u18so8918796wmc.3 for ; Fri, 15 Nov 2019 01:21:30 -0800 (PST) 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=oQB86j8FZQH4Sh7rDbVmMqNvIL9AFAXhmpfcG7mbgqg=; b=aSa9uVGLaFPipnPHELjR+YgkoUNmMEsyCZ3F6zWGQJIH/h61K/+Xrkcgw/ki2i9W1N WxjMpzyiraL3SI6vXJMrl1QeTxIFNGDZZOVTSet/0YEfbnCQg3XXZ7MNPDimfErKHRPl hX8vtWhvOEBTSWELUyauGxX2uKZQ9ZBX+az8S3FbW9Txolt6WMCGPuY8HKwbj4nfdp6N JOCpRIZOb6RmjJHOXN3AzUteS1335U35zZHwt0JIpE08hTSrIgdgr780C1NHz/q2fGm1 g1cwVuIjt5OrUV6FcHKznsI8NK9zOuxDkhf35IWE6zdzEwjhfGYSgkdaPMjdIh4dA7BC kyKw== X-Gm-Message-State: APjAAAUL+UZIAkz3XTksKxKJdh2E0m9BcA3ezPFxwKeorIVg46AfJCSH Ew+Isq0IAJoSdbg7OImAqibt6w== X-Google-Smtp-Source: APXvYqzfNw+xEwRsZgEJ5EaZ5mtAtKcnYpFttPkjdcMRICstqKjbeIL1lMoNPriAWVWuc8ftUFw/fQ== X-Received: by 2002:a7b:c762:: with SMTP id x2mr13261637wmk.128.1573809689026; Fri, 15 Nov 2019 01:21:29 -0800 (PST) Received: from phenom.ffwll.local (212-51-149-96.fiber7.init7.net. [212.51.149.96]) by smtp.gmail.com with ESMTPSA id 11sm8987506wmi.8.2019.11.15.01.21.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 15 Nov 2019 01:21:28 -0800 (PST) From: Daniel Vetter To: DRI Development Date: Fri, 15 Nov 2019 10:21:14 +0100 Message-Id: <20191115092120.4445-3-daniel.vetter@ffwll.ch> X-Mailer: git-send-email 2.24.0 In-Reply-To: <20191115092120.4445-1-daniel.vetter@ffwll.ch> References: <20191115092120.4445-1-daniel.vetter@ffwll.ch> MIME-Version: 1.0 X-Mailman-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ffwll.ch; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=oQB86j8FZQH4Sh7rDbVmMqNvIL9AFAXhmpfcG7mbgqg=; b=Ld4XloE2FMFzkHUAG7n2jsiQXHCt5cLaiA94t087F7u+01dZJeZ0TRKPko5uVepFBd ivSQf+gMl0XzwE6nw2V9W0qYXt0eV5v5UbehbFWKwbeTXDsPmN8p357V3VvmDe6y7oD1 b/jgpdfFOh0OLKqUH9XDrAKaEhu0GFl7FddtI= Subject: [Intel-gfx] [PATCH 2/8] drm/atmel: ditch fb_create wrapper X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Alexandre Belloni , Boris Brezillon , Daniel Vetter , Intel Graphics Development , Nicolas Ferre , Ludovic Desroches , Daniel Vetter , Sam Ravnborg , linux-arm-kernel@lists.infradead.org Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" Spotted while looking through them all. Signed-off-by: Daniel Vetter Cc: Sam Ravnborg Cc: Boris Brezillon Cc: Nicolas Ferre Cc: Alexandre Belloni Cc: Ludovic Desroches Cc: linux-arm-kernel@lists.infradead.org Acked-by: Boris Brezillon --- drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c index 92640298ad41..8dc917a1270b 100644 --- a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c +++ b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c @@ -557,12 +557,6 @@ static irqreturn_t atmel_hlcdc_dc_irq_handler(int irq, void *data) return IRQ_HANDLED; } -static struct drm_framebuffer *atmel_hlcdc_fb_create(struct drm_device *dev, - struct drm_file *file_priv, const struct drm_mode_fb_cmd2 *mode_cmd) -{ - return drm_gem_fb_create(dev, file_priv, mode_cmd); -} - struct atmel_hlcdc_dc_commit { struct work_struct work; struct drm_device *dev; @@ -657,7 +651,7 @@ static int atmel_hlcdc_dc_atomic_commit(struct drm_device *dev, } static const struct drm_mode_config_funcs mode_config_funcs = { - .fb_create = atmel_hlcdc_fb_create, + .fb_create = drm_gem_fb_create, .atomic_check = drm_atomic_helper_check, .atomic_commit = atmel_hlcdc_dc_atomic_commit, }; From patchwork Fri Nov 15 09:21:15 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Daniel Vetter X-Patchwork-Id: 11245433 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 DF187159A for ; Fri, 15 Nov 2019 09:21:41 +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 C76132073A for ; Fri, 15 Nov 2019 09:21:41 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org C76132073A Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=ffwll.ch Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id C73456E1F3; Fri, 15 Nov 2019 09:21:32 +0000 (UTC) X-Original-To: intel-gfx@lists.freedesktop.org Delivered-To: intel-gfx@lists.freedesktop.org Received: from mail-wr1-x442.google.com (mail-wr1-x442.google.com [IPv6:2a00:1450:4864:20::442]) by gabe.freedesktop.org (Postfix) with ESMTPS id 81EBE6E1F3 for ; Fri, 15 Nov 2019 09:21:31 +0000 (UTC) Received: by mail-wr1-x442.google.com with SMTP id b3so10118540wrs.13 for ; Fri, 15 Nov 2019 01:21:31 -0800 (PST) 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=tGjIM2+uUqMORVIasokc3/CvFp+wprfDfEiecNEi+4o=; b=acBytEoh8UpNNp2wFSHbio8IVSmDomt0GVA7NmZoWloJ05kfryFewj3bjEc8WGoTaK ki5fFeRgfGM+Pl/sTLUgW/0wCXR55yT9UKhWtzlK9AMiD84p/R2LHbrHcOQfz+cTrC1V mGvw8Gh0wbEftJylFwzAF4tWIHd06QL5HdM71nua1PMjlgdH9X5xeoA8TfaCHUWUTx3T XyZzrxKCy9OE3KwiFr8Ry4ZqzUBp4klggGDwMFtF094Jwc8mEEi7+5t0TXDetR56zmeI GvjxNo9IKPibzrfXAjz8tPZ4oCh6EPPyCgp6JtMXf6E3VrQIdhZ7TcsxKPODb0xcpWjm kVCA== X-Gm-Message-State: APjAAAWTx0cjKUQBeGYykzbWGhyLOwoZFVx9CnOQu7d1xMRq3mCnxhQX 6fzUAZ/paZOUJOY3rvhcl5sbjA== X-Google-Smtp-Source: APXvYqwnf2/MQXZ679hFBEv5ABxJG5pWkcrTe0XZXAxsR67X5YWu3QoXY4fHOvAlU81ah5/AgJgOLA== X-Received: by 2002:adf:e883:: with SMTP id d3mr13501518wrm.197.1573809690172; Fri, 15 Nov 2019 01:21:30 -0800 (PST) Received: from phenom.ffwll.local (212-51-149-96.fiber7.init7.net. [212.51.149.96]) by smtp.gmail.com with ESMTPSA id 11sm8987506wmi.8.2019.11.15.01.21.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 15 Nov 2019 01:21:29 -0800 (PST) From: Daniel Vetter To: DRI Development Date: Fri, 15 Nov 2019 10:21:15 +0100 Message-Id: <20191115092120.4445-4-daniel.vetter@ffwll.ch> X-Mailer: git-send-email 2.24.0 In-Reply-To: <20191115092120.4445-1-daniel.vetter@ffwll.ch> References: <20191115092120.4445-1-daniel.vetter@ffwll.ch> MIME-Version: 1.0 X-Mailman-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ffwll.ch; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=tGjIM2+uUqMORVIasokc3/CvFp+wprfDfEiecNEi+4o=; b=WfM8FyTO7ypE+YMQNKDxQoBKIEgYOliOhA8IHmPKabbGB3iVqRcp9+2Yiz95KojpyN 5RRyo1OFsYseOMJj0ngbATa4TKXxD9cw6JBnsUbQKpNyC8sS9fwiLVyMISJSJt3Y2mwY EujkOzvZYc9UjWmsXzRIqw8m1ryOAtGIjx3UQ= Subject: [Intel-gfx] [PATCH 3/8] drm/mediatek: don't open-code drm_gem_fb_create X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Daniel Vetter , Intel Graphics Development , Matthias Brugger , linux-mediatek@lists.infradead.org, Philipp Zabel , CK Hu , linux-arm-kernel@lists.infradead.org Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" Aside: There's a few other fb_create implementations which simply check for valid buffer format (or an approximation thereof), and then call drm_gem_fb_create. For atomic drivers at least we could walk all planes and make sure the format/modifier combo is valid, and remove even more code. For non-atomic drivers that's not possible, since the format list for the primary buffer might be garbage (and most likely it is). Also delete mtk_drm_fb.[hc] since it would now only contain one function. Signed-off-by: Daniel Vetter Cc: CK Hu Cc: Philipp Zabel Cc: Matthias Brugger Cc: linux-arm-kernel@lists.infradead.org Cc: linux-mediatek@lists.infradead.org Acked-by: CK Hu --- drivers/gpu/drm/mediatek/mtk_drm_drv.c | 16 ++++- drivers/gpu/drm/mediatek/mtk_drm_fb.c | 92 ------------------------ drivers/gpu/drm/mediatek/mtk_drm_fb.h | 13 ---- drivers/gpu/drm/mediatek/mtk_drm_plane.c | 1 - 4 files changed, 15 insertions(+), 107 deletions(-) delete mode 100644 drivers/gpu/drm/mediatek/mtk_drm_fb.c delete mode 100644 drivers/gpu/drm/mediatek/mtk_drm_fb.h diff --git a/drivers/gpu/drm/mediatek/mtk_drm_drv.c b/drivers/gpu/drm/mediatek/mtk_drm_drv.c index 84d14213d992..2b1c122066ea 100644 --- a/drivers/gpu/drm/mediatek/mtk_drm_drv.c +++ b/drivers/gpu/drm/mediatek/mtk_drm_drv.c @@ -16,8 +16,10 @@ #include #include #include +#include #include #include +#include #include #include #include @@ -27,7 +29,6 @@ #include "mtk_drm_ddp.h" #include "mtk_drm_ddp_comp.h" #include "mtk_drm_drv.h" -#include "mtk_drm_fb.h" #include "mtk_drm_gem.h" #define DRIVER_NAME "mediatek" @@ -115,6 +116,19 @@ static int mtk_atomic_commit(struct drm_device *drm, return 0; } +static struct drm_framebuffer * +mtk_drm_mode_fb_create(struct drm_device *dev, + struct drm_file *file, + const struct drm_mode_fb_cmd2 *cmd) +{ + const struct drm_format_info *info = drm_get_format_info(dev, cmd); + + if (info->num_planes != 1) + return ERR_PTR(-EINVAL); + + return drm_gem_fb_create(dev, file, cmd); +} + static const struct drm_mode_config_funcs mtk_drm_mode_config_funcs = { .fb_create = mtk_drm_mode_fb_create, .atomic_check = drm_atomic_helper_check, diff --git a/drivers/gpu/drm/mediatek/mtk_drm_fb.c b/drivers/gpu/drm/mediatek/mtk_drm_fb.c deleted file mode 100644 index 3f230a28a2dc..000000000000 --- a/drivers/gpu/drm/mediatek/mtk_drm_fb.c +++ /dev/null @@ -1,92 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-only -/* - * Copyright (c) 2015 MediaTek Inc. - */ - -#include -#include - -#include -#include -#include -#include -#include - -#include "mtk_drm_drv.h" -#include "mtk_drm_fb.h" -#include "mtk_drm_gem.h" - -static const struct drm_framebuffer_funcs mtk_drm_fb_funcs = { - .create_handle = drm_gem_fb_create_handle, - .destroy = drm_gem_fb_destroy, -}; - -static struct drm_framebuffer *mtk_drm_framebuffer_init(struct drm_device *dev, - const struct drm_mode_fb_cmd2 *mode, - struct drm_gem_object *obj) -{ - const struct drm_format_info *info = drm_get_format_info(dev, mode); - struct drm_framebuffer *fb; - int ret; - - if (info->num_planes != 1) - return ERR_PTR(-EINVAL); - - fb = kzalloc(sizeof(*fb), GFP_KERNEL); - if (!fb) - return ERR_PTR(-ENOMEM); - - drm_helper_mode_fill_fb_struct(dev, fb, mode); - - fb->obj[0] = obj; - - ret = drm_framebuffer_init(dev, fb, &mtk_drm_fb_funcs); - if (ret) { - DRM_ERROR("failed to initialize framebuffer\n"); - kfree(fb); - return ERR_PTR(ret); - } - - return fb; -} - -struct drm_framebuffer *mtk_drm_mode_fb_create(struct drm_device *dev, - struct drm_file *file, - const struct drm_mode_fb_cmd2 *cmd) -{ - const struct drm_format_info *info = drm_get_format_info(dev, cmd); - struct drm_framebuffer *fb; - struct drm_gem_object *gem; - unsigned int width = cmd->width; - unsigned int height = cmd->height; - unsigned int size, bpp; - int ret; - - if (info->num_planes != 1) - return ERR_PTR(-EINVAL); - - gem = drm_gem_object_lookup(file, cmd->handles[0]); - if (!gem) - return ERR_PTR(-ENOENT); - - bpp = info->cpp[0]; - size = (height - 1) * cmd->pitches[0] + width * bpp; - size += cmd->offsets[0]; - - if (gem->size < size) { - ret = -EINVAL; - goto unreference; - } - - fb = mtk_drm_framebuffer_init(dev, cmd, gem); - if (IS_ERR(fb)) { - ret = PTR_ERR(fb); - goto unreference; - } - - return fb; - -unreference: - drm_gem_object_put_unlocked(gem); - return ERR_PTR(ret); -} diff --git a/drivers/gpu/drm/mediatek/mtk_drm_fb.h b/drivers/gpu/drm/mediatek/mtk_drm_fb.h deleted file mode 100644 index eb64d26001c6..000000000000 --- a/drivers/gpu/drm/mediatek/mtk_drm_fb.h +++ /dev/null @@ -1,13 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0-only */ -/* - * Copyright (c) 2015 MediaTek Inc. - */ - -#ifndef MTK_DRM_FB_H -#define MTK_DRM_FB_H - -struct drm_framebuffer *mtk_drm_mode_fb_create(struct drm_device *dev, - struct drm_file *file, - const struct drm_mode_fb_cmd2 *cmd); - -#endif /* MTK_DRM_FB_H */ diff --git a/drivers/gpu/drm/mediatek/mtk_drm_plane.c b/drivers/gpu/drm/mediatek/mtk_drm_plane.c index 3b0cc91c7023..540ef2faa40a 100644 --- a/drivers/gpu/drm/mediatek/mtk_drm_plane.c +++ b/drivers/gpu/drm/mediatek/mtk_drm_plane.c @@ -13,7 +13,6 @@ #include "mtk_drm_crtc.h" #include "mtk_drm_ddp_comp.h" #include "mtk_drm_drv.h" -#include "mtk_drm_fb.h" #include "mtk_drm_gem.h" #include "mtk_drm_plane.h" From patchwork Fri Nov 15 09:21:16 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Daniel Vetter X-Patchwork-Id: 11245449 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 2468B1393 for ; Fri, 15 Nov 2019 09:21:52 +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 0C92320733 for ; Fri, 15 Nov 2019 09:21:52 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 0C92320733 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=ffwll.ch Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id B3A246E239; Fri, 15 Nov 2019 09:21:36 +0000 (UTC) X-Original-To: intel-gfx@lists.freedesktop.org Delivered-To: intel-gfx@lists.freedesktop.org Received: from mail-wr1-x442.google.com (mail-wr1-x442.google.com [IPv6:2a00:1450:4864:20::442]) by gabe.freedesktop.org (Postfix) with ESMTPS id 795026E1F8 for ; Fri, 15 Nov 2019 09:21:32 +0000 (UTC) Received: by mail-wr1-x442.google.com with SMTP id a15so10122989wrf.9 for ; Fri, 15 Nov 2019 01:21:32 -0800 (PST) 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=ofNJ8QQd5sGKrd+MvK2ikuebIJLqvpUQ1kyGZQwtx/I=; b=on1/RGbbKokq1csyeesvVZWIFAD/d7mA7WIQErwVQHgadlUTcvE98VKouie//6yBDO p5QDECbcQc4B0XcSgl+Ka06AvLH/mxOh9pzjRHiXZrKb/X1F+9rxUeXr+7YCmX8nNRmH 8xcZGXeLVmkg0AaY0nly8IwxN3oVS++t6v9J+ksOTnNHcsfTEl8ITAD/gNqsPivrhboE FiV5OPDfSVBsQ4aCDO9M4vUM/AHii8xMIBdO77Eob9uBOmfget4eWo6GK1Jk2HlfB+8k 6eUWkhlVla6DWv/npyjLeiKy9/Xcy5xN0ltp+w45cHZHQkRpW5ALFFctmlxhrB/o9qx6 +PzA== X-Gm-Message-State: APjAAAW8YjvRHs/K9ziPSsYKVSzfnMWHCifB3ixNAebaLts6g3MXFtFN T9QXHuA6ujJrOEaxl0/cmE5+wA== X-Google-Smtp-Source: APXvYqyQKoodCSy68a/nZvolemA/RUEMw97i8haQjEdjkNAIk+Di+W/dIlbZO269UWOLN4VoIfMQEA== X-Received: by 2002:adf:f44a:: with SMTP id f10mr13999917wrp.63.1573809691156; Fri, 15 Nov 2019 01:21:31 -0800 (PST) Received: from phenom.ffwll.local (212-51-149-96.fiber7.init7.net. [212.51.149.96]) by smtp.gmail.com with ESMTPSA id 11sm8987506wmi.8.2019.11.15.01.21.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 15 Nov 2019 01:21:30 -0800 (PST) From: Daniel Vetter To: DRI Development Date: Fri, 15 Nov 2019 10:21:16 +0100 Message-Id: <20191115092120.4445-5-daniel.vetter@ffwll.ch> X-Mailer: git-send-email 2.24.0 In-Reply-To: <20191115092120.4445-1-daniel.vetter@ffwll.ch> References: <20191115092120.4445-1-daniel.vetter@ffwll.ch> MIME-Version: 1.0 X-Mailman-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ffwll.ch; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=ofNJ8QQd5sGKrd+MvK2ikuebIJLqvpUQ1kyGZQwtx/I=; b=Om/NhQzSdKpM6y/70DSZwXeDQIzy3oww63dVXF+OkGU5AZ0pB+zj8FG7NKM/EXiRWC tsVz9AeWnDSaawt4fCt6LuYisC6aoim0bUIYwOgMWHoKxnN/px9yPhnVw6hqWCdYnapQ 5K/8mdZ77+F6o0wD71fQz9k/MvOSGh1krio6I= Subject: [Intel-gfx] [PATCH 4/8] drm/rockchip: Use drm_gem_fb_create_with_dirty X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?utf-8?q?Heiko_St=C3=BCbner?= , Daniel Vetter , Intel Graphics Development , Sandy Huang , linux-rockchip@lists.infradead.org, Daniel Vetter , linux-arm-kernel@lists.infradead.org Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" If rockchip would switch over to the generic fbdev setup we could grabage collect even more of all this code (all of the remaining fb handling code really). Signed-off-by: Daniel Vetter Cc: Sandy Huang Cc: "Heiko Stübner" Cc: linux-arm-kernel@lists.infradead.org Cc: linux-rockchip@lists.infradead.org Tested-by: Andrzej Pietrasiewicz --- drivers/gpu/drm/rockchip/rockchip_drm_fb.c | 54 +--------------------- 1 file changed, 1 insertion(+), 53 deletions(-) diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_fb.c b/drivers/gpu/drm/rockchip/rockchip_drm_fb.c index ca01234c037c..081dbdaa0b07 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_fb.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_fb.c @@ -53,64 +53,12 @@ rockchip_fb_alloc(struct drm_device *dev, const struct drm_mode_fb_cmd2 *mode_cm return fb; } -static struct drm_framebuffer * -rockchip_user_fb_create(struct drm_device *dev, struct drm_file *file_priv, - const struct drm_mode_fb_cmd2 *mode_cmd) -{ - const struct drm_format_info *info = drm_get_format_info(dev, - mode_cmd); - struct drm_framebuffer *fb; - struct drm_gem_object *objs[ROCKCHIP_MAX_FB_BUFFER]; - struct drm_gem_object *obj; - int num_planes = min_t(int, info->num_planes, ROCKCHIP_MAX_FB_BUFFER); - int ret; - int i; - - for (i = 0; i < num_planes; i++) { - unsigned int width = mode_cmd->width / (i ? info->hsub : 1); - unsigned int height = mode_cmd->height / (i ? info->vsub : 1); - unsigned int min_size; - - obj = drm_gem_object_lookup(file_priv, mode_cmd->handles[i]); - if (!obj) { - DRM_DEV_ERROR(dev->dev, - "Failed to lookup GEM object\n"); - ret = -ENXIO; - goto err_gem_object_unreference; - } - - min_size = (height - 1) * mode_cmd->pitches[i] + - mode_cmd->offsets[i] + - width * info->cpp[i]; - - if (obj->size < min_size) { - drm_gem_object_put_unlocked(obj); - ret = -EINVAL; - goto err_gem_object_unreference; - } - objs[i] = obj; - } - - fb = rockchip_fb_alloc(dev, mode_cmd, objs, i); - if (IS_ERR(fb)) { - ret = PTR_ERR(fb); - goto err_gem_object_unreference; - } - - return fb; - -err_gem_object_unreference: - for (i--; i >= 0; i--) - drm_gem_object_put_unlocked(objs[i]); - return ERR_PTR(ret); -} - static const struct drm_mode_config_helper_funcs rockchip_mode_config_helpers = { .atomic_commit_tail = drm_atomic_helper_commit_tail_rpm, }; static const struct drm_mode_config_funcs rockchip_drm_mode_config_funcs = { - .fb_create = rockchip_user_fb_create, + .fb_create = drm_gem_fb_create, .output_poll_changed = drm_fb_helper_output_poll_changed, .atomic_check = drm_atomic_helper_check, .atomic_commit = drm_atomic_helper_commit, From patchwork Fri Nov 15 09:21:17 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Daniel Vetter X-Patchwork-Id: 11245437 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 8A27E1393 for ; Fri, 15 Nov 2019 09:21: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 71F522073A for ; Fri, 15 Nov 2019 09:21:45 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 71F522073A Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=ffwll.ch Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 0D2BF6E20B; Fri, 15 Nov 2019 09:21:36 +0000 (UTC) X-Original-To: intel-gfx@lists.freedesktop.org Delivered-To: intel-gfx@lists.freedesktop.org Received: from mail-wr1-x443.google.com (mail-wr1-x443.google.com [IPv6:2a00:1450:4864:20::443]) by gabe.freedesktop.org (Postfix) with ESMTPS id D1EDB6E20D for ; Fri, 15 Nov 2019 09:21:33 +0000 (UTC) Received: by mail-wr1-x443.google.com with SMTP id i12so10139826wro.5 for ; Fri, 15 Nov 2019 01:21:33 -0800 (PST) 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=vX1DkINX0qzwZxajq4+jl5Y1sZJsGpdwsg9rStYWNQQ=; b=r8P4IeIo4QmoFs+d24FmTmZrSDzeJY9pyvfHPDMjdtPOa0e4y4iQX1hPSnhJZvdmjL vJwZ+eOSBa58k22DsD1kIOWio7OSAKvGfDjivoqxKsYU9CP6P6oXFX/VZbIYF7F93Jov sJN/xOtEIBq9qLOMNRn6Mk3MvBOaAjj25M3cCWpMNA/hoRgg+zMUaLgc8dQ3aC5w3Z/Q 42EnCXjpcEubreHxP+LhQ/RiSfxqVVpImL97lrdWpNs74UxDdq8Nb95FipRwb5/mA8h+ TBTEMUUSJe4kPV17S9cGZwGboJOrD92crWtsRMmeuy6MM4fR3/f7VDboW9hbAedN2ieq cnlQ== X-Gm-Message-State: APjAAAVcv4BYUZvywe96n2DfFZVThpiElE0h0T/x6aUq0C04ijtfHs+9 UizCL8HSpdRj+bHOU2Guz0aOVu5eJ20= X-Google-Smtp-Source: APXvYqwl+q75uP5+/xoSYNSKpC4WkEgq9hN8gXmGTeHhHGWE/fuMiQXHfXof5Clrb4tp5cG9MRQ2TQ== X-Received: by 2002:adf:ec42:: with SMTP id w2mr1852882wrn.32.1573809692466; Fri, 15 Nov 2019 01:21:32 -0800 (PST) Received: from phenom.ffwll.local (212-51-149-96.fiber7.init7.net. [212.51.149.96]) by smtp.gmail.com with ESMTPSA id 11sm8987506wmi.8.2019.11.15.01.21.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 15 Nov 2019 01:21:31 -0800 (PST) From: Daniel Vetter To: DRI Development Date: Fri, 15 Nov 2019 10:21:17 +0100 Message-Id: <20191115092120.4445-6-daniel.vetter@ffwll.ch> X-Mailer: git-send-email 2.24.0 In-Reply-To: <20191115092120.4445-1-daniel.vetter@ffwll.ch> References: <20191115092120.4445-1-daniel.vetter@ffwll.ch> MIME-Version: 1.0 X-Mailman-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ffwll.ch; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=vX1DkINX0qzwZxajq4+jl5Y1sZJsGpdwsg9rStYWNQQ=; b=X8syPp1+HZ+OkMoxH1Z7aBeW6cY1mcPVA+MXokDIZ2P2RGVZ6wVzjGG3ISY/dx2j3Q 9/UvK8EaFQQHqEhZn/4ah/HszUK/02TEM2cvfnG90VCk/LO11hS1ZON9SyI0ngSHmU8A uyRwEeI62n3OyNGoz0WnA6PuvMtqDvQ9tuVhg= Subject: [Intel-gfx] [PATCH 5/8] drm/tilcdc: Drop drm_gem_fb_create wrapper X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Daniel Vetter , Intel Graphics Development , Tomi Valkeinen , Jyri Sarha , Daniel Vetter Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" Doesn't do anything. Signed-off-by: Daniel Vetter Cc: Jyri Sarha Cc: Tomi Valkeinen Acked-by: Jyri Sarha --- drivers/gpu/drm/tilcdc/tilcdc_drv.c | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/drivers/gpu/drm/tilcdc/tilcdc_drv.c b/drivers/gpu/drm/tilcdc/tilcdc_drv.c index 2a9e67597375..a160880bea0a 100644 --- a/drivers/gpu/drm/tilcdc/tilcdc_drv.c +++ b/drivers/gpu/drm/tilcdc/tilcdc_drv.c @@ -64,12 +64,6 @@ void tilcdc_module_cleanup(struct tilcdc_module *mod) static struct of_device_id tilcdc_of_match[]; -static struct drm_framebuffer *tilcdc_fb_create(struct drm_device *dev, - struct drm_file *file_priv, const struct drm_mode_fb_cmd2 *mode_cmd) -{ - return drm_gem_fb_create(dev, file_priv, mode_cmd); -} - static int tilcdc_atomic_check(struct drm_device *dev, struct drm_atomic_state *state) { @@ -140,7 +134,7 @@ static int tilcdc_commit(struct drm_device *dev, } static const struct drm_mode_config_funcs mode_config_funcs = { - .fb_create = tilcdc_fb_create, + .fb_create = drm_gem_fb_create, .atomic_check = tilcdc_atomic_check, .atomic_commit = tilcdc_commit, }; From patchwork Fri Nov 15 09:21:18 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Daniel Vetter X-Patchwork-Id: 11245447 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 DA27617E0 for ; Fri, 15 Nov 2019 09:21:50 +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 C28BE2073A for ; Fri, 15 Nov 2019 09:21:50 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org C28BE2073A Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=ffwll.ch Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 9C4786E22F; Fri, 15 Nov 2019 09:21:36 +0000 (UTC) X-Original-To: intel-gfx@lists.freedesktop.org Delivered-To: intel-gfx@lists.freedesktop.org Received: from mail-wm1-x341.google.com (mail-wm1-x341.google.com [IPv6:2a00:1450:4864:20::341]) by gabe.freedesktop.org (Postfix) with ESMTPS id EC8766E1F8 for ; Fri, 15 Nov 2019 09:21:34 +0000 (UTC) Received: by mail-wm1-x341.google.com with SMTP id b11so8907455wmb.5 for ; Fri, 15 Nov 2019 01:21:34 -0800 (PST) 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=7bn7YokeAeXm5BBJ6T/lvBeGEKknPiOWxZqo9r4HuKg=; b=a3dv7967QdeI3Kre2+tIvHQyIFGYksU/4l0XIDe79/In0Uv8e5cjkf21qCCF8F7rnI vwuQ/a0L8cXjSK4Z4yh6X/JYuyeGMTxhyxP8oBDS/f8DlMJ9kJgTMQHLwrdEqcqiz4Wp o94rXHyIyvgP1n8Y0jDlxMQOVkhxbGrZ1JLYRHO+QhMtAjbVkL4iEYjPwt8G3Shgx4AX pglwMXaiZP3mq24Wcx8LGV85n9XwyUWWmIGNcV1HUN6gTU7o6D/p6lDNkAK+0Qrnsay3 l6fflSThHuA8UuWztP36OJaVa+Kg0aOiuB0XHDmcqwwf7FWnLC6OEFk0U5N1P2J82gad B6Pg== X-Gm-Message-State: APjAAAUeVmlYffl0QoiH68EFETd98Q4htM4Zf4V2hc6e91OuPGCYpLLY bU4HEHwxbwtYZEWBw8q/YwH4EA== X-Google-Smtp-Source: APXvYqw5pA6Z4/To2HtwhxA8s+cQMEm12J+4VegYlzVpaDN9QcIFr5+3oidjgBd15trxx9d517+bhw== X-Received: by 2002:a1c:62c5:: with SMTP id w188mr13020645wmb.77.1573809693584; Fri, 15 Nov 2019 01:21:33 -0800 (PST) Received: from phenom.ffwll.local (212-51-149-96.fiber7.init7.net. [212.51.149.96]) by smtp.gmail.com with ESMTPSA id 11sm8987506wmi.8.2019.11.15.01.21.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 15 Nov 2019 01:21:32 -0800 (PST) From: Daniel Vetter To: DRI Development Date: Fri, 15 Nov 2019 10:21:18 +0100 Message-Id: <20191115092120.4445-7-daniel.vetter@ffwll.ch> X-Mailer: git-send-email 2.24.0 In-Reply-To: <20191115092120.4445-1-daniel.vetter@ffwll.ch> References: <20191115092120.4445-1-daniel.vetter@ffwll.ch> MIME-Version: 1.0 X-Mailman-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ffwll.ch; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=7bn7YokeAeXm5BBJ6T/lvBeGEKknPiOWxZqo9r4HuKg=; b=iPsLs/5cfYIlrdmZTkqsrS08Xzs+mb1WigGIc8UF9mWaopmOt67NMkE/lXX4F+eOoG sp3k+sinSMfKknbC2E/NHc0xpYuS/w/dMw/+BuJ86EZXz8bPRSoOq9QAXYjPCB1Yvifq U2y8J/LVbYpFVejCPFSt7NoNf07QSjEGvzgEU= Subject: [Intel-gfx] [PATCH 6/8] drm/xen: Simplify fb_create X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Daniel Vetter , Intel Graphics Development , Oleksandr Andrushchenko , xen-devel@lists.xenproject.org, Daniel Vetter Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" The current code is a pretty good wtf moment, since we drop the reference before we use it. It's not a big deal, because a) we only use the pointer, so doesn't blow up and the real reason b) fb->obj[0] already holds a full reference for us. Might as well take the real pointer ins't of complicated games that baffle. Signed-off-by: Daniel Vetter Cc: Oleksandr Andrushchenko Cc: xen-devel@lists.xenproject.org Reviewed-by: Oleksandr Andrushchenko --- drivers/gpu/drm/xen/xen_drm_front_kms.c | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/drivers/gpu/drm/xen/xen_drm_front_kms.c b/drivers/gpu/drm/xen/xen_drm_front_kms.c index ff506bc99414..4f34c5208180 100644 --- a/drivers/gpu/drm/xen/xen_drm_front_kms.c +++ b/drivers/gpu/drm/xen/xen_drm_front_kms.c @@ -63,14 +63,7 @@ fb_create(struct drm_device *dev, struct drm_file *filp, if (IS_ERR_OR_NULL(fb)) return fb; - gem_obj = drm_gem_object_lookup(filp, mode_cmd->handles[0]); - if (!gem_obj) { - DRM_ERROR("Failed to lookup GEM object\n"); - ret = -ENOENT; - goto fail; - } - - drm_gem_object_put_unlocked(gem_obj); + gem_obj = fb->obj[0]; ret = xen_drm_front_fb_attach(drm_info->front_info, xen_drm_front_dbuf_to_cookie(gem_obj), From patchwork Fri Nov 15 09:21:19 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Daniel Vetter X-Patchwork-Id: 11245455 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 46D321393 for ; Fri, 15 Nov 2019 09:21:58 +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 2F150207DD for ; Fri, 15 Nov 2019 09:21:58 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 2F150207DD Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=ffwll.ch Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 41A106E26F; Fri, 15 Nov 2019 09:21:41 +0000 (UTC) X-Original-To: intel-gfx@lists.freedesktop.org Delivered-To: intel-gfx@lists.freedesktop.org Received: from mail-wm1-x342.google.com (mail-wm1-x342.google.com [IPv6:2a00:1450:4864:20::342]) by gabe.freedesktop.org (Postfix) with ESMTPS id EDE286E203 for ; Fri, 15 Nov 2019 09:21:35 +0000 (UTC) Received: by mail-wm1-x342.google.com with SMTP id b11so8907505wmb.5 for ; Fri, 15 Nov 2019 01:21:35 -0800 (PST) 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=m1TUOA86WiJHifsa48PYIEWcBU4CThNvWgRMJWg7N8U=; b=Co70GpeulVjNXJ4uOciY0g84a0pVmbIePXAPQQn9yA3rpXPSXBkn7T8ARnoR728Hnm an0Gy4CgKnJ/phlqVUTOakk/lGzxjh69O7aHZi/mh/fmxNdPBgFAkiigKvZYkt6AOWUu aMNEyHDSfLd0ss2Li/1bvFsAU4zzjcS8HQIYbIs+FEsbmebwpU2HIRf9Do1IFGrC8Lv9 HA5fF54lmC0ccA8g0m/2VCA8CCJKmDA5uYQQguK27b2/u7XJFNuHcACWpzrGhKSY6HLC EintTEflmcK8JbKRpdamyAXWzIVDAT+qa/pWUJL3BkyGfvrteuK+XZv1ONLF7phVmuO7 5MCw== X-Gm-Message-State: APjAAAXUK1mqcdrPo4dklvpWI/Vnhk4TdUVNGHg8SjTOSeZCUh2SjyKE rO2fsi9taXIK4RbRZ8/r5QZzOXZ1rvU= X-Google-Smtp-Source: APXvYqxC1CKWSsabmpFq/PNKOrJTAnlTW+sSByeih67Z8SXJh1FQ4+ORhyyIgafVSrtnsJ+/usglPA== X-Received: by 2002:a1c:9a4f:: with SMTP id c76mr13426956wme.103.1573809694581; Fri, 15 Nov 2019 01:21:34 -0800 (PST) Received: from phenom.ffwll.local (212-51-149-96.fiber7.init7.net. [212.51.149.96]) by smtp.gmail.com with ESMTPSA id 11sm8987506wmi.8.2019.11.15.01.21.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 15 Nov 2019 01:21:33 -0800 (PST) From: Daniel Vetter To: DRI Development Date: Fri, 15 Nov 2019 10:21:19 +0100 Message-Id: <20191115092120.4445-8-daniel.vetter@ffwll.ch> X-Mailer: git-send-email 2.24.0 In-Reply-To: <20191115092120.4445-1-daniel.vetter@ffwll.ch> References: <20191115092120.4445-1-daniel.vetter@ffwll.ch> MIME-Version: 1.0 X-Mailman-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ffwll.ch; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=m1TUOA86WiJHifsa48PYIEWcBU4CThNvWgRMJWg7N8U=; b=b6JfvGmkfsaUg726ZFzjHhmLaZeS2YkImG9xshjsVTHmOSW+DuHeABzOMyC8JBEuK1 f7VvEWry5pUoXoW5F9Llm2GdpGUGfghA1lzFLp8STudKGy4JsFvKCLEbHoNj7sDbumTN YboFciuV4+yuCO1qLwQu0DR5Co4IyoD1o9X+Y= Subject: [Intel-gfx] [PATCH 7/8] drm/hibmc: Use drm_gem_fb_create X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Daniel Vetter , Intel Graphics Development , Daniel Vetter Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" Again we could delete a lot more if we'd switch over to the generic fbdev stuff. Signed-off-by: Daniel Vetter Acked-by: Thomas Zimmermann --- .../gpu/drm/hisilicon/hibmc/hibmc_drm_de.c | 4 +- .../gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h | 11 +--- .../gpu/drm/hisilicon/hibmc/hibmc_drm_fbdev.c | 5 +- drivers/gpu/drm/hisilicon/hibmc/hibmc_ttm.c | 62 +++++-------------- 4 files changed, 19 insertions(+), 63 deletions(-) diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c index 6527a97f68a3..2d0920ec4554 100644 --- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c +++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c @@ -99,14 +99,12 @@ static void hibmc_plane_atomic_update(struct drm_plane *plane, s64 gpu_addr = 0; unsigned int line_l; struct hibmc_drm_private *priv = plane->dev->dev_private; - struct hibmc_framebuffer *hibmc_fb; struct drm_gem_vram_object *gbo; if (!state->fb) return; - hibmc_fb = to_hibmc_framebuffer(state->fb); - gbo = drm_gem_vram_of_gem(hibmc_fb->obj); + gbo = drm_gem_vram_of_gem(fb->obj[0]); gpu_addr = drm_gem_vram_offset(gbo); if (WARN_ON_ONCE(gpu_addr < 0)) diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h index e58ecd7edcf8..ab5b4a4a2095 100644 --- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h +++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h @@ -20,14 +20,9 @@ struct drm_device; struct drm_gem_object; -struct hibmc_framebuffer { - struct drm_framebuffer fb; - struct drm_gem_object *obj; -}; - struct hibmc_fbdev { struct drm_fb_helper helper; /* must be first */ - struct hibmc_framebuffer *fb; + struct drm_framebuffer *fb; int size; }; @@ -47,8 +42,6 @@ struct hibmc_drm_private { struct hibmc_fbdev *fbdev; }; -#define to_hibmc_framebuffer(x) container_of(x, struct hibmc_framebuffer, fb) - void hibmc_set_power_mode(struct hibmc_drm_private *priv, unsigned int power_mode); void hibmc_set_current_gate(struct hibmc_drm_private *priv, @@ -61,7 +54,7 @@ void hibmc_fbdev_fini(struct hibmc_drm_private *priv); int hibmc_gem_create(struct drm_device *dev, u32 size, bool iskernel, struct drm_gem_object **obj); -struct hibmc_framebuffer * +struct drm_framebuffer * hibmc_framebuffer_init(struct drm_device *dev, const struct drm_mode_fb_cmd2 *mode_cmd, struct drm_gem_object *obj); diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_fbdev.c b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_fbdev.c index b4c1cea051e8..446aeedc9e29 100644 --- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_fbdev.c +++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_fbdev.c @@ -141,15 +141,14 @@ static int hibmc_drm_fb_create(struct drm_fb_helper *helper, static void hibmc_fbdev_destroy(struct hibmc_fbdev *fbdev) { - struct hibmc_framebuffer *gfb = fbdev->fb; struct drm_fb_helper *fbh = &fbdev->helper; drm_fb_helper_unregister_fbi(fbh); drm_fb_helper_fini(fbh); - if (gfb) - drm_framebuffer_put(&gfb->fb); + if (fbdev->fb) + drm_framebuffer_put(fbdev->fb); } static const struct drm_fb_helper_funcs hibmc_fbdev_helper_funcs = { diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_ttm.c b/drivers/gpu/drm/hisilicon/hibmc/hibmc_ttm.c index 21b684eab5c9..386033b0d3a2 100644 --- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_ttm.c +++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_ttm.c @@ -16,6 +16,7 @@ #include #include #include +#include #include #include "hibmc_drm_drv.h" @@ -97,74 +98,39 @@ int hibmc_dumb_create(struct drm_file *file, struct drm_device *dev, return 0; } -static void hibmc_user_framebuffer_destroy(struct drm_framebuffer *fb) -{ - struct hibmc_framebuffer *hibmc_fb = to_hibmc_framebuffer(fb); - - drm_gem_object_put_unlocked(hibmc_fb->obj); - drm_framebuffer_cleanup(fb); - kfree(hibmc_fb); -} - static const struct drm_framebuffer_funcs hibmc_fb_funcs = { - .destroy = hibmc_user_framebuffer_destroy, + .destroy = drm_gem_fb_destroy, + .create_handle = drm_gem_fb_create_handle, }; -struct hibmc_framebuffer * +struct drm_framebuffer * hibmc_framebuffer_init(struct drm_device *dev, const struct drm_mode_fb_cmd2 *mode_cmd, struct drm_gem_object *obj) { - struct hibmc_framebuffer *hibmc_fb; + struct drm_framebuffer *fb; int ret; - hibmc_fb = kzalloc(sizeof(*hibmc_fb), GFP_KERNEL); - if (!hibmc_fb) { - DRM_ERROR("failed to allocate hibmc_fb\n"); + fb = kzalloc(sizeof(*fb), GFP_KERNEL); + if (!fb) { + DRM_ERROR("failed to allocate fb\n"); return ERR_PTR(-ENOMEM); } - drm_helper_mode_fill_fb_struct(dev, &hibmc_fb->fb, mode_cmd); - hibmc_fb->obj = obj; - ret = drm_framebuffer_init(dev, &hibmc_fb->fb, &hibmc_fb_funcs); + drm_helper_mode_fill_fb_struct(dev, fb, mode_cmd); + fb->obj[0] = obj; + ret = drm_framebuffer_init(dev, fb, &hibmc_fb_funcs); if (ret) { DRM_ERROR("drm_framebuffer_init failed: %d\n", ret); - kfree(hibmc_fb); + kfree(fb); return ERR_PTR(ret); } - return hibmc_fb; -} - -static struct drm_framebuffer * -hibmc_user_framebuffer_create(struct drm_device *dev, - struct drm_file *filp, - const struct drm_mode_fb_cmd2 *mode_cmd) -{ - struct drm_gem_object *obj; - struct hibmc_framebuffer *hibmc_fb; - - DRM_DEBUG_DRIVER("%dx%d, format %c%c%c%c\n", - mode_cmd->width, mode_cmd->height, - (mode_cmd->pixel_format) & 0xff, - (mode_cmd->pixel_format >> 8) & 0xff, - (mode_cmd->pixel_format >> 16) & 0xff, - (mode_cmd->pixel_format >> 24) & 0xff); - - obj = drm_gem_object_lookup(filp, mode_cmd->handles[0]); - if (!obj) - return ERR_PTR(-ENOENT); - - hibmc_fb = hibmc_framebuffer_init(dev, mode_cmd, obj); - if (IS_ERR(hibmc_fb)) { - drm_gem_object_put_unlocked(obj); - return ERR_PTR((long)hibmc_fb); - } - return &hibmc_fb->fb; + return fb; } const struct drm_mode_config_funcs hibmc_mode_funcs = { .atomic_check = drm_atomic_helper_check, .atomic_commit = drm_atomic_helper_commit, - .fb_create = hibmc_user_framebuffer_create, + .fb_create = drm_gem_fb_create, }; From patchwork Fri Nov 15 09:21:20 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Daniel Vetter X-Patchwork-Id: 11245459 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 5C50F159A for ; Fri, 15 Nov 2019 09:22:01 +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 4490820733 for ; Fri, 15 Nov 2019 09:22:01 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 4490820733 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=ffwll.ch Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 698D36E29D; Fri, 15 Nov 2019 09:21:41 +0000 (UTC) X-Original-To: intel-gfx@lists.freedesktop.org Delivered-To: intel-gfx@lists.freedesktop.org Received: from mail-wm1-x32e.google.com (mail-wm1-x32e.google.com [IPv6:2a00:1450:4864:20::32e]) by gabe.freedesktop.org (Postfix) with ESMTPS id 1D4816E264 for ; Fri, 15 Nov 2019 09:21:37 +0000 (UTC) Received: by mail-wm1-x32e.google.com with SMTP id z26so8886322wmi.4 for ; Fri, 15 Nov 2019 01:21:37 -0800 (PST) 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=3ZOZSGjuzwminPcDUMzMQQAJ/v0yGAVO3+XoBKIorZg=; b=PmoACWYoUTMj6Qwz1A/KO0oMlKwBZVJCnGB/WBZ7X5fEoBaL9kG80ZzSZYMs6VAhFX +gG1sv+UI3aAYqkgj6udEALjvOvgt9ywiR/CzlAqlfykYfZAtT1AsRXpvpfAcVObjVq7 pDLR0hyBBj1BK3n1ibBp4wv4Ah+yz1wGexcVwlye87Q2xO9aShMYqLf9Eb20So1rFEDB LxPjhykCvx41olkmhhUoEH9KM4pPq41GKoPjwG2K1aAg21dT2l59jWeVTDnZElYgnwxQ X4Sq7Kv64HF2fed7hPo48qKZi3C7GyWaGV6TxXASGfnMgtjTOCxPluz0EdK3qNwCEyfh 1vfw== X-Gm-Message-State: APjAAAUNo/vCi/s5w/zqndznYzIaH2TVA7U4A4+l7PycjW7pmGwu5gjU I6VG2EfDPIVSgMG4MFQwsHWOXJdQEsk= X-Google-Smtp-Source: APXvYqywjQTl3gGc6fgeCR78rBfxBmOimdQO3NVza++3R0TvF2NccoDIcDDTHBnUjLY+EcbQICdOMA== X-Received: by 2002:a1c:6386:: with SMTP id x128mr13089281wmb.41.1573809695721; Fri, 15 Nov 2019 01:21:35 -0800 (PST) Received: from phenom.ffwll.local (212-51-149-96.fiber7.init7.net. [212.51.149.96]) by smtp.gmail.com with ESMTPSA id 11sm8987506wmi.8.2019.11.15.01.21.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 15 Nov 2019 01:21:35 -0800 (PST) From: Daniel Vetter To: DRI Development Date: Fri, 15 Nov 2019 10:21:20 +0100 Message-Id: <20191115092120.4445-9-daniel.vetter@ffwll.ch> X-Mailer: git-send-email 2.24.0 In-Reply-To: <20191115092120.4445-1-daniel.vetter@ffwll.ch> References: <20191115092120.4445-1-daniel.vetter@ffwll.ch> MIME-Version: 1.0 X-Mailman-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ffwll.ch; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=3ZOZSGjuzwminPcDUMzMQQAJ/v0yGAVO3+XoBKIorZg=; b=U8icL1uXfof5LpbN7+eAqz8xLLnN3MBi98hJxWiNfcLPHOvS/xF1OGMzvoJZQRf3fI couA2d0zgTcDxj1DfbYNtDSi7zU9RH2KON0GptfDOcrAlvLlk6gyeK65WpYnNl9xzG17 1iD6SNGRzTPIbjEDIP/2TXYqnIhwKJWkq2fe8= Subject: [Intel-gfx] [PATCH 8/8] drm/todo: Add entry for fb funcs related cleanups X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Daniel Vetter , Intel Graphics Development , Daniel Vetter Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" We're doing a great job for really simple drivers right now, but still a lot of boilerplate for the bigger ones. Signed-off-by: Daniel Vetter --- Documentation/gpu/todo.rst | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/Documentation/gpu/todo.rst b/Documentation/gpu/todo.rst index 3ec509381fc5..2d85f37284a1 100644 --- a/Documentation/gpu/todo.rst +++ b/Documentation/gpu/todo.rst @@ -182,6 +182,32 @@ Contact: Maintainer of the driver you plan to convert Level: Intermediate +drm_framebuffer_funcs and drm_mode_config_funcs.fb_create cleanup +----------------------------------------------------------------- + +A lot more drivers could be switched over to the drm_gem_framebuffer helpers. +Various hold-ups: + +- Need to switch over to the generic dirty tracking code using + drm_atomic_helper_dirtyfb first (e.g. qxl). + +- Need to switch to drm_fbdev_generic_setup(), otherwise a lot of the custom fb + setup code can't be deleted. + +- Many drivers wrap drm_gem_fb_create() only to check for valid formats. For + atomic drivers we could check for valid formats by calling + drm_plane_check_pixel_format() against all planes, and pass if any plane + supports the format. For non-atomic that's not possible since like the format + list for the primary plane is fake and we'd therefor reject valid formats. + +- Many drivers subclass drm_framebuffer, we'd need a embedding compatible + version of the varios drm_gem_fb_create functions. Maybe called + drm_gem_fb_create/_with_dirty/_with_funcs as needed. + +Contact: Daniel Vetter + +Level: Intermediate + Clean up mmap forwarding ------------------------