1*1861993fSPhilippe Mathieu-Daudé /* 2*1861993fSPhilippe Mathieu-Daudé * QMP commands related to accelerators 3*1861993fSPhilippe Mathieu-Daudé * 4*1861993fSPhilippe Mathieu-Daudé * Copyright (c) Linaro 5*1861993fSPhilippe Mathieu-Daudé * 6*1861993fSPhilippe Mathieu-Daudé * SPDX-License-Identifier: GPL-2.0-or-later 7*1861993fSPhilippe Mathieu-Daudé */ 8*1861993fSPhilippe Mathieu-Daudé 9*1861993fSPhilippe Mathieu-Daudé #include "qemu/osdep.h" 10*1861993fSPhilippe Mathieu-Daudé #include "qemu/accel.h" 11*1861993fSPhilippe Mathieu-Daudé #include "qapi/type-helpers.h" 12*1861993fSPhilippe Mathieu-Daudé #include "qapi/qapi-commands-accelerator.h" 13*1861993fSPhilippe Mathieu-Daudé #include "accel/accel-ops.h" 14*1861993fSPhilippe Mathieu-Daudé #include "accel/accel-cpu-ops.h" 15*1861993fSPhilippe Mathieu-Daudé #include "hw/core/cpu.h" 16*1861993fSPhilippe Mathieu-Daudé qmp_x_accel_stats(Error ** errp)17*1861993fSPhilippe Mathieu-DaudéHumanReadableText *qmp_x_accel_stats(Error **errp) 18*1861993fSPhilippe Mathieu-Daudé { 19*1861993fSPhilippe Mathieu-Daudé AccelState *accel = current_accel(); 20*1861993fSPhilippe Mathieu-Daudé AccelClass *acc = ACCEL_GET_CLASS(accel); 21*1861993fSPhilippe Mathieu-Daudé g_autoptr(GString) buf = g_string_new(""); 22*1861993fSPhilippe Mathieu-Daudé 23*1861993fSPhilippe Mathieu-Daudé if (acc->get_stats) { 24*1861993fSPhilippe Mathieu-Daudé acc->get_stats(accel, buf); 25*1861993fSPhilippe Mathieu-Daudé } 26*1861993fSPhilippe Mathieu-Daudé if (acc->ops->get_vcpu_stats) { 27*1861993fSPhilippe Mathieu-Daudé CPUState *cpu; 28*1861993fSPhilippe Mathieu-Daudé 29*1861993fSPhilippe Mathieu-Daudé CPU_FOREACH(cpu) { 30*1861993fSPhilippe Mathieu-Daudé acc->ops->get_vcpu_stats(cpu, buf); 31*1861993fSPhilippe Mathieu-Daudé } 32*1861993fSPhilippe Mathieu-Daudé } 33*1861993fSPhilippe Mathieu-Daudé 34*1861993fSPhilippe Mathieu-Daudé return human_readable_text_from_str(buf); 35*1861993fSPhilippe Mathieu-Daudé } 36