Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/2202599/?format=api
{ "id": 2202599, "url": "http://patchwork.ozlabs.org/api/patches/2202599/?format=api", "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20260227203944.746471-10-chad@jablonski.xyz/", "project": { "id": 14, "url": "http://patchwork.ozlabs.org/api/projects/14/?format=api", "name": "QEMU Development", "link_name": "qemu-devel", "list_id": "qemu-devel.nongnu.org", "list_email": "qemu-devel@nongnu.org", "web_url": "", "scm_url": "", "webscm_url": "", "list_archive_url": "", "list_archive_url_format": "", "commit_url_format": "" }, "msgid": "<20260227203944.746471-10-chad@jablonski.xyz>", "list_archive_url": null, "date": "2026-02-27T20:39:35", "name": "[v9,09/18] ati-vga: Remove src and dst stride mutation in ati_2d_blt", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "d7b1cb22582f42bb50b7d5c9cd47fa21268f5364", "submitter": { "id": 91805, "url": "http://patchwork.ozlabs.org/api/people/91805/?format=api", "name": "Chad Jablonski", "email": "chad@jablonski.xyz" }, "delegate": null, "mbox": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20260227203944.746471-10-chad@jablonski.xyz/mbox/", "series": [ { "id": 493814, "url": "http://patchwork.ozlabs.org/api/series/493814/?format=api", "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/list/?series=493814", "date": "2026-02-27T20:39:27", "name": "ati-vga: Implement HOST_DATA transfers to enable X.org text rendering", "version": 9, "mbox": "http://patchwork.ozlabs.org/series/493814/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/2202599/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/2202599/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>", "X-Original-To": "incoming@patchwork.ozlabs.org", "Delivered-To": "patchwork-incoming@legolas.ozlabs.org", "Authentication-Results": [ "legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=jablonski.xyz header.i=@jablonski.xyz\n header.a=rsa-sha256 header.s=fm2 header.b=M0mgbY1k;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=messagingengine.com header.i=@messagingengine.com\n header.a=rsa-sha256 header.s=fm3 header.b=OeLgFTiO;\n\tdkim-atps=neutral", "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org\n (client-ip=209.51.188.17; helo=lists.gnu.org;\n envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n receiver=patchwork.ozlabs.org)" ], "Received": [ "from lists.gnu.org (lists.gnu.org [209.51.188.17])\n\t(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fN0cp3ssyz1xxx\n\tfor <incoming@patchwork.ozlabs.org>; Sat, 28 Feb 2026 07:42:18 +1100 (AEDT)", "from localhost ([::1] helo=lists1p.gnu.org)\n\tby lists.gnu.org with esmtp (Exim 4.90_1)\n\t(envelope-from <qemu-devel-bounces@nongnu.org>)\n\tid 1vw4e5-0001pR-0e; Fri, 27 Feb 2026 15:41:09 -0500", "from eggs.gnu.org ([2001:470:142:3::10])\n by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <chad@jablonski.xyz>)\n id 1vw4e1-0001TG-IH\n for qemu-devel@nongnu.org; Fri, 27 Feb 2026 15:41:05 -0500", "from fhigh-a7-smtp.messagingengine.com ([103.168.172.158])\n by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <chad@jablonski.xyz>)\n id 1vw4dy-0007Q7-7H\n for qemu-devel@nongnu.org; Fri, 27 Feb 2026 15:41:04 -0500", "from phl-compute-04.internal (phl-compute-04.internal [10.202.2.44])\n by mailfhigh.phl.internal (Postfix) with ESMTP id 8993514001F0;\n Fri, 27 Feb 2026 15:41:00 -0500 (EST)", "from phl-frontend-03 ([10.202.2.162])\n by phl-compute-04.internal (MEProxy); Fri, 27 Feb 2026 15:41:00 -0500", "by mail.messagingengine.com (Postfix) with ESMTPA; Fri,\n 27 Feb 2026 15:41:00 -0500 (EST)", "from localhost (chomposaur [local])\n by chomposaur (OpenSMTPD) with ESMTPA id 4b8c2ff7;\n Fri, 27 Feb 2026 20:40:55 +0000 (UTC)" ], "DKIM-Signature": [ "v=1; a=rsa-sha256; c=relaxed/relaxed; d=jablonski.xyz;\n h=cc:cc:content-transfer-encoding:content-type:date:date:from\n :from:in-reply-to:in-reply-to:message-id:mime-version:references\n :reply-to:subject:subject:to:to; s=fm2; t=1772224860; x=\n 1772311260; bh=lCg0ydTcvECcQMK7tczPRmb81G6yDxSx9iHuTCxaTpc=; b=M\n 0mgbY1k/EVWUWXYAXVOXoQ1XuTkMoaKNRJZ9CAjq7znhfLhnZnFK0Jelzqf8nQii\n 7baclHwpKIP4I1fU4mcJ/W6XcaiENbG5QkO4aGwqjWoa+YXeXhQpNpH7USig6P1Q\n aFzKyoYiqwECRcySYi3R5/dhhvOj1ItBSgzMTEcPlMRXLK6YC7hM+2U5ll55oWRn\n GZGR0rZCLuEsHfevmU5YHXVQw1ZxA0MYRxQp+ZUncG1aWiONMYgAoGuGPnv2RXuk\n 9orVwExs0mHwZ1XZOie8LXnYg3rmmT+xpOKv6irbdmKF1MTX43bqzsQD9pAsAgxi\n K46MFA6zXpo9RkjnN+8EA==", "v=1; a=rsa-sha256; c=relaxed/relaxed; d=\n messagingengine.com; h=cc:cc:content-transfer-encoding\n :content-type:date:date:feedback-id:feedback-id:from:from\n :in-reply-to:in-reply-to:message-id:mime-version:references\n :reply-to:subject:subject:to:to:x-me-proxy:x-me-sender\n :x-me-sender:x-sasl-enc; s=fm3; t=1772224860; x=1772311260; bh=l\n Cg0ydTcvECcQMK7tczPRmb81G6yDxSx9iHuTCxaTpc=; b=OeLgFTiOr4QnftgqY\n IEYg4wuT8ieRnC3K9LooU9J64OzaqW0Ezvv8aJOQEpCKa2pANq4Tk7Q5FN6xazvc\n 49xnc8xNDRr10mgxQ9T2Ly8Nme6++ZnH7+bhtUdeZ9tP4PuRy63fEfylUogLMUBo\n kXnfghZzgP9TVJNPK/TpdIUslqiGqub8cSu3F/WPY0O+0B/opoN1V0vYUmNyErgv\n Kx11HH5hcfbt9nwBrPhftOR7JpSK2uBU0lr7zyPv6hK23nf3mJ1YhOfa0kKmibQW\n k+fst2EpqSz73ZuYDrjnfp7FpZVRcw8Qy6S8BdUBw+wBli7qtl6ltYyrB/Y+gm9Z\n pq3xw==" ], "X-ME-Sender": "<xms:XAGiadrUNiz1aaiBqKNDaqvXAWwpf4S1xyqfMbKxCOygSWZZMIjHMA>\n <xme:XAGiaWhjuXahX9FqZLHctROAwNNi2GjCFg1ceXeewhYs4WuCA620sno2qjkYvIH9L\n 482YWW6hx597OiGKm8oz56LGr0eA7BlrTStBTtnQz8as5d81xKciww>", "X-ME-Received": "\n <xmr:XAGiaShWMZP_3bMDkNcEQMDM5dRcalvfdfrAuLAn0kUKopxeF6irbHogR-B5>", "X-ME-Proxy-Cause": "\n gggruggvucftvghtrhhoucdtuddrgeefgedrtddtgddvgeelleelucetufdoteggodetrf\n dotffvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfurfetoffkrfgpnffqhgenuceu\n rghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmnegfrh\n hlucfvnfffucdljedtmdenucfjughrpefhvfevufffkffojghfggfgsedtkeertdertddt\n necuhfhrohhmpeevhhgrugculfgrsghlohhnshhkihcuoegthhgrugesjhgrsghlohhnsh\n hkihdrgiihiieqnecuggftrfgrthhtvghrnhepgfeiteejhfelheefieetjefgleejfffh\n ueffvdduieejgfeuueeuvddvkeejhfelnecuvehluhhsthgvrhfuihiivgepudenucfrrg\n hrrghmpehmrghilhhfrhhomheptghhrggusehjrggslhhonhhskhhirdighiiipdhnsggp\n rhgtphhtthhopeehpdhmohguvgepshhmthhpohhuthdprhgtphhtthhopegsrghlrghtoh\n hnsegvihhkrdgsmhgvrdhhuhdprhgtphhtthhopehmrghrtggrnhgurhgvrdhluhhrvggr\n uhesrhgvughhrghtrdgtohhmpdhrtghpthhtoheptghhrggusehjrggslhhonhhskhhird\n ighiiipdhrtghpthhtohepqhgvmhhuqdguvghvvghlsehnohhnghhnuhdrohhrghdprhgt\n phhtthhopehkrhgrgigvlhesrhgvughhrghtrdgtohhm", "X-ME-Proxy": "<xmx:XAGiaUjJ6qF-K7nArQCIZp_WfdjZyQChv28lI9P6fgMz27tl-nXKnw>\n <xmx:XAGiaaIgRBWkjWWdAgIFBp3PBVHUTSmlmuJoi5buL0_RwLyF4LssTw>\n <xmx:XAGiabHKp9jWfaf327VCAujzEJ9-dObMbGBUlBIMxmnBZ62gOwGl8A>\n <xmx:XAGiaWSb8a4rzUYbLFaL-LvWPLnj7E33Jmx580i_Jdva_r9hm4TOcQ>\n <xmx:XAGiab92qdK7AARVJyBjeM1B18cMrn2tZ4_-4FfzW2ld9JOSNNHS9Qb5>", "Feedback-ID": "ib26944c1:Fastmail", "From": "Chad Jablonski <chad@jablonski.xyz>", "To": "qemu-devel@nongnu.org", "Cc": "BALATON Zoltan <balaton@eik.bme.hu>, Gerd Hoffmann <kraxel@redhat.com>,\n\t=?utf-8?q?Marc-Andr=C3=A9_Lureau?= <marcandre.lureau@redhat.com>,\n Chad Jablonski <chad@jablonski.xyz>", "Subject": "[PATCH v9 09/18] ati-vga: Remove src and dst stride mutation in\n ati_2d_blt", "Date": "Fri, 27 Feb 2026 15:39:35 -0500", "Message-ID": "<20260227203944.746471-10-chad@jablonski.xyz>", "X-Mailer": "git-send-email 2.52.0", "In-Reply-To": "<20260227203944.746471-1-chad@jablonski.xyz>", "References": "<20260227203944.746471-1-chad@jablonski.xyz>", "MIME-Version": "1.0", "Content-Transfer-Encoding": "8bit", "Received-SPF": "pass client-ip=103.168.172.158;\n envelope-from=chad@jablonski.xyz;\n helo=fhigh-a7-smtp.messagingengine.com", "X-Spam_score_int": "8", "X-Spam_score": "0.8", "X-Spam_bar": "/", "X-Spam_report": "(0.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,\n DKIM_VALID=-0.1,\n DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FROM_SUSPICIOUS_NTLD=0.5,\n PDS_OTHER_BAD_TLD=1.999, RCVD_IN_DNSWL_LOW=-0.7,\n RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.706,\n RCVD_IN_VALIDITY_RPBL_BLOCKED=0.401,\n SPF_HELO_PASS=-0.001, SPF_PASS=-0.001,\n UNPARSEABLE_RELAY=0.001 autolearn=no autolearn_force=no", "X-Spam_action": "no action", "X-BeenThere": "qemu-devel@nongnu.org", "X-Mailman-Version": "2.1.29", "Precedence": "list", "List-Id": "qemu development <qemu-devel.nongnu.org>", "List-Unsubscribe": "<https://lists.nongnu.org/mailman/options/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>", "List-Archive": "<https://lists.nongnu.org/archive/html/qemu-devel>", "List-Post": "<mailto:qemu-devel@nongnu.org>", "List-Help": "<mailto:qemu-devel-request@nongnu.org?subject=help>", "List-Subscribe": "<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=subscribe>", "Errors-To": "qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org", "Sender": "qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org" }, "content": "Pixman requires stride in words. So over the course of the ati_2d_blt\nfunction both src and dst stride were mutated before being passed to\npixman and then back afterwards.\n\nThis creates local variables holding src and dst stride in words\navoiding the potentially confusing mutation.\n\nSigned-off-by: Chad Jablonski <chad@jablonski.xyz>\nReviewed-by: BALATON Zoltan <balaton@eik.bme.hu>\n---\n hw/display/ati_2d.c | 41 ++++++++++++++++++-----------------------\n 1 file changed, 18 insertions(+), 23 deletions(-)", "diff": "diff --git a/hw/display/ati_2d.c b/hw/display/ati_2d.c\nindex 980cdd6ac0..e366774835 100644\n--- a/hw/display/ati_2d.c\n+++ b/hw/display/ati_2d.c\n@@ -85,6 +85,7 @@ void ati_2d_blt(ATIVGAState *s)\n dst_bits += s->regs.crtc_offset & 0x07ffffff;\n dst_stride *= bpp;\n }\n+ int dst_stride_words = dst_stride / sizeof(uint32_t);\n uint8_t *end = s->vga.vram_ptr + s->vga.vram_size;\n if (dst_x > 0x3fff || dst_y > 0x3fff || dst_bits >= end\n || dst_bits + dst_x\n@@ -118,6 +119,7 @@ void ati_2d_blt(ATIVGAState *s)\n src_bits += s->regs.crtc_offset & 0x07ffffff;\n src_stride *= bpp;\n }\n+ int src_stride_words = src_stride / sizeof(uint32_t);\n if (src_x > 0x3fff || src_y > 0x3fff || src_bits >= end\n || src_bits + src_x\n + (src_y + s->regs.dst_height) * src_stride >= end) {\n@@ -125,34 +127,32 @@ void ati_2d_blt(ATIVGAState *s)\n return;\n }\n \n- src_stride /= sizeof(uint32_t);\n- dst_stride /= sizeof(uint32_t);\n DPRINTF(\"pixman_blt(%p, %p, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d)\\n\",\n- src_bits, dst_bits, src_stride, dst_stride, bpp, bpp,\n- src_x, src_y, dst_x, dst_y,\n+ src_bits, dst_bits, src_stride_words, dst_stride_words,\n+ bpp, bpp, src_x, src_y, dst_x, dst_y,\n s->regs.dst_width, s->regs.dst_height);\n #ifdef CONFIG_PIXMAN\n if ((s->use_pixman & BIT(1)) &&\n s->regs.dp_cntl & DST_X_LEFT_TO_RIGHT &&\n s->regs.dp_cntl & DST_Y_TOP_TO_BOTTOM) {\n fallback = !pixman_blt((uint32_t *)src_bits, (uint32_t *)dst_bits,\n- src_stride, dst_stride, bpp, bpp,\n+ src_stride_words, dst_stride_words, bpp, bpp,\n src_x, src_y, dst_x, dst_y,\n s->regs.dst_width, s->regs.dst_height);\n } else if (s->use_pixman & BIT(1)) {\n /* FIXME: We only really need a temporary if src and dst overlap */\n int llb = s->regs.dst_width * (bpp / 8);\n- int tmp_stride = DIV_ROUND_UP(llb, sizeof(uint32_t));\n- uint32_t *tmp = g_malloc(tmp_stride * sizeof(uint32_t) *\n+ int tmp_stride_words = DIV_ROUND_UP(llb, sizeof(uint32_t));\n+ uint32_t *tmp = g_malloc(tmp_stride_words * sizeof(uint32_t) *\n s->regs.dst_height);\n fallback = !pixman_blt((uint32_t *)src_bits, tmp,\n- src_stride, tmp_stride, bpp, bpp,\n+ src_stride_words, tmp_stride_words, bpp, bpp,\n src_x, src_y, 0, 0,\n s->regs.dst_width, s->regs.dst_height);\n if (!fallback) {\n fallback = !pixman_blt(tmp, (uint32_t *)dst_bits,\n- tmp_stride, dst_stride, bpp, bpp,\n- 0, 0, dst_x, dst_y,\n+ tmp_stride_words, dst_stride_words,\n+ bpp, bpp, 0, 0, dst_x, dst_y,\n s->regs.dst_width, s->regs.dst_height);\n }\n g_free(tmp);\n@@ -163,18 +163,15 @@ void ati_2d_blt(ATIVGAState *s)\n }\n if (fallback) {\n unsigned int y, i, j, bypp = bpp / 8;\n- unsigned int src_pitch = src_stride * sizeof(uint32_t);\n- unsigned int dst_pitch = dst_stride * sizeof(uint32_t);\n-\n for (y = 0; y < s->regs.dst_height; y++) {\n i = dst_x * bypp;\n j = src_x * bypp;\n if (s->regs.dp_cntl & DST_Y_TOP_TO_BOTTOM) {\n- i += (dst_y + y) * dst_pitch;\n- j += (src_y + y) * src_pitch;\n+ i += (dst_y + y) * dst_stride;\n+ j += (src_y + y) * src_stride;\n } else {\n- i += (dst_y + s->regs.dst_height - 1 - y) * dst_pitch;\n- j += (src_y + s->regs.dst_height - 1 - y) * src_pitch;\n+ i += (dst_y + s->regs.dst_height - 1 - y) * dst_stride;\n+ j += (src_y + s->regs.dst_height - 1 - y) * src_stride;\n }\n memmove(&dst_bits[i], &src_bits[j], s->regs.dst_width * bypp);\n }\n@@ -201,21 +198,19 @@ void ati_2d_blt(ATIVGAState *s)\n break;\n }\n \n- dst_stride /= sizeof(uint32_t);\n DPRINTF(\"pixman_fill(%p, %d, %d, %d, %d, %d, %d, %x)\\n\",\n- dst_bits, dst_stride, bpp, dst_x, dst_y,\n+ dst_bits, dst_stride_words, bpp, dst_x, dst_y,\n s->regs.dst_width, s->regs.dst_height, filler);\n #ifdef CONFIG_PIXMAN\n if (!(s->use_pixman & BIT(0)) ||\n- !pixman_fill((uint32_t *)dst_bits, dst_stride, bpp, dst_x, dst_y,\n- s->regs.dst_width, s->regs.dst_height, filler))\n+ !pixman_fill((uint32_t *)dst_bits, dst_stride_words, bpp, dst_x,\n+ dst_y, s->regs.dst_width, s->regs.dst_height, filler))\n #endif\n {\n /* fallback when pixman failed or we don't want to call it */\n unsigned int x, y, i, bypp = bpp / 8;\n- unsigned int dst_pitch = dst_stride * sizeof(uint32_t);\n for (y = 0; y < s->regs.dst_height; y++) {\n- i = dst_x * bypp + (dst_y + y) * dst_pitch;\n+ i = dst_x * bypp + (dst_y + y) * dst_stride;\n for (x = 0; x < s->regs.dst_width; x++, i += bypp) {\n stn_he_p(&dst_bits[i], bypp, filler);\n }\n", "prefixes": [ "v9", "09/18" ] }