get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/1.2/patches/2225556/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 2225556,
    "url": "http://patchwork.ozlabs.org/api/1.2/patches/2225556/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/linux-tegra/patch/20260421073646.144712-5-tzimmermann@suse.de/",
    "project": {
        "id": 21,
        "url": "http://patchwork.ozlabs.org/api/1.2/projects/21/?format=api",
        "name": "Linux Tegra Development",
        "link_name": "linux-tegra",
        "list_id": "linux-tegra.vger.kernel.org",
        "list_email": "linux-tegra@vger.kernel.org",
        "web_url": null,
        "scm_url": null,
        "webscm_url": null,
        "list_archive_url": "",
        "list_archive_url_format": "",
        "commit_url_format": ""
    },
    "msgid": "<20260421073646.144712-5-tzimmermann@suse.de>",
    "list_archive_url": null,
    "date": "2026-04-21T07:29:08",
    "name": "[4/5] drm/tegra: fbdev: Use a DRM client buffer",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "3eed953615277335316dace2d603f501b785df4e",
    "submitter": {
        "id": 74535,
        "url": "http://patchwork.ozlabs.org/api/1.2/people/74535/?format=api",
        "name": "Thomas Zimmermann",
        "email": "tzimmermann@suse.de"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/linux-tegra/patch/20260421073646.144712-5-tzimmermann@suse.de/mbox/",
    "series": [
        {
            "id": 500750,
            "url": "http://patchwork.ozlabs.org/api/1.2/series/500750/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/linux-tegra/list/?series=500750",
            "date": "2026-04-21T07:29:04",
            "name": "drm/tegra: fbdev: Use client buffers",
            "version": 1,
            "mbox": "http://patchwork.ozlabs.org/series/500750/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/2225556/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/2225556/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "\n <linux-tegra+bounces-13830-incoming=patchwork.ozlabs.org@vger.kernel.org>",
        "X-Original-To": [
            "incoming@patchwork.ozlabs.org",
            "linux-tegra@vger.kernel.org"
        ],
        "Delivered-To": "patchwork-incoming@legolas.ozlabs.org",
        "Authentication-Results": [
            "legolas.ozlabs.org;\n\tdkim=pass (1024-bit key;\n unprotected) header.d=suse.de header.i=@suse.de header.a=rsa-sha256\n header.s=susede2_rsa header.b=RZUsWEgD;\n\tdkim=pass header.d=suse.de header.i=@suse.de header.a=ed25519-sha256\n header.s=susede2_ed25519 header.b=3XopyJxM;\n\tdkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de\n header.a=rsa-sha256 header.s=susede2_rsa header.b=RZUsWEgD;\n\tdkim=neutral header.d=suse.de header.i=@suse.de header.a=ed25519-sha256\n header.s=susede2_ed25519 header.b=3XopyJxM;\n\tdkim-atps=neutral",
            "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org\n (client-ip=2600:3c0a:e001:db::12fc:5321; helo=sea.lore.kernel.org;\n envelope-from=linux-tegra+bounces-13830-incoming=patchwork.ozlabs.org@vger.kernel.org;\n receiver=patchwork.ozlabs.org)",
            "smtp.subspace.kernel.org;\n\tdkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de\n header.b=\"RZUsWEgD\";\n\tdkim=permerror (0-bit key) header.d=suse.de header.i=@suse.de\n header.b=\"3XopyJxM\";\n\tdkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de\n header.b=\"RZUsWEgD\";\n\tdkim=permerror (0-bit key) header.d=suse.de header.i=@suse.de\n header.b=\"3XopyJxM\"",
            "smtp.subspace.kernel.org;\n arc=none smtp.client-ip=195.135.223.131",
            "smtp.subspace.kernel.org;\n dmarc=pass (p=none dis=none) header.from=suse.de",
            "smtp.subspace.kernel.org;\n spf=pass smtp.mailfrom=suse.de",
            "smtp-out2.suse.de;\n\tnone"
        ],
        "Received": [
            "from sea.lore.kernel.org (sea.lore.kernel.org\n [IPv6:2600:3c0a:e001:db::12fc:5321])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4g0DhQ6LgBz1yGs\n\tfor <incoming@patchwork.ozlabs.org>; Tue, 21 Apr 2026 17:37:10 +1000 (AEST)",
            "from smtp.subspace.kernel.org (conduit.subspace.kernel.org\n [100.90.174.1])\n\tby sea.lore.kernel.org (Postfix) with ESMTP id 780B7300F5D9\n\tfor <incoming@patchwork.ozlabs.org>; Tue, 21 Apr 2026 07:37:04 +0000 (UTC)",
            "from localhost.localdomain (localhost.localdomain [127.0.0.1])\n\tby smtp.subspace.kernel.org (Postfix) with ESMTP id 5E52A344D95;\n\tTue, 21 Apr 2026 07:37:04 +0000 (UTC)",
            "from smtp-out2.suse.de (smtp-out2.suse.de [195.135.223.131])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))\n\t(No client certificate requested)\n\tby smtp.subspace.kernel.org (Postfix) with ESMTPS id C58A92BE05F\n\tfor <linux-tegra@vger.kernel.org>; Tue, 21 Apr 2026 07:37:02 +0000 (UTC)",
            "from imap1.dmz-prg2.suse.org (unknown [10.150.64.97])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest\n SHA256)\n\t(No client certificate requested)\n\tby smtp-out2.suse.de (Postfix) with ESMTPS id 643455BCE1;\n\tTue, 21 Apr 2026 07:36:55 +0000 (UTC)",
            "from imap1.dmz-prg2.suse.org (localhost [127.0.0.1])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest\n SHA256)\n\t(No client certificate requested)\n\tby imap1.dmz-prg2.suse.org (Postfix) with ESMTPS id 221AC593AF;\n\tTue, 21 Apr 2026 07:36:55 +0000 (UTC)",
            "from dovecot-director2.suse.de ([2a07:de40:b281:106:10:150:64:167])\n\tby imap1.dmz-prg2.suse.org with ESMTPSA\n\tid 6KYjBxcp52lgMQAAD6G6ig\n\t(envelope-from <tzimmermann@suse.de>); Tue, 21 Apr 2026 07:36:55 +0000"
        ],
        "ARC-Seal": "i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;\n\tt=1776757024; cv=none;\n b=a9epn+iXU4UlJ9UCEYZNRfFAAJTt0rFxkq+LmR7TganR8IQzXPdTrBQLXGo0VoMghPwkXzJYHwIGEPpqHDrTbtH4t+wERyfwlaI9ohW4KKbXB0B3dftTQKIooAKf+eHrzyD8gLKni5py/WdXDAjbpgT+m8xm7+9jxbx2bbNz2Cs=",
        "ARC-Message-Signature": "i=1; a=rsa-sha256; d=subspace.kernel.org;\n\ts=arc-20240116; t=1776757024; c=relaxed/simple;\n\tbh=Uoczr5WAhkWlRyCy57NfCw0qP8NmzaL7zfAO7ZGaLdM=;\n\th=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References:\n\t MIME-Version;\n b=C9yMGtIHOBh7kzl0WRl5bxkROxmBty4K8FrJvSJgDXxeCKqc/dvJiRwHMV8qqQ5f/wfVAhYVRUBjog3pOELX5snHGDiu9PPSdJ/6aS8XwxA60c9H+hD023XojcnJox8qkh4bx0ExxM7SJJ7pA1V//59vhbIJQrkKB9X30VwIr0c=",
        "ARC-Authentication-Results": "i=1; smtp.subspace.kernel.org;\n dmarc=pass (p=none dis=none) header.from=suse.de;\n spf=pass smtp.mailfrom=suse.de;\n dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de\n header.b=RZUsWEgD;\n dkim=permerror (0-bit key) header.d=suse.de header.i=@suse.de\n header.b=3XopyJxM;\n dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de\n header.b=RZUsWEgD;\n dkim=permerror (0-bit key) header.d=suse.de header.i=@suse.de\n header.b=3XopyJxM; arc=none smtp.client-ip=195.135.223.131",
        "DKIM-Signature": [
            "v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de;\n s=susede2_rsa;\n\tt=1776757015;\n h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:\n\t mime-version:mime-version:\n\t content-transfer-encoding:content-transfer-encoding:\n\t in-reply-to:in-reply-to:references:references;\n\tbh=Daf0Jsw+offRMnbEhayvvjA2M01+QV/OTxOZSJbv60s=;\n\tb=RZUsWEgDmjaraOWNSccQN8EGULGlXV3aLFVCEVUd0l/O8ubP8RJECGDdkkBVMd644vkmM6\n\t2/MuAQcGuifTcpaBokUILgPNYIXUgYzP5sTbysbLw3arnMXmxKobuWfw0Sl0sIv50H0SpE\n\tt+oqHhVsnBgulbLdwNSQ0O76nA0u0IE=",
            "v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de;\n\ts=susede2_ed25519; t=1776757015;\n\th=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:\n\t mime-version:mime-version:\n\t content-transfer-encoding:content-transfer-encoding:\n\t in-reply-to:in-reply-to:references:references;\n\tbh=Daf0Jsw+offRMnbEhayvvjA2M01+QV/OTxOZSJbv60s=;\n\tb=3XopyJxMvmr9liFvmbQ4Ja4Fb82ZKw6e2PXSTIqum9iWPcQ/6+XLtUIW57MR8Ap+GNwM/M\n\tDsoB97TNw9L/TXAw==",
            "v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de;\n s=susede2_rsa;\n\tt=1776757015;\n h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:\n\t mime-version:mime-version:\n\t content-transfer-encoding:content-transfer-encoding:\n\t in-reply-to:in-reply-to:references:references;\n\tbh=Daf0Jsw+offRMnbEhayvvjA2M01+QV/OTxOZSJbv60s=;\n\tb=RZUsWEgDmjaraOWNSccQN8EGULGlXV3aLFVCEVUd0l/O8ubP8RJECGDdkkBVMd644vkmM6\n\t2/MuAQcGuifTcpaBokUILgPNYIXUgYzP5sTbysbLw3arnMXmxKobuWfw0Sl0sIv50H0SpE\n\tt+oqHhVsnBgulbLdwNSQ0O76nA0u0IE=",
            "v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de;\n\ts=susede2_ed25519; t=1776757015;\n\th=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:\n\t mime-version:mime-version:\n\t content-transfer-encoding:content-transfer-encoding:\n\t in-reply-to:in-reply-to:references:references;\n\tbh=Daf0Jsw+offRMnbEhayvvjA2M01+QV/OTxOZSJbv60s=;\n\tb=3XopyJxMvmr9liFvmbQ4Ja4Fb82ZKw6e2PXSTIqum9iWPcQ/6+XLtUIW57MR8Ap+GNwM/M\n\tDsoB97TNw9L/TXAw=="
        ],
        "From": "Thomas Zimmermann <tzimmermann@suse.de>",
        "To": "thierry.reding@gmail.com,\n\tmperttunen@nvidia.com,\n\tairlied@gmail.com,\n\tsimona@ffwll.ch,\n\tjonathanh@nvidia.com",
        "Cc": "dri-devel@lists.freedesktop.org,\n\tlinux-tegra@vger.kernel.org,\n\tThomas Zimmermann <tzimmermann@suse.de>",
        "Subject": "[PATCH 4/5] drm/tegra: fbdev: Use a DRM client buffer",
        "Date": "Tue, 21 Apr 2026 09:29:08 +0200",
        "Message-ID": "<20260421073646.144712-5-tzimmermann@suse.de>",
        "X-Mailer": "git-send-email 2.53.0",
        "In-Reply-To": "<20260421073646.144712-1-tzimmermann@suse.de>",
        "References": "<20260421073646.144712-1-tzimmermann@suse.de>",
        "Precedence": "bulk",
        "X-Mailing-List": "linux-tegra@vger.kernel.org",
        "List-Id": "<linux-tegra.vger.kernel.org>",
        "List-Subscribe": "<mailto:linux-tegra+subscribe@vger.kernel.org>",
        "List-Unsubscribe": "<mailto:linux-tegra+unsubscribe@vger.kernel.org>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "X-Spamd-Result": "default: False [-5.30 / 50.00];\n\tREPLY(-4.00)[];\n\tBAYES_HAM(-3.00)[100.00%];\n\tSUSPICIOUS_RECIPS(1.50)[];\n\tMID_CONTAINS_FROM(1.00)[];\n\tNEURAL_HAM_LONG(-1.00)[-1.000];\n\tR_MISSING_CHARSET(0.50)[];\n\tNEURAL_HAM_SHORT(-0.20)[-1.000];\n\tMIME_GOOD(-0.10)[text/plain];\n\tRCVD_VIA_SMTP_AUTH(0.00)[];\n\tFUZZY_RATELIMITED(0.00)[rspamd.com];\n\tFROM_HAS_DN(0.00)[];\n\tTO_MATCH_ENVRCPT_ALL(0.00)[];\n\tMIME_TRACE(0.00)[0:+];\n\tARC_NA(0.00)[];\n\tTAGGED_RCPT(0.00)[];\n\tFROM_EQ_ENVFROM(0.00)[];\n\tFREEMAIL_TO(0.00)[gmail.com,nvidia.com,ffwll.ch];\n\tDBL_BLOCKED_OPENRESOLVER(0.00)[imap1.dmz-prg2.suse.org:helo,suse.de:mid,suse.de:email];\n\tRCVD_COUNT_TWO(0.00)[2];\n\tRCVD_TLS_ALL(0.00)[];\n\tDKIM_SIGNED(0.00)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519];\n\tRCPT_COUNT_SEVEN(0.00)[8];\n\tTO_DN_SOME(0.00)[];\n\tFREEMAIL_ENVRCPT(0.00)[gmail.com]",
        "X-Spam-Flag": "NO",
        "X-Spam-Score": "-5.30",
        "X-Spam-Level": ""
    },
    "content": "Replace the internal DRM framebuffer with a DRM client buffer. The\nclient buffer allocates the DRM framebuffer on a file and also uses\nGEM object handles via the regular ADDFB2 interfaces.\n\nUsing client-buffer interfaces unifies framebuffer allocation for\nDRM clients in user space and tegra's internal fbdev emulation. It\nalso simplifies the clean-up side of the fbdev emulation.\n\nSigned-off-by: Thomas Zimmermann <tzimmermann@suse.de>\n---\n drivers/gpu/drm/tegra/fbdev.c | 61 +++++++++++++++++++++--------------\n 1 file changed, 36 insertions(+), 25 deletions(-)",
    "diff": "diff --git a/drivers/gpu/drm/tegra/fbdev.c b/drivers/gpu/drm/tegra/fbdev.c\nindex bcf32cfcf818..003e80cf7b9a 100644\n--- a/drivers/gpu/drm/tegra/fbdev.c\n+++ b/drivers/gpu/drm/tegra/fbdev.c\n@@ -40,8 +40,7 @@ static int tegra_fb_mmap(struct fb_info *info, struct vm_area_struct *vma)\n static void tegra_fbdev_fb_destroy(struct fb_info *info)\n {\n \tstruct drm_fb_helper *helper = info->par;\n-\tstruct drm_framebuffer *fb = helper->fb;\n-\tstruct tegra_bo *bo = tegra_fb_get_plane(fb, 0);\n+\tstruct tegra_bo *bo = tegra_fb_get_plane(helper->fb, 0);\n \n \tdrm_fb_helper_fini(helper);\n \n@@ -50,8 +49,8 @@ static void tegra_fbdev_fb_destroy(struct fb_info *info)\n \t\tvunmap(bo->vaddr);\n \t\tbo->vaddr = NULL;\n \t}\n-\tdrm_framebuffer_remove(fb);\n \n+\tdrm_client_buffer_delete(helper->buffer);\n \tdrm_client_release(&helper->client);\n }\n \n@@ -70,15 +69,18 @@ static const struct drm_fb_helper_funcs tegra_fbdev_helper_funcs = {\n int tegra_fbdev_driver_fbdev_probe(struct drm_fb_helper *helper,\n \t\t\t\t   struct drm_fb_helper_surface_size *sizes)\n {\n-\tstruct tegra_drm *tegra = helper->dev->dev_private;\n-\tstruct drm_device *drm = helper->dev;\n-\tstruct drm_mode_fb_cmd2 cmd = { 0 };\n+\tstruct drm_client_dev *client = &helper->client;\n+\tstruct drm_device *drm = client->dev;\n+\tstruct drm_file *file = client->file;\n+\tstruct tegra_drm *tegra = drm->dev_private;\n \tstruct fb_info *info = helper->info;\n \tu32 fourcc, pitch;\n \tu64 size;\n \tconst struct drm_format_info *format;\n-\tstruct drm_framebuffer *fb;\n \tstruct tegra_bo *bo;\n+\tstruct drm_gem_object *gem;\n+\tu32 handle;\n+\tstruct drm_client_buffer *buffer;\n \tint err;\n \n \tfourcc = drm_mode_legacy_fb_format(sizes->surface_bpp, sizes->surface_depth);\n@@ -90,23 +92,22 @@ int tegra_fbdev_driver_fbdev_probe(struct drm_fb_helper *helper,\n \tbo = tegra_bo_create(drm, size, 0);\n \tif (IS_ERR(bo))\n \t\treturn PTR_ERR(bo);\n+\tgem = &bo->gem;\n \n-\tcmd.pixel_format = fourcc;\n-\tcmd.width = sizes->surface_width;\n-\tcmd.height = sizes->surface_height;\n-\tcmd.pitches[0] = pitch;\n-\n-\tfb = tegra_fb_alloc(drm, format, &cmd, &bo, 1);\n-\tif (IS_ERR(fb)) {\n-\t\terr = PTR_ERR(fb);\n-\t\tdev_err(drm->dev, \"failed to allocate DRM framebuffer: %d\\n\",\n-\t\t\terr);\n-\t\tdrm_gem_object_put(&bo->gem);\n-\t\treturn PTR_ERR(fb);\n+\terr = drm_gem_handle_create(file, gem, &handle);\n+\tif (err)\n+\t\tgoto err_drm_gem_object_put;\n+\n+\tbuffer = drm_client_buffer_create(client, sizes->surface_width, sizes->surface_height,\n+\t\t\t\t\t  fourcc, handle, pitch);\n+\tif (IS_ERR(buffer)) {\n+\t\terr = PTR_ERR(buffer);\n+\t\tgoto err_drm_gem_handle_delete;\n \t}\n \n \thelper->funcs = &tegra_fbdev_helper_funcs;\n-\thelper->fb = fb;\n+\thelper->buffer = buffer;\n+\thelper->fb = buffer->fb;\n \n \tinfo->fbops = &tegra_fb_ops;\n \n@@ -118,19 +119,29 @@ int tegra_fbdev_driver_fbdev_probe(struct drm_fb_helper *helper,\n \t\tif (!bo->vaddr) {\n \t\t\tdev_err(drm->dev, \"failed to vmap() framebuffer\\n\");\n \t\t\terr = -ENOMEM;\n-\t\t\tgoto destroy;\n+\t\t\tgoto err_drm_client_buffer_delete;\n \t\t}\n \t}\n \n \tinfo->flags |= FBINFO_VIRTFB;\n \tinfo->screen_buffer = bo->vaddr;\n-\tinfo->screen_size = bo->gem.size;\n+\tinfo->screen_size = gem->size;\n \tinfo->fix.smem_start = (unsigned long)(bo->iova);\n-\tinfo->fix.smem_len = bo->gem.size;\n+\tinfo->fix.smem_len = gem->size;\n+\n+\t/* The handle is only needed for creating the framebuffer. */\n+\tdrm_gem_handle_delete(file, handle);\n+\n+\t/* The framebuffer still holds a reference on the GEM object. */\n+\tdrm_gem_object_put(gem);\n \n \treturn 0;\n \n-destroy:\n-\tdrm_framebuffer_remove(fb);\n+err_drm_client_buffer_delete:\n+\tdrm_client_buffer_delete(buffer);\n+err_drm_gem_handle_delete:\n+\tdrm_gem_handle_delete(file, handle);\n+err_drm_gem_object_put:\n+\tdrm_gem_object_put(gem);\n \treturn err;\n }\n",
    "prefixes": [
        "4/5"
    ]
}