mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-04 00:03:54 -06:00
Machine queue, 2018-05-07
* pc-dimm: factor out MemoryDevice (virtio-pmem and virtio-mem will make use of the new abstraction later) * scripts/device-crash-test: Removed fixed CAN entries -----BEGIN PGP SIGNATURE----- iQIcBAABCAAGBQJa8IZ2AAoJECgHk2+YTcWmmD0P/2Lddw+ilGhGS/CWarq4uLSF ILtEMwNgbJeJAEza6IQx/IIuUER3H5UcxgZhO49nELpurobhl5yW9JKP1qjH9z9i 7hVPORGioiyGkjgjbm8jWtljePAloTIwEiIcrqYkVHpWDCUJaZ7SES2VQL7ltY/W AU3uSFQQMDfVqr/MXDxZq084wFK3Jm2aIE+p8a0MF7B+29RSHdFU9iKysCC1Wu/1 AllXCkQ4yWHCGoSRBfzFz9EWBb4VlzM+VNj9nhHu75zdF3hm7J05yIiGuZLiOjmB MDOkvKhSeXNj+21mXVLmSxkfI65z6jrq3aI7iTp4+orrd2SCXoHsOZoj4Q2cRSnw kJlY62+p85H9NYIKTgMCM/oURpL2ZnqPKmCto1NRFywSBGLXll2weyKpX9ByvXe2 gL8hqra/K8eUPW4zSsPYbbN1b16EnK4MY2nkYvG0Y/aAXGZF6V9zQwKNT4/F5GyY SRMC4c2OtQOgZNDSuPdgZ5Lu5PXfetvvcqWCj0tXNdaScOp6Omsc/i/YCUtu6r/3 IbBIclJ+K5aD+U4QP4DKZ+DJbEkIGMU4pSHgR2i8bK7MmoJpJcAIB1mL5nA/TknP /RVgtnP7gVbfGIVVwjUw9bMurvOti4PBp0/DxC/VqUqGs9e8avE1yb9grVJdj/jA oEGJ6EIsmO1URbk1+f93 =Hhge -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/ehabkost/tags/machine-next-pull-request' into staging Machine queue, 2018-05-07 * pc-dimm: factor out MemoryDevice (virtio-pmem and virtio-mem will make use of the new abstraction later) * scripts/device-crash-test: Removed fixed CAN entries # gpg: Signature made Mon 07 May 2018 18:01:42 BST # gpg: using RSA key 2807936F984DC5A6 # gpg: Good signature from "Eduardo Habkost <ehabkost@redhat.com>" # Primary key fingerprint: 5A32 2FD5 ABC4 D3DB ACCF D1AA 2807 936F 984D C5A6 * remotes/ehabkost/tags/machine-next-pull-request: scripts/device-crash-test: Removed fixed CAN entries vl: allow 'maxmem' without 'slot' spapr: rename "hotplug memory" terminology to "device memory" pc: rename "hotplug memory" terminology to "device memory" machine: rename MemoryHotplugState to DeviceMemoryState pc-dimm: move actual plug/unplug of a memory region to MemoryDevice pc-dimm: factor out capacity and slot checks into MemoryDevice pc-dimm: factor out address search into MemoryDevice code pc-dimm: pass in the machine and to the MemoryHotplugState pc-dimm: no need to pass the memory region machine: make MemoryHotplugState accessible via the machine pc-dimm: factor out MemoryDevice interface Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
cc8f8ba754
19 changed files with 512 additions and 360 deletions
|
@ -213,6 +213,17 @@ struct MachineClass {
|
|||
int64_t (*get_default_cpu_node_id)(const MachineState *ms, int idx);
|
||||
};
|
||||
|
||||
/**
|
||||
* DeviceMemoryState:
|
||||
* @base: address in guest physical address space where the memory
|
||||
* address space for memory devices starts
|
||||
* @mr: address space container for memory devices
|
||||
*/
|
||||
typedef struct DeviceMemoryState {
|
||||
hwaddr base;
|
||||
MemoryRegion mr;
|
||||
} DeviceMemoryState;
|
||||
|
||||
/**
|
||||
* MachineState:
|
||||
*/
|
||||
|
@ -243,6 +254,7 @@ struct MachineState {
|
|||
bool enforce_config_section;
|
||||
bool enable_graphics;
|
||||
char *memory_encryption;
|
||||
DeviceMemoryState *device_memory;
|
||||
|
||||
ram_addr_t ram_size;
|
||||
ram_addr_t maxram_size;
|
||||
|
|
|
@ -32,7 +32,6 @@ struct PCMachineState {
|
|||
/* <public> */
|
||||
|
||||
/* State for other subsystems/APIs: */
|
||||
MemoryHotplugState hotplug_memory;
|
||||
Notifier machine_done;
|
||||
|
||||
/* Pointers to devices and objects: */
|
||||
|
@ -72,7 +71,7 @@ struct PCMachineState {
|
|||
};
|
||||
|
||||
#define PC_MACHINE_ACPI_DEVICE_PROP "acpi-device"
|
||||
#define PC_MACHINE_MEMHP_REGION_SIZE "hotplug-memory-region-size"
|
||||
#define PC_MACHINE_DEVMEM_REGION_SIZE "device-memory-region-size"
|
||||
#define PC_MACHINE_MAX_RAM_BELOW_4G "max-ram-below-4g"
|
||||
#define PC_MACHINE_VMPORT "vmport"
|
||||
#define PC_MACHINE_SMM "smm"
|
||||
|
|
51
include/hw/mem/memory-device.h
Normal file
51
include/hw/mem/memory-device.h
Normal file
|
@ -0,0 +1,51 @@
|
|||
/*
|
||||
* Memory Device Interface
|
||||
*
|
||||
* Copyright (c) 2018 Red Hat, Inc.
|
||||
*
|
||||
* Authors:
|
||||
* David Hildenbrand <david@redhat.com>
|
||||
*
|
||||
* This work is licensed under the terms of the GNU GPL, version 2 or later.
|
||||
* See the COPYING file in the top-level directory.
|
||||
*/
|
||||
|
||||
#ifndef MEMORY_DEVICE_H
|
||||
#define MEMORY_DEVICE_H
|
||||
|
||||
#include "qom/object.h"
|
||||
#include "hw/qdev.h"
|
||||
|
||||
#define TYPE_MEMORY_DEVICE "memory-device"
|
||||
|
||||
#define MEMORY_DEVICE_CLASS(klass) \
|
||||
OBJECT_CLASS_CHECK(MemoryDeviceClass, (klass), TYPE_MEMORY_DEVICE)
|
||||
#define MEMORY_DEVICE_GET_CLASS(obj) \
|
||||
OBJECT_GET_CLASS(MemoryDeviceClass, (obj), TYPE_MEMORY_DEVICE)
|
||||
#define MEMORY_DEVICE(obj) \
|
||||
INTERFACE_CHECK(MemoryDeviceState, (obj), TYPE_MEMORY_DEVICE)
|
||||
|
||||
typedef struct MemoryDeviceState {
|
||||
Object parent_obj;
|
||||
} MemoryDeviceState;
|
||||
|
||||
typedef struct MemoryDeviceClass {
|
||||
InterfaceClass parent_class;
|
||||
|
||||
uint64_t (*get_addr)(const MemoryDeviceState *md);
|
||||
uint64_t (*get_plugged_size)(const MemoryDeviceState *md);
|
||||
uint64_t (*get_region_size)(const MemoryDeviceState *md);
|
||||
void (*fill_device_info)(const MemoryDeviceState *md,
|
||||
MemoryDeviceInfo *info);
|
||||
} MemoryDeviceClass;
|
||||
|
||||
MemoryDeviceInfoList *qmp_memory_device_list(void);
|
||||
uint64_t get_plugged_memory_size(void);
|
||||
uint64_t memory_device_get_free_addr(MachineState *ms, const uint64_t *hint,
|
||||
uint64_t align, uint64_t size,
|
||||
Error **errp);
|
||||
void memory_device_plug_region(MachineState *ms, MemoryRegion *mr,
|
||||
uint64_t addr);
|
||||
void memory_device_unplug_region(MachineState *ms, MemoryRegion *mr);
|
||||
|
||||
#endif
|
|
@ -19,6 +19,7 @@
|
|||
#include "exec/memory.h"
|
||||
#include "sysemu/hostmem.h"
|
||||
#include "hw/qdev.h"
|
||||
#include "hw/boards.h"
|
||||
|
||||
#define TYPE_PC_DIMM "pc-dimm"
|
||||
#define PC_DIMM(obj) \
|
||||
|
@ -75,29 +76,9 @@ typedef struct PCDIMMDeviceClass {
|
|||
MemoryRegion *(*get_vmstate_memory_region)(PCDIMMDevice *dimm);
|
||||
} PCDIMMDeviceClass;
|
||||
|
||||
/**
|
||||
* MemoryHotplugState:
|
||||
* @base: address in guest physical address space where hotplug memory
|
||||
* address space begins.
|
||||
* @mr: hotplug memory address space container
|
||||
*/
|
||||
typedef struct MemoryHotplugState {
|
||||
hwaddr base;
|
||||
MemoryRegion mr;
|
||||
} MemoryHotplugState;
|
||||
|
||||
uint64_t pc_dimm_get_free_addr(uint64_t address_space_start,
|
||||
uint64_t address_space_size,
|
||||
uint64_t *hint, uint64_t align, uint64_t size,
|
||||
Error **errp);
|
||||
|
||||
int pc_dimm_get_free_slot(const int *hint, int max_slots, Error **errp);
|
||||
|
||||
MemoryDeviceInfoList *qmp_pc_dimm_device_list(void);
|
||||
uint64_t pc_existing_dimms_capacity(Error **errp);
|
||||
uint64_t get_plugged_memory_size(void);
|
||||
void pc_dimm_memory_plug(DeviceState *dev, MemoryHotplugState *hpms,
|
||||
MemoryRegion *mr, uint64_t align, Error **errp);
|
||||
void pc_dimm_memory_unplug(DeviceState *dev, MemoryHotplugState *hpms,
|
||||
MemoryRegion *mr);
|
||||
void pc_dimm_memory_plug(DeviceState *dev, MachineState *machine,
|
||||
uint64_t align, Error **errp);
|
||||
void pc_dimm_memory_unplug(DeviceState *dev, MachineState *machine);
|
||||
#endif
|
||||
|
|
|
@ -162,7 +162,6 @@ struct sPAPRMachineState {
|
|||
|
||||
/*< public >*/
|
||||
char *kvm_type;
|
||||
MemoryHotplugState hotplug_memory;
|
||||
|
||||
const char *icp_type;
|
||||
|
||||
|
@ -748,8 +747,8 @@ int spapr_rng_populate_dt(void *fdt);
|
|||
*/
|
||||
#define SPAPR_MAX_RAM_SLOTS 32
|
||||
|
||||
/* 1GB alignment for hotplug memory region */
|
||||
#define SPAPR_HOTPLUG_MEM_ALIGN (1ULL << 30)
|
||||
/* 1GB alignment for device memory region */
|
||||
#define SPAPR_DEVICE_MEM_ALIGN (1ULL << 30)
|
||||
|
||||
/*
|
||||
* Number of 32 bit words in each LMB list entry in ibm,dynamic-memory
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue