From: "Philippe Mathieu-Daudé" <philmd@redhat.com>
To: Paolo Bonzini <pbonzini@redhat.com>, qemu-devel@nongnu.org
Cc: thuth@redhat.com, elmarco@redhat.com
Subject: Re: [PATCH v2 17/18] kvm: introduce kvm_kernel_irqchip_* functions
Date: Tue, 10 Dec 2019 13:02:56 +0100 [thread overview]
Message-ID: <e2aa550a-1012-092d-aa1c-816f5e7a4b6c@redhat.com> (raw)
In-Reply-To: <1575903705-12925-18-git-send-email-pbonzini@redhat.com>
On 12/9/19 4:01 PM, Paolo Bonzini wrote:
> The KVMState struct is opaque, so provide accessors for the fields
> that will be moved from current_machine to the accelerator. For now
> they just forward to the machine object, but this will change.
>
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
> ---
> accel/kvm/kvm-all.c | 23 +++++++++++++++++++----
> hw/ppc/e500.c | 4 ++--
> hw/ppc/spapr_irq.c | 10 +++++-----
> include/sysemu/kvm.h | 7 +++++--
> target/arm/kvm.c | 8 ++++----
> target/i386/kvm.c | 4 ++--
> target/mips/kvm.c | 2 +-
> target/ppc/kvm.c | 2 +-
> target/s390x/kvm.c | 2 +-
> 9 files changed, 40 insertions(+), 22 deletions(-)
>
> diff --git a/accel/kvm/kvm-all.c b/accel/kvm/kvm-all.c
> index f0b9294..c0a6351 100644
> --- a/accel/kvm/kvm-all.c
> +++ b/accel/kvm/kvm-all.c
> @@ -1760,7 +1760,7 @@ void kvm_irqchip_set_qemuirq_gsi(KVMState *s, qemu_irq irq, int gsi)
> g_hash_table_insert(s->gsimap, irq, GINT_TO_POINTER(gsi));
> }
>
> -static void kvm_irqchip_create(MachineState *machine, KVMState *s)
> +static void kvm_irqchip_create(KVMState *s)
> {
> int ret;
>
> @@ -1778,9 +1778,9 @@ static void kvm_irqchip_create(MachineState *machine, KVMState *s)
>
> /* First probe and see if there's a arch-specific hook to create the
> * in-kernel irqchip for us */
> - ret = kvm_arch_irqchip_create(machine, s);
> + ret = kvm_arch_irqchip_create(s);
> if (ret == 0) {
> - if (machine_kernel_irqchip_split(machine)) {
> + if (kvm_kernel_irqchip_split()) {
> perror("Split IRQ chip mode not supported.");
> exit(1);
> } else {
> @@ -2052,7 +2052,7 @@ static int kvm_init(MachineState *ms)
> }
>
> if (machine_kernel_irqchip_allowed(ms)) {
> - kvm_irqchip_create(ms, s);
> + kvm_irqchip_create(s);
> }
>
> if (kvm_eventfds_allowed) {
> @@ -2969,6 +2969,21 @@ static void kvm_set_kvm_shadow_mem(Object *obj, Visitor *v,
> s->kvm_shadow_mem = value;
> }
>
> +bool kvm_kernel_irqchip_allowed(void)
> +{
> + return machine_kernel_irqchip_allowed(current_machine);
> +}
> +
> +bool kvm_kernel_irqchip_required(void)
> +{
> + return machine_kernel_irqchip_required(current_machine);
> +}
> +
> +bool kvm_kernel_irqchip_split(void)
> +{
> + return machine_kernel_irqchip_split(current_machine);
> +}
> +
> static void kvm_accel_instance_init(Object *obj)
> {
> KVMState *s = KVM_STATE(obj);
> diff --git a/hw/ppc/e500.c b/hw/ppc/e500.c
> index 91cd4c2..928efaa 100644
> --- a/hw/ppc/e500.c
> +++ b/hw/ppc/e500.c
> @@ -801,10 +801,10 @@ static DeviceState *ppce500_init_mpic(PPCE500MachineState *pms,
> if (kvm_enabled()) {
> Error *err = NULL;
>
> - if (machine_kernel_irqchip_allowed(machine)) {
> + if (kvm_kernel_irqchip_allowed()) {
> dev = ppce500_init_mpic_kvm(pmc, irqs, &err);
> }
> - if (machine_kernel_irqchip_required(machine) && !dev) {
> + if (kvm_kernel_irqchip_required() && !dev) {
> error_reportf_err(err,
> "kernel_irqchip requested but unavailable: ");
> exit(1);
> diff --git a/hw/ppc/spapr_irq.c b/hw/ppc/spapr_irq.c
> index d6bb7fd..c3f8870 100644
> --- a/hw/ppc/spapr_irq.c
> +++ b/hw/ppc/spapr_irq.c
> @@ -77,9 +77,9 @@ int spapr_irq_init_kvm(int (*fn)(SpaprInterruptController *, Error **),
> MachineState *machine = MACHINE(qdev_get_machine());
> Error *local_err = NULL;
>
> - if (kvm_enabled() && machine_kernel_irqchip_allowed(machine)) {
> + if (kvm_enabled() && kvm_kernel_irqchip_allowed()) {
> if (fn(intc, &local_err) < 0) {
> - if (machine_kernel_irqchip_required(machine)) {
> + if (kvm_kernel_irqchip_required()) {
> error_prepend(&local_err,
> "kernel_irqchip requested but unavailable: ");
> error_propagate(errp, local_err);
> @@ -184,7 +184,7 @@ static int spapr_irq_check(SpaprMachineState *spapr, Error **errp)
> */
> if (kvm_enabled() &&
> spapr->irq == &spapr_irq_dual &&
> - machine_kernel_irqchip_required(machine) &&
> + kvm_kernel_irqchip_required() &&
> xics_kvm_has_broken_disconnect(spapr)) {
> error_setg(errp, "KVM is too old to support ic-mode=dual,kernel-irqchip=on");
> return -1;
> @@ -290,12 +290,12 @@ void spapr_irq_init(SpaprMachineState *spapr, Error **errp)
> MachineState *machine = MACHINE(spapr);
> SpaprMachineClass *smc = SPAPR_MACHINE_GET_CLASS(spapr);
>
> - if (machine_kernel_irqchip_split(machine)) {
> + if (kvm_enabled() && kvm_kernel_irqchip_split()) {
> error_setg(errp, "kernel_irqchip split mode not supported on pseries");
> return;
> }
>
> - if (!kvm_enabled() && machine_kernel_irqchip_required(machine)) {
> + if (!kvm_enabled() && kvm_kernel_irqchip_required()) {
> error_setg(errp,
> "kernel_irqchip requested but only available with KVM");
> return;
> diff --git a/include/sysemu/kvm.h b/include/sysemu/kvm.h
> index 9fe233b..aaf2a50 100644
> --- a/include/sysemu/kvm.h
> +++ b/include/sysemu/kvm.h
> @@ -519,10 +519,13 @@ void kvm_pc_gsi_handler(void *opaque, int n, int level);
> void kvm_pc_setup_irq_routing(bool pci_enabled);
> void kvm_init_irq_routing(KVMState *s);
>
> +bool kvm_kernel_irqchip_allowed(void);
> +bool kvm_kernel_irqchip_required(void);
> +bool kvm_kernel_irqchip_split(void);
> +
> /**
> * kvm_arch_irqchip_create:
> * @KVMState: The KVMState pointer
> - * @MachineState: The MachineState pointer
> *
> * Allow architectures to create an in-kernel irq chip themselves.
> *
> @@ -530,7 +533,7 @@ void kvm_init_irq_routing(KVMState *s);
> * 0: irq chip was not created
> * > 0: irq chip was created
> */
> -int kvm_arch_irqchip_create(MachineState *ms, KVMState *s);
> +int kvm_arch_irqchip_create(KVMState *s);
>
> /**
> * kvm_set_one_reg - set a register value in KVM via KVM_SET_ONE_REG ioctl
> diff --git a/target/arm/kvm.c b/target/arm/kvm.c
> index 5b82cef..b87b59a 100644
> --- a/target/arm/kvm.c
> +++ b/target/arm/kvm.c
> @@ -741,11 +741,11 @@ void kvm_arch_init_irq_routing(KVMState *s)
> {
> }
>
> -int kvm_arch_irqchip_create(MachineState *ms, KVMState *s)
> +int kvm_arch_irqchip_create(KVMState *s)
> {
> - if (machine_kernel_irqchip_split(ms)) {
> - perror("-machine kernel_irqchip=split is not supported on ARM.");
> - exit(1);
> + if (kvm_kernel_irqchip_split()) {
> + perror("-machine kernel_irqchip=split is not supported on ARM.");
> + exit(1);
> }
>
> /* If we can create the VGIC using the newer device control API, we
> diff --git a/target/i386/kvm.c b/target/i386/kvm.c
> index 62ce681..ef63f3a 100644
> --- a/target/i386/kvm.c
> +++ b/target/i386/kvm.c
> @@ -4494,10 +4494,10 @@ void kvm_arch_init_irq_routing(KVMState *s)
> }
> }
>
> -int kvm_arch_irqchip_create(MachineState *ms, KVMState *s)
> +int kvm_arch_irqchip_create(KVMState *s)
> {
> int ret;
> - if (machine_kernel_irqchip_split(ms)) {
> + if (kvm_kernel_irqchip_split()) {
> ret = kvm_vm_enable_cap(s, KVM_CAP_SPLIT_IRQCHIP, 0, 24);
> if (ret) {
> error_report("Could not enable split irqchip mode: %s",
> diff --git a/target/mips/kvm.c b/target/mips/kvm.c
> index 578bc14..de3e26e 100644
> --- a/target/mips/kvm.c
> +++ b/target/mips/kvm.c
> @@ -57,7 +57,7 @@ int kvm_arch_init(MachineState *ms, KVMState *s)
> return 0;
> }
>
> -int kvm_arch_irqchip_create(MachineState *ms, KVMState *s)
> +int kvm_arch_irqchip_create(KVMState *s)
> {
> return 0;
> }
> diff --git a/target/ppc/kvm.c b/target/ppc/kvm.c
> index c77f984..461dc6d 100644
> --- a/target/ppc/kvm.c
> +++ b/target/ppc/kvm.c
> @@ -152,7 +152,7 @@ int kvm_arch_init(MachineState *ms, KVMState *s)
> return 0;
> }
>
> -int kvm_arch_irqchip_create(MachineState *ms, KVMState *s)
> +int kvm_arch_irqchip_create(KVMState *s)
> {
> return 0;
> }
> diff --git a/target/s390x/kvm.c b/target/s390x/kvm.c
> index 0c9d14b..f3a742b 100644
> --- a/target/s390x/kvm.c
> +++ b/target/s390x/kvm.c
> @@ -374,7 +374,7 @@ int kvm_arch_init(MachineState *ms, KVMState *s)
> return 0;
> }
>
> -int kvm_arch_irqchip_create(MachineState *ms, KVMState *s)
> +int kvm_arch_irqchip_create(KVMState *s)
> {
> return 0;
> }
>
next prev parent reply other threads:[~2019-12-10 12:05 UTC|newest]
Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-12-09 15:01 [PATCH v2 00/18] Complete the implementation of -accel Paolo Bonzini
2019-12-09 15:01 ` [PATCH v2 01/18] memory: do not look at current_machine->accel Paolo Bonzini
2019-12-12 4:39 ` Richard Henderson
2019-12-09 15:01 ` [PATCH v2 02/18] vl: move icount configuration earlier Paolo Bonzini
2019-12-12 4:41 ` Richard Henderson
2019-12-09 15:01 ` [PATCH v2 03/18] tcg: move qemu_tcg_configure to accel/tcg/tcg-all.c Paolo Bonzini
2019-12-10 11:55 ` Philippe Mathieu-Daudé
2019-12-10 12:05 ` Marc-André Lureau
2019-12-12 4:47 ` Richard Henderson
2019-12-09 15:01 ` [PATCH v2 04/18] vl: extract accelerator option processing to a separate function Paolo Bonzini
2019-12-10 11:56 ` Philippe Mathieu-Daudé
2019-12-09 15:01 ` [PATCH v2 05/18] vl: merge -accel processing into configure_accelerators Paolo Bonzini
2019-12-10 11:57 ` Philippe Mathieu-Daudé
2019-12-09 15:01 ` [PATCH v2 06/18] accel: compile accel/accel.c just once Paolo Bonzini
2019-12-10 11:58 ` Philippe Mathieu-Daudé
2019-12-09 15:01 ` [PATCH v2 07/18] vl: introduce object_parse_property_opt Paolo Bonzini
2019-12-10 11:53 ` Philippe Mathieu-Daudé
2019-12-09 15:01 ` [PATCH v2 08/18] vl: configure accelerators from -accel options Paolo Bonzini
2019-12-09 15:01 ` [PATCH v2 09/18] vl: warn for unavailable accelerators, clarify messages Paolo Bonzini
2019-12-09 15:01 ` [PATCH v2 10/18] qom: introduce object_register_sugar_prop Paolo Bonzini
2019-12-10 12:36 ` Marc-André Lureau
2019-12-09 15:01 ` [PATCH v2 11/18] qom: add object_new_with_class Paolo Bonzini
2019-12-09 15:31 ` Philippe Mathieu-Daudé
2019-12-09 17:14 ` Paolo Bonzini
2019-12-09 15:01 ` [PATCH v2 12/18] accel: pass object to accel_init_machine Paolo Bonzini
2019-12-09 15:01 ` [PATCH v2 13/18] tcg: convert "-accel threads" to a QOM property Paolo Bonzini
2019-12-09 15:28 ` Philippe Mathieu-Daudé
2019-12-09 15:01 ` [PATCH v2 14/18] tcg: add "-accel tcg, tb-size" and deprecate "-tb-size" Paolo Bonzini
2019-12-09 15:52 ` Philippe Mathieu-Daudé
2019-12-09 17:18 ` Paolo Bonzini
2019-12-10 12:53 ` Marc-André Lureau
2019-12-09 15:01 ` [PATCH v2 15/18] xen: convert "-machine igd-passthru" to an accelerator property Paolo Bonzini
2019-12-09 15:48 ` Philippe Mathieu-Daudé
2019-12-10 12:56 ` Marc-André Lureau
2019-12-10 17:44 ` Paolo Bonzini
2019-12-09 15:01 ` [PATCH v2 16/18] kvm: convert "-machine kvm_shadow_mem" " Paolo Bonzini
2019-12-10 12:01 ` Philippe Mathieu-Daudé
2019-12-09 15:01 ` [PATCH v2 17/18] kvm: introduce kvm_kernel_irqchip_* functions Paolo Bonzini
2019-12-10 12:02 ` Philippe Mathieu-Daudé [this message]
2019-12-09 15:01 ` [PATCH v2 18/18] kvm: convert "-machine kernel_irqchip" to an accelerator property Paolo Bonzini
2019-12-10 12:05 ` Philippe Mathieu-Daudé
2019-12-09 22:42 ` [PATCH v2 00/18] Complete the implementation of -accel no-reply
2019-12-09 22:58 ` no-reply
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=e2aa550a-1012-092d-aa1c-816f5e7a4b6c@redhat.com \
--to=philmd@redhat.com \
--cc=elmarco@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=thuth@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).