* [PATCH v5 0/3] ramfb: migration support @ 2023-10-09 6:32 marcandre.lureau 2023-10-09 6:32 ` [PATCH v5 1/3] ramfb: add " marcandre.lureau ` (3 more replies) 0 siblings, 4 replies; 12+ messages in thread From: marcandre.lureau @ 2023-10-09 6:32 UTC (permalink / raw) To: qemu-devel; +Cc: Cédric Le Goater, lersek, Marc-André Lureau From: Marc-André Lureau <marcandre.lureau@redhat.com> Hi, Implement RAMFB migration, and add properties to enable it only on >= 8.2 machines, + a few related cleanups. thanks v5: - add missing VMSTATE_END_OF_LIST - changed ramfb=off & x-mig=on user config error to a warning - add r-b tags v4: (Laszlo review and suggestions) - change migrate_needed() to assert(ramfb_exists) - rename vfio_display_needed() to vfio_display_migration_needed(), update the condition and associated comment - move the ramfb-migrate option check and add a check for ramfb=on - add a stub to fix compilation on some architectures v3: - add a "x-" prefix to properties, as they are not meant for users. - RAMFB now exports a ramfb_vmstate for actual devices to include - VFIOPCIDevice now has a VFIODisplay optional subsection whenever ramfb migration is required (untested) Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1859424 Marc-André Lureau (3): ramfb: add migration support ramfb-standalone: add migration support hw/vfio: add ramfb migration support hw/vfio/pci.h | 3 +++ include/hw/display/ramfb.h | 4 ++++ hw/core/machine.c | 2 ++ hw/display/ramfb-standalone.c | 27 +++++++++++++++++++++ hw/display/ramfb.c | 19 +++++++++++++++ hw/vfio/display.c | 21 +++++++++++++++++ hw/vfio/pci.c | 44 +++++++++++++++++++++++++++++++++++ stubs/ramfb.c | 2 ++ 8 files changed, 122 insertions(+) -- 2.41.0 ^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH v5 1/3] ramfb: add migration support 2023-10-09 6:32 [PATCH v5 0/3] ramfb: migration support marcandre.lureau @ 2023-10-09 6:32 ` marcandre.lureau 2023-10-09 6:32 ` [PATCH v5 2/3] ramfb-standalone: " marcandre.lureau ` (2 subsequent siblings) 3 siblings, 0 replies; 12+ messages in thread From: marcandre.lureau @ 2023-10-09 6:32 UTC (permalink / raw) To: qemu-devel Cc: Cédric Le Goater, lersek, Marc-André Lureau, Gerd Hoffmann From: Marc-André Lureau <marcandre.lureau@redhat.com> Implementing RAMFB migration is quite straightforward. One caveat is to treat the whole RAMFBCfg as a blob, since that's what is exposed to the guest directly. This avoid having to fiddle with endianness issues if we were to migrate fields individually as integers. The devices using RAMFB will have to include ramfb_vmstate in their migration description. Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> Reviewed-by: Laszlo Ersek <lersek@redhat.com> --- include/hw/display/ramfb.h | 4 ++++ hw/display/ramfb.c | 19 +++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/include/hw/display/ramfb.h b/include/hw/display/ramfb.h index b33a2c467b..a7e0019144 100644 --- a/include/hw/display/ramfb.h +++ b/include/hw/display/ramfb.h @@ -1,11 +1,15 @@ #ifndef RAMFB_H #define RAMFB_H +#include "migration/vmstate.h" + /* ramfb.c */ typedef struct RAMFBState RAMFBState; void ramfb_display_update(QemuConsole *con, RAMFBState *s); RAMFBState *ramfb_setup(Error **errp); +extern const VMStateDescription ramfb_vmstate; + /* ramfb-standalone.c */ #define TYPE_RAMFB_DEVICE "ramfb" diff --git a/hw/display/ramfb.c b/hw/display/ramfb.c index c2b002d534..477ef7272a 100644 --- a/hw/display/ramfb.c +++ b/hw/display/ramfb.c @@ -28,6 +28,8 @@ struct QEMU_PACKED RAMFBCfg { uint32_t stride; }; +typedef struct RAMFBCfg RAMFBCfg; + struct RAMFBState { DisplaySurface *ds; uint32_t width, height; @@ -116,6 +118,23 @@ void ramfb_display_update(QemuConsole *con, RAMFBState *s) dpy_gfx_update_full(con); } +static int ramfb_post_load(void *opaque, int version_id) +{ + ramfb_fw_cfg_write(opaque, 0, 0); + return 0; +} + +const VMStateDescription ramfb_vmstate = { + .name = "ramfb", + .version_id = 1, + .minimum_version_id = 1, + .post_load = ramfb_post_load, + .fields = (VMStateField[]) { + VMSTATE_BUFFER_UNSAFE(cfg, RAMFBState, 0, sizeof(RAMFBCfg)), + VMSTATE_END_OF_LIST() + } +}; + RAMFBState *ramfb_setup(Error **errp) { FWCfgState *fw_cfg = fw_cfg_find(); -- 2.41.0 ^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH v5 2/3] ramfb-standalone: add migration support 2023-10-09 6:32 [PATCH v5 0/3] ramfb: migration support marcandre.lureau 2023-10-09 6:32 ` [PATCH v5 1/3] ramfb: add " marcandre.lureau @ 2023-10-09 6:32 ` marcandre.lureau 2023-10-09 6:32 ` [PATCH v5 3/3] hw/vfio: add ramfb " marcandre.lureau 2023-10-10 12:48 ` [PATCH v5 0/3] ramfb: " Cédric Le Goater 3 siblings, 0 replies; 12+ messages in thread From: marcandre.lureau @ 2023-10-09 6:32 UTC (permalink / raw) To: qemu-devel Cc: Cédric Le Goater, lersek, Marc-André Lureau, Eduardo Habkost, Marcel Apfelbaum, Philippe Mathieu-Daudé, Yanan Wang, Gerd Hoffmann From: Marc-André Lureau <marcandre.lureau@redhat.com> Add a "ramfb-dev" section whenever "x-migrate" is turned on. Turn it off by default on machines <= 8.1 for compatibility reasons. Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> Reviewed-by: Laszlo Ersek <lersek@redhat.com> --- hw/core/machine.c | 1 + hw/display/ramfb-standalone.c | 27 +++++++++++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/hw/core/machine.c b/hw/core/machine.c index cfd1edfe20..6305f2d7a4 100644 --- a/hw/core/machine.c +++ b/hw/core/machine.c @@ -34,6 +34,7 @@ GlobalProperty hw_compat_8_1[] = { { TYPE_PCI_BRIDGE, "x-pci-express-writeable-slt-bug", "true" }, + { "ramfb", "x-migrate", "off" }, }; const size_t hw_compat_8_1_len = G_N_ELEMENTS(hw_compat_8_1); diff --git a/hw/display/ramfb-standalone.c b/hw/display/ramfb-standalone.c index 8c0094397f..a96e7ebcd9 100644 --- a/hw/display/ramfb-standalone.c +++ b/hw/display/ramfb-standalone.c @@ -1,4 +1,5 @@ #include "qemu/osdep.h" +#include "migration/vmstate.h" #include "qapi/error.h" #include "qemu/module.h" #include "hw/loader.h" @@ -15,6 +16,7 @@ struct RAMFBStandaloneState { SysBusDevice parent_obj; QemuConsole *con; RAMFBState *state; + bool migrate; }; static void display_update_wrapper(void *dev) @@ -40,14 +42,39 @@ static void ramfb_realizefn(DeviceState *dev, Error **errp) ramfb->state = ramfb_setup(errp); } +static bool migrate_needed(void *opaque) +{ + RAMFBStandaloneState *ramfb = RAMFB(opaque); + + return ramfb->migrate; +} + +static const VMStateDescription ramfb_dev_vmstate = { + .name = "ramfb-dev", + .version_id = 1, + .minimum_version_id = 1, + .needed = migrate_needed, + .fields = (VMStateField[]) { + VMSTATE_STRUCT_POINTER(state, RAMFBStandaloneState, ramfb_vmstate, RAMFBState), + VMSTATE_END_OF_LIST() + } +}; + +static Property ramfb_properties[] = { + DEFINE_PROP_BOOL("x-migrate", RAMFBStandaloneState, migrate, true), + DEFINE_PROP_END_OF_LIST(), +}; + static void ramfb_class_initfn(ObjectClass *klass, void *data) { DeviceClass *dc = DEVICE_CLASS(klass); set_bit(DEVICE_CATEGORY_DISPLAY, dc->categories); + dc->vmsd = &ramfb_dev_vmstate; dc->realize = ramfb_realizefn; dc->desc = "ram framebuffer standalone device"; dc->user_creatable = true; + device_class_set_props(dc, ramfb_properties); } static const TypeInfo ramfb_info = { -- 2.41.0 ^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH v5 3/3] hw/vfio: add ramfb migration support 2023-10-09 6:32 [PATCH v5 0/3] ramfb: migration support marcandre.lureau 2023-10-09 6:32 ` [PATCH v5 1/3] ramfb: add " marcandre.lureau 2023-10-09 6:32 ` [PATCH v5 2/3] ramfb-standalone: " marcandre.lureau @ 2023-10-09 6:32 ` marcandre.lureau 2023-10-09 10:19 ` Laszlo Ersek 2023-10-10 12:48 ` [PATCH v5 0/3] ramfb: " Cédric Le Goater 3 siblings, 1 reply; 12+ messages in thread From: marcandre.lureau @ 2023-10-09 6:32 UTC (permalink / raw) To: qemu-devel Cc: Cédric Le Goater, lersek, Marc-André Lureau, Eduardo Habkost, Marcel Apfelbaum, Philippe Mathieu-Daudé, Yanan Wang, Alex Williamson, Paolo Bonzini From: Marc-André Lureau <marcandre.lureau@redhat.com> Add a "VFIODisplay" subsection whenever "x-ramfb-migrate" is turned on. Turn it off by default on machines <= 8.1 for compatibility reasons. Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> Reviewed-by: Laszlo Ersek <lersek@redhat.com> --- hw/vfio/pci.h | 3 +++ hw/core/machine.c | 1 + hw/vfio/display.c | 21 +++++++++++++++++++++ hw/vfio/pci.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ stubs/ramfb.c | 2 ++ 5 files changed, 71 insertions(+) diff --git a/hw/vfio/pci.h b/hw/vfio/pci.h index 2d836093a8..fd06695542 100644 --- a/hw/vfio/pci.h +++ b/hw/vfio/pci.h @@ -173,6 +173,7 @@ struct VFIOPCIDevice { bool no_kvm_ioeventfd; bool no_vfio_ioeventfd; bool enable_ramfb; + OnOffAuto ramfb_migrate; bool defer_kvm_irq_routing; bool clear_parent_atomics_on_exit; VFIODisplay *dpy; @@ -226,4 +227,6 @@ void vfio_display_reset(VFIOPCIDevice *vdev); int vfio_display_probe(VFIOPCIDevice *vdev, Error **errp); void vfio_display_finalize(VFIOPCIDevice *vdev); +extern const VMStateDescription vfio_display_vmstate; + #endif /* HW_VFIO_VFIO_PCI_H */ diff --git a/hw/core/machine.c b/hw/core/machine.c index 6305f2d7a4..05aef2cf9f 100644 --- a/hw/core/machine.c +++ b/hw/core/machine.c @@ -35,6 +35,7 @@ GlobalProperty hw_compat_8_1[] = { { TYPE_PCI_BRIDGE, "x-pci-express-writeable-slt-bug", "true" }, { "ramfb", "x-migrate", "off" }, + { "vfio-pci-nohotplug", "x-ramfb-migrate", "off" } }; const size_t hw_compat_8_1_len = G_N_ELEMENTS(hw_compat_8_1); diff --git a/hw/vfio/display.c b/hw/vfio/display.c index bec864f482..2739ba56ec 100644 --- a/hw/vfio/display.c +++ b/hw/vfio/display.c @@ -542,3 +542,24 @@ void vfio_display_finalize(VFIOPCIDevice *vdev) vfio_display_edid_exit(vdev->dpy); g_free(vdev->dpy); } + +static bool migrate_needed(void *opaque) +{ + VFIODisplay *dpy = opaque; + bool ramfb_exists = dpy->ramfb != NULL; + + /* see vfio_display_migration_needed() */ + assert(ramfb_exists); + return ramfb_exists; +} + +const VMStateDescription vfio_display_vmstate = { + .name = "VFIODisplay", + .version_id = 1, + .minimum_version_id = 1, + .needed = migrate_needed, + .fields = (VMStateField[]) { + VMSTATE_STRUCT_POINTER(ramfb, VFIODisplay, ramfb_vmstate, RAMFBState), + VMSTATE_END_OF_LIST(), + } +}; diff --git a/hw/vfio/pci.c b/hw/vfio/pci.c index 3b2ca3c24c..e44ed21180 100644 --- a/hw/vfio/pci.c +++ b/hw/vfio/pci.c @@ -2608,6 +2608,32 @@ static bool vfio_msix_present(void *opaque, int version_id) return msix_present(pdev); } +static bool vfio_display_migration_needed(void *opaque) +{ + VFIOPCIDevice *vdev = opaque; + + /* + * We need to migrate the VFIODisplay object if ramfb *migration* was + * explicitly requested (in which case we enforced both ramfb=on and + * display=on), or ramfb migration was left at the default "auto" + * setting, and *ramfb* was explicitly requested (in which case we + * enforced display=on). + */ + return vdev->ramfb_migrate == ON_OFF_AUTO_ON || + (vdev->ramfb_migrate == ON_OFF_AUTO_AUTO && vdev->enable_ramfb); +} + +const VMStateDescription vmstate_vfio_display = { + .name = "VFIOPCIDevice/VFIODisplay", + .version_id = 1, + .minimum_version_id = 1, + .needed = vfio_display_migration_needed, + .fields = (VMStateField[]){ + VMSTATE_STRUCT_POINTER(dpy, VFIOPCIDevice, vfio_display_vmstate, VFIODisplay), + VMSTATE_END_OF_LIST() + } +}; + const VMStateDescription vmstate_vfio_pci_config = { .name = "VFIOPCIDevice", .version_id = 1, @@ -2616,6 +2642,10 @@ const VMStateDescription vmstate_vfio_pci_config = { VMSTATE_PCI_DEVICE(pdev, VFIOPCIDevice), VMSTATE_MSIX_TEST(pdev, VFIOPCIDevice, vfio_msix_present), VMSTATE_END_OF_LIST() + }, + .subsections = (const VMStateDescription*[]) { + &vmstate_vfio_display, + NULL } }; @@ -3271,6 +3301,19 @@ static void vfio_realize(PCIDevice *pdev, Error **errp) } } + if (vdev->ramfb_migrate == ON_OFF_AUTO_ON && !vdev->enable_ramfb) { + warn_report("x-ramfb-migrate=on but ramfb=off"); + vdev->ramfb_migrate = ON_OFF_AUTO_OFF; + } + if (vbasedev->enable_migration == ON_OFF_AUTO_OFF) { + if (vdev->ramfb_migrate == ON_OFF_AUTO_AUTO) { + vdev->ramfb_migrate = ON_OFF_AUTO_OFF; + } else if (vdev->ramfb_migrate == ON_OFF_AUTO_ON) { + error_setg(errp, "x-ramfb-migrate requires enable-migration"); + goto out_deregister; + } + } + if (!pdev->failover_pair_id) { if (!vfio_migration_realize(vbasedev, errp)) { goto out_deregister; @@ -3484,6 +3527,7 @@ static const TypeInfo vfio_pci_dev_info = { static Property vfio_pci_dev_nohotplug_properties[] = { DEFINE_PROP_BOOL("ramfb", VFIOPCIDevice, enable_ramfb, false), + DEFINE_PROP_ON_OFF_AUTO("x-ramfb-migrate", VFIOPCIDevice, ramfb_migrate, ON_OFF_AUTO_AUTO), DEFINE_PROP_END_OF_LIST(), }; diff --git a/stubs/ramfb.c b/stubs/ramfb.c index 48143f3354..cf64733b10 100644 --- a/stubs/ramfb.c +++ b/stubs/ramfb.c @@ -2,6 +2,8 @@ #include "qapi/error.h" #include "hw/display/ramfb.h" +const VMStateDescription ramfb_vmstate = {}; + void ramfb_display_update(QemuConsole *con, RAMFBState *s) { } -- 2.41.0 ^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH v5 3/3] hw/vfio: add ramfb migration support 2023-10-09 6:32 ` [PATCH v5 3/3] hw/vfio: add ramfb " marcandre.lureau @ 2023-10-09 10:19 ` Laszlo Ersek 2023-10-10 7:03 ` Cédric Le Goater 0 siblings, 1 reply; 12+ messages in thread From: Laszlo Ersek @ 2023-10-09 10:19 UTC (permalink / raw) To: marcandre.lureau, qemu-devel Cc: Cédric Le Goater, Eduardo Habkost, Marcel Apfelbaum, Philippe Mathieu-Daudé, Yanan Wang, Alex Williamson, Paolo Bonzini On 10/9/23 08:32, marcandre.lureau@redhat.com wrote: > From: Marc-André Lureau <marcandre.lureau@redhat.com> > > Add a "VFIODisplay" subsection whenever "x-ramfb-migrate" is turned on. > > Turn it off by default on machines <= 8.1 for compatibility reasons. > > Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> > Reviewed-by: Laszlo Ersek <lersek@redhat.com> > --- > hw/vfio/pci.h | 3 +++ > hw/core/machine.c | 1 + > hw/vfio/display.c | 21 +++++++++++++++++++++ > hw/vfio/pci.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ > stubs/ramfb.c | 2 ++ > 5 files changed, 71 insertions(+) > > diff --git a/hw/vfio/pci.h b/hw/vfio/pci.h > index 2d836093a8..fd06695542 100644 > --- a/hw/vfio/pci.h > +++ b/hw/vfio/pci.h > @@ -173,6 +173,7 @@ struct VFIOPCIDevice { > bool no_kvm_ioeventfd; > bool no_vfio_ioeventfd; > bool enable_ramfb; > + OnOffAuto ramfb_migrate; > bool defer_kvm_irq_routing; > bool clear_parent_atomics_on_exit; > VFIODisplay *dpy; > @@ -226,4 +227,6 @@ void vfio_display_reset(VFIOPCIDevice *vdev); > int vfio_display_probe(VFIOPCIDevice *vdev, Error **errp); > void vfio_display_finalize(VFIOPCIDevice *vdev); > > +extern const VMStateDescription vfio_display_vmstate; > + > #endif /* HW_VFIO_VFIO_PCI_H */ > diff --git a/hw/core/machine.c b/hw/core/machine.c > index 6305f2d7a4..05aef2cf9f 100644 > --- a/hw/core/machine.c > +++ b/hw/core/machine.c > @@ -35,6 +35,7 @@ > GlobalProperty hw_compat_8_1[] = { > { TYPE_PCI_BRIDGE, "x-pci-express-writeable-slt-bug", "true" }, > { "ramfb", "x-migrate", "off" }, > + { "vfio-pci-nohotplug", "x-ramfb-migrate", "off" } > }; > const size_t hw_compat_8_1_len = G_N_ELEMENTS(hw_compat_8_1); > > diff --git a/hw/vfio/display.c b/hw/vfio/display.c > index bec864f482..2739ba56ec 100644 > --- a/hw/vfio/display.c > +++ b/hw/vfio/display.c > @@ -542,3 +542,24 @@ void vfio_display_finalize(VFIOPCIDevice *vdev) > vfio_display_edid_exit(vdev->dpy); > g_free(vdev->dpy); > } > + > +static bool migrate_needed(void *opaque) > +{ > + VFIODisplay *dpy = opaque; > + bool ramfb_exists = dpy->ramfb != NULL; > + > + /* see vfio_display_migration_needed() */ > + assert(ramfb_exists); > + return ramfb_exists; > +} > + > +const VMStateDescription vfio_display_vmstate = { > + .name = "VFIODisplay", > + .version_id = 1, > + .minimum_version_id = 1, > + .needed = migrate_needed, > + .fields = (VMStateField[]) { > + VMSTATE_STRUCT_POINTER(ramfb, VFIODisplay, ramfb_vmstate, RAMFBState), > + VMSTATE_END_OF_LIST(), > + } > +}; > diff --git a/hw/vfio/pci.c b/hw/vfio/pci.c > index 3b2ca3c24c..e44ed21180 100644 > --- a/hw/vfio/pci.c > +++ b/hw/vfio/pci.c > @@ -2608,6 +2608,32 @@ static bool vfio_msix_present(void *opaque, int version_id) > return msix_present(pdev); > } > > +static bool vfio_display_migration_needed(void *opaque) > +{ > + VFIOPCIDevice *vdev = opaque; > + > + /* > + * We need to migrate the VFIODisplay object if ramfb *migration* was > + * explicitly requested (in which case we enforced both ramfb=on and > + * display=on), or ramfb migration was left at the default "auto" > + * setting, and *ramfb* was explicitly requested (in which case we > + * enforced display=on). > + */ > + return vdev->ramfb_migrate == ON_OFF_AUTO_ON || > + (vdev->ramfb_migrate == ON_OFF_AUTO_AUTO && vdev->enable_ramfb); > +} > + > +const VMStateDescription vmstate_vfio_display = { > + .name = "VFIOPCIDevice/VFIODisplay", > + .version_id = 1, > + .minimum_version_id = 1, > + .needed = vfio_display_migration_needed, > + .fields = (VMStateField[]){ > + VMSTATE_STRUCT_POINTER(dpy, VFIOPCIDevice, vfio_display_vmstate, VFIODisplay), > + VMSTATE_END_OF_LIST() > + } > +}; > + > const VMStateDescription vmstate_vfio_pci_config = { > .name = "VFIOPCIDevice", > .version_id = 1, > @@ -2616,6 +2642,10 @@ const VMStateDescription vmstate_vfio_pci_config = { > VMSTATE_PCI_DEVICE(pdev, VFIOPCIDevice), > VMSTATE_MSIX_TEST(pdev, VFIOPCIDevice, vfio_msix_present), > VMSTATE_END_OF_LIST() > + }, > + .subsections = (const VMStateDescription*[]) { > + &vmstate_vfio_display, > + NULL > } > }; > > @@ -3271,6 +3301,19 @@ static void vfio_realize(PCIDevice *pdev, Error **errp) > } > } > > + if (vdev->ramfb_migrate == ON_OFF_AUTO_ON && !vdev->enable_ramfb) { > + warn_report("x-ramfb-migrate=on but ramfb=off"); > + vdev->ramfb_migrate = ON_OFF_AUTO_OFF; the warning could give a hint about the resultant action taken (i.e., forcing off x-ramfb-migrate), but don't repost just for that; it's a nit. My R-b stands. Thanks Laszlo > + } > + if (vbasedev->enable_migration == ON_OFF_AUTO_OFF) { > + if (vdev->ramfb_migrate == ON_OFF_AUTO_AUTO) { > + vdev->ramfb_migrate = ON_OFF_AUTO_OFF; > + } else if (vdev->ramfb_migrate == ON_OFF_AUTO_ON) { > + error_setg(errp, "x-ramfb-migrate requires enable-migration"); > + goto out_deregister; > + } > + } > + > if (!pdev->failover_pair_id) { > if (!vfio_migration_realize(vbasedev, errp)) { > goto out_deregister; > @@ -3484,6 +3527,7 @@ static const TypeInfo vfio_pci_dev_info = { > > static Property vfio_pci_dev_nohotplug_properties[] = { > DEFINE_PROP_BOOL("ramfb", VFIOPCIDevice, enable_ramfb, false), > + DEFINE_PROP_ON_OFF_AUTO("x-ramfb-migrate", VFIOPCIDevice, ramfb_migrate, ON_OFF_AUTO_AUTO), > DEFINE_PROP_END_OF_LIST(), > }; > > diff --git a/stubs/ramfb.c b/stubs/ramfb.c > index 48143f3354..cf64733b10 100644 > --- a/stubs/ramfb.c > +++ b/stubs/ramfb.c > @@ -2,6 +2,8 @@ > #include "qapi/error.h" > #include "hw/display/ramfb.h" > > +const VMStateDescription ramfb_vmstate = {}; > + > void ramfb_display_update(QemuConsole *con, RAMFBState *s) > { > } ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v5 3/3] hw/vfio: add ramfb migration support 2023-10-09 10:19 ` Laszlo Ersek @ 2023-10-10 7:03 ` Cédric Le Goater 2023-10-10 7:08 ` Marc-André Lureau 0 siblings, 1 reply; 12+ messages in thread From: Cédric Le Goater @ 2023-10-10 7:03 UTC (permalink / raw) To: Laszlo Ersek, marcandre.lureau, qemu-devel Cc: Eduardo Habkost, Marcel Apfelbaum, Philippe Mathieu-Daudé, Yanan Wang, Alex Williamson, Paolo Bonzini On 10/9/23 12:19, Laszlo Ersek wrote: > On 10/9/23 08:32, marcandre.lureau@redhat.com wrote: >> From: Marc-André Lureau <marcandre.lureau@redhat.com> >> >> Add a "VFIODisplay" subsection whenever "x-ramfb-migrate" is turned on. >> >> Turn it off by default on machines <= 8.1 for compatibility reasons. >> >> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> >> Reviewed-by: Laszlo Ersek <lersek@redhat.com> >> --- >> hw/vfio/pci.h | 3 +++ >> hw/core/machine.c | 1 + >> hw/vfio/display.c | 21 +++++++++++++++++++++ >> hw/vfio/pci.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ >> stubs/ramfb.c | 2 ++ >> 5 files changed, 71 insertions(+) >> >> diff --git a/hw/vfio/pci.h b/hw/vfio/pci.h >> index 2d836093a8..fd06695542 100644 >> --- a/hw/vfio/pci.h >> +++ b/hw/vfio/pci.h >> @@ -173,6 +173,7 @@ struct VFIOPCIDevice { >> bool no_kvm_ioeventfd; >> bool no_vfio_ioeventfd; >> bool enable_ramfb; >> + OnOffAuto ramfb_migrate; >> bool defer_kvm_irq_routing; >> bool clear_parent_atomics_on_exit; >> VFIODisplay *dpy; >> @@ -226,4 +227,6 @@ void vfio_display_reset(VFIOPCIDevice *vdev); >> int vfio_display_probe(VFIOPCIDevice *vdev, Error **errp); >> void vfio_display_finalize(VFIOPCIDevice *vdev); >> >> +extern const VMStateDescription vfio_display_vmstate; >> + >> #endif /* HW_VFIO_VFIO_PCI_H */ >> diff --git a/hw/core/machine.c b/hw/core/machine.c >> index 6305f2d7a4..05aef2cf9f 100644 >> --- a/hw/core/machine.c >> +++ b/hw/core/machine.c >> @@ -35,6 +35,7 @@ >> GlobalProperty hw_compat_8_1[] = { >> { TYPE_PCI_BRIDGE, "x-pci-express-writeable-slt-bug", "true" }, >> { "ramfb", "x-migrate", "off" }, >> + { "vfio-pci-nohotplug", "x-ramfb-migrate", "off" } >> }; >> const size_t hw_compat_8_1_len = G_N_ELEMENTS(hw_compat_8_1); >> >> diff --git a/hw/vfio/display.c b/hw/vfio/display.c >> index bec864f482..2739ba56ec 100644 >> --- a/hw/vfio/display.c >> +++ b/hw/vfio/display.c >> @@ -542,3 +542,24 @@ void vfio_display_finalize(VFIOPCIDevice *vdev) >> vfio_display_edid_exit(vdev->dpy); >> g_free(vdev->dpy); >> } >> + >> +static bool migrate_needed(void *opaque) >> +{ >> + VFIODisplay *dpy = opaque; >> + bool ramfb_exists = dpy->ramfb != NULL; >> + >> + /* see vfio_display_migration_needed() */ >> + assert(ramfb_exists); >> + return ramfb_exists; >> +} >> + >> +const VMStateDescription vfio_display_vmstate = { >> + .name = "VFIODisplay", >> + .version_id = 1, >> + .minimum_version_id = 1, >> + .needed = migrate_needed, >> + .fields = (VMStateField[]) { >> + VMSTATE_STRUCT_POINTER(ramfb, VFIODisplay, ramfb_vmstate, RAMFBState), >> + VMSTATE_END_OF_LIST(), >> + } >> +}; >> diff --git a/hw/vfio/pci.c b/hw/vfio/pci.c >> index 3b2ca3c24c..e44ed21180 100644 >> --- a/hw/vfio/pci.c >> +++ b/hw/vfio/pci.c >> @@ -2608,6 +2608,32 @@ static bool vfio_msix_present(void *opaque, int version_id) >> return msix_present(pdev); >> } >> >> +static bool vfio_display_migration_needed(void *opaque) >> +{ >> + VFIOPCIDevice *vdev = opaque; >> + >> + /* >> + * We need to migrate the VFIODisplay object if ramfb *migration* was >> + * explicitly requested (in which case we enforced both ramfb=on and >> + * display=on), or ramfb migration was left at the default "auto" >> + * setting, and *ramfb* was explicitly requested (in which case we >> + * enforced display=on). >> + */ >> + return vdev->ramfb_migrate == ON_OFF_AUTO_ON || >> + (vdev->ramfb_migrate == ON_OFF_AUTO_AUTO && vdev->enable_ramfb); >> +} >> + >> +const VMStateDescription vmstate_vfio_display = { >> + .name = "VFIOPCIDevice/VFIODisplay", >> + .version_id = 1, >> + .minimum_version_id = 1, >> + .needed = vfio_display_migration_needed, >> + .fields = (VMStateField[]){ >> + VMSTATE_STRUCT_POINTER(dpy, VFIOPCIDevice, vfio_display_vmstate, VFIODisplay), >> + VMSTATE_END_OF_LIST() >> + } >> +}; >> + >> const VMStateDescription vmstate_vfio_pci_config = { >> .name = "VFIOPCIDevice", >> .version_id = 1, >> @@ -2616,6 +2642,10 @@ const VMStateDescription vmstate_vfio_pci_config = { >> VMSTATE_PCI_DEVICE(pdev, VFIOPCIDevice), >> VMSTATE_MSIX_TEST(pdev, VFIOPCIDevice, vfio_msix_present), >> VMSTATE_END_OF_LIST() >> + }, >> + .subsections = (const VMStateDescription*[]) { >> + &vmstate_vfio_display, >> + NULL >> } >> }; >> >> @@ -3271,6 +3301,19 @@ static void vfio_realize(PCIDevice *pdev, Error **errp) >> } >> } >> >> + if (vdev->ramfb_migrate == ON_OFF_AUTO_ON && !vdev->enable_ramfb) { >> + warn_report("x-ramfb-migrate=on but ramfb=off"); >> + vdev->ramfb_migrate = ON_OFF_AUTO_OFF; > > the warning could give a hint about the resultant action taken (i.e., > forcing off x-ramfb-migrate), but don't repost just for that; it's a nit. yes. How about : warn_report("x-ramfb-migrate=on but ramfb=off. Forcing x-ramfb-migrate to off."); I can amend the patch if you agree. Thanks, C. > My R-b stands. > > Thanks > Laszlo > >> + } >> + if (vbasedev->enable_migration == ON_OFF_AUTO_OFF) { >> + if (vdev->ramfb_migrate == ON_OFF_AUTO_AUTO) { >> + vdev->ramfb_migrate = ON_OFF_AUTO_OFF; >> + } else if (vdev->ramfb_migrate == ON_OFF_AUTO_ON) { >> + error_setg(errp, "x-ramfb-migrate requires enable-migration"); >> + goto out_deregister; >> + } >> + } >> + >> if (!pdev->failover_pair_id) { >> if (!vfio_migration_realize(vbasedev, errp)) { >> goto out_deregister; >> @@ -3484,6 +3527,7 @@ static const TypeInfo vfio_pci_dev_info = { >> >> static Property vfio_pci_dev_nohotplug_properties[] = { >> DEFINE_PROP_BOOL("ramfb", VFIOPCIDevice, enable_ramfb, false), >> + DEFINE_PROP_ON_OFF_AUTO("x-ramfb-migrate", VFIOPCIDevice, ramfb_migrate, ON_OFF_AUTO_AUTO), >> DEFINE_PROP_END_OF_LIST(), >> }; >> >> diff --git a/stubs/ramfb.c b/stubs/ramfb.c >> index 48143f3354..cf64733b10 100644 >> --- a/stubs/ramfb.c >> +++ b/stubs/ramfb.c >> @@ -2,6 +2,8 @@ >> #include "qapi/error.h" >> #include "hw/display/ramfb.h" >> >> +const VMStateDescription ramfb_vmstate = {}; >> + >> void ramfb_display_update(QemuConsole *con, RAMFBState *s) >> { >> } > ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v5 3/3] hw/vfio: add ramfb migration support 2023-10-10 7:03 ` Cédric Le Goater @ 2023-10-10 7:08 ` Marc-André Lureau 0 siblings, 0 replies; 12+ messages in thread From: Marc-André Lureau @ 2023-10-10 7:08 UTC (permalink / raw) To: Cédric Le Goater Cc: Laszlo Ersek, qemu-devel, Eduardo Habkost, Marcel Apfelbaum, Philippe Mathieu-Daudé, Yanan Wang, Alex Williamson, Paolo Bonzini Hi On Tue, Oct 10, 2023 at 11:03 AM Cédric Le Goater <clg@redhat.com> wrote: > > On 10/9/23 12:19, Laszlo Ersek wrote: > > On 10/9/23 08:32, marcandre.lureau@redhat.com wrote: > >> From: Marc-André Lureau <marcandre.lureau@redhat.com> > >> > >> Add a "VFIODisplay" subsection whenever "x-ramfb-migrate" is turned on. > >> > >> Turn it off by default on machines <= 8.1 for compatibility reasons. > >> > >> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> > >> Reviewed-by: Laszlo Ersek <lersek@redhat.com> > >> --- > >> hw/vfio/pci.h | 3 +++ > >> hw/core/machine.c | 1 + > >> hw/vfio/display.c | 21 +++++++++++++++++++++ > >> hw/vfio/pci.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ > >> stubs/ramfb.c | 2 ++ > >> 5 files changed, 71 insertions(+) > >> > >> diff --git a/hw/vfio/pci.h b/hw/vfio/pci.h > >> index 2d836093a8..fd06695542 100644 > >> --- a/hw/vfio/pci.h > >> +++ b/hw/vfio/pci.h > >> @@ -173,6 +173,7 @@ struct VFIOPCIDevice { > >> bool no_kvm_ioeventfd; > >> bool no_vfio_ioeventfd; > >> bool enable_ramfb; > >> + OnOffAuto ramfb_migrate; > >> bool defer_kvm_irq_routing; > >> bool clear_parent_atomics_on_exit; > >> VFIODisplay *dpy; > >> @@ -226,4 +227,6 @@ void vfio_display_reset(VFIOPCIDevice *vdev); > >> int vfio_display_probe(VFIOPCIDevice *vdev, Error **errp); > >> void vfio_display_finalize(VFIOPCIDevice *vdev); > >> > >> +extern const VMStateDescription vfio_display_vmstate; > >> + > >> #endif /* HW_VFIO_VFIO_PCI_H */ > >> diff --git a/hw/core/machine.c b/hw/core/machine.c > >> index 6305f2d7a4..05aef2cf9f 100644 > >> --- a/hw/core/machine.c > >> +++ b/hw/core/machine.c > >> @@ -35,6 +35,7 @@ > >> GlobalProperty hw_compat_8_1[] = { > >> { TYPE_PCI_BRIDGE, "x-pci-express-writeable-slt-bug", "true" }, > >> { "ramfb", "x-migrate", "off" }, > >> + { "vfio-pci-nohotplug", "x-ramfb-migrate", "off" } > >> }; > >> const size_t hw_compat_8_1_len = G_N_ELEMENTS(hw_compat_8_1); > >> > >> diff --git a/hw/vfio/display.c b/hw/vfio/display.c > >> index bec864f482..2739ba56ec 100644 > >> --- a/hw/vfio/display.c > >> +++ b/hw/vfio/display.c > >> @@ -542,3 +542,24 @@ void vfio_display_finalize(VFIOPCIDevice *vdev) > >> vfio_display_edid_exit(vdev->dpy); > >> g_free(vdev->dpy); > >> } > >> + > >> +static bool migrate_needed(void *opaque) > >> +{ > >> + VFIODisplay *dpy = opaque; > >> + bool ramfb_exists = dpy->ramfb != NULL; > >> + > >> + /* see vfio_display_migration_needed() */ > >> + assert(ramfb_exists); > >> + return ramfb_exists; > >> +} > >> + > >> +const VMStateDescription vfio_display_vmstate = { > >> + .name = "VFIODisplay", > >> + .version_id = 1, > >> + .minimum_version_id = 1, > >> + .needed = migrate_needed, > >> + .fields = (VMStateField[]) { > >> + VMSTATE_STRUCT_POINTER(ramfb, VFIODisplay, ramfb_vmstate, RAMFBState), > >> + VMSTATE_END_OF_LIST(), > >> + } > >> +}; > >> diff --git a/hw/vfio/pci.c b/hw/vfio/pci.c > >> index 3b2ca3c24c..e44ed21180 100644 > >> --- a/hw/vfio/pci.c > >> +++ b/hw/vfio/pci.c > >> @@ -2608,6 +2608,32 @@ static bool vfio_msix_present(void *opaque, int version_id) > >> return msix_present(pdev); > >> } > >> > >> +static bool vfio_display_migration_needed(void *opaque) > >> +{ > >> + VFIOPCIDevice *vdev = opaque; > >> + > >> + /* > >> + * We need to migrate the VFIODisplay object if ramfb *migration* was > >> + * explicitly requested (in which case we enforced both ramfb=on and > >> + * display=on), or ramfb migration was left at the default "auto" > >> + * setting, and *ramfb* was explicitly requested (in which case we > >> + * enforced display=on). > >> + */ > >> + return vdev->ramfb_migrate == ON_OFF_AUTO_ON || > >> + (vdev->ramfb_migrate == ON_OFF_AUTO_AUTO && vdev->enable_ramfb); > >> +} > >> + > >> +const VMStateDescription vmstate_vfio_display = { > >> + .name = "VFIOPCIDevice/VFIODisplay", > >> + .version_id = 1, > >> + .minimum_version_id = 1, > >> + .needed = vfio_display_migration_needed, > >> + .fields = (VMStateField[]){ > >> + VMSTATE_STRUCT_POINTER(dpy, VFIOPCIDevice, vfio_display_vmstate, VFIODisplay), > >> + VMSTATE_END_OF_LIST() > >> + } > >> +}; > >> + > >> const VMStateDescription vmstate_vfio_pci_config = { > >> .name = "VFIOPCIDevice", > >> .version_id = 1, > >> @@ -2616,6 +2642,10 @@ const VMStateDescription vmstate_vfio_pci_config = { > >> VMSTATE_PCI_DEVICE(pdev, VFIOPCIDevice), > >> VMSTATE_MSIX_TEST(pdev, VFIOPCIDevice, vfio_msix_present), > >> VMSTATE_END_OF_LIST() > >> + }, > >> + .subsections = (const VMStateDescription*[]) { > >> + &vmstate_vfio_display, > >> + NULL > >> } > >> }; > >> > >> @@ -3271,6 +3301,19 @@ static void vfio_realize(PCIDevice *pdev, Error **errp) > >> } > >> } > >> > >> + if (vdev->ramfb_migrate == ON_OFF_AUTO_ON && !vdev->enable_ramfb) { > >> + warn_report("x-ramfb-migrate=on but ramfb=off"); > >> + vdev->ramfb_migrate = ON_OFF_AUTO_OFF; > > > > the warning could give a hint about the resultant action taken (i.e., > > forcing off x-ramfb-migrate), but don't repost just for that; it's a nit. > > yes. > > How about : > > warn_report("x-ramfb-migrate=on but ramfb=off. Forcing x-ramfb-migrate to off."); Sure, that's better. > > I can amend the patch if you agree. thanks! ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v5 0/3] ramfb: migration support 2023-10-09 6:32 [PATCH v5 0/3] ramfb: migration support marcandre.lureau ` (2 preceding siblings ...) 2023-10-09 6:32 ` [PATCH v5 3/3] hw/vfio: add ramfb " marcandre.lureau @ 2023-10-10 12:48 ` Cédric Le Goater 2023-10-10 13:46 ` Marc-André Lureau 3 siblings, 1 reply; 12+ messages in thread From: Cédric Le Goater @ 2023-10-10 12:48 UTC (permalink / raw) To: marcandre.lureau, qemu-devel; +Cc: lersek, Gerd Hoffmann Hello, On 10/9/23 08:32, marcandre.lureau@redhat.com wrote: > From: Marc-André Lureau <marcandre.lureau@redhat.com> > > Hi, > > Implement RAMFB migration, and add properties to enable it only on >= 8.2 > machines, + a few related cleanups. Should this series go in vfio-next ? Thanks, C. > > thanks > > v5: > - add missing VMSTATE_END_OF_LIST > - changed ramfb=off & x-mig=on user config error to a warning > - add r-b tags > > v4: (Laszlo review and suggestions) > - change migrate_needed() to assert(ramfb_exists) > - rename vfio_display_needed() to vfio_display_migration_needed(), > update the condition and associated comment > - move the ramfb-migrate option check and add a check for ramfb=on > - add a stub to fix compilation on some architectures > > v3: > - add a "x-" prefix to properties, as they are not meant for users. > - RAMFB now exports a ramfb_vmstate for actual devices to include > - VFIOPCIDevice now has a VFIODisplay optional subsection whenever ramfb > migration is required (untested) > > Fixes: > https://bugzilla.redhat.com/show_bug.cgi?id=1859424 > > Marc-André Lureau (3): > ramfb: add migration support > ramfb-standalone: add migration support > hw/vfio: add ramfb migration support > > hw/vfio/pci.h | 3 +++ > include/hw/display/ramfb.h | 4 ++++ > hw/core/machine.c | 2 ++ > hw/display/ramfb-standalone.c | 27 +++++++++++++++++++++ > hw/display/ramfb.c | 19 +++++++++++++++ > hw/vfio/display.c | 21 +++++++++++++++++ > hw/vfio/pci.c | 44 +++++++++++++++++++++++++++++++++++ > stubs/ramfb.c | 2 ++ > 8 files changed, 122 insertions(+) > ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v5 0/3] ramfb: migration support 2023-10-10 12:48 ` [PATCH v5 0/3] ramfb: " Cédric Le Goater @ 2023-10-10 13:46 ` Marc-André Lureau 2023-10-11 17:09 ` Cédric Le Goater 0 siblings, 1 reply; 12+ messages in thread From: Marc-André Lureau @ 2023-10-10 13:46 UTC (permalink / raw) To: Cédric Le Goater; +Cc: qemu-devel, lersek, Gerd Hoffmann Hi On Tue, Oct 10, 2023 at 4:49 PM Cédric Le Goater <clg@redhat.com> wrote: > > Hello, > > On 10/9/23 08:32, marcandre.lureau@redhat.com wrote: > > From: Marc-André Lureau <marcandre.lureau@redhat.com> > > > > Hi, > > > > Implement RAMFB migration, and add properties to enable it only on >= 8.2 > > machines, + a few related cleanups. > > Should this series go in vfio-next ? > That's a good option for me. thanks -- Marc-André Lureau ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v5 0/3] ramfb: migration support 2023-10-10 13:46 ` Marc-André Lureau @ 2023-10-11 17:09 ` Cédric Le Goater 2023-10-12 9:18 ` Gerd Hoffmann 0 siblings, 1 reply; 12+ messages in thread From: Cédric Le Goater @ 2023-10-11 17:09 UTC (permalink / raw) To: Marc-André Lureau; +Cc: qemu-devel, lersek, Gerd Hoffmann On 10/10/23 15:46, Marc-André Lureau wrote: > Hi > > On Tue, Oct 10, 2023 at 4:49 PM Cédric Le Goater <clg@redhat.com> wrote: >> >> Hello, >> >> On 10/9/23 08:32, marcandre.lureau@redhat.com wrote: >>> From: Marc-André Lureau <marcandre.lureau@redhat.com> >>> >>> Hi, >>> >>> Implement RAMFB migration, and add properties to enable it only on >= 8.2 >>> machines, + a few related cleanups. >> >> Should this series go in vfio-next ? >> > > That's a good option for me. Gerd, fine with you ? Thanks, C. ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v5 0/3] ramfb: migration support 2023-10-11 17:09 ` Cédric Le Goater @ 2023-10-12 9:18 ` Gerd Hoffmann 2023-10-12 10:11 ` Cédric Le Goater 0 siblings, 1 reply; 12+ messages in thread From: Gerd Hoffmann @ 2023-10-12 9:18 UTC (permalink / raw) To: Cédric Le Goater; +Cc: Marc-André Lureau, qemu-devel, lersek On Wed, Oct 11, 2023 at 07:09:19PM +0200, Cédric Le Goater wrote: > On 10/10/23 15:46, Marc-André Lureau wrote: > > Hi > > > > On Tue, Oct 10, 2023 at 4:49 PM Cédric Le Goater <clg@redhat.com> wrote: > > > > > > Hello, > > > > > > On 10/9/23 08:32, marcandre.lureau@redhat.com wrote: > > > > From: Marc-André Lureau <marcandre.lureau@redhat.com> > > > > > > > > Hi, > > > > > > > > Implement RAMFB migration, and add properties to enable it only on >= 8.2 > > > > machines, + a few related cleanups. > > > > > > Should this series go in vfio-next ? > > > > > > > That's a good option for me. > > Gerd, fine with you ? Yes. Acked-by: Gerd Hoffmann <kraxel@redhat.com> take care, Gerd ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v5 0/3] ramfb: migration support 2023-10-12 9:18 ` Gerd Hoffmann @ 2023-10-12 10:11 ` Cédric Le Goater 0 siblings, 0 replies; 12+ messages in thread From: Cédric Le Goater @ 2023-10-12 10:11 UTC (permalink / raw) To: Gerd Hoffmann; +Cc: Marc-André Lureau, qemu-devel, lersek On 10/12/23 11:18, Gerd Hoffmann wrote: > On Wed, Oct 11, 2023 at 07:09:19PM +0200, Cédric Le Goater wrote: >> On 10/10/23 15:46, Marc-André Lureau wrote: >>> Hi >>> >>> On Tue, Oct 10, 2023 at 4:49 PM Cédric Le Goater <clg@redhat.com> wrote: >>>> >>>> Hello, >>>> >>>> On 10/9/23 08:32, marcandre.lureau@redhat.com wrote: >>>>> From: Marc-André Lureau <marcandre.lureau@redhat.com> >>>>> >>>>> Hi, >>>>> >>>>> Implement RAMFB migration, and add properties to enable it only on >= 8.2 >>>>> machines, + a few related cleanups. >>>> >>>> Should this series go in vfio-next ? >>>> >>> >>> That's a good option for me. >> >> Gerd, fine with you ? > > Yes. > > Acked-by: Gerd Hoffmann <kraxel@redhat.com> Thanks, Applied to vfio-next. C. ^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2023-10-12 10:13 UTC | newest] Thread overview: 12+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2023-10-09 6:32 [PATCH v5 0/3] ramfb: migration support marcandre.lureau 2023-10-09 6:32 ` [PATCH v5 1/3] ramfb: add " marcandre.lureau 2023-10-09 6:32 ` [PATCH v5 2/3] ramfb-standalone: " marcandre.lureau 2023-10-09 6:32 ` [PATCH v5 3/3] hw/vfio: add ramfb " marcandre.lureau 2023-10-09 10:19 ` Laszlo Ersek 2023-10-10 7:03 ` Cédric Le Goater 2023-10-10 7:08 ` Marc-André Lureau 2023-10-10 12:48 ` [PATCH v5 0/3] ramfb: " Cédric Le Goater 2023-10-10 13:46 ` Marc-André Lureau 2023-10-11 17:09 ` Cédric Le Goater 2023-10-12 9:18 ` Gerd Hoffmann 2023-10-12 10:11 ` Cédric Le Goater
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).