qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: David Gibson <david@gibson.dropbear.id.au>
To: agraf@suse.de
Cc: qemu-ppc@nongnu.org, qemu-devel@nongnu.org,
	David Gibson <david@gibson.dropbear.id.au>
Subject: [Qemu-devel] [PATCH 01/15] pseries: Don't allow duplicate registration of hcalls or RTAS calls
Date: Thu, 18 Oct 2012 16:50:23 +1100	[thread overview]
Message-ID: <1350539437-535-2-git-send-email-david@gibson.dropbear.id.au> (raw)
In-Reply-To: <1350539437-535-1-git-send-email-david@gibson.dropbear.id.au>

Currently the pseries machine code allows a callback to be registered
for a hypercall number twice, as long as it's the same callback the second
time.  We don't test for duplicate registrations of RTAS callbacks at all
so it will effectively be last registratiojn wins.

This was originally done because it was awkward to ensure that the
registration happened exactly once, but the code has since been
restructured so that's no longer the case.

Duplicate registration of a hypercall or RTAS call could well suggest
a duplicate initialization which could cause other problems, so this patch
makes duplicate registrations a bug, to prevent the old behaviour from
hiding other bugs.

Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
---
 hw/spapr_hcall.c |    3 +--
 hw/spapr_rtas.c  |    9 +++++++++
 2 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/hw/spapr_hcall.c b/hw/spapr_hcall.c
index 194d9c2..762493a 100644
--- a/hw/spapr_hcall.c
+++ b/hw/spapr_hcall.c
@@ -670,11 +670,10 @@ void spapr_register_hypercall(target_ulong opcode, spapr_hcall_fn fn)
     } else {
         assert((opcode >= KVMPPC_HCALL_BASE) && (opcode <= KVMPPC_HCALL_MAX));
 
-
         slot = &kvmppc_hypercall_table[opcode - KVMPPC_HCALL_BASE];
     }
 
-    assert(!(*slot) || (fn == *slot));
+    assert(!(*slot));
     *slot = fn;
 }
 
diff --git a/hw/spapr_rtas.c b/hw/spapr_rtas.c
index b808f80..b96078b 100644
--- a/hw/spapr_rtas.c
+++ b/hw/spapr_rtas.c
@@ -241,6 +241,15 @@ target_ulong spapr_rtas_call(sPAPREnvironment *spapr,
 
 void spapr_rtas_register(const char *name, spapr_rtas_fn fn)
 {
+    int i;
+
+    for (i = 0; i < (rtas_next - rtas_table); i++) {
+        if (strcmp(name, rtas_table[i].name) == 0) {
+            fprintf(stderr, "RTAS call \"%s\" registered twice\n", name);
+            exit(1);
+        }
+    }
+
     assert(rtas_next < (rtas_table + TOKEN_MAX));
 
     rtas_next->name = name;
-- 
1.7.10.4

  reply	other threads:[~2012-10-18  5:49 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-10-18  5:50 [Qemu-devel] [0/15] pseries patch queue David Gibson
2012-10-18  5:50 ` David Gibson [this message]
2012-10-18  5:50 ` [Qemu-devel] [PATCH 02/15] target-ppc: Rework storage of VPA registration state David Gibson
2012-10-18  5:50 ` [Qemu-devel] [PATCH 03/15] pseries: Implement qemu initiated shutdowns using EPOW events David Gibson
2012-10-22  2:15   ` [Qemu-devel] [Qemu-ppc] " David Gibson
2012-10-18  5:50 ` [Qemu-devel] [PATCH 04/15] target-ppc: Extend FPU state for newer POWER CPUs David Gibson
2012-10-18  5:50 ` [Qemu-devel] [PATCH 05/15] pseries: Clean up inconsistent variable name in xics.c David Gibson
2012-10-18  5:50 ` [Qemu-devel] [PATCH 06/15] pseries: Use #define for XICS base irq number David Gibson
2012-10-18  5:50 ` [Qemu-devel] [PATCH 07/15] pseries: Cleanup duplications of ics_valid_irq() code David Gibson
2012-10-18  5:50 ` [Qemu-devel] [PATCH 08/15] pseries: Move XICS initialization before cpu initialization David Gibson
2012-10-18  5:50 ` [Qemu-devel] [PATCH 09/15] pseries: Return the token when we register an RTAS call David Gibson
2012-10-18  5:50 ` [Qemu-devel] [PATCH 10/15] pseries: Allow RTAS tokens without a qemu handler David Gibson
2012-10-18  5:50 ` [Qemu-devel] [PATCH 11/15] pseries: Add tracepoints to the XICS interrupt controller David Gibson
2012-10-18  5:50 ` [Qemu-devel] [PATCH 12/15] pseries: Split xics irq configuration from state information David Gibson
2012-10-18  5:50 ` [Qemu-devel] [PATCH 13/15] target-pcc: Convert ppcemb_tlb_t to use fixed 64-bit RPN David Gibson
2012-10-18  6:37   ` Alexander Graf
2012-10-18  8:19     ` David Gibson
2012-10-18  5:50 ` [Qemu-devel] [PATCH 14/15] pseries: Implement PAPR NVRAM David Gibson
2012-10-18  5:50 ` [Qemu-devel] [PATCH 15/15] pseries: Update SLOF for NVRAM support David Gibson

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=1350539437-535-2-git-send-email-david@gibson.dropbear.id.au \
    --to=david@gibson.dropbear.id.au \
    --cc=agraf@suse.de \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-ppc@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).