From patchwork Mon Feb 10 08:46:42 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Hildenbrand X-Patchwork-Id: 13967479 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id E43F7C02198 for ; Mon, 10 Feb 2025 08:47:25 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1thPRb-0006G6-Tl; Mon, 10 Feb 2025 03:47:07 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1thPRU-0006E0-TM for qemu-devel@nongnu.org; Mon, 10 Feb 2025 03:47:03 -0500 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1thPRT-00045Z-8N for qemu-devel@nongnu.org; Mon, 10 Feb 2025 03:47:00 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1739177218; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=ef1RecRxAPZwDQS2yKvZrhemiPbygCkC67O8bP/q9Zg=; b=FsHHtWH92L8m+XpNxkh8p3DdC5/UzPXk3rlZHfFth/vFkvtRSTp2o20khdTePp/kZAv6GU Adk36zd6N63hGmh6JH84FTrMtqWUzTzI1vrHsFJXt+Kt4ULk6eTwY7Nnb8NwmowJwgbq2+ 99uqDJhfBxyoMWeBzdqQqfRKbkiNlcs= Received: from mail-wr1-f70.google.com (mail-wr1-f70.google.com [209.85.221.70]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-288-QHAAzfXfNI2lPQCzDcDmCQ-1; Mon, 10 Feb 2025 03:46:56 -0500 X-MC-Unique: QHAAzfXfNI2lPQCzDcDmCQ-1 X-Mimecast-MFC-AGG-ID: QHAAzfXfNI2lPQCzDcDmCQ Received: by mail-wr1-f70.google.com with SMTP id ffacd0b85a97d-38dd91cd38cso702850f8f.3 for ; Mon, 10 Feb 2025 00:46:56 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739177215; x=1739782015; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ef1RecRxAPZwDQS2yKvZrhemiPbygCkC67O8bP/q9Zg=; b=gz5PcncQ0rHVShNSqTf7X/cI/mpzsS8KQ47uH9KAf35J2m/UzNobOq3Kef2BovHbL3 2N7ADsDsCEXg1dazBrUDGa63jjzUgSkkVvauuAj1qmhqTjihb4EpUtDS1RXg1syC5rrY Gdze8xqITyvkTiSVshsemERESdOsACmun/5qEDnwSI0dzqWo58MVLrsGYdtI4Uh3jkio S3h9uEIVYpgRdvO8q7iIZlbq98fccqCbaPWlvLvbSbMLzitCSr88ECpEoPoFj75oLFug 6dgn6cplSHfttAgku0NGm5yoKaanvSOCe0ObrGEzQSWw/Npw9FT+Y4iAsn8AgwSZBGqY Todw== X-Gm-Message-State: AOJu0Yxgp4SzdXITD9XvmdUJzIG6fNf96itexeHy5ZSLvN1S0gexPFWj N2BgusRTQTS4Tbl+DfcqXSoXkrYa1Yys/sS0CLaPC92yCIefQHnVKXcWnxx/bZk5bjcGbWi8yQ/ ecEt4h9taShfUJ92ChNd+DBY9jabPCRhSIIEJMokg8I7PnNSagGA2iSm07fT6HI1A3hRU+w1d3B eA/EXejfoC9VKG7UqZY4W9KcNjZ56pfxZ4 X-Gm-Gg: ASbGncvMXyyFvQ+MLSoT0IbdjSEbyeYIgP6fbK5MEpsDvzaz/Kv3owBuYYZ/viQ/pEe oumb9eNL9UWL+hNCnKjSmhupm4AQiuu16MFQAoZbWteV2YmVJqNGWXxqslYbWlqak8oxTk2yBf5 UBJHLdpY3+EQPJGOq36iFGn+XtkPhhTGc20rpFEstfyO5RyKBTt74JiHvFwJUJUvUzcitU4iVlP ZQIA8VrRl676lLT8MAa84YFP6AqGW9o+ic0cr/BqMyCmeNhlxMPPf2tOAn7tx9V+tAkPjoH78AW 8Q/zDSGWZzbcor8H+nvCqceFU04AzgJIzdS8aRMgkHkM8NOiCRFJ4VkoyXZ8UbJMTQ== X-Received: by 2002:a5d:59ab:0:b0:385:fd07:8616 with SMTP id ffacd0b85a97d-38dc891ff80mr9299563f8f.0.1739177215458; Mon, 10 Feb 2025 00:46:55 -0800 (PST) X-Google-Smtp-Source: AGHT+IH1ciQeMz1l11TsPg1Lr+XwpjVAysO8rL1opUL1Sd34fSwKdOdq8dLAdW11YNpSfvEBNXHUZA== X-Received: by 2002:a5d:59ab:0:b0:385:fd07:8616 with SMTP id ffacd0b85a97d-38dc891ff80mr9299525f8f.0.1739177214986; Mon, 10 Feb 2025 00:46:54 -0800 (PST) Received: from localhost (p200300cbc734b80012c465cd348aaee6.dip0.t-ipconnect.de. [2003:cb:c734:b800:12c4:65cd:348a:aee6]) by smtp.gmail.com with UTF8SMTPSA id ffacd0b85a97d-38dd6080926sm5625957f8f.83.2025.02.10.00.46.52 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 10 Feb 2025 00:46:53 -0800 (PST) From: David Hildenbrand To: qemu-devel@nongnu.org Cc: David Hildenbrand , Paolo Bonzini , Peter Xu , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Peter Maydell , =?utf-8?q?Alex_Benn=C3=A9e?= , Alex Williamson , Eduardo Habkost , Marcel Apfelbaum , Elena Ufimtseva , Jagannathan Raman , "Dr. David Alan Gilbert" , Stefan Zabka Subject: [PATCH v3 1/7] physmem: factor out memory_region_is_ram_device() check in memory_access_is_direct() Date: Mon, 10 Feb 2025 09:46:42 +0100 Message-ID: <20250210084648.33798-2-david@redhat.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250210084648.33798-1-david@redhat.com> References: <20250210084648.33798-1-david@redhat.com> MIME-Version: 1.0 Received-SPF: pass client-ip=170.10.133.124; envelope-from=dhildenb@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -34 X-Spam_score: -3.5 X-Spam_bar: --- X-Spam_report: (-3.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1.405, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.01, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org As documented in commit 4a2e242bbb306 ("memory: Don't use memcpy for ram_device regions"), we disallow direct access to RAM DEVICE regions. Let's make this clearer to prepare for further changes. Note that romd regions will never be RAM DEVICE at the same time. Reviewed-by: Peter Xu Signed-off-by: David Hildenbrand --- include/exec/memory.h | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/include/exec/memory.h b/include/exec/memory.h index 9f73b59867..5cd7574c60 100644 --- a/include/exec/memory.h +++ b/include/exec/memory.h @@ -2997,12 +2997,19 @@ bool prepare_mmio_access(MemoryRegion *mr); static inline bool memory_access_is_direct(MemoryRegion *mr, bool is_write) { + /* + * RAM DEVICE regions can be accessed directly using memcpy, but it might + * be MMIO and access using mempy can be wrong (e.g., using instructions not + * intended for MMIO access). So we treat this as IO. + */ + if (memory_region_is_ram_device(mr)) { + return false; + } if (is_write) { return memory_region_is_ram(mr) && !mr->readonly && - !mr->rom_device && !memory_region_is_ram_device(mr); + !mr->rom_device; } else { - return (memory_region_is_ram(mr) && !memory_region_is_ram_device(mr)) || - memory_region_is_romd(mr); + return memory_region_is_ram(mr) || memory_region_is_romd(mr); } } From patchwork Mon Feb 10 08:46:43 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Hildenbrand X-Patchwork-Id: 13967481 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 02C1BC02198 for ; Mon, 10 Feb 2025 08:47:45 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1thPRj-0006Hb-Pc; Mon, 10 Feb 2025 03:47:17 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1thPRY-0006F9-1K for qemu-devel@nongnu.org; Mon, 10 Feb 2025 03:47:04 -0500 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1thPRW-00045u-HA for qemu-devel@nongnu.org; Mon, 10 Feb 2025 03:47:03 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1739177221; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=xTOvCrN4mZxccS1AJtceqMgg7d6ocLtBCsm8pA3bnfA=; b=cqc6/kO9x4IRHL9qOp5yQs++bJWcDpwXEbsb1JEkM0IU4ENSo8jUpuNr6D40l+/6rRBDNo nWobPWaZ5kAoPhb8T4BsuRSdZpKYGY+ssOzmnGGrgw0s/koQ4OMw44rWfVpXLVE3zNhDj+ S/m5qKPijI5PrfSndGSDb1r6MDFFx58= Received: from mail-wm1-f71.google.com (mail-wm1-f71.google.com [209.85.128.71]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-592-AvxX1k65MnKje5Jw5LPSYg-1; Mon, 10 Feb 2025 03:46:59 -0500 X-MC-Unique: AvxX1k65MnKje5Jw5LPSYg-1 X-Mimecast-MFC-AGG-ID: AvxX1k65MnKje5Jw5LPSYg Received: by mail-wm1-f71.google.com with SMTP id 5b1f17b1804b1-43626224274so24146725e9.0 for ; Mon, 10 Feb 2025 00:46:59 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739177218; x=1739782018; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=xTOvCrN4mZxccS1AJtceqMgg7d6ocLtBCsm8pA3bnfA=; b=FUr7zneDURqg29YHZ/FHDQfNDuTEtLs/OFEJfrJBp29AqUbPDhH5zlvObnV5S3dF1F gv8Bh+E9ttI2+881zn/wij8zjxFqOnwq4Vz9QUVlHILTnhu50Ru75UQ9ixJmeUTvjFnf EgAK9nPV4EMq0Ayh9ZfK+dZ0U3Koqw3HPbq8vjcoikI6FhqYxODDR6sDUwqvLi1UWRfq saIgbqtUfQ7BpVGKC83/ngq7IlISAv4iTWPIL4x8qHb37+08HkoqVqI2XufeyMKe+wC0 8zGeVyBSBukL6znGCOAoEwWief9FlF6ZIJN5LNlz66yg4Zs6L2e6WhPwKAtfYszUeWzF N2Gw== X-Gm-Message-State: AOJu0YyP8zVAvv8vpbU+3CNg4wKjxyQh5inZj+a/NfJ7dO1D1UWN9r8z joi4i5GYFAvHpHn+41+Umuh9ssSdnsDwU/YjHdWf2vUnmqJabiPXGIJVYYG5HyVzEEXKVXabDh/ cUzatdr5iNweiIBHL4FL6BJB+JPYWkpIeVlVpS50JBkOGx+czF3OCtgbjYEk0E7Ffgwxdqsy/B0 eOCJ9O4RU/OGUrIjSITfYeMxCIz9Kwn7qL X-Gm-Gg: ASbGncsYDyCgTxEuyzUrHq31ts+lu945t5mSlG5b3kWt6iu7Pzp82ySce86QhWJHNwV xubpdhle8hHWQbtl1wq/EKfj8t6rbhK7gSX26r/nUppyccIx1TNIgIB4SmzOJGuwh6c/L8RtA2n ku0TpUBdUNTQ8BJXNHOlYpTsH5BZZHZzb2Z5Vv3MqVg++N/+TxcacofDjGc9SWyhm1on8ZwpEWB 0HHGY22o5FSahxdjHDOWTmbSOALal8PODdGx+2C7mJkXVKs1HBru2zfbenziXorVbMDj/5fVWu7 mteVF8tfYmTpsbkLKGMaXSo99FYND9vl9DXWnZQSHKO4wi+PCpJkNvqoerLAKO9UKw== X-Received: by 2002:a05:600c:5105:b0:439:386e:9859 with SMTP id 5b1f17b1804b1-439386e98d1mr51120625e9.4.1739177218686; Mon, 10 Feb 2025 00:46:58 -0800 (PST) X-Google-Smtp-Source: AGHT+IFPjDiL5pZBi9owqpm+TapF2OF2MjbbZOLDJ+wjvZztM7NQQaKqaaMRpgxCR1zkkKMTKOL0Cw== X-Received: by 2002:a05:600c:5105:b0:439:386e:9859 with SMTP id 5b1f17b1804b1-439386e98d1mr51120265e9.4.1739177218222; Mon, 10 Feb 2025 00:46:58 -0800 (PST) Received: from localhost (p200300cbc734b80012c465cd348aaee6.dip0.t-ipconnect.de. [2003:cb:c734:b800:12c4:65cd:348a:aee6]) by smtp.gmail.com with UTF8SMTPSA id 5b1f17b1804b1-4391da964e2sm140093095e9.4.2025.02.10.00.46.55 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 10 Feb 2025 00:46:57 -0800 (PST) From: David Hildenbrand To: qemu-devel@nongnu.org Cc: David Hildenbrand , Paolo Bonzini , Peter Xu , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Peter Maydell , =?utf-8?q?Alex_Benn=C3=A9e?= , Alex Williamson , Eduardo Habkost , Marcel Apfelbaum , Elena Ufimtseva , Jagannathan Raman , "Dr. David Alan Gilbert" , Stefan Zabka Subject: [PATCH v3 2/7] physmem: factor out RAM/ROMD check in memory_access_is_direct() Date: Mon, 10 Feb 2025 09:46:43 +0100 Message-ID: <20250210084648.33798-3-david@redhat.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250210084648.33798-1-david@redhat.com> References: <20250210084648.33798-1-david@redhat.com> MIME-Version: 1.0 Received-SPF: pass client-ip=170.10.133.124; envelope-from=dhildenb@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -34 X-Spam_score: -3.5 X-Spam_bar: --- X-Spam_report: (-3.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1.405, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.01, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Let's factor more of the generic "is this directly accessible" check, independent of the "write" condition out. Note that the "!mr->rom_device" check in the write case essentially disallows the memory_region_is_romd() condition again. Further note that RAM DEVICE regions are also RAM regions, so we can check for RAM+ROMD first. This is a preparation for further changes. Reviewed-by: Peter Xu Signed-off-by: David Hildenbrand --- include/exec/memory.h | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/include/exec/memory.h b/include/exec/memory.h index 5cd7574c60..cb35c38402 100644 --- a/include/exec/memory.h +++ b/include/exec/memory.h @@ -2997,6 +2997,10 @@ bool prepare_mmio_access(MemoryRegion *mr); static inline bool memory_access_is_direct(MemoryRegion *mr, bool is_write) { + /* ROM DEVICE regions only allow direct access if in ROMD mode. */ + if (!memory_region_is_ram(mr) && !memory_region_is_romd(mr)) { + return false; + } /* * RAM DEVICE regions can be accessed directly using memcpy, but it might * be MMIO and access using mempy can be wrong (e.g., using instructions not @@ -3006,11 +3010,9 @@ static inline bool memory_access_is_direct(MemoryRegion *mr, bool is_write) return false; } if (is_write) { - return memory_region_is_ram(mr) && !mr->readonly && - !mr->rom_device; - } else { - return memory_region_is_ram(mr) || memory_region_is_romd(mr); + return !mr->readonly && !mr->rom_device; } + return true; } /** From patchwork Mon Feb 10 08:46:44 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Hildenbrand X-Patchwork-Id: 13967480 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id B1617C02198 for ; Mon, 10 Feb 2025 08:47:40 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1thPS3-0006mT-TS; Mon, 10 Feb 2025 03:47:35 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1thPRa-0006FR-5W for qemu-devel@nongnu.org; Mon, 10 Feb 2025 03:47:06 -0500 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1thPRY-000463-Lm for qemu-devel@nongnu.org; Mon, 10 Feb 2025 03:47:05 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1739177223; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=LQ0MnOK6J5ZbAzCKF9M2npVZxNDGBf3t+YvQ1I+4pxw=; b=ao+mf3UkEzbFIytoaVbkEMHSMZEyTQbrEvcme5ExogSLq5GFXR1Q1TnOG68Gz8nx6xETxw iVSuTTaIhBjEOmqWmBUWysMLBmL89aAE33YJZ2CCaAmaGB6tE9dwU4960SoPWCJemfC3hN +C7TxwDeDnk60xae89TyInmt2/FU9VY= Received: from mail-wr1-f72.google.com (mail-wr1-f72.google.com [209.85.221.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-479-R-vXS_8ANPehTpXlYoclaQ-1; Mon, 10 Feb 2025 03:47:02 -0500 X-MC-Unique: R-vXS_8ANPehTpXlYoclaQ-1 X-Mimecast-MFC-AGG-ID: R-vXS_8ANPehTpXlYoclaQ Received: by mail-wr1-f72.google.com with SMTP id ffacd0b85a97d-38dc88ed7caso1682617f8f.0 for ; Mon, 10 Feb 2025 00:47:02 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739177221; x=1739782021; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=LQ0MnOK6J5ZbAzCKF9M2npVZxNDGBf3t+YvQ1I+4pxw=; b=nk2esi3F3p41CITANzB7Xiy2+v2Kl5omWiECeTXP3y6IiXjdHnxroSAsSlQRcIhtwG ZFmEgw9avGr+a3QFM+/phX5jLvuReoi9HlysKbPRNkhUazYPuJGLDK+iqDk9vgZJGayx gxi2yoKwH/WDhTjABvrwbzPVVsIwbwJC/+nCLdUXez4XU8sfGNhkyu1QlU74kKr81zY/ KmcqMD4pwvy0XPT7cIFnkJfIq2G9q3w9qnSgoC9Wplv5TNhzF2Der40UKd+Upzn+4aq4 g9hTq7P+F+aQbzcVzfri2YgZiyHSGxII5pXfFNpwGLelYeDP4KV+S09DBM5lHyCZMLES qKMg== X-Gm-Message-State: AOJu0YyB0bWzSUZcq4C6G3vol7kCbD9HpvVZnVhB0xq3QjEqJsQuJue7 Q7fRn11iCu7CizfM4QCxLEatm6D3hxUJX+AgvkWP2FAlFRZ5Xo3kGdVv1Rzt5iS+RxGeCQurH/3 gIV6Pix3t50SENe4e0qrVlmDf9Ia7Y6uJGmrwaXMEGO3VqGn5cX8mVG2HkshHtBa/iqlGP6OkDa TOZvJ6Z1nMyOgbqECkt37GVbMxXpIj+dOC X-Gm-Gg: ASbGncuGCjE43/9NxPw2wlpoSfX0ZyQJPLuAT26zWtxDvIi3ok3JFFxTWc7V3VrpUyj rI1F7gNpO8wShmRCIZLZvmyDB9ApvqNx7YDYtcZf5mW3PdS4sjYeJaKKMIiZUJPS9cTF7xuTbLU LuP8dyN/hDt0Lo+CiSbEaS1PsKa6BQZtWsM8XgtfoP/ClL6xgko05+qNtKJE8nPnbmy3S5NWSaT udMzPFOOx74kQLXbnRCzZKa2pyoBnuIn2ygAAewhkmgLX0Kyh+dc0y+idwXc3b4tXsc7t7CeLjS RQbdSCuuOHno1vO/odVLKQCUrruoGM4m47W9VRlG3O+rWo8W9vqHms2AJ1xZeSc7XA== X-Received: by 2002:a05:6000:402b:b0:385:fa26:f0d9 with SMTP id ffacd0b85a97d-38dc89171f9mr8997774f8f.0.1739177221143; Mon, 10 Feb 2025 00:47:01 -0800 (PST) X-Google-Smtp-Source: AGHT+IEj24jp8vFAi9fkmfq+B8t3F/keE4RoVAcDIib9pUwgs828Kh+Xu8VCxsS74eYzU4OsxjUygw== X-Received: by 2002:a05:6000:402b:b0:385:fa26:f0d9 with SMTP id ffacd0b85a97d-38dc89171f9mr8997741f8f.0.1739177220687; Mon, 10 Feb 2025 00:47:00 -0800 (PST) Received: from localhost (p200300cbc734b80012c465cd348aaee6.dip0.t-ipconnect.de. [2003:cb:c734:b800:12c4:65cd:348a:aee6]) by smtp.gmail.com with UTF8SMTPSA id ffacd0b85a97d-38dd3fc7ee5sm6353911f8f.39.2025.02.10.00.46.59 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 10 Feb 2025 00:46:59 -0800 (PST) From: David Hildenbrand To: qemu-devel@nongnu.org Cc: David Hildenbrand , Paolo Bonzini , Peter Xu , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Peter Maydell , =?utf-8?q?Alex_Benn=C3=A9e?= , Alex Williamson , Eduardo Habkost , Marcel Apfelbaum , Elena Ufimtseva , Jagannathan Raman , "Dr. David Alan Gilbert" , Stefan Zabka Subject: [PATCH v3 3/7] physmem: factor out direct access check into memory_region_supports_direct_access() Date: Mon, 10 Feb 2025 09:46:44 +0100 Message-ID: <20250210084648.33798-4-david@redhat.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250210084648.33798-1-david@redhat.com> References: <20250210084648.33798-1-david@redhat.com> MIME-Version: 1.0 Received-SPF: pass client-ip=170.10.129.124; envelope-from=dhildenb@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -44 X-Spam_score: -4.5 X-Spam_bar: ---- X-Spam_report: (-4.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1.405, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=-1, RCVD_IN_MSPIKE_WL=-0.01, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Let's factor the complete "directly accessible" check independent of the "write" condition out so we can reuse it next. We can now split up the checks RAM and ROMD check, so we really only check for RAM DEVICE in case of RAM -- ROM DEVICE is neither RAM not RAM DEVICE. Reviewed-by: Peter Xu Signed-off-by: David Hildenbrand --- include/exec/memory.h | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/include/exec/memory.h b/include/exec/memory.h index cb35c38402..4e2cf95ab6 100644 --- a/include/exec/memory.h +++ b/include/exec/memory.h @@ -2995,10 +2995,13 @@ MemTxResult address_space_write_cached_slow(MemoryRegionCache *cache, int memory_access_size(MemoryRegion *mr, unsigned l, hwaddr addr); bool prepare_mmio_access(MemoryRegion *mr); -static inline bool memory_access_is_direct(MemoryRegion *mr, bool is_write) +static inline bool memory_region_supports_direct_access(MemoryRegion *mr) { /* ROM DEVICE regions only allow direct access if in ROMD mode. */ - if (!memory_region_is_ram(mr) && !memory_region_is_romd(mr)) { + if (memory_region_is_romd(mr)) { + return true; + } + if (!memory_region_is_ram(mr)) { return false; } /* @@ -3006,7 +3009,12 @@ static inline bool memory_access_is_direct(MemoryRegion *mr, bool is_write) * be MMIO and access using mempy can be wrong (e.g., using instructions not * intended for MMIO access). So we treat this as IO. */ - if (memory_region_is_ram_device(mr)) { + return !memory_region_is_ram_device(mr); +} + +static inline bool memory_access_is_direct(MemoryRegion *mr, bool is_write) +{ + if (!memory_region_supports_direct_access(mr)) { return false; } if (is_write) { From patchwork Mon Feb 10 08:46:45 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Hildenbrand X-Patchwork-Id: 13967484 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 8FAD2C02198 for ; Mon, 10 Feb 2025 08:48:22 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1thPRx-0006Xv-If; Mon, 10 Feb 2025 03:47:30 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1thPRe-0006LI-HF for qemu-devel@nongnu.org; Mon, 10 Feb 2025 03:47:13 -0500 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1thPRc-00046M-VG for qemu-devel@nongnu.org; Mon, 10 Feb 2025 03:47:10 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1739177227; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=5xxpfU/c7z9d/6ypMxL4FcLhkOjlzksbtn+mi07kcCo=; b=CTlnk6eVSveaJbCiHRCq6cwdgEpIbDrD9sC4YL4LWUoZbp6Pj/nCGPOh2T8ADs1HPrPIUq ympp/z+uxpqYgKw71Or4flNiZUdZzItQGEFzmm8r81xhBY9dfYNsWaPTSBPvzuqjkwjojH SGPYtyxYvlcsGVijI+0za0Gc9XWQDaQ= Received: from mail-wr1-f69.google.com (mail-wr1-f69.google.com [209.85.221.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-363-67ewBFQPM5ugh1PKxs2NKA-1; Mon, 10 Feb 2025 03:47:05 -0500 X-MC-Unique: 67ewBFQPM5ugh1PKxs2NKA-1 X-Mimecast-MFC-AGG-ID: 67ewBFQPM5ugh1PKxs2NKA Received: by mail-wr1-f69.google.com with SMTP id ffacd0b85a97d-38dcc9653caso596508f8f.2 for ; Mon, 10 Feb 2025 00:47:05 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739177224; x=1739782024; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=5xxpfU/c7z9d/6ypMxL4FcLhkOjlzksbtn+mi07kcCo=; b=uBJSZwYdMh/elLKPGlQ/Pl0o3wzlDhvnk15mM8VJF3u+z0MGzZvncPaCTFIViu2rzg MQLgMCs1Rx6ZN5zkhWIEFBJmGW/m97gO1qF9puinXFlX0dduE7w7gTfmkeVc5+KkjTLe 2RH7kxSja+48PXi4KsSJd6IpUH0RoO+R8dhJbjEVgROmdM5hhKCysT1NWVepFOBRD/eb TdeNPLI+ClCiQryRCJ/ya7FfvossWDadMrXlrWF3SNM0SMBzRORXOGyhY9IRfxq/HLQX eYsjNLxgvONhIRFED8QPYSFNSclXkMFQWxuXu1kWvcUHdDw4L9/nMFrv0fll8LClcqnz umNw== X-Gm-Message-State: AOJu0YycXHVDZWSOeweRImJ1Pxs6+ginkq+wwB+TVL/xqmeeavnB2NPc 0YhHszepso4hXdLjbx57upAJvFTUp9D7SRSkrdBXEOCgFKQfopOqcZLQ/jzdxpOkFZfDE8Aawxo BQJk5QKlbpEerGnsEfM0IAjRaqff74bTZV1Ji3AEJ7XuyoAouPqo4H9KCn7zuZ1jgHgE0d3VPJC 2u9kWoNxqFdOU7RGCjnzAuIxr3Vp5km6+3 X-Gm-Gg: ASbGncvbRaVikp//0RPKW1b2ptJ0XQcvLtsV9WyzvXbUhCwx4vCu/0mdRuYm5aUxJNV NqARDCshVxdC7p2zgRC98vUPlUnM7KgwR3zvQ4RFfr1YvY6AZ9QxRKJ+7TsJ3FRqLkREylkd8Oc Ksro9jQOcSj/TBefkRHc0nlAaXriZnsNwgqPZAY2olLaz4yrPwpoebIUpVwau3BJ1PiwAVfdIQ8 gOjX/xxXcw1nV2jiPKSHg9X5UgqOgIPiC9vBT0O31ynsh67qk5kfnYKP8EmCuuFS6ByH2alb6Ve fVyEJvdwaZbr8AulrbEGGSSE5Nhc23pwLGG+zZS/Osy4qFZ1hVyLdnev9serahRGYA== X-Received: by 2002:a5d:4748:0:b0:38a:615b:9ec0 with SMTP id ffacd0b85a97d-38dc935a897mr7523369f8f.54.1739177224238; Mon, 10 Feb 2025 00:47:04 -0800 (PST) X-Google-Smtp-Source: AGHT+IFgOB7xEm1V5wNJQ3Zv93firtiq/tsaQHHEcpJeSZ2euPV1wlrR7d0KF7QhxhddxrvwuMA3eg== X-Received: by 2002:a5d:4748:0:b0:38a:615b:9ec0 with SMTP id ffacd0b85a97d-38dc935a897mr7523332f8f.54.1739177223801; Mon, 10 Feb 2025 00:47:03 -0800 (PST) Received: from localhost (p200300cbc734b80012c465cd348aaee6.dip0.t-ipconnect.de. [2003:cb:c734:b800:12c4:65cd:348a:aee6]) by smtp.gmail.com with UTF8SMTPSA id ffacd0b85a97d-38dc5c8c37esm9933599f8f.2.2025.02.10.00.47.01 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 10 Feb 2025 00:47:02 -0800 (PST) From: David Hildenbrand To: qemu-devel@nongnu.org Cc: David Hildenbrand , Paolo Bonzini , Peter Xu , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Peter Maydell , =?utf-8?q?Alex_Benn=C3=A9e?= , Alex Williamson , Eduardo Habkost , Marcel Apfelbaum , Elena Ufimtseva , Jagannathan Raman , "Dr. David Alan Gilbert" , Stefan Zabka Subject: [PATCH v3 4/7] physmem: disallow direct access to RAM DEVICE in address_space_write_rom() Date: Mon, 10 Feb 2025 09:46:45 +0100 Message-ID: <20250210084648.33798-5-david@redhat.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250210084648.33798-1-david@redhat.com> References: <20250210084648.33798-1-david@redhat.com> MIME-Version: 1.0 Received-SPF: pass client-ip=170.10.129.124; envelope-from=dhildenb@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -44 X-Spam_score: -4.5 X-Spam_bar: ---- X-Spam_report: (-4.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1.405, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=-1, RCVD_IN_MSPIKE_WL=-0.01, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org As documented in commit 4a2e242bbb306 ("memory: Don't use memcpy for ram_device regions"), we disallow direct access to RAM DEVICE regions. This change implies that address_space_write_rom() and cpu_memory_rw_debug() won't be able to write to RAM DEVICE regions. It will also affect cpu_flush_icache_range(), but it's only used by hw/core/loader.c after writing to ROM, so it is expected to not apply here with RAM DEVICE. This fixes direct access to these regions where we don't want direct access. We'll extend cpu_memory_rw_debug() next to also be able to write to these (and IO) regions. This is a preparation for further changes. Cc: Alex Williamson Reviewed-by: Peter Xu Signed-off-by: David Hildenbrand --- system/physmem.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/system/physmem.c b/system/physmem.c index 67c9db9daa..7cfcc6cafa 100644 --- a/system/physmem.c +++ b/system/physmem.c @@ -3137,8 +3137,7 @@ static inline MemTxResult address_space_write_rom_internal(AddressSpace *as, l = len; mr = address_space_translate(as, addr, &addr1, &l, true, attrs); - if (!(memory_region_is_ram(mr) || - memory_region_is_romd(mr))) { + if (!memory_region_supports_direct_access(mr)) { l = memory_access_size(mr, l, addr1); } else { /* ROM/RAM case */ From patchwork Mon Feb 10 08:46:46 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: David Hildenbrand X-Patchwork-Id: 13967482 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id E2905C0219D for ; Mon, 10 Feb 2025 08:47:56 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1thPS4-0006w2-Pa; Mon, 10 Feb 2025 03:47:36 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1thPRh-0006LZ-1J for qemu-devel@nongnu.org; Mon, 10 Feb 2025 03:47:14 -0500 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1thPRe-00046T-UM for qemu-devel@nongnu.org; Mon, 10 Feb 2025 03:47:12 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1739177229; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=seVdatnc3fgAG3CaO7ikg8bHeVCEogup7eSy/wrd7Ng=; b=BXrpfZDg7ZyC3BsJS0GH6Qkw7/h8wDoCZuLPQOagLuiH8Tsw+q3JCGBBU3cmo0TrHHdAoE CHaBOhWYyeBVYytKmnEOpCM1PIVMMsRcDvkzBsFBKwgkvW7YhVpsg13mPtfTkRvZfgEMN/ t91fM8wVWqsS2/HehlAKwEg8G++jj+I= Received: from mail-wr1-f72.google.com (mail-wr1-f72.google.com [209.85.221.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-30-9UyV-bUjOAyLzMhiV2nImg-1; Mon, 10 Feb 2025 03:47:08 -0500 X-MC-Unique: 9UyV-bUjOAyLzMhiV2nImg-1 X-Mimecast-MFC-AGG-ID: 9UyV-bUjOAyLzMhiV2nImg Received: by mail-wr1-f72.google.com with SMTP id ffacd0b85a97d-38dcd8ddc5eso1711863f8f.3 for ; Mon, 10 Feb 2025 00:47:08 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739177227; x=1739782027; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=seVdatnc3fgAG3CaO7ikg8bHeVCEogup7eSy/wrd7Ng=; b=GFIGp7eZ+DLMgrEsJdupyjFoPVb7buUYDO90/ES8wE9MxROtB7I9ifODhD6DtRSD2R 4m7YuR7ywS1X6/RgIhB7gOTn9Q55pv8xjdSvhhcaI9BNOW1vfH5cV28AdUdk51h7h0OM neCpBY2CHEu452ne0C1Jm0dvGPZqx3S2BVu/GAjDAAjxbZXFm9uInzx8aheCfBE0S/Qt Qofllx4w5/pOoBT9pbQ9netwNYsOGIUuT+PuJcw68BKEw7rtr/YPzOnQwBWJQDc0dwK8 C8XdrHP5NFa4XKIpFEW0JjWt90LNiqAO+rLaepNXN7K5WUcnW0OyMKrP6OjJEpunyvcs NNSw== X-Gm-Message-State: AOJu0Yx1reoaP7LLeGlE4mJXl+2KAmOh1cMVTsZTynWp7HijmM6jFubI cwVi7LORpaC7PztqL2vng2ASTku7V/UXDam4r+kqI31CGWlx6JqWSzPCEO5bmoiMEi4TsjAFEmG stAOkM71Dmr31YqQEMFhVOuh1arck8l1aJOqBHlOcqcPChY8iZB81wbvVlK6r6jpr9in68lzLPO x2NptSthLUdhVhlzE2tY9T6U/+w3xasmw0 X-Gm-Gg: ASbGnct9yDq8oQ/8oFOyUVLrQeAhtyzG20SmfYfcNFxvDg+PFuWS3VUmf3LY1rlz3Cj fR28uziRF/YZkOFsiXD+HA0/VY+HazrvSkw22GsCRpQBL0uMkk8CldJh1L1w22xKhnPJjzLnlA6 fhSJvlVxpneRLzcGOqqvP9BIvFZcTK4SbUX4O8iBQX1p8dDUmyOR7wbhad68GYtWCI7jh6cFx8d yy6bSkbzCAe3fB4xaavtB1VbhbKfpZZzG/KEilPzxwHwn5MnnKL6RkRgs4iuvXnLXp1lSglGeFb f7d8OTzP2GJqeC8+O/yrugT81kcGHIyXGIpx22YeTo+mMDvnzUSG2yOoXsSOSUiCyw== X-Received: by 2002:a05:6000:1fab:b0:38d:deb4:4ee8 with SMTP id ffacd0b85a97d-38ddeb453b0mr2496659f8f.28.1739177227338; Mon, 10 Feb 2025 00:47:07 -0800 (PST) X-Google-Smtp-Source: AGHT+IEvjaJjZSDcMP+j5oeEvAv7tB7Wuv3EmgtCRLgGWIT6Qc1hxoudvQYFZRHeZwKLI45oSRPLhQ== X-Received: by 2002:a05:6000:1fab:b0:38d:deb4:4ee8 with SMTP id ffacd0b85a97d-38ddeb453b0mr2496619f8f.28.1739177226837; Mon, 10 Feb 2025 00:47:06 -0800 (PST) Received: from localhost (p200300cbc734b80012c465cd348aaee6.dip0.t-ipconnect.de. [2003:cb:c734:b800:12c4:65cd:348a:aee6]) by smtp.gmail.com with UTF8SMTPSA id ffacd0b85a97d-38dcb781bdcsm8582700f8f.23.2025.02.10.00.47.04 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 10 Feb 2025 00:47:05 -0800 (PST) From: David Hildenbrand To: qemu-devel@nongnu.org Cc: David Hildenbrand , Paolo Bonzini , Peter Xu , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Peter Maydell , =?utf-8?q?Alex_Benn=C3=A9e?= , Alex Williamson , Eduardo Habkost , Marcel Apfelbaum , Elena Ufimtseva , Jagannathan Raman , "Dr. David Alan Gilbert" , Stefan Zabka Subject: [PATCH v3 5/7] memory: pass MemTxAttrs to memory_access_is_direct() Date: Mon, 10 Feb 2025 09:46:46 +0100 Message-ID: <20250210084648.33798-6-david@redhat.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250210084648.33798-1-david@redhat.com> References: <20250210084648.33798-1-david@redhat.com> MIME-Version: 1.0 Received-SPF: pass client-ip=170.10.133.124; envelope-from=dhildenb@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -34 X-Spam_score: -3.5 X-Spam_bar: --- X-Spam_report: (-3.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1.405, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.01, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org We want to pass another flag that will be stored in MemTxAttrs. So pass MemTxAttrs directly. Reviewed-by: Peter Xu Reviewed-by: Philippe Mathieu-Daudé Signed-off-by: David Hildenbrand --- hw/core/loader.c | 2 +- hw/remote/vfio-user-obj.c | 2 +- include/exec/memory.h | 5 +++-- system/memory_ldst.c.inc | 18 +++++++++--------- system/physmem.c | 12 ++++++------ 5 files changed, 20 insertions(+), 19 deletions(-) diff --git a/hw/core/loader.c b/hw/core/loader.c index fd25c5e01b..332b879a0b 100644 --- a/hw/core/loader.c +++ b/hw/core/loader.c @@ -144,7 +144,7 @@ ssize_t load_image_mr(const char *filename, MemoryRegion *mr) { ssize_t size; - if (!memory_access_is_direct(mr, false)) { + if (!memory_access_is_direct(mr, false, MEMTXATTRS_UNSPECIFIED)) { /* Can only load an image into RAM or ROM */ return -1; } diff --git a/hw/remote/vfio-user-obj.c b/hw/remote/vfio-user-obj.c index 9e5ff6d87a..6e51a92856 100644 --- a/hw/remote/vfio-user-obj.c +++ b/hw/remote/vfio-user-obj.c @@ -358,7 +358,7 @@ static int vfu_object_mr_rw(MemoryRegion *mr, uint8_t *buf, hwaddr offset, int access_size; uint64_t val; - if (memory_access_is_direct(mr, is_write)) { + if (memory_access_is_direct(mr, is_write, MEMTXATTRS_UNSPECIFIED)) { /** * Some devices expose a PCI expansion ROM, which could be buffer * based as compared to other regions which are primarily based on diff --git a/include/exec/memory.h b/include/exec/memory.h index 4e2cf95ab6..b18ecf933e 100644 --- a/include/exec/memory.h +++ b/include/exec/memory.h @@ -3012,7 +3012,8 @@ static inline bool memory_region_supports_direct_access(MemoryRegion *mr) return !memory_region_is_ram_device(mr); } -static inline bool memory_access_is_direct(MemoryRegion *mr, bool is_write) +static inline bool memory_access_is_direct(MemoryRegion *mr, bool is_write, + MemTxAttrs attrs) { if (!memory_region_supports_direct_access(mr)) { return false; @@ -3053,7 +3054,7 @@ MemTxResult address_space_read(AddressSpace *as, hwaddr addr, fv = address_space_to_flatview(as); l = len; mr = flatview_translate(fv, addr, &addr1, &l, false, attrs); - if (len == l && memory_access_is_direct(mr, false)) { + if (len == l && memory_access_is_direct(mr, false, attrs)) { ptr = qemu_map_ram_ptr(mr->ram_block, addr1); memcpy(buf, ptr, len); } else { diff --git a/system/memory_ldst.c.inc b/system/memory_ldst.c.inc index 0e6f3940a9..7f32d3d9ff 100644 --- a/system/memory_ldst.c.inc +++ b/system/memory_ldst.c.inc @@ -34,7 +34,7 @@ static inline uint32_t glue(address_space_ldl_internal, SUFFIX)(ARG1_DECL, RCU_READ_LOCK(); mr = TRANSLATE(addr, &addr1, &l, false, attrs); - if (l < 4 || !memory_access_is_direct(mr, false)) { + if (l < 4 || !memory_access_is_direct(mr, false, attrs)) { release_lock |= prepare_mmio_access(mr); /* I/O case */ @@ -103,7 +103,7 @@ static inline uint64_t glue(address_space_ldq_internal, SUFFIX)(ARG1_DECL, RCU_READ_LOCK(); mr = TRANSLATE(addr, &addr1, &l, false, attrs); - if (l < 8 || !memory_access_is_direct(mr, false)) { + if (l < 8 || !memory_access_is_direct(mr, false, attrs)) { release_lock |= prepare_mmio_access(mr); /* I/O case */ @@ -170,7 +170,7 @@ uint8_t glue(address_space_ldub, SUFFIX)(ARG1_DECL, RCU_READ_LOCK(); mr = TRANSLATE(addr, &addr1, &l, false, attrs); - if (!memory_access_is_direct(mr, false)) { + if (!memory_access_is_direct(mr, false, attrs)) { release_lock |= prepare_mmio_access(mr); /* I/O case */ @@ -207,7 +207,7 @@ static inline uint16_t glue(address_space_lduw_internal, SUFFIX)(ARG1_DECL, RCU_READ_LOCK(); mr = TRANSLATE(addr, &addr1, &l, false, attrs); - if (l < 2 || !memory_access_is_direct(mr, false)) { + if (l < 2 || !memory_access_is_direct(mr, false, attrs)) { release_lock |= prepare_mmio_access(mr); /* I/O case */ @@ -277,7 +277,7 @@ void glue(address_space_stl_notdirty, SUFFIX)(ARG1_DECL, RCU_READ_LOCK(); mr = TRANSLATE(addr, &addr1, &l, true, attrs); - if (l < 4 || !memory_access_is_direct(mr, true)) { + if (l < 4 || !memory_access_is_direct(mr, true, attrs)) { release_lock |= prepare_mmio_access(mr); r = memory_region_dispatch_write(mr, addr1, val, MO_32, attrs); @@ -314,7 +314,7 @@ static inline void glue(address_space_stl_internal, SUFFIX)(ARG1_DECL, RCU_READ_LOCK(); mr = TRANSLATE(addr, &addr1, &l, true, attrs); - if (l < 4 || !memory_access_is_direct(mr, true)) { + if (l < 4 || !memory_access_is_direct(mr, true, attrs)) { release_lock |= prepare_mmio_access(mr); r = memory_region_dispatch_write(mr, addr1, val, MO_32 | devend_memop(endian), attrs); @@ -377,7 +377,7 @@ void glue(address_space_stb, SUFFIX)(ARG1_DECL, RCU_READ_LOCK(); mr = TRANSLATE(addr, &addr1, &l, true, attrs); - if (!memory_access_is_direct(mr, true)) { + if (!memory_access_is_direct(mr, true, attrs)) { release_lock |= prepare_mmio_access(mr); r = memory_region_dispatch_write(mr, addr1, val, MO_8, attrs); } else { @@ -410,7 +410,7 @@ static inline void glue(address_space_stw_internal, SUFFIX)(ARG1_DECL, RCU_READ_LOCK(); mr = TRANSLATE(addr, &addr1, &l, true, attrs); - if (l < 2 || !memory_access_is_direct(mr, true)) { + if (l < 2 || !memory_access_is_direct(mr, true, attrs)) { release_lock |= prepare_mmio_access(mr); r = memory_region_dispatch_write(mr, addr1, val, MO_16 | devend_memop(endian), attrs); @@ -474,7 +474,7 @@ static void glue(address_space_stq_internal, SUFFIX)(ARG1_DECL, RCU_READ_LOCK(); mr = TRANSLATE(addr, &addr1, &l, true, attrs); - if (l < 8 || !memory_access_is_direct(mr, true)) { + if (l < 8 || !memory_access_is_direct(mr, true, attrs)) { release_lock |= prepare_mmio_access(mr); r = memory_region_dispatch_write(mr, addr1, val, MO_64 | devend_memop(endian), attrs); diff --git a/system/physmem.c b/system/physmem.c index 7cfcc6cafa..9766c6d2e0 100644 --- a/system/physmem.c +++ b/system/physmem.c @@ -573,7 +573,7 @@ MemoryRegion *flatview_translate(FlatView *fv, hwaddr addr, hwaddr *xlat, is_write, true, &as, attrs); mr = section.mr; - if (xen_enabled() && memory_access_is_direct(mr, is_write)) { + if (xen_enabled() && memory_access_is_direct(mr, is_write, attrs)) { hwaddr page = ((addr & TARGET_PAGE_MASK) + TARGET_PAGE_SIZE) - addr; *plen = MIN(page, *plen); } @@ -2869,7 +2869,7 @@ static MemTxResult flatview_write_continue_step(MemTxAttrs attrs, return MEMTX_ACCESS_ERROR; } - if (!memory_access_is_direct(mr, true)) { + if (!memory_access_is_direct(mr, true, attrs)) { uint64_t val; MemTxResult result; bool release_lock = prepare_mmio_access(mr); @@ -2965,7 +2965,7 @@ static MemTxResult flatview_read_continue_step(MemTxAttrs attrs, uint8_t *buf, return MEMTX_ACCESS_ERROR; } - if (!memory_access_is_direct(mr, false)) { + if (!memory_access_is_direct(mr, false, attrs)) { /* I/O case */ uint64_t val; MemTxResult result; @@ -3274,7 +3274,7 @@ static bool flatview_access_valid(FlatView *fv, hwaddr addr, hwaddr len, while (len > 0) { l = len; mr = flatview_translate(fv, addr, &xlat, &l, is_write, attrs); - if (!memory_access_is_direct(mr, is_write)) { + if (!memory_access_is_direct(mr, is_write, attrs)) { l = memory_access_size(mr, l, addr); if (!memory_region_access_valid(mr, xlat, l, is_write, attrs)) { return false; @@ -3354,7 +3354,7 @@ void *address_space_map(AddressSpace *as, fv = address_space_to_flatview(as); mr = flatview_translate(fv, addr, &xlat, &l, is_write, attrs); - if (!memory_access_is_direct(mr, is_write)) { + if (!memory_access_is_direct(mr, is_write, attrs)) { size_t used = qatomic_read(&as->bounce_buffer_size); for (;;) { hwaddr alloc = MIN(as->max_bounce_buffer_size - used, l); @@ -3487,7 +3487,7 @@ int64_t address_space_cache_init(MemoryRegionCache *cache, mr = cache->mrs.mr; memory_region_ref(mr); - if (memory_access_is_direct(mr, is_write)) { + if (memory_access_is_direct(mr, is_write, MEMTXATTRS_UNSPECIFIED)) { /* We don't care about the memory attributes here as we're only * doing this if we found actual RAM, which behaves the same * regardless of attributes; so UNSPECIFIED is fine. From patchwork Mon Feb 10 08:46:47 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: David Hildenbrand X-Patchwork-Id: 13967485 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 47980C02198 for ; Mon, 10 Feb 2025 08:48:55 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1thPS6-00077n-F3; Mon, 10 Feb 2025 03:47:38 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1thPRj-0006Ou-NH for qemu-devel@nongnu.org; Mon, 10 Feb 2025 03:47:15 -0500 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1thPRi-000472-BY for qemu-devel@nongnu.org; Mon, 10 Feb 2025 03:47:15 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1739177233; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=QFImN/HdVJsdxlU8bHIXd3zfUtn9U7Os5n4jpooO1h4=; b=L6vgEqWt9suW5et2qRZudO2/EpdSDvQqiFgsMOiHmvOT0JCHx3ZWbrr4VPojdM45BflG2s 6dAoowmrQgfBQaEzKPD2Sd4FNY6JNGPxqp1vUs+K5bokeztmx3udRkAnmqchVyECroLxxs cBLiwFxz2ijvGUupmPrNCLuNI+aSDnQ= Received: from mail-wm1-f72.google.com (mail-wm1-f72.google.com [209.85.128.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-608-tXl5K-DHMKGwoYwjt24K4w-1; Mon, 10 Feb 2025 03:47:11 -0500 X-MC-Unique: tXl5K-DHMKGwoYwjt24K4w-1 X-Mimecast-MFC-AGG-ID: tXl5K-DHMKGwoYwjt24K4w Received: by mail-wm1-f72.google.com with SMTP id 5b1f17b1804b1-43942e82719so5093255e9.2 for ; Mon, 10 Feb 2025 00:47:11 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739177230; x=1739782030; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=QFImN/HdVJsdxlU8bHIXd3zfUtn9U7Os5n4jpooO1h4=; b=wqmjF0wPTxX0uV0ooEHLN/zxThwJWtod4yj9cOtwKiXhnSs7kwvwonDHjVmqCZ0c76 6x7inJ0VlrmDUefYmW4H9aInlrC/QomGw3Y5ouVzOI06k0qciNBI+QlA7A8fh4+TjQIi ntVtNMgmT+UsU2bMtOOztdKHX2HDofXbQ7IT85JjBrYn8+7VoBdFYI9BDCSrKDY+/05n ZXJO/opTPv8MJHNFUQSN+m88L28vco/fllW/I6a7zxKcLWYn9JyE0FU3tRCBTbw2cSX3 1UrGUxDgkJMJGzBy4RFFvzBfMvFZMzLUKHjzqkEKda5GFWCs6Scncq9a1KMU/Pm5QrlY gftg== X-Gm-Message-State: AOJu0YwnSH5uTBEC8GERC2WKf29SgDp5WZLt3LFkqpsoInn2JtsWLTy1 vcHE77StlwvcR9t0t6hw8StZoQARSUzq/EzfPkqsp8XaxsOApi2tA3ALq3VgxUEVQGb8dibUtoo qhxGjd0+1LXzkW+VwJpe91HFRIz4+KlK0AoLhM7O4iXR0/RpXGh9CjwkB/8uBYULDgpj5Nwwmsl b6zBg9VmLuLzCDWMVP9vYaSbcMaIsqd6hY X-Gm-Gg: ASbGncsV7fxmWJGa057fXLDB6NdjIaHlHeILwldgPbvS0pO0a7yROltJ7/p2UFCwv0p 9XB6nkBldIn99nLeAzyMHGbEqbm4pGuJ1MFklRikxOhdzN7XgUSJokYXKa+GKzI9xjNBLxHlWe4 ha8ZLOCOTMPP6/GeUxRx80U9ZQs/0kodKZyc8a0QhfPVvyVf0vhZw1sdjlKYNdZFq/3sqRz2wd8 8JKAK4w6icSSczY9LVnDYQJWoypOqtK8+xC6lmsjCLmHsrH3+1YyxheqjzTS9B9kbI5F/lwFP/e A8H7aSYmg5BPQidhkSll64NIBi3+qa/A4HaAX0+DaAsx3O+raHPOUkDZ06RQRi/O3w== X-Received: by 2002:a05:600c:899:b0:439:3d5c:8bfb with SMTP id 5b1f17b1804b1-4393d5c8d77mr33969245e9.22.1739177230383; Mon, 10 Feb 2025 00:47:10 -0800 (PST) X-Google-Smtp-Source: AGHT+IHp6UWtq7vu5blmjXrPLaNFKPaZZqzIQyhYVtaxoENvz2WoRKjzsgyLFLSoQ2ACPzIa/RpknA== X-Received: by 2002:a05:600c:899:b0:439:3d5c:8bfb with SMTP id 5b1f17b1804b1-4393d5c8d77mr33968965e9.22.1739177229993; Mon, 10 Feb 2025 00:47:09 -0800 (PST) Received: from localhost (p200300cbc734b80012c465cd348aaee6.dip0.t-ipconnect.de. [2003:cb:c734:b800:12c4:65cd:348a:aee6]) by smtp.gmail.com with UTF8SMTPSA id 5b1f17b1804b1-4390daf4480sm173550055e9.27.2025.02.10.00.47.07 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 10 Feb 2025 00:47:08 -0800 (PST) From: David Hildenbrand To: qemu-devel@nongnu.org Cc: David Hildenbrand , Paolo Bonzini , Peter Xu , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Peter Maydell , =?utf-8?q?Alex_Benn=C3=A9e?= , Alex Williamson , Eduardo Habkost , Marcel Apfelbaum , Elena Ufimtseva , Jagannathan Raman , "Dr. David Alan Gilbert" , Stefan Zabka Subject: [PATCH v3 6/7] hmp: use cpu_get_phys_page_debug() in hmp_gva2gpa() Date: Mon, 10 Feb 2025 09:46:47 +0100 Message-ID: <20250210084648.33798-7-david@redhat.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250210084648.33798-1-david@redhat.com> References: <20250210084648.33798-1-david@redhat.com> MIME-Version: 1.0 Received-SPF: pass client-ip=170.10.133.124; envelope-from=dhildenb@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -34 X-Spam_score: -3.5 X-Spam_bar: --- X-Spam_report: (-3.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1.405, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.01, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org We don't need the MemTxAttrs, so let's simply use the simpler function variant. Reviewed-by: Peter Xu Reviewed-by: Philippe Mathieu-Daudé Signed-off-by: David Hildenbrand --- monitor/hmp-cmds-target.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/monitor/hmp-cmds-target.c b/monitor/hmp-cmds-target.c index 0300faa8a2..0d2e9dce69 100644 --- a/monitor/hmp-cmds-target.c +++ b/monitor/hmp-cmds-target.c @@ -301,7 +301,6 @@ void hmp_gpa2hva(Monitor *mon, const QDict *qdict) void hmp_gva2gpa(Monitor *mon, const QDict *qdict) { target_ulong addr = qdict_get_int(qdict, "addr"); - MemTxAttrs attrs; CPUState *cs = mon_get_cpu(mon); hwaddr gpa; @@ -310,7 +309,7 @@ void hmp_gva2gpa(Monitor *mon, const QDict *qdict) return; } - gpa = cpu_get_phys_page_attrs_debug(cs, addr & TARGET_PAGE_MASK, &attrs); + gpa = cpu_get_phys_page_debug(cs, addr & TARGET_PAGE_MASK); if (gpa == -1) { monitor_printf(mon, "Unmapped\n"); } else { From patchwork Mon Feb 10 08:46:48 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Hildenbrand X-Patchwork-Id: 13967486 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 99AC0C02198 for ; Mon, 10 Feb 2025 08:48:59 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1thPS7-0007Ed-Gu; Mon, 10 Feb 2025 03:47:39 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1thPRo-0006VF-QI for qemu-devel@nongnu.org; Mon, 10 Feb 2025 03:47:22 -0500 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1thPRm-00047Z-SC for qemu-devel@nongnu.org; Mon, 10 Feb 2025 03:47:20 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1739177238; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=0rC/aAIY4bXHpHCmeTCgc5miTxFonU93tbQUmgYf9EM=; b=SYmXwpoIBgneCs8rOoTws3hcMXPbPUa/4XNA70lM5XY4pFnOU9w+JVPn1sRXpOGAzl82ma jHhLV7HVg0L2JOyE4Grh1o4g2cDWqTOjLCFW5GzfPVaCxp7nN+ofBvrvL6kLUNZRDisgdd BJqtAqfXsdaLJyS16GErfMLAhd0aVmk= Received: from mail-wr1-f72.google.com (mail-wr1-f72.google.com [209.85.221.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-458-pbjbCsgRPCK8mQV0Tajtgw-1; Mon, 10 Feb 2025 03:47:14 -0500 X-MC-Unique: pbjbCsgRPCK8mQV0Tajtgw-1 X-Mimecast-MFC-AGG-ID: pbjbCsgRPCK8mQV0Tajtgw Received: by mail-wr1-f72.google.com with SMTP id ffacd0b85a97d-38de0201961so325921f8f.2 for ; Mon, 10 Feb 2025 00:47:13 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739177233; x=1739782033; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=0rC/aAIY4bXHpHCmeTCgc5miTxFonU93tbQUmgYf9EM=; b=OfJf8ctHH2k6KIOKedmCVn7I6ET3mGheAK6AOS0lFko71XPiD8QBshSylOfTW8bEzD 3wgGfVtD/gI8qDzTAOZLnZK70tTJawJ0VuY12dizaC+AM2glqprNXHpLKilVwWROuCtA KSh8Yh3Vu+vie3gQ43+S8+vaYKCivctBinpMWmxlubDdT6dZRKW4TH0aPrGmjMapi5oB V2etVawZjsD5jOAVLqJp0V7q00i0GFR76fbjoSUDC5mYyTnXQ1YB1jWL/Qg167ZM19xb KUk4cK+wN2g3yhrThpMTcUbmjDhcq9jnVW31dDWxtSAbiCSLLgLnT1XMv6x5swiC0ll5 BZ4w== X-Gm-Message-State: AOJu0YypvbgXB2w5LGhddS9fuA6hPRifnxBKc1+sNGPneDKc1uv3os4m KmS3swuaZgK/00aFNlW+J3DQWCqTHlaMl5W6QOOS+vWDDs/YI4jy2kbKMdqn/hwkZyaZ+WoSbEq qs63jsFJq/QpVEwnORHU72Oo2rEc7EOYDJ1yqZWdYIMLrrkqQgwuELrkSnuwfwyxyoUtCaTDbBH kEYfJnVQvtH//dAjkrsu9J650Gw6o/CjZt X-Gm-Gg: ASbGncug3Z2S5DjlWs1D7za672DvqXeOY38Laizk6eiv3SdJVPInS9Q8kLOi+9FkC0b 1bT+KgE6ffLFGl58Rt8s/Gp49Lal5hvM1Xko0/KPsmYk3PtT4xhfvImMAjEzaYwOZCwJE8kZYRj LXzhR//Q1q4ON8ERpStqxWhPYryyYjFwd5Wgg+dwYCqA77QFzC/QqWtWpQZ53/cdXBQt1r5/sBM +kcXWC7Q8tH6USlV+3NG7Rlafw5dd2GtvuMT9JWKUfJ9S/Ikbu2JB4/Ely/0bIRYGWD/VKsRo/R f8uLbw8I/Cg6EncvikD9eQy8AHg0yMaG22IPV3H5uOBXVTbbVJ18VBtC4dJnGaTczw== X-Received: by 2002:a05:6000:4010:b0:385:faf5:eba6 with SMTP id ffacd0b85a97d-38dc8d9b92dmr8412932f8f.1.1739177232836; Mon, 10 Feb 2025 00:47:12 -0800 (PST) X-Google-Smtp-Source: AGHT+IECcBoKP/sF3v8PkI2LBIugtYE6I6jRzXGQ+B3MPKzQIR+gy4Pfo84cEN0DTa4LJbgv3YTStw== X-Received: by 2002:a05:6000:4010:b0:385:faf5:eba6 with SMTP id ffacd0b85a97d-38dc8d9b92dmr8412893f8f.1.1739177232393; Mon, 10 Feb 2025 00:47:12 -0800 (PST) Received: from localhost (p200300cbc734b80012c465cd348aaee6.dip0.t-ipconnect.de. [2003:cb:c734:b800:12c4:65cd:348a:aee6]) by smtp.gmail.com with UTF8SMTPSA id ffacd0b85a97d-38dcb55b7a5sm8896013f8f.14.2025.02.10.00.47.10 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 10 Feb 2025 00:47:11 -0800 (PST) From: David Hildenbrand To: qemu-devel@nongnu.org Cc: David Hildenbrand , Paolo Bonzini , Peter Xu , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Peter Maydell , =?utf-8?q?Alex_Benn=C3=A9e?= , Alex Williamson , Eduardo Habkost , Marcel Apfelbaum , Elena Ufimtseva , Jagannathan Raman , "Dr. David Alan Gilbert" , Stefan Zabka Subject: [PATCH v3 7/7] physmem: teach cpu_memory_rw_debug() to write to more memory regions Date: Mon, 10 Feb 2025 09:46:48 +0100 Message-ID: <20250210084648.33798-8-david@redhat.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250210084648.33798-1-david@redhat.com> References: <20250210084648.33798-1-david@redhat.com> MIME-Version: 1.0 Received-SPF: pass client-ip=170.10.133.124; envelope-from=dhildenb@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -34 X-Spam_score: -3.5 X-Spam_bar: --- X-Spam_report: (-3.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1.405, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.01, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Right now, we only allow for writing to memory regions that allow direct access using memcpy etc; all other writes are simply ignored. This implies that debugging guests will not work as expected when writing to MMIO device regions. Let's extend cpu_memory_rw_debug() to write to more memory regions, including MMIO device regions. Reshuffle the condition in memory_access_is_direct() to make it easier to read and add a comment. While this change implies that debug access can now also write to MMIO devices, we now are also permit ELF image loads and similar users of cpu_memory_rw_debug() to write to MMIO devices; currently we ignore these writes. Peter assumes [1] that there's probably a class of guest images, which will start writing junk (likely zeroes) into device model registers; we previously would silently ignore any such bogus ELF sections. Likely these images are of questionable correctness and this can be ignored. If ever a problem, we could make these cases use address_space_write_rom() instead, which is left unchanged for now. This patch is based on previous work by Stefan Zabka. [1] https://lore.kernel.org/all/CAFEAcA_2CEJKFyjvbwmpt=on=GgMVamQ5hiiVt+zUr6AY3X=Xg@mail.gmail.com/ Resolves: https://gitlab.com/qemu-project/qemu/-/issues/213 Reviewed-by: Peter Xu Signed-off-by: David Hildenbrand --- hw/core/cpu-system.c | 13 +++++++++---- include/exec/memattrs.h | 5 ++++- include/exec/memory.h | 3 ++- system/physmem.c | 9 ++------- 4 files changed, 17 insertions(+), 13 deletions(-) diff --git a/hw/core/cpu-system.c b/hw/core/cpu-system.c index 6aae28a349..6e307c8959 100644 --- a/hw/core/cpu-system.c +++ b/hw/core/cpu-system.c @@ -51,13 +51,18 @@ hwaddr cpu_get_phys_page_attrs_debug(CPUState *cpu, vaddr addr, MemTxAttrs *attrs) { CPUClass *cc = CPU_GET_CLASS(cpu); + hwaddr paddr; if (cc->sysemu_ops->get_phys_page_attrs_debug) { - return cc->sysemu_ops->get_phys_page_attrs_debug(cpu, addr, attrs); + paddr = cc->sysemu_ops->get_phys_page_attrs_debug(cpu, addr, attrs); + } else { + /* Fallback for CPUs which don't implement the _attrs_ hook */ + *attrs = MEMTXATTRS_UNSPECIFIED; + paddr = cc->sysemu_ops->get_phys_page_debug(cpu, addr); } - /* Fallback for CPUs which don't implement the _attrs_ hook */ - *attrs = MEMTXATTRS_UNSPECIFIED; - return cc->sysemu_ops->get_phys_page_debug(cpu, addr); + /* Indicate that this is a debug access. */ + attrs->debug = 1; + return paddr; } hwaddr cpu_get_phys_page_debug(CPUState *cpu, vaddr addr) diff --git a/include/exec/memattrs.h b/include/exec/memattrs.h index 060b7e7131..8db1d30464 100644 --- a/include/exec/memattrs.h +++ b/include/exec/memattrs.h @@ -44,6 +44,8 @@ typedef struct MemTxAttrs { * (see MEMTX_ACCESS_ERROR). */ unsigned int memory:1; + /* Debug access that can even write to ROM. */ + unsigned int debug:1; /* Requester ID (for MSI for example) */ unsigned int requester_id:16; @@ -56,7 +58,8 @@ typedef struct MemTxAttrs { * Bus masters which don't specify any attributes will get this * (via the MEMTXATTRS_UNSPECIFIED constant), so that we can * distinguish "all attributes deliberately clear" from - * "didn't specify" if necessary. + * "didn't specify" if necessary. "debug" can be set alongside + * "unspecified". */ bool unspecified; diff --git a/include/exec/memory.h b/include/exec/memory.h index b18ecf933e..78c4e0aec8 100644 --- a/include/exec/memory.h +++ b/include/exec/memory.h @@ -3018,7 +3018,8 @@ static inline bool memory_access_is_direct(MemoryRegion *mr, bool is_write, if (!memory_region_supports_direct_access(mr)) { return false; } - if (is_write) { + /* Debug access can write to ROM. */ + if (is_write && !attrs.debug) { return !mr->readonly && !mr->rom_device; } return true; diff --git a/system/physmem.c b/system/physmem.c index 9766c6d2e0..486316b651 100644 --- a/system/physmem.c +++ b/system/physmem.c @@ -3680,13 +3680,8 @@ int cpu_memory_rw_debug(CPUState *cpu, vaddr addr, if (l > len) l = len; phys_addr += (addr & ~TARGET_PAGE_MASK); - if (is_write) { - res = address_space_write_rom(cpu->cpu_ases[asidx].as, phys_addr, - attrs, buf, l); - } else { - res = address_space_read(cpu->cpu_ases[asidx].as, phys_addr, - attrs, buf, l); - } + res = address_space_rw(cpu->cpu_ases[asidx].as, phys_addr, attrs, buf, + l, is_write); if (res != MEMTX_OK) { return -1; }