All of lore.kernel.org
 help / color / mirror / Atom feed
From: Luiz Capitulino <lcapitulino@redhat.com>
To: "Andreas Färber" <afaerber@suse.de>
Cc: qiaonuohan@cn.fujitsu.com, qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH qom-cpu v4 09/18] cpu: Turn cpu_get_memory_mapping() into a CPUState hook
Date: Tue, 11 Jun 2013 10:56:24 -0400	[thread overview]
Message-ID: <20130611105624.286109b2@redhat.com> (raw)
In-Reply-To: <1370794247-28267-10-git-send-email-afaerber@suse.de>

On Sun,  9 Jun 2013 18:10:38 +0200
Andreas Färber <afaerber@suse.de> wrote:

> Change error reporting from return value to Error argument.
> 
> Signed-off-by: Andreas Färber <afaerber@suse.de>
> ---
>  include/qom/cpu.h                 | 14 ++++++++++++++
>  include/sysemu/memory_mapping.h   |  2 --
>  memory_mapping-stub.c             |  6 ------
>  memory_mapping.c                  |  7 ++++---
>  qom/cpu.c                         | 16 ++++++++++++++++
>  target-i386/arch_memory_mapping.c | 12 +++++++-----
>  target-i386/cpu-qom.h             |  3 +++
>  target-i386/cpu.c                 |  1 +
>  8 files changed, 45 insertions(+), 16 deletions(-)
> 
> diff --git a/include/qom/cpu.h b/include/qom/cpu.h
> index 1f70240..254be2e 100644
> --- a/include/qom/cpu.h
> +++ b/include/qom/cpu.h
> @@ -23,6 +23,7 @@
>  #include <signal.h>
>  #include "hw/qdev-core.h"
>  #include "qemu/thread.h"
> +#include "qemu/typedefs.h"
>  
>  typedef int (*WriteCoreDumpFunction)(void *buf, size_t size, void *opaque);
>  
> @@ -49,6 +50,7 @@ typedef struct CPUState CPUState;
>   * @do_interrupt: Callback for interrupt handling.
>   * @get_arch_id: Callback for getting architecture-dependent CPU ID.
>   * @get_paging_enabled: Callback for inquiring whether paging is enabled.
> + * @get_memory_mapping: Callback for obtaining the memory mappings.
>   * @vmsd: State description for migration.
>   *
>   * Represents a CPU family or model.
> @@ -64,6 +66,8 @@ typedef struct CPUClass {
>      void (*do_interrupt)(CPUState *cpu);
>      int64_t (*get_arch_id)(CPUState *cpu);
>      bool (*get_paging_enabled)(const CPUState *cpu);
> +    void (*get_memory_mapping)(CPUState *cpu, MemoryMappingList *list,
> +                               Error **errp);
>  
>      const struct VMStateDescription *vmsd;
>      int (*write_elf64_note)(WriteCoreDumpFunction f, CPUState *cpu,
> @@ -148,6 +152,16 @@ struct CPUState {
>  bool cpu_paging_enabled(const CPUState *cpu);
>  
>  /**
> + * @cpu: The CPU whose memory mappings are to be obtained.
> + * @list: Where to write the memory mappings to.
> + * @errp: Pointer for reporting an #Error.
> + *
> + * Returns: 0 if successful.
> + */

It turns void now, but you can add:

Reviewed-by: Luiz Capitulino <lcapitulino@redhat.com>

When you respin.

> +void cpu_get_memory_mapping(CPUState *cpu, MemoryMappingList *list,
> +                            Error **errp);
> +
> +/**
>   * cpu_write_elf64_note:
>   * @f: pointer to a function that writes memory to a file
>   * @cpu: The CPU whose memory is to be dumped
> diff --git a/include/sysemu/memory_mapping.h b/include/sysemu/memory_mapping.h
> index 1f71c32..c47e6ee 100644
> --- a/include/sysemu/memory_mapping.h
> +++ b/include/sysemu/memory_mapping.h
> @@ -31,8 +31,6 @@ struct MemoryMappingList {
>      QTAILQ_HEAD(, MemoryMapping) head;
>  };
>  
> -int cpu_get_memory_mapping(MemoryMappingList *list, CPUArchState *env);
> -
>  /*
>   * add or merge the memory region [phys_addr, phys_addr + length) into the
>   * memory mapping's list. The region's virtual address starts with virt_addr,
> diff --git a/memory_mapping-stub.c b/memory_mapping-stub.c
> index 6c0dfeb..989dc00 100644
> --- a/memory_mapping-stub.c
> +++ b/memory_mapping-stub.c
> @@ -19,9 +19,3 @@ int qemu_get_guest_memory_mapping(MemoryMappingList *list)
>  {
>      return -2;
>  }
> -
> -int cpu_get_memory_mapping(MemoryMappingList *list,
> -					                                          CPUArchState *env)
> -{
> -    return -1;
> -}
> diff --git a/memory_mapping.c b/memory_mapping.c
> index 0790aac..9bd24ce 100644
> --- a/memory_mapping.c
> +++ b/memory_mapping.c
> @@ -183,13 +183,14 @@ int qemu_get_guest_memory_mapping(MemoryMappingList *list)
>      CPUArchState *env, *first_paging_enabled_cpu;
>      RAMBlock *block;
>      ram_addr_t offset, length;
> -    int ret;
>  
>      first_paging_enabled_cpu = find_paging_enabled_cpu(first_cpu);
>      if (first_paging_enabled_cpu) {
>          for (env = first_paging_enabled_cpu; env != NULL; env = env->next_cpu) {
> -            ret = cpu_get_memory_mapping(list, env);
> -            if (ret < 0) {
> +            Error *err = NULL;
> +            cpu_get_memory_mapping(ENV_GET_CPU(env), list, &err);
> +            if (err) {
> +                error_free(err);
>                  return -1;
>              }
>          }
> diff --git a/qom/cpu.c b/qom/cpu.c
> index 9f6da0f..b25fbc9 100644
> --- a/qom/cpu.c
> +++ b/qom/cpu.c
> @@ -62,6 +62,21 @@ static bool cpu_common_get_paging_enabled(const CPUState *cpu)
>      return true;
>  }
>  
> +void cpu_get_memory_mapping(CPUState *cpu, MemoryMappingList *list,
> +                            Error **errp)
> +{
> +    CPUClass *cc = CPU_GET_CLASS(cpu);
> +
> +    return cc->get_memory_mapping(cpu, list, errp);
> +}
> +
> +static void cpu_common_get_memory_mapping(CPUState *cpu,
> +                                          MemoryMappingList *list,
> +                                          Error **errp)
> +{
> +    error_setg(errp, "Obtaining memory mappings is unsupported on this CPU.");
> +}
> +
>  /* CPU hot-plug notifiers */
>  static NotifierList cpu_added_notifiers =
>      NOTIFIER_LIST_INITIALIZER(cpu_add_notifiers);
> @@ -189,6 +204,7 @@ static void cpu_class_init(ObjectClass *klass, void *data)
>      k->reset = cpu_common_reset;
>      k->get_arch_id = cpu_common_get_arch_id;
>      k->get_paging_enabled = cpu_common_get_paging_enabled;
> +    k->get_memory_mapping = cpu_common_get_memory_mapping;
>      k->write_elf32_qemunote = cpu_common_write_elf32_qemunote;
>      k->write_elf32_note = cpu_common_write_elf32_note;
>      k->write_elf64_qemunote = cpu_common_write_elf64_qemunote;
> diff --git a/target-i386/arch_memory_mapping.c b/target-i386/arch_memory_mapping.c
> index c5a10ec..2566a04 100644
> --- a/target-i386/arch_memory_mapping.c
> +++ b/target-i386/arch_memory_mapping.c
> @@ -239,11 +239,15 @@ static void walk_pml4e(MemoryMappingList *list,
>  }
>  #endif
>  
> -int cpu_get_memory_mapping(MemoryMappingList *list, CPUArchState *env)
> +void x86_cpu_get_memory_mapping(CPUState *cs, MemoryMappingList *list,
> +                                Error **errp)
>  {
> -    if (!cpu_paging_enabled(ENV_GET_CPU(env))) {
> +    X86CPU *cpu = X86_CPU(cs);
> +    CPUX86State *env = &cpu->env;
> +
> +    if (!cpu_paging_enabled(cs)) {
>          /* paging is disabled */
> -        return 0;
> +        return;
>      }
>  
>      if (env->cr[4] & CR4_PAE_MASK) {
> @@ -269,7 +273,5 @@ int cpu_get_memory_mapping(MemoryMappingList *list, CPUArchState *env)
>          pse = !!(env->cr[4] & CR4_PSE_MASK);
>          walk_pde2(list, pde_addr, env->a20_mask, pse);
>      }
> -
> -    return 0;
>  }
>  
> diff --git a/target-i386/cpu-qom.h b/target-i386/cpu-qom.h
> index 849cedf..e0ac072 100644
> --- a/target-i386/cpu-qom.h
> +++ b/target-i386/cpu-qom.h
> @@ -98,4 +98,7 @@ int x86_cpu_write_elf64_qemunote(WriteCoreDumpFunction f, CPUState *cpu,
>  int x86_cpu_write_elf32_qemunote(WriteCoreDumpFunction f, CPUState *cpu,
>                                   void *opaque);
>  
> +void x86_cpu_get_memory_mapping(CPUState *cpu, MemoryMappingList *list,
> +                                Error **errp);
> +
>  #endif
> diff --git a/target-i386/cpu.c b/target-i386/cpu.c
> index f6fa7fa..a7154af 100644
> --- a/target-i386/cpu.c
> +++ b/target-i386/cpu.c
> @@ -2529,6 +2529,7 @@ static void x86_cpu_common_class_init(ObjectClass *oc, void *data)
>      cc->get_arch_id = x86_cpu_get_arch_id;
>      cc->get_paging_enabled = x86_cpu_get_paging_enabled;
>  #ifndef CONFIG_USER_ONLY
> +    cc->get_memory_mapping = x86_cpu_get_memory_mapping;
>      cc->write_elf64_note = x86_cpu_write_elf64_note;
>      cc->write_elf64_qemunote = x86_cpu_write_elf64_qemunote;
>      cc->write_elf32_note = x86_cpu_write_elf32_note;

  parent reply	other threads:[~2013-06-11 14:56 UTC|newest]

Thread overview: 37+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-06-09 16:10 [Qemu-devel] [PATCH qom-cpu v4 00/18] dump: Build cleanups, redone Andreas Färber
2013-06-09 16:10 ` [Qemu-devel] [PATCH qom-cpu v4 01/18] dump: Move stubs into libqemustub.a Andreas Färber
2013-06-09 16:10 ` [Qemu-devel] [PATCH qom-cpu v4 02/18] pc: Fix crash when attempting to hotplug CPU with negative ID Andreas Färber
2013-06-09 16:10 ` [Qemu-devel] [PATCH qom-cpu v4 03/18] pc: Create pc-*-1.6 machine-types Andreas Färber
2013-06-09 16:10 ` [Qemu-devel] [PATCH qom-cpu v4 04/18] target-i386: Update model values on Conroe/Penryn/Nehalem CPU models Andreas Färber
2013-06-09 16:10 ` [Qemu-devel] [PATCH qom-cpu v4 05/18] target-i386: Set level=4 on Conroe/Penryn/Nehalem Andreas Färber
2013-06-09 16:10 ` [Qemu-devel] [PATCH qom-cpu v4 06/18] target-i386: cpu: Fix potential buffer overrun in get_register_name_32() Andreas Färber
2013-06-09 16:10 ` [Qemu-devel] [PATCH qom-cpu v4 07/18] cpu: Turn cpu_paging_enabled() into a CPUState hook Andreas Färber
2013-06-11  8:06   ` Jens Freimann
2013-06-11 14:52   ` Luiz Capitulino
2013-06-09 16:10 ` [Qemu-devel] [PATCH qom-cpu v4 08/18] memory_mapping: Move MemoryMappingList typedef to qemu/typedefs.h Andreas Färber
2013-06-09 16:10 ` [Qemu-devel] [PATCH qom-cpu v4 09/18] cpu: Turn cpu_get_memory_mapping() into a CPUState hook Andreas Färber
2013-06-11  9:20   ` Jens Freimann
2013-06-11 14:56   ` Luiz Capitulino [this message]
2013-06-11 16:03     ` Andreas Färber
2013-06-09 16:10 ` [Qemu-devel] [PATCH qom-cpu v4 10/18] memory_mapping: Drop qemu_get_memory_mapping() stub Andreas Färber
2013-06-09 16:10 ` [Qemu-devel] [PATCH qom-cpu v4 11/18] dump: Drop qmp_dump_guest_memory() stub and build for all targets Andreas Färber
2013-06-09 16:10 ` [Qemu-devel] [PATCH qom-cpu v4 12/18] cpu: Change default for CPUClass::get_paging_enabled() Andreas Färber
2013-06-11  9:00   ` Jens Freimann
2013-06-11 15:01   ` Luiz Capitulino
2013-06-09 16:10 ` [Qemu-devel] [PATCH qom-cpu v4 13/18] memory_mapping: Cleanup qemu_get_guest_memory_mapping() Andreas Färber
2013-06-11 15:52   ` Luiz Capitulino
2013-06-11 17:47     ` Andreas Färber
2013-06-09 16:10 ` [Qemu-devel] [PATCH qom-cpu v4 14/18] dump: Abstract dump_init() with cpu_synchronize_all_states() Andreas Färber
2013-06-11 15:55   ` Luiz Capitulino
2013-06-11 17:46     ` Andreas Färber
2013-06-09 16:10 ` [Qemu-devel] [PATCH qom-cpu v4 15/18] dump: Abstract dump_init() further with qemu_for_each_cpu() Andreas Färber
2013-06-11 15:55   ` Luiz Capitulino
2013-06-09 16:10 ` [Qemu-devel] [PATCH qom-cpu v4 16/18] dump: Abstract write_elf{64, 32}_notes() " Andreas Färber
2013-06-09 16:10 ` [Qemu-devel] [PATCH qom-cpu v4 17/18] memory_mapping: Use hwaddr type for MemoryMapping virt_addr field Andreas Färber
2013-06-09 17:17   ` Peter Maydell
2013-06-09 17:25     ` Andreas Färber
2013-06-09 16:10 ` [Qemu-devel] [PATCH qom-cpu v4 18/18] memory_mapping: Build only once Andreas Färber
2013-06-09 17:29   ` Peter Maydell
2013-06-09 17:36     ` Andreas Färber
2013-06-09 16:19 ` [Qemu-devel] [PATCH qom-cpu v4 00/18] dump: Build cleanups, redone Andreas Färber
2013-06-11 16:54 ` Andreas Färber

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=20130611105624.286109b2@redhat.com \
    --to=lcapitulino@redhat.com \
    --cc=afaerber@suse.de \
    --cc=qemu-devel@nongnu.org \
    --cc=qiaonuohan@cn.fujitsu.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.