mirror of
https://github.com/mii443/qemu.git
synced 2025-08-22 23:25:48 +00:00
Merge remote-tracking branch 'remotes/kraxel/tags/vga-20200904-pull-request' into staging
vga: fixes for cirrus and virtio-gpu. # gpg: Signature made Fri 04 Sep 2020 12:26:36 BST # gpg: using RSA key 4CB6D8EED3E87138 # gpg: Good signature from "Gerd Hoffmann (work) <kraxel@redhat.com>" [full] # gpg: aka "Gerd Hoffmann <gerd@kraxel.org>" [full] # gpg: aka "Gerd Hoffmann (private) <kraxel@gmail.com>" [full] # Primary key fingerprint: A032 8CFF B93A 17A7 9901 FE7D 4CB6 D8EE D3E8 7138 * remotes/kraxel/tags/vga-20200904-pull-request: cirrus: handle wraparound in cirrus_invalidate_region virtio-gpu: fix unmap the already mapped items Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
@ -640,10 +640,16 @@ static void cirrus_invalidate_region(CirrusVGAState * s, int off_begin,
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (y = 0; y < lines; y++) {
|
for (y = 0; y < lines; y++) {
|
||||||
off_cur = off_begin;
|
off_cur = off_begin & s->cirrus_addr_mask;
|
||||||
off_cur_end = ((off_cur + bytesperline - 1) & s->cirrus_addr_mask) + 1;
|
off_cur_end = ((off_cur + bytesperline - 1) & s->cirrus_addr_mask) + 1;
|
||||||
assert(off_cur_end >= off_cur);
|
if (off_cur_end >= off_cur) {
|
||||||
memory_region_set_dirty(&s->vga.vram, off_cur, off_cur_end - off_cur);
|
memory_region_set_dirty(&s->vga.vram, off_cur, off_cur_end - off_cur);
|
||||||
|
} else {
|
||||||
|
/* wraparound */
|
||||||
|
memory_region_set_dirty(&s->vga.vram, off_cur,
|
||||||
|
s->cirrus_addr_mask + 1 - off_cur);
|
||||||
|
memory_region_set_dirty(&s->vga.vram, 0, off_cur_end);
|
||||||
|
}
|
||||||
off_begin += off_pitch;
|
off_begin += off_pitch;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -646,9 +646,9 @@ int virtio_gpu_create_mapping_iov(VirtIOGPU *g,
|
|||||||
uint64_t a = le64_to_cpu(ents[i].addr);
|
uint64_t a = le64_to_cpu(ents[i].addr);
|
||||||
uint32_t l = le32_to_cpu(ents[i].length);
|
uint32_t l = le32_to_cpu(ents[i].length);
|
||||||
hwaddr len = l;
|
hwaddr len = l;
|
||||||
(*iov)[i].iov_len = l;
|
|
||||||
(*iov)[i].iov_base = dma_memory_map(VIRTIO_DEVICE(g)->dma_as,
|
(*iov)[i].iov_base = dma_memory_map(VIRTIO_DEVICE(g)->dma_as,
|
||||||
a, &len, DMA_DIRECTION_TO_DEVICE);
|
a, &len, DMA_DIRECTION_TO_DEVICE);
|
||||||
|
(*iov)[i].iov_len = len;
|
||||||
if (addr) {
|
if (addr) {
|
||||||
(*addr)[i] = a;
|
(*addr)[i] = a;
|
||||||
}
|
}
|
||||||
@ -656,6 +656,9 @@ int virtio_gpu_create_mapping_iov(VirtIOGPU *g,
|
|||||||
qemu_log_mask(LOG_GUEST_ERROR, "%s: failed to map MMIO memory for"
|
qemu_log_mask(LOG_GUEST_ERROR, "%s: failed to map MMIO memory for"
|
||||||
" resource %d element %d\n",
|
" resource %d element %d\n",
|
||||||
__func__, ab->resource_id, i);
|
__func__, ab->resource_id, i);
|
||||||
|
if ((*iov)[i].iov_base) {
|
||||||
|
i++; /* cleanup the 'i'th map */
|
||||||
|
}
|
||||||
virtio_gpu_cleanup_mapping_iov(g, *iov, i);
|
virtio_gpu_cleanup_mapping_iov(g, *iov, i);
|
||||||
g_free(ents);
|
g_free(ents);
|
||||||
*iov = NULL;
|
*iov = NULL;
|
||||||
|
Reference in New Issue
Block a user