On Tue, Nov 25, 2025 at 09:20:55AM +0100, Jürgen Groß wrote: > On 19.11.25 23:47, Jason Andryuk wrote: > > The goal is to fix s2idle and S3 for Xen PV devices. A domain resuming > > from s3 or s2idle disconnects its PV devices during resume. The > > backends are not expecting this and do not reconnect. > > > > b3e96c0c7562 ("xen: use freeze/restore/thaw PM events for suspend/ > > resume/chkpt") changed xen_suspend()/do_suspend() from > > PMSG_SUSPEND/PMSG_RESUME to PMSG_FREEZE/PMSG_THAW/PMSG_RESTORE, but the > > suspend/resume callbacks remained. > > > > .freeze/restore are used with hiberation where Linux restarts in a new > > place in the future. .suspend/resume are useful for runtime power > > management for the duration of a boot. > > > > The current behavior of the callbacks works for an xl save/restore or > > live migration where the domain is restored/migrated to a new location > > and connecting to a not-already-connected backend. > > > > Change xenbus_pm_ops to use .freeze/thaw/restore and drop the > > .suspend/resume hook. This matches the use in drivers/xen/manage.c for > > save/restore and live migration. With .suspend/resume empty, PV devices > > are left connected during s2idle and s3, so PV devices are not changed > > and work after resume. > > > > Signed-off-by: Jason Andryuk > > Acked-by: Juergen Gross > > Marek, could you please give this patch a try with QubesOS? I think this > patch should be verified not to break your use cases regarding suspend / > resume. Sure, but I can't promise it will be this week, I have some deadlines to meet... > Juergen > > > --- > > drivers/xen/xenbus/xenbus_probe_frontend.c | 4 +--- > > 1 file changed, 1 insertion(+), 3 deletions(-) > > > > diff --git a/drivers/xen/xenbus/xenbus_probe_frontend.c b/drivers/xen/xenbus/xenbus_probe_frontend.c > > index 6d1819269cbe..199917b6f77c 100644 > > --- a/drivers/xen/xenbus/xenbus_probe_frontend.c > > +++ b/drivers/xen/xenbus/xenbus_probe_frontend.c > > @@ -148,11 +148,9 @@ static void xenbus_frontend_dev_shutdown(struct device *_dev) > > } > > static const struct dev_pm_ops xenbus_pm_ops = { > > - .suspend = xenbus_dev_suspend, > > - .resume = xenbus_frontend_dev_resume, > > .freeze = xenbus_dev_suspend, > > .thaw = xenbus_dev_cancel, > > - .restore = xenbus_dev_resume, > > + .restore = xenbus_frontend_dev_resume, > > }; > > static struct xen_bus_type xenbus_frontend = { > -- Best Regards, Marek Marczykowski-Górecki Invisible Things Lab