From: "Cédric Le Goater" <clg@redhat.com>
To: Steve Sistare <steven.sistare@oracle.com>, qemu-devel@nongnu.org
Cc: Alex Williamson <alex.williamson@redhat.com>,
Zhenzhong Duan <zhenzhong.duan@intel.com>,
"Michael S. Tsirkin" <mst@redhat.com>
Subject: Re: [PATCH V1] vfio: fix sub-page bar after cpr
Date: Wed, 16 Jul 2025 10:11:01 +0200 [thread overview]
Message-ID: <43882887-bf52-4e2c-b94d-e555caadad9d@redhat.com> (raw)
In-Reply-To: <1752520890-223356-1-git-send-email-steven.sistare@oracle.com>
On 7/14/25 21:21, Steve Sistare wrote:
> Regions for sub-page BARs are normally mapped here, in response to the
> guest writing to PCI config space:
>
> vfio_pci_write_config()
> pci_default_write_config()
> pci_update_mappings()
> memory_region_add_subregion()
> vfio_sub_page_bar_update_mapping()
> ... vfio_dma_map()
>
> However, after CPR, the guest does not reconfigure the device and the
> code path above is not taken. To fix, in vfio_cpr_pci_post_load, call
> vfio_sub_page_bar_update_mapping for each sub-page BAR with a valid
> address.
>
> Fixes: 7e9f21411302 ("vfio/container: restore DMA vaddr")
>
> Signed-off-by: Steve Sistare <steven.sistare@oracle.com>
> ---
> hw/vfio/pci.h | 1 +
> hw/vfio/cpr.c | 2 ++
> hw/vfio/pci.c | 14 ++++++++++++++
> 3 files changed, 17 insertions(+)
>
> diff --git a/hw/vfio/pci.h b/hw/vfio/pci.h
> index 495fae7..cb1310d 100644
> --- a/hw/vfio/pci.h
> +++ b/hw/vfio/pci.h
> @@ -228,6 +228,7 @@ void vfio_pci_write_config(PCIDevice *pdev,
> uint64_t vfio_vga_read(void *opaque, hwaddr addr, unsigned size);
> void vfio_vga_write(void *opaque, hwaddr addr, uint64_t data, unsigned size);
>
> +void vfio_sub_page_bar_update_mappings(VFIOPCIDevice *vdev);
> bool vfio_opt_rom_in_denylist(VFIOPCIDevice *vdev);
> bool vfio_config_quirk_setup(VFIOPCIDevice *vdev, Error **errp);
> void vfio_vga_quirk_setup(VFIOPCIDevice *vdev);
We should rename all this routines. For later.
Reviewed-by: Cédric Le Goater <clg@redhat.com>
Thanks,
C.
> diff --git a/hw/vfio/cpr.c b/hw/vfio/cpr.c
> index af0f12a..384b56c 100644
> --- a/hw/vfio/cpr.c
> +++ b/hw/vfio/cpr.c
> @@ -116,6 +116,8 @@ static int vfio_cpr_pci_post_load(void *opaque, int version_id)
> PCIDevice *pdev = &vdev->pdev;
> int nr_vectors;
>
> + vfio_sub_page_bar_update_mappings(vdev);
> +
> if (msix_enabled(pdev)) {
> vfio_pci_msix_set_notifiers(vdev);
> nr_vectors = vdev->msix->entries;
> diff --git a/hw/vfio/pci.c b/hw/vfio/pci.c
> index 1093b28..9c616bd 100644
> --- a/hw/vfio/pci.c
> +++ b/hw/vfio/pci.c
> @@ -2826,6 +2826,20 @@ static int vfio_pci_load_config(VFIODevice *vbasedev, QEMUFile *f)
> return ret;
> }
>
> +void vfio_sub_page_bar_update_mappings(VFIOPCIDevice *vdev)
> +{
> + PCIDevice *pdev = &vdev->pdev;
> + int page_size = qemu_real_host_page_size();
> + int bar;
> +
> + for (bar = 0; bar < PCI_ROM_SLOT; bar++) {
> + PCIIORegion *r = &pdev->io_regions[bar];
> + if (r->addr != PCI_BAR_UNMAPPED && r->size > 0 && r->size < page_size) {
> + vfio_sub_page_bar_update_mapping(pdev, bar);
> + }
> + }
> +}
> +
> static VFIODeviceOps vfio_pci_ops = {
> .vfio_compute_needs_reset = vfio_pci_compute_needs_reset,
> .vfio_hot_reset_multi = vfio_pci_hot_reset_multi,
next prev parent reply other threads:[~2025-07-16 8:20 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-07-14 19:21 [PATCH V1] vfio: fix sub-page bar after cpr Steve Sistare
2025-07-15 6:32 ` Duan, Zhenzhong
2025-07-15 12:23 ` Steven Sistare
2025-07-16 8:11 ` Cédric Le Goater [this message]
2025-07-28 17:25 ` Cédric Le Goater
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=43882887-bf52-4e2c-b94d-e555caadad9d@redhat.com \
--to=clg@redhat.com \
--cc=alex.williamson@redhat.com \
--cc=mst@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=steven.sistare@oracle.com \
--cc=zhenzhong.duan@intel.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.