qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Anthony Liguori <anthony@codemonkey.ws>
To: qemu-devel@nongnu.org, Fabrice Bellard <fabrice@bellard.org>
Subject: Re: [Qemu-devel] [PATCH] Introduce foreach_cpu shorthand
Date: Tue, 03 Jun 2008 15:18:12 -0500	[thread overview]
Message-ID: <4845A704.3040701@codemonkey.ws> (raw)
In-Reply-To: <4845A1D6.5050005@web.de>

Jan Kiszka wrote:
> Cleanup patch to consolidate open-coded iterations over all CPUs via a
> foreach_cpu wrapper. Improves readability IMHO.
>   

I agree, but I recall Fabrice reverting a bit of code of mine a long 
time ago that did something like this because he didn't like #define'ing 
for loops.  Should get him to weigh in.

Regards,

Anthony Liguori

> Signed-off-by: Jan Kiszka <jan.kiszka@web.de>
> ---
>  cpu-defs.h |    3 +++
>  exec.c     |    8 +++-----
>  monitor.c  |    6 +++---
>  vl.c       |    4 ++--
>  4 files changed, 11 insertions(+), 10 deletions(-)
>
> Index: b/cpu-defs.h
> ===================================================================
> --- a/cpu-defs.h
> +++ b/cpu-defs.h
> @@ -171,4 +171,7 @@ typedef struct CPUTLBEntry {
>                                                                          \
>      const char *cpu_model_str;
>  
> +#define foreach_cpu(env) \
> +    for (env = first_cpu; env != NULL; env = env->next_cpu)
> +
>  #endif
> Index: b/exec.c
> ===================================================================
> --- a/exec.c
> +++ b/exec.c
> @@ -639,10 +639,9 @@ static inline void tb_phys_invalidate(Tr
>  
>      /* remove the TB from the hash list */
>      h = tb_jmp_cache_hash_func(tb->pc);
> -    for(env = first_cpu; env != NULL; env = env->next_cpu) {
> +    foreach_cpu(env)
>          if (env->tb_jmp_cache[h] == tb)
>              env->tb_jmp_cache[h] = NULL;
> -    }
>  
>      /* suppress this TB from the two jump lists */
>      tb_jmp_remove(tb, 0);
> @@ -1649,7 +1648,7 @@ void cpu_physical_memory_reset_dirty(ram
>      /* we modify the TLB cache so that the dirty bit will be set again
>         when accessing the range */
>      start1 = start + (unsigned long)phys_ram_base;
> -    for(env = first_cpu; env != NULL; env = env->next_cpu) {
> +    foreach_cpu(env) {
>          for(i = 0; i < CPU_TLB_SIZE; i++)
>              tlb_reset_dirty_range(&env->tlb_table[0][i], start1, length);
>          for(i = 0; i < CPU_TLB_SIZE; i++)
> @@ -2217,9 +2216,8 @@ void cpu_register_physical_memory(target
>      /* since each CPU stores ram addresses in its TLB cache, we must
>         reset the modified entries */
>      /* XXX: slow ! */
> -    for(env = first_cpu; env != NULL; env = env->next_cpu) {
> +    foreach_cpu(env)
>          tlb_flush(env, 1);
> -    }
>  }
>  
>  /* XXX: temporary until new memory mapping API */
> Index: b/monitor.c
> ===================================================================
> --- a/monitor.c
> +++ b/monitor.c
> @@ -269,7 +269,7 @@ static int mon_set_cpu(int cpu_index)
>  {
>      CPUState *env;
>  
> -    for(env = first_cpu; env != NULL; env = env->next_cpu) {
> +    foreach_cpu(env) {
>          if (env->cpu_index == cpu_index) {
>              mon_cpu = env;
>              return 0;
> @@ -308,7 +308,7 @@ static void do_info_cpus(void)
>      /* just to set the default cpu if not already done */
>      mon_get_cpu();
>  
> -    for(env = first_cpu; env != NULL; env = env->next_cpu) {
> +    foreach_cpu(env) {
>          term_printf("%c CPU #%d:",
>                      (env == mon_cpu) ? '*' : ' ',
>                      env->cpu_index);
> @@ -1297,7 +1297,7 @@ static void do_inject_nmi(int cpu_index)
>  {
>      CPUState *env;
>  
> -    for (env = first_cpu; env != NULL; env = env->next_cpu)
> +    foreach_cpu(env)
>          if (env->cpu_index == cpu_index) {
>              cpu_interrupt(env, CPU_INTERRUPT_NMI);
>              break;
> Index: b/vl.c
> ===================================================================
> --- a/vl.c
> +++ b/vl.c
> @@ -470,7 +470,7 @@ void hw_error(const char *fmt, ...)
>      fprintf(stderr, "qemu: hardware error: ");
>      vfprintf(stderr, fmt, ap);
>      fprintf(stderr, "\n");
> -    for(env = first_cpu; env != NULL; env = env->next_cpu) {
> +    foreach_cpu(env) {
>          fprintf(stderr, "CPU #%d:\n", env->cpu_index);
>  #ifdef TARGET_I386
>          cpu_dump_state(env, stderr, fprintf, X86_DUMP_FPU);
> @@ -6047,7 +6047,7 @@ static int qemu_loadvm_state(QEMUFile *f
>          ret = -1;
>          goto the_end;
>      }
> -    for (env = first_cpu; env != NULL; env = env->next_cpu)
> +    foreach_cpu(env)
>          env->interrupt_request = 0;
>      total_len = qemu_get_be64(f);
>      end_pos = total_len + qemu_ftell(f);
>
>
>   

  reply	other threads:[~2008-06-03 20:18 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-06-03 19:56 [Qemu-devel] [PATCH] Introduce foreach_cpu shorthand Jan Kiszka
2008-06-03 20:18 ` Anthony Liguori [this message]
2008-06-04 12:39 ` Fabrice Bellard
2008-06-04 18:21   ` [Qemu-devel] " Jan Kiszka
2008-06-04 22:01     ` Thiemo Seufer
2008-06-04 22:29       ` Jan Kiszka
2008-06-05  1:26     ` Paul Brook
2008-06-05  7:11       ` Jan Kiszka

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=4845A704.3040701@codemonkey.ws \
    --to=anthony@codemonkey.ws \
    --cc=fabrice@bellard.org \
    --cc=qemu-devel@nongnu.org \
    /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).