diff mbox series

[XEN,for-4.15] libxl: Replace deprecated QMP command by "query-cpus-fast"

Message ID 20210322141744.522041-1-anthony.perard@citrix.com (mailing list archive)
State New, archived
Headers show
Series [XEN,for-4.15] libxl: Replace deprecated QMP command by "query-cpus-fast" | expand

Commit Message

Anthony PERARD March 22, 2021, 2:17 p.m. UTC
We use the deprecated QMP command "query-cpus" which will be remove in
the upcoming QEMU 6.0 release. There's a replacement which is
"query-cpus-fast", and have been available since QEMU 2.12 (April
2018).

In order to been able to keep using recent version of QEMU, this patch
replace the deprecated command by the newer version. And because we
are in the "feature freeze" period, this patch is kept simple without
fallback (which could have been used when "query-cpus-fast" wasn't
available).

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
---
 tools/libs/light/libxl_domain.c | 22 +++++++++++-----------
 1 file changed, 11 insertions(+), 11 deletions(-)

Comments

Ian Jackson March 22, 2021, 2:32 p.m. UTC | #1
<Anthony PERARD writes ("[XEN PATCH for-4.15] libxl: Replace deprecated QMP command by "query-cpus-fast""):
> We use the deprecated QMP command "query-cpus" which will be remove in
> the upcoming QEMU 6.0 release. There's a replacement which is
> "query-cpus-fast", and have been available since QEMU 2.12 (April
> 2018).
> 
> In order to been able to keep using recent version of QEMU, this patch
> replace the deprecated command by the newer version. And because we
> are in the "feature freeze" period, this patch is kept simple without
> fallback (which could have been used when "query-cpus-fast" wasn't
> available).

Thank you.

I observe that Daniel Berrange also wrote a libxl patch to solve this
problem.

I read the interdiff and the only difference is that Anthony's patch
changes the internal function name to qmp_parse_query_cpus_fast
whereas Daniel's doesn't.

This gives me a fairly high confidence in the patch :-).

Acked-by: Ian Jackson <iwj@xenproject.org>
Release-Acked-by: Ian Jackson <iwj@xenproject.org>

Ian.
Jan Beulich March 22, 2021, 2:47 p.m. UTC | #2
On 22.03.2021 15:17, Anthony PERARD wrote:
> We use the deprecated QMP command "query-cpus" which will be remove in
> the upcoming QEMU 6.0 release. There's a replacement which is
> "query-cpus-fast", and have been available since QEMU 2.12 (April
> 2018).

IOW the tool stack then isn't going to work anymore on a system with
a distro provided qemu just around 3 years old?

Jan
Ian Jackson March 22, 2021, 3 p.m. UTC | #3
Jan Beulich writes ("Re: [XEN PATCH for-4.15] libxl: Replace deprecated QMP command by "query-cpus-fast""):
> On 22.03.2021 15:17, Anthony PERARD wrote:
> > We use the deprecated QMP command "query-cpus" which will be remove in
> > the upcoming QEMU 6.0 release. There's a replacement which is
> > "query-cpus-fast", and have been available since QEMU 2.12 (April
> > 2018).
> 
> IOW the tool stack then isn't going to work anymore on a system with
> a distro provided qemu just around 3 years old?

4.15.0 won't, unless we take the further "do it both ways" patch.  I
think my inclination is to do that after .0.

That doesn't seem so unreasonable for a newly-released Xen.

Ian.
Olaf Hering April 1, 2021, 2:24 p.m. UTC | #4
Am Mon, 22 Mar 2021 14:17:44 +0000
schrieb Anthony PERARD <anthony.perard@citrix.com>:

> We use the deprecated QMP command "query-cpus"

There is also the already removed "cpu-add" command used, which apparently has to be replaced by "device_add".

Do you happen to have a fix for this as well?


Another thread suggests that more deprecated commands are used. I think they have to be adjusted as well, ideally before they finally disappear from upstream qemu.

Olaf
Anthony PERARD April 7, 2021, 3:03 p.m. UTC | #5
On Thu, Apr 01, 2021 at 04:24:54PM +0200, Olaf Hering wrote:
> Am Mon, 22 Mar 2021 14:17:44 +0000
> schrieb Anthony PERARD <anthony.perard@citrix.com>:
> 
> > We use the deprecated QMP command "query-cpus"
> 
> There is also the already removed "cpu-add" command used, which apparently has to be replaced by "device_add".
> 
> Do you happen to have a fix for this as well?
>
> Another thread suggests that more deprecated commands are used. I think they have to be adjusted as well, ideally before they finally disappear from upstream qemu.

