Received: by 2002:a25:683:0:0:0:0:0 with SMTP id 125csp1216290ybg; Tue, 2 Jun 2020 04:27:27 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzWWCka5zyksC7dUdX3zW+a1YGciHMsOVdDeYsKSMbNBr+THFtM95dYLBuyYCOg/s3r3P1J X-Received: by 2002:a17:906:3289:: with SMTP id 9mr2124629ejw.316.1591097247255; Tue, 02 Jun 2020 04:27:27 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1591097247; cv=none; d=google.com; s=arc-20160816; b=s847D8yYlYyP6JanwkIC8190gKitulUss9cocVJjjeMl7ItaGNsb5Z+aTqnRdmgxZ7 tMkgX6qjn/NIHUY0fHIfyKyxavDJECXzVApkMCD+HMkTALF3iLIXwtGsapF8ZUNVht80 AceUH3zNdopejZbziVtd+Oy6Q7/Pts8/6bP7rPraUX8kKg0iS9zppSllU0Sk9BD4zqQ8 U8kf1R6xI6+4kLjiUrLXNeSwSWKwuk2yfV6AlqArpKiAuuCRpj6z1vkIqVLqb+pHX56c r0ftt9BRPI1miF5LAohHDZ9fl8rWwG2Q6N9lXrCf8rtvytce+Nn9LjOxdzITDX7e21pS ZZkQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:dkim-signature; bh=G+DNdm4OSXj+ZbBSFAclEqfXcnxIti3qQTr4JFZ9dtc=; b=XY1rTVvjDWOEnGc/Z2d5V9bYriJ4oPFG3qlQhsDRv9yewl/jyU6yQHCe1h+2pULLyy t3yjzxDaDA9qvdpI7zsm0yTGOZOx/wJXHQtqSptFrsis+K3Foj9rdCBu7xJbKUo2zoPB LtTQfIdvA3swZfur3zcFz0gWxrUEI/HdYLPdzYP77CoAZEAjCaZFQ4mnCTHjuBU9vTEJ b0aQn3MEV6dDPIu209JP3IiCitndVroh8ZRSlnYBIywWoII4xy3QVsCzDeOfNQqFAmO6 /+zTXASLUVL/V8Y1F1KdPmAm2l1y5UgpF23/NQhkJSe4gqvg606HJYLVjTJpuRcbONKa DG0Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=lnD6MIXy; 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=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id l10si1208503ejb.576.2020.06.02.04.27.04; Tue, 02 Jun 2020 04:27:27 -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=@gmail.com header.s=20161025 header.b=lnD6MIXy; 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=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726371AbgFBLXB (ORCPT + 99 others); Tue, 2 Jun 2020 07:23:01 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58454 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725900AbgFBLXB (ORCPT ); Tue, 2 Jun 2020 07:23:01 -0400 Received: from mail-ua1-x944.google.com (mail-ua1-x944.google.com [IPv6:2607:f8b0:4864:20::944]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3B668C061A0E for ; Tue, 2 Jun 2020 04:23:01 -0700 (PDT) Received: by mail-ua1-x944.google.com with SMTP id d8so1090423uam.12 for ; Tue, 02 Jun 2020 04:23:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=G+DNdm4OSXj+ZbBSFAclEqfXcnxIti3qQTr4JFZ9dtc=; b=lnD6MIXyEj5uecvyfaXox7g810NP8Ibk2/joJWKyDDRPfm3DDKj1mmwutnK8eZAgvv izrSuehMkKmZ17ShLYiUxI/c/NX6yCBTsze7Z6QLSjRTt77h/QAbHMrE8K1mbss3kRVF XmQ/NdlpU2PJp+Xw3FPgxtZpn/NS1ZkmHk4k3WXL1J9RVAQkDlL1ZnV6LJEVTO6QaCsO Dx5an036CMyZqV7xlEA5DhUb6Kd3D1jTSeVCb0nHpz8opyYh2XNR/brlP6n/C8qZ6Fkj gPANDbfdblL2Czrxg9LQqdBCOdazHgbshh+xLjD4brVfLTPVXc8ckcxDiB67VPlS/c6R XtPw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=G+DNdm4OSXj+ZbBSFAclEqfXcnxIti3qQTr4JFZ9dtc=; b=FZnhd7zNVNuXtq/o3wkPMaG/uXGmC8hU1eyVbMm4L16BoEC0q7PtkPrQqSk+sNBPaW uXSzgcgM6bm6IVtuOhIr+5S3lKyhRh7vONQG5JJ886yGSRqHY16RM4ubAv0WdersXZEO TZbFZY05LtCk4GtM0JR8GBUOyLy/haUzqBISX8kXTDaY37+rVXJTtRI8IW82BqjwYzZN jJAjiJgzSbK81EEGg2iQwoun6HtyCFf0pNXw7KyXCuxnQHLTfyEs0kGn/g9CNGmgJO7n LFM4SFAKQIN4rwDcttuHbpKjvfhC1laTYaiUhEudCffkJHw09eByatRaKIhtPwYh5P1F fK5A== X-Gm-Message-State: AOAM5303oKPwGolpTHlV8mzJ44+Yp0R40RK8o2HDNuba3bta4jYIQ7w3 6HH3LMDS682v67BNlH+ETu7k4tq77cRbYx0GUbfKN3yK X-Received: by 2002:ab0:6012:: with SMTP id j18mr1209769ual.69.1591096980386; Tue, 02 Jun 2020 04:23:00 -0700 (PDT) MIME-Version: 1.0 References: <20200511115524.22602-1-Rodrigo.Siqueira@amd.com> <20200511115524.22602-2-Rodrigo.Siqueira@amd.com> In-Reply-To: <20200511115524.22602-2-Rodrigo.Siqueira@amd.com> From: Emil Velikov Date: Tue, 2 Jun 2020 12:19:42 +0100 Message-ID: Subject: Re: [PATCH V4 1/3] drm/vkms: Decouple crc operations from composer To: Rodrigo Siqueira Cc: Brian Starkey , Liviu Dudau , Daniel Vetter , Simon Ser , Leandro Ribeiro , Helen Koike , Rodrigo Siqueira , "Linux-Kernel@Vger. Kernel. Org" , ML dri-devel Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Rodrigo, On Mon, 11 May 2020 at 12:55, Rodrigo Siqueira wrote: > -static uint32_t _vkms_get_crc(struct vkms_composer *primary_composer, > - struct vkms_composer *cursor_composer) > +static int compose_planes(void **vaddr_out, > + struct vkms_composer *primary_composer, > + struct vkms_composer *cursor_composer) > { > struct drm_framebuffer *fb = &primary_composer->fb; > struct drm_gem_object *gem_obj = drm_gem_fb_get_obj(fb, 0); > struct vkms_gem_object *vkms_obj = drm_gem_to_vkms_gem(gem_obj); > - void *vaddr_out = kzalloc(vkms_obj->gem.size, GFP_KERNEL); > - u32 crc = 0; > > - if (!vaddr_out) { > - DRM_ERROR("Failed to allocate memory for output frame."); > - return 0; > + if (!*vaddr_out) { > + *vaddr_out = kzalloc(vkms_obj->gem.size, GFP_KERNEL); It would be clearer if you keep the to alloc (or not for wb) in the caller. As-is it's very subtle and error prone. > + if (!*vaddr_out) { > + DRM_ERROR("Cannot allocate memory for output frame."); > + return -ENOMEM; > + } > } > > - if (WARN_ON(!vkms_obj->vaddr)) { > - kfree(vaddr_out); > - return crc; > - } > + if (WARN_ON(!vkms_obj->vaddr)) > + return -EINVAL; > > - memcpy(vaddr_out, vkms_obj->vaddr, vkms_obj->gem.size); > + memcpy(*vaddr_out, vkms_obj->vaddr, vkms_obj->gem.size); > > if (cursor_composer) > - compose_cursor(cursor_composer, primary_composer, vaddr_out); > + compose_cursor(cursor_composer, primary_composer, *vaddr_out); > > - crc = compute_crc(vaddr_out, primary_composer); > - > - kfree(vaddr_out); > - > - return crc; > + return 0; > } > > /** > @@ -157,9 +153,11 @@ void vkms_composer_worker(struct work_struct *work) > struct vkms_output *out = drm_crtc_to_vkms_output(crtc); > struct vkms_composer *primary_composer = NULL; > struct vkms_composer *cursor_composer = NULL; > + void *vaddr_out = NULL; > u32 crc32 = 0; > u64 frame_start, frame_end; > bool crc_pending; > + int ret; > > spin_lock_irq(&out->composer_lock); > frame_start = crtc_state->frame_start; > @@ -183,14 +181,25 @@ void vkms_composer_worker(struct work_struct *work) > if (crtc_state->num_active_planes == 2) > cursor_composer = crtc_state->active_planes[1]->composer; > > - if (primary_composer) > - crc32 = _vkms_get_crc(primary_composer, cursor_composer); > + if (!primary_composer) > + return; > + This early return changes the functionality. Namely the drm_crtc_add_crc_entry(.... 0) is now missing. I don't recall much about the crc to judge if that's a genuine bugfix, or newly introduced bug. In the former case, it should be a separate patch. > + ret = compose_planes(&vaddr_out, primary_composer, cursor_composer); > + if (ret) { > + if (ret == -EINVAL) > + kfree(vaddr_out); > + return; > + } > + > + crc32 = compute_crc(vaddr_out, primary_composer); > > /* > * The worker can fall behind the vblank hrtimer, make sure we catch up. > */ > while (frame_start <= frame_end) > drm_crtc_add_crc_entry(crtc, true, frame_start++, &crc32); > + > + kfree(vaddr_out); Nit: move the free() just after compute_crc() - it's not needed for the drm_crtc_add_crc_entry(). -Emil