From nobody Thu Mar 28 08:01:43 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=1590091069; cv=none; d=zohomail.com; s=zohoarc; b=C4zxG50ZeGy7zhAvhMEPFtlbVVoqq+3LOKs/3l5fPwrdRRONpBKyRejeYU3KkrjNOKVhSEdVTuEAARldwpxK9k01x97Qm/HeXE9bR9xnZ4ZtMqnNeEe2AcjHwIQd9bj6qjV4VhCJPqzRLAd3ziWHfWrsl63yOkzzUSKmpAXM60M= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1590091069; 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=zJkvLLRZJFXuNb2RdvRFoe6AFvm752P4m+bsAvqda5s=; b=h5/0JEUgobzrs/Y2LZxrx1ubCDWBe4rUoHayn6vMYPxXca5fOuOEXa32PrOs1lKHiITWDsfZA+SkITqdzDyd1lV8yvFHsUX/mxHwo90En1AgXSrPgDGU8mLXu47LYNBV7ogoKmrAog/lif4EaUCYAV+ZJSzr7kLCeSPziUD4xfU= 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 1590091069427263.9137228981333; Thu, 21 May 2020 12:57:49 -0700 (PDT) Received: from localhost ([::1]:38316 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jbrK8-0001l7-9E for importer@patchew.org; Thu, 21 May 2020 15:57:48 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:41986) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jbrGP-0002DY-Pa for qemu-devel@nongnu.org; Thu, 21 May 2020 15:53:57 -0400 Received: from zero.eik.bme.hu ([2001:738:2001:2001::2001]:46603) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jbrGN-0007af-6v for qemu-devel@nongnu.org; Thu, 21 May 2020 15:53:57 -0400 Received: from zero.eik.bme.hu (blah.eik.bme.hu [152.66.115.182]) by localhost (Postfix) with SMTP id D9496748DD8; Thu, 21 May 2020 21:53:43 +0200 (CEST) Received: by zero.eik.bme.hu (Postfix, from userid 432) id 54B22746307; Thu, 21 May 2020 21:53:43 +0200 (CEST) Message-Id: <305af87f59d81e92f2aaff09eb8a3603b8baa322.1590089984.git.balaton@eik.bme.hu> In-Reply-To: References: From: BALATON Zoltan Subject: [PATCH v2 1/7] sm501: Convert printf + abort to qemu_log_mask Date: Thu, 21 May 2020 21:39:44 +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=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_PASS=-0.001, URIBL_BLOCKED=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" Some places already use qemu_log_mask() to log unimplemented features or errors but some others have printf() then abort(). Convert these to qemu_log_mask() and avoid aborting to prevent guests to easily cause denial of service. Signed-off-by: BALATON Zoltan Reviewed-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by tags. Unless some problems are found this should be OK to --- hw/display/sm501.c | 57 ++++++++++++++++++++++------------------------ 1 file changed, 27 insertions(+), 30 deletions(-) diff --git a/hw/display/sm501.c b/hw/display/sm501.c index acc692531a..bd3ccfe311 100644 --- a/hw/display/sm501.c +++ b/hw/display/sm501.c @@ -727,8 +727,8 @@ static void sm501_2d_operation(SM501State *s) int fb_len =3D get_width(s, crt) * get_height(s, crt) * get_bpp(s, crt= ); =20 if (addressing !=3D 0x0) { - printf("%s: only XY addressing is supported.\n", __func__); - abort(); + qemu_log_mask(LOG_UNIMP, "sm501: only XY addressing is supported.\= n"); + return; } =20 if (rop_mode =3D=3D 0) { @@ -754,8 +754,8 @@ static void sm501_2d_operation(SM501State *s) =20 if ((s->twoD_source_base & 0x08000000) || (s->twoD_destination_base & 0x08000000)) { - printf("%s: only local memory is supported.\n", __func__); - abort(); + qemu_log_mask(LOG_UNIMP, "sm501: only local memory is supported.\n= "); + return; } =20 switch (operation) { @@ -823,9 +823,9 @@ static void sm501_2d_operation(SM501State *s) break; =20 default: - printf("non-implemented SM501 2D operation. %d\n", operation); - abort(); - break; + qemu_log_mask(LOG_UNIMP, "sm501: not implemented 2D operation: %d\= n", + operation); + return; } =20 if (dst_base >=3D get_fb_addr(s, crt) && @@ -892,9 +892,8 @@ static uint64_t sm501_system_config_read(void *opaque, = hwaddr addr, break; =20 default: - printf("sm501 system config : not implemented register read." - " addr=3D%x\n", (int)addr); - abort(); + qemu_log_mask(LOG_UNIMP, "sm501: not implemented system config" + "register read. addr=3D%" HWADDR_PRIx "\n", addr); } =20 return ret; @@ -948,15 +947,15 @@ static void sm501_system_config_write(void *opaque, h= waddr addr, break; case SM501_ENDIAN_CONTROL: if (value & 0x00000001) { - printf("sm501 system config : big endian mode not implemented.= \n"); - abort(); + qemu_log_mask(LOG_UNIMP, "sm501: system config big endian mode= not" + " implemented.\n"); } break; =20 default: - printf("sm501 system config : not implemented register write." - " addr=3D%x, val=3D%x\n", (int)addr, (uint32_t)value); - abort(); + qemu_log_mask(LOG_UNIMP, "sm501: not implemented system config" + "register write. addr=3D%" HWADDR_PRIx + ", val=3D%" PRIx64 "\n", addr, value); } } =20 @@ -1207,9 +1206,8 @@ static uint64_t sm501_disp_ctrl_read(void *opaque, hw= addr addr, break; =20 default: - printf("sm501 disp ctrl : not implemented register read." - " addr=3D%x\n", (int)addr); - abort(); + qemu_log_mask(LOG_UNIMP, "sm501: not implemented disp ctrl registe= r " + "read. addr=3D%" HWADDR_PRIx "\n", addr); } =20 return ret; @@ -1345,9 +1343,9 @@ static void sm501_disp_ctrl_write(void *opaque, hwadd= r addr, break; =20 default: - printf("sm501 disp ctrl : not implemented register write." - " addr=3D%x, val=3D%x\n", (int)addr, (unsigned)value); - abort(); + qemu_log_mask(LOG_UNIMP, "sm501: not implemented disp ctrl registe= r " + "write. addr=3D%" HWADDR_PRIx + ", val=3D%" PRIx64 "\n", addr, value); } } =20 @@ -1433,9 +1431,8 @@ static uint64_t sm501_2d_engine_read(void *opaque, hw= addr addr, ret =3D 0; /* Should return interrupt status */ break; default: - printf("sm501 disp ctrl : not implemented register read." - " addr=3D%x\n", (int)addr); - abort(); + qemu_log_mask(LOG_UNIMP, "sm501: not implemented disp ctrl registe= r " + "read. addr=3D%" HWADDR_PRIx "\n", addr); } =20 return ret; @@ -1520,9 +1517,9 @@ static void sm501_2d_engine_write(void *opaque, hwadd= r addr, /* ignored, writing 0 should clear interrupt status */ break; default: - printf("sm501 2d engine : not implemented register write." - " addr=3D%x, val=3D%x\n", (int)addr, (unsigned)value); - abort(); + qemu_log_mask(LOG_UNIMP, "sm501: not implemented 2d engine registe= r " + "write. addr=3D%" HWADDR_PRIx + ", val=3D%" PRIx64 "\n", addr, value); } } =20 @@ -1670,9 +1667,9 @@ static void sm501_update_display(void *opaque) draw_line =3D draw_line32_funcs[dst_depth_index]; break; default: - printf("sm501 update display : invalid control register value.\n"); - abort(); - break; + qemu_log_mask(LOG_GUEST_ERROR, "sm501: update display" + "invalid control register value.\n"); + return; } =20 /* set up to draw hardware cursor */ --=20 2.21.3 From nobody Thu Mar 28 08:01:43 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=1590090900; cv=none; d=zohomail.com; s=zohoarc; b=ZK00HsoD6CUJKQ8rd+K9Q/Zdi8DjYY5np98LbyuKe1bCtu9UGEx1CC1mV9OBX6tXg/JgZQt/QTqv8jwJXjasbzRJ0NMiptrRmTUmVSwSeTfynND7FSmtByqfSzW7jvEl137kOGwmrwmMJ+mqip1XQHZdVmaaJLGMNn+QQU5lenw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1590090900; 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=/ewEhEJynpf/wbKcUM21TgNNWiW1sj1s6qeCVhBTV4w=; b=no2a82/YEBDaW4W7133sL0dx5jLeJeHtHbFckTWVtnkEilRVl+tLZNuollvwphyiENNyVNw8fFAj1nt1lGjnOQpkE/rjp+EbSOGtKY9rdyUSuId3zI+Z+l3AV86Nw86YFvREeWO6ylZEwPZw3fvA0NBttHgcp4QLoG4iqpWlK/A= 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 1590090900183964.718973235981; Thu, 21 May 2020 12:55:00 -0700 (PDT) Received: from localhost ([::1]:52892 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jbrHO-0003uh-VY for importer@patchew.org; Thu, 21 May 2020 15:54:59 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:41978) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jbrGO-0002D7-Rh for qemu-devel@nongnu.org; Thu, 21 May 2020 15:53:56 -0400 Received: from zero.eik.bme.hu ([2001:738:2001:2001::2001]:57709) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jbrGM-0007ah-Dq for qemu-devel@nongnu.org; Thu, 21 May 2020 15:53:56 -0400 Received: from zero.eik.bme.hu (blah.eik.bme.hu [152.66.115.182]) by localhost (Postfix) with SMTP id DBDDA748DD9; Thu, 21 May 2020 21:53:43 +0200 (CEST) Received: by zero.eik.bme.hu (Postfix, from userid 432) id 58A6774633F; Thu, 21 May 2020 21:53:43 +0200 (CEST) Message-Id: In-Reply-To: References: From: BALATON Zoltan Subject: [PATCH v2 2/7] sm501: Shorten long variable names in sm501_2d_operation Date: Thu, 21 May 2020 21:39:44 +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_PASS=-0.001, URIBL_BLOCKED=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" This increases readability and cleans up some confusing naming. Signed-off-by: BALATON Zoltan Reviewed-by tags. Unless some problems are found this should be OK to --- hw/display/sm501.c | 45 ++++++++++++++++++++++----------------------- 1 file changed, 22 insertions(+), 23 deletions(-) diff --git a/hw/display/sm501.c b/hw/display/sm501.c index bd3ccfe311..f42d05e1e4 100644 --- a/hw/display/sm501.c +++ b/hw/display/sm501.c @@ -700,17 +700,16 @@ static inline void hwc_invalidate(SM501State *s, int = crt) static void sm501_2d_operation(SM501State *s) { /* obtain operation parameters */ - int operation =3D (s->twoD_control >> 16) & 0x1f; + int cmd =3D (s->twoD_control >> 16) & 0x1F; int rtl =3D s->twoD_control & 0x8000000; int src_x =3D (s->twoD_source >> 16) & 0x01FFF; int src_y =3D s->twoD_source & 0xFFFF; int dst_x =3D (s->twoD_destination >> 16) & 0x01FFF; int dst_y =3D s->twoD_destination & 0xFFFF; - int operation_width =3D (s->twoD_dimension >> 16) & 0x1FFF; - int operation_height =3D s->twoD_dimension & 0xFFFF; + int width =3D (s->twoD_dimension >> 16) & 0x1FFF; + int height =3D s->twoD_dimension & 0xFFFF; uint32_t color =3D s->twoD_foreground; - int format_flags =3D (s->twoD_stretch >> 20) & 0x3; - int addressing =3D (s->twoD_stretch >> 16) & 0xF; + int format =3D (s->twoD_stretch >> 20) & 0x3; int rop_mode =3D (s->twoD_control >> 15) & 0x1; /* 1 for rop2, else ro= p3 */ /* 1 if rop2 source is the pattern, otherwise the source is the bitmap= */ int rop2_source_is_pattern =3D (s->twoD_control >> 14) & 0x1; @@ -721,12 +720,12 @@ static void sm501_2d_operation(SM501State *s) /* get frame buffer info */ uint8_t *src =3D s->local_mem + src_base; uint8_t *dst =3D s->local_mem + dst_base; - int src_width =3D s->twoD_pitch & 0x1FFF; - int dst_width =3D (s->twoD_pitch >> 16) & 0x1FFF; + int src_pitch =3D s->twoD_pitch & 0x1FFF; + 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= ); =20 - if (addressing !=3D 0x0) { + if ((s->twoD_stretch >> 16) & 0xF) { qemu_log_mask(LOG_UNIMP, "sm501: only XY addressing is supported.\= n"); return; } @@ -758,20 +757,20 @@ static void sm501_2d_operation(SM501State *s) return; } =20 - switch (operation) { + switch (cmd) { case 0x00: /* copy area */ #define COPY_AREA(_bpp, _pixel_type, rtl) { = \ int y, x, index_d, index_s; = \ - for (y =3D 0; y < operation_height; y++) { = \ - for (x =3D 0; x < operation_width; x++) { = \ + for (y =3D 0; y < height; y++) { \ + for (x =3D 0; x < width; x++) { \ _pixel_type val; = \ = \ if (rtl) { = \ - index_s =3D ((src_y - y) * src_width + src_x - x) * _b= pp; \ - index_d =3D ((dst_y - y) * dst_width + dst_x - x) * _b= pp; \ + index_s =3D ((src_y - y) * src_pitch + src_x - x) * _b= pp; \ + index_d =3D ((dst_y - y) * dst_pitch + dst_x - x) * _b= pp; \ } else { = \ - index_s =3D ((src_y + y) * src_width + src_x + x) * _b= pp; \ - index_d =3D ((dst_y + y) * dst_width + dst_x + x) * _b= pp; \ + index_s =3D ((src_y + y) * src_pitch + src_x + x) * _b= pp; \ + index_d =3D ((dst_y + y) * dst_pitch + dst_x + x) * _b= pp; \ } = \ if (rop_mode =3D=3D 1 && rop =3D=3D 5) { = \ /* Invert dest */ = \ @@ -783,7 +782,7 @@ static void sm501_2d_operation(SM501State *s) } = \ } = \ } - switch (format_flags) { + switch (format) { case 0: COPY_AREA(1, uint8_t, rtl); break; @@ -799,15 +798,15 @@ static void sm501_2d_operation(SM501State *s) case 0x01: /* fill rectangle */ #define FILL_RECT(_bpp, _pixel_type) { = \ int y, x; = \ - for (y =3D 0; y < operation_height; y++) { = \ - for (x =3D 0; x < operation_width; x++) { = \ - int index =3D ((dst_y + y) * dst_width + dst_x + x) * _bpp= ; \ + for (y =3D 0; y < height; y++) { \ + for (x =3D 0; x < width; x++) { \ + int index =3D ((dst_y + y) * dst_pitch + dst_x + x) * _bpp= ; \ *(_pixel_type *)&dst[index] =3D (_pixel_type)color; = \ } = \ } = \ } =20 - switch (format_flags) { + switch (format) { case 0: FILL_RECT(1, uint8_t); break; @@ -824,14 +823,14 @@ static void sm501_2d_operation(SM501State *s) =20 default: qemu_log_mask(LOG_UNIMP, "sm501: not implemented 2D operation: %d\= n", - operation); + cmd); return; } =20 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 + operation_height - 1) * dst_= width + - dst_x + operation_width) * (1 << format_flags)); + int dst_len =3D MIN(fb_len, ((dst_y + height - 1) * dst_pitch + + dst_x + width) * (1 << format)); if (dst_len) { memory_region_set_dirty(&s->local_mem_region, dst_base, dst_le= n); } --=20 2.21.3 From nobody Thu Mar 28 08:01:43 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=1590090898; cv=none; d=zohomail.com; s=zohoarc; b=CNh4ab4aCTPI/gvBgY03OXZZ/2LblvfRkGdM1gIFbPbgmpAzAYf5Xd7kVj/2AacdpazzY94ZeggZUSKtJqdXlW8wSK8jImGdBdJy3CFunxIcU6UEFnR83hnoeridiqTR8FiRjsZg+JD58Hs7+kXoEygChfEh2p9dPD86cEnBxjc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1590090898; 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=NgCDnaLHl3M/lSW6ryKu6SQwC09HswI5i0W7I3Sx3D4=; b=EXijt2BeYJsPIOm8TFmG8q5AwlzTiA3XK0LB1V4sPiZdl9ihyBp7pgZv3sC2QO/tp9L4NONZb8V/3u7O0I3tLsURRwutCitnu67iwWSyrPfqQ5yxTIW+/ofCYCIba0h0D8aTLU9g6cYMSQG1Bg6Hp9iFyFB5maduRdzxE5kmUIA= 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 1590090898463471.7555229420624; Thu, 21 May 2020 12:54:58 -0700 (PDT) Received: from localhost ([::1]:52696 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jbrHN-0003pn-2O for importer@patchew.org; Thu, 21 May 2020 15:54:57 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:41990) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jbrGQ-0002Di-ED for qemu-devel@nongnu.org; Thu, 21 May 2020 15:53:58 -0400 Received: from zero.eik.bme.hu ([152.66.115.2]:57737) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jbrGP-0007br-Ka for qemu-devel@nongnu.org; Thu, 21 May 2020 15:53:58 -0400 Received: from zero.eik.bme.hu (blah.eik.bme.hu [152.66.115.182]) by localhost (Postfix) with SMTP id 6E52F748DCA; Thu, 21 May 2020 21:53:51 +0200 (CEST) Received: by zero.eik.bme.hu (Postfix, from userid 432) id 5CD127482C8; Thu, 21 May 2020 21:53:43 +0200 (CEST) Message-Id: <124bf5de8d7cf503b32b377d0445029a76bfbd49.1590089984.git.balaton@eik.bme.hu> In-Reply-To: References: From: BALATON Zoltan Subject: [PATCH v2 3/7] sm501: Use BIT(x) macro to shorten constant Date: Thu, 21 May 2020 21:39:44 +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/05/21 15:53:45 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_PASS=-0.001, URIBL_BLOCKED=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" Signed-off-by: BALATON Zoltan Reviewed-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by tags. Unless some problems are found this should be OK to --- 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 f42d05e1e4..97660090bb 100644 --- a/hw/display/sm501.c +++ b/hw/display/sm501.c @@ -701,7 +701,7 @@ static void sm501_2d_operation(SM501State *s) { /* obtain operation parameters */ int cmd =3D (s->twoD_control >> 16) & 0x1F; - int rtl =3D s->twoD_control & 0x8000000; + int rtl =3D s->twoD_control & BIT(27); int src_x =3D (s->twoD_source >> 16) & 0x01FFF; int src_y =3D s->twoD_source & 0xFFFF; int dst_x =3D (s->twoD_destination >> 16) & 0x01FFF; @@ -751,8 +751,7 @@ static void sm501_2d_operation(SM501State *s) } } =20 - if ((s->twoD_source_base & 0x08000000) || - (s->twoD_destination_base & 0x08000000)) { + if (s->twoD_source_base & BIT(27) || s->twoD_destination_base & BIT(27= )) { qemu_log_mask(LOG_UNIMP, "sm501: only local memory is supported.\n= "); return; } --=20 2.21.3 From nobody Thu Mar 28 08:01:43 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=1590090900; cv=none; d=zohomail.com; s=zohoarc; b=IUEaV26N0m5xcvR94dFmJHcp8hVZJlqXdbpKTZiVICv96bWk50HXkVu6p/ZKKzvNy4qCnJ/v1ywLPAaSvUgbzO7CsMAH6UtVBGLloy8oTeO/2l9JgzRmeyJCQxfJcuvy5OCHU9LnfIZ7s87BDKiHlIU9NwJvweJi3iRyUKa6Y7k= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1590090900; 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=yGeAGrY9eznfXndSiShAFHx4JHlnMhU5gfkoilWg2HE=; b=C5zT7sdpUbg/BFhFTQ5djoa4MowTsFtPS6dQhgFg6wbizUN5F935nVcfFGtlvIr7GrP6Vt0axjlpK2kiVcuGWjSaa0FzwjPyKI4rW8DukT7HOGaVgpzm4KkIN5567x37x6gVin9V5kiFLKElLF0gFwYHCXMaSwl67Nzrpiyw5r0= 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 1590090900037677.4430600660015; Thu, 21 May 2020 12:55:00 -0700 (PDT) Received: from localhost ([::1]:52910 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jbrHO-0003vC-Qa for importer@patchew.org; Thu, 21 May 2020 15:54:58 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:41974) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jbrGP-0002D1-9F for qemu-devel@nongnu.org; Thu, 21 May 2020 15:53:57 -0400 Received: from zero.eik.bme.hu ([2001:738:2001:2001::2001]:40489) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jbrGM-0007ac-SK for qemu-devel@nongnu.org; Thu, 21 May 2020 15:53:55 -0400 Received: from zero.eik.bme.hu (blah.eik.bme.hu [152.66.115.182]) by localhost (Postfix) with SMTP id AC0E0748DCD; Thu, 21 May 2020 21:53:43 +0200 (CEST) Received: by zero.eik.bme.hu (Postfix, from userid 432) id 613C9748DCA; Thu, 21 May 2020 21:53:43 +0200 (CEST) Message-Id: In-Reply-To: References: From: BALATON Zoltan Subject: [PATCH v2 4/7] sm501: Clean up local variables in sm501_2d_operation Date: Thu, 21 May 2020 21:39:44 +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=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_PASS=-0.001, URIBL_BLOCKED=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" Make variables local to the block they are used in to make it clearer which operation they are needed for. Signed-off-by: BALATON Zoltan Reviewed-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by tags. Unless some problems are found this should be OK to --- hw/display/sm501.c | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/hw/display/sm501.c b/hw/display/sm501.c index 97660090bb..5ed57703d8 100644 --- a/hw/display/sm501.c +++ b/hw/display/sm501.c @@ -699,28 +699,19 @@ static inline void hwc_invalidate(SM501State *s, int = crt) =20 static void sm501_2d_operation(SM501State *s) { - /* obtain operation parameters */ int cmd =3D (s->twoD_control >> 16) & 0x1F; int rtl =3D s->twoD_control & BIT(27); - int src_x =3D (s->twoD_source >> 16) & 0x01FFF; - int src_y =3D s->twoD_source & 0xFFFF; - int dst_x =3D (s->twoD_destination >> 16) & 0x01FFF; - int dst_y =3D s->twoD_destination & 0xFFFF; - int width =3D (s->twoD_dimension >> 16) & 0x1FFF; - int height =3D s->twoD_dimension & 0xFFFF; - uint32_t color =3D s->twoD_foreground; int format =3D (s->twoD_stretch >> 20) & 0x3; int rop_mode =3D (s->twoD_control >> 15) & 0x1; /* 1 for rop2, else ro= p3 */ /* 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 rop =3D s->twoD_control & 0xFF; - uint32_t src_base =3D s->twoD_source_base & 0x03FFFFFF; + int dst_x =3D (s->twoD_destination >> 16) & 0x01FFF; + int dst_y =3D s->twoD_destination & 0xFFFF; + int width =3D (s->twoD_dimension >> 16) & 0x1FFF; + int height =3D s->twoD_dimension & 0xFFFF; uint32_t dst_base =3D s->twoD_destination_base & 0x03FFFFFF; - - /* get frame buffer info */ - uint8_t *src =3D s->local_mem + src_base; uint8_t *dst =3D s->local_mem + dst_base; - int src_pitch =3D s->twoD_pitch & 0x1FFF; 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= ); @@ -758,6 +749,13 @@ static void sm501_2d_operation(SM501State *s) =20 switch (cmd) { case 0x00: /* copy area */ + { + int src_x =3D (s->twoD_source >> 16) & 0x01FFF; + int src_y =3D s->twoD_source & 0xFFFF; + uint32_t src_base =3D s->twoD_source_base & 0x03FFFFFF; + uint8_t *src =3D s->local_mem + src_base; + int src_pitch =3D s->twoD_pitch & 0x1FFF; + #define COPY_AREA(_bpp, _pixel_type, rtl) { = \ int y, x, index_d, index_s; = \ for (y =3D 0; y < height; y++) { \ @@ -793,8 +791,11 @@ static void sm501_2d_operation(SM501State *s) break; } break; - + } case 0x01: /* fill rectangle */ + { + uint32_t color =3D s->twoD_foreground; + #define FILL_RECT(_bpp, _pixel_type) { = \ int y, x; = \ for (y =3D 0; y < height; y++) { \ @@ -819,7 +820,7 @@ static void sm501_2d_operation(SM501State *s) break; } break; - + } default: qemu_log_mask(LOG_UNIMP, "sm501: not implemented 2D operation: %d\= n", cmd); --=20 2.21.3 From nobody Thu Mar 28 08:01:43 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=1590091005; cv=none; d=zohomail.com; s=zohoarc; b=lfCENwEjMliFPMYnx4uza3XTYzuOrqJI80e2M30FDnyFDausF82IIk0RmFm7gWFjRbQIkVdrVlNpqBiTWYoQ+gPECUoNzrRaDZ4FvGX6s3zTuOtyczFI17go5z8BTLQIf2SHiOeuc9ly+PnchygvjRh6SgOeUEcboHr67PQ5Q8U= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1590091005; 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=7xhELfJfXVskwpC+97TCtM0rx6mEJNI4e0pNVt8xmU0=; b=BRE0fCfMKvwLxAqBeDvXc9rWanNjjwnv2KRMcZe8zqF/YLZFvSR55VsAN9/wWgZZd8ryVXcL1+nIZtXWz56crwiRB9Ppai3cpsJcmo39YmgGQoIxuAoqhi67nXO429btCkuT6mSIH1jDrA9wekCAH7j//rcT0c5dRb3I55bXFDA= 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 1590091005423242.3661367253411; Thu, 21 May 2020 12:56:45 -0700 (PDT) Received: from localhost ([::1]:60764 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jbrJ6-0007E3-3m for importer@patchew.org; Thu, 21 May 2020 15:56:44 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:41980) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jbrGO-0002D8-TH for qemu-devel@nongnu.org; Thu, 21 May 2020 15:53:56 -0400 Received: from zero.eik.bme.hu ([152.66.115.2]:57714) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jbrGN-0007ai-Ka for qemu-devel@nongnu.org; Thu, 21 May 2020 15:53:56 -0400 Received: from zero.eik.bme.hu (blah.eik.bme.hu [152.66.115.182]) by localhost (Postfix) with SMTP id E839B748DDA; Thu, 21 May 2020 21:53:43 +0200 (CEST) Received: by zero.eik.bme.hu (Postfix, from userid 432) id 656D2748DCC; Thu, 21 May 2020 21:53:43 +0200 (CEST) Message-Id: <58666389b6cae256e4e972a32c05cf8aa51bffc0.1590089984.git.balaton@eik.bme.hu> In-Reply-To: References: From: BALATON Zoltan Subject: [PATCH v2 5/7] sm501: Replace hand written implementation with pixman where possible Date: Thu, 21 May 2020 21:39:44 +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/05/21 15:53:45 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_PASS=-0.001, URIBL_BLOCKED=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" Besides being faster this should also prevent malicious guests to abuse 2D engine to overwrite data or cause a crash. Signed-off-by: BALATON Zoltan Reviewed-by tags. Unless some problems are found this should be OK to --- hw/display/sm501.c | 207 ++++++++++++++++++++++++++------------------- 1 file changed, 119 insertions(+), 88 deletions(-) diff --git a/hw/display/sm501.c b/hw/display/sm501.c index 5ed57703d8..8bf4d111f4 100644 --- a/hw/display/sm501.c +++ b/hw/display/sm501.c @@ -706,13 +706,12 @@ static void sm501_2d_operation(SM501State *s) /* 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 rop =3D s->twoD_control & 0xFF; - int dst_x =3D (s->twoD_destination >> 16) & 0x01FFF; - int dst_y =3D s->twoD_destination & 0xFFFF; - int width =3D (s->twoD_dimension >> 16) & 0x1FFF; - int height =3D s->twoD_dimension & 0xFFFF; + unsigned int dst_x =3D (s->twoD_destination >> 16) & 0x01FFF; + unsigned int dst_y =3D s->twoD_destination & 0xFFFF; + unsigned int width =3D (s->twoD_dimension >> 16) & 0x1FFF; + unsigned int height =3D s->twoD_dimension & 0xFFFF; uint32_t dst_base =3D s->twoD_destination_base & 0x03FFFFFF; - uint8_t *dst =3D s->local_mem + dst_base; - int dst_pitch =3D (s->twoD_pitch >> 16) & 0x1FFF; + 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= ); =20 @@ -721,104 +720,136 @@ static void sm501_2d_operation(SM501State *s) return; } =20 - if (rop_mode =3D=3D 0) { - if (rop !=3D 0xcc) { - /* Anything other than plain copies are not supported */ - qemu_log_mask(LOG_UNIMP, "sm501: rop3 mode with rop %x is not " - "supported.\n", rop); - } - } else { - if (rop2_source_is_pattern && rop !=3D 0x5) { - /* For pattern source, we support only inverse dest */ - qemu_log_mask(LOG_UNIMP, "sm501: rop2 source being the pattern= and " - "rop %x is not supported.\n", rop); - } else { - if (rop !=3D 0x5 && rop !=3D 0xc) { - /* Anything other than plain copies or inverse dest is not - * supported */ - qemu_log_mask(LOG_UNIMP, "sm501: rop mode %x is not " - "supported.\n", rop); - } - } - } - if (s->twoD_source_base & BIT(27) || s->twoD_destination_base & BIT(27= )) { qemu_log_mask(LOG_UNIMP, "sm501: only local memory is supported.\n= "); return; } =20 + if (!dst_pitch) { + qemu_log_mask(LOG_GUEST_ERROR, "sm501: Zero dest pitch.\n"); + return; + } + + if (!width || !height) { + qemu_log_mask(LOG_GUEST_ERROR, "sm501: Zero size 2D op.\n"); + return; + } + + if (rtl) { + dst_x -=3D width - 1; + dst_y -=3D height - 1; + } + + if (dst_base >=3D get_local_mem_size(s) || dst_base + + (dst_x + width + (dst_y + height) * (dst_pitch + width)) * + (1 << format) >=3D get_local_mem_size(s)) { + qemu_log_mask(LOG_GUEST_ERROR, "sm501: 2D op dest is outside vram.= \n"); + return; + } + switch (cmd) { - case 0x00: /* copy area */ + case 0: /* BitBlt */ { - int src_x =3D (s->twoD_source >> 16) & 0x01FFF; - int src_y =3D s->twoD_source & 0xFFFF; + unsigned int src_x =3D (s->twoD_source >> 16) & 0x01FFF; + unsigned int src_y =3D s->twoD_source & 0xFFFF; uint32_t src_base =3D s->twoD_source_base & 0x03FFFFFF; - uint8_t *src =3D s->local_mem + src_base; - int src_pitch =3D s->twoD_pitch & 0x1FFF; - -#define COPY_AREA(_bpp, _pixel_type, rtl) { = \ - int y, x, index_d, index_s; = \ - for (y =3D 0; y < height; y++) { \ - for (x =3D 0; x < width; x++) { \ - _pixel_type val; = \ - = \ - if (rtl) { = \ - index_s =3D ((src_y - y) * src_pitch + src_x - x) * _b= pp; \ - index_d =3D ((dst_y - y) * dst_pitch + dst_x - x) * _b= pp; \ - } else { = \ - index_s =3D ((src_y + y) * src_pitch + src_x + x) * _b= pp; \ - index_d =3D ((dst_y + y) * dst_pitch + dst_x + x) * _b= pp; \ - } = \ - if (rop_mode =3D=3D 1 && rop =3D=3D 5) { = \ - /* Invert dest */ = \ - val =3D ~*(_pixel_type *)&dst[index_d]; = \ - } else { = \ - val =3D *(_pixel_type *)&src[index_s]; = \ - } = \ - *(_pixel_type *)&dst[index_d] =3D val; = \ - } = \ - } = \ - } - switch (format) { - case 0: - COPY_AREA(1, uint8_t, rtl); - break; - case 1: - COPY_AREA(2, uint16_t, rtl); - break; - case 2: - COPY_AREA(4, uint32_t, rtl); - break; + unsigned int src_pitch =3D s->twoD_pitch & 0x1FFF; + + if (!src_pitch) { + qemu_log_mask(LOG_GUEST_ERROR, "sm501: Zero src pitch.\n"); + return; + } + + if (rtl) { + src_x -=3D width - 1; + src_y -=3D height - 1; + } + + if (src_base >=3D get_local_mem_size(s) || src_base + + (src_x + width + (src_y + height) * (src_pitch + width)) * + (1 << format) >=3D get_local_mem_size(s)) { + qemu_log_mask(LOG_GUEST_ERROR, + "sm501: 2D op src is outside vram.\n"); + return; + } + + if ((rop_mode && rop =3D=3D 0x5) || (!rop_mode && rop =3D=3D 0x55)= ) { + /* Invert dest, is there a way to do this with pixman? */ + unsigned int x, y, i; + uint8_t *d =3D s->local_mem + dst_base; + + 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)) { + 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; + } + } + } + } else { + /* Do copy src for unimplemented ops, better than unpainted ar= ea */ + if ((rop_mode && (rop !=3D 0xc || rop2_source_is_pattern)) || + (!rop_mode && rop !=3D 0xcc)) { + qemu_log_mask(LOG_UNIMP, + "sm501: rop%d op %x%s not implemented\n", + (rop_mode ? 2 : 3), rop, + (rop2_source_is_pattern ? + " with pattern source" : "")); + } + /* 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 * (1 << format); + int tmp_stride =3D DIV_ROUND_UP(llb, sizeof(uint32_t)); + uint32_t *tmp =3D g_malloc(tmp_stride * sizeof(uint32_t) * + height); + 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_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), + 0, 0, dst_x, dst_y, width, height); + g_free(tmp); + } 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_x, src_y, dst_x, dst_y, width, height); + } } break; } - case 0x01: /* fill rectangle */ + case 1: /* Rectangle Fill */ { uint32_t color =3D s->twoD_foreground; =20 -#define FILL_RECT(_bpp, _pixel_type) { = \ - int y, x; = \ - for (y =3D 0; y < height; y++) { \ - for (x =3D 0; x < width; x++) { \ - int index =3D ((dst_y + y) * dst_pitch + dst_x + x) * _bpp= ; \ - *(_pixel_type *)&dst[index] =3D (_pixel_type)color; = \ - } = \ - } = \ - } - - switch (format) { - case 0: - FILL_RECT(1, uint8_t); - break; - case 1: - color =3D cpu_to_le16(color); - FILL_RECT(2, uint16_t); - break; - case 2: + if (format =3D=3D 2) { color =3D cpu_to_le32(color); - FILL_RECT(4, uint32_t); - break; + } else if (format =3D=3D 1) { + color =3D cpu_to_le16(color); } + + 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); break; } default: --=20 2.21.3 From nobody Thu Mar 28 08:01:43 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=1590091002; cv=none; d=zohomail.com; s=zohoarc; b=KLygdR2b5Celz4CPp5y5VfQsus3fjQedJ9ZGWIeR3eZ18VbJHdDm6eW/TlK5mPubv+xtSUkLiT9Qrw73a3Tg4ONSDMcXA3+ofoKTp69VYz2j0ixqHk3AFQdp3y4A5LcqH2JU4a6vAYYo7rdGbw7uu/WicAaFbsNCvQa+2yVZBww= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1590091002; 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=pFs0k2W2Hn4wfDXmzOmTelWT4bRCYZRxsZDb1boKap4=; b=mNLJORaKQbLqMcyXUqZzwF1T3gOjTWBZI6o0NGqRG3epDnsSp40WRJ36ShjBQ3AOaa5F4Hu/eum8jtBWLN+B2FUhMx/SYUfZzgmgaVfqiX5Yg6qvk8KqbzRz+An2TdQsne8AyprrXGSI6l1MAsKLQ7tCjqkS0Fp/+8DO1BRDEWg= 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 159009100279160.54537176788119; Thu, 21 May 2020 12:56:42 -0700 (PDT) Received: from localhost ([::1]:60424 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jbrJ3-00075r-FC for importer@patchew.org; Thu, 21 May 2020 15:56:41 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:41984) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jbrGP-0002DV-JZ for qemu-devel@nongnu.org; Thu, 21 May 2020 15:53:57 -0400 Received: from zero.eik.bme.hu ([2001:738:2001:2001::2001]:57735) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jbrGO-0007bm-Q8 for qemu-devel@nongnu.org; Thu, 21 May 2020 15:53:57 -0400 Received: from zero.eik.bme.hu (blah.eik.bme.hu [152.66.115.182]) by localhost (Postfix) with SMTP id 06F73748DDD; Thu, 21 May 2020 21:53:44 +0200 (CEST) Received: by zero.eik.bme.hu (Postfix, from userid 432) id 69C16748DCF; Thu, 21 May 2020 21:53:43 +0200 (CEST) Message-Id: <7946852258d528497e85f465327fc90b5c3b59fb.1590089984.git.balaton@eik.bme.hu> In-Reply-To: References: From: BALATON Zoltan Subject: [PATCH v2 6/7] sm501: Optimize small overlapping blits Date: Thu, 21 May 2020 21:39:44 +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_PASS=-0.001, URIBL_BLOCKED=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" AmigaOS tends to do a lot of small blits (even 1 pixel). Avoid malloc overhead by keeping around a buffer for this and only alloc when blitting larger areas. Signed-off-by: BALATON Zoltan Reviewed-by tags. Unless some problems are found this should be OK to --- hw/display/sm501.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/hw/display/sm501.c b/hw/display/sm501.c index 8bf4d111f4..e7a9f77de7 100644 --- a/hw/display/sm501.c +++ b/hw/display/sm501.c @@ -750,6 +750,7 @@ static void sm501_2d_operation(SM501State *s) switch (cmd) { case 0: /* BitBlt */ { + static uint32_t tmp_buf[16384]; unsigned int src_x =3D (s->twoD_source >> 16) & 0x01FFF; unsigned int src_y =3D s->twoD_source & 0xFFFF; uint32_t src_base =3D s->twoD_source_base & 0x03FFFFFF; @@ -812,10 +813,14 @@ 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 free_buf =3D 0, llb =3D width * (1 << format); int tmp_stride =3D DIV_ROUND_UP(llb, sizeof(uint32_t)); - uint32_t *tmp =3D g_malloc(tmp_stride * sizeof(uint32_t) * - height); + uint32_t *tmp =3D tmp_buf; + + 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), tmp_stride, 8 * (1 << format), 8 * (1 << format= ), @@ -825,7 +830,9 @@ 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); - g_free(tmp); + if (free_buf) { + g_free(tmp); + } } else { pixman_blt((uint32_t *)&s->local_mem[src_base], (uint32_t *)&s->local_mem[dst_base], --=20 2.21.3 From nobody Thu Mar 28 08:01:43 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=1590091002; cv=none; d=zohomail.com; s=zohoarc; b=YJbHBxmcf1iiBZHpCN1TEhmCEB494QicBSP+fskf4i8xpPI3wui2vO8bhGw10SptmK2UfLWMPlpC/Z5x3MGehvgqD9Khy26VfqTZAbTTBgYyeCjssZ/HBoNfRdNYmUbZDKETsyCtBEwBMxTBMp5LLr1UfYnTkpkwcEwJ3qbLGcM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1590091002; 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=5YH7BLIfZz3MShDWrFVa+25ibKc4GMvZvhNmponcxL8=; b=lrnx1WbUTjVksJqOm7xtJgYlNLfwHqg+e/Luvo5w25vwODl/koBYuytG+zmNgZIuJwC3HKqaLGYeruNAs05/wXWhRWktn/pr6FoNSbkvNyoLyEZTon9+8FZXU160AWcJz+em6YmESrvUKRotBUXlpabehU0Il3u9HjEv1vkyHbU= 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 15900910029265.78569774821392; Thu, 21 May 2020 12:56:42 -0700 (PDT) Received: from localhost ([::1]:60406 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jbrJ3-00075U-Fd for importer@patchew.org; Thu, 21 May 2020 15:56:41 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:41994) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jbrGR-0002Dq-0m for qemu-devel@nongnu.org; Thu, 21 May 2020 15:53:59 -0400 Received: from zero.eik.bme.hu ([2001:738:2001:2001::2001]:57736) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jbrGQ-0007c1-5P for qemu-devel@nongnu.org; Thu, 21 May 2020 15:53:58 -0400 Received: from zero.eik.bme.hu (blah.eik.bme.hu [152.66.115.182]) by localhost (Postfix) with SMTP id 057E7748DDC; Thu, 21 May 2020 21:53:44 +0200 (CEST) Received: by zero.eik.bme.hu (Postfix, from userid 432) id 7027C748DCB; Thu, 21 May 2020 21:53:43 +0200 (CEST) Message-Id: <1392cad2ad1315a5a50409970e0af061821462e6.1590089984.git.balaton@eik.bme.hu> In-Reply-To: References: From: BALATON Zoltan Subject: [PATCH v2 7/7] sm501: Remove obsolete changelog and todo comment Date: Thu, 21 May 2020 21:39:44 +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=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_PASS=-0.001, URIBL_BLOCKED=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" Also update copyright year for latest changes Signed-off-by: BALATON Zoltan Reviewed-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by tags. Unless some problems are found this should be OK to --- hw/display/sm501.c | 19 +------------------ 1 file changed, 1 insertion(+), 18 deletions(-) diff --git a/hw/display/sm501.c b/hw/display/sm501.c index e7a9f77de7..edd8d24a76 100644 --- a/hw/display/sm501.c +++ b/hw/display/sm501.c @@ -2,7 +2,7 @@ * QEMU SM501 Device * * Copyright (c) 2008 Shin-ichiro KAWASAKI - * Copyright (c) 2016 BALATON Zoltan + * Copyright (c) 2016-2020 BALATON Zoltan * * Permission is hereby granted, free of charge, to any person obtaining a= copy * of this software and associated documentation files (the "Software"), t= o deal @@ -40,23 +40,6 @@ #include "ui/pixel_ops.h" #include "qemu/bswap.h" =20 -/* - * Status: 2010/05/07 - * - Minimum implementation for Linux console : mmio regs and CRT layer. - * - 2D graphics acceleration partially supported : only fill rectangle. - * - * Status: 2016/12/04 - * - Misc fixes: endianness, hardware cursor - * - Panel support - * - * TODO: - * - Touch panel support - * - USB support - * - UART support - * - More 2D graphics engine support - * - Performance tuning - */ - /*#define DEBUG_SM501*/ /*#define DEBUG_BITBLT*/ =20 --=20 2.21.3