I'm working on a fix for cpu hotplug and other deprecated/removed
things, I'll try to propose the patches upstream soon after the release
of Xen.

Thanks,
diff mbox series

Patch

diff --git a/tools/libs/light/libxl_domain.c b/tools/libs/light/libxl_domain.c
index 5d4ec9071160..e32e1cd39fea 100644
--- a/tools/libs/light/libxl_domain.c
+++ b/tools/libs/light/libxl_domain.c
@@ -1740,23 +1740,23 @@  static int libxl__set_vcpuonline_xenstore(libxl__gc *gc, uint32_t domid,
     return rc;
 }
 
-static int qmp_parse_query_cpus(libxl__gc *gc,
-                                libxl_domid domid,
-                                const libxl__json_object *response,
-                                libxl_bitmap *const map)
+static int qmp_parse_query_cpus_fast(libxl__gc *gc,
+                                     libxl_domid domid,
+                                     const libxl__json_object *response,
+                                     libxl_bitmap *const map)
 {
     int i;
     const libxl__json_object *cpu;
 
     libxl_bitmap_set_none(map);
-    /* Parse response to QMP command "query-cpus":
-     * [ { 'CPU': 'int',...} ]
+    /* Parse response to QMP command "query-cpus-fast":
+     * [ { 'cpu-index': 'int',...} ]
      */
     for (i = 0; (cpu = libxl__json_array_get(response, i)); i++) {
         unsigned int cpu_index;
         const libxl__json_object *o;
 
-        o = libxl__json_map_get("CPU", cpu, JSON_INTEGER);
+        o = libxl__json_map_get("cpu-index", cpu, JSON_INTEGER);
         if (!o) {
             LOGD(ERROR, domid, "Failed to retrieve CPU index.");
             return ERROR_QEMU_API;
@@ -1841,7 +1841,7 @@  int libxl_set_vcpuonline(libxl_ctx *ctx, uint32_t domid,
                                              LIBXL_QMP_CMD_TIMEOUT * 1000);
             if (rc) goto out;
             qmp->callback = set_vcpuonline_qmp_cpus_queried;
-            rc = libxl__ev_qmp_send(egc, qmp, "query-cpus", NULL);
+            rc = libxl__ev_qmp_send(egc, qmp, "query-cpus-fast", NULL);
             if (rc) goto out;
             return AO_INPROGRESS;
         default:
@@ -1876,7 +1876,7 @@  static void set_vcpuonline_qmp_cpus_queried(libxl__egc *egc,
     if (rc) goto out;
 
     libxl_bitmap_alloc(CTX, &current_map, svos->info.vcpu_max_id + 1);
-    rc = qmp_parse_query_cpus(gc, qmp->domid, response, &current_map);
+    rc = qmp_parse_query_cpus_fast(gc, qmp->domid, response, &current_map);
     if (rc) goto out;
 
     libxl_bitmap_copy_alloc(CTX, final_map, svos->cpumap);
@@ -2199,7 +2199,7 @@  static void retrieve_domain_configuration_lock_acquired(
         libxl_bitmap_alloc(CTX, &rdcs->qemuu_cpus,
                            d_config->b_info.max_vcpus);
         rdcs->qmp.callback = retrieve_domain_configuration_cpu_queried;
-        rc = libxl__ev_qmp_send(egc, &rdcs->qmp, "query-cpus", NULL);
+        rc = libxl__ev_qmp_send(egc, &rdcs->qmp, "query-cpus-fast", NULL);
         if (rc) goto out;
         has_callback = true;
     }
@@ -2220,7 +2220,7 @@  static void retrieve_domain_configuration_cpu_queried(
 
     if (rc) goto out;
 
-    rc = qmp_parse_query_cpus(gc, qmp->domid, response, &rdcs->qemuu_cpus);
+    rc = qmp_parse_query_cpus_fast(gc, qmp->domid, response, &rdcs->qemuu_cpus);
 
 out:
     retrieve_domain_configuration_end(egc, rdcs, rc);