All of lore.kernel.org
 help / color / mirror / Atom feed
From: Paolo Bonzini <pbonzini@redhat.com>
To: "Hervé Poussineau" <hpoussin@reactos.org>
Cc: qemu-devel@nongnu.org, Aurelien Jarno <aurelien@aurel32.net>
Subject: Re: [Qemu-devel] [PATCH 1.7] mips jazz: do not raise data bus exception when accessing invalid addresses
Date: Wed, 06 Nov 2013 11:11:00 +0100	[thread overview]
Message-ID: <527A15B4.9070702@redhat.com> (raw)
In-Reply-To: <1383603977-7003-1-git-send-email-hpoussin@reactos.org>

Il 04/11/2013 23:26, Hervé Poussineau ha scritto:
> MIPS Jazz chipset doesn't seem to raise data bus exceptions on invalid accesses.
> However, there is no easy way to prevent them. Creating a big memory region
> for the whole address space doesn't prevent memory core to directly call
> unassigned_mem_read/write which in turn call cpu->do_unassigned_access,
> which (for MIPS CPU) raise an data bus exception.

Creating a big MMIO region would work, but it wouldn't let you trap
execution accesses.

> This fixes a MIPS Jazz regression introduced in c658b94f6e8c206c59d02aa6fbac285b86b53d2c.
> 
> Signed-off-by: Hervé Poussineau <hpoussin@reactos.org>
> ---
> This fixes a known regression in QEMU 1.6. Let it be fixed as soon as possible.
> 
>  hw/mips/mips_jazz.c |   24 ++++++++++++++++++++++++
>  1 file changed, 24 insertions(+)
> 
> diff --git a/hw/mips/mips_jazz.c b/hw/mips/mips_jazz.c
> index 49bdd02..5f6dd9f 100644
> --- a/hw/mips/mips_jazz.c
> +++ b/hw/mips/mips_jazz.c
> @@ -108,6 +108,18 @@ static void cpu_request_exit(void *opaque, int irq, int level)
>      }
>  }
>  
> +static CPUUnassignedAccess real_do_unassigned_access;
> +static void mips_jazz_do_unassigned_access(CPUState *cpu, hwaddr addr,
> +                                           bool is_write, bool is_exec,
> +                                           int opaque, unsigned size)
> +{
> +    if (!is_exec) {
> +        /* ignore invalid access (ie do not raise exception) */
> +        return;
> +    }
> +    (*real_do_unassigned_access)(cpu, addr, is_write, is_exec, opaque, size);
> +}
> +
>  static void mips_jazz_init(MemoryRegion *address_space,
>                             MemoryRegion *address_space_io,
>                             ram_addr_t ram_size,
> @@ -117,6 +129,7 @@ static void mips_jazz_init(MemoryRegion *address_space,
>      char *filename;
>      int bios_size, n;
>      MIPSCPU *cpu;
> +    CPUClass *cc;
>      CPUMIPSState *env;
>      qemu_irq *rc4030, *i8259;
>      rc4030_dma *dmas;
> @@ -154,6 +167,17 @@ static void mips_jazz_init(MemoryRegion *address_space,
>      env = &cpu->env;
>      qemu_register_reset(main_cpu_reset, cpu);
>  
> +    /* Chipset returns 0 in invalid reads and do not raise data exceptions.
> +     * However, we can't simply add a global memory region to catch
> +     * everything, as memory core directly call unassigned_mem_read/write
> +     * on some invalid accesses, which call do_unassigned_access on the
> +     * CPU, which raise an exception.
> +     * Handle that case by hijacking the do_unassigned_access method on
> +     * the CPU, and do not raise exceptions for data access. */
> +    cc = CPU_GET_CLASS(cpu);
> +    real_do_unassigned_access = cc->do_unassigned_access;
> +    cc->do_unassigned_access = mips_jazz_do_unassigned_access;
> +
>      /* allocate RAM */
>      memory_region_init_ram(ram, NULL, "mips_jazz.ram", ram_size);
>      vmstate_register_ram_global(ram);
> 

Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>

Please remember to add 1.7 in the subject at this time.

Paolo

  reply	other threads:[~2013-11-06 10:11 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-11-04 22:26 [Qemu-devel] [PATCH] mips jazz: do not raise data bus exception when accessing invalid addresses Hervé Poussineau
2013-11-06 10:11 ` Paolo Bonzini [this message]
2013-11-13 21:17   ` [Qemu-devel] [PATCH 1.7] " Hervé Poussineau
2013-11-20 20:12     ` [Qemu-devel] [PATCH for-1.7] " Hervé Poussineau

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=527A15B4.9070702@redhat.com \
    --to=pbonzini@redhat.com \
    --cc=aurelien@aurel32.net \
    --cc=hpoussin@reactos.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 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.