From: Paolo Bonzini <pbonzini@redhat.com>
To: qemu-devel@nongnu.org
Subject: [PULL 19/63] vga: optimize computation of dirty memory region
Date: Tue, 23 Apr 2024 17:09:07 +0200 [thread overview]
Message-ID: <20240423150951.41600-20-pbonzini@redhat.com> (raw)
In-Reply-To: <20240423150951.41600-1-pbonzini@redhat.com>
The depth == 0 and depth == 15 have to be special cased because
width * depth / 8 does not provide the correct scanline length.
However, thanks to the recent reorganization of vga_draw_graphic()
the correct value of VRAM bits per pixel is available in "bits".
Use it (via the same "bwidth" computation that is used later in
the function), thus restricting the slow path to the wraparound case.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
hw/display/vga.c | 24 +++++++-----------------
1 file changed, 7 insertions(+), 17 deletions(-)
diff --git a/hw/display/vga.c b/hw/display/vga.c
index 77f59e8c113..77d709a3d69 100644
--- a/hw/display/vga.c
+++ b/hw/display/vga.c
@@ -1574,22 +1574,16 @@ static void vga_draw_graphic(VGACommonState *s, int full_update)
/* Horizontal pel panning bit 3 is only used in text mode. */
hpel = bits <= 8 ? s->params.hpel & 7 : 0;
+ bwidth = DIV_ROUND_UP(width * bits, 8); /* scanline length */
+ if (hpel) {
+ bwidth += 4;
+ }
region_start = (s->params.start_addr * 4);
- region_end = region_start + (ram_addr_t)s->params.line_offset * height;
- region_end += width * depth / 8; /* scanline length */
- region_end -= s->params.line_offset;
- if (hpel) {
- region_end += 4;
- }
- if (region_end > s->vbe_size || depth == 0 || depth == 15) {
+ region_end = region_start + (ram_addr_t)s->params.line_offset * (height - 1) + bwidth;
+ if (region_end > s->vbe_size) {
/*
- * We land here on:
- * - wraps around (can happen with cirrus vbe modes)
- * - depth == 0 (256 color palette video mode)
- * - depth == 15
- *
- * Take the safe and slow route:
+ * On wrap around take the safe and slow route:
* - create a dirty bitmap snapshot for all vga memory.
* - force shadowing (so all vga memory access goes
* through vga_read_*() helpers).
@@ -1667,10 +1661,6 @@ static void vga_draw_graphic(VGACommonState *s, int full_update)
s->params.line_compare, sr(s, VGA_SEQ_CLOCK_MODE));
#endif
addr1 = (s->params.start_addr * 4);
- bwidth = DIV_ROUND_UP(width * bits, 8);
- if (hpel) {
- bwidth += 4;
- }
y_start = -1;
d = surface_data(surface);
linesize = surface_stride(surface);
--
2.44.0
next prev parent reply other threads:[~2024-04-23 15:18 UTC|newest]
Thread overview: 83+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-04-23 15:08 [PULL 00/63] First batch of i386 and build system patch for QEMU 9.1 Paolo Bonzini
2024-04-23 15:08 ` [PULL 01/63] meson: do not link pixman automatically into all targets Paolo Bonzini
2024-04-23 15:08 ` [PULL 02/63] tests: only build plugins if TCG is enabled Paolo Bonzini
2024-04-23 15:08 ` [PULL 03/63] ebpf: Restrict to system emulation Paolo Bonzini
2024-04-23 15:08 ` [PULL 04/63] tests/unit: match some unit tests to corresponding feature switches Paolo Bonzini
2024-04-23 15:08 ` [PULL 05/63] yank: only build if needed Paolo Bonzini
2024-04-23 15:08 ` [PULL 06/63] util/qemu-config: Extract QMP commands to qemu-config-qmp.c Paolo Bonzini
2024-04-23 15:08 ` [PULL 07/63] hw/core: Move system emulation files to system_ss Paolo Bonzini
2024-04-23 15:08 ` [PULL 08/63] hw: Include minimal source set in user emulation build Paolo Bonzini
2024-04-23 15:08 ` [PULL 09/63] stubs: remove obsolete stubs Paolo Bonzini
2024-04-23 15:08 ` [PULL 10/63] hw/usb: move stubs out of stubs/ Paolo Bonzini
2024-04-23 15:08 ` [PULL 11/63] hw/virtio: " Paolo Bonzini
2024-08-03 2:29 ` Michael Tokarev
2024-09-05 16:27 ` Paolo Bonzini
2024-09-06 7:08 ` Michael Tokarev
2024-09-06 7:30 ` Paolo Bonzini
2024-04-23 15:09 ` [PULL 12/63] semihosting: " Paolo Bonzini
2024-04-23 15:09 ` [PULL 13/63] ramfb: " Paolo Bonzini
2024-04-23 15:09 ` [PULL 14/63] memory-device: " Paolo Bonzini
2024-04-23 15:09 ` [PULL 15/63] colo: " Paolo Bonzini
2024-04-23 15:09 ` [PULL 16/63] stubs: split record/replay stubs further Paolo Bonzini
2024-04-23 15:09 ` [PULL 17/63] stubs: include stubs only if needed Paolo Bonzini
2024-06-04 10:07 ` Daniel P. Berrangé
2024-06-05 14:46 ` Zhao Liu
2024-04-23 15:09 ` [PULL 18/63] stubs: move monitor_fdsets_cleanup with other fdset stubs Paolo Bonzini
2024-04-23 15:09 ` Paolo Bonzini [this message]
2024-04-23 15:09 ` [PULL 20/63] vga: move dirty memory region code together Paolo Bonzini
2024-04-23 15:09 ` [PULL 21/63] kvm: use configs/ definition to conditionalize debug support Paolo Bonzini
2024-04-23 15:09 ` [PULL 22/63] hw: Add compat machines for 9.1 Paolo Bonzini
2024-04-23 15:09 ` [PULL 23/63] target/i386: add guest-phys-bits cpu property Paolo Bonzini
2024-04-23 15:09 ` [PULL 24/63] kvm: add support for guest physical bits Paolo Bonzini
2024-04-23 15:09 ` [PULL 25/63] i386/kvm: Move architectural CPUID leaf generation to separate helper Paolo Bonzini
2024-04-23 15:29 ` Xiaoyao Li
2024-04-23 15:09 ` [PULL 26/63] target/i386: Introduce Icelake-Server-v7 to enable TSX Paolo Bonzini
2024-04-23 15:09 ` [PULL 27/63] target/i386: Add new CPU model SierraForest Paolo Bonzini
2024-04-23 15:09 ` [PULL 28/63] target/i386: Export RFDS bit to guests Paolo Bonzini
2024-04-23 15:09 ` [PULL 29/63] pci-host/q35: Move PAM initialization above SMRAM initialization Paolo Bonzini
2025-08-12 14:20 ` Michael Tokarev
2025-08-12 14:40 ` Michael Tokarev
2024-04-23 15:09 ` [PULL 30/63] q35: Introduce smm_ranges property for q35-pci-host Paolo Bonzini
2025-08-12 14:45 ` Philippe Mathieu-Daudé
2025-08-12 15:27 ` Michael Tokarev
2025-09-17 14:23 ` Michael Tokarev
2025-09-18 9:20 ` Gerd Hoffmann
2025-09-18 9:27 ` Michael Tokarev
2025-09-18 10:25 ` Gerd Hoffmann
2024-04-23 15:09 ` [PULL 31/63] hw/i386/acpi: Set PCAT_COMPAT bit only when pic is not disabled Paolo Bonzini
2024-04-23 15:09 ` [PULL 32/63] confidential guest support: Add kvm_init() and kvm_reset() in class Paolo Bonzini
2024-04-23 15:09 ` [PULL 33/63] i386/sev: Switch to use confidential_guest_kvm_init() Paolo Bonzini
2024-04-23 15:09 ` [PULL 34/63] ppc/pef: switch to use confidential_guest_kvm_init/reset() Paolo Bonzini
2024-04-23 15:09 ` [PULL 35/63] s390: Switch to use confidential_guest_kvm_init() Paolo Bonzini
2024-04-23 15:09 ` [PULL 36/63] scripts/update-linux-headers: Add setup_data.h to import list Paolo Bonzini
2024-04-23 15:09 ` [PULL 37/63] scripts/update-linux-headers: Add bits.h to file imports Paolo Bonzini
2024-04-23 15:09 ` [PULL 38/63] linux-headers: update to current kvm/next Paolo Bonzini
2024-04-23 15:09 ` [PULL 39/63] runstate: skip initial CPU reset if reset is not actually possible Paolo Bonzini
2024-04-23 15:09 ` [PULL 40/63] KVM: track whether guest state is encrypted Paolo Bonzini
2024-04-23 15:09 ` [PULL 41/63] KVM: remove kvm_arch_cpu_check_are_resettable Paolo Bonzini
2024-04-23 15:09 ` [PULL 42/63] target/i386: introduce x86-confidential-guest Paolo Bonzini
2024-04-23 15:09 ` [PULL 43/63] target/i386: Implement mc->kvm_type() to get VM type Paolo Bonzini
2024-04-24 8:36 ` Xiaoyao Li
2024-04-23 15:09 ` [PULL 44/63] target/i386: SEV: use KVM_SEV_INIT2 if possible Paolo Bonzini
2024-04-23 15:09 ` [PULL 45/63] i386/sev: Add 'legacy-vm-type' parameter for SEV guest objects Paolo Bonzini
2024-04-23 15:09 ` [PULL 46/63] hw/i386/sev: Use legacy SEV VM types for older machine types Paolo Bonzini
2024-04-23 15:09 ` [PULL 47/63] trace/kvm: Split address space and slot id in trace_kvm_set_user_memory() Paolo Bonzini
2024-04-23 15:09 ` [PULL 48/63] kvm: Introduce support for memory_attributes Paolo Bonzini
2024-04-23 15:09 ` [PULL 49/63] RAMBlock: Add support of KVM private guest memfd Paolo Bonzini
2024-04-23 15:09 ` [PULL 50/63] kvm: Enable KVM_SET_USER_MEMORY_REGION2 for memslot Paolo Bonzini
2024-04-23 15:09 ` [PULL 51/63] kvm/memory: Make memory type private by default if it has guest memfd backend Paolo Bonzini
2024-04-23 15:09 ` [PULL 52/63] HostMem: Add mechanism to opt in kvm guest memfd via MachineState Paolo Bonzini
2024-04-23 15:09 ` [PULL 53/63] RAMBlock: make guest_memfd require uncoordinated discard Paolo Bonzini
2024-04-23 15:09 ` [PULL 54/63] physmem: Introduce ram_block_discard_guest_memfd_range() Paolo Bonzini
2024-04-23 15:09 ` [PULL 55/63] kvm: handle KVM_EXIT_MEMORY_FAULT Paolo Bonzini
2024-04-26 13:40 ` Peter Maydell
2024-04-30 19:06 ` Paolo Bonzini
2024-04-23 15:09 ` [PULL 56/63] kvm/tdx: Don't complain when converting vMMIO region to shared Paolo Bonzini
2024-04-23 15:09 ` [PULL 57/63] kvm/tdx: Ignore memory conversion to shared of unassigned region Paolo Bonzini
2024-04-23 15:09 ` [PULL 58/63] target/i386/host-cpu: Consolidate the use of warn_report_once() Paolo Bonzini
2024-04-23 15:09 ` [PULL 59/63] target/i386/cpu: " Paolo Bonzini
2024-04-23 15:09 ` [PULL 60/63] target/i386/cpu: Merge the warning and error messages for AMD HT check Paolo Bonzini
2024-04-23 15:09 ` [PULL 61/63] accel/tcg/icount-common: Consolidate the use of warn_report_once() Paolo Bonzini
2024-04-23 15:09 ` [PULL 62/63] pythondeps.toml: warn about updates needed to docs/requirements.txt Paolo Bonzini
2024-04-23 15:09 ` [PULL 63/63] target/i386/translate.c: always write 32-bits for SGDT and SIDT Paolo Bonzini
2024-04-24 4:26 ` [PULL 00/63] First batch of i386 and build system patch for QEMU 9.1 Richard Henderson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240423150951.41600-20-pbonzini@redhat.com \
--to=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).