From mboxrd@z Thu Jan 1 00:00:00 1970 From: Claude Code Review Bot To: dri-devel-reviews@example.com Subject: Claude review: drm/tegra: fbdev: Use a DRM client buffer Date: Thu, 23 Apr 2026 08:46:58 +1000 Message-ID: In-Reply-To: <20260421073646.144712-5-tzimmermann@suse.de> References: <20260421073646.144712-1-tzimmermann@suse.de> <20260421073646.144712-5-tzimmermann@suse.de> X-Mailer: Claude Code Patch Reviewer Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Patch Review **Status: Good** This is the core patch. It replaces the direct `tegra_fb_alloc()` call with= the standard `drm_client_buffer_create()` path, which goes through `drm_mo= de_addfb2()` =E2=86=92 `tegra_fb_create()` =E2=86=92 `tegra_fb_alloc()` int= ernally. **Reference counting analysis =E2=80=94 all paths correct:** *Success path:* 1. `tegra_bo_create` =E2=86=92 gem ref =3D 1 2. `drm_gem_handle_create` =E2=86=92 gem ref =3D 2 3. `drm_client_buffer_create` =E2=86=92 `drm_gem_object_lookup` (ref =3D 3)= + `drm_mode_addfb2` =E2=86=92 `tegra_fb_create` =E2=86=92 lookup (ref =3D = 4, held by fb->obj[0]) 4. `drm_gem_handle_delete` =E2=86=92 ref =3D 3 5. `drm_gem_object_put(gem)` =E2=86=92 ref =3D 2 (one in buffer->gem, one i= n fb->obj[0]) *Destroy path (`tegra_fbdev_fb_destroy`):* - `drm_client_buffer_delete` =E2=86=92 `drm_mode_rmfb` drops fb (ref =3D 1)= =E2=86=92 `drm_gem_object_put(buffer->gem)` (ref =3D 0) =E2=86=92 freed. C= orrect. *Error path (vmap fails):* - `drm_client_buffer_delete` =E2=86=92 ref goes 4=E2=86=922, then `drm_gem_= handle_delete` =E2=86=92 1, then `drm_gem_object_put` =E2=86=92 0. Correct. *Error path (buffer create fails):* - buffer_create cleans up internally, `drm_gem_handle_delete` =E2=86=92 1, = `drm_gem_object_put` =E2=86=92 0. Correct. The `drm_gem_vunmap` call inside `drm_client_buffer_delete` is a no-op here= since tegra does its own vmap/vunmap and `buffer->map` remains zero-initia= lized from `kzalloc`. No issue. The destroy function correctly cleans up with `drm_client_buffer_delete` in= stead of `drm_framebuffer_remove`: ```c - drm_framebuffer_remove(fb); + drm_client_buffer_delete(helper->buffer); ``` No issues. --- Generated by Claude Code Patch Reviewer