From nobody Sun May 19 10:57:18 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1592687190; cv=none; d=zohomail.com; s=zohoarc; b=Oj68Zz70QgrpLH2SMofKIE3lDqjEnZRzoWmZ7W7EJZox+x3lKIMowcQFK1rjw9BhkhTtf81BbO8dPLj/4+bFmSDuS3Bmg9zOE+CZmzPEiiFqMrq+f/zSWa3UpCtzHXENZK05Wo/dy7hHITVGH4uqrM3BO/vLtMVxsmKbp1EMcho= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1592687190; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=L6YSe5ZyJd3xZvXLWDI++ZVsLGLyB+nhkfX0rG/HIlA=; b=EY4mCZCmIdmsBzM3TJbqcPLLU1LsPT2dnUNB2yxxFjY2gnAAsNg1HTy8nJoDlT+jHP4wMNuYIpGxaoLXAsbJGBTz3UhSiszK6wIF3Ot3sRuwQHunnI82+BCM86wUbql7DmtD+Mf2aEChpHMMA039va/L6oJydZJFwpHdEwSM7bw= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1592687190824501.4131701450733; Sat, 20 Jun 2020 14:06:30 -0700 (PDT) Received: from localhost ([::1]:50078 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jmkh3-00083t-Bl for importer@patchew.org; Sat, 20 Jun 2020 17:06:29 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53456) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmkfP-0005KT-Rk for qemu-devel@nongnu.org; Sat, 20 Jun 2020 17:04:47 -0400 Received: from zero.eik.bme.hu ([2001:738:2001:2001::2001]:59732) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmkfL-0001gA-7i for qemu-devel@nongnu.org; Sat, 20 Jun 2020 17:04:47 -0400 Received: from zero.eik.bme.hu (blah.eik.bme.hu [152.66.115.182]) by localhost (Postfix) with SMTP id 44A02748DE1; Sat, 20 Jun 2020 23:04:33 +0200 (CEST) Received: by zero.eik.bme.hu (Postfix, from userid 432) id C1D737475FA; Sat, 20 Jun 2020 23:04:32 +0200 (CEST) Message-Id: In-Reply-To: References: From: BALATON Zoltan Subject: [PATCH v3 1/9] sm501: Fix bounds checks Date: Sat, 20 Jun 2020 22:56:28 +0200 MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable To: qemu-devel@nongnu.org X-Spam-Probability: 8% Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:738:2001:2001::2001; envelope-from=balaton@eik.bme.hu; helo=zero.eik.bme.hu X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Peter Maydell , Sebastian Bauer , Magnus Damm , Gerd Hoffmann , Aurelien Jarno Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" We don't need to add width to pitch when calculating last point, that would reject valid ops within the card's local_mem. Fixes: b15a22bbcbe6a78dc3d88fe3134985e4cdd87de4 Signed-off-by: BALATON Zoltan Reviewed-by: Peter Maydell --- hw/display/sm501.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/hw/display/sm501.c b/hw/display/sm501.c index a7fc08c52b..5ceee4166f 100644 --- a/hw/display/sm501.c +++ b/hw/display/sm501.c @@ -723,8 +723,8 @@ static void sm501_2d_operation(SM501State *s) dst_y -=3D height - 1; } =20 - if (dst_base >=3D get_local_mem_size(s) || dst_base + - (dst_x + width + (dst_y + height) * (dst_pitch + width)) * + if (dst_base >=3D get_local_mem_size(s) || + dst_base + (dst_x + width + (dst_y + height) * dst_pitch) * (1 << format) >=3D get_local_mem_size(s)) { qemu_log_mask(LOG_GUEST_ERROR, "sm501: 2D op dest is outside vram.= \n"); return; @@ -749,8 +749,8 @@ static void sm501_2d_operation(SM501State *s) src_y -=3D height - 1; } =20 - if (src_base >=3D get_local_mem_size(s) || src_base + - (src_x + width + (src_y + height) * (src_pitch + width)) * + if (src_base >=3D get_local_mem_size(s) || + src_base + (src_x + width + (src_y + height) * src_pitch) * (1 << format) >=3D get_local_mem_size(s)) { qemu_log_mask(LOG_GUEST_ERROR, "sm501: 2D op src is outside vram.\n"); --=20 2.21.3 From nobody Sun May 19 10:57:18 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1592687326; cv=none; d=zohomail.com; s=zohoarc; b=efQ6UtIE5x6dtnkmRUM/2M/PkhYrDw/kioHZf6lfSFWcmYqzJs7BngSYpDnINbkjPJOq2dlmgn7mpJ2lFhKf9QOawp8/FnXYiUoGkRD37tU23j17PD4zvOYUxTtgKVJ9IqKOV7IsuuD2gj0SgyQJLOycg3vHEQKgKLua07/IuYw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1592687326; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=NAriQs+GQts3N38yyD9hl6QxTThWrQIzIDT3ljwnhqA=; b=Eil8sa8laNBGybq7NNYXFsJxELMVJ02PT7FBbDu65h9z+CgohyPpWVl3gBW6k/hueGvvXpThSaPDuPP2BCtYg4mTKtcSL/MCiqBJxlGYRf0hCr9xDlAJz47j0Wz1Mhy0CknYfbpaYUdaGHTxq0WRq4ZBrL/njsIefEGJw0L+DMs= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1592687326444157.02489483838622; Sat, 20 Jun 2020 14:08:46 -0700 (PDT) Received: from localhost ([::1]:58444 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jmkjF-0003y8-AI for importer@patchew.org; Sat, 20 Jun 2020 17:08:45 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53488) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmkfR-0005OR-VK for qemu-devel@nongnu.org; Sat, 20 Jun 2020 17:04:49 -0400 Received: from zero.eik.bme.hu ([2001:738:2001:2001::2001]:54117) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmkfO-0001mb-Qf for qemu-devel@nongnu.org; Sat, 20 Jun 2020 17:04:49 -0400 Received: from zero.eik.bme.hu (blah.eik.bme.hu [152.66.115.182]) by localhost (Postfix) with SMTP id 51C1774594E; Sat, 20 Jun 2020 23:04:41 +0200 (CEST) Received: by zero.eik.bme.hu (Postfix, from userid 432) id C5FFE748DCF; Sat, 20 Jun 2020 23:04:32 +0200 (CEST) Message-Id: In-Reply-To: References: From: BALATON Zoltan Subject: [PATCH v3 2/9] sm501: Drop unneded variable Date: Sat, 20 Jun 2020 22:56:28 +0200 MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable To: qemu-devel@nongnu.org X-Spam-Probability: 8% Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:738:2001:2001::2001; envelope-from=balaton@eik.bme.hu; helo=zero.eik.bme.hu X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Peter Maydell , Sebastian Bauer , Magnus Damm , Gerd Hoffmann , Aurelien Jarno Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" We don't need a separate variable to keep track if we allocated memory that needs to be freed as we can test the pointer itself. Signed-off-by: BALATON Zoltan Reviewed-by: Peter Maydell --- hw/display/sm501.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/hw/display/sm501.c b/hw/display/sm501.c index 5ceee4166f..5d2e019575 100644 --- a/hw/display/sm501.c +++ b/hw/display/sm501.c @@ -796,13 +796,12 @@ static void sm501_2d_operation(SM501State *s) de =3D db + width + height * (width + dst_pitch); if (rtl && ((db >=3D sb && db <=3D se) || (de >=3D sb && de <= =3D se))) { /* regions may overlap: copy via temporary */ - int free_buf =3D 0, llb =3D width * (1 << format); + int llb =3D width * (1 << format); int tmp_stride =3D DIV_ROUND_UP(llb, sizeof(uint32_t)); uint32_t *tmp =3D tmp_buf; =20 if (tmp_stride * sizeof(uint32_t) * height > sizeof(tmp_bu= f)) { tmp =3D g_malloc(tmp_stride * sizeof(uint32_t) * heigh= t); - free_buf =3D 1; } pixman_blt((uint32_t *)&s->local_mem[src_base], tmp, src_pitch * (1 << format) / sizeof(uint32_t), @@ -813,7 +812,7 @@ static void sm501_2d_operation(SM501State *s) dst_pitch * (1 << format) / sizeof(uint32_t), 8 * (1 << format), 8 * (1 << format), 0, 0, dst_x, dst_y, width, height); - if (free_buf) { + if (tmp !=3D tmp_buf) { g_free(tmp); } } else { --=20 2.21.3 From nobody Sun May 19 10:57:18 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1592687675; cv=none; d=zohomail.com; s=zohoarc; b=KV1NSlta+dptFDLKUE3VoZB8VlrRjbnXoLGwccilX1Ls/axlnoWNg3GLwCntLu+Vs4bjUPMLaL5LLVGm5ydk6zPoBt0v0EfBaEXbxSp8mPeBcAGITk/53Qw6OZICC79N03w8aioDaDpFzzbZ77fGrWrs3yDMAxqZpWE1ZdEEMzg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1592687675; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=BPrEyRl83jTjrQva1tR1Jr0iSM5j+GF7BbsqO2c+O/0=; b=U7Z11+ilGOmJhf6Y6fDWwdZCVhf2VuCIjNN+FQ4ETkYN2QZLTkBQZzCQXUcnzgCmqPFG/eTAyKTuF+WdPX8ee3N3dy8b07PBwQAi3wUcVUO5J6UZFTieHkrdp07dyukmuxZ8rkcLKSOb9b63Py3yzox2lYQLS9gtBfeChF20KtQ= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1592687675333146.16350506585763; Sat, 20 Jun 2020 14:14:35 -0700 (PDT) Received: from localhost ([::1]:44920 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jmkos-0003eU-0X for importer@patchew.org; Sat, 20 Jun 2020 17:14:34 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53490) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmkfS-0005QI-St for qemu-devel@nongnu.org; Sat, 20 Jun 2020 17:04:50 -0400 Received: from zero.eik.bme.hu ([152.66.115.2]:54118) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmkfP-0001mn-2s for qemu-devel@nongnu.org; Sat, 20 Jun 2020 17:04:50 -0400 Received: from zero.eik.bme.hu (blah.eik.bme.hu [152.66.115.182]) by localhost (Postfix) with SMTP id 4F0697456F8; Sat, 20 Jun 2020 23:04:41 +0200 (CEST) Received: by zero.eik.bme.hu (Postfix, from userid 432) id CA17F748DD9; Sat, 20 Jun 2020 23:04:32 +0200 (CEST) Message-Id: In-Reply-To: References: From: BALATON Zoltan Subject: [PATCH v3 3/9] sm501: Ignore no-op blits Date: Sat, 20 Jun 2020 22:56:28 +0200 MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable To: qemu-devel@nongnu.org X-Spam-Probability: 8% Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=152.66.115.2; envelope-from=balaton@eik.bme.hu; helo=zero.eik.bme.hu X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/20 17:04:33 X-ACL-Warn: Detected OS = FreeBSD 9.x or newer [fuzzy] X-Spam_score_int: -41 X-Spam_score: -4.2 X-Spam_bar: ---- X-Spam_report: (-4.2 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Peter Maydell , Sebastian Bauer , Magnus Damm , Gerd Hoffmann , Aurelien Jarno Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" Some guests seem to try source copy blits with same source and dest which are no-op so avoid calling pixman for these. Signed-off-by: BALATON Zoltan Reviewed-by: Peter Maydell --- hw/display/sm501.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/hw/display/sm501.c b/hw/display/sm501.c index 5d2e019575..ad5a62bfab 100644 --- a/hw/display/sm501.c +++ b/hw/display/sm501.c @@ -788,6 +788,11 @@ static void sm501_2d_operation(SM501State *s) (rop2_source_is_pattern ? " with pattern source" : "")); } + /* Ignore no-op blits, some guests seem to do this */ + if (src_base =3D=3D dst_base && src_pitch =3D=3D dst_pitch && + src_x =3D=3D dst_x && src_y =3D=3D dst_y) { + break; + } /* Check for overlaps, this could be made more exact */ uint32_t sb, se, db, de; sb =3D src_base + src_x + src_y * (width + src_pitch); --=20 2.21.3 From nobody Sun May 19 10:57:18 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1592687556; cv=none; d=zohomail.com; s=zohoarc; b=INnsNF4g1W/lq6GFe0ZA+5t6XXmKp25ivpS9a/UUcfqtYXCy53IPLLs/UFrij4l5/lygRWRxchIC5Uj50F0HPu8qhR1keahlNxUTdGCyeS56DC9xCGJIUcUe7r1FgzkYd62qOQJ7RNoPotQ2OyS/YmIGQs48gPiIqYSud7qL/Yo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1592687556; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=MWNDzCc1PbPIqz2IS5AJ0RtKpVsIWgrsb32l58QY9VY=; b=D5TE8ivWxTqWR1WBx+tQw5yLdZz8yh36M7XP3iGAOtT/pZP48jA//m4SHYMLqh/B2LOpmeR6X0jmNmXuy/86wVdvFIbPbiA4VdAhmy74lbofP9sKPR9sLA6pZt7lGtu2KE8H5T0A0L8hMeVJ+F+LemYO3HON5lMJ7kTT8+DZs94= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1592687556647927.4179684832643; Sat, 20 Jun 2020 14:12:36 -0700 (PDT) Received: from localhost ([::1]:40804 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jmkmx-0001CZ-7Y for importer@patchew.org; Sat, 20 Jun 2020 17:12:35 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53422) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmkfO-0005Gf-81 for qemu-devel@nongnu.org; Sat, 20 Jun 2020 17:04:46 -0400 Received: from zero.eik.bme.hu ([152.66.115.2]:31473) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmkfL-0001g8-8s for qemu-devel@nongnu.org; Sat, 20 Jun 2020 17:04:45 -0400 Received: from zero.eik.bme.hu (blah.eik.bme.hu [152.66.115.182]) by localhost (Postfix) with SMTP id 2A2A1748DDF; Sat, 20 Jun 2020 23:04:33 +0200 (CEST) Received: by zero.eik.bme.hu (Postfix, from userid 432) id CEB7B748DC8; Sat, 20 Jun 2020 23:04:32 +0200 (CEST) Message-Id: In-Reply-To: References: From: BALATON Zoltan Subject: [PATCH v3 4/9] sm501: Introduce variable for commonly used value for better readability Date: Sat, 20 Jun 2020 22:56:28 +0200 MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable To: qemu-devel@nongnu.org X-Spam-Probability: 8% Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=152.66.115.2; envelope-from=balaton@eik.bme.hu; helo=zero.eik.bme.hu X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/20 17:04:33 X-ACL-Warn: Detected OS = FreeBSD 9.x or newer [fuzzy] X-Spam_score_int: -41 X-Spam_score: -4.2 X-Spam_bar: ---- X-Spam_report: (-4.2 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Peter Maydell , Sebastian Bauer , Magnus Damm , Gerd Hoffmann , Aurelien Jarno Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" The bytes per pixel value can be calculated from format but it's used freqently enough (and will be used more in subseqent patches) so store it in a variable for better readabilty. Also drop some unneded 0x prefix around where new variable is defined. Signed-off-by: BALATON Zoltan Reviewed-by: Peter Maydell --- hw/display/sm501.c | 41 +++++++++++++++++++++-------------------- 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/hw/display/sm501.c b/hw/display/sm501.c index ad5a62bfab..3ced2c42db 100644 --- a/hw/display/sm501.c +++ b/hw/display/sm501.c @@ -684,10 +684,11 @@ static void sm501_2d_operation(SM501State *s) { int cmd =3D (s->twoD_control >> 16) & 0x1F; int rtl =3D s->twoD_control & BIT(27); - int format =3D (s->twoD_stretch >> 20) & 0x3; - int rop_mode =3D (s->twoD_control >> 15) & 0x1; /* 1 for rop2, else ro= p3 */ + int format =3D (s->twoD_stretch >> 20) & 3; + int bypp =3D 1 << format; /* bytes per pixel */ + int rop_mode =3D (s->twoD_control >> 15) & 1; /* 1 for rop2, else rop3= */ /* 1 if rop2 source is the pattern, otherwise the source is the bitmap= */ - int rop2_source_is_pattern =3D (s->twoD_control >> 14) & 0x1; + int rop2_source_is_pattern =3D (s->twoD_control >> 14) & 1; int rop =3D s->twoD_control & 0xFF; unsigned int dst_x =3D (s->twoD_destination >> 16) & 0x01FFF; unsigned int dst_y =3D s->twoD_destination & 0xFFFF; @@ -724,8 +725,8 @@ static void sm501_2d_operation(SM501State *s) } =20 if (dst_base >=3D get_local_mem_size(s) || - dst_base + (dst_x + width + (dst_y + height) * dst_pitch) * - (1 << format) >=3D get_local_mem_size(s)) { + dst_base + (dst_x + width + (dst_y + height) * dst_pitch) * bypp >= =3D + get_local_mem_size(s)) { qemu_log_mask(LOG_GUEST_ERROR, "sm501: 2D op dest is outside vram.= \n"); return; } @@ -750,8 +751,8 @@ static void sm501_2d_operation(SM501State *s) } =20 if (src_base >=3D get_local_mem_size(s) || - src_base + (src_x + width + (src_y + height) * src_pitch) * - (1 << format) >=3D get_local_mem_size(s)) { + src_base + (src_x + width + (src_y + height) * src_pitch) * by= pp >=3D + get_local_mem_size(s)) { qemu_log_mask(LOG_GUEST_ERROR, "sm501: 2D op src is outside vram.\n"); return; @@ -763,8 +764,8 @@ static void sm501_2d_operation(SM501State *s) uint8_t *d =3D s->local_mem + dst_base; =20 for (y =3D 0; y < height; y++) { - i =3D (dst_x + (dst_y + y) * dst_pitch) * (1 << format); - for (x =3D 0; x < width; x++, i +=3D (1 << format)) { + i =3D (dst_x + (dst_y + y) * dst_pitch) * bypp; + for (x =3D 0; x < width; x++, i +=3D bypp) { switch (format) { case 0: d[i] =3D ~d[i]; @@ -801,7 +802,7 @@ static void sm501_2d_operation(SM501State *s) de =3D db + width + height * (width + dst_pitch); if (rtl && ((db >=3D sb && db <=3D se) || (de >=3D sb && de <= =3D se))) { /* regions may overlap: copy via temporary */ - int llb =3D width * (1 << format); + int llb =3D width * bypp; int tmp_stride =3D DIV_ROUND_UP(llb, sizeof(uint32_t)); uint32_t *tmp =3D tmp_buf; =20 @@ -809,13 +810,13 @@ static void sm501_2d_operation(SM501State *s) tmp =3D g_malloc(tmp_stride * sizeof(uint32_t) * heigh= t); } pixman_blt((uint32_t *)&s->local_mem[src_base], tmp, - src_pitch * (1 << format) / sizeof(uint32_t), - tmp_stride, 8 * (1 << format), 8 * (1 << format= ), + src_pitch * bypp / sizeof(uint32_t), + tmp_stride, 8 * bypp, 8 * bypp, src_x, src_y, 0, 0, width, height); pixman_blt(tmp, (uint32_t *)&s->local_mem[dst_base], tmp_stride, - dst_pitch * (1 << format) / sizeof(uint32_t), - 8 * (1 << format), 8 * (1 << format), + dst_pitch * bypp / sizeof(uint32_t), + 8 * bypp, 8 * bypp, 0, 0, dst_x, dst_y, width, height); if (tmp !=3D tmp_buf) { g_free(tmp); @@ -823,9 +824,9 @@ static void sm501_2d_operation(SM501State *s) } else { pixman_blt((uint32_t *)&s->local_mem[src_base], (uint32_t *)&s->local_mem[dst_base], - src_pitch * (1 << format) / sizeof(uint32_t), - dst_pitch * (1 << format) / sizeof(uint32_t), - 8 * (1 << format), 8 * (1 << format), + src_pitch * bypp / sizeof(uint32_t), + dst_pitch * bypp / sizeof(uint32_t), + 8 * bypp, 8 * bypp, src_x, src_y, dst_x, dst_y, width, height); } } @@ -842,8 +843,8 @@ static void sm501_2d_operation(SM501State *s) } =20 pixman_fill((uint32_t *)&s->local_mem[dst_base], - dst_pitch * (1 << format) / sizeof(uint32_t), - 8 * (1 << format), dst_x, dst_y, width, height, color); + dst_pitch * bypp / sizeof(uint32_t), + 8 * bypp, dst_x, dst_y, width, height, color); break; } default: @@ -855,7 +856,7 @@ static void sm501_2d_operation(SM501State *s) if (dst_base >=3D get_fb_addr(s, crt) && dst_base <=3D get_fb_addr(s, crt) + fb_len) { int dst_len =3D MIN(fb_len, ((dst_y + height - 1) * dst_pitch + - dst_x + width) * (1 << format)); + dst_x + width) * bypp); if (dst_len) { memory_region_set_dirty(&s->local_mem_region, dst_base, dst_le= n); } --=20 2.21.3 From nobody Sun May 19 10:57:18 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1592687493; cv=none; d=zohomail.com; s=zohoarc; b=bIqf+kkflJyUiBFvJyJods/5Ejmmiqo8Rz1NHCFqJYNjnnTiQ7NMj5xNWujIFXynl4mEaAtEtbOH4RYusnlYBJjmKm6hx3aiasEdVR4Oe1y91VhMaqmDWwSpXzJbXuRSIL76p0YpjZJRfAGRMOEeHY/UcYnS0+79swgxVjTfIZE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1592687493; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=gINPzK/kL5p2ZpfZ31GdAFOlcvIQ+xS/o3QZ3vqJT6k=; b=E/OCHQXROaUttmufcya6mrOCI4mc4/83UYoVDf3O0svwCFAKo3uVSRofNC1tPilzc7reKSpCIZ6R9O3V42gQ6oLDtaobnXgqkAyH74FHSKSQs//ODF55dKaPDOzCtBRoBkrdvAIW1w/wf8hmeYXSGWS7gbfjDJVOTx+1YlYzJLA= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1592687493005265.1832382620571; Sat, 20 Jun 2020 14:11:33 -0700 (PDT) Received: from localhost ([::1]:38718 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jmklv-0007xX-N0 for importer@patchew.org; Sat, 20 Jun 2020 17:11:31 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53420) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmkfO-0005G7-4z for qemu-devel@nongnu.org; Sat, 20 Jun 2020 17:04:46 -0400 Received: from zero.eik.bme.hu ([2001:738:2001:2001::2001]:42057) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmkfL-0001gB-9F for qemu-devel@nongnu.org; Sat, 20 Jun 2020 17:04:45 -0400 Received: from zero.eik.bme.hu (blah.eik.bme.hu [152.66.115.182]) by localhost (Postfix) with SMTP id 499D5748DE2; Sat, 20 Jun 2020 23:04:33 +0200 (CEST) Received: by zero.eik.bme.hu (Postfix, from userid 432) id D2D08748DD1; Sat, 20 Jun 2020 23:04:32 +0200 (CEST) Message-Id: <7cccc302d7b4c5c313bad7681ac4686417143c3e.1592686588.git.balaton@eik.bme.hu> In-Reply-To: References: From: BALATON Zoltan Subject: [PATCH v3 5/9] sm501: Optimise 1 pixel 2d ops Date: Sat, 20 Jun 2020 22:56:28 +0200 MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable To: qemu-devel@nongnu.org X-Spam-Probability: 8% Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:738:2001:2001::2001; envelope-from=balaton@eik.bme.hu; helo=zero.eik.bme.hu X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Peter Maydell , Sebastian Bauer , Magnus Damm , Gerd Hoffmann , Aurelien Jarno Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" Some guests do 1x1 blits which is faster to do directly than calling a function for it so avoid overhead in this case. Signed-off-by: BALATON Zoltan Reviewed-by: Peter Maydell --- hw/display/sm501.c | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/hw/display/sm501.c b/hw/display/sm501.c index 3ced2c42db..2098e69810 100644 --- a/hw/display/sm501.c +++ b/hw/display/sm501.c @@ -794,6 +794,14 @@ static void sm501_2d_operation(SM501State *s) src_x =3D=3D dst_x && src_y =3D=3D dst_y) { break; } + /* Some clients also do 1 pixel blits, avoid overhead for thes= e */ + if (width =3D=3D 1 && height =3D=3D 1) { + unsigned int si =3D (src_x + src_y * src_pitch) * bypp; + unsigned int di =3D (dst_x + dst_y * dst_pitch) * bypp; + stn_he_p(&s->local_mem[dst_base + di], bypp, + ldn_he_p(&s->local_mem[src_base + si], bypp)); + break; + } /* Check for overlaps, this could be made more exact */ uint32_t sb, se, db, de; sb =3D src_base + src_x + src_y * (width + src_pitch); @@ -842,9 +850,14 @@ static void sm501_2d_operation(SM501State *s) color =3D cpu_to_le16(color); } =20 - pixman_fill((uint32_t *)&s->local_mem[dst_base], - dst_pitch * bypp / sizeof(uint32_t), - 8 * bypp, dst_x, dst_y, width, height, color); + if (width =3D=3D 1 && height =3D=3D 1) { + unsigned int i =3D (dst_x + dst_y * dst_pitch) * bypp; + stn_he_p(&s->local_mem[dst_base + i], bypp, color); + } else { + pixman_fill((uint32_t *)&s->local_mem[dst_base], + dst_pitch * bypp / sizeof(uint32_t), + 8 * bypp, dst_x, dst_y, width, height, color); + } break; } default: --=20 2.21.3 From nobody Sun May 19 10:57:18 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1592687623; cv=none; d=zohomail.com; s=zohoarc; b=kceynQzUIWrRV/YKPvXdBzfGiP0xmMRJ/X+gZnD3geQ+a1SPj3br9BLoIvU47lax/rFZByfBrznEvFPQx8rEJM9R3QGGPMhqF7lkqRr0uCJE08kBQ53A76rcU7gqiPELJmkxXVStHnxTw2viH1dV11CqOLegkgOzrpu0g63K614= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1592687623; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=irvl+ciI1cM4QC1+ODZtS6dtkDzfedR9wl/aDWlJmrs=; b=DMQF3Nix1GbdW/9UFVDOzoMkmP6a+CIIvNaXPDHWvxRHBTNIypr9JUr+L98RTAD1kNux0UUT+P4DNGt6cLtUap8DSleSKVKpw8yKQbW3G2n0ZMJer61GYoJUSI4q2lw6u9ni36NvrdE9r8xJgCX9D+xpkbfdCjx+GBzP/Dx5MWg= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1592687623726704.9299299795802; Sat, 20 Jun 2020 14:13:43 -0700 (PDT) Received: from localhost ([::1]:42854 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jmko2-0002Ue-DS for importer@patchew.org; Sat, 20 Jun 2020 17:13:42 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53432) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmkfO-0005I3-WD for qemu-devel@nongnu.org; Sat, 20 Jun 2020 17:04:47 -0400 Received: from zero.eik.bme.hu ([152.66.115.2]:49507) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmkfL-0001gC-9I for qemu-devel@nongnu.org; Sat, 20 Jun 2020 17:04:46 -0400 Received: from zero.eik.bme.hu (blah.eik.bme.hu [152.66.115.182]) by localhost (Postfix) with SMTP id 61067748DE3; Sat, 20 Jun 2020 23:04:33 +0200 (CEST) Received: by zero.eik.bme.hu (Postfix, from userid 432) id D86E5748DDA; Sat, 20 Jun 2020 23:04:32 +0200 (CEST) Message-Id: In-Reply-To: References: From: BALATON Zoltan Subject: [PATCH v3 6/9] sm501: Use stn_he_p/ldn_he_p instead of switch/case Date: Sat, 20 Jun 2020 22:56:28 +0200 MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable To: qemu-devel@nongnu.org X-Spam-Probability: 8% Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=152.66.115.2; envelope-from=balaton@eik.bme.hu; helo=zero.eik.bme.hu X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/20 17:04:33 X-ACL-Warn: Detected OS = FreeBSD 9.x or newer [fuzzy] X-Spam_score_int: -41 X-Spam_score: -4.2 X-Spam_bar: ---- X-Spam_report: (-4.2 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Peter Maydell , Sebastian Bauer , Magnus Damm , Gerd Hoffmann , Aurelien Jarno Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Instead of open coding op with different sizes using a switch and type casting it can be written more compactly using stn_he_p/ldn_he_p. Suggested-by: Peter Maydell Signed-off-by: BALATON Zoltan Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- hw/display/sm501.c | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/hw/display/sm501.c b/hw/display/sm501.c index 2098e69810..6349f31e64 100644 --- a/hw/display/sm501.c +++ b/hw/display/sm501.c @@ -766,17 +766,7 @@ static void sm501_2d_operation(SM501State *s) for (y =3D 0; y < height; y++) { i =3D (dst_x + (dst_y + y) * dst_pitch) * bypp; for (x =3D 0; x < width; x++, i +=3D bypp) { - switch (format) { - case 0: - d[i] =3D ~d[i]; - break; - case 1: - *(uint16_t *)&d[i] =3D ~*(uint16_t *)&d[i]; - break; - case 2: - *(uint32_t *)&d[i] =3D ~*(uint32_t *)&d[i]; - break; - } + stn_he_p(&d[i], bypp, ~ldn_he_p(&d[i], bypp)); } } } else { --=20 2.21.3 From nobody Sun May 19 10:57:18 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1592687309; cv=none; d=zohomail.com; s=zohoarc; b=cqxHjO/VsVsFO0Ee/UyhRGXvWZtnhcNmplPk1G59eiTRCcsJfmuMyAbAA+81sH5pLzKKty2U9hAhQuVOJxTHKGxIhAF1aJqQexQ5kHXQblP3Jr92C8DLo496XQO3eGxQQLMvuLgaU3gKoF6j3j7f4LQlZ+oiqlSLRb5lnRhDVEs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1592687309; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=K0ERlkY9R9wlaQZ2YN4xq2BlYpSmDukzJVeRxNrnljU=; b=Bdd/3bapWqYyRr2w4wH50u889zHMlzOv/NURFGchEqTEsnTCs600s5AtAKuYgQh4WGm92rgEYV9bHNDWUKVr50mlpLmjn1HUgI2YNbRcq+K20A9Pu1bT3IlgXndFGmgm3YvZZFc91HKHbd1FC9NYFH5vDOQDeEV7EUKkliDZvvM= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1592687309876168.59290595021184; Sat, 20 Jun 2020 14:08:29 -0700 (PDT) Received: from localhost ([::1]:57344 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jmkiy-0003TF-ED for importer@patchew.org; Sat, 20 Jun 2020 17:08:28 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53476) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmkfQ-0005Lq-Go for qemu-devel@nongnu.org; Sat, 20 Jun 2020 17:04:48 -0400 Received: from zero.eik.bme.hu ([2001:738:2001:2001::2001]:54114) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmkfO-0001mK-NW for qemu-devel@nongnu.org; Sat, 20 Jun 2020 17:04:48 -0400 Received: from zero.eik.bme.hu (blah.eik.bme.hu [152.66.115.182]) by localhost (Postfix) with SMTP id 62C5E748DE4; Sat, 20 Jun 2020 23:04:33 +0200 (CEST) Received: by zero.eik.bme.hu (Postfix, from userid 432) id DB1BD748DDB; Sat, 20 Jun 2020 23:04:32 +0200 (CEST) Message-Id: <26d4fa9b8ce81e2723e98d592ccba7550042752c.1592686588.git.balaton@eik.bme.hu> In-Reply-To: References: From: BALATON Zoltan Subject: [PATCH v3 7/9] sm501: Do not allow guest to set invalid format Date: Sat, 20 Jun 2020 22:56:28 +0200 MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable To: qemu-devel@nongnu.org X-Spam-Probability: 8% Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:738:2001:2001::2001; envelope-from=balaton@eik.bme.hu; helo=zero.eik.bme.hu X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Peter Maydell , Sebastian Bauer , Magnus Damm , Gerd Hoffmann , Aurelien Jarno Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" Prevent guest setting invalid format value that might trip checks in sm501_2d_operation(). Signed-off-by: BALATON Zoltan Reviewed-by: Peter Maydell --- hw/display/sm501.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/hw/display/sm501.c b/hw/display/sm501.c index 6349f31e64..7e4c042d52 100644 --- a/hw/display/sm501.c +++ b/hw/display/sm501.c @@ -1503,6 +1503,9 @@ static void sm501_2d_engine_write(void *opaque, hwadd= r addr, s->twoD_background =3D value; break; case SM501_2D_STRETCH: + if (((value >> 20) & 3) =3D=3D 3) { + value &=3D ~BIT(20); + } s->twoD_stretch =3D value; break; case SM501_2D_COLOR_COMPARE: --=20 2.21.3 From nobody Sun May 19 10:57:18 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1592687319; cv=none; d=zohomail.com; s=zohoarc; b=Q08i0JkDdqxik+Da/xRyOchV0ntkzsdLxtBXA6KPhZ1ZDoykfXVLn0mxsFcnJFJ9TbKhaKZotYPbyfznTXtuUZi5ZF+YmQ+LAHClsMeScQMRO2G7xbvTRO/vlPEgs+IFaQ6MCOHHqHK3hDzGgyhDyAUAUUVDIrQxdGz6SmbtOes= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1592687319; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=BQfdhGZRQX4+qF0tL5Vha7d+Yey2qy3vHBXg2c25bg0=; b=nCsP8NPOdb8YjAMHB0KI3nga8mRhHPI6BeX39NDO0uJi0reNIyzrOo2xWYcMfus/roYrseuOjIcFrDr2GHELhSuYZ/S1UePRy/XfzvQB8FmZvojph7pxqjv+e8ybyQ/cbWHkpap4spFeEBJ4jKNKlBiL/sEqYyHsKN6jkZQDUUE= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1592687319235268.6066092288752; Sat, 20 Jun 2020 14:08:39 -0700 (PDT) Received: from localhost ([::1]:57938 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jmkj7-0003kk-V8 for importer@patchew.org; Sat, 20 Jun 2020 17:08:37 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53486) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmkfR-0005OK-U1 for qemu-devel@nongnu.org; Sat, 20 Jun 2020 17:04:49 -0400 Received: from zero.eik.bme.hu ([152.66.115.2]:54116) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmkfO-0001mc-Q8 for qemu-devel@nongnu.org; Sat, 20 Jun 2020 17:04:49 -0400 Received: from zero.eik.bme.hu (blah.eik.bme.hu [152.66.115.182]) by localhost (Postfix) with SMTP id A94AE748DD1; Sat, 20 Jun 2020 23:04:33 +0200 (CEST) Received: by zero.eik.bme.hu (Postfix, from userid 432) id DF0B9748DDD; Sat, 20 Jun 2020 23:04:32 +0200 (CEST) Message-Id: In-Reply-To: References: From: BALATON Zoltan Subject: [PATCH v3 8/9] sm501: Convert debug printfs to traces Date: Sat, 20 Jun 2020 22:56:28 +0200 MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable To: qemu-devel@nongnu.org X-Spam-Probability: 8% Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=152.66.115.2; envelope-from=balaton@eik.bme.hu; helo=zero.eik.bme.hu X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/20 17:04:33 X-ACL-Warn: Detected OS = FreeBSD 9.x or newer [fuzzy] X-Spam_score_int: -41 X-Spam_score: -4.2 X-Spam_bar: ---- X-Spam_report: (-4.2 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Peter Maydell , Sebastian Bauer , Magnus Damm , Gerd Hoffmann , Aurelien Jarno Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" Signed-off-by: BALATON Zoltan Reviewed-by: Peter Maydell --- hw/display/sm501.c | 50 +++++++++++------------------------------ hw/display/trace-events | 12 ++++++++++ 2 files changed, 25 insertions(+), 37 deletions(-) diff --git a/hw/display/sm501.c b/hw/display/sm501.c index 7e4c042d52..2db347dcbc 100644 --- a/hw/display/sm501.c +++ b/hw/display/sm501.c @@ -39,15 +39,7 @@ #include "qemu/range.h" #include "ui/pixel_ops.h" #include "qemu/bswap.h" - -/*#define DEBUG_SM501*/ -/*#define DEBUG_BITBLT*/ - -#ifdef DEBUG_SM501 -#define SM501_DPRINTF(fmt, ...) printf(fmt, ## __VA_ARGS__) -#else -#define SM501_DPRINTF(fmt, ...) do {} while (0) -#endif +#include "trace.h" =20 #define MMIO_BASE_OFFSET 0x3e00000 #define MMIO_SIZE 0x200000 @@ -871,7 +863,6 @@ static uint64_t sm501_system_config_read(void *opaque, = hwaddr addr, { SM501State *s =3D (SM501State *)opaque; uint32_t ret =3D 0; - SM501_DPRINTF("sm501 system config regs : read addr=3D%x\n", (int)addr= ); =20 switch (addr) { case SM501_SYSTEM_CONTROL: @@ -923,7 +914,7 @@ static uint64_t sm501_system_config_read(void *opaque, = hwaddr addr, qemu_log_mask(LOG_UNIMP, "sm501: not implemented system config" "register read. addr=3D%" HWADDR_PRIx "\n", addr); } - + trace_sm501_system_config_read(addr, ret); return ret; } =20 @@ -931,9 +922,8 @@ static void sm501_system_config_write(void *opaque, hwa= ddr addr, uint64_t value, unsigned size) { SM501State *s =3D (SM501State *)opaque; - SM501_DPRINTF("sm501 system config regs : write addr=3D%x, val=3D%x\n", - (uint32_t)addr, (uint32_t)value); =20 + trace_sm501_system_config_write((uint32_t)addr, (uint32_t)value); switch (addr) { case SM501_SYSTEM_CONTROL: s->system_control &=3D 0x10DB0000; @@ -1019,9 +1009,7 @@ static uint64_t sm501_i2c_read(void *opaque, hwaddr a= ddr, unsigned size) qemu_log_mask(LOG_UNIMP, "sm501 i2c : not implemented register rea= d." " addr=3D0x%" HWADDR_PRIx "\n", addr); } - - SM501_DPRINTF("sm501 i2c regs : read addr=3D%" HWADDR_PRIx " val=3D%x\= n", - addr, ret); + trace_sm501_i2c_read((uint32_t)addr, ret); return ret; } =20 @@ -1029,9 +1017,8 @@ static void sm501_i2c_write(void *opaque, hwaddr addr= , uint64_t value, unsigned size) { SM501State *s =3D (SM501State *)opaque; - SM501_DPRINTF("sm501 i2c regs : write addr=3D%" HWADDR_PRIx - " val=3D%" PRIx64 "\n", addr, value); =20 + trace_sm501_i2c_write((uint32_t)addr, (uint32_t)value); switch (addr) { case SM501_I2C_BYTE_COUNT: s->i2c_byte_count =3D value & 0xf; @@ -1045,25 +1032,19 @@ static void sm501_i2c_write(void *opaque, hwaddr ad= dr, uint64_t value, s->i2c_status |=3D (res ? SM501_I2C_STATUS_ERROR : 0); if (!res) { int i; - SM501_DPRINTF("sm501 i2c : transferring %d bytes to 0x= %x\n", - s->i2c_byte_count + 1, s->i2c_addr >> 1); for (i =3D 0; i <=3D s->i2c_byte_count; i++) { res =3D i2c_send_recv(s->i2c_bus, &s->i2c_data[i], !(s->i2c_addr & 1)); if (res) { - SM501_DPRINTF("sm501 i2c : transfer failed" - " i=3D%d, res=3D%d\n", i, res); s->i2c_status |=3D SM501_I2C_STATUS_ERROR; return; } } if (i) { - SM501_DPRINTF("sm501 i2c : transferred %d bytes\n"= , i); s->i2c_status =3D SM501_I2C_STATUS_COMPLETE; } } } else { - SM501_DPRINTF("sm501 i2c : end transfer\n"); i2c_end_transfer(s->i2c_bus); s->i2c_status &=3D ~SM501_I2C_STATUS_ERROR; } @@ -1103,7 +1084,8 @@ static const MemoryRegionOps sm501_i2c_ops =3D { static uint32_t sm501_palette_read(void *opaque, hwaddr addr) { SM501State *s =3D (SM501State *)opaque; - SM501_DPRINTF("sm501 palette read addr=3D%x\n", (int)addr); + + trace_sm501_palette_read((uint32_t)addr); =20 /* TODO : consider BYTE/WORD access */ /* TODO : consider endian */ @@ -1116,8 +1098,8 @@ static void sm501_palette_write(void *opaque, hwaddr = addr, uint32_t value) { SM501State *s =3D (SM501State *)opaque; - SM501_DPRINTF("sm501 palette write addr=3D%x, val=3D%x\n", - (int)addr, value); + + trace_sm501_palette_write((uint32_t)addr, value); =20 /* TODO : consider BYTE/WORD access */ /* TODO : consider endian */ @@ -1132,7 +1114,6 @@ static uint64_t sm501_disp_ctrl_read(void *opaque, hw= addr addr, { SM501State *s =3D (SM501State *)opaque; uint32_t ret =3D 0; - SM501_DPRINTF("sm501 disp ctrl regs : read addr=3D%x\n", (int)addr); =20 switch (addr) { =20 @@ -1237,7 +1218,7 @@ static uint64_t sm501_disp_ctrl_read(void *opaque, hw= addr addr, qemu_log_mask(LOG_UNIMP, "sm501: not implemented disp ctrl registe= r " "read. addr=3D%" HWADDR_PRIx "\n", addr); } - + trace_sm501_disp_ctrl_read((uint32_t)addr, ret); return ret; } =20 @@ -1245,9 +1226,8 @@ static void sm501_disp_ctrl_write(void *opaque, hwadd= r addr, uint64_t value, unsigned size) { SM501State *s =3D (SM501State *)opaque; - SM501_DPRINTF("sm501 disp ctrl regs : write addr=3D%x, val=3D%x\n", - (unsigned)addr, (unsigned)value); =20 + trace_sm501_disp_ctrl_write((uint32_t)addr, (uint32_t)value); switch (addr) { case SM501_DC_PANEL_CONTROL: s->dc_panel_control =3D value & 0x0FFF73FF; @@ -1392,7 +1372,6 @@ static uint64_t sm501_2d_engine_read(void *opaque, hw= addr addr, { SM501State *s =3D (SM501State *)opaque; uint32_t ret =3D 0; - SM501_DPRINTF("sm501 2d engine regs : read addr=3D%x\n", (int)addr); =20 switch (addr) { case SM501_2D_SOURCE: @@ -1462,7 +1441,7 @@ static uint64_t sm501_2d_engine_read(void *opaque, hw= addr addr, qemu_log_mask(LOG_UNIMP, "sm501: not implemented disp ctrl registe= r " "read. addr=3D%" HWADDR_PRIx "\n", addr); } - + trace_sm501_2d_engine_read((uint32_t)addr, ret); return ret; } =20 @@ -1470,9 +1449,8 @@ static void sm501_2d_engine_write(void *opaque, hwadd= r addr, uint64_t value, unsigned size) { SM501State *s =3D (SM501State *)opaque; - SM501_DPRINTF("sm501 2d engine regs : write addr=3D%x, val=3D%x\n", - (unsigned)addr, (unsigned)value); =20 + trace_sm501_2d_engine_write((uint32_t)addr, (uint32_t)value); switch (addr) { case SM501_2D_SOURCE: s->twoD_source =3D value; @@ -1830,8 +1808,6 @@ static void sm501_init(SM501State *s, DeviceState *de= v, uint32_t local_mem_bytes) { s->local_mem_size_index =3D get_local_mem_size_index(local_mem_bytes); - SM501_DPRINTF("sm501 local mem size=3D%x. index=3D%d\n", get_local_mem= _size(s), - s->local_mem_size_index); =20 /* local memory */ memory_region_init_ram(&s->local_mem_region, OBJECT(dev), "sm501.local= ", diff --git a/hw/display/trace-events b/hw/display/trace-events index 72d4c9812c..970d6bac5d 100644 --- a/hw/display/trace-events +++ b/hw/display/trace-events @@ -161,3 +161,15 @@ cg3_write(uint32_t addr, uint32_t val, unsigned size) = "write addr:0x%06"PRIx32" # dpcd.c dpcd_read(uint32_t addr, uint8_t val) "read addr:0x%"PRIx32" val:0x%02x" dpcd_write(uint32_t addr, uint8_t val) "write addr:0x%"PRIx32" val:0x%02x" + +# sm501.c +sm501_system_config_read(uint32_t addr, uint32_t val) "addr=3D0x%x, val=3D= 0x%x" +sm501_system_config_write(uint32_t addr, uint32_t val) "addr=3D0x%x, val= =3D0x%x" +sm501_i2c_read(uint32_t addr, uint8_t val) "addr=3D0x%x, val=3D0x%x" +sm501_i2c_write(uint32_t addr, uint32_t val) "addr=3D0x%x, val=3D0x%x" +sm501_palette_read(uint32_t addr) "addr=3D0x%x" +sm501_palette_write(uint32_t addr, uint32_t val) "addr=3D0x%x, val=3D0x%x" +sm501_disp_ctrl_read(uint32_t addr, uint32_t val) "addr=3D0x%x, val=3D0x%x" +sm501_disp_ctrl_write(uint32_t addr, uint32_t val) "addr=3D0x%x, val=3D0x%= x" +sm501_2d_engine_read(uint32_t addr, uint32_t val) "addr=3D0x%x, val=3D0x%x" +sm501_2d_engine_write(uint32_t addr, uint32_t val) "addr=3D0x%x, val=3D0x%= x" --=20 2.21.3 From nobody Sun May 19 10:57:18 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1592687182; cv=none; d=zohomail.com; s=zohoarc; b=PdTXIojWURjrKYpWyDHJRDuQFUfJTApJbPmplhk5Wli4OpLylyWWlsr41UB43QPg4QXGitzD8q/PuonGQhlBiEHJ4R1aJQMxqwwIJb29slBIwzIgNoJabXGqhvG+UJ1PfVT4DiGrLjRxLna2vub7hMAXZalEqMjgcgXF4iuvKY4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1592687182; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=6HOGsMiTra9zU6kcITQw17OQOHZNku0ITyGGEqAwLp8=; b=mk+NM8T175+xxhIqfk4b2tD2Vj8WAv182qtxr6BZbKSHCmOpYIlthAVd0qt2+HC+r+O8mXkpv88Cp9KQU8oJhNW9OCMhYCEKFtbQ8NlZlFjLkDYf3tjKRAPDRtubnOcLzb/XqA3fDV59gwLSU07wZMnPyQ31n1JdVmgfa/jOcwo= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1592687182067268.8687288724775; Sat, 20 Jun 2020 14:06:22 -0700 (PDT) Received: from localhost ([::1]:49700 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jmkgu-0007qw-TS for importer@patchew.org; Sat, 20 Jun 2020 17:06:20 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53484) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmkfR-0005NG-AO for qemu-devel@nongnu.org; Sat, 20 Jun 2020 17:04:49 -0400 Received: from zero.eik.bme.hu ([152.66.115.2]:54115) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jmkfO-0001mL-M1 for qemu-devel@nongnu.org; Sat, 20 Jun 2020 17:04:48 -0400 Received: from zero.eik.bme.hu (blah.eik.bme.hu [152.66.115.182]) by localhost (Postfix) with SMTP id 9B0FE748DC8; Sat, 20 Jun 2020 23:04:33 +0200 (CEST) Received: by zero.eik.bme.hu (Postfix, from userid 432) id E2C97748DDE; Sat, 20 Jun 2020 23:04:32 +0200 (CEST) Message-Id: In-Reply-To: References: From: BALATON Zoltan Subject: [PATCH v3 9/9] sm501: Fix and optimize overlap check Date: Sat, 20 Jun 2020 22:56:28 +0200 MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable To: qemu-devel@nongnu.org X-Spam-Probability: 8% Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=152.66.115.2; envelope-from=balaton@eik.bme.hu; helo=zero.eik.bme.hu X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/20 17:04:33 X-ACL-Warn: Detected OS = FreeBSD 9.x or newer [fuzzy] X-Spam_score_int: -41 X-Spam_score: -4.2 X-Spam_bar: ---- X-Spam_report: (-4.2 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Peter Maydell , Sebastian Bauer , Magnus Damm , Gerd Hoffmann , Aurelien Jarno Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" When doing reverse blit we need to check if source and dest overlap but it is not trivial due to possible different base and pitch of source and dest. Do rectangle overlap if base and pitch match, otherwise just check if memory area containing the rects overlaps so rects could possibly overlap. Signed-off-by: BALATON Zoltan --- hw/display/sm501.c | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/hw/display/sm501.c b/hw/display/sm501.c index 2db347dcbc..e7c69bf7fd 100644 --- a/hw/display/sm501.c +++ b/hw/display/sm501.c @@ -690,6 +690,7 @@ static void sm501_2d_operation(SM501State *s) unsigned int dst_pitch =3D (s->twoD_pitch >> 16) & 0x1FFF; int crt =3D (s->dc_crt_control & SM501_DC_CRT_CONTROL_SEL) ? 1 : 0; int fb_len =3D get_width(s, crt) * get_height(s, crt) * get_bpp(s, crt= ); + bool overlap =3D false; =20 if ((s->twoD_stretch >> 16) & 0xF) { qemu_log_mask(LOG_UNIMP, "sm501: only XY addressing is supported.\= n"); @@ -784,16 +785,21 @@ static void sm501_2d_operation(SM501State *s) ldn_he_p(&s->local_mem[src_base + si], bypp)); break; } - /* Check for overlaps, this could be made more exact */ - uint32_t sb, se, db, de; - sb =3D src_base + src_x + src_y * (width + src_pitch); - se =3D sb + width + height * (width + src_pitch); - db =3D dst_base + dst_x + dst_y * (width + dst_pitch); - de =3D db + width + height * (width + dst_pitch); - if (rtl && ((db >=3D sb && db <=3D se) || (de >=3D sb && de <= =3D se))) { - /* regions may overlap: copy via temporary */ - int llb =3D width * bypp; - int tmp_stride =3D DIV_ROUND_UP(llb, sizeof(uint32_t)); + /* If reverse blit do simple check for overlaps */ + if (rtl && src_base =3D=3D dst_base && src_pitch =3D=3D dst_pi= tch) { + overlap =3D (src_x < dst_x + width && src_x + width > dst_= x && + src_y < dst_y + height && src_y + height > dst_= y); + } else if (rtl) { + unsigned int sb, se, db, de; + sb =3D src_base + (src_x + src_y * src_pitch) * bypp; + se =3D sb + (width + height * src_pitch) * bypp; + db =3D dst_base + (dst_x + dst_y * dst_pitch) * bypp; + de =3D db + (width + height * dst_pitch) * bypp; + overlap =3D (db >=3D sb && db <=3D se) || (de >=3D sb && d= e <=3D se); + } + if (overlap) { + /* pixman can't do reverse blit: copy via temporary */ + int tmp_stride =3D DIV_ROUND_UP(width * bypp, sizeof(uint3= 2_t)); uint32_t *tmp =3D tmp_buf; =20 if (tmp_stride * sizeof(uint32_t) * height > sizeof(tmp_bu= f)) { --=20 2.21.3