[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v2 10/16] ramblocks: Make use of DeviceState pointer
From: |
Alex Williamson |
Subject: |
[Qemu-devel] [PATCH v2 10/16] ramblocks: Make use of DeviceState pointer and BusInfo.get_dev_path |
Date: |
Fri, 25 Jun 2010 11:09:43 -0600 |
User-agent: |
StGIT/0.14.3 |
With these two pieces in place, we can start naming ramblocks. When
the device is present and it lives on a bus that provides a device
path, we concatenate the path and the provided name. Otherwise we
just use name. The resulting id string must be unique. For now we
assume an allocation for the same name and size is a device that has
been removed and reinserted and return the same block. This will go
away once qemu_ram_free() is implemented.
Signed-off-by: Alex Williamson <address@hidden>
---
cpu-all.h | 1 +
exec.c | 29 +++++++++++++++++++++++++++--
2 files changed, 28 insertions(+), 2 deletions(-)
diff --git a/cpu-all.h b/cpu-all.h
index dbb2139..5d8342b 100644
--- a/cpu-all.h
+++ b/cpu-all.h
@@ -865,6 +865,7 @@ typedef struct RAMBlock {
uint8_t *host;
ram_addr_t offset;
ram_addr_t length;
+ char idstr[256];
QLIST_ENTRY(RAMBlock) next;
} RAMBlock;
diff --git a/exec.c b/exec.c
index dc47831..a136c13 100644
--- a/exec.c
+++ b/exec.c
@@ -36,6 +36,7 @@
#include "qemu-common.h"
#include "tcg.h"
#include "hw/hw.h"
+#include "hw/qdev.h"
#include "osdep.h"
#include "kvm.h"
#include "qemu-timer.h"
@@ -2778,10 +2779,34 @@ static ram_addr_t find_ram_offset(ram_addr_t size)
ram_addr_t qemu_ram_alloc(DeviceState *dev, const char *name, ram_addr_t size)
{
- RAMBlock *new_block;
+ RAMBlock *new_block, *block;
size = TARGET_PAGE_ALIGN(size);
- new_block = qemu_malloc(sizeof(*new_block));
+ new_block = qemu_mallocz(sizeof(*new_block));
+
+ if (dev && dev->parent_bus && dev->parent_bus->info->get_dev_path) {
+ char *id = dev->parent_bus->info->get_dev_path(dev);
+ if (id) {
+ snprintf(new_block->idstr, sizeof(new_block->idstr), "%s/", id);
+ qemu_free(id);
+ }
+ }
+ pstrcat(new_block->idstr, sizeof(new_block->idstr), name);
+
+ QLIST_FOREACH(block, &ram_list.blocks, next) {
+ if (!strcmp(block->idstr, new_block->idstr)) {
+ if (block->length == new_block->length) {
+ fprintf(stderr, "RAMBlock \"%s\" exists, assuming lack of"
+ "free.\n", new_block->idstr);
+ qemu_free(new_block);
+ return block->offset;
+ } else {
+ fprintf(stderr, "RAMBlock \"%s\" already registered with"
+ "different size, abort\n", new_block->idstr);
+ abort();
+ }
+ }
+ }
if (mem_path) {
#if defined (__linux__) && !defined(TARGET_S390X)
- Re: [Qemu-devel] [PATCH 00/15] Make migration work with hotplug, (continued)
- [Qemu-devel] [PATCH v2 00/16] Make migration work with hotplug, Alex Williamson, 2010/06/25
- [Qemu-devel] [PATCH v2 16/16] ramblocks: No more being lazy about duplicate names, Alex Williamson, 2010/06/25
- [Qemu-devel] [PATCH v2 14/16] qemu_ram_free: Implement it, Alex Williamson, 2010/06/25
- [Qemu-devel] [PATCH v2 15/16] pci: Free the space allocated for the option rom on removal, Alex Williamson, 2010/06/25
- [Qemu-devel] [PATCH v2 13/16] savevm: Create a new continue flag to avoid resending block name, Alex Williamson, 2010/06/25
- [Qemu-devel] [PATCH v2 12/16] savevm: Use RAM blocks for basis of migration, Alex Williamson, 2010/06/25
- [Qemu-devel] [PATCH v2 10/16] ramblocks: Make use of DeviceState pointer and BusInfo.get_dev_path,
Alex Williamson <=
- [Qemu-devel] [PATCH v2 11/16] savevm: Migrate RAM based on name/offset, Alex Williamson, 2010/06/25
- [Qemu-devel] [PATCH v2 07/16] eepro100: Add a dev field to eeprom new/free functions, Alex Williamson, 2010/06/25
- [Qemu-devel] [PATCH v2 08/16] virtio-net: Incorporate a DeviceState pointer and let savevm track instances, Alex Williamson, 2010/06/25
- [Qemu-devel] [PATCH v2 09/16] qemu_ram_alloc: Add DeviceState and name parameters, Alex Williamson, 2010/06/25
- [Qemu-devel] [PATCH v2 06/16] savevm: Make use of DeviceState, Alex Williamson, 2010/06/25
- [Qemu-devel] [PATCH v2 04/16] pci: Implement BusInfo.get_dev_path(), Alex Williamson, 2010/06/25
- [Qemu-devel] [PATCH v2 02/16] pc: Allocate all ram in a single qemu_ram_alloc(), Alex Williamson, 2010/06/25
- [Qemu-devel] [PATCH v2 05/16] savevm: Add DeviceState param, Alex Williamson, 2010/06/25
- [Qemu-devel] [PATCH v2 01/16] Remove uses of ram.last_offset (aka last_ram_offset), Alex Williamson, 2010/06/25
- [Qemu-devel] [PATCH v2 03/16] qdev: Add a get_dev_path() function to BusInfo, Alex Williamson, 2010/06/25