[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 06/22] pseries: Don't allow duplicate registration o
From: |
Alexander Graf |
Subject: |
[Qemu-devel] [PATCH 06/22] pseries: Don't allow duplicate registration of hcalls or RTAS calls |
Date: |
Mon, 29 Oct 2012 11:25:55 +0100 |
From: David Gibson <address@hidden>
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 <address@hidden>
Signed-off-by: Alexander Graf <address@hidden>
---
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 67da27b..ce76c58 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.6.0.2
- Re: [Qemu-devel] [PATCH 01/22] Remove TARGET_PHYS_ADDR_BITS define completely, (continued)
- [Qemu-devel] [PATCH 02/22] PPC: Bamboo: Fix memory size DT property, Alexander Graf, 2012/10/29
- [Qemu-devel] [PATCH 07/22] target-ppc: Rework storage of VPA registration state, Alexander Graf, 2012/10/29
- [Qemu-devel] [PATCH 17/22] rtl8139: convert PIO to new memory api read/write, Alexander Graf, 2012/10/29
- [Qemu-devel] [PATCH 10/22] virtio-pci: convert PIO to new memory api read/write, Alexander Graf, 2012/10/29
- [Qemu-devel] [PATCH 03/22] PPC: 440: Emulate DCBR0, Alexander Graf, 2012/10/29
- [Qemu-devel] [PATCH 05/22] Add USB option in machine options, Alexander Graf, 2012/10/29
- [Qemu-devel] [PATCH 11/22] es1370: convert PIO to new memory api read/write, Alexander Graf, 2012/10/29
- [Qemu-devel] [PATCH 04/22] e500: Fix serial initialization, Alexander Graf, 2012/10/29
- [Qemu-devel] [PATCH 06/22] pseries: Don't allow duplicate registration of hcalls or RTAS calls,
Alexander Graf <=
- [Qemu-devel] [PATCH 13/22] m48t59: convert PIO to new memory api read/write, Alexander Graf, 2012/10/29
- [Qemu-devel] [PATCH 09/22] ac97: convert PIO to new memory api read/write, Alexander Graf, 2012/10/29
- [Qemu-devel] [PATCH 12/22] i8254: convert PIO to new memory api read/write, Alexander Graf, 2012/10/29
- [Qemu-devel] [PATCH 08/22] pseries: Implement qemu initiated shutdowns using EPOW events, Alexander Graf, 2012/10/29
- [Qemu-devel] [PATCH 22/22] PPC: pseries: Remove hack for PIO window, Alexander Graf, 2012/10/29
- [Qemu-devel] [PATCH 14/22] mc146818rtc: convert PIO to new memory api read/write, Alexander Graf, 2012/10/29
- [Qemu-devel] [PATCH 20/22] xen_platform: convert PIO to new memory api read/write, Alexander Graf, 2012/10/29
- [Qemu-devel] [PATCH 18/22] serial: convert PIO to new memory api read/write, Alexander Graf, 2012/10/29
- [Qemu-devel] [PATCH 21/22] PPC: e500: Map PIO space into core memory region, Alexander Graf, 2012/10/29
- [Qemu-devel] [PATCH 15/22] pc port92: convert PIO to new memory api read/write, Alexander Graf, 2012/10/29