提交 acc7fa17 编写于 作者: D David Hildenbrand 提交者: Eduardo Habkost

pc-dimm: no need to pass the memory region

We can just query it ourselves. When unplugging, we should always be
able to the region (as it was previously plugged). E.g. PPC already
assumed that and used &error_abort.
Signed-off-by: NDavid Hildenbrand <david@redhat.com>
Message-Id: <20180423165126.15441-4-david@redhat.com>
Reviewed-by: NMichael S. Tsirkin <mst@redhat.com>
Signed-off-by: NEduardo Habkost <ehabkost@redhat.com>
上级 b0c14ec4
...@@ -1715,8 +1715,7 @@ static void pc_dimm_plug(HotplugHandler *hotplug_dev, ...@@ -1715,8 +1715,7 @@ static void pc_dimm_plug(HotplugHandler *hotplug_dev,
goto out; goto out;
} }
pc_dimm_memory_plug(dev, MACHINE(pcms)->device_memory, mr, align, pc_dimm_memory_plug(dev, MACHINE(pcms)->device_memory, align, &local_err);
&local_err);
if (local_err) { if (local_err) {
goto out; goto out;
} }
...@@ -1766,17 +1765,9 @@ static void pc_dimm_unplug(HotplugHandler *hotplug_dev, ...@@ -1766,17 +1765,9 @@ static void pc_dimm_unplug(HotplugHandler *hotplug_dev,
DeviceState *dev, Error **errp) DeviceState *dev, Error **errp)
{ {
PCMachineState *pcms = PC_MACHINE(hotplug_dev); PCMachineState *pcms = PC_MACHINE(hotplug_dev);
PCDIMMDevice *dimm = PC_DIMM(dev);
PCDIMMDeviceClass *ddc = PC_DIMM_GET_CLASS(dimm);
MemoryRegion *mr;
HotplugHandlerClass *hhc; HotplugHandlerClass *hhc;
Error *local_err = NULL; Error *local_err = NULL;
mr = ddc->get_memory_region(dimm, &local_err);
if (local_err) {
goto out;
}
hhc = HOTPLUG_HANDLER_GET_CLASS(pcms->acpi_dev); hhc = HOTPLUG_HANDLER_GET_CLASS(pcms->acpi_dev);
hhc->unplug(HOTPLUG_HANDLER(pcms->acpi_dev), dev, &local_err); hhc->unplug(HOTPLUG_HANDLER(pcms->acpi_dev), dev, &local_err);
...@@ -1784,7 +1775,7 @@ static void pc_dimm_unplug(HotplugHandler *hotplug_dev, ...@@ -1784,7 +1775,7 @@ static void pc_dimm_unplug(HotplugHandler *hotplug_dev,
goto out; goto out;
} }
pc_dimm_memory_unplug(dev, MACHINE(pcms)->device_memory, mr); pc_dimm_memory_unplug(dev, MACHINE(pcms)->device_memory);
object_unparent(OBJECT(dev)); object_unparent(OBJECT(dev));
out: out:
......
...@@ -37,7 +37,7 @@ typedef struct pc_dimms_capacity { ...@@ -37,7 +37,7 @@ typedef struct pc_dimms_capacity {
} pc_dimms_capacity; } pc_dimms_capacity;
void pc_dimm_memory_plug(DeviceState *dev, MemoryHotplugState *hpms, void pc_dimm_memory_plug(DeviceState *dev, MemoryHotplugState *hpms,
MemoryRegion *mr, uint64_t align, Error **errp) uint64_t align, Error **errp)
{ {
int slot; int slot;
MachineState *machine = MACHINE(qdev_get_machine()); MachineState *machine = MACHINE(qdev_get_machine());
...@@ -46,8 +46,14 @@ void pc_dimm_memory_plug(DeviceState *dev, MemoryHotplugState *hpms, ...@@ -46,8 +46,14 @@ void pc_dimm_memory_plug(DeviceState *dev, MemoryHotplugState *hpms,
MemoryRegion *vmstate_mr = ddc->get_vmstate_memory_region(dimm); MemoryRegion *vmstate_mr = ddc->get_vmstate_memory_region(dimm);
Error *local_err = NULL; Error *local_err = NULL;
uint64_t existing_dimms_capacity = 0; uint64_t existing_dimms_capacity = 0;
MemoryRegion *mr;
uint64_t addr; uint64_t addr;
mr = ddc->get_memory_region(dimm, &local_err);
if (local_err) {
goto out;
}
addr = object_property_get_uint(OBJECT(dimm), addr = object_property_get_uint(OBJECT(dimm),
PC_DIMM_ADDR_PROP, &local_err); PC_DIMM_ADDR_PROP, &local_err);
if (local_err) { if (local_err) {
...@@ -116,12 +122,12 @@ out: ...@@ -116,12 +122,12 @@ out:
error_propagate(errp, local_err); error_propagate(errp, local_err);
} }
void pc_dimm_memory_unplug(DeviceState *dev, MemoryHotplugState *hpms, void pc_dimm_memory_unplug(DeviceState *dev, MemoryHotplugState *hpms)
MemoryRegion *mr)
{ {
PCDIMMDevice *dimm = PC_DIMM(dev); PCDIMMDevice *dimm = PC_DIMM(dev);
PCDIMMDeviceClass *ddc = PC_DIMM_GET_CLASS(dimm); PCDIMMDeviceClass *ddc = PC_DIMM_GET_CLASS(dimm);
MemoryRegion *vmstate_mr = ddc->get_vmstate_memory_region(dimm); MemoryRegion *vmstate_mr = ddc->get_vmstate_memory_region(dimm);
MemoryRegion *mr = ddc->get_memory_region(dimm, &error_abort);
memory_region_del_subregion(&hpms->mr, mr); memory_region_del_subregion(&hpms->mr, mr);
vmstate_unregister_ram(vmstate_mr, dev); vmstate_unregister_ram(vmstate_mr, dev);
......
...@@ -3153,7 +3153,7 @@ static void spapr_memory_plug(HotplugHandler *hotplug_dev, DeviceState *dev, ...@@ -3153,7 +3153,7 @@ static void spapr_memory_plug(HotplugHandler *hotplug_dev, DeviceState *dev,
align = memory_region_get_alignment(mr); align = memory_region_get_alignment(mr);
size = memory_region_size(mr); size = memory_region_size(mr);
pc_dimm_memory_plug(dev, MACHINE(ms)->device_memory, mr, align, &local_err); pc_dimm_memory_plug(dev, MACHINE(ms)->device_memory, align, &local_err);
if (local_err) { if (local_err) {
goto out; goto out;
} }
...@@ -3174,7 +3174,7 @@ static void spapr_memory_plug(HotplugHandler *hotplug_dev, DeviceState *dev, ...@@ -3174,7 +3174,7 @@ static void spapr_memory_plug(HotplugHandler *hotplug_dev, DeviceState *dev,
return; return;
out_unplug: out_unplug:
pc_dimm_memory_unplug(dev, MACHINE(ms)->device_memory, mr); pc_dimm_memory_unplug(dev, MACHINE(ms)->device_memory);
out: out:
error_propagate(errp, local_err); error_propagate(errp, local_err);
} }
...@@ -3292,9 +3292,6 @@ static sPAPRDIMMState *spapr_recover_pending_dimm_state(sPAPRMachineState *ms, ...@@ -3292,9 +3292,6 @@ static sPAPRDIMMState *spapr_recover_pending_dimm_state(sPAPRMachineState *ms,
void spapr_lmb_release(DeviceState *dev) void spapr_lmb_release(DeviceState *dev)
{ {
sPAPRMachineState *spapr = SPAPR_MACHINE(qdev_get_hotplug_handler(dev)); sPAPRMachineState *spapr = SPAPR_MACHINE(qdev_get_hotplug_handler(dev));
PCDIMMDevice *dimm = PC_DIMM(dev);
PCDIMMDeviceClass *ddc = PC_DIMM_GET_CLASS(dimm);
MemoryRegion *mr = ddc->get_memory_region(dimm, &error_abort);
sPAPRDIMMState *ds = spapr_pending_dimm_unplugs_find(spapr, PC_DIMM(dev)); sPAPRDIMMState *ds = spapr_pending_dimm_unplugs_find(spapr, PC_DIMM(dev));
/* This information will get lost if a migration occurs /* This information will get lost if a migration occurs
...@@ -3314,7 +3311,7 @@ void spapr_lmb_release(DeviceState *dev) ...@@ -3314,7 +3311,7 @@ void spapr_lmb_release(DeviceState *dev)
* Now that all the LMBs have been removed by the guest, call the * Now that all the LMBs have been removed by the guest, call the
* pc-dimm unplug handler to cleanup up the pc-dimm device. * pc-dimm unplug handler to cleanup up the pc-dimm device.
*/ */
pc_dimm_memory_unplug(dev, MACHINE(spapr)->device_memory, mr); pc_dimm_memory_unplug(dev, MACHINE(spapr)->device_memory);
object_unparent(OBJECT(dev)); object_unparent(OBJECT(dev));
spapr_pending_dimm_unplugs_remove(spapr, ds); spapr_pending_dimm_unplugs_remove(spapr, ds);
} }
......
...@@ -85,7 +85,6 @@ int pc_dimm_get_free_slot(const int *hint, int max_slots, Error **errp); ...@@ -85,7 +85,6 @@ int pc_dimm_get_free_slot(const int *hint, int max_slots, Error **errp);
uint64_t pc_existing_dimms_capacity(Error **errp); uint64_t pc_existing_dimms_capacity(Error **errp);
void pc_dimm_memory_plug(DeviceState *dev, MemoryHotplugState *hpms, void pc_dimm_memory_plug(DeviceState *dev, MemoryHotplugState *hpms,
MemoryRegion *mr, uint64_t align, Error **errp); uint64_t align, Error **errp);
void pc_dimm_memory_unplug(DeviceState *dev, MemoryHotplugState *hpms, void pc_dimm_memory_unplug(DeviceState *dev, MemoryHotplugState *hpms);
MemoryRegion *mr);
#endif #endif
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册