Message ID | 20230530113838.257755-3-david@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | memory-device: Some cleanups | expand |
On 30/5/23 13:38, David Hildenbrand wrote: > Let's intrduce a new helper that we will use to replace existing memory > device setup code during machine initialization. We'll enforce that the > size has to be > 0. > > Once all machines were converted, we'll only allocate ms->device_memory > if the size > 0. > > Signed-off-by: David Hildenbrand <david@redhat.com> > --- > hw/mem/memory-device.c | 14 ++++++++++++++ > include/hw/mem/memory-device.h | 2 ++ > 2 files changed, 16 insertions(+) Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Hi David, On 30/5/23 13:38, David Hildenbrand wrote: > Let's intrduce a new helper that we will use to replace existing memory > device setup code during machine initialization. We'll enforce that the > size has to be > 0. > > Once all machines were converted, we'll only allocate ms->device_memory > if the size > 0. > > Signed-off-by: David Hildenbrand <david@redhat.com> > --- > hw/mem/memory-device.c | 14 ++++++++++++++ > include/hw/mem/memory-device.h | 2 ++ > 2 files changed, 16 insertions(+) > diff --git a/include/hw/mem/memory-device.h b/include/hw/mem/memory-device.h > index 48d2611fc5..6e8a10e2f5 100644 > --- a/include/hw/mem/memory-device.h > +++ b/include/hw/mem/memory-device.h > @@ -16,6 +16,7 @@ > #include "hw/qdev-core.h" > #include "qapi/qapi-types-machine.h" > #include "qom/object.h" > +#include "exec/hwaddr.h" > > #define TYPE_MEMORY_DEVICE "memory-device" > > @@ -113,5 +114,6 @@ void memory_device_plug(MemoryDeviceState *md, MachineState *ms); > void memory_device_unplug(MemoryDeviceState *md, MachineState *ms); > uint64_t memory_device_get_region_size(const MemoryDeviceState *md, > Error **errp); > +void memory_devices_init(MachineState *ms, hwaddr base, uint64_t size); While hw/mem/memory-device.c contains the implementation, all callers are expected to be around Machine object, right? Thus maybe this _init() could be declared in "hw/boards.h", already included by machines (eventually renaming as machine_init_memory_devices() ). Then machines implementation don't have to all include "hw/mem/memory-device.h". Alternatively, keep memory_devices_init() declared here, but implement machine_init_memory_devices() in hw/core/machine.c, declaring it in "hw/boards.h", so again machines don't have to include "hw/mem/memory-device.h". What do you think?
On 30.05.23 14:29, Philippe Mathieu-Daudé wrote: > Hi David, > > On 30/5/23 13:38, David Hildenbrand wrote: >> Let's intrduce a new helper that we will use to replace existing memory >> device setup code during machine initialization. We'll enforce that the >> size has to be > 0. >> >> Once all machines were converted, we'll only allocate ms->device_memory >> if the size > 0. >> >> Signed-off-by: David Hildenbrand <david@redhat.com> >> --- >> hw/mem/memory-device.c | 14 ++++++++++++++ >> include/hw/mem/memory-device.h | 2 ++ >> 2 files changed, 16 insertions(+) > > >> diff --git a/include/hw/mem/memory-device.h b/include/hw/mem/memory-device.h >> index 48d2611fc5..6e8a10e2f5 100644 >> --- a/include/hw/mem/memory-device.h >> +++ b/include/hw/mem/memory-device.h >> @@ -16,6 +16,7 @@ >> #include "hw/qdev-core.h" >> #include "qapi/qapi-types-machine.h" >> #include "qom/object.h" >> +#include "exec/hwaddr.h" >> >> #define TYPE_MEMORY_DEVICE "memory-device" >> >> @@ -113,5 +114,6 @@ void memory_device_plug(MemoryDeviceState *md, MachineState *ms); >> void memory_device_unplug(MemoryDeviceState *md, MachineState *ms); >> uint64_t memory_device_get_region_size(const MemoryDeviceState *md, >> Error **errp); >> +void memory_devices_init(MachineState *ms, hwaddr base, uint64_t size); > > > While hw/mem/memory-device.c contains the implementation, all callers > are expected to be around Machine object, right? Thus maybe this _init() > could be declared in "hw/boards.h", already included by machines > (eventually renaming as machine_init_memory_devices() ). Then machines > implementation don't have to all include "hw/mem/memory-device.h". Some (arm, i386) want to call the hotplug handle functions either way, so they'll still have to include that header. But sure, we can rename to machine_init_memory_devices() and declare it include/hw/boards.h! > > Alternatively, keep memory_devices_init() declared here, but implement > machine_init_memory_devices() in hw/core/machine.c, declaring it in > "hw/boards.h", so again machines don't have to include > "hw/mem/memory-device.h". I prefer the implementation residing in hw/mem/memory-device.c. I have some upcoming patches that add more "meat" to the init function, such that makes it looks cleaner to me to just reside hw/mem/memory-device.h. Thanks!
On 30.05.23 15:04, David Hildenbrand wrote: > On 30.05.23 14:29, Philippe Mathieu-Daudé wrote: >> Hi David, >> >> On 30/5/23 13:38, David Hildenbrand wrote: >>> Let's intrduce a new helper that we will use to replace existing memory >>> device setup code during machine initialization. We'll enforce that the >>> size has to be > 0. >>> >>> Once all machines were converted, we'll only allocate ms->device_memory >>> if the size > 0. >>> >>> Signed-off-by: David Hildenbrand <david@redhat.com> >>> --- >>> hw/mem/memory-device.c | 14 ++++++++++++++ >>> include/hw/mem/memory-device.h | 2 ++ >>> 2 files changed, 16 insertions(+) >> >> >>> diff --git a/include/hw/mem/memory-device.h b/include/hw/mem/memory-device.h >>> index 48d2611fc5..6e8a10e2f5 100644 >>> --- a/include/hw/mem/memory-device.h >>> +++ b/include/hw/mem/memory-device.h >>> @@ -16,6 +16,7 @@ >>> #include "hw/qdev-core.h" >>> #include "qapi/qapi-types-machine.h" >>> #include "qom/object.h" >>> +#include "exec/hwaddr.h" >>> >>> #define TYPE_MEMORY_DEVICE "memory-device" >>> >>> @@ -113,5 +114,6 @@ void memory_device_plug(MemoryDeviceState *md, MachineState *ms); >>> void memory_device_unplug(MemoryDeviceState *md, MachineState *ms); >>> uint64_t memory_device_get_region_size(const MemoryDeviceState *md, >>> Error **errp); >>> +void memory_devices_init(MachineState *ms, hwaddr base, uint64_t size); >> >> >> While hw/mem/memory-device.c contains the implementation, all callers >> are expected to be around Machine object, right? Thus maybe this _init() >> could be declared in "hw/boards.h", already included by machines >> (eventually renaming as machine_init_memory_devices() ). Then machines >> implementation don't have to all include "hw/mem/memory-device.h". > > Some (arm, i386) want to call the hotplug handle functions either way, > so they'll still have to include that header. > > But sure, we can rename to machine_init_memory_devices() and declare it > include/hw/boards.h! FWIW, I went with "machine_memory_devices_init()", to mach the style of "machine_run_board_init()".
diff --git a/hw/mem/memory-device.c b/hw/mem/memory-device.c index 49f86ec8a8..2197dcf356 100644 --- a/hw/mem/memory-device.c +++ b/hw/mem/memory-device.c @@ -17,6 +17,7 @@ #include "qemu/range.h" #include "hw/virtio/vhost.h" #include "sysemu/kvm.h" +#include "exec/address-spaces.h" #include "trace.h" static gint memory_device_addr_sort(gconstpointer a, gconstpointer b) @@ -328,6 +329,19 @@ uint64_t memory_device_get_region_size(const MemoryDeviceState *md, return memory_region_size(mr); } +void memory_devices_init(MachineState *ms, hwaddr base, uint64_t size) +{ + g_assert(size); + g_assert(!ms->device_memory); + ms->device_memory = g_new0(DeviceMemoryState, 1); + ms->device_memory->base = base; + + memory_region_init(&ms->device_memory->mr, OBJECT(ms), "device-memory", + size); + memory_region_add_subregion(get_system_memory(), ms->device_memory->base, + &ms->device_memory->mr); +} + static const TypeInfo memory_device_info = { .name = TYPE_MEMORY_DEVICE, .parent = TYPE_INTERFACE, diff --git a/include/hw/mem/memory-device.h b/include/hw/mem/memory-device.h index 48d2611fc5..6e8a10e2f5 100644 --- a/include/hw/mem/memory-device.h +++ b/include/hw/mem/memory-device.h @@ -16,6 +16,7 @@ #include "hw/qdev-core.h" #include "qapi/qapi-types-machine.h" #include "qom/object.h" +#include "exec/hwaddr.h" #define TYPE_MEMORY_DEVICE "memory-device" @@ -113,5 +114,6 @@ void memory_device_plug(MemoryDeviceState *md, MachineState *ms); void memory_device_unplug(MemoryDeviceState *md, MachineState *ms); uint64_t memory_device_get_region_size(const MemoryDeviceState *md, Error **errp); +void memory_devices_init(MachineState *ms, hwaddr base, uint64_t size); #endif
Let's intrduce a new helper that we will use to replace existing memory device setup code during machine initialization. We'll enforce that the size has to be > 0. Once all machines were converted, we'll only allocate ms->device_memory if the size > 0. Signed-off-by: David Hildenbrand <david@redhat.com> --- hw/mem/memory-device.c | 14 ++++++++++++++ include/hw/mem/memory-device.h | 2 ++ 2 files changed, 16 insertions(+)