[PATCH v4 3/6] xen: decouple generic xen code from legacy backends codebase

Volodymyr Babchuk posted 6 patches 12 months ago
[PATCH v4 3/6] xen: decouple generic xen code from legacy backends codebase
Posted by Volodymyr Babchuk 12 months ago
In xen-all.c there are unneeded dependencies on xen-legacy-backend.c:

 - xen_init() uses xen_pv_printf() to report errors, but it does not
 provide a pointer to the struct XenLegacyDevice, so it is kind of
 useless, we can use standard error_report() instead.

 - xen-all.c has function xenstore_record_dm_state() which uses global
 variable "xenstore" defined and initialized in xen-legacy-backend.c
 It is used exactly once, so we can just open a new connection to the
 xenstore, update DM state and close connection back.

Those two changes allows us to remove xen-legacy-backend.c at all,
what should be done in the future anyways. But right now this patch
moves us one step close to have QEMU build without legacy Xen
backends.

Signed-off-by: Volodymyr Babchuk <volodymyr_babchuk@epam.com>

---

In v4:

 - New in v4, previous was part of "xen: add option to disable legacy
 backends"
 - Do not move xenstore global variable from xen-legacy-backend.c,
   instead use a local variable.
---
 accel/xen/xen-all.c | 16 ++++++++++++----
 1 file changed, 12 insertions(+), 4 deletions(-)

diff --git a/accel/xen/xen-all.c b/accel/xen/xen-all.c
index 5ff0cb8bd9..6c2342581f 100644
--- a/accel/xen/xen-all.c
+++ b/accel/xen/xen-all.c
@@ -33,12 +33,20 @@ xendevicemodel_handle *xen_dmod;
 static void xenstore_record_dm_state(const char *state)
 {
     char path[50];
+    struct qemu_xs_handle *xsh = qemu_xen_xs_open();
+
+    if (!xsh) {
+        error_report("error opening xenstore");
+        exit(1);
+    }
 
     snprintf(path, sizeof (path), "device-model/%u/state", xen_domid);
-    if (!qemu_xen_xs_write(xenstore, XBT_NULL, path, state, strlen(state))) {
+    if (!qemu_xen_xs_write(xsh, XBT_NULL, path, state, strlen(state))) {
         error_report("error recording dm state");
         exit(1);
     }
+
+    qemu_xen_xs_close(xsh);
 }
 
 
@@ -80,18 +88,18 @@ static int xen_init(MachineState *ms)
 
     xen_xc = xc_interface_open(0, 0, 0);
     if (xen_xc == NULL) {
-        xen_pv_printf(NULL, 0, "can't open xen interface\n");
+        error_report("can't open xen interface\n");
         return -1;
     }
     xen_fmem = xenforeignmemory_open(0, 0);
     if (xen_fmem == NULL) {
-        xen_pv_printf(NULL, 0, "can't open xen fmem interface\n");
+        error_report("can't open xen fmem interface\n");
         xc_interface_close(xen_xc);
         return -1;
     }
     xen_dmod = xendevicemodel_open(0, 0);
     if (xen_dmod == NULL) {
-        xen_pv_printf(NULL, 0, "can't open xen devicemodel interface\n");
+        error_report("can't open xen devicemodel interface\n");
         xenforeignmemory_close(xen_fmem);
         xc_interface_close(xen_xc);
         return -1;
-- 
2.42.0
Re: [PATCH v4 3/6] xen: decouple generic xen code from legacy backends codebase
Posted by Paul Durrant 11 months, 4 weeks ago
On 02/12/2023 01:41, Volodymyr Babchuk wrote:
> In xen-all.c there are unneeded dependencies on xen-legacy-backend.c:
> 
>   - xen_init() uses xen_pv_printf() to report errors, but it does not
>   provide a pointer to the struct XenLegacyDevice, so it is kind of
>   useless, we can use standard error_report() instead.
> 
>   - xen-all.c has function xenstore_record_dm_state() which uses global
>   variable "xenstore" defined and initialized in xen-legacy-backend.c
>   It is used exactly once, so we can just open a new connection to the
>   xenstore, update DM state and close connection back.
> 
> Those two changes allows us to remove xen-legacy-backend.c at all,
> what should be done in the future anyways. But right now this patch
> moves us one step close to have QEMU build without legacy Xen
> backends.
> 
> Signed-off-by: Volodymyr Babchuk <volodymyr_babchuk@epam.com>
> 
> ---
> 
> In v4:
> 
>   - New in v4, previous was part of "xen: add option to disable legacy
>   backends"
>   - Do not move xenstore global variable from xen-legacy-backend.c,
>     instead use a local variable.
> ---
>   accel/xen/xen-all.c | 16 ++++++++++++----
>   1 file changed, 12 insertions(+), 4 deletions(-)
> 

Reviewed-by: Paul Durrant <paul@xen.org